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