Отправка СМС из 1С программно

 Задача, которую мне требовалось выполнить это автоматизация отправки клиентам уведомлений об изменении статуса заказа по смс из конфигурации Управление нашей фирмой 1.6.13.41. Для этого я задействовал типовой функционал БСП создания документа "Событие" с типом "СМС" и последующей его отправки.

 

&НаСервере
Процедура СоздатьОтправитьСМСНаСервере()
Событие = Документы.Событие.СоздатьДокумент();
			Событие.Заполнить(Источник.Ссылка);
			Событие.ТипСобытия = Перечисления.ТипыСобытий.СообщениеSMS;
			Событие.ВходящееИсходящееСобытие = Перечисления.ВходящееИсходящееСобытие.Исходящее;
			Событие.Автор         = ПараметрыСеанса.ТекущийПользователь;
			Событие.Ответственный = ПараметрыСеанса.ТекущийПользователь;
			Событие.Дата          = ТекущаяДата();
			Событие.Содержание    = СтрЗаменить(НастройкаСостояния.Шаблон.Содержание,"№","№"+Источник.Номер);//"Заказ №"+Источник.Ссылка.Номер+" ожидает перемещения" ;
			Событие.Важность      = Перечисления.ВариантыВажности.Обычная;
			Событие.ИмяОтправителяSMS = "MirKonditer";
			стрУч                 = Событие.Участники.Добавить();
			стрУч.Контакт         = Источник.Контрагент;
			стрУч.КакСвязаться    = Источник.Контрагент.НомерТелефона;
			стрУч.НомерДляОтправки= Источник.Контрагент.НомерТелефона;
			//стрУч.СтатусДоставки  = Перечисления.СостоянияСообщенияSMS.Исходящее;
			Событие.Записать(РежимЗаписиДокумента.Запись);
			Успешно = ОтправкаСмС(Событие);
КонецПроцедуры

 Далее следуют непосредственно сами процедуры отправки: 

&НаСервере
Процедура ПроверитьИПреобразоватьНомераПолучателей(Событие,Отказ)
	Для Каждого Получатель Из Событие.Участники Цикл
		
		РезультатПроверки = УправлениеНебольшойФирмойКлиентСервер.ПреобразоватьНомерДляОтправкиSMS(Получатель.КакСвязаться);
		Если РезультатПроверки.НомерКорректен Тогда
			Получатель.НомерДляОтправки = РезультатПроверки.НомерОтправки;
		Иначе
			//ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			//	РезультатПроверки.СообщениеОбОшибке,
			//	,
			//	ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Событие", Получатель.КакСвязаться, "КакСвязаться"),
			//	,
			//	Отказ);
			ЗаписьЖурналаРегистрации("Неудача при отправке СМС!",УровеньЖурналаРегистрации.Ошибка,,Событие.Ссылка,""+РезультатПроверки.СообщениеОбОшибке);
			Продолжить;
		КонецЕсли;
		
	КонецЦикла;
	Событие.Записать();
КонецПроцедуры

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

КонецФункции	

&НаСервере
Функция ВыполнитьОтправкуSMS(Событие)
	ОбъектСобытие = Событие;
	ОтправлятьВТранслите = Ложь;
	МассивНомеров     = ОбъектСобытие.Участники.Выгрузить(,"НомерДляОтправки").ВыгрузитьКолонку("НомерДляОтправки");
	РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ОбъектСобытие.Содержание, ОбъектСобытие.ИмяОтправителяSMS, ОтправлятьВТранслите);
	
	Для Каждого ОтправленноеСообщение Из РезультатОтправки.ОтправленныеСообщения Цикл
		Для Каждого НайденнаяСтрока Из ОбъектСобытие.Участники.НайтиСтроки(Новый Структура("НомерДляОтправки", ОтправленноеСообщение.НомерПолучателя)) Цикл
			НайденнаяСтрока.ИдентификаторСообщения = ОтправленноеСообщение.ИдентификаторСообщения;
			НайденнаяСтрока.СтатусДоставки         = Перечисления.СостоянияСообщенияSMS.Исходящее;
		КонецЦикла;
	КонецЦикла;

	
	ОбъектСобытие.Состояние = ПредопределенноеЗначение("Справочник.СостоянияСобытий.Завершено");
	ОбъектСобытие.Дата = ТекущаяДата();//ОбщегоНазначенияКлиент.ДатаСеанса();
	ОбъектСобытие.НачалоСобытия    = ОбъектСобытие.Дата;
	ОбъектСобытие.ОкончаниеСобытия = ОбъектСобытие.Дата;
	ОбъектСобытие.Записать();
	
	Возврат РезультатОтправки.ОписаниеОшибки;
КонецФункции

 

Контакты:

Телефон: +7 963 570 26 00

E-mail: al_zzz@mail.ru

Дизайн сайта:

Веб-дизайн и верстка: Зелёнкина Елена

8 963 578 05 35, lena_431@mail.ru