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

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

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

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

Дополнительные реквизиты и дополнительные сведения в 1С — это механизм, позволяющий расширять объекты конфигурации без изменения её структуры. Пользователь добавляет, например, поле «Цвет» к справочнику «Номенклатура», и оно начинает работать в формах, отчётах и печатных формах. Но при этом в базе данных не создаётся новая колонка — данные хранятся в универсальных структурах, общих для всех объектов.

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

Ниже разобрано, где именно лежат значения, как выглядит структура хранения на уровне таблиц СУБД, как получить данные запросом и какие ограничения нужно учитывать при проектировании.

Два механизма: реквизиты и сведения — в чём разница

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

Дополнительные сведения не выводятся на форму объекта напрямую — они доступны через команду «Ещё → Дополнительные сведения» и хранятся отдельно. Записать сведение можно, даже если сам объект заблокирован другим пользователем, потому что объект при этом не модифицируется. Это удобно для служебных пометок, которые не должны менять данные объекта.

Реквизиты или сведения

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

Нужен на форме объекта, участвует в заполнении и отборах. Хранится в табличной части объекта, при записи блокирует объект.

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

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

Обычный реквизит конфигурации

Нужен в индексах, сложных запросах с высокой нагрузкой, типовой логике. Требует изменения конфигурации и обновления структуры БД.

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

У объектов, к которым подключены дополнительные реквизиты (справочники «Номенклатура», «Контрагенты», документы и т.д.), появляется табличная часть «ДополнительныеРеквизиты». Каждая строка этой табличной части содержит:

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

На уровне СУБД это отдельная таблица, связанная с таблицей объекта по ссылке. Например, для справочника «Номенклатура» в MS SQL Server это будет таблица вида _Reference123_VT456, где в поле ссылки хранится идентификатор элемента справочника, а в полях свойства и значения — идентификаторы и данные. Именно поэтому при просмотре структуры базы «в лоб» новых колонок в основной таблице вы не найдёте.

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

Дополнительные сведения хранятся централизованно — в регистре сведений «ДополнительныеСведения». Структура регистра:

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

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

Где хранятся описания свойств и наборы

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

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

Значения реквизитовТабличная часть объекта

ДополнительныеРеквизиты внутри справочника или документа

Значения сведенийРегистр сведений

ДополнительныеСведения: объект + свойство + значение

Описания свойствПлан видов характеристик

ДополнительныеРеквизитыИСведения: имя, тип, обязательность

Привязка к объектамСправочник наборов

НаборыДополнительныхРеквизитовИСведений

Как получить значения запросом

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

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

Для дополнительных сведений запрос аналогичен, только источником соединения выступает регистр:

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

Удобная практика — задавать свойству «Имя» (в форме свойства, поле для разработчиков) и получать его через УправлениеСвойствами.СвойствоПоДополнительнойИнформации() или поиском по имени в ПВХ. Это надёжнее, чем искать по заголовку, который пользователь может переименовать.

Запись значений программно

Дополнительный реквизит записывается через объект: нужно получить объект методом ПолучитьОбъект(), найти или добавить строку в табличной части «ДополнительныеРеквизиты», установить значение и записать объект. Учтите: запись объекта вызывает все его обработчики и блокировки.

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

Программная запись дополнительного сведения
  1. 1
    Найдите свойство в ПВХ «ДополнительныеРеквизитыИСведения» по имени или заголовку
  2. 2
    Создайте менеджер записи: РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи()
  3. 3
    Заполните Объект, Свойство и Значение с учётом типа свойства
  4. 4
    Вызовите Записать() и проверьте результат запросом или через «Ещё → Дополнительные сведения»

Ограничения и типичные ошибки

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

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

Типичные ошибки
01
Искать значения сведений в табличной части объекта — сведения лежат в регистре, запрос вернёт пустой результат
02
Отбирать свойство по заголовку — после переименования пользователем запрос перестаёт работать; используйте поле «Имя»
03
Добавлять дополнительный реквизит там, где нужен индекс и частые отборы — получите деградацию производительности
04
Записывать сведение через запись объекта — лишние блокировки и срабатывание обработчиков объекта
05
Забыть привязать свойство к набору — реквизит создан, но не отображается у нужного вида объектов

Как проверить, что всё настроено правильно

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

Контрольные точки

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

Отображение в карточке объекта
Норма

Реквизит виден в группе «Дополнительные реквизиты», сведение — в списке сведений

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

Свойство создано, но не видно — проверьте набор и функциональную опцию «Дополнительные реквизиты и сведения»

Строки в табличной части / регистре
Норма

Запрос возвращает строки с нужным свойством и значением

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

Пусто — значение не записано или ищете не в том хранилище

Тип значения
Норма

Значение соответствует типу свойства, ссылки не битые

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

Пустой тип или «Объект не найден» — нарушена целостность

Отбор в списке
Норма

Отбор по доп. реквизиту в динамическом списке работает

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

Отбор недоступен — у свойства не включён показ в списках или это сведение

FAQ

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

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

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

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

Можно ли использовать дополнительные реквизиты в отчётах на СКД?

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

Как надёжно найти свойство в коде, если пользователь может его переименовать?

Используйте поле «Имя» свойства (задаётся в форме свойства для разработчиков) и ищите элемент ПВХ по имени, а не по заголовку. Заголовок пользователь меняет свободно, имя остаётся стабильным.

Что выбрать, если по значению нужны частые отборы в большом списке?

Дополнительный реквизит в этом случае не оптимален: отбор идёт соединением без специализированного индекса. Правильнее добавить обычный реквизит через расширение конфигурации — он будет храниться колонкой основной таблицы и индексироваться.

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

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

Итог

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

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