Разберем одну из нестандартных задач, с которой сталкиваются разработчики 1С: необходимость «газетной» верстки печатной формы. Суть задачи заключается в том, чтобы данные сначала заполняли левую часть страницы, а при достижении нижней границы автоматически продолжали выводиться в правой части того же листа. Рассмотрим по шагам, как можно реализовать такой алгоритм, учитывая ограничения платформы.
Важно понимать, что в 1С нет встроенного механизма «автоматического перетекания» текста между областями, как в профессиональных издательских системах. Стандартный ТабличныйДокумент — это динамический объект, результат отображения которого зависит от драйвера принтера и настроек полей операционной системы. Поэтому любая попытка программно «загнать» данные в колонки требует тщательного контроля за выводом строк.
ПроверитьВывод()Ключевым инструментом для решения этой задачи является метод ПроверитьВывод(). Он позволяет заранее узнать, поместится ли конкретная область или массив областей на страницу, не выводя их фактически. Это критически важно для принятия решения о переносе данных на следующую колонку или страницу.
Рассмотрим структуру проверки на примере:
МассивПроверки = Новый Массив;
МассивПроверки.Добавить(ОбластьСтроки);
Если Не ТабДок.ПроверитьВывод(МассивПроверки) Тогда
// Место закончилось, выполняем перенос
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
Для реализации логики заполнения левой и правой колонки, нам необходимо организовать цикл вывода данных. Посмотрим, как это выглядит в логике кода:
ТабличныйДокумент.ПроверитьВывод(), помещается ли она в текущую область (левую или правую).ВывестиГоризонтальныйРазделительСтраниц() и сбрасываем счетчик обратно в левую часть.Одним из самых сложных моментов является разная высота строк (например, из-за длины текста в наименовании товара). Если строки имеют разную высоту, попытка сделать верстку «идеальной» приведет к тому, что строки слева и справа перестанут совпадать по горизонтальным уровням. Важно: если вы получили техническое задание на такую верстку, необходимо предупредить пользователя, что из-за разной высоты записей визуальное выравнивание будет нарушено, что является техническим ограничением табличного документа.
Иногда программная реализация перетекания может вызвать проблемы с предварительным просмотром или печатью на разных принтерах. В таких случаях мы рекомендуем рассмотреть следующие подходы:
LibreOffice или MS Excel через шаблоны. В этих приложениях механизмы верстки колонок реализованы на системном уровне.PDF-документов.Чтобы избежать сползания страниц при просмотре, убедитесь, что вы правильно управляете свойствами ПолеСлева, ПолеСправа, ПолеСверху, ПолеСнизу вашего ТабличногоДокумента. Если задать эти значения в 0, это даст больше пространства для верстки, но важно помнить, что некоторые принтеры имеют физические ограничения на печать «в край». Мы рекомендуем всегда устанавливать минимальные поля, поддерживаемые большинством стандартных принтеров (обычно 5-10 мм).
Таким образом, комбинируя метод ПроверитьВывод() и программное управление позиционированием областей, вы сможете реализовать требуемую логику, однако всегда помните о нестабильности отображения табличных документов на разных устройствах печати.