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

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

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

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

Дополнительные реквизиты и дополнительные сведения в типовых конфигурациях 1С (УТ 11, ERP, Бухгалтерия 3.0, ЗУП и других на БСП) не создают новых колонок в таблицах справочников и документов. Их значения хранятся отдельно: дополнительные реквизиты — в специальной табличной части самого объекта, дополнительные сведения — в регистре сведений «Дополнительные сведения». Именно поэтому прямой запрос к таблице справочника этих значений не покажет.

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

Как устроен механизм дополнительных реквизитов и сведений

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

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

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

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

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

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

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

В запросе к таким данным обращаются через точку и табличную часть:

ВЫБРАТЬ

Номенклатура.Ссылка КАК Товар,

ДопРеквизиты.Свойство КАК Свойство,

ДопРеквизиты.Значение КАК Значение

ИЗ

Справочник.Номенклатура КАК Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты

ПО Номенклатура.Ссылка = ДопРеквизиты.Ссылка

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

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

Дополнительные сведения физически отделены от объекта. Они записываются в регистр сведений «ДополнительныеСведения» со структурой:

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

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

Запрос к дополнительным сведениям выглядит так:

ВЫБРАТЬ

ДопСведения.Объект КАК Объект,

ДопСведения.Значение КАК Значение

ИЗ

РегистрСведений.ДополнительныеСведения КАК ДопСведения

ГДЕ

ДопСведения.Свойство = &Свойство

Сравнение: реквизит или сведение

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

КритерийДополнительный реквизитДополнительное сведение
Место храненияТабличная часть объектаРегистр сведений «ДополнительныеСведения»
ОтображениеНа форме объектаЧерез «Ещё — Дополнительные сведения»
Отбор в спискахПоддерживаетсяОграниченно
Запись без изменения объектаНет, объект записывается целикомДа, через менеджер записи регистра
Типовой вывод в отчётах СКДОбычно доступен автоматическиЧасто требует доработки запроса

Что выбрать

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

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

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

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

Как получить значения в запросах и СКД

Основная сложность — свойства хранятся в строках, а для отчёта их обычно нужно развернуть в колонки. Универсальный подход для запроса: соединение с отбором по конкретному свойству.

ВЫБРАТЬ

Номенклатура.Ссылка КАК Товар,

Цвет.Значение КАК Цвет,

Материал.Значение КАК Материал

ИЗ

Справочник.Номенклатура КАК Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК Цвет

ПО Номенклатура.Ссылка = Цвет.Ссылка

И Цвет.Свойство = &СвойствоЦвет

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК Материал

ПО Номенклатура.Ссылка = Материал.Ссылка

И Материал.Свойство = &СвойствоМатериал

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

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

Где посмотреть значения без программирования

Если задача — просто увидеть, что и где хранится, не обязательно писать код. В пользовательском режиме откройте карточку объекта: дополнительные реквизиты видны на форме в группе «Дополнительные реквизиты», сведения — по команде «Ещё — Дополнительные сведения». Состав самих свойств и наборы, к которым они привязаны, смотрятся в «Администрирование — Общие настройки — Дополнительные реквизиты и сведения».

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

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

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

Вторая группа проблем — производительность. Соединение с табличной частью или регистром сведений без отбора по конкретному свойству на больших базах заметно замедляет отчёты. Всегда накладывайте условие Свойство = &Свойство и передавайте параметром конкретную ссылку, а не отбирайте по заголовку свойства строкой.

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

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

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

Запрос к дополнительному реквизиту
Норма

Возвращает значения для элементов, где реквизит заполнен, и NULL для остальных

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

Пустой результат при заведомо заполненных значениях — вероятно, это сведение, а не реквизит

Отбор по свойству
Норма

Используется ссылка на элемент ПВХ, запрос работает после переименования свойства

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

Отбор по строке заголовка — ломается при смене названия

Отчёт на СКД
Норма

Каждое свойство выведено отдельным соединением, итоги не задваиваются

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

Суммы и количество строк в отчёте завышены кратно числу свойств

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

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

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

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

Чаще всего вы обращаетесь не к тому хранилищу: значение введено как дополнительное сведение (регистр сведений), а запрос построен к табличной части объекта, или наоборот. Проверьте, где именно заполнено значение — на форме объекта или в окне «Дополнительные сведения».

Как массово заполнить дополнительный реквизит у множества элементов?

Используйте типовую обработку «Групповое изменение реквизитов» (раздел «Администрирование»): она умеет работать с дополнительными реквизитами и сведениями. Для сложных алгоритмов пишут обработку через объектную модель — прямые SQL-запросы применять не следует.

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

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

Можно ли использовать дополнительные реквизиты в отборах динамических списков?

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

Что произойдёт со значениями, если удалить само свойство?

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

Итог

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

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