До старта конференции

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

Программирование - Практика программирования

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

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

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

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

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

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

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

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

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


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

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

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

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

См. также

Комментарии
1. Андрей Карпов (karpik666) 540 10.02.15 18:13 Сейчас в теме
Как минимум конфигурации УТ:CRM, Комплексная автоматизация имеют такой встроенный механизм, даже есть специальный документ Электронное письмо, готов поспорить, что такое имеет и бухгалтерия. Чем же ваша надстройка так существенно отличается?
2. mikhail burlakov (burlakov) 64 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) 25 02.06.15 17:38 Сейчас в теме
Скачал свежую КА. Объединил на нее Вашу конфигурацию.
Пробую открыть регистр сведений "Очередь электронных сообщений", пишет:
6. Анатолий Захаров (FarFar) 25 02.06.15 17:38 Сейчас в теме
Ошибка инициализации модуля: РегистрСведений.ОчередьЭлектронныхСообщений.Форма.ФормаСписка.Форма
по причине:
{РегистрСведений.ОчередьЭлектронныхСообщений.Форма.ФормаСписка.Форма(5,2)}: Переменная не определена (ПолитикаБезопасности)
<<?>>ПолитикаБезопасности.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
7. mikhail burlakov (burlakov) 64 05.06.15 13:53 Сейчас в теме
Оставьте свое сообщение