При настройке правил автоматического формирования рабочего или полного наименования номенклатуры в типовых конфигурациях (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей, 1С:Управление нашей фирмой) часто требуется задать сложную логику. Например, в зависимости от группы, родителя или определенных свойств подставлять разные префиксы и суффиксы. Разберем, как правильно составить формулу с несколькими условиями и избежать синтаксических ошибок.
Выясним причину, почему стандартные конструкции встроенного языка 1С вызывают ошибку при проверке формулы шаблона. Редактор формул наименований вычисляет выражение как единую строковую функцию через встроенный механизм платформы. Внутри поля формулы нельзя писать процедурный код: запрещено использовать блоки Если ... Тогда ... Иначе ... КонецЕсли, объявлять локальные переменные или использовать операторы присваивания.
Единственным доступным механизмом ветвления в строковых выражениях формул является тернарный оператор вида:
?(Условие, ЗначениеЕслиИстина, ЗначениеЕслиЛожь)
Рассмотрим, как реализовать множественный выбор (аналог конструкции ИначеЕсли). Для этого в третий параметр тернарного оператора (блок «ЗначениеЕслиЛожь») помещается следующий оператор ?(...).
Разберем базовую схему конструкции на примере двух и более условий:
?(Строка([Тип.Родитель]) = "Печенье №1", "Печеньки 1 сорт ", ?(Строка([Тип.Родитель]) = "Печенье №2", "Печеньки 2 сорт ", "Стандартное ")) + [Наименование]
Посмотрим на логику работы данного выражения по шагам:
"Печенье №1". Если да, возвращается строка "Печеньки 1 сорт "."Печенье №2". При совпадении возвращается "Печеньки 2 сорт "."Стандартное ".[Наименование].Проанализируем расширенные возможности построения условий в формулах шаблонов:
И, ИЛИ, НЕ, а также круглые скобки для группировки приоритетов:
?(Строка([Тип.Родитель]) = "Печенье №1" И [Вес] > 1, "Печеньки 1 сорт фасованные ", "Стандартное ") + [Наименование]
СокрЛП и приводить текст к единому регистру через НРег или ВРег:
?(НРег(СокрЛП(Строка([Тип.Родитель]))) = "печенье №1", "Печеньки 1 сорт ", "Стандартное ") + [Наименование]
ЗначениеЗаполнено(...).Если условий становится слишком много (более 3–4 уровней вложенности), формула становится сложной для чтения и сопровождения. В таких ситуациях рассмотрим более надежные архитектурные решения:
Сорт) с фиксированным списком значений. В шаблоне наименования достаточно указать простую конкатенацию: [Сорт] + " " + [Наименование].ПередЗаписью справочника номенклатуры с помощью расширения конфигурации.