В процессе автоматизации бизнес-процессов часто возникает задача автоматической рассылки документов контрагентам. Это может быть счет на оплату, акт сверки или заказ клиента. Для реализации такой задачи нам потребуется разобрать несколько этапов: получение печатной формы в формате табличного документа, сохранение её во временный файл и непосредственная отправка через почтовый протокол SMTP. В данной статье мы проанализируем, как правильно использовать встроенные механизмы 1С для решения этой задачи.
Прежде чем отправить документ, его необходимо сформировать. В типовых конфигурациях, построенных на базе БСП (Библиотека стандартных подсистем), для этого используется менеджер печати. Разберем ситуацию, когда нам нужно получить печатную форму программно, не выводя её на экран пользователю. Для этого мы обратимся к функции формирования печатных форм, которая обычно располагается в модуле менеджера соответствующего документа.
Рассмотрим пример кода, где мы инициализируем параметры печати и получаем структуру с табличными документами:
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьСтруктуруКоллекцииПечатныхФорм("СчетНаОплату");
ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(СсылкаНаДокумент);
Документы.СчетНаОплатуПокупателю.Печать(массивОбъектов, ПараметрыВывода, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыПечати);
В данном фрагменте мы используем стандартный механизм УправлениеПечатью. Важно понимать, что после выполнения метода Печать, наш табличный документ будет находиться в свойстве ТабличныйДокумент соответствующей строки коллекции.
После того как мы получили объект типа ТабличныйДокумент, нам нужно преобразовать его в общепринятый формат для пересылки, например, PDF. Это обеспечит корректное отображение документа у получателя вне зависимости от наличия установленной программы 1С. Проанализируем, как сохранить документ во временное хранилище системы, чтобы не загромождать диск постоянными файлами.
Для генерации уникального пути используем функцию ПолучитьИмяВременногоФайла. Рассмотрим реализацию этого шага:
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Здесь метод Записать принимает два параметра: путь к файлу и константу ТипФайлаТабличногоДокумента.PDF. Теперь у нас есть физический файл на сервере (или клиенте, в зависимости от контекста выполнения), готов к отправке.
Чтобы отправить письмо, системе необходимо знать параметры почтового сервера. Для этого в 1С используется объект ИнтернетПочтовыйПрофиль. Нам важно правильно указать адрес сервера АдресСервераSMTP, порт, а также настройки безопасности, такие как ИспользоватьSSLSMTP. В современных реалиях большинство почтовых сервисов (Yandex, Mail.ru, Gmail) требуют обязательного использования защищенного соединения.
Разберем создание профиля по шагам:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "robot@mail.ru";
Профиль.ПарольSMTP = "vash_parol_prilozheniya";
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоМетодAuthLogin = Истина;
Важное замечание: При работе с публичными почтовыми сервисами рекомендуется использовать специальные "пароли приложений", а не основной пароль от учетной записи. Это повышает безопасность и часто является обязательным требованием провайдеров.
Теперь мы переходим к созданию самого письма. Нам поможет объект ИнтернетПочтовоеСообщение. В него мы добавим текст письма, тему, адрес получателя и, самое главное, наш вложенный файл.
Выясним, как правильно прикрепить файл из временного хранилища:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Счет на оплату №" + СсылкаНаДокумент.Номер;
Письмо.Отправитель = "robot@mail.ru";
Письмо.ИмяОтправителя = "Автоматическая рассылка 1С";
Письмо.Получатели.Добавить("customer@client.ru");
Текст = Письмо.Тексты.Добавить();
Текст.Текст = "Добрый день! Во вложении ваш счет. Благодарим за сотрудничество.";
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
// Добавляем вложение
Письмо.Вложения.Добавить(ИмяФайла, "Shet_Na_Oplatu.pdf");
После подготовки сообщения нам остается только отправить его, используя объект ИнтернетПочта. Обязательно поместим блок отправки в конструкцию Попытка...Исключение, так как сетевые ошибки или проблемы с авторизацией — частое явление при работе с почтой.
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
Проанализируем важный нюанс: если код выполняется на стороне сервера (например, в регламентном задании), убедитесь, что у пользователя, под которым запущен агент 1С, есть права на запись в папку временных файлов. Также помните, что после отправки временный файл следует удалить с помощью команды УдалитьФайлы(ИмяФайла), чтобы не захламлять дисковое пространство сервера.
Выполним очистку следующим образом:
Попытка
УдалитьФайлы(ИмяФайла);
Исключение
// Файл может быть заблокирован, можно проигнорировать или записать в лог
КонецПопытки;
Таким образом, мы рассмотрели полный цикл автоматизации: от формирования печатной формы до отправки готового PDF-файла клиенту. Использование объекта ИнтернетПочтовоеСообщение совместно с ТипФайлаТабличногоДокумента.PDF делает этот процесс прозрачным и надежным. Следуя этим инструкциям, вы сможете настроить автоматическую рассылку практически любого документа в вашей системе 1С.