При формировании печатных форм разработчики и пользователи нередко сталкиваются с ситуацией, когда в готовом табличном документе требуется скрыть или удалить определенные промежуточные блоки (например, подписи или пустые разделители), однако команды Таблица — Формат — Скрыть и Отобразить оказываются неактивными. Если же пользователь пытается очистить содержимое ячеек вручную, на листе остается нежелательный пустой промежуток. Разберем детально, почему так происходит и как правильно решить эту задачу как интерактивно, так и на уровне программного кода.
Проанализируем основные факторы, которые блокируют стандартные инструменты форматирования строк и колонок в платформе 1С:
ТолькоПросмотр = Истина или Защита = Истина, любые изменения структуры, удаление и скрытие строк блокируются платформой.Delete или использование команды очистки стирает исключительно текст и форматирование внутри ячеек, сохраняя сами строки и их исходную высоту, что приводит к появлению пустого зазора между таблицами.Если печатная форма уже сформирована на экране и пользователю необходимо быстро убрать ненужные строки без изменения конфигурации, выполним следующие шаги:
Если мы разрабатываем печатную форму и хотим дать пользователю возможность интерактивно редактировать структуру документа после вывода, настроим свойства результирующего табличного документа в процедуре печати:
// Разрешаем редактирование и показ заголовков строк
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ОтображатьЗаголовки = Истина;
Если же требуется скрыть или удалить ненужные строки программно перед показом документа пользователю, применим свойство Видимость или метод УдалитьОбласть:
// Вариант 1. Скрытие строк целиком по именам или номерам строк
ТабДок.Область("R10:R15").Видимость = Ложь;
// Вариант 2. Физическое удаление области со сдвигом по вертикали
ОбластьПодвала = ТабДок.Область("R10:R15");
ТабДок.УдалитьОбласть(ОбластьПодвала, ТипСмещенияТабличногоДокумента.ПоВертикали);
Обратим внимание: свойство Видимость = Ложь работает только для областей, представляющих собой полные строки (формат R10:R15) или полные колонки (формат C2:C5).
Наиболее правильным с точки зрения архитектуры 1С является управление выводом секций макета еще на этапе формирования документа, чтобы не выводить лишние строки и не тратить ресурсы на их последующее удаление.
Разделим исходный макет на независимые именованные области: Шапка, Таблица1, Подвал1, Таблица2, Подвал2. В коде процедуры печати предусмотрим проверку условий или параметров печати:
// Получаем области макета
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьТаблица1 = Макет.ПолучитьОбласть("Таблица1");
ОбластьПодвал1 = Макет.ПолучитьОбласть("Подвал1");
ОбластьТаблица2 = Макет.ПолучитьОбласть("Таблица2");
// Выводим данные последовательно
ТабДок.Вывести(ОбластьШапка);
ТабДок.Вывести(ОбластьТаблица1);
// Выводим промежуточный подвал только при необходимости
Если ВыводитьПромежуточныеПодписи Тогда
ТабДок.Вывести(ОбластьПодвал1);
КонецЕсли;
// Вторая таблица выводится сразу за первой без лишних зазоров
ТабДок.Вывести(ОбластьТаблица2);
Флаг ВыводитьПромежуточныеПодписи можно вынести в форму настроек отчета или диалог печати. В таком случае пользователь получит компактный документ без пустых строк и необходимости ручной корректировки таблиц.