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

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

При программном создании элементов справочника ХарактеристикиНоменклатуры разработчики часто сталкиваются с ситуацией, когда сама запись характеристики создается, но её ключевые параметры — например, цвет, размер или материал — остаются незаполненными. Разберем по шагам, как устроено хранение дополнительных свойств в типовых конфигурациях 1С и как правильно наполнять их значениями через программный код.

Архитектура хранения свойств в современных конфигурациях

В типовых конфигурациях на базе Библиотеки стандартных подсистем (таких как 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей, 1С:УНФ) механизм дополнительных свойств опирается на следующую структуру метаданных:

  1. План видов характеристик ДополнительныеРеквизитыИСведения: содержит сами виды свойств (например, «Цвет», «Размер обуви»).
  2. Подчиненный справочник ЗначенияСвойствОбъектов: хранит конкретные значения (например, «Красный», «42», «XL»). Этот справочник подчинен плану видов характеристик, то есть каждое значение жестко привязано к своему владельцу-свойству.
  3. Табличная часть ДополнительныеРеквизиты справочника ХарактеристикиНоменклатуры: хранит список назначенных характеристике свойств и выбранных значений. Каждая строка содержит как минимум реквизиты Свойство и Значение.

Пошаговое добавление свойств в характеристику

Рассмотрим подробнее типовой алгоритм программного создания характеристики с заполнением ее дополнительных реквизитов. Выясним причину частых ошибок: если искать значение в справочнике ЗначенияСвойствОбъектов без указания владельца, метод вернет либо пустое значение, либо элемент с совпадающим названием от совершенно другого свойства (например, размер «40» вместо цвета «40»).

Посмотрим на практический пример кода для конфигураций на управляемых формах:


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

// 2. Находим конкретные значения с обязательным указанием владельца свойства
ЗначениеРазмер = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("42", Истина, , СвойствоРазмер);
ЗначениеЦвет = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Черный", Истина, , СвойствоЦвет);

// 3. Создаем характеристику номенклатуры
НовХаракт = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
НовХаракт.Владелец = Справочники.КатегорииНоменклатуры.НайтиПоНаименованию("Обувь");
НовХаракт.Наименование = "Черный, 42";
НовХаракт.НаименованиеДляПечати = "Черный, 42";

// 4. Заполняем табличную часть ДополнительныеРеквизиты
Если ЗначениеЗаполнено(СвойствоРазмер) И ЗначениеЗаполнено(ЗначениеРазмер) Тогда
    СтрокаТЧ = НовХаракт.ДополнительныеРеквизиты.Добавить();
    СтрокаТЧ.Свойство = СвойствоРазмер;
    СтрокаТЧ.Значение = ЗначениеРазмер;
КонецЕсли;

Если ЗначениеЗаполнено(СвойствоЦвет) И ЗначениеЗаполнено(ЗначениеЦвет) Тогда
    СтрокаТЧ = НовХаракт.ДополнительныеРеквизиты.Добавить();
    СтрокаТЧ.Свойство = СвойствоЦвет;
    СтрокаТЧ.Значение = ЗначениеЦвет;
КонецЕсли;

// 5. Записываем готовую характеристику
НовХаракт.Записать();

Особенности работы в классических конфигурациях (обычные формы)

Проанализируем ситуацию, если разработка ведется в конфигурациях прошлых поколений (например, Управление торговлей 10.3 или УПП 1.3). В этих системах у справочника ХарактеристикиНоменклатуры отсутствует табличная часть ДополнительныеРеквизиты.

Связь между характеристикой и её параметрами реализуется через независимый регистр сведений ЗначенияСвойствОбъектов. В этом случае алгоритм действий меняется:

  1. Сначала создаем и записываем элемент справочника ХарактеристикиНоменклатуры, чтобы получить ссылку.
  2. Создаем набор записей регистра сведений ЗначенияСвойствОбъектов с отбором по объекту (нашей записанной характеристике).
  3. Добавляем записи, где измерение Объект — ссылка на характеристику, Свойство — элемент ПВХ СвойстваОбъектов, а ресурс Значение — выбранное значение свойства.
  4. Записываем набор записей регистра.

Важные нюансы при автоматизации создания характеристик

При внедрении автоматического создания характеристик обратим внимание на следующие технические аспекты:

  1. Формирование рабочего наименования: В типовых решениях наименование характеристики обычно строится автоматически по заданному в виде номенклатуры шаблону (рабочее наименование). При программной записи рекомендуется использовать экспортные методы подсистемы свойств (модули УправлениеСвойствамиКлиентСервер или УправлениеСвойствами), чтобы наименование соответствовало общим правилам базы.
  2. Контроль дублирования: Платформа 1С не контролирует уникальность набора реквизитов на уровне базы данных по умолчанию. Перед добавлением новой характеристики обязательно выполним превентивный поиск запросом по табличной части ДополнительныеРеквизиты, чтобы убедиться, что характеристика с такой комбинацией цвета и размера у данного владельца еще не создана.
  3. Автозаполнение в пользовательском интерфейсе: Если требуется, чтобы реквизиты подтягивались автоматически при интерактивном нажатии кнопки «Создать», логику заполнения значений по умолчанию следует размещать в процедуре ОбработкаЗаполнения модуля объекта ХарактеристикиНоменклатуры.
← На главную