gifts2017

Отправка сообщений через электронную почту из 1С

Опубликовал mikhail burlakov (burlakov) в раздел Программирование - Практика программирования

По просьбам коллег по цеху выкладываю давно работающий механизм отправки сообщений через электронную почту из 1С.

Внутри файлик с конфой. Ставится сбоку. Но для нормальной работы потребуется наличие справочников из типовых конфигураций (Пользователи, Физические лица, Виды контактной информации и т.п.). Проверено работает на КА и УПП. Но в принципе ничто не мешает использоваться процедуры и в других конфигурациях. Только надо будет позаботиться о совместимости.

Посредством этого механизма можно оповещать пользователей практически о любых событиях в системе (например о создании элемента справочника, проведении документа), а также отправка необходимых отчетов руководству в полностью автоматическом режиме.

Код формирования письма будет выглядеть примерно так:

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

Результат=Запрос.Выполнить().Выбрать();
Если Результат.Количество() > 0 тогда
    
    АдресОтправителя =Константы.АдресОтправителя.Получить();
    ИмяОтправителя        = ?(ПолноеИмяПользователя()<>"", ПолноеИмяПользователя(),ИмяПользователя());
    
    Заголовок   = "Приход сырья на склад: "+Склад+" № "+номер+" от "+Дата+ "Поставщик:"+Контрагент;
    ТекстПисьма="";
    Пока Результат.Следующий() Цикл
        ТекстПисьма = ТекстПисьма + "<p>"+Результат.номенклатура.код+ " " + Результат.номенклатура + " " + Результат.количество + Результат.ЕдиницаИзмерения+"";
    КонецЦикла;
    
    ТипСообщенияПолученоСырье=Справочники.ТипыСообщенийПоЭлПочте.НайтиПоНаименованию("ПолученоСырье");
    Если не ТипСообщенияПолученоСырье.Пустая() Тогда
        ОтправкаЭлектронныхСообщений.ПослатьПисьмоHTMLСписку(
        ТипСообщенияПолученоСырье,            
        Заголовок, ТекстПисьма,АдресОтправителя,ИмяОтправителя);
    Иначе
        Сообщить("В справочнике ТипыСообщений нет элемента с наименованием:+ПолученоСырье");
    КонецЕсли;
КонецЕсли;

После исполнения этого кода письмо попадает в очередь, которая представляет собой регистр сведений. Затем регламентное задание отправляет письма с заданным интервалом и в случае успешного отправления удаляет их из очереди.

Есть поддержка отправки писем с вложениями. Для этого предназначен соответствующий реквизит с типом ХранилищеЗначения. В качестве вложения можно использовать отчеты сформированные в xls, да и вообще все, что угодно.

Параметры работы с почтовым сервером задаются через константы. Отдельно админку делать не стал, т.к. привык пользоваться редактом из пакета "Инструменты разработчика".


В составе конфигурации есть справочник Типы сообщений по электронной почте. Он предназначен для создания списков рассылок. Рекомендую использовать только предопределенные элементы. Также в нем можно назначить ответственного за ведение списка рассылки.

В нашей организации это работает уже 4 года и решает много проблем. Однако рекомендую не создавать слишком много рассылок для отдельных пользователей. Как показывает практика, если человеку приходит слишком много писем, он просто перестает их читать.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Конфигурация для объединения
.cf 33,30Kb
03.06.15
39
.cf 1.0 33,30Kb 39 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Карпов (karpik666) 10.02.15 18:13
Как минимум конфигурации УТ:CRM, Комплексная автоматизация имеют такой встроенный механизм, даже есть специальный документ Электронное письмо, готов поспорить, что такое имеет и бухгалтерия. Чем же ваша надстройка так существенно отличается?
2. mikhail burlakov (burlakov) 10.02.15 19:40
(1) karpik666, да хотя бы тем, что работает надежнее и не засирает базу в отличие от типовых решений. в типовых нет списков рассылок с ответственными за их ведение. ну по крайней мере раньше не было.
3. Андрей П (realandrei) 10.02.15 23:44
(2), так ли нет? в той же УПП давно уже (если не сначала времен, не помню что было в 1.2) есть справочник группы почтовой рассылки, где состав групп можно выбирать из контактных лиц, контрагентов, личных контактов, организаций, пользователей и физических лиц, так же есть ответственный за список и в каких учетных записях эл.почты может использоваться.
разделение на учетные записи весьма полезно, чтобы получателям письма приходили от разных ящиков.
4. Александр Киричков (GreenDragon) 10.03.15 16:06
То, как реализовал в нашей переписаной УТ:
1. Добавлен регистр сведений, в который вносятся клиенты, которым необходимо отправлять документы и типы печатных форм этих самых документов.
2. Добавлена подписка на событие "При проведении" в которой проверяется очередь отправленных писем, чтобы избежать дублирования отправки при повторном проведении, наличие электронного адреса получателя в карточке клиента и вызовы процедур формирования необходимых печатных форм с помещением их на общий сетевой ресурс или в хранилище.
3. Регистр "Почта по сделкам", в котором содержатся получатель, путь к печатной форме, электронный адрес получателя и статус сообщения (использую два: Исходящее и Отправлено)
4. Регламентное задание, собирающее данные из регистра "Почта по сделкам" со статусом "Исходящее" и отправляющее письмо непосредственно из 1С.

P.S. Если стоит Exchange сервер, то можно возложить отправку писем на него, напрямую подсовывая ему данные в SQL. Данный механизм крутить не стал ввиду отсутствия этого самого Exchange

5. FarFar (FarFar) 02.06.15 17:38
Скачал свежую КА. Объединил на нее Вашу конфигурацию.
Пробую открыть регистр сведений "Очередь электронных сообщений", пишет:
6. FarFar (FarFar) 02.06.15 17:38
Ошибка инициализации модуля: РегистрСведений.ОчередьЭлектронныхСообщений.Форма.ФормаСписка.Форма
по причине:
{РегистрСведений.ОчередьЭлектронныхСообщений.Форма.ФормаСписка.Форма(5,2)}: Переменная не определена (ПолитикаБезопасности)
<<?>>ПолитикаБезопасности.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
7. mikhail burlakov (burlakov) 05.06.15 13:53
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа