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

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

При разработке в конфигурации 1С:Управление нашей фирмой (УНФ) версии 1.6 программисты часто сталкиваются с задачей автоматизации создания справочников. Одной из самых трудоемких операций является программное создание категорий номенклатуры и связанных с ними характеристик (например, "Размер" и "Цвет" для обуви). Трудность заключается в том, что в современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) характеристики жестко завязаны на механизм дополнительных реквизитов и наборов свойств.

В этой статье мы подробно разберем, как правильно выстроить иерархию объектов, чтобы избежать ошибок записи и добиться корректного отображения характеристик в интерфейсе программы.

Анализ архитектуры характеристик в УНФ

Прежде чем писать код, проанализируем, как связаны объекты в системе. Обычного создания элемента в справочнике ХарактеристикиНоменклатуры недостаточно. Нам необходимо пройти через следующую цепочку:

  1. Категория номенклатуры: основной владелец логики работы с товаром.
  2. Набор дополнительных реквизитов и сведений: служебный объект, который привязывается к категории и определяет, какие свойства (ПВХ) будут доступны для характеристик этой категории.
  3. План видов характеристик (ПВХ) Дополнительные реквизиты и сведения: здесь создаются сами определения свойств (например, "Размер").
  4. Справочник Значения свойств объектов: здесь хранятся конкретные варианты значений (например, "41", "42", "Красный"). Важно: владельцем этих значений является ПВХ, а не категория!
  5. Справочник Характеристики номенклатуры: финальный объект, который объединяет все вышеперечисленное.

Разбор типичных ошибок при программировании

Рассмотрим ситуацию: вы пытаетесь записать новое значение свойства и указываете в качестве владельца КатегорииНоменклатуры.Ссылка. Система выдаст ошибку, так как поле Владелец у справочника ЗначенияСвойствОбъектов имеет тип ссылки на План видов характеристик. Еще одна частая ошибка — отсутствие связи между созданным свойством и набором свойств категории. Если не добавить свойство в табличную часть ДополнительныеРеквизиты соответствующего набора, программа "не увидит" это свойство в карточке характеристики.

Пошаговый алгоритм создания категории со свойствами

Рассмотрим правильный подход к реализации задачи. Сначала создадим категорию и подготовим для нее инфраструктуру свойств.

Шаг 1. Создание категории и инициализация набора свойств


// Создаем категорию
ОбКатегория = Справочники.КатегорииНоменклатуры.СоздатьЭлемент();
ОбКатегория.Наименование = "Обувь Тест";
ОбКатегория.ТипНоменклатурыПоУмолчанию = Перечисления.ТипыНоменклатуры.Запас;
ОбКатегория.ИспользоватьХарактеристики = Истина;
// В УНФ набор свойств часто создается автоматически при записи категории, 
// если настроены соответствующие подписки на события.
ОбКатегория.Записать(); 

Шаг 2. Создание свойства в Плане видов характеристик

Теперь создадим само свойство "Размер". Выясним причину, почему важно правильно заполнить НаборСвойств. Это связывает ПВХ с конкретной группой объектов.


ОбСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент();
ОбСвойство.Наименование = "Размер (Тест)";
ОбСвойство.Заголовок = "Размер";
// Указываем тип значения. Обычно это СправочникСсылка.ЗначенияСвойствОбъектов
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"));
ОбСвойство.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
// Указываем набор свойств, к которому относится ПВХ
ОбСвойство.НаборСвойств = ОбКатегория.НаборСвойствХарактеристики; 
ОбСвойство.Записать();

Шаг 3. Регистрация свойства в наборе

Проанализируем ситуацию: свойство создано, но оно еще не "включено" в состав реквизитов категории. Нам нужно обновить справочник НаборыДополнительныхРеквизитовИСведений.


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

Создание конкретных характеристик

После того как каркас категории готов, мы можем переходить к созданию самих элементов — конкретных размеров (например, "42") и характеристик номенклатуры.

Создание значения свойства:


ОбЗначение = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент();
ОбЗначение.Наименование = "42";
ОбЗначение.Владелец = ОбСвойство.Ссылка; // Владелец - ПВХ!
ОбЗначение.Записать();
СсылкаНаЗначение42 = ОбЗначение.Ссылка;

Создание итоговой характеристики:

Рассмотрим пример создания характеристики, которая будет видна в списке товаров. Нам нужно заполнить не только наименование, но и табличную часть ДополнительныеРеквизиты у самой характеристики, чтобы система понимала, из чего она состоит.


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

// Заполняем состав характеристики
НовоеСвойствоХар = ОбХарактеристика.ДополнительныеРеквизиты.Добавить();
НовоеСвойствоХар.Свойство = ОбСвойство.Ссылка;
НовоеСвойствоХар.Значение = СсылкаНаЗначение42;

ОбХарактеристика.Записать();

Полезные советы и нюансы

Проанализируем еще несколько важных моментов, которые помогут сделать код надежным:

Таким образом, мы разобрали полный цикл программного управления характеристиками в УНФ 1.6. Главный секрет успеха здесь — строгое соблюдение иерархии БСП и правильное указание владельцев для каждого типа объектов.

← На главную