ОбновлениеСтатусовДоставкиSMS (БСП)

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

Обновление статусов доставки sms. Обработчик регламентного задания.

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

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

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

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

СтатусДоставки (БСП)

ПроверитьСтатусыДоставкиSMS (БСП)

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