При разработке собственных печатных форм или автоматизации рассылки документов в 1С:Бухгалтерия предприятия 3.0 программисты часто сталкиваются с тем, что стандартные механизмы вывода факсимиле не срабатывают при программном вызове. В то время как при нажатии обычной кнопки «Печать» в интерфейсе печать и подписи отображаются корректно, программное формирование табличного документа оставляет поля подвалов пустыми. В этой статье мы подробно разберем, как правильно использовать механизмы общего модуля УправлениеПечатьюБП, как подготовить макет и избежать распространенных визуальных дефектов, таких как рамки вокруг печати.
Рассмотрим ситуацию: мы вызываем функцию формирования печатной формы, получаем ТабличныйДокумент, но в нем отсутствуют изображения печати и подписей. Проблема часто кроется в том, что в типовой конфигурации вывод факсимиле — это отдельный этап постобработки документа. Метод УправлениеПечатью.СформироватьПечатныеФормы лишь подготавливает «скелет» документа. Для вставки картинок система должна знать координаты областей макета и иметь установленный флаг необходимости вывода факсимиле.
Проанализируем ключевые условия, без которых вывод невозможен:
Подписи, Печать или ОбластьФаксимиле. Если вы используете макет в расширении и изменили структуру строк, поиск может завершиться неудачей.ПараметрыПечати должен быть передан ключ ВыводитьПечатьИПодпись со значением Истина.ОрганизацииПрисоединенныеФайлы. Если файлы не помечены как «Основной», они могут не попасть в выборку.Если нам нужно быстро дополнить уже готовый ТабличныйДокумент подписью и печатью, рассмотрим пример использования метода ДобавитьФаксимилеВФоне. Несмотря на то что в некоторых современных релизах его состав может меняться, он остается рабочим инструментом для многих версий БП 3.0.
// Сначала формируем документ стандартным способом
ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати);
ТабДок = ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;
// Теперь принудительно добавляем факсимиле
// СсылкаНаДокумент — это ссылка на объект (например, СчетНаОплатуПокупателю)
УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ТабДок, СсылкаНаДокумент);
Разберем, что происходит внутри: процедура анализирует переданный документ, находит в нем области, предназначенные для подписей, и вставляет туда объекты типа РисунокТабличногоДокумента, заполняя их двоичными данными из карточки организации.
В последних версиях 1С:Бухгалтерии механизмы стали более строгими. Если первый вариант не сработал или метод был удален из общего модуля, применим последовательную доработку документа. Выясним, какие функции обеспечивают корректное позиционирование рисунков.
Рассмотрим пошаговый алгоритм внедрения кода:
// 1. Задаем область печати документа, чтобы система понимала границы
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, СведенияОДокументе.Документ);
// 2. Настраиваем параметры подписей для старых форматов макетов
УправлениеПечатьюБП.НастроитьСтарыйВариантПодписиИПечати(ТабличныйДокумент, ОбъектыПечати, СведенияОДокументе.Организация, СведенияОДокументе.Документ);
// 3. Выполняем финальную доработку и вставку факсимиле
УправлениеПечатьюБП.ДоработатьФаксимильнуюПодписьИПечать(ТабличныйДокумент, ОбъектыПечати, СведенияОДокументе.Организация, СведенияОДокументе.Документ);
Этот подход более надежен, так как метод ДоработатьФаксимильнуюПодписьИПечать не просто вставляет картинку, а управляет так называемым Z-порядком. Это гарантирует, что печать будет наложена «поверх» текста, как это происходит на бумаге, не раздвигая при этом ячейки и не нарушая верстку документа.
Часто после успешного вывода печати программисты сталкиваются с тем, что вокруг изображения печати или подписи руководителя отображается тонкая черная рамка. Это происходит потому, что создаваемый объект РисунокТабличногоДокумента по умолчанию может наследовать стиль границ из настроек системы или макета.
Как убрать рамки:
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.Нет, 0);Если отладчик показывает, что переменная ОбластьФаксимиле или аналогичная ей равна Неопределено, значит, алгоритм поиска не смог идентифицировать место для вставки. Посмотрим на типичные ошибки:
Подписи. Убедитесь, что эта область выделена именно как именованная строка или группа строк, а не просто текст в ячейке.УправлениеПечатьюБП будет ограничен или невозможен.ДополнитьДокументПодписьюИПечатью требует корректно заполненный список или массив объектов. Если передать пустой массив, поиск организации (и, соответственно, ее печати) не начнется.Соберем все воедино и посмотрим, как может выглядеть универсальный блок кода для программного формирования счета с печатью и его сохранения в PDF:
ПараметрыПечати = Новый Структура("ВыводитьПечатьИПодпись", Истина);
ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
// Формируем коллекцию печатных форм
ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы("Документ.СчетНаОплатуПокупателю", "СчетНаОплату", МассивОбъектов, ПараметрыПечати, Новый СписокЗначений);
ТабДок = ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;
// Принудительно вызываем доработку факсимиле
СсылкаНаДокумент = МассивОбъектов[0];
УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ТабДок, СсылкаНаДокумент);
// Сохраняем результат
ИмяФайла = "C:\Temp\СчетСПечатью.pdf";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Важно помнить, что если печать выполняется в фоновом задании (например, регламентной рассылкой), у пользователя, под которым запущена служба 1С, должны быть права на чтение справочников с присоединенными файлами. В противном случае картинки просто не загрузятся в память сервера, и документ останется без факсимиле без вывода ошибок в лог.