Как программно получить и вывести дополнительный реквизит номенклатуры в 1С:Управление торговлей 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

Проанализируем структуру хранения данных в типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП). В 1С:УТ 11 дополнительные реквизиты хранятся непосредственно в табличной части объекта-владельца:

  1. У справочника Справочник.Номенклатура существует табличная часть ДополнительныеРеквизиты.
  2. Если реквизит относится к характеристике товара, то он находится в табличной части ДополнительныеРеквизиты справочника Справочник.ХарактеристикиНоменклатуры.

Табличная часть содержит две ключевые колонки: Свойство (ссылка на элемент плана видов характеристик ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения) и Значение (конкретное значение реквизита).

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

Способ 1. Поиск в табличной части объекта (прямое обращение)

Рассмотрим вариант извлечения значения реквизита прямо из табличной части номенклатуры при формировании печатной формы:


// 1. Находим нужное свойство в Плане видов характеристик
ДопРеквизит_ДатаПроизводства = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата производства");

Если ЗначениеЗаполнено(ДопРеквизит_ДатаПроизводства) Тогда
    // 2. Ищем строку с этим свойством в табличной части "ДополнительныеРеквизиты"
    СтрокаРеквизита = СтрокаТабЧасти.Номенклатура.ДополнительныеРеквизиты.Найти(ДопРеквизит_ДатаПроизводства, "Свойство");
    
    Если СтрокаРеквизита <> Неопределено Тогда
        // 3. Заполняем параметр области макета
        ОбластьНоменклатура.Параметры.ДатаПроизводства = СтрокаРеквизита.Значение;
    КонецЕсли;
КонецЕсли;

Способ 2. Использование функции БСП «Управление свойствами»

Рассмотрим более универсальный подход с использованием штатного модуля БСП УправлениеСвойствами. Функция ЗначениеСвойства автоматически определяет тип свойства (реквизит или сведение) и возвращает соответствующее значение:


Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата производства");
ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаНоменклатуру, Свойство);

Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда
    ОбластьНоменклатура.Параметры.ДатаПроизводства = ЗначениеСвойства;
КонецЕсли;

Способ 3. Получение значения доп. реквизита через запрос

Если требуется вывести данные для массива позиций номенклатуры или сформировать сложные данные для макета, оптимальным решением является запрос с левым соединением к табличной части:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Номенклатура,
    |	ДопРеквизиты.Значение КАК ДатаПроизводства
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
    |		ПО ДопРеквизиты.Ссылка = Номенклатура.Ссылка
    |		И ДопРеквизиты.Свойство = &СвойствоДатаПроизводства
    |ГДЕ
    |	Номенклатура.Ссылка = &СсылкаНаНоменклатуру";

Запрос.УстановитьПараметр("СсылкаНаНоменклатуру", ВыбраннаяНоменклатура);
Запрос.УстановитьПараметр("СвойствоДатаПроизводства", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Дата производства"));

РезультатЗапроса = Запрос.Выполнить();

Важные рекомендации и нюансы

  1. Проверка привязки к характеристикам: Если в виде номенклатуры включено ведение учета по характеристикам, созданный реквизит может относиться к характеристике. В таком случае поиск строки нужно выполнять в табличной части СтрокаТабЧасти.Характеристика.ДополнительныеРеквизиты.
  2. Поиск свойств: Метод НайтиПоНаименованию чувствителен к изменению названия реквизита пользователями. Для повышения надежности рекомендуется искать свойство по уникальному имени с помощью НайтиПоРеквизиту("Имя", ...) или фиксировать ссылку.
  3. Форматирование дат: Если дополнительный реквизит имеет тип «Дата», перед передачей в текстовое поле макета отформатируйте значение через Формат(Значение, "ДФ=dd.MM.yyyy").
← На главную