Дополнительные реквизиты 1С — это поля, которые администратор базы добавляет к справочнику или документу прямо в пользовательском режиме, без конфигуратора и без снятия конфигурации с поддержки. Ниже — включение механизма, наборы для видов номенклатуры и документов, типы значений, обязательность по условию и граница, за которой нужен настоящий реквизит в расширении.
Всё описанное относится к конфигурациям на БСП: БП 3.0, УТ 11, КА 2, ERP 2, УНФ 3.0. В УТ 10.3 на обычных формах работает старый механизм свойств объектов, он устроен иначе.
Магазину одежды нужен «Сезон» у товара, оптовику — «Ответственный менеджер» у контрагента, производству — «Номер сертификата» у партии. Дорабатывать ради одного поля конфигурацию невыгодно: каждое обновление превращается в сравнение и объединение. Дополнительный реквизит живёт в данных, поэтому обновления его не трогают.
Разновидностей две: дополнительные реквизиты и дополнительные сведения. Для сравнения рядом — «настоящий» реквизит из расширения.
| Доп. реквизит | Доп. сведение | Реквизит в расширении | |
|---|---|---|---|
| Кто добавляет | Администратор, в режиме «Предприятие» | Администратор, в режиме «Предприятие» | Программист, в конфигураторе |
| Где хранится | Внутри объекта, в табличной части | Отдельно, в регистре сведений | Внутри объекта, как обычное поле |
| Как редактируется | В форме объекта, запись вместе с объектом | В отдельном окне, объект не перезаписывается | В форме объекта |
| Участвует в проведении, ценах, печати | Только если дописать код | Только если дописать код | Да, код пишется под задачу |
| Мешает обновлению | Нет | Нет | Расширение проверяют после обновления |
Сведения удобны для отметок, которые ставят «сбоку», не меняя сам документ: «Оригинал получен», «Проверено бухгалтером». Реквизиты — для всего остального.
Чтобы в 1С добавить дополнительный реквизит, нужны права на настройку: обычно они есть только у администратора.


Настройка дополнительных реквизитов в 1С 8.3 на этом заканчивается, а дальше начинаются нюансы, из-за которых поле «не появляется» или появляется не там.
Дополнительные реквизиты справочника или документа собраны в набор. Обычно набор один на объект: все контрагенты видят одни и те же поля, все реализации — свои. Исключение — номенклатура в УТ 11, КА 2 и ERP 2: там наборы привязаны к видам номенклатуры. У вида «Обувь» могут быть «Размер» и «Материал подошвы», у «Бытовой химии» — «Объём», и в карточке пылесоса лишних полей не будет. Настраивается это в карточке вида номенклатуры, там же есть отдельные наборы для характеристик и серий.
Один и тот же реквизит можно включить в несколько наборов. Не создавайте «Цвет» заново для каждого вида: в отчётах получится пять разных полей «Цвет» вместо одного.
Частая ошибка планирования: если остатки нужно вести по каждому размеру или цвету отдельно, это не дополнительный реквизит товара, а характеристики номенклатуры. Доп. реквизит описывает карточку целиком, а не её варианты на складе.
Если по полю потом будут отбирать и группировать, выбирайте список значений, а не строку. «Зима», «зима» и «Зимний» в строковом поле — это три разных значения для отчёта.
Флажок «Заполнять обязательно» не даст записать объект с пустым полем: пользователь увидит сообщение вида «Поле "Материал" не заполнено». В актуальных версиях БСП обязательность, видимость и доступность можно включать по условию — в зависимости от значений других реквизитов объекта. Пример: «Номер сертификата» виден и обязателен, только если флажок «Требуется сертификат» установлен. Кроме «равно» и «заполнено» доступны виды сравнения «В списке» и «Не в списке» (с БСП 2.4.1).
Типовой код ничего не знает о ваших дополнительных реквизитах. Поле хранит значение и показывает его в отчётах — и только. Пора звать программиста, если:
Если код нужен только для печатной формы, часто хватает прочитать уже существующий дополнительный реквизит.
Механизм — подсистема «Свойства» Библиотеки стандартных подсистем. Объекты метаданных:
| Объект | Что хранит |
|---|---|
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения | Сами реквизиты и сведения: заголовок, ТипЗначения, ЭтоДополнительноеСведение, ЗаполнятьОбязательно, ВладелецДополнительныхЗначений (чей список значений используется), МногострочноеПолеВвода, Имя (с БСП 2.4.3) |
Справочник.НаборыДополнительныхРеквизитовИСведений | Наборы: какие реквизиты показывать у какого объекта |
Справочник.ЗначенияСвойствОбъектов | Варианты для типа «Дополнительное значение» (для иерархических — ЗначенияСвойствОбъектовИерархия) |
Табличная часть ДополнительныеРеквизиты у объекта-владельца | Значения реквизитов: колонки Свойство, Значение, ТекстоваяСтрока (для длинного и многострочного текста) |
РегистрСведений.ДополнительныеСведения | Значения сведений: измерения Объект, Свойство, ресурс Значение |
Реквизит ищем в табличной части объекта, сведение — в регистре. Запрос для своего отчёта:
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
ДопРеквизиты.Значение КАК Сезон
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
ПО ДопРеквизиты.Ссылка = Номенклатура.Ссылка
И ДопРеквизиты.Свойство = &Свойство
ГДЕ
НЕ Номенклатура.ЭтоГруппа
Для сведения соединение то же, только с регистром:
ВЫБРАТЬ
Реализация.Ссылка КАК Документ,
ДопСведения.Значение КАК ОригиналПолучен
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДопСведения
ПО ДопСведения.Объект = Реализация.Ссылка
И ДопСведения.Свойство = &Свойство
Условие на свойство держите в ПО, а не в ГДЕ: иначе товары без значения выпадут из выборки.
Программный интерфейс БСП — общий модуль УправлениеСвойствами. Функция ЗначенияСвойств(ОбъектыСоСвойствами, ПолучатьДопРеквизиты, ПолучатьДопСведения, Свойства) принимает ссылку или массив ссылок и возвращает таблицу значений с колонками Свойство и Значение, в актуальных версиях ещё и ВладелецСвойств. В БСП 2.4.3 она заменила устаревшую ПолучитьЗначенияСвойств. В той же версии появились функция ЗначениеСвойства(Объект, Свойство), куда свойство передают ссылкой или по имени, и реквизит Имя в карточке дополнительного реквизита. Параметры сверяйте с документацией своей версии БСП.
Когда «Изменить выделенные» не хватает (нужна своя логика отбора), пишут внешнюю обработку. Пример заполняет реквизит у товаров группы, где он ещё пуст.
// Внешняя обработка «Заполнить дополнительный реквизит у товаров группы».
// Модуль управляемой формы. Платформа 8.3.6+ (СтрШаблон), конфигурации на БСП:
// УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0 и другие.
//
// Реквизиты формы:
// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
// Значение - составной тип: Строка, Число, Дата, Булево,
// СправочникСсылка.ЗначенияСвойствОбъектов и нужные ссылочные типы
// Группа - СправочникСсылка.Номенклатура (группа товаров)
// Команда формы: Заполнить.
&НаКлиенте
Процедура Заполнить(Команда)
Если Не ЗначениеЗаполнено(Свойство) Или Не ЗначениеЗаполнено(Группа) Тогда
ПоказатьПредупреждение(, "Выберите дополнительный реквизит и группу товаров.");
Возврат;
КонецЕсли;
Результат = ЗаполнитьНаСервере(Свойство, Значение, Группа);
ПоказатьОповещениеПользователя("Заполнение завершено", ,
СтрШаблон("Записано: %1, ошибок: %2", Результат.Записано, Результат.Ошибок));
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаполнитьНаСервере(Свойство, Значение, Группа)
// Дополнительное сведение хранится в регистре, а не в табличной части объекта.
Если Свойство.ЭтоДополнительноеСведение Тогда
ВызватьИсключение "Выбрано дополнительное сведение, а обработка заполняет дополнительные реквизиты.";
КонецЕсли;
ПроверитьЗначение(Свойство, Значение);
// Товары группы, у которых этого реквизита ещё нет.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
| ПО ДопРеквизиты.Ссылка = Номенклатура.Ссылка
| И ДопРеквизиты.Свойство = &Свойство
|ГДЕ
| Номенклатура.Ссылка В ИЕРАРХИИ (&Группа)
| И НЕ Номенклатура.ЭтоГруппа
| И НЕ Номенклатура.ПометкаУдаления
| И ДопРеквизиты.Ссылка ЕСТЬ NULL";
Запрос.УстановитьПараметр("Свойство", Свойство);
Запрос.УстановитьПараметр("Группа", Группа);
Результат = Новый Структура("Записано, Ошибок", 0, 0);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Всё, что может упасть на одном товаре, - внутри Попытки.
Попытка
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Заблокировать();
УстановитьДопРеквизит(Объект, Свойство, Значение);
Объект.Записать();
Результат.Записано = Результат.Записано + 1;
Исключение
Результат.Ошибок = Результат.Ошибок + 1;
ЗаписьЖурналаРегистрации("Заполнение дополнительного реквизита",
УровеньЖурналаРегистрации.Ошибка, Выборка.Ссылка.Метаданные(), Выборка.Ссылка,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
Возврат Результат;
КонецФункции
// Колонка Значение составного типа примет почти что угодно,
// поэтому тип, заполненность, принадлежность и квалификаторы проверяем сами.
&НаСервереБезКонтекста
Процедура ПроверитьЗначение(Свойство, Значение)
ТипЗначения = ТипЗнч(Значение);
Если Не Свойство.ТипЗначения.СодержитТип(ТипЗначения)
Или (ТипЗначения <> Тип("Булево") И Не ЗначениеЗаполнено(Значение)) Тогда
ВызватьИсключение СтрШаблон("Значение типа ""%1"" не заполнено или не подходит реквизиту ""%2"".",
ТипЗначения, Свойство);
КонецЕсли;
// Элемент списка должен принадлежать этому реквизиту
// или реквизиту, чей список значений он использует как общий.
Если ТипЗначения = Тип("СправочникСсылка.ЗначенияСвойствОбъектов")
Или ТипЗначения = Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия") Тогда
ВладелецЗначений = ?(ЗначениеЗаполнено(Свойство.ВладелецДополнительныхЗначений),
Свойство.ВладелецДополнительныхЗначений, Свойство);
Если Значение.Владелец <> ВладелецЗначений Тогда
ВызватьИсключение СтрШаблон("Значение ""%1"" относится к другому дополнительному реквизиту.",
Значение);
КонецЕсли;
КонецЕсли;
// Длина строки, точность числа, состав даты: приведённое значение
// отличается от исходного, если не укладывается в квалификаторы свойства.
Если Свойство.ТипЗначения.ПривестиЗначение(Значение) <> Значение Тогда
ВызватьИсключение СтрШаблон("Значение ""%1"" не укладывается в длину или точность реквизита ""%2"".",
Значение, Свойство);
КонецЕсли;
КонецПроцедуры
// Пишет значение в табличную часть ДополнительныеРеквизиты объекта:
// одна строка на одно свойство, повторный вызов перезаписывает значение.
&НаСервереБезКонтекста
Процедура УстановитьДопРеквизит(Объект, Свойство, Значение)
СтрокаТЧ = Объект.ДополнительныеРеквизиты.Найти(Свойство, "Свойство");
Если СтрокаТЧ = Неопределено Тогда
СтрокаТЧ = Объект.ДополнительныеРеквизиты.Добавить();
СтрокаТЧ.Свойство = Свойство;
КонецЕсли;
СтрокаТЧ.Значение = Значение;
// Как в типовой форме БСП: текст неограниченной длины или из многострочного поля
// дублируется в ТекстоваяСтрока, в колонке Значение он может обрезаться.
Если ТипЗнч(Значение) = Тип("Строка")
И (Свойство.ТипЗначения.КвалификаторыСтроки.Длина = 0
Или Свойство.МногострочноеПолеВвода > 1) Тогда
СтрокаТЧ.ТекстоваяСтрока = Значение;
КонецЕсли;
КонецПроцедуры
Разбор ключевых мест:
ЭтоДополнительноеСведение. Сведения в табличную часть не пишут: форма их там не покажет, а типовой код не прочитает.ПроверитьЗначение. Колонка Значение составного типа и молча примет строку вместо элемента ЗначенияСвойствОбъектов, пустое значение или «Зиму» из списка «Сезона» в реквизит «Материал». Процедура отсекает всё это (флажок «Ложь» допустим), а заодно выход за длину и точность, до изменения первого товара. Если реквизит берёт общий список значений у другого, элементы подчинены тому реквизиту, отсюда ВладелецДополнительныхЗначений.ДопРеквизиты.Ссылка ЕСТЬ NULL — только товары без строки с этим свойством: заполненное не перетирается, пустых строк не появляется, повторный запуск безопасен.УстановитьДопРеквизит: одна строка на свойство через Найти; длинный или многострочный текст дублируется в ТекстоваяСтрока, как в типовой форме.Попытка — вся работа с товаром: ПолучитьОбъект(), Заблокировать() и запись. Товар, удалённый после запроса (ПолучитьОбъект() вернёт Неопределено), или карточка, которую сейчас правит пользователь, дают ошибку только по этому товару, а причина уходит в журнал регистрации.Перед запуском убедитесь, что реквизит входит в набор нужного вида номенклатуры, иначе значение запишется, но в карточке видно не будет.
ДополнительныеРеквизиты возвращает NULL, а значение лежит в регистре ДополнительныеСведения (и наоборот).ЗначениеСвойства или ЗначенияСвойств, на БСП ранее 2.4.3 падает с «Метод объекта не обнаружен». Там работает ПолучитьЗначенияСвойств или прямой запрос к табличной части.Нет. Это данные базы, а не изменения конфигурации, обновление их не трогает.
Реквизит хранится внутри объекта и записывается вместе с ним. Сведение хранится в отдельном регистре и редактируется в своём окне без перезаписи объекта — удобно для отметок по проведённым документам.
Нет, механизм работает только на уровне шапки документа или карточки справочника. Колонку в строках товаров добавляют в расширении.
Создавать — администраторы, заполнять — все, кто может редактировать объект. Подробнее — в статье о правах доступа.
Если дополнительный реквизит должен влиять на проведение, цены или попадать в печатную форму и выгрузку, без программиста не обойтись. На 1c-only.ru можно разместить задачу: оценка бесплатная, ответ в течение рабочего дня. Подробнее о видах работ — на странице услуг по доработке 1С.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.