В процессе автоматизации документооборота часто возникает задача: программно сформировать печатную форму (например, лист согласования или отчет по визам) и автоматически вложить её в карточку внутреннего документа. Это особенно актуально, когда конечному согласующему необходимо видеть все резолюции предыдущих участников процесса непосредственно во вложении к задаче или в электронном письме. Разберем подробно, какими инструментами для этого располагает 1С:Документооборот и Библиотека стандартных подсистем (БСП).
Рассмотрим классический путь решения задачи через формирование табличного документа и его сохранение в информационную базу. Этот метод универсален и подходит для большинства конфигураций на базе БСП.
Шаг 1. Генерация табличного документа. Сначала нам необходимо получить объект ТабличныйДокумент. Это может быть результат работы стандартного менеджера печати или ваш собственный макет.
Шаг 2. Сохранение во временный файл. Чтобы прикрепить файл к документу, его нужно сначала физически записать на диск (на стороне сервера). Разберем пример кода для сохранения в формате PDF:
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.PDF);
Шаг 3. Добавление файла в карточку документа. Для этого используем программный интерфейс подсистемы РаботаСФайлами. Нам потребуется ссылка на документ-владелец и путь к созданному файлу. Проанализируем пример функции добавления:
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
ПараметрыФайла.Автор = Пользователи.ТекущийПользователь();
ПараметрыФайла.ВладелецФайла = СсылкаНаВнутреннийДокумент;
ПараметрыФайла.ИмяБезРасширения = "Лист_согласования";
ПараметрыФайла.Расширение = "pdf";
Результат = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ИмяВременногоФайла);
Важно помнить, что после выполнения операции временный файл необходимо удалить с диска, используя УдалитьФайлы(ИмяВременногоФайла).
В конфигурации 1С:Документооборот уже реализован мощный механизм формирования листов согласования. Вместо создания собственной печатной формы с нуля, мы можем использовать встроенные функции. Это гарантирует, что в файл попадут все актуальные визы, итерации и замечания.
Рассмотрим алгоритм действий:
ВнутренниеДокументы).Для получения данных о визах программно можно использовать метод:
ВизыСогласования.ПолучитьТаблицуВиз(ДокументСсылка)
Это позволит вам самостоятельно сформировать любой отчет, если стандартный вид листа согласования не подходит под требования бизнеса.
Этот способ считается наиболее «правильным» и естественным для 1С:Документооборот. Вместо жесткого кодинга печатных форм мы используем Word-файлы с настроенными правилами автозаполнения.
Выясним, как это работает программно:
Для того чтобы файл обновился перед отправкой задачи пользователю, можно использовать дополнительные обработчики бизнес-процессов. Например, на событии «При старте» задачи можно вызвать обновление файла по шаблону. В этом случае система сама перезаполнит данные актуальными резолюциями.
Если цель задачи — сделать так, чтобы пользователь видел историю согласования в письме, не обязательно плодить лишние файлы в карточке документа. Можно изменить формат самого уведомления.
Разберем, как получить HTML-обзор документа для вставки в тело письма:
ОбзорДокумента.ПолучитьОбзорВнутреннегоДокумента(СсылкаНаДокумент)
Этот метод возвращает готовую HTML-строку, которую можно интегрировать в шаблон почтового сообщения. Это более элегантное решение, так как оно не увеличивает объем базы данных за счет дублирующихся PDF-файлов и позволяет пользователю ознакомиться с ситуацией мгновенно при получении почты.
При реализации любого из выбранных подходов нам пригодятся следующие функции и методы:
РаботаСФайлами.ВыложитьФайл() — используйте этот метод, если файл уже существует в карточке и вам нужно обновить его версию (создать новую редакцию).БизнесПроцессыИЗадачиВызовСервера.ПолучитьГлавныйПредмет(ЗадачаСсылка) — помогает быстро определить, к какому именно документу относится текущая задача, чтобы знать, куда прикреплять файл.ТабличныйДокумент.Записать(Путь, ТипФайла) — базовый метод для конвертации печатной формы в нужный формат (PDF, DOCX, XLS).Подведем итог: для разовых задач или простых отчетов отлично подходит сохранение через РаботаСФайлами. Для системных решений лучше использовать механизмы автозаполнения шаблонов или настройку информативных почтовых уведомлений через ОбзорДокумента. Выбор конкретного метода зависит от того, должен ли сформированный файл остаться в архиве документа как юридически значимый документ или он служит лишь справочной информацией для участника процесса.