Отправка 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
///////////////////////////////////////////////////////////////////////////////////////////////////////