К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как не выводить область в макете 1С: практическое руководство

Разбираем, как не выводить область в макете 1С: условия в коде, параметры макета, удаление строк, проверка результата и типичные ошибки разработчиков.

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

Ключевой принцип прост: в табличный документ попадает только то, что явно выведено методом Вывести() или Присоединить(). Если область не вызвать — её не будет в печатной форме. Вся логика «не выводить область» строится вокруг управления вызовом этих методов и, в отдельных случаях, вокруг настроек самого макета.

Как устроен вывод областей макета

Табличный документ в 1С формируется последовательно: разработчик получает область из макета методом ПолучитьОбласть("ИмяОбласти"), заполняет её параметры и выводит в результирующий документ. Макет при этом — только шаблон. Само наличие области в макете не означает, что она появится на печати: она появится только после явного вызова ТабДок.Вывести(Область).

Из этого следуют два базовых способа «не выводить область». Первый — не вызывать Вывести() для этой области вообще. Второй — вызвать, но сделать содержимое пустым или невидимым, что применяется реже и обычно считается плохой практикой, потому что пустые строки оставляют лишние отступы и ломают нумерацию строк.

Способ 1. Условный вывод области через Если

Самый распространённый сценарий — область нужна не всегда, а по условию. В этом случае получение и вывод области помещают внутрь условного оператора. Типичный пример — строка со скидкой в счёте или акте:

Если ЗначениеЗаполнено(Скидка) И Скидка > 0 Тогда

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

ОбластьСкидка.Параметры.СуммаСкидки = Скидка;

ТабДок.Вывести(ОбластьСкидка);

КонецЕсли;

Если условие не выполняется, область просто не попадает в табличный документ — никаких пустых строк и артефактов вёрстки. Важно получать область внутри условия, а не до него: лишний вызов ПолучитьОбласть() без вывода безвреден, но загромождает код и вводит в заблуждение при чтении.

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

Условие по данным документа

Часто решение о выводе зависит от реквизитов объекта: заполнен ли договор, есть ли комментарий, выбран ли способ доставки. Проверяйте данные до вывода области и учитывайте, что ЗначениеЗаполнено() корректно отрабатывает для пустых строк, дат и ссылок, но не для нулевых чисел в некоторых сценариях — число 0 считается заполненным значением. Для числовых проверок используйте явное сравнение.

Условие по настройке печатной формы

Если видимость области должна управляться пользователем, добавьте параметр в команду печати или реквизит-флажок в форму настроек. В модуле менеджера печати значение передаётся в процедуру формирования, и область выводится только при установленном флаге. Это удобнее, чем правка макета под каждого клиента.

Способ 2. Удалить область из макета навсегда

Если область не нужна никогда, правильнее удалить её из макета, а не скрывать кодом. Откройте макет в конфигураторе, выделите строки области, удалите их и убедитесь, что имя области больше не используется в коде. Оставшийся вызов ПолучитьОбласть("УдалённоеИмя") вызовет ошибку при формировании печатной формы.

Перед удалением выполните поиск по всей конфигурации (Правка → Глобальный поиск) по имени области. Области нередко используются в нескольких процедурах: например, общий макет может обслуживать печать нескольких видов документов. Удаление области, которая где-то ещё выводится, приведёт к падению печати у пользователей.

Способ 3. Пропуск области в цикле по строкам

Когда макет содержит одну область строки, а выводить нужно не все строки табличной части, условие ставится внутри цикла. Например, не выводить строки с нулевым количеством или отменённые позиции:

Для Каждого СтрокаТЧ Из Товары Цикл

Если СтрокаТЧ.Количество = 0 Тогда

Продолжить;

КонецЕсли;

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

ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, СтрокаТЧ);

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

КонецЦикла;

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

Типичные ошибки
01
Вывод области с пустыми параметрами вместо пропуска вывода — на печати остаются пустые строки и лишние границы таблицы.
02
Удаление области из макета без поиска её имени в коде — печать падает с ошибкой у пользователей.
03
Пропуск строк в цикле без корректировки счётчика нумерации — в форме пропущенные номера строк.
04
Проверка числового значения через ЗначениеЗаполнено — ноль считается заполненным, условие срабатывает неверно.

Способ 4. Управление видимостью через параметры макета

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

Альтернатива — несколько вариантов области в одном макете: например, «ПодвалПолный» и «ПодвалКраткий». Код выбирает нужную область по условию. Это чище, чем попытки «затереть» часть уже выведенной области, и упрощает поддержку макета.

Сравнение вариантов

Условие вокруг Вывести()

Универсальный способ для периодического скрытия; требует аккуратности со счётчиками и итогами.

Удаление области из макета

Подходит, если область не нужна никогда; риск сломать другие процедуры, использующие тот же макет.

Несколько вариантов области

Хорош при разных версиях блока; увеличивает размер макета и требует дисциплины в именовании.

Пустые параметры

Скрывает только текст, но не строки и рамки; подходит лишь для отдельных полей.

Проверка результата и типичные проблемы

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

Отдельно проверьте многостраничный вывод: если скрытая область участвовала в расчёте повторения шапки или подвала при разрыве страниц, её удаление может изменить поведение ПроверитьВывод(). Признак проблемы — «съехавшие» подвалы или шапка, переставшая повторяться на каждой странице.

Контрольные точки

Как проверить результат

Форма без данных для области
Норма

Область отсутствует, нет пустых строк и лишних рамок

Тревожный признак

Пустая строка с границами или обрыв таблицы

Нумерация строк
Норма

Номера идут подряд без пропусков

Тревожный признак

Пропущенные номера там, где строки скрыты

Итоговые суммы
Норма

Итоги посчитаны только по выведенным строкам

Тревожный признак

Итоги включают скрытые строки или занижены

Многостраничная печать
Норма

Шапка и подвал повторяются корректно

Тревожный признак

Подвал уехал, шапка не повторяется

Границы безопасной самостоятельной доработки

Изменение условия вывода в расширении конфигурации или во внешней печатной форме — безопасный сценарий: типовой код не затрагивается, обновления проходят штатно. Прямая правка типового модуля менеджера печати или типового макета требует снятия объекта с поддержки и усложняет обновления — делайте это только с пониманием последствий и с резервной копией информационной базы.

Итог

Что важно запомнить

Область не выводится, если не вызван метод Вывести(): управляйте этим условием в коде. Для постоянного скрытия удаляйте область из макета с обязательным поиском её имени по конфигурации. Следите за нумерацией, итогами и разрывами страниц, а типовые объекты меняйте через расширения или копии.

Частые вопросы

Можно ли скрыть область макета без изменения кода?

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

Почему после скрытия области осталась пустая строка на печати?

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

Как не выводить область только для конкретного вида документа?

Если макет общий, передайте в процедуру формирования признак вида документа и постройте условие на нём. Более надёжный вариант — завести отдельный макет для этого вида документа, чтобы логика разных форм не пересекалась.

Что делать, если область выводится в типовом коде, который нельзя менять?

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

Влияет ли скрытие области на итоги и количество страниц?

Да, если итоги считаются по выведенным строкам или область участвовала в логике разрыва страниц. После изменения проверьте суммы, нумерацию и поведение шапки с подвалом на многостраничном документе.