Разработка и Конфигурация · 10 мин
Где хранятся дополнительные реквизиты в 1С
Разбираем, где физически хранятся дополнительные реквизиты и сведения в 1С: табличные части, регистры сведений, запросы и типичные ошибки при поиске.
Дополнительные реквизиты и сведения в типовых конфигурациях 1С (БСП — Библиотека стандартных подсистем) не являются обычными полями объекта метаданных. Они создаются пользователем в режиме предприятия через «Администрирование → Общие настройки → Дополнительные реквизиты и сведения», без изменения конфигурации. Поэтому искать их в структуре справочника или документа в конфигураторе бесполезно — там их нет.
Физически значения дополнительных реквизитов хранятся в специальных служебных объектах: табличной части объекта и плане видов характеристик «ДополнительныеРеквизитыИСведения», а дополнительные сведения — в отдельном регистре сведений. Понимание этой схемы необходимо при написании запросов, выгрузке данных, интеграции и поиске ошибок.
Ниже разобрано, где именно лежат описания и значения доп. реквизитов, как обратиться к ним из запроса и кода, чем реквизиты отличаются от сведений и какие ошибки встречаются чаще всего.
Общая схема хранения: три уровня данных
Механизм дополнительных реквизитов в БСП построен на трёх уровнях. Первый уровень — наборы свойств: справочник «НаборыДополнительныхРеквизитовИСведений», который определяет, какие реквизиты доступны для конкретного вида объектов (например, отдельный набор для «Номенклатуры», отдельный для «Контрагентов»).
Второй уровень — сами описания свойств. Каждый дополнительный реквизит или сведение — это элемент плана видов характеристик «ДополнительныеРеквизитыИСведения». Здесь хранится заголовок, тип значения, признак обязательности и другие настройки свойства.
Третий уровень — значения. Для реквизитов значения лежат в табличной части объекта, для сведений — в регистре сведений. Это принципиальное различие, которое определяет способ доступа к данным.
Где хранятся описания дополнительных реквизитов
Все созданные пользователем свойства физически являются элементами плана видов характеристик ДополнительныеРеквизитыИСведения. Открыть их список можно в режиме предприятия через форму настройки дополнительных реквизитов, а программно — обычным запросом к этому ПВХ.
У элемента ПВХ есть важные служебные реквизиты: ТипЗначения (описание типов значения свойства), Заголовок, ВладелецДополнительныхЗначений (если значения берутся из иерархического списка), а также табличная часть с дополнительными настройками. Имя свойства для программного доступа формируется автоматически и хранится в реквизите Имя — именно его удобно использовать при поиске свойства по имени.
Привязка свойства к конкретному типу объектов выполняется через табличную часть набора свойств: у набора есть две табличные части — «ДополнительныеРеквизиты» и «ДополнительныеСведения», куда и добавляются ссылки на элементы ПВХ.
Где хранятся значения дополнительных реквизитов
Значения дополнительных реквизитов хранятся непосредственно в объекте — в табличной части с именем ДополнительныеРеквизиты. Она есть у справочников и документов, к которым подключён механизм БСП. Табличная часть содержит две ключевые колонки: Свойство (ссылка на элемент ПВХ) и Значение (составной тип).
Так как табличная часть принадлежит объекту, значения реквизитов записываются вместе с ним в одной транзакции. Это значит, что при записи номенклатуры или контрагента значения доп. реквизитов сохраняются одновременно с основными данными и попадают в планы обмена вместе с объектом.
Получить значение в запросе можно соединением с табличной частью:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
ДопРеквизиты.Значение КАК ЗначениеСвойства
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
ПО ДопРеквизиты.Ссылка = Номенклатура.Ссылка
И ДопРеквизиты.Свойство = &СвойствоДля отчётов на СКД в типовых конфигурациях дополнительные реквизиты обычно доступны автоматически — подсистема свойств добавляет их в схему компоновки, и пользователь может вывести их в отчёт без доработок.
Где хранятся дополнительные сведения
Дополнительные сведения устроены иначе. Их значения хранятся в регистре сведений ДополнительныеСведения с измерением Объект (ссылка на владельца) и измерением Свойство (ссылка на ПВХ), а значение лежит в ресурсе Значение.
Из-за хранения в отдельном регистре сведения не записываются вместе с объектом: сохранение выполняется отдельной записью в регистр. Это влияет на обмены данными — в некоторых планах обмена регистр «ДополнительныеСведения» нужно включать в состав отдельно, иначе сведения не перенесутся.
Запрос к сведениям строится через регистр, а не через табличную часть:
ВЫБРАТЬ
ДопСведения.Объект КАК Объект,
ДопСведения.Значение КАК Значение
ИЗ
РегистрСведений.ДополнительныеСведения КАК ДопСведения
ГДЕ
ДопСведения.Свойство = &СвойствоРеквизиты против сведений
Хранятся в табличной части объекта, видны на форме, пишутся с объектом, доступны в отборах списков. Подходят для часто используемых характеристик.
Хранятся в регистре сведений «ДополнительныеСведения», на форме обычно выведены в отдельной группе, пишутся отдельно. Подходят для редко меняющейся справочной информации.
Как найти значение программно
Для прикладного кода в БСП предусмотрены программные интерфейсы модуля УправлениеСвойствами (в старых версиях — Свойства / УправлениеСвойствамиСлужебный). Типовые функции позволяют получить значения свойств объекта без прямого обращения к табличным частям и регистрам, что устойчивее к изменениям структуры в новых релизах.
При прямом обращении к данным сначала нужно найти само свойство — элемент ПВХ по имени или по заголовку. Надёжнее искать по реквизиту Имя, так как заголовок пользователь может переименовать. После получения ссылки на свойство выполняется запрос к табличной части объекта или к регистру сведений.
- 1Откройте «Администрирование → Общие настройки → Дополнительные реквизиты и сведения» и найдите нужное свойство в списке.
- 2Посмотрите, в какой колонке оно находится: «Дополнительные реквизиты» или «Дополнительные сведения» — это определяет место хранения.
- 3Для реквизита значение ищите в табличной части «ДополнительныеРеквизиты» объекта по колонке «Свойство».
- 4Для сведения — в регистре сведений «ДополнительныеСведения» по измерениям «Объект» и «Свойство».
- 5Проверьте результат, открыв карточку объекта и сверив отображаемое значение с результатом запроса.
Особенности в файловой и клиент-серверной базе
На логическом уровне структура хранения одинакова в обоих режимах — отличаются только физические таблицы СУБД. В клиент-серверном варианте каждому объекту метаданных соответствуют таблицы SQL с автогенерированными именами вида _Reference123, _Reference123_VT456 для табличных частей и _InfoRg789 для регистров сведений.
Соответствие таблиц объектам метаданных можно получить штатной функцией ПолучитьСтруктуруХраненияБазыДанных(). Прямые запросы к SQL-таблицам допустимы только для чтения и только при полном понимании структуры: запись напрямую в таблицы нарушает целостность данных и лишает поддержки.
Типичные ошибки при поиске и работе
Самая частая ошибка — поиск дополнительного реквизита в конфигураторе среди реквизитов объекта. Его там нет по определению: механизм работает без изменения метаданных. Вторая типичная ошибка — путаница между реквизитами и сведениями: запрос к табличной части не вернёт значения сведений и наоборот.
Также разработчики нередко ищут свойство по заголовку, который пользователь уже переименовал, или забывают, что у разных наборов свойств могут существовать одноимённые свойства для разных видов объектов. При выгрузке через обмен данными сведения теряются, если регистр «ДополнительныеСведения» не включён в состав плана обмена.
Как проверить результат
Значения идентичны
Запрос обращается не к тому хранилищу (реквизит/сведение перепутаны)
Возвращается ровно один элемент ПВХ
Несколько элементов или пусто — проверьте набор свойств и имя
Сведения появляются в базе-приёмнике
Регистр не включён в состав плана обмена
Часто задаваемые вопросы
Можно ли увидеть дополнительные реквизиты в конфигураторе?
Нет. Дополнительные реквизиты создаются в режиме предприятия и хранятся как данные в плане видов характеристик и табличных частях. В конфигураторе видна только сама инфраструктура: ПВХ «ДополнительныеРеквизитыИСведения», табличная часть «ДополнительныеРеквизиты» у объектов и регистр «ДополнительныеСведения».
Чем дополнительный реквизит отличается от дополнительного сведения?
Реквизит хранится в табличной части объекта, отображается на его форме в основной группе и доступен в отборах динамических списков. Сведение хранится в отдельном регистре сведений, записывается отдельно от объекта и обычно используется для редко меняющейся справочной информации.
Как вывести дополнительный реквизит в отчёт?
В типовых конфигурациях на СКД дополнительные реквизиты и сведения подключаются к отчётам автоматически — их можно перетащить в настройки отчёта из списка доступных полей. В самописном отчёте нужно добавить соединение с табличной частью объекта или регистром сведений через параметр-свойство.
Почему в запросе значение доп. реквизита пустое, хотя на форме оно заполнено?
Чаще всего запрос обращается не к тому хранилищу: реквизит ищется в регистре сведений или наоборот. Также проверьте, что в условии соединения используется правильная ссылка на свойство — у разных видов объектов могут быть разные элементы ПВХ с одинаковым названием.
Переносятся ли дополнительные реквизиты при обмене между базами?
Значения реквизитов переносятся вместе с объектом, так как входят в его табличную часть, но сами свойства и наборы должны существовать в обеих базах. Значения сведений перенесутся только если регистр «ДополнительныеСведения» включён в состав плана обмена.
Можно ли найти физическую SQL-таблицу, где лежат значения?
Да, функция ПолучитьСтруктуруХраненияБазыДанных() возвращает соответствие объектов метаданных и таблиц СУБД, включая табличные части и регистры сведений. Использовать это стоит только для чтения и диагностики — запись напрямую в таблицы недопустима.
Что важно запомнить
Описания свойств — в ПВХ «ДополнительныеРеквизитыИСведения», значения реквизитов — в табличной части объекта, значения сведений — в регистре сведений «ДополнительныеСведения». Свойство ищите по имени, а не по заголовку, и не изменяйте данные напрямую в SQL-таблицах.