Как программно удалить пустые строки и разрывы в печатных формах 1С?

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

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

Разбор ситуации: почему возникают разрывы при использовании метода Присоединить()

Рассмотрим распространенную ситуацию, когда при выводе областей с помощью метода Присоединить() в табличном документе (ТабличныйДокумент) образуются лишние пустые строки. Это происходит из-за специфики работы движка печати 1С. Когда мы используем Вывести(), система добавляет новую строку (или группу строк) вниз документа. Когда же мы используем Присоединить(), система пытается «приклеить» новую область справа к уже выведенной. Для реализации многоколоночной компоновки можно использовать обработку с примером печати в несколько колонок.

Важный нюанс: если высота присоединяемой области в макете больше, чем высота уже выведенной области, к которой происходит присоединение, 1С автоматически увеличивает высоту строки во всем документе либо добавляет пустые ячейки снизу для компенсации разницы. Именно это и создает визуальный «разрыв» в данных.

Проанализируем основные способы борьбы с этим явлением:

Способ 1. Выравнивание высоты областей в макете

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

  1. Откройте макет печатной формы в конфигураторе.
  2. Выделите область «Шапка» и область «Данные» (или те области, которые выводятся горизонтально друг за другом).
  3. Убедитесь, что количество строк в этих областях совпадает. Если в шапке 8 строк, а в области данных — 5, то при присоединении могут возникнуть артефакты.
  4. Попробуйте уменьшить высоту строк в макете до минимально необходимых значений. Как показывает практика, установка фиксированной высоты (например, 8-10 пунктов) для всех связанных областей решает проблему «магических» разрывов.

Способ 2. Программное удаление строк через УдалитьОбласть

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

Рассмотрим пример кода, который удаляет конкретную пустую строку:


// Определяем номер строки, которую нужно удалить
НомерСтроки = 10; 
// Удаляем область, указывая тип смещения по вертикали
ТабДок.УдалитьОбласть(ТабДок.Область(НомерСтроки, , НомерСтроки, ), ТипСмещенияТабличногоДокумента.ПоВертикали);

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


Для Сч = -(ТабДок.ВысотаТаблицы) По -1 Цикл
    НомерСтроки = -Сч;
    ОбластьСтроки = ТабДок.Область(НомерСтроки, 1, НомерСтроки, ТабДок.ШиринаТаблицы);
    // Здесь можно добавить проверку: пустая ли строка
    Если ПустаяСтрока(ОбластьСтроки.Текст) Тогда
        ТабДок.УдалитьОбласть(ТабДок.Область(НомерСтроки, , НомерСтроки, ), ТипСмещенияТабличногоДокумента.ПоВертикали);
    КонецЕсли;
КонецЦикла;

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

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

Разберем, как это реализовать:


// Скрываем область, если в ней нет данных
Если Не ЗначениеЗаполнено(ПараметрШапки) Тогда
    Область = ТабДок.Область("СтрокаСДанными");
    Область.Видимость = Ложь;
КонецЕсли;

Этот метод хорош тем, что он менее ресурсозатратен, чем удаление области, так как не пересчитывает индексы всех последующих строк в памяти.

Способ 4. Принудительная установка высоты строки в 0

Посмотрим на ситуацию, когда нам нужно гарантированно «схлопнуть» пространство. Мы можем программно задать высоту строки, даже если в макете она задана как широкая область. Выясним, как применить это на практике:


// Делаем первую строку невидимой
ТабДок.Область(1, , 1, ).ВысотаСтроки = 0;

Это действие эквивалентно скрытию строки, но дает более жесткий контроль над визуальным представлением. Обратите внимание: если в строке включено свойство АвтоВысотаСтроки, система может попытаться расширить её обратно, если в ячейках есть содержимое. Поэтому перед установкой высоты в 0 убедитесь, что ячейки очищены.

Способ 5. Оптимизация вывода картинок и логотипов

Часто причиной «раздувания» высоты строк становятся графические объекты (логотипы, печати). Проанализируем, как они влияют на макет. Если картинка привязана к ячейкам (свойство «Картинка в ячейке»), то высота строки будет подстраиваться под размер изображения.

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

Итоги и рекомендации

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

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

← На главную