Почему цифровая подпись в 1С:ЗУП печатается на отдельной странице и как это исправить?

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

При работе с электронным документооборотом в 1С:Зарплата и управление персоналом (ЗУП) 3.1 пользователи часто сталкиваются с неприятной ситуацией: основной текст приказа (например, о кадровом переводе или приеме на работу) идеально помещается на одну страницу, но штамп визуализации электронной цифровой подписи (ЭЦП) упорно переносится на второй, почти пустой лист. Это не только увеличивает расход бумаги, но и выглядит некорректно при формировании архива документов.

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

Выясним причину: почему штамп ЭЦП «улетает» на новый лист?

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

Существует несколько критических факторов, провоцирующих такое поведение:

  1. Жесткие границы полей: Если нижнее поле страницы установлено, например, в 10 мм, а штамп имеет высоту 20 мм, то для его вывода на первой странице требуется минимум 30 мм свободного пространства внизу.
  2. Отсутствие авто масштабирования: Если для табличного документа не включено свойство Автомасштаб, система не будет пытаться «ужать» текст, чтобы вместить подпись.
  3. Ошибки в расчете высоты: Метод ПроверитьВывод() иногда дает погрешность, если настройки принтера в операционной системе не соответствуют формату А4 (например, установлен формат Letter).

Рассмотрим пошагово методы решения этой задачи.

Решение 1. Программная настройка параметров страницы

Самый быстрый и эффективный способ «заставить» штамп ЭЦП печататься на той же странице — это динамическое изменение параметров табличного документа в коде формирования печатной формы. Нам необходимо минимизировать нижнее поле и разрешить системе масштабировать контент.

Проанализируем пример кода, который необходимо вставить в процедуру печати перед выводом штампа или в самом конце формирования ТабличныйДокумент:


// Устанавливаем авто масштабирование, чтобы система сама подтянула области
ТабличныйДокумент.Автомасштаб = Истина;

// Минимизируем нижнее поле. Часто именно эти 10-20 мм мешают штампу
ТабличныйДокумент.ПолеСнизу = 0;

// При необходимости можно уменьшить и другие поля, если документ очень плотный
ТабличныйДокумент.ПолеСверху = 5;
ТабличныйДокумент.ПолеСлева = 10;
ТабличныйДокумент.ПолеСправа = 5;

Использование ТабличныйДокумент.ПолеСнизу = 0; позволяет использовать все доступное пространство листа до самого края, что в 90% случаев решает проблему переноса подписи — для этого подойдёт печатная форма трудового договора при приеме на работу.

Решение 2. Корректировка макета внешней печатной формы

Если вы используете внешнюю печатную форму, проблема может крыться в самом макете (Макет). Даже если визуально кажется, что внизу страницы нет ничего лишнего, там могут скрываться «артефакты».

Проделаем следующие действия в конфигураторе:

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

Также важно проверить «Область печати». Если она была задана жестко (через меню Таблица — Настройки печати — Установить область печати), это может конфликтовать с динамически добавляемым штампом ЭЦП. Рекомендуется очистить область печати в макете.

Решение 3. Использование метода ПроверитьВывод для управления разрывами

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

Разберем пример реализации логики проверки:


// Создаем массив областей, которые должны выводиться вместе (неразрывно)
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьПодвал);
МассивОбластей.Добавить(ОбластьШтампЭЦП);

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

// Выводим области
ТабличныйДокумент.Вывести(ОбластьПодвал);
// Далее логика БСП сама выведет штамп

Важное замечание: Метод ПроверитьВывод() работает корректно только в том случае, если на компьютере установлен принтер по умолчанию и его настройки (размер бумаги) соответствуют ожидаемым. Если в системе установлен принтер с форматом «Letter», проверка вернет Ложь гораздо раньше, чем это произойдет на реальном листе А4.

Решение 4. Настройка драйвера принтера и предварительного просмотра

Иногда корень проблемы лежит вне 1С. Проанализируем настройки печати в самой Windows. 1С:Предприятие при расчете параметров страницы обращается к настройкам драйвера принтера, который установлен в системе «по умолчанию».

Выполните следующие шаги:

Даже в режиме предварительного просмотра в 1С система имитирует вывод на конкретный принтер. Если принтер сообщает, что его «пеprintable area» (область печати) заканчивается выше, чем мы ожидаем, штамп ЭЦП будет перенесен.

Итоги и рекомендации

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

  1. В коде формирования печатной формы всегда устанавливайте ТабличныйДокумент.Автомасштаб = Истина;.
  2. Для документов с ЭЦП принудительно устанавливайте ТабличныйДокумент.ПолеСнизу = 0;.
  3. В макете внешней печатной формы удаляйте все лишние колонки справа и строки снизу.

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

← На главную