ОтправкаSMS (БСП)

Автор: 1С
ОбщийМодуль.Взаимодействия
БСП

Отправка sms. Выполняет процедуру отправки сообщений SMS.

// Выполняет процедуру отправки сообщений SMS.
Процедура ОтправкаSMS() Экспорт
	
	ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОтправкаSMS);
	
	УстановитьПривилегированныйРежим(Истина);
	
	МетаданныеДокумента = Метаданные.Документы.СообщениеSMS;
	
	ТаблицаАдресатовСообщения = Новый ТаблицаЗначений;
	ТаблицаАдресатовСообщения.Колонки.Добавить("НомерСтроки");
	ТаблицаАдресатовСообщения.Колонки.Добавить("НомерДляОтправки");
	ТаблицаАдресатовСообщения.Колонки.Добавить("КакСвязаться");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "
	|ВЫБРАТЬ
	|	СообщениеSMS.Ссылка КАК Ссылка,
	|	СообщениеSMS.ТекстСообщения,
	|	СообщениеSMS.ОтправлятьВТранслите,
	|	СообщениеSMSАдресаты.НомерСтроки,
	|	СообщениеSMSАдресаты.НомерДляОтправки,
	|	СообщениеSMSАдресаты.КакСвязаться
	|ИЗ
	|	Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СообщениеSMS КАК СообщениеSMS
	|		ПО СообщениеSMSАдресаты.Ссылка = СообщениеSMS.Ссылка
	|ГДЕ
	|	СообщениеSMSАдресаты.СостояниеСообщения = ЗНАЧЕНИЕ(Перечисление.СостоянияСообщенияSMS.Исходящее)
	|	И НЕ СообщениеSMS.ПометкаУдаления
	|	И СообщениеSMSАдресаты.ИдентификаторСообщения = """"
	|	И ВЫБОР
	|			КОГДА СообщениеSMS.ДатаКогдаОтправить = ДАТАВРЕМЯ(1, 1, 1)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ СообщениеSMS.ДатаКогдаОтправить < &ТекущаяДата
	|		КОНЕЦ
	|	И ВЫБОР
	|			КОГДА СообщениеSMS.ДатаАктуальностиОтправки = ДАТАВРЕМЯ(1, 1, 1)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ СообщениеSMS.ДатаАктуальностиОтправки > &ТекущаяДата
	|		КОНЕЦ
	|ИТОГИ ПО
	|	Ссылка";
	
	Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
	Если Не ОтправкаSMS.НастройкаОтправкиSMSВыполнена() Тогда
		ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(), 
		УровеньЖурналаРегистрации.Ошибка, , ,
		НСтр("ru = 'Не выполнены настройки отправки SMS.'", ОбщегоНазначения.КодОсновногоЯзыка()));
		Возврат;
	КонецЕсли;
	
	Пока ВыборкаДокументы.Следующий() Цикл
		
		ТаблицаАдресатовСообщения.Очистить();
		
		ВыборкаАдресаты = ВыборкаДокументы.Выбрать();
		Пока ВыборкаАдресаты.Следующий() Цикл
			
			ТекстСообщения       = ВыборкаАдресаты.ТекстСообщения;
			ОтправлятьВТранслите = ВыборкаАдресаты.ОтправлятьВТранслите;
			
			НоваяСтрока = ТаблицаАдресатовСообщения.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаАдресаты);
			
		КонецЦикла;
		
		Если ТаблицаАдресатовСообщения.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		НачатьТранзакцию();
		Попытка
			
			Блокировка = Новый БлокировкаДанных;
			ЭлементБлокировки = Блокировка.Добавить(МетаданныеДокумента.ПолноеИмя());
			ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаДокументы.Ссылка);
			Блокировка.Заблокировать();
		
			МассивНомеров = ТаблицаАдресатовСообщения.ВыгрузитьКолонку("НомерДляОтправки");
			РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, ТекстСообщения, "", ОтправлятьВТранслите);
			
			Если РезультатОтправки.ОтправленныеСообщения.Количество() = 0 Тогда
				ОтменитьТранзакцию();
				Продолжить;
			КонецЕсли;
			
			ДокументОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
			ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки);
			ДокументОбъект.ДополнительныеСвойства.Вставить("НеЗаписыватьКонтакты", Истина);
			ДокументОбъект.Записать();
			
			ЗафиксироватьТранзакцию();
			
		Исключение
			
			ОтменитьТранзакцию();
			ТекстСообщения = НСтр("ru = 'Не удалось отправить : %Ссылка% по причине: %Причина%'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", ВыборкаДокументы.Ссылка);
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
			                         УровеньЖурналаРегистрации.Предупреждение,
			                         МетаданныеДокумента,
			                         ВыборкаДокументы.Ссылка,
			                         ТекстСообщения);
			
		КонецПопытки;
		
	КонецЦикла;

КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

НастройкиОтправкиSMS (БСП)

СведенияДляОтправки (БСП)

ОшибкаПриОтправкеДанных (БСП)

ВключитьОтправкуСведений (БСП)

КонструкторПараметровОтправки (БСП)

ВыполнитьОтправкуПисьма (БСП)

ПриОтправкеСообщения (БСП)

ДоступнаОтправкаSMS (БСП)

TurboConf - расширение Конфигуратора 1С