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