Задача - отправлять электронных сообщений с уведомлением клиентов об изменении статусов их заказов. Конфигурация: Управление нашей фирмой 1.6.
Для при реализации я задействовал типовой функционал БСП. Сначала я создаю документ "Сообщение" на основании Заказа программно, затем выполняю отправку электронного сообщения:
&НаСервере
Процедура СоздатьОтправитьЭлектронноеСообщениеИз1С(Источник)
Событие = Документы.Событие.СоздатьДокумент();
Событие.Заполнить(Источник.Ссылка);
Событие.ТипСобытия = Перечисления.ТипыСобытий.ЭлектронноеПисьмо;
Событие.Автор = ПараметрыСеанса.ТекущийПользователь;
Событие.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Событие.Дата = ТекущаяДата();
Событие.Тема = НастройкаСостояния.Шаблон;
Событие.УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
СодержаниеПисьма = ПолучитьСодержанияПисьма(Источник.Ссылка, НастройкаСостояния.Шаблон,СтруктураДопПараметров);
Событие.Содержание = СодержаниеПисьма.Содержание;
Событие.Важность = Перечисления.ВариантыВажности.Обычная;
Событие.Состояние = Справочники.СостоянияСобытий.Запланировано;
Событие.ВходящееИсходящееСобытие = Перечисления.ВходящееИсходящееСобытие.Исходящее;
стр = Событие.ДополнительныеРеквизиты.Добавить();
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Состояние заказа клиента");
стр.Свойство = Свойство;
стр.Значение = СокрЛП(Источник.СостояниеЗаказа);
Событие.СодержаниеHTML= СодержаниеПисьма.СодержаниеHTML;
стрУч = Событие.Участники.Добавить();
стрУч.Контакт = Источник.Контрагент;
стрУч.КакСвязаться = Источник.Контрагент.КонтактнаяИнформация.Найти(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты).АдресЭП;
Событие.Записать(РежимЗаписиДокумента.Запись);
Успешно = ОтправкаПисьма(Событие);
КонецПроцедуры
&НаСервере
Функция ОтправкаПисьма(Объект)
Картинки = Новый Структура;
ФорматированныйДокумент = Новый ФорматированныйДокумент;
ФорматированныйДокумент.УстановитьHTML(Объект.СодержаниеHTML, Картинки);
ПочтовыйАдресПолучателя = "";
Для Каждого Получатель Из Объект.Участники Цикл
ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + Получатель.КакСвязаться + "; ";
КонецЦикла;
СтроковыеФункцииКлиентСервер.УдалитьПоследнийСимволВСтроке(ПочтовыйАдресПолучателя, 2);
Попытка
ПриведенныйПочтовыйАдрес = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПочтовыйАдресПолучателя);
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат Ложь;
КонецПопытки;
ПараметрыПисьма = Новый Структура;
Если ЗначениеЗаполнено(ПриведенныйПочтовыйАдрес) Тогда
ПараметрыПисьма.Вставить("Кому", ПриведенныйПочтовыйАдрес);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Тема) Тогда
ПараметрыПисьма.Вставить("Тема", Строка(Объект.Тема));
КонецЕсли;
//АдресПолучателяСкрытойКопии = ПолучитьАдресПолучателяСкрытойКопии();
//Если ЗначениеЗаполнено(АдресПолучателяСкрытойКопии) Тогда
// ПараметрыПисьма.Вставить("СлепыеКопии", АдресПолучателяСкрытойКопии);
//КонецЕсли;
//
ВложенияПисьма = Новый Соответствие;
ТелоПисьма = "";
ВложенияКартинки = Новый Структура;
ФорматированныйДокумент.ПолучитьHTML(ТелоПисьма, ВложенияКартинки);
Если ВложенияКартинки.Количество() > 0 Тогда
УправлениеНебольшойФирмойВзаимодействия.ДобавитьВложенияКартинкиВПисьмо(Объект.СодержаниеHTML, ВложенияПисьма, ВложенияКартинки);
КонецЕсли;
ДобавитьВложенияФайлы(ВложенияПисьма);
ПараметрыПисьма.Вставить("Тело", ТелоПисьма);
ПараметрыПисьма.Вставить("ТипТекста", "HTML");
ПараметрыПисьма.Вставить("Вложения", ВложенияПисьма);
Попытка
Успешно = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма);
Успешно = Истина;
Исключение
Успешно = Ложь;
КонецПопытки;
Если Успешно Тогда
Объект.Состояние = ПредопределенноеЗначение("Справочник.СостоянияСобытий.Завершено");
//Объект.Дата = ОбщегоНазначенияКлиент.ДатаСеанса();
Объект.НачалоСобытия = Объект.Дата;
Объект.ОкончаниеСобытия = Объект.Дата;
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
Возврат Успешно;
КонецФункции
&НаСервере
Функция ПолучитьСодержанияПисьма(Заказ,ТемаСобытия,СтруктураДопПараметров)
ФорматированныйДокумент = Новый ФорматированныйДокумент;
Содержание = ТемаСобытия.Содержание;
Содержание = СтрЗаменить(Содержание,"Здравствуйте,","Здравствуйте, "+СокрЛП(Заказ.Контрагент)+"!");
Если СтруктураДопПараметров.Свойство("СуммаДоставки") Тогда
Содержание = СтрЗаменить(Содержание,"составит рублей.","составит "+СтруктураДопПараметров.СуммаДоставки+" рублей.");
КонецЕсли;
Если СтруктураДопПараметров.Свойство("СуммаДоплатыЗаДоставку") Тогда
Содержание = СтрЗаменить(Содержание,"в размере рублей","в размере "+СтруктураДопПараметров.СуммаДоплатыЗаДоставку+" рублей");
КонецЕсли;
Если СтруктураДопПараметров.Свойство("НомерПочтовогоОтправления") Тогда
Содержание = СтрЗаменить(Содержание,"656000"," "+СтруктураДопПараметров.НомерПочтовогоОтправления+".");
КонецЕсли;
ФорматированныйДокумент.УстановитьФорматированнуюСтроку(Новый ФорматированнаяСтрока(Содержание));
ТекстHTML = "";
Картинки = Новый Структура;
ФорматированныйДокумент.ПолучитьHTML(ТекстHTML, Картинки);
СодержаниеHTML = ТекстHTML;
Структура = Новый Структура("Содержание, ФорматированныйДокумент, СодержаниеHTML",Содержание,ФорматированныйДокумент,СодержаниеHTML);
Возврат Структура;
КонецФункции