При работе с электронным документооборотом в 1С:Зарплата и управление персоналом (ЗУП) 3.1 пользователи часто сталкиваются с неприятной ситуацией: основной текст приказа (например, о кадровом переводе или приеме на работу) идеально помещается на одну страницу, но штамп визуализации электронной цифровой подписи (ЭЦП) упорно переносится на второй, почти пустой лист. Это не только увеличивает расход бумаги, но и выглядит некорректно при формировании архива документов.
В этой статье мы подробно разберем, почему так происходит, проанализируем внутренние механизмы Библиотеки стандартных подсистем (БСП) и найдем эффективные способы решения этой проблемы как через программный код, так и через настройку макетов.
Давайте разберем механику вывода документа. В последних версиях 1С штамп ЭЦП не является статичной частью макета. Он добавляется динамически после того, как основное тело документа уже сформировано. Система рассчитывает остаток свободного места на листе, и если высота области штампа хотя бы на долю миллиметра превышает доступное пространство, платформа инициирует разрыв страницы.
Существует несколько критических факторов, провоцирующих такое поведение:
Автомасштаб, система не будет пытаться «ужать» текст, чтобы вместить подпись.ПроверитьВывод() иногда дает погрешность, если настройки принтера в операционной системе не соответствуют формату А4 (например, установлен формат Letter).Рассмотрим пошагово методы решения этой задачи.
Самый быстрый и эффективный способ «заставить» штамп ЭЦП печататься на той же странице — это динамическое изменение параметров табличного документа в коде формирования печатной формы. Нам необходимо минимизировать нижнее поле и разрешить системе масштабировать контент.
Проанализируем пример кода, который необходимо вставить в процедуру печати перед выводом штампа или в самом конце формирования ТабличныйДокумент:
// Устанавливаем авто масштабирование, чтобы система сама подтянула области
ТабличныйДокумент.Автомасштаб = Истина;
// Минимизируем нижнее поле. Часто именно эти 10-20 мм мешают штампу
ТабличныйДокумент.ПолеСнизу = 0;
// При необходимости можно уменьшить и другие поля, если документ очень плотный
ТабличныйДокумент.ПолеСверху = 5;
ТабличныйДокумент.ПолеСлева = 10;
ТабличныйДокумент.ПолеСправа = 5;
Использование ТабличныйДокумент.ПолеСнизу = 0; позволяет использовать все доступное пространство листа до самого края, что в 90% случаев решает проблему переноса подписи — для этого подойдёт печатная форма трудового договора при приеме на работу.
Если вы используете внешнюю печатную форму, проблема может крыться в самом макете (Макет). Даже если визуально кажется, что внизу страницы нет ничего лишнего, там могут скрываться «артефакты».
Проделаем следующие действия в конфигураторе:
Также важно проверить «Область печати». Если она была задана жестко (через меню Таблица — Настройки печати — Установить область печати), это может конфликтовать с динамически добавляемым штампом ЭЦП. Рекомендуется очистить область печати в макете.
Если вы хотите подойти к решению профессионально, воспользуемся методом ПроверитьВывод() — есть внешняя печатная форма доп. соглашения о переводе. Этот метод позволяет заранее узнать, поместится ли группа областей на текущую страницу. Если нет — мы можем программно принять решение, например, перенести на новую страницу не только штамп, но и часть подвала (ФИО подписанта), чтобы документ выглядел эстетично.
Разберем пример реализации логики проверки:
// Создаем массив областей, которые должны выводиться вместе (неразрывно)
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьПодвал);
МассивОбластей.Добавить(ОбластьШтампЭЦП);
// Проверяем, поместятся ли они на текущий лист
Если Не ТабличныйДокумент.ПроверитьВывод(МассивОбластей) Тогда
// Если не влезают, можно принудительно вставить разрыв страницы раньше
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
// Выводим области
ТабличныйДокумент.Вывести(ОбластьПодвал);
// Далее логика БСП сама выведет штамп
Важное замечание: Метод ПроверитьВывод() работает корректно только в том случае, если на компьютере установлен принтер по умолчанию и его настройки (размер бумаги) соответствуют ожидаемым. Если в системе установлен принтер с форматом «Letter», проверка вернет Ложь гораздо раньше, чем это произойдет на реальном листе А4.
Иногда корень проблемы лежит вне 1С. Проанализируем настройки печати в самой Windows. 1С:Предприятие при расчете параметров страницы обращается к настройкам драйвера принтера, который установлен в системе «по умолчанию».
Выполните следующие шаги:
Даже в режиме предварительного просмотра в 1С система имитирует вывод на конкретный принтер. Если принтер сообщает, что его «пеprintable area» (область печати) заканчивается выше, чем мы ожидаем, штамп ЭЦП будет перенесен.
Подводя итог, можно сказать, что наиболее универсальным «лекарством» является комбинация программных методов. Посмотрите на итоговый алгоритм действий:
ТабличныйДокумент.Автомасштаб = Истина;.ТабличныйДокумент.ПолеСнизу = 0;.Эти простые шаги позволят вам добиться того, чтобы приказ и цифровая подпись всегда находились на одной странице, сохраняя при этом профессиональный вид документа и экономя ресурсы компании.