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

Программист 1С v7.7
← На главную

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

Метод 1: Использование возможностей компоненты FormEx

Самым эффективным способом работы со сложными макетами в 1С 7.7 является применение внешней компоненты FormEx. Она значительно расширяет возможности стандартного объекта Таблица.

Рассмотрим использование метода УстановитьПоследнююЯчейкуТаблицы. Данный метод позволяет программно задавать координаты для вывода следующей области, что дает нам возможность управлять точкой вставки независимо от того, где закончилась предыдущая секция. Это позволяет «подвешивать» секции на одном листе так, как нам удобно, минуя стандартную привязку к строкам таблицы.

Метод 2: Программное объединение объектов Таблица

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

  1. Создаем два независимых объекта Таблица в коде.
  2. Формируем каждую секцию (левую и правую) в своем собственном объекте Таблица. На этом этапе мы можем задавать любую высоту строк внутри каждой таблицы, так как они не влияют друг на друга.
  3. Используем объект Сервис и его метод КопироватьОбластьТаблицы.
  4. Переносим данные из второй таблицы в первую, позиционируя их в нужные столбцы.

Этот подход позволяет сохранить верстку каждой части документа в идеальном состоянии, а «склеивание» происходит уже на финальной стадии формирования печатной формы.

Метод 3: Логическая верстка через одну горизонтальную секцию

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

Порядок действий:

  1. Определяем «наименьший общий знаменатель» для высоты строк. Например, если в левой секции 1 строка равна по высоте трем строкам правой секции, мы выводим левую секцию как одну, а в правую колонку добавляем пустые строки для компенсации высоты.
  2. При заполнении данных, если в одном из наборов данных строки закончились, мы принудительно выводим «пустую» строку в соответствующей ячейке, чтобы сохранить визуальное выравнивание.
  3. После вывода всех данных программно выполняем ОбъединитьСтроки или ОбъединитьЯчейки для левой части, чтобы визуально превратить несколько «технических» строк в одну цельную область.

Важные рекомендации при больших объемах печати

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

Мы проанализировали основные подходы к решению проблемы «плывущей» верстки. Выбор метода зависит от того, насколько часто меняются шаблоны и какой объем данных приходится обрабатывать. Для простых форм достаточно программного объединения областей, для сложных и массовых решений лучше использовать методы внешних компонент или формирование документа через COM.

← На главную