Задача, которую мне требовалось выполнить это автоматизация отправки клиентам уведомлений об изменении статуса заказа по смс из конфигурации Управление нашей фирмой 1.6.13.41. Для этого я задействовал типовой функционал БСП создания документа "Событие" с типом "СМС" и последующей его отправки.
&НаСервере
Процедура СоздатьОтправитьСМСНаСервере()
Событие = Документы.Событие.СоздатьДокумент();
Событие.Заполнить(Источник.Ссылка);
Событие.ТипСобытия = Перечисления.ТипыСобытий.СообщениеSMS;
Событие.ВходящееИсходящееСобытие = Перечисления.ВходящееИсходящееСобытие.Исходящее;
Событие.Автор = ПараметрыСеанса.ТекущийПользователь;
Событие.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Событие.Дата = ТекущаяДата();
Событие.Содержание = СтрЗаменить(НастройкаСостояния.Шаблон.Содержание,"№","№"+Источник.Номер);//"Заказ №"+Источник.Ссылка.Номер+" ожидает перемещения" ;
Событие.Важность = Перечисления.ВариантыВажности.Обычная;
Событие.ИмяОтправителяSMS = "MirKonditer";
стрУч = Событие.Участники.Добавить();
стрУч.Контакт = Источник.Контрагент;
стрУч.КакСвязаться = Источник.Контрагент.НомерТелефона;
стрУч.НомерДляОтправки= Источник.Контрагент.НомерТелефона;
//стрУч.СтатусДоставки = Перечисления.СостоянияСообщенияSMS.Исходящее;
Событие.Записать(РежимЗаписиДокумента.Запись);
Успешно = ОтправкаСмС(Событие);
КонецПроцедуры
Далее следуют непосредственно сами процедуры отправки:
&НаСервере
Процедура ПроверитьИПреобразоватьНомераПолучателей(Событие,Отказ)
Для Каждого Получатель Из Событие.Участники Цикл
РезультатПроверки = УправлениеНебольшойФирмойКлиентСервер.ПреобразоватьНомерДляОтправкиSMS(Получатель.КакСвязаться);
Если РезультатПроверки.НомерКорректен Тогда
Получатель.НомерДляОтправки = РезультатПроверки.НомерОтправки;
Иначе
//ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
// РезультатПроверки.СообщениеОбОшибке,
// ,
// ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Событие", Получатель.КакСвязаться, "КакСвязаться"),
// ,
// Отказ);
ЗаписьЖурналаРегистрации("Неудача при отправке СМС!",УровеньЖурналаРегистрации.Ошибка,,Событие.Ссылка,""+РезультатПроверки.СообщениеОбОшибке);
Продолжить;
КонецЕсли;
КонецЦикла;
Событие.Записать();
КонецПроцедуры
&НаСервере
Функция ОтправкаСМС(Событие)
ЕстьОшибки = Ложь;
ПроверитьИПреобразоватьНомераПолучателей(Событие, ЕстьОшибки);
Если ЕстьОшибки Тогда
ЗаписьЖурналаРегистрации("Неудача при отправке СМС!",УровеньЖурналаРегистрации.Ошибка,,Событие.Ссылка,"Неверно задан номер телефона!");
Возврат Истина;
КонецЕсли;
ОписаниеОшибки = ВыполнитьОтправкуSMS(Событие);
Если ПустаяСтрока(ОписаниеОшибки) Тогда
//Объект.Состояние = ПредопределенноеЗначение("Справочник.СостоянияСобытий.Завершено");
//Объект.Дата = ОбщегоНазначенияКлиент.ДатаСеанса();
//Объект.НачалоСобытия = Объект.Дата;
//Объект.ОкончаниеСобытия = Объект.Дата;
//Записать();
//ПоказатьОповещениеПользователя(НСтр("ru = 'SMS успешно отправлено'"), ПолучитьНавигационнуюСсылку(Объект.Событие), Строка(Объект.Событие), БиблиотекаКартинок.Информация32);
Возврат Истина;
//Закрыть();
Иначе
ЗаписьЖурналаРегистрации("Неудача при отправке СМС!",УровеньЖурналаРегистрации.Ошибка,,Событие.Ссылка,""+ОписаниеОшибки);
Возврат Ложь;
//ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки,,"Объект");
КонецЕсли;
КонецФункции
&НаСервере
Функция ВыполнитьОтправкуSMS(Событие)
ОбъектСобытие = Событие;
ОтправлятьВТранслите = Ложь;
МассивНомеров = ОбъектСобытие.Участники.Выгрузить(,"НомерДляОтправки").ВыгрузитьКолонку("НомерДляОтправки");
РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ОбъектСобытие.Содержание, ОбъектСобытие.ИмяОтправителяSMS, ОтправлятьВТранслите);
Для Каждого ОтправленноеСообщение Из РезультатОтправки.ОтправленныеСообщения Цикл
Для Каждого НайденнаяСтрока Из ОбъектСобытие.Участники.НайтиСтроки(Новый Структура("НомерДляОтправки", ОтправленноеСообщение.НомерПолучателя)) Цикл
НайденнаяСтрока.ИдентификаторСообщения = ОтправленноеСообщение.ИдентификаторСообщения;
НайденнаяСтрока.СтатусДоставки = Перечисления.СостоянияСообщенияSMS.Исходящее;
КонецЦикла;
КонецЦикла;
ОбъектСобытие.Состояние = ПредопределенноеЗначение("Справочник.СостоянияСобытий.Завершено");
ОбъектСобытие.Дата = ТекущаяДата();//ОбщегоНазначенияКлиент.ДатаСеанса();
ОбъектСобытие.НачалоСобытия = ОбъектСобытие.Дата;
ОбъектСобытие.ОкончаниеСобытия = ОбъектСобытие.Дата;
ОбъектСобытие.Записать();
Возврат РезультатОтправки.ОписаниеОшибки;
КонецФункции