Как программно сформировать и сохранить типовые печатные формы в PDF в 1С:УНФ 1.6?

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

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

Основные механизмы печати в БСП

Современные конфигурации, включая УНФ 1.6, строятся на базе Библиотеки стандартных подсистем (БСП). Для работы с печатными формами используется общий модуль УправлениеПечатью. Процесс формирования любой печатной формы (ПФ) состоит из нескольких этапов:

  1. Подготовка коллекции печатных форм.
  2. Заполнение параметров вывода.
  3. Вызов процедуры печати из модуля менеджера документа или специализированной обработки.
  4. Извлечение табличного документа из коллекции.
  5. Сохранение результата в файл.

Рассмотрим пошагово реализацию этой задачи для различных типов документов.

Формирование Счета на оплату и Акта выполненных работ

Для большинства документов в УНФ метод Печать определен непосредственно в менеджере документа. Разберем пример кода, который формирует эти документы и сохраняет их во временные файлы.


// 1. Подготавливаем коллекцию печатных форм для Счета на оплату
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетНаОплату");    
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
ОбъектыПечатиСчета = Новый СписокЗначений;  

МассивОбъектов = Новый Массив();
МассивОбъектов.Добавить(СсылкаНаСчет); // Ссылка на ваш документ

// 2. Вызываем стандартный метод печати документа
Документы.СчетНаОплату.Печать(МассивОбъектов, ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечатиСчета, ПараметрыВывода);

// 3. Получаем табличный документ из коллекции
СтрСчет = КоллекцияПечатныхФорм[0];
ТабДокСчет = СтрСчет.ТабличныйДокумент;

// 4. Сохраняем в PDF
ВремФайлСчета = ПолучитьИмяВременногоФайла("pdf");
ТабДокСчет.Записать(ВремФайлСчета, ТипФайлаТабличногоДокумента.PDF);

Аналогичным образом формируется Акт об оказании услуг (или Акт выполненных работ). Важно лишь правильно указать имя ПФ в методе ПодготовитьКоллекциюПечатныхФорм("АктОбОказанииУслуг") и вызвать метод печати соответствующего документа Документы.АктВыполненныхРабот.Печать(...).

Особенности формирования УПД (Универсального передаточного документа)

Проанализируем ситуацию с УПД. В отличие от простых актов, печать УПД и счетов-фактур в УНФ часто вынесена в отдельную обработку. Если попытаться вызвать метод Печать напрямую у документа СчетФактура, система может выдать ошибку «Метод объекта не обнаружен».

Выясним причину: логика печати налоговых документов сосредоточена в обработке ПечатьСчетФактура. Чтобы получить УПД программно, нам нужно обратиться именно к ней:


// Подготовка для УПД
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УниверсальныйПередаточныйДокумент"); 
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); 
ОбъектыПечати = Новый СписокЗначений; 

МассивОбъектов = Новый Массив(); 
МассивОбъектов.Добавить(СсылкаНаАктИлиНакладную); // УПД обычно печатается от первичного документа

// Обращаемся к специализированной обработке для формирования формы
Обработки.ПечатьСчетФактура.Печать(МассивОбъектов, ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); 

СтрУПД = КоллекцияПечатныхФорм[0]; 
ТабДокУПД = СтрУПД.ТабличныйДокумент; 
ВремФайлУпд = ПолучитьИмяВременногоФайла("pdf"); 
ТабДокУПД.Записать(ВремФайлУпд, ТипФайлаТабличногоДокумента.PDF);

Как добавить «Печать и Подпись» (Факсимиле)

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

В УНФ это часто реализуется через передачу структуры в ДополнительныеПараметры:

ПараметрыПечати.Вставить("ПечатьСПодписьюИПечатью", Истина);

Подготовка вложений и отправка письма

Когда файлы PDF созданы во временной директории сервера, их необходимо прикрепить к объекту электронного письма. Рассмотрим ситуацию, когда мы используем стандартный объект 1С ИнтернетПочтовоеСообщение или механизмы БСП.

Важный нюанс: Чтобы файлы в письме имели понятные названия (например, "Счет №15 от 10.05.2023.pdf"), а не системные имена временных файлов, рекомендуется использовать двоичные данные. Проанализируем пример кода для добавления вложений:


// Создаем двоичные данные из временного файла
ДвоичныеДанныеСчета = Новый ДвоичныеДанные(ВремФайлСчета);

// Добавляем вложение в объект письма, указывая человекочитаемое имя
Письмо.Вложения.Добавить(ДвоичныеДанныеСчета, "Счет на оплату №" + ПродлевающийСчет.Номер + ".pdf");

// Аналогично для других документов
ДвоичныеДанныеУПД = Новый ДвоичныеДанные(ВремФайлУпд);
Письмо.Вложения.Добавить(ДвоичныеДанныеУПД, "УПД по заказу " + НовыйАктВР.Номер + ".pdf");

Оптимизация: использование универсальных методов БСП

Рассмотрим более современный подход. Вместо ручного управления временными файлами, мы можем использовать метод УправлениеПечатью.СформироватьПечатныеФормыВОбластьХранилища(). Этот метод позволяет получить сразу структуру с двоичными данными ПФ. Для быстрого изучения и подбора функций пригодится справочник по методам БСП с примерами использования.

Также стоит обратить внимание на подсистему РаботаСПочтовымиСообщениями. Вместо низкоуровневой работы с протоколами SMTP, лучше использовать метод ПодготовитьПисьмо(), который автоматически подставит настройки системной учетной записи и позволит применить заранее настроенные в УНФ шаблоны писем.

Рекомендации по надежности решения

  1. Обработка исключений: Всегда оборачивайте блок формирования ПФ в конструкцию Попытка ... Исключение. Если в документе не заполнены обязательные реквизиты (например, нет ответственного за подпись), метод печати может вызвать ошибку, которая прервет выполнение всей фоновой обработки.
  2. Очистка временных файлов: Если вы используете сохранение через ТабличныйДокумент.Записать(), не забывайте удалять временные файлы после отправки письма с помощью команды УдалитьФайлы(ПутьКФайлу), чтобы не забивать дисковое пространство сервера.
  3. Группировка документов: Если клиент просит присылать все документы одним файлом, вы можете создать один общий ТабличныйДокумент, последовательно вызвать в него Вывести() для каждой формы с использованием ВывестиГоризонтальныйРазделительСтраниц(), и сохранить в PDF один результирующий файл.

Используя данные методы, вы сможете настроить полностью автономную систему рассылки первичной документации в 1С:УНФ 1.6, что значительно сократит операционную нагрузку на сотрудников бухгалтерии и отдела продаж. Если требуется готовое решение, можно воспользоваться обработкой для автоматической рассылки счетов контрагентам в УНФ 1.6.

← На главную