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