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

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

При настройке печатных форм в режиме «1С:Предприятие» или в конфигураторе часто возникает задача вывести текст в зависимости от условий — например, подставить значение по умолчанию, если реквизит не заполнен. Рассмотрим особенности работы макетов табличных документов в платформе 1С:Предприятие 8 и разберем способы решения этой задачи.

Почему условный оператор не вычисляется в ячейке макета

Проанализируем механизм обработки ячеек табличного документа платформой 1С 8.х. В отличие от версии 1С 7.7, где в ячейках макета поддерживалось вычисление выражений встроенного языка, в платформе 1С 8 контекст исполнения кода в ячейках отсутствует.

Когда для ячейки выбран тип заполнения Шаблон, платформа ищет внутри квадратных скобок [...] имя параметра, значение которого будет передано из программного кода. Если поместить в ячейку выражение вида [?(ПустаяСтрока(НазначениеВзноса), "торговая выручка", НазначениеВзноса)], платформа воспримет всю эту строку целиком как единое наименование параметра в коллекции Параметры области макета. Поскольку параметра с таким длинным именем в модуле печати нет, ячейка останется пустой или вызовет ошибку.

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

Решение 1: Вынос логики в расширение конфигурации

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

  1. Создадим новое расширение конфигурации с назначением Адаптация или Дополнение.
  2. Добавим в расширение требуемый документ или справочник, а также его макет печатной формы.
  3. В модуле менеджера объекта переопределим процедуру печати (например, с помощью аннотации &Вместо или &ИзменениеИКонтроль).
  4. Вычислим необходимое значение в коде и передадим его в стандартный параметр макета.

Посмотрим на пример кода формирования параметра области:


ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Если ПустаяСтрока(Выборка.НазначениеВзноса) Тогда
    ОбластьСтрока.Параметры.НазначениеВзноса = "торговая выручка";
Иначе
    ОбластьСтрока.Параметры.НазначениеВзноса = Выборка.НазначениеВзноса;
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьСтрока);

Или в более компактном виде с использованием тернарного условного оператора ?:


ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.НазначениеВзноса = ?(ПустаяСтрока(Выборка.НазначениеВзноса), "торговая выручка", Выборка.НазначениеВзноса);
ТабличныйДокумент.Вывести(ОбластьСтрока);

Решение 2: Создание внешней печатной формы (ВПФ)

Если внедрение расширений по регламенту базы данных ограничено, разработаем внешнюю печатную форму на базе механизма БСП (Библиотеки Стандартных Подсистем):

  1. Создадим внешнюю обработку и добавим в модуль объекта стандартные функции интеграции с БСП: СведенияОВнешнейОбработке() и процедуру Печать().
  2. Скопируем макет печатной формы из конфигурации в состав внешней обработки.
  3. В алгоритме заполнения параметров макета пропишем необходимые проверки и вычисления.
  4. Подключим внешнюю обработку в режиме предприятия через раздел Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.

Решение 3: Использование свойств формата ячейки (без программирования)

Если задача заключается только в скрытии или замещении пустых значений определенных типов данных, выясним возможности стандартной форматной строки ячейки. В свойствах ячейки макета в поле Формат можно задать параметры:

  1. Для чисел: параметр ЧН='нет' или ЧН='0,00' выводит заданный текст, если числовое значение параметра равно нулю.
  2. Для дат: параметр ДНП='Не указана' позволяет заменить пустую дату на строковое представление.
  3. Для булевых значений: параметры БЛ='Нет' и БИ='Да' задают текст для значений Ложь и Истина.

Важное ограничение: для произвольных строковых данных параметр форматной строки по умолчанию не предусмотрен, поэтому для строк замена пустого текста реализуется через код модуля печати или СКД.

Решение 4: Реализация условий в отчетах и формах на базе СКД

Если печатная форма или отчет формируются на основе Системы компоновки данных (СКД), то условную логику можно настроить полностью в пользовательском или схематическом режиме без изменения исходного кода:

  1. На вкладке Вычисляемые поля схемы компоновки добавим выражение с оператором ВЫБОР:
    
    ВЫБОР 
        КОГДА НазначениеВзноса ЕСТЬ NULL ИЛИ НазначениеВзноса = "" 
            ТОГДА "торговая выручка" 
        ИНАЧЕ НазначениеВзноса 
    КОНЕЦ
    
  2. Либо настроим Условное оформление на уровне варианта отчета: зададим условие НазначениеВзноса Не заполнено и определим оформляемое свойство Текст = "торговая выручка".
← На главную