Зачастую перед разработчиками 1С встает прикладная задача: оптимизировать расход бумаги и распечатать две копии документа реализации на одном листе формата А4 так, чтобы их можно было легко разделить разрезанием. Стандартные настройки принтера, такие как «Количество экземпляров на странице», не всегда работают корректно и часто игнорируются драйверами. Рассмотрим, как решить эту задачу программными средствами ТабличногоДокумента.
Одним из самых надежных способов является создание в макете специальной области, которая будет выполнять роль «отступа» между документами. Вместо того чтобы полагаться на случайные пробелы, мы жестко задаем высоту разделителя.
ТабличногоДокумента выведите первую печатную форму.Такой подход гарантирует, что расстояние между документами всегда будет фиксированным, независимо от настроек шрифтов или параметров принтера.
Если макет документа динамический и требует точного позиционирования, воспользуйтесь методом расчета высоты. Как предложили коллеги, можно высчитать оставшееся место на листе и программно дополнить его пустой областью:
// Пример логики вывода с расчетом пустого пространства
ВывестиОбластиДокумента(ТабДок, ДокументОбъект); // Первый вывод
ВысотаТаблицы = ТабДок.ВысотаТаблицы;
// Вычисляем сколько строк нужно добавить до середины листа
ПустаяОбласть = Макет.ПолучитьОбласть("ПустаяСтрока");
Для Сч = 1 По (НеобходимаяВысота - ВысотаТаблицы) Цикл
ТабДок.Вывести(ПустаяОбласть);
КонецЦикла;
// Вывод второго экземпляра
ВывестиОбластиДокумента(ТабДок, ДокументОбъект);
Если ваша задача — расположить две печатные формы рядом (горизонтально) или точно скомпоновать их в сетку, рассмотрите использование метода Присоединить вместо Вывести. Этот метод позволяет расширять табличный документ вширь. Если же вам нужно именно вертикальное размещение, заранее подготовьте макет-контейнер с двумя областями:
Рассмотрим структуру макета:
Просто выводите данные последовательно в указанные области. Это избавляет от необходимости высчитывать высоту оставшегося места вручную, так как размеры контейнеров зафиксированы в конфигураторе.
При выводе нескольких документов в один ТабличныйДокумент важно следить за тем, чтобы 1С не вставляла разрывы страниц автоматически. Чтобы две формы гарантированно оказались на одном листе, используйте следующие приемы:
Вместе = Истина. Это запрещает программе разрывать область по середине при печати.ТабличныйДокумент как единое целое. Если документ все равно «улетает» на вторую страницу, проверьте свойство АвтоМасштаб или Масштаб самого документа.Разберем пример настройки масштаба, если формы не помещаются:
ТабДок.АвтоМасштаб = Ложь;
ТабДок.Масштаб = 95; // Немного уменьшаем для того, чтобы всё влезло на лист
Для решения задачи массовой печати мы рекомендуем остановиться на методе жестко заданных областей в макете. Это наиболее прагматичный путь, который не требует постоянного «эстетства» с вычислением пикселей. Создайте общий макет-шаблон, в который данные подставляются последовательно, используйте Вывести для вертикального расположения и всегда проверяйте настройки свойств областей, чтобы избежать неожиданных разрывов страниц при формировании документа.