Небольшой пример работы с библиотекой стандартных подсистем. Ниже приведен код с отправкой типовой печатной формы «Заказ поставщику» в виде PDF файла на электронную почту. Отправка происходит для разных контрагентов в разное время, поэтому для справочника «Партнеры» создаем реквизит «ВремяОтправкиЗаказов». Данные манипуляции можно провести через расширения конфигурации. Для исключения повторной отправки, для документа «ЗаказПоставщику» добавляем реквизит «ЗаказОтправлен».
Код необходимо добавить в процедуру выполнения регламентного задания и настроить расписание выполнения.
УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); // Получаем учетную запись по умолчанию
Запрос = Новый Запрос;
МассивТекстаЗапроса = Новый Массив;
МассивТекстаЗапроса.Добавить("ВЫБРАТЬ
| ЗаказПоставщику.Ссылка КАК ЗаказПоставщику,
| ЕСТЬNULL(ПартнерыКонтактнаяИнформация.Представление, """") КАК Почта,
| ЗаказПоставщику.Партнер.ВремяОтправкиЗаказов КАК ВремяОтправкиЗаказов,
| ЗаказПоставщику.Номер КАК Номер
|ИЗ
| Документ.ЗаказПоставщику КАК ЗаказПоставщику
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
| ПО ЗаказПоставщику.Партнер = ПартнерыКонтактнаяИнформация.Ссылка
| И (ПартнерыКонтактнаяИнформация.Тип = &Тип)
| И (ПартнерыКонтактнаяИнформация.Вид = &Вид)
|ГДЕ
| ЗаказПоставщику.Проведен");
МассивТекстаЗапроса.Добавить(" И ЗаказПоставщику.Партнер.ВремяОтправкиЗаказов >= &НачалоПериода");
МассивТекстаЗапроса.Добавить(" И ЗаказПоставщику.Партнер.ВремяОтправкиЗаказов < &КонецПериода");
МассивТекстаЗапроса.Добавить(" И НЕ ЗаказПоставщику.ЗаказОтправлен");
Запрос.Текст = СтрСоединить(МассивТекстаЗапроса);
// Округляем время до 10 минут
СледующаяМинута = Число(Лев(Формат(Минута(ТекущаяДата()), "ЧЦ=2; ЧВН="), 1)) + 1;
СледующаяМинута = ?(СледующаяМинута = 6, 0, СледующаяМинута);
СледующийЧас = ?(СледующаяМинута = 0, Час(ТекущаяДата()) + 1, Час(ТекущаяДата()));
Запрос.УстановитьПараметр("НачалоПериода", Дата("00010101" + Формат(Час(ТекущаяДата()), "ЧЦ=2; ЧВН=") + Лев(Формат(Минута(ТекущаяДата()), "ЧЦ=2; ЧВН="), 1) + "000"));
Запрос.УстановитьПараметр("КонецПериода", Дата("00010101" + Формат(СледующийЧас, "ЧЦ=2; ЧВН=") + СледующаяМинута + "000"));
Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.EmailПартнера);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ПустаяСтрока(ВыборкаДетальныеЗаписи.Почта) Тогда
ЗаписьЖурналаРегистрации("ОтправкаЗаказов", УровеньЖурналаРегистрации.Ошибка, , ВыборкаДетальныеЗаписи.ЗаказПоставщику, "Для партнера не найден адрес электронной почты");
Продолжить;
КонецЕсли;
МассивДокументов = Новый Массив;
МассивДокументов.Добавить(ВыборкаДетальныеЗаписи.ЗаказПоставщику);
СтруктураТипов = Новый Соответствие;
СтруктураТипов.Вставить("Документ.ЗаказПоставщику", МассивДокументов);
ОбъектыПечати = Новый СписокЗначений;
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
ПараметрыПечати.Вставить("Тип", "ЗаказПоставщику");
ПечатнаяФорма = Обработки.ПечатьЗаказовНаТоварыУслуги.СформироватьПечатнуюФормуЗаказаПоставщику(СтруктураТипов, ОбъектыПечати, ПараметрыПечати);
ВременныйФайл = ПолучитьИмяВременногоФайла("pdf");
ПечатнаяФорма.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.PDF);
ПараметрыПисьма = Новый Структура;
Адресаты = Новый Массив;
Адресаты.Добавить(Новый Структура("Адрес,Представление", ВыборкаДетальныеЗаписи.Почта, ВыборкаДетальныеЗаписи.Почта));
ПараметрыПисьма.Вставить("Кому", Адресаты);
ПараметрыПисьма.Вставить("Тема", "Заказ");
ПараметрыПисьма.Вставить("Тело", "Во вложении заказ");
ПараметрыПисьма.Вставить("Кодировка", КодировкаТекста.UTF8);
ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст);
ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл);
СоответствиеВложения = Новый Соответствие;
СоответствиеВложения.Вставить("Заказ.pdf", ДвоичныеДанные);
ПараметрыПисьма.Вставить("Вложения", СоответствиеВложения);
Попытка
РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочты, ПараметрыПисьма);
ДокументЗаказ = ВыборкаДетальныеЗаписи.ЗаказПоставщику.ПолучитьОбъект();
ДокументЗаказ.ЗаказОтправлен = Истина;
ДокументЗаказ.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Исключение
ЗаписьЖурналаРегистрации("ОтправкаЗаказов", УровеньЖурналаРегистрации.Ошибка, , ВыборкаДетальныеЗаписи.ЗаказПоставщику, ОписаниеОшибки());
КонецПопытки;
КонецЦикла;