Дополнительные реквизиты в 1С — это поля, которые пользователь или внедренец добавляет к справочнику или документу без изменения конфигурации. Их обеспечивает подсистема «Свойства» Библиотеки стандартных подсистем (БСП): набор свойств для каждого вида объекта хранится в справочнике «Наборы дополнительных реквизитов и сведений», сами свойства — в плане видов характеристик ДополнительныеРеквизитыИСведения, а значения — либо в табличной части объекта (дополнительные реквизиты), либо в регистре сведений ДополнительныеСведения (дополнительные сведения).
Для бизнеса это способ быстро добавить «ещё одно поле» без снятия конфигурации с поддержки. Для программиста — штатный API, через который значения можно читать, записывать, выводить в отчёты и использовать в обменах. Ниже — устройство подсистемы, подключение к своему объекту, код и ошибки, на которые я натыкаюсь на проектах.
Как устроены дополнительные реквизиты и сведения
| Элемент | Объект метаданных | Что хранит |
|---|---|---|
| Включение функциональности | Константа ИспользоватьДополнительныеРеквизитыИСведения | Общий выключатель подсистемы |
| Набор свойств | Справочник НаборыДополнительныхРеквизитовИСведений | Какие свойства есть у вида объекта (или группы видов) |
| Свойство | ПВХ ДополнительныеРеквизитыИСведения | Заголовок, тип значения, имя, обязательность, зависимости |
| Значения-списки | Справочник ЗначенияСвойствОбъектов (и иерархический вариант) | Варианты выбора для свойств типа «список значений» |
| Значение доп. реквизита | Табличная часть ДополнительныеРеквизиты объекта | Колонки Свойство, Значение, ТекстоваяСтрока |
| Значение доп. сведения | Регистр сведений ДополнительныеСведения | Измерения Объект, Свойство, ресурс Значение |

Реквизит или сведение: что выбрать
| Критерий | Дополнительный реквизит | Дополнительное сведение |
|---|---|---|
| Где хранится | В объекте | В регистре сведений |
| Изменение | Только с записью объекта | Отдельно, без перезаписи объекта |
| Права | Как на объект | Отдельно настраиваются |
| Попадает в версионирование и обмен вместе с объектом | Да | Отдельной записью регистра |
| Подходит для | Свойств, которые являются частью данных: цвет, размер, категория | Пометок «сбоку»: рейтинг клиента, статус проверки, комментарий службы безопасности |
Если сомневаетесь — берите дополнительный реквизит. Сведение выбирают, когда значение должен менять человек без прав на сам объект или когда изменение не должно трогать проведённый документ.
Как подсистема знает о наборах
Большая часть элементов справочника наборов предопределена — по одному на каждый вид объекта, к которому подключены свойства. В актуальных версиях БСП предопределённые наборы описываются не в конфигураторе, а программно: в процедуре УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств (и в аналогичных процедурах прикладных модулей), с явно заданным уникальным идентификатором — чтобы набор совпадал во всех базах распределённой системы и при обменах.
// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств.
Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт
Набор = Наборы.Строки.Добавить();
Набор.Имя = "Справочник_ДоговорыАренды";
// Идентификатор генерируется один раз и больше не меняется
Набор.Идентификатор = Новый УникальныйИдентификатор("3f1c7a52-6d0b-4b8e-9a1e-2c5d7e8f9a10");
КонецПроцедурыТочный состав колонок дерева Наборы и порядок внедрения сверяйте с документацией вашей версии БСП: от версии к версии механизм немного менялся.
Подключение дополнительных реквизитов к своему объекту
Порядок для собственного справочника или документа в конфигурации с БСП:
- Добавьте объекту табличную часть
ДополнительныеРеквизитыс реквизитамиСвойство(ссылка на ПВХДополнительныеРеквизитыИСведения),Значение(тип — характеристика из того же ПВХ),ТекстоваяСтрока(строка неограниченной длины). Проще всего скопировать её у типового объекта. - Включите тип объекта в определяемые типы и составные типы, которые использует подсистема (владельцы свойств и объект регистра
ДополнительныеСведения) — перечень указан в описании внедрения подсистемы. - Зарегистрируйте предопределённый набор, как показано выше.
- Добавьте вызовы подсистемы в форму объекта.
Обработчики формы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.Свойства
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Объект", Объект);
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
// Конец СтандартныеПодсистемы.Свойства
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедурыКроме серверных обработчиков, подсистема добавляет на форму элементы с подключаемыми действиями (Подключаемый_ПриИзмененииДополнительногоРеквизита и другие) — их обработчики берутся из клиентского модуля подсистемы. Самый быстрый способ ничего не забыть — открыть форму типового объекта, к которому свойства уже подключены, и перенести все блоки с комментарием «СтандартныеПодсистемы.Свойства».
В формах типовых конфигураций всё это уже сделано, поэтому для типового объекта достаточно включить константу и добавить реквизиты в набор.
Программная работа со свойствами
Поиск свойства
У каждого свойства есть реквизит Имя — по нему и стоит искать в коде. Имя, сгенерированное подсистемой автоматически, обычно содержит суффикс с уникальным идентификатором, поэтому для свойств, на которые опирается код, я задаю понятное имя вручную и фиксирую его в документации проекта.
// Возвращает свойство по имени или пустую ссылку, если свойство не найдено.
Функция СвойствоПоИмени(ИмяСвойства)
Возврат ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяСвойства);
КонецФункцииИскать по наименованию (заголовку) не стоит: пользователь его поменяет, и интеграция сломается.
Чтение значений
Свойство = СвойствоПоИмени("СрокДоговораМесяцев");
// Одно значение
СрокДоговора = УправлениеСвойствами.ЗначениеСвойства(ДоговорСсылка, Свойство);
// Все дополнительные реквизиты и сведения объекта — таблица со свойствами и значениями
ВсеЗначения = УправлениеСвойствами.ЗначенияСвойств(ДоговорСсылка);Функции подсистемы учитывают и реквизиты, и сведения, поэтому вызывающему коду не нужно знать, где именно хранится значение.
Запись значений
Для записи используйте процедуру подсистемы, а не прямую правку табличной части или регистра: она сама разберётся с местом хранения.
ТаблицаСвойств = Новый ТаблицаЗначений;
ТаблицаСвойств.Колонки.Добавить("Свойство");
ТаблицаСвойств.Колонки.Добавить("Значение");
НоваяСтрока = ТаблицаСвойств.Добавить();
НоваяСтрока.Свойство = СвойствоПоИмени("СрокДоговораМесяцев");
НоваяСтрока.Значение = 12;
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ДоговорСсылка, ТаблицаСвойств);Если подходящей процедуры в вашей версии БСП нет, дополнительный реквизит можно записать через объект: найти строку в ДополнительныеРеквизиты по свойству, установить Значение и записать объект. Сведение — через менеджер записи регистра ДополнительныеСведения.
Дополнительные реквизиты в запросах и отчётах
Прямой запрос
ВЫБРАТЬ
Договоры.Ссылка КАК Договор,
ДопРеквизиты.Значение КАК СрокМесяцев,
ДопСведения.Значение КАК СтатусПроверки
ИЗ
Справочник.ДоговорыКонтрагентов КАК Договоры
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДопРеквизиты
ПО ДопРеквизиты.Ссылка = Договоры.Ссылка
И ДопРеквизиты.Свойство.Имя = &ИмяСрока
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСведения
ПО ДопСведения.Объект = Договоры.Ссылка
И ДопСведения.Свойство.Имя = &ИмяСтатусаОбратите внимание: условие по свойству стоит в ПО, а не в ГДЕ. Если перенести его в ГДЕ, левое соединение превратится во внутреннее и договоры без заполненного свойства пропадут из выборки. Для больших таблиц лучше заранее получить ссылки на свойства и передавать их параметрами, а не обращаться к Свойство.Имя через точку.
Конструкция ХАРАКТЕРИСТИКИ для СКД
Если нужно, чтобы все дополнительные реквизиты автоматически стали полями отчёта, в наборе данных СКД используют раздел ХАРАКТЕРИСТИКИ:
ВЫБРАТЬ
Договоры.Ссылка КАК Договор
ИЗ
Справочник.ДоговорыКонтрагентов КАК Договоры
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.ДоговорыКонтрагентов)
ВИДЫХАРАКТЕРИСТИК (
ВЫБРАТЬ
Свойства.Ссылка КАК Ссылка,
Свойства.Заголовок КАК Наименование,
Свойства.ТипЗначения КАК ТипЗначения
ИЗ
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства)
ПОЛЕКЛЮЧА Ссылка
ПОЛЕИМЕНИ Наименование
ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯХАРАКТЕРИСТИК Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты
ПОЛЕОБЪЕКТА Ссылка
ПОЛЕВИДА Свойство
ПОЛЕЗНАЧЕНИЯ Значение}В запрос видов характеристик стоит добавить отбор по набору свойств, иначе в отчёт попадут свойства всех объектов. В типовых отчётах на БСП дополнительные реквизиты часто уже доступны как поля — проверьте это до того, как дорабатывать отчёт.
Особенности и ограничения
- Имена элементов формы генерируются. На форме поле дополнительного реквизита называется по шаблону вида
ДополнительныйРеквизитЗначение_<идентификаторы>. Чтобы найти нужный элемент программно, используйте таблицу формыСвойства_ОписаниеДополнительныхРеквизитов: в ней есть соответствие свойства и имени реквизита формы. - Множественные значения не поддерживаются «из коробки». Одно свойство — одно значение у объекта. Модифицировать служебные модули подсистемы ради множественных значений я не рекомендую: такие правки ломаются при каждом обновлении БСП. Если нужен список, заведите отдельную табличную часть в расширении или справочник-связку.
- Свойства помечаются на удаление, а не удаляются. Старые значения остаются в данных и показываются как удалённые.
- Обязательность и видимость — условные. В свойстве можно задать зависимости: показывать или требовать заполнение при определённых значениях других реквизитов.
Когда стандартных свойств недостаточно (нужна логика, проверки, отдельные табличные части), правильнее делать доработку в расширении конфигурации — об этом подробнее в разделе расширения 1С и доработка 1С.
Типичные ошибки
- Поиск свойства по заголовку. Заголовок меняют пользователи, имя — нет. Ищите по
Имя. - Условие по свойству в
ГДЕпри левом соединении. Пропадают объекты без значения. - Прямая запись в табличную часть без учёта
ТекстоваяСтрока. Для строк неограниченной длины подсистема хранит текст в отдельной колонке; при ручной записи значение может «потеряться» на форме. - Отключённая константа. Код работает, а в формах ничего не видно — проверьте
ИспользоватьДополнительныеРеквизитыИСведения. - Доработка служебных модулей БСП. Правка
УправлениеСвойствамиСлужебныйпревращает каждое обновление в ручное слияние.
Дополнительные реквизиты — лучший первый ответ на просьбу «добавьте поле». Код нужен только там, где на этом поле начинает строиться логика.
Итог
- Подсистема «Свойства» хранит наборы в справочнике, свойства — в ПВХ, значения реквизитов — в табличной части объекта, сведений — в регистре.
- Реквизит меняется вместе с объектом, сведение — независимо и со своими правами.
- В коде ищите свойства по
Имя, читайте черезУправлениеСвойствами.ЗначениеСвойстваиЗначенияСвойств, записывайте процедурой подсистемы. - В отчётах используйте соединение с условием в
ПОили разделХАРАКТЕРИСТИКИв наборе СКД. - Не модифицируйте служебные модули БСП — нестандартные потребности решайте расширением.




