В практике работы с 1С:ERP часто возникает задача создания сложных иерархических характеристик. Например, когда характеристикой готового изделия (ручки) является комплектующая номенклатура (стержень), которая сама обладает набором уникальных свойств (цвет, тип чернил, толщина линии). Основная сложность здесь заключается в автоматизации формирования рабочего наименования и минимизации ручного ввода данных.
Рассмотрим подробно, как решить эту задачу в рамках типового функционала 1С:ERP 2.2 и какие ограничения платформы необходимо учитывать.
Проанализируем ситуацию: если мы создаем характеристику для «Ручки» и в качестве реквизита выбираем объект «Номенклатура» (Стержень), то система видит только саму ссылку на стержень. Мы не сможем в автоматическом режиме «вытащить» свойства этого стержня в наименование ручки через стандартный конструктор формул, так как он не поддерживает обращение через точку к свойствам вложенных объектов.
Наиболее эффективным типовым решением будет использование общих дополнительных реквизитов. Разберем этот процесс по шагам:
Посмотрим на результат: теперь при создании характеристики для ручки мы выбираем «Тип чернил» из того же списка, что и для стержня. Это позволяет использовать данный реквизит в Конструкторе рабочих наименований для обоих видов номенклатуры без необходимости обращения к свойствам вложенных объектов.
Если руководство занимает жесткую позицию относительно изменения основной конфигурации, оптимальным выходом станет использование расширений конфигурации. Это штатный механизм платформы «1С:Предприятие», который позволяет дорабатывать логику, не снимая систему с поддержки и не изменяя ядро программы.
Выясним причину, почему это необходимо: стандартный конструктор формул в ERP 2.2 ограничен глубиной обращения. Он может извлечь Характеристика.ДопРеквизит1, но не может извлечь Характеристика.ДопРеквизит1.СвойствоОбъекта.
Через расширение мы можем переопределить программный модуль, отвечающий за формирование наименования (обычно это процедуры в модуле менеджера или при записи объекта СправочникСсылка.ХарактеристикиНоменклатуры). Проанализируем пример логики, которую можно реализовать в расширении:
// Пример логики для извлечения свойств вложенной номенклатуры
Если ЗначениеЗаполнено(Объект.Владелец) Тогда
СтерженьСсылка = СвойствоЛогика.ПолучитьЗначениеДопРеквизита(Объект, "Стержень");
Если ЗначениеЗаполнено(СтерженьСсылка) Тогда
ТипЧернил = СвойствоЛогика.ПолучитьЗначениеДопРеквизита(СтерженьСсылка, "ТипЧернил");
Объект.НаименованиеПолное = "Ручка со стержнем " + ТипЧернил;
КонецЕсли;
КонецЕсли;
Такой подход позволит автоматически собирать наименования любой сложности, при этом основная конфигурация останется полностью типовой.
Иногда пользователи понимают, что использование характеристик избыточно, и хотят перенести эти данные в дополнительные реквизиты самой карточки номенклатуры. Прямого «переключателя» для такой операции в системе нет, но мы можем воспользоваться обработкой Групповое изменение реквизитов.
Рассмотрим алгоритм действий:
Номенклатура.Важный технический момент: если по номенклатуре с характеристиками уже зафиксированы движения (остатки на складах, продажи), просто отключить использование характеристик в виде номенклатуры не получится. Система заблокирует это изменение. В таком случае потребуется сначала обнулить остатки, заменить ссылки в документах на новые позиции (созданные без характеристик) и только потом отключать функционал.
Чтобы минимизировать ручной труд, о котором упоминалось в обсуждении, проанализируем использование Шаблонов наименований. В настройках Вида номенклатуры на закладке «Шаблоны наименований» следует настроить формулу для рабочих наименований характеристик. Если вы используете Метод 1 (общие реквизиты), формула будет выглядеть стандартно, например:
[Цвет] + ", " + [ТипЧернил] + ", " + [ТолщинаЛинии]
Это позволит системе генерировать название автоматически при заполнении соответствующих полей в карточке характеристики, избавляя сотрудников от необходимости вводить текст вручную.