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

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

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

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

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

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

Результат=Запрос.Выполнить().Выбрать();
Если Результат.Количество() > 0 тогда

АдресОтправителя =Константы.АдресОтправителя.Получить();
ИмяОтправителя        = ?(ПолноеИмяПользователя()<>"", ПолноеИмяПользователя(),ИмяПользователя());

Заголовок   = "Приход сырья на склад: "+Склад+" № "+номер+" от "+Дата+ "Поставщик:"+Контрагент;
ТекстПисьма="";
Пока Результат.Следующий() Цикл
ТекстПисьма = ТекстПисьма + "<p>"+Результат.номенклатура.код+ " " + Результат.номенклатура + " " + Результат.количество + Результат.ЕдиницаИзмерения+"";
КонецЦикла;

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

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

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

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

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

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

7 Comments

  1. karpik666

    Как минимум конфигурации УТ:CRM, Комплексная автоматизация имеют такой встроенный механизм, даже есть специальный документ Электронное письмо, готов поспорить, что такое имеет и бухгалтерия. Чем же ваша надстройка так существенно отличается?

    Reply
  2. burlakov

    (1) karpik666, да хотя бы тем, что работает надежнее и не засирает базу в отличие от типовых решений. в типовых нет списков рассылок с ответственными за их ведение. ну по крайней мере раньше не было.

    Reply
  3. realandrei

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

    разделение на учетные записи весьма полезно, чтобы получателям письма приходили от разных ящиков.

    Reply
  4. GreenDragon

    То, как реализовал в нашей переписаной УТ:

    1. Добавлен регистр сведений, в который вносятся клиенты, которым необходимо отправлять документы и типы печатных форм этих самых документов.

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

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

    4. Регламентное задание, собирающее данные из регистра «Почта по сделкам» со статусом «Исходящее» и отправляющее письмо непосредственно из 1С.

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

    Reply
  5. FarFar

    Скачал свежую КА. Объединил на нее Вашу конфигурацию.

    Пробую открыть регистр сведений «Очередь электронных сообщений», пишет:

    Reply
  6. FarFar

    Ошибка инициализации модуля: РегистрСведений.ОчередьЭлектронныхСообщений.Форма.ФормаСписка.Форма

    по причине:

    {РегистрСведений.ОчередьЭлектронныхСообщений.Форма.ФормаСписка.Форма(5,2)}: Переменная не определена (ПолитикаБезопасности)

    <<?>>ПолитикаБезопасности.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

    Reply
  7. burlakov

    (6) FarFar, исправил

    Reply

Leave a Comment

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