Разработка и Конфигурация · 12 мин
Где в 1С хранятся значения дополнительных реквизитов и сведений
Разбираем, где 1С хранит значения дополнительных реквизитов: табличные части объектов, регистр сведений, запросы через точку и СКД. Примеры кода и типичные ошибки.
Дополнительные реквизиты и дополнительные сведения в типовых конфигурациях 1С (УТ 11, ERP, Бухгалтерия 3.0, ЗУП и других на БСП) не создают новых колонок в таблицах справочников и документов. Их значения хранятся отдельно: дополнительные реквизиты — в специальной табличной части самого объекта, дополнительные сведения — в регистре сведений «Дополнительные сведения». Именно поэтому прямой запрос к таблице справочника этих значений не покажет.
Понимание механизма хранения нужно при написании запросов, построении отчётов на СКД, обменах данными и доработках. Ниже разобрано, где физически лежат значения, чем реквизиты отличаются от сведений, как правильно обращаться к ним в запросах и какие ошибки встречаются чаще всего.
Как устроен механизм дополнительных реквизитов и сведений
Механизм реализован в Библиотеке стандартных подсистем (БСП) и работает одинаково во всех типовых конфигурациях. Администратор или пользователь с нужными правами создаёт новый реквизит через «Администрирование — Общие настройки — Дополнительные реквизиты и сведения», не изменяя конфигурацию. При этом в метаданных ничего не добавляется — вся структура уже заложена разработчиками.
Описание каждого свойства (его имя, тип значения, заголовок, наборы, в которых оно используется) хранится в плане видов характеристик «ДополнительныеРеквизитыИСведения». Именно элемент этого ПВХ выступает ключом, к которому привязаны конкретные значения в объектах базы.
Принципиальное разделение такое: дополнительные реквизиты отображаются на форме объекта, участвуют в отборах списков и могут выводиться в отчёты типовыми средствами; дополнительные сведения доступны через кнопку «Ещё — Дополнительные сведения» и предназначены для редко используемой информации. Хранятся они по-разному, и это ключевой момент для запросов.
Где хранятся значения дополнительных реквизитов
У каждого объекта, к которому подключён механизм (справочники «Номенклатура», «Контрагенты», документы и т.д.), есть табличная часть «ДополнительныеРеквизиты». Она содержит минимум два ключевых поля:
- Свойство — ссылка на элемент ПВХ «ДополнительныеРеквизитыИСведения»;
- Значение — значение реквизита, тип соответствует типу, заданному в свойстве.
Физически на уровне СУБД это отдельная таблица табличной части, связанная с таблицей объекта по ссылке. Поэтому значение дополнительного реквизита «живёт» внутри объекта: при копировании элемента оно копируется, при пометке на удаление — удаляется вместе с ним, при обмене переносится вместе с объектом.
В запросе к таким данным обращаются через точку и табличную часть:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
ДопРеквизиты.Свойство КАК Свойство,
ДопРеквизиты.Значение КАК Значение
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
ПО Номенклатура.Ссылка = ДопРеквизиты.Ссылка
Обратите внимание: если у объекта несколько дополнительных реквизитов, соединение с табличной частью размножит строки. Для вывода нескольких свойств в колонки нужно либо делать отдельное соединение на каждое свойство с отбором по конкретной ссылке на свойство, либо группировать и сворачивать значения.
Где хранятся значения дополнительных сведений
Дополнительные сведения физически отделены от объекта. Они записываются в регистр сведений «ДополнительныеСведения» со структурой:
- измерение Объект — ссылка на элемент справочника или документ;
- измерение Свойство — ссылка на ПВХ «ДополнительныеРеквизитыИСведения»;
- ресурс Значение — собственно данные.
Из-за хранения в регистре у сведений есть важные особенности. Значение существует независимо от заполнения формы объекта — его можно записать программно, не открывая и не изменяя сам объект. При удалении объекта записи регистра по нему удаляются механизмами БСП, но при обменах и конвертациях сведения требуют отдельного внимания: не всякая настройка синхронизации переносит этот регистр.
Запрос к дополнительным сведениям выглядит так:
ВЫБРАТЬ
ДопСведения.Объект КАК Объект,
ДопСведения.Значение КАК Значение
ИЗ
РегистрСведений.ДополнительныеСведения КАК ДопСведения
ГДЕ
ДопСведения.Свойство = &Свойство
Сравнение: реквизит или сведение
Выбор между дополнительным реквизитом и сведением определяет не только интерфейс, но и способ хранения, что критично для отчётов и интеграций.
| Критерий | Дополнительный реквизит | Дополнительное сведение |
|---|---|---|
| Место хранения | Табличная часть объекта | Регистр сведений «ДополнительныеСведения» |
| Отображение | На форме объекта | Через «Ещё — Дополнительные сведения» |
| Отбор в списках | Поддерживается | Ограниченно |
| Запись без изменения объекта | Нет, объект записывается целиком | Да, через менеджер записи регистра |
| Типовой вывод в отчётах СКД | Обычно доступен автоматически | Часто требует доработки запроса |
Что выбрать
Подходит для данных, которые нужны ежедневно: отборы в списках, печатные формы, типовые отчёты. Ограничение — объект перезаписывается целиком при изменении.
Подходит для справочной информации, которую редко смотрят и не фильтруют по ней списки: примечания, внешние идентификаторы. Ограничение — слабее поддержка в типовых отборах.
Как получить значения в запросах и СКД
Основная сложность — свойства хранятся в строках, а для отчёта их обычно нужно развернуть в колонки. Универсальный подход для запроса: соединение с отбором по конкретному свойству.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Товар,
Цвет.Значение КАК Цвет,
Материал.Значение КАК Материал
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК Цвет
ПО Номенклатура.Ссылка = Цвет.Ссылка
И Цвет.Свойство = &СвойствоЦвет
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК Материал
ПО Номенклатура.Ссылка = Материал.Ссылка
И Материал.Свойство = &СвойствоМатериал
В СКД типовые конфигурации часто уже содержат готовые наборы данных с дополнительными реквизитами — в отчётах по номенклатуре или контрагентам дополнительные реквизиты доступны как поля без доработки. Если нужного поля нет, в схему компоновки добавляют связь через характеристики или дорабатывают запрос набора данных по приведённому шаблону.
Программно значение дополнительного реквизита удобнее читать через функции БСП, например ДополнительныеРеквизитыИСведения.ЗначениеСвойства() в некоторых версиях библиотеки, либо напрямую через объект: перебрать табличную часть Объект.ДополнительныеРеквизиты и найти строку по свойству.
Где посмотреть значения без программирования
Если задача — просто увидеть, что и где хранится, не обязательно писать код. В пользовательском режиме откройте карточку объекта: дополнительные реквизиты видны на форме в группе «Дополнительные реквизиты», сведения — по команде «Ещё — Дополнительные сведения». Состав самих свойств и наборы, к которым они привязаны, смотрятся в «Администрирование — Общие настройки — Дополнительные реквизиты и сведения».
В режиме конфигуратора структуру видно по объекту метаданных: у справочника «Номенклатура» есть табличная часть «ДополнительныеРеквизиты», в дереве конфигурации присутствуют план видов характеристик и регистр сведений с соответствующими именами. Для анализа физических таблиц СУБД можно воспользоваться функцией «ПолучитьСтруктуруХраненияБазыДанных()» — она покажет соответствие таблиц SQL объектам конфигурации.
Типичные ошибки и ограничения
Самая частая ошибка разработчика — искать значения дополнительных реквизитов как обычные поля объекта в запросе. Запрос Справочник.Номенклатура с обращением к несуществующему полю просто не скомпилируется, но смешение реквизитов и сведений даёт более коварный результат: запрос выполняется, но возвращает пустые значения, потому что данные лежат в другом хранилище.
Вторая группа проблем — производительность. Соединение с табличной частью или регистром сведений без отбора по конкретному свойству на больших базах заметно замедляет отчёты. Всегда накладывайте условие Свойство = &Свойство и передавайте параметром конкретную ссылку, а не отбирайте по заголовку свойства строкой.
Третья проблема — обмены. При настройке синхронизации между конфигурациями дополнительные реквизиты и сведения требуют сопоставления свойств по обеим сторонам. Если свойство есть в одной базе и отсутствует в другой, значение при обмене теряется без предупреждений.
Как проверить результат
Возвращает значения для элементов, где реквизит заполнен, и NULL для остальных
Пустой результат при заведомо заполненных значениях — вероятно, это сведение, а не реквизит
Используется ссылка на элемент ПВХ, запрос работает после переименования свойства
Отбор по строке заголовка — ломается при смене названия
Каждое свойство выведено отдельным соединением, итоги не задваиваются
Суммы и количество строк в отчёте завышены кратно числу свойств
Часто задаваемые вопросы
Можно ли добавить дополнительный реквизит сразу всем документам?
Нет. Наборы дополнительных реквизитов привязаны к конкретным видам объектов (например, «Номенклатура», «Реализация товаров и услуг»). Свойство добавляется в набор конкретного вида, и для каждого вида документов его нужно подключать отдельно через «Дополнительные реквизиты и сведения».
Почему в запросе значение дополнительного реквизита пустое, хотя в карточке оно заполнено?
Чаще всего вы обращаетесь не к тому хранилищу: значение введено как дополнительное сведение (регистр сведений), а запрос построен к табличной части объекта, или наоборот. Проверьте, где именно заполнено значение — на форме объекта или в окне «Дополнительные сведения».
Как массово заполнить дополнительный реквизит у множества элементов?
Используйте типовую обработку «Групповое изменение реквизитов» (раздел «Администрирование»): она умеет работать с дополнительными реквизитами и сведениями. Для сложных алгоритмов пишут обработку через объектную модель — прямые SQL-запросы применять не следует.
Переносятся ли дополнительные реквизиты при синхронизации баз?
Дополнительные реквизиты переносятся вместе с объектом, если свойство существует и сопоставлено в обеих базах. Дополнительные сведения зависят от настроек правил обмена — в ряде типовых синхронизаций их перенос нужно включать или дорабатывать отдельно.
Можно ли использовать дополнительные реквизиты в отборах динамических списков?
Да, для дополнительных реквизитов типовые конфигурации поддерживают отбор в списках через «Настроить список». Дополнительные сведения в отборах списков, как правило, недоступны — это одно из принципиальных различий двух механизмов.
Что произойдёт со значениями, если удалить само свойство?
При удалении элемента ПВХ «ДополнительныеРеквизитыИСведения» связанные значения в табличных частях и регистре становятся «битой» информацией с битой ссылкой. Типовые механизмы при удалении предупреждают об использовании свойства, но перед удалением стоит убедиться, что значения не нужны, или сначала очистить их обработкой.
Что важно запомнить
Дополнительные реквизиты лежат в табличной части объекта, дополнительные сведения — в регистре сведений «ДополнительныеСведения», а описания свойств — в ПВХ «ДополнительныеРеквизитыИСведения». В запросах всегда соединяйтесь с нужным хранилищем и отбирайте по ссылке на свойство. Массовые изменения выполняйте только штатными средствами, не прямыми запросами к СУБД.