Как написать несколько условий в формуле шаблона наименования номенклатуры в 1С?

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

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

Причина синтаксических ошибок в формулах

Выясним причину, почему стандартные конструкции встроенного языка 1С вызывают ошибку при проверке формулы шаблона. Редактор формул наименований вычисляет выражение как единую строковую функцию через встроенный механизм платформы. Внутри поля формулы нельзя писать процедурный код: запрещено использовать блоки Если ... Тогда ... Иначе ... КонецЕсли, объявлять локальные переменные или использовать операторы присваивания.

Единственным доступным механизмом ветвления в строковых выражениях формул является тернарный оператор вида:

?(Условие, ЗначениеЕслиИстина, ЗначениеЕслиЛожь)

Составление каскадного условия через вложенные тернарные операторы

Рассмотрим, как реализовать множественный выбор (аналог конструкции ИначеЕсли). Для этого в третий параметр тернарного оператора (блок «ЗначениеЕслиЛожь») помещается следующий оператор ?(...).

Разберем базовую схему конструкции на примере двух и более условий:


?(Строка([Тип.Родитель]) = "Печенье №1", "Печеньки 1 сорт ", ?(Строка([Тип.Родитель]) = "Печенье №2", "Печеньки 2 сорт ", "Стандартное ")) + [Наименование]

Посмотрим на логику работы данного выражения по шагам:

  1. Система проверяет первое условие: равен ли родитель значению "Печенье №1". Если да, возвращается строка "Печеньки 1 сорт ".
  2. Если первое условие не выполнено, управление переходит в третий параметр, где вычисляется следующий вложенный тернарный оператор.
  3. Проверяется равенство значению "Печенье №2". При совпадении возвращается "Печеньки 2 сорт ".
  4. Если ни одно из условий не подошло, подставляется значение по умолчанию — "Стандартное ".
  5. К полученному результату прибавляется значение реквизита [Наименование].

Использование сложных логических связок и строковых функций

Проанализируем расширенные возможности построения условий в формулах шаблонов:

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

Альтернативные подходы к формированию наименований

Если условий становится слишком много (более 3–4 уровней вложенности), формула становится сложной для чтения и сопровождения. В таких ситуациях рассмотрим более надежные архитектурные решения:

  1. Использование дополнительных реквизитов: вместо жестко прописанных текстовых условий в формуле создается дополнительный реквизит (например, Сорт) с фиксированным списком значений. В шаблоне наименования достаточно указать простую конкатенацию: [Сорт] + " " + [Наименование].
  2. Разделение видов номенклатуры: если для разных групп товаров правила формирования наименований кардинально отличаются, целесообразно создать отдельные виды номенклатуры и настроить для каждого свой индивидуальный шаблон.
  3. Программное формирование: при необходимости обращаться к сложным таблицам соответствий логику генерации наименования выносят в обработчик события ПередЗаписью справочника номенклатуры с помощью расширения конфигурации.
← На главную