Как настроить вывод одного расчетного листка на одну страницу формата А4 в 1С

Программист 1С v8.3 (Обычные формы) Управленческий учет
← На главную

При работе с зарплатными отчетами в крупных организациях часто возникает задача оптимизации печати расчетных листков. Стандартно система может компоновать несколько листков на одной странице А4 для экономии бумаги, однако по требованиям конфиденциальности или для удобства выдачи сотрудникам часто требуется, чтобы каждый расчетный листок начинался с новой страницы. В этой статье мы подробно разберем, как реализовать этот функционал в различных конфигурациях 1С, таких как УПП 1.3, ЗУП 2.5 и современные версии ЗУП 3.1.

Решение для конфигураций на обычных формах (УПП 1.3, ЗУП 2.5)

В конфигурациях «Управление производственным предприятием» или «Зарплата и управление персоналом» редакции 2.5 отчет РасчетныеЛисткиОрганизаций часто построен с использованием системы компоновки данных (СКД), но финальный вывод в табличный документ управляется программно в модуле объекта. Проанализируем, как можно вмешаться в этот процесс.

Разберем первый способ — принудительную установку свойства НачалоСтраницы. Для этого нам необходимо выполнить следующие шаги в конфигураторе:

  1. Найдем отчет РасчетныеЛисткиОрганизаций и откроем его Модуль объекта.
  2. Найдем процедуру с именем ЗадатьИменаОбластямРазбитьТабличныйДокументПоСтраницам. Именно эта процедура отвечает за логику распределения данных по листу.
  3. Внутри этой процедуры найдем блок условия Если ВыводитьПоСтраницам Тогда. Нам нужно изменить стандартную логику, которая пытается «впихнуть» данные, на жесткое разделение.
  4. Заменим или дополним код следующим образом:

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

Этот метод сообщает системе, что строка, с которой начинается новый расчетный листок (НомерСтрокиНачалаРЛ), всегда должна быть первой на новой странице. Это гарантирует, что даже если предыдущий листок занимал всего 1/3 страницы, следующий не напечатается ниже него.

Способ через отключение автоматического масштабирования

Рассмотрим альтернативный, более простой программный метод, который часто оказывается эффективным в УПП. Проблема «двух листков на одной странице» часто связана с тем, что система пытается уместить данные, используя механизм АвтоМасштаб. Если расчетный листок по ширине или высоте чуть-чуть не проходит в границы, 1С сжимает его, освобождая место для следующего.

Выясним, как это исправить, на примере совета из практики. В той же процедуре ЗадатьИменаОбластямРазбитьТабличныйДокументПоСтраницам найдем строку, устанавливающую масштаб, и закомментируем её:


Процедура ЗадатьИменаОбластямРазбитьТабличныйДокументПоСтраницам(ТабличныйДокумент, ВыводитьПоСтраницам)
    // ... какой-то код ...
    Если ВыводитьПоСтраницам Тогда
        // ТабличныйДокументДляПроверки.АвтоМасштаб = Истина; // закомментировано для вывода одного листка на страницу
    КонецЕсли;
    // ... продолжение процедуры ...
КонецПроцедуры

Отключение свойства АвтоМасштаб заставляет программу использовать реальные физические размеры областей макета. Если макет расчетного листка настроен так, что он занимает значительную часть страницы, то второй листок просто не поместится и будет перенесен автоматически.

Настройка в современных конфигурациях (ЗУП 3.1)

Проанализируем ситуацию в современных версиях программы на управляемых формах. В ЗУП 3.1 разработчики предусмотрели пользовательские настройки, которые позволяют избежать изменения кода. Если нам нужно, чтобы каждый сотрудник выводился на отдельном листе, выполним следующие действия:

  1. Откроем отчет «Расчетный листок».
  2. Нажмем кнопку Настройки... и переключим вид в режим Расширенный (внизу окна).
  3. Перейдем на закладку Структура.
  4. Найдем группировку, отвечающую за сотрудника (обычно это Организация, Сотрудник или просто Сотрудник).
  5. Нажмем правую кнопку мыши на этой группировке и выберем Настройка выбранной группировки.
  6. В открывшемся окне перейдем на закладку Дополнительные настройки.
  7. Найдем параметр Новая страница и установим значение После каждой группировки (или «Перед каждой группировкой»).

После применения этих настроек и формирования отчета система автоматически вставит разрывы страниц между данными разных сотрудников. Это штатный механизм СКД, который не требует участия программиста.

Работа с макетами СКД и параметрами печати

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

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

Также важно обратить внимание на общие параметры страницы. Иногда один листок «налезает» на другой из-за слишком мелких полей. Рекомендуем проверить настройки через меню Файл — Параметры страницы непосредственно в режиме 1С:Предприятие после формирования отчета:

Важный нюанс: при использовании программного метода с ВывестиГоризонтальныйРазделительСтраниц() или свойством НачалоСтраницы, всегда проверяйте результат на предварительном просмотре. Если в цикле печати разрыв страницы ставится перед первым листком, у вас может появиться пустая первая страница. Чтобы этого избежать, добавим условие:


Если НомерСтрокиНачалаРЛ > 1 Тогда 
    ТабличныйДокумент.Область(НомерСтрокиНачалаРЛ, , НомерСтрокиНачалаРЛ,).НачалоСтраницы = Истина;
КонецЕсли;

Таким образом, мы проанализировали основные способы решения задачи. Выбор метода зависит от вашей конфигурации и того, насколько вы готовы вносить изменения в типовой код программы. Для старых систем (УПП, ЗУП 2.5) оптимально программное вмешательство, а для новых (ЗУП 3.1) — использование расширенных настроек компоновки данных.

← На главную