Создание писем в Outlook из 1С с подписью и вложением (Excel-файл с несколькими листами)



Программное создание писем в Outlook из 1С с подписью и вложением (сгенерировав Excel-файл с листами из нескольких ТабличныхДокументов) используя COM-объект.
Как избавиться от рутинного создания однотипных писем.

 

В качестве шаблона для тела письма использую макет с HTML-разметкой, где можно с помощью параметров задать значения полям. 

Заполняю этот шаблон — делаю из него TXT и присваиваю телу письма в Outlook (свойство — HTMLBody)

// Конвертация ТабДока в TXT без использования временного файла (ТабДок_HTML - тело нашего письма в Outlook с табличкой по товарам)
Поток = Новый ПотокВПамяти();
ТабДок_HTML.Записать(Поток, ТипФайлаТабличногоДокумента.TXT);
ДвоичныеДанныеФайла = Поток.ЗакрытьИПолучитьДвоичныеДанные();
HTMLТекст = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеФайла, КодировкаТекста.UTF8);

 

Минимальная версия платформы — 8.3.12, связана с использованием объекта "ПакетОтображаемыхДокументов", через него создается вложение Excel-файл с несколькими листами (вы можете просто закомментировать код)

// Сформируем вложения с несколькими ТабДоками в одной книге (добавляя для каждого ТабДока свой лист)
Книга = Новый ПакетОтображаемыхДокументов;
// В цикле создадим печатные формы и сформируем листы
а = 0;
Для а = 1 по 2 Цикл
АдресВХранилище = СформироватьПечатнуюФормуНаСервере();
Лист = Книга.Состав.Добавить();
Лист.Наименование = "ТабДок № " + Строка(а); //Наименование листа
Лист.Данные = АдресВХранилище;
КонецЦикла;

// Создание файла Excel
стрПутьККниге = КаталогВременныхФайлов() + "Книга.XLSX";
Попытка
Книга.Записать(стрПутьККниге, ТипФайлаПакетаОтображаемыхДокументов.XLSX); //Сохранение в формате Excel 2007
Сообщить("Сформированный файл экселя (Книга.XLSX) лежит в папке TEMP: " + КаталогВременныхФайлов());
Исключение
Сообщить("Вложение для письма не создано! Описание ошибки: " + ОписаниеОшибки());
КонецПопытки;

 

И вишенка — это формирование стандартной подписи установленной у пользователя в Outlook. В русском гугле я не нашёл рабочего способа, предлагали просто дикие вещи.

Подпись формируется не при создании письма, а немного…позже, поэтому чтобы она всё же подтянулась — необходимо передать управление Outlook’у до того как мы притронемся к содержимому "HTMLbody", после этого подпись уж точно будет сформирована — её можно прикрепить к вашему произвольному телу письма. Если тело письма по вашему шаблону должно быть пустым (просто с подписью) — то такая хитрость не нужна (просто не трогаете HTMLbody).  

Письмо.Display(); //Важно(!) Необходимо передать управление Аутлуку до того как мы вставим тело письма, чтобы аутлук сформировал подпись

Письмо.HTMLBody = HTMLТекст + Письмо.HTMLBody; //В Письмо.HTMLBody хранится сгенерированная подпись

 

Как убрать предупреждение:

При формировании писем из 1С Outlook будет постоянно вас оберегать показывая данное сообщение и для того чтобы его отключить необходимо запустить Outlook от имени администратора и далее:

Файл -> Настройки -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Программный доступ -> Никогда не предупреждать о подозрительной активности.

Тестирование проводилось на платформе 8.3.13.1513, запуск через файл-открыть.

Описание работы обработки: На форме обработки одна кнопка — "сформировать письмо" — выполняет демонстрационную роль, будет создано письмо с одним вложением — Книга.XLSX (файл будет сохранен в папку TEMP — местоположение файла будет выведено через "сообщить()"), в теле письма будет таблица построенная с помощью HTML-разметки и если у вас установлена подпись — то она будет прикреплена. Обработка не отправляет письма, она только их формирует, письма отправляются пользователем после того как он убедится что всё в порядке.

Применение: Данные обработка демонстрирует как можно несложно автоматизировать создание рутинных однотипных писем. Возможность создания какого-то общего шаблона с каким-либо автозаполнением — получателей, темы письма, тела письма, прикрепление вложений в зависимости от задачи/входных данных. 

5 Comments

  1. XSlava

    В данном методе отправки писем через OutLook есть подводный камень. Если платформа 1С:Предприятие 64-разрядная, а OutLook 32-разрядный, это не работает. Мы не смогли разобраться, видимо где-то есть особенность в регистрации COM объектов 32-разрядных для 64-разрядной платформы ОС и как следствие их видимости для 1С.

    Reply
  2. Merkalov

    (1) Не знал, спасибо за комментарий.

    Reply
  3. chg

    (1)есть такая проблема, решается на уровне регистрации в Службе компонентов отдельно для 32 и 64 бит

    Reply
  4. XSlava

    (3)Красиво написано.

    Reply
  5. chg

    (4)ну такой уж этот COM вредный, что тут поделаешь)

    где то тут на инфостате был уже разбор по поводу 32 и 64 бита.

    Reply

Leave a Comment

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