К статье
Практический материал

Разработка и Конфигурация · 10 мин

Где хранятся дополнительные реквизиты в 1С

Разбираем, где физически хранятся дополнительные реквизиты и сведения в 1С: табличные части, регистры сведений, запросы и типичные ошибки при поиске.

Дополнительные реквизиты и сведения в типовых конфигурациях 1С (БСП — Библиотека стандартных подсистем) не являются обычными полями объекта метаданных. Они создаются пользователем в режиме предприятия через «Администрирование → Общие настройки → Дополнительные реквизиты и сведения», без изменения конфигурации. Поэтому искать их в структуре справочника или документа в конфигураторе бесполезно — там их нет.

Физически значения дополнительных реквизитов хранятся в специальных служебных объектах: табличной части объекта и плане видов характеристик «ДополнительныеРеквизитыИСведения», а дополнительные сведения — в отдельном регистре сведений. Понимание этой схемы необходимо при написании запросов, выгрузке данных, интеграции и поиске ошибок.

Ниже разобрано, где именно лежат описания и значения доп. реквизитов, как обратиться к ним из запроса и кода, чем реквизиты отличаются от сведений и какие ошибки встречаются чаще всего.

Общая схема хранения: три уровня данных

Механизм дополнительных реквизитов в БСП построен на трёх уровнях. Первый уровень — наборы свойств: справочник «НаборыДополнительныхРеквизитовИСведений», который определяет, какие реквизиты доступны для конкретного вида объектов (например, отдельный набор для «Номенклатуры», отдельный для «Контрагентов»).

Второй уровень — сами описания свойств. Каждый дополнительный реквизит или сведение — это элемент плана видов характеристик «ДополнительныеРеквизитыИСведения». Здесь хранится заголовок, тип значения, признак обязательности и другие настройки свойства.

Третий уровень — значения. Для реквизитов значения лежат в табличной части объекта, для сведений — в регистре сведений. Это принципиальное различие, которое определяет способ доступа к данным.

Где хранятся описания дополнительных реквизитов

Все созданные пользователем свойства физически являются элементами плана видов характеристик ДополнительныеРеквизитыИСведения. Открыть их список можно в режиме предприятия через форму настройки дополнительных реквизитов, а программно — обычным запросом к этому ПВХ.

У элемента ПВХ есть важные служебные реквизиты: ТипЗначения (описание типов значения свойства), Заголовок, ВладелецДополнительныхЗначений (если значения берутся из иерархического списка), а также табличная часть с дополнительными настройками. Имя свойства для программного доступа формируется автоматически и хранится в реквизите Имя — именно его удобно использовать при поиске свойства по имени.

Привязка свойства к конкретному типу объектов выполняется через табличную часть набора свойств: у набора есть две табличные части — «ДополнительныеРеквизиты» и «ДополнительныеСведения», куда и добавляются ссылки на элементы ПВХ.

Где хранятся значения дополнительных реквизитов

Значения дополнительных реквизитов хранятся непосредственно в объекте — в табличной части с именем ДополнительныеРеквизиты. Она есть у справочников и документов, к которым подключён механизм БСП. Табличная часть содержит две ключевые колонки: Свойство (ссылка на элемент ПВХ) и Значение (составной тип).

Так как табличная часть принадлежит объекту, значения реквизитов записываются вместе с ним в одной транзакции. Это значит, что при записи номенклатуры или контрагента значения доп. реквизитов сохраняются одновременно с основными данными и попадают в планы обмена вместе с объектом.

Получить значение в запросе можно соединением с табличной частью:

bsl
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Товар,
	ДопРеквизиты.Значение КАК ЗначениеСвойства
ИЗ
	Справочник.Номенклатура КАК Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
		ПО ДопРеквизиты.Ссылка = Номенклатура.Ссылка
			И ДопРеквизиты.Свойство = &Свойство

Для отчётов на СКД в типовых конфигурациях дополнительные реквизиты обычно доступны автоматически — подсистема свойств добавляет их в схему компоновки, и пользователь может вывести их в отчёт без доработок.

Где хранятся дополнительные сведения

Дополнительные сведения устроены иначе. Их значения хранятся в регистре сведений ДополнительныеСведения с измерением Объект (ссылка на владельца) и измерением Свойство (ссылка на ПВХ), а значение лежит в ресурсе Значение.

Из-за хранения в отдельном регистре сведения не записываются вместе с объектом: сохранение выполняется отдельной записью в регистр. Это влияет на обмены данными — в некоторых планах обмена регистр «ДополнительныеСведения» нужно включать в состав отдельно, иначе сведения не перенесутся.

Запрос к сведениям строится через регистр, а не через табличную часть:

bsl
ВЫБРАТЬ
	ДопСведения.Объект КАК Объект,
	ДопСведения.Значение КАК Значение
ИЗ
	РегистрСведений.ДополнительныеСведения КАК ДопСведения
ГДЕ
	ДопСведения.Свойство = &Свойство

Реквизиты против сведений

Дополнительные реквизиты

Хранятся в табличной части объекта, видны на форме, пишутся с объектом, доступны в отборах списков. Подходят для часто используемых характеристик.

Дополнительные сведения

Хранятся в регистре сведений «ДополнительныеСведения», на форме обычно выведены в отдельной группе, пишутся отдельно. Подходят для редко меняющейся справочной информации.

Как найти значение программно

Для прикладного кода в БСП предусмотрены программные интерфейсы модуля УправлениеСвойствами (в старых версиях — Свойства / УправлениеСвойствамиСлужебный). Типовые функции позволяют получить значения свойств объекта без прямого обращения к табличным частям и регистрам, что устойчивее к изменениям структуры в новых релизах.

При прямом обращении к данным сначала нужно найти само свойство — элемент ПВХ по имени или по заголовку. Надёжнее искать по реквизиту Имя, так как заголовок пользователь может переименовать. После получения ссылки на свойство выполняется запрос к табличной части объекта или к регистру сведений.

Как найти, где лежит значение конкретного свойства
  1. 1
    Откройте «Администрирование → Общие настройки → Дополнительные реквизиты и сведения» и найдите нужное свойство в списке.
  2. 2
    Посмотрите, в какой колонке оно находится: «Дополнительные реквизиты» или «Дополнительные сведения» — это определяет место хранения.
  3. 3
    Для реквизита значение ищите в табличной части «ДополнительныеРеквизиты» объекта по колонке «Свойство».
  4. 4
    Для сведения — в регистре сведений «ДополнительныеСведения» по измерениям «Объект» и «Свойство».
  5. 5
    Проверьте результат, открыв карточку объекта и сверив отображаемое значение с результатом запроса.

Особенности в файловой и клиент-серверной базе

На логическом уровне структура хранения одинакова в обоих режимах — отличаются только физические таблицы СУБД. В клиент-серверном варианте каждому объекту метаданных соответствуют таблицы SQL с автогенерированными именами вида _Reference123, _Reference123_VT456 для табличных частей и _InfoRg789 для регистров сведений.

Соответствие таблиц объектам метаданных можно получить штатной функцией ПолучитьСтруктуруХраненияБазыДанных(). Прямые запросы к SQL-таблицам допустимы только для чтения и только при полном понимании структуры: запись напрямую в таблицы нарушает целостность данных и лишает поддержки.

Типичные ошибки при поиске и работе

Самая частая ошибка — поиск дополнительного реквизита в конфигураторе среди реквизитов объекта. Его там нет по определению: механизм работает без изменения метаданных. Вторая типичная ошибка — путаница между реквизитами и сведениями: запрос к табличной части не вернёт значения сведений и наоборот.

Также разработчики нередко ищут свойство по заголовку, который пользователь уже переименовал, или забывают, что у разных наборов свойств могут существовать одноимённые свойства для разных видов объектов. При выгрузке через обмен данными сведения теряются, если регистр «ДополнительныеСведения» не включён в состав плана обмена.

Типичные ошибки
01
Искать значение сведения в табличной части объекта — сведения лежат в регистре сведений, запрос вернёт пустой результат.
02
Искать свойство по заголовку вместо реквизита «Имя» — после переименования пользователем код перестаёт работать.
03
Не включить регистр «ДополнительныеСведения» в план обмена — сведения не переносятся в другую базу.
04
Изменять значения напрямую в SQL-таблицах — нарушается целостность ссылок и составных типов.
Контрольные точки

Как проверить результат

Значение из запроса совпадает с формой объекта
Норма

Значения идентичны

Тревожный признак

Запрос обращается не к тому хранилищу (реквизит/сведение перепутаны)

Свойство найдено по имени
Норма

Возвращается ровно один элемент ПВХ

Тревожный признак

Несколько элементов или пусто — проверьте набор свойств и имя

Обмен данными
Норма

Сведения появляются в базе-приёмнике

Тревожный признак

Регистр не включён в состав плана обмена

Часто задаваемые вопросы

Можно ли увидеть дополнительные реквизиты в конфигураторе?

Нет. Дополнительные реквизиты создаются в режиме предприятия и хранятся как данные в плане видов характеристик и табличных частях. В конфигураторе видна только сама инфраструктура: ПВХ «ДополнительныеРеквизитыИСведения», табличная часть «ДополнительныеРеквизиты» у объектов и регистр «ДополнительныеСведения».

Чем дополнительный реквизит отличается от дополнительного сведения?

Реквизит хранится в табличной части объекта, отображается на его форме в основной группе и доступен в отборах динамических списков. Сведение хранится в отдельном регистре сведений, записывается отдельно от объекта и обычно используется для редко меняющейся справочной информации.

Как вывести дополнительный реквизит в отчёт?

В типовых конфигурациях на СКД дополнительные реквизиты и сведения подключаются к отчётам автоматически — их можно перетащить в настройки отчёта из списка доступных полей. В самописном отчёте нужно добавить соединение с табличной частью объекта или регистром сведений через параметр-свойство.

Почему в запросе значение доп. реквизита пустое, хотя на форме оно заполнено?

Чаще всего запрос обращается не к тому хранилищу: реквизит ищется в регистре сведений или наоборот. Также проверьте, что в условии соединения используется правильная ссылка на свойство — у разных видов объектов могут быть разные элементы ПВХ с одинаковым названием.

Переносятся ли дополнительные реквизиты при обмене между базами?

Значения реквизитов переносятся вместе с объектом, так как входят в его табличную часть, но сами свойства и наборы должны существовать в обеих базах. Значения сведений перенесутся только если регистр «ДополнительныеСведения» включён в состав плана обмена.

Можно ли найти физическую SQL-таблицу, где лежат значения?

Да, функция ПолучитьСтруктуруХраненияБазыДанных() возвращает соответствие объектов метаданных и таблиц СУБД, включая табличные части и регистры сведений. Использовать это стоит только для чтения и диагностики — запись напрямую в таблицы недопустима.

Итог

Что важно запомнить

Описания свойств — в ПВХ «ДополнительныеРеквизитыИСведения», значения реквизитов — в табличной части объекта, значения сведений — в регистре сведений «ДополнительныеСведения». Свойство ищите по имени, а не по заголовку, и не изменяйте данные напрямую в SQL-таблицах.