Регламентная отправка печатной формы заказа поставщика контрагентам

Небольшой пример работы с библиотекой стандартных подсистем. Ниже приведен код с отправкой типовой печатной формы «Заказ поставщику» в виде PDF файла на электронную почту. Отправка происходит для разных контрагентов в разное время, поэтому для справочника «Партнеры» создаем реквизит «ВремяОтправкиЗаказов». Данные манипуляции можно провести через расширения конфигурации. Для исключения повторной отправки, для документа «ЗаказПоставщику» добавляем реквизит «ЗаказОтправлен».

Код необходимо добавить в процедуру выполнения регламентного задания и настроить расписание выполнения.

УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); // Получаем учетную запись по умолчанию

Запрос = Новый Запрос;

МассивТекстаЗапроса = Новый Массив;
МассивТекстаЗапроса.Добавить("ВЫБРАТЬ
    |   ЗаказПоставщику.Ссылка КАК ЗаказПоставщику,
    |   ЕСТЬNULL(ПартнерыКонтактнаяИнформация.Представление, """") КАК Почта,
    |   ЗаказПоставщику.Партнер.ВремяОтправкиЗаказов КАК ВремяОтправкиЗаказов,
    |   ЗаказПоставщику.Номер КАК Номер
    |ИЗ
    |   Документ.ЗаказПоставщику КАК ЗаказПоставщику
    |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
    |       ПО ЗаказПоставщику.Партнер = ПартнерыКонтактнаяИнформация.Ссылка
    |           И (ПартнерыКонтактнаяИнформация.Тип = &Тип)
    |           И (ПартнерыКонтактнаяИнформация.Вид = &Вид)
    |ГДЕ
    |   ЗаказПоставщику.Проведен");

МассивТекстаЗапроса.Добавить(" И ЗаказПоставщику.Партнер.ВремяОтправкиЗаказов >= &НачалоПериода");
МассивТекстаЗапроса.Добавить(" И ЗаказПоставщику.Партнер.ВремяОтправкиЗаказов < &КонецПериода");
МассивТекстаЗапроса.Добавить(" И НЕ ЗаказПоставщику.ЗаказОтправлен");

Запрос.Текст = СтрСоединить(МассивТекстаЗапроса);

// Округляем время до 10 минут
СледующаяМинута = Число(Лев(Формат(Минута(ТекущаяДата()), "ЧЦ=2; ЧВН="), 1)) + 1;
СледующаяМинута = ?(СледующаяМинута = 6, 0, СледующаяМинута);
СледующийЧас = ?(СледующаяМинута = 0, Час(ТекущаяДата()) + 1, Час(ТекущаяДата()));

Запрос.УстановитьПараметр("НачалоПериода", Дата("00010101" + Формат(Час(ТекущаяДата()), "ЧЦ=2; ЧВН=") + Лев(Формат(Минута(ТекущаяДата()), "ЧЦ=2; ЧВН="), 1) + "000"));
Запрос.УстановитьПараметр("КонецПериода", Дата("00010101" + Формат(СледующийЧас, "ЧЦ=2; ЧВН=") + СледующаяМинута + "000"));

Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.EmailПартнера);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    Если ПустаяСтрока(ВыборкаДетальныеЗаписи.Почта) Тогда
        ЗаписьЖурналаРегистрации("ОтправкаЗаказов", УровеньЖурналаРегистрации.Ошибка, , ВыборкаДетальныеЗаписи.ЗаказПоставщику, "Для партнера не найден адрес электронной почты");
        Продолжить; 
    КонецЕсли;

    МассивДокументов = Новый Массив;
    МассивДокументов.Добавить(ВыборкаДетальныеЗаписи.ЗаказПоставщику);

    СтруктураТипов = Новый Соответствие;
    СтруктураТипов.Вставить("Документ.ЗаказПоставщику", МассивДокументов);

    ОбъектыПечати = Новый СписокЗначений;

    ПараметрыПечати = Новый Структура;
    ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
    ПараметрыПечати.Вставить("Тип", "ЗаказПоставщику");

    ПечатнаяФорма = Обработки.ПечатьЗаказовНаТоварыУслуги.СформироватьПечатнуюФормуЗаказаПоставщику(СтруктураТипов, ОбъектыПечати, ПараметрыПечати);
    ВременныйФайл = ПолучитьИмяВременногоФайла("pdf");
    ПечатнаяФорма.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.PDF);

    ПараметрыПисьма = Новый Структура;
    Адресаты = Новый Массив;
    Адресаты.Добавить(Новый Структура("Адрес,Представление", ВыборкаДетальныеЗаписи.Почта, ВыборкаДетальныеЗаписи.Почта));
    ПараметрыПисьма.Вставить("Кому", Адресаты);
    ПараметрыПисьма.Вставить("Тема", "Заказ");
    ПараметрыПисьма.Вставить("Тело", "Во вложении заказ");
    ПараметрыПисьма.Вставить("Кодировка", КодировкаТекста.UTF8);
    ПараметрыПисьма.Вставить("ТипТекста", Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст);

    ДвоичныеДанные = Новый ДвоичныеДанные(ВременныйФайл);

    СоответствиеВложения = Новый Соответствие;
    СоответствиеВложения.Вставить("Заказ.pdf", ДвоичныеДанные);

    ПараметрыПисьма.Вставить("Вложения", СоответствиеВложения);

    Попытка
        РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочты, ПараметрыПисьма);
        ДокументЗаказ = ВыборкаДетальныеЗаписи.ЗаказПоставщику.ПолучитьОбъект();
        ДокументЗаказ.ЗаказОтправлен = Истина;
        ДокументЗаказ.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
    Исключение
        ЗаписьЖурналаРегистрации("ОтправкаЗаказов", УровеньЖурналаРегистрации.Ошибка, , ВыборкаДетальныеЗаписи.ЗаказПоставщику, ОписаниеОшибки());
    КонецПопытки;

КонецЦикла;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *