1. Объединяем с конфигурацией модуля новой почты
2. Выполняем объединение
3. Пропускаем зависимости
4.1 Если модуль «Новая почта» внедряется совместно с модулями торговых площадок «eComm+» тогда перетаскиваем подсистему «Новая почта» в торговые площадки
4.2 Если модуль «Новая почта» внедряется самостоятельно (без модулей «eComm+») тогда отображаем подсистему «eComm_СлужбыДоставки» в командном интерфейсе
Добавляем в конце метода “ПриСозданииНаСервере” следующий код
//++ ingenum.com.ua / Торговые площадки eCommДоставкаСервер.ЗаказПокупателя_ФормаДокумента_ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); //-- ingenum//
Добавляем в конце модуля формы следующий код
&НаКлиенте
Процедура eComm_ЭкспрессНакладнаяНажатие(Элемент, СтандартнаяОбработка) //++ eComm / Службы доставки
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Данные не записаны.
|Переход к экспресс-накладной возможен только после сохранения заказа';
|
|uk = 'Данные не записаны.
|Перехід до експрес-накладної можливий лише після збереження замовлення'"));
Возврат;
КонецЕсли;
Если Элемент.Имя = "eComm_ЭкспрессНакладная_Открыть" Тогда
// Это открытие списка накладных
СписокВыбора = eCommДоставкаСервер.СписокЭкспрессНакладных(Объект.Ссылка);
Если СписокВыбора.Количество() > 1 Тогда
ОповещениеОВыборе = Новый ОписаниеОповещения("ВыполнитьПослеВыбораЗначения", ЭтаФорма, Объект.Ссылка);
ПоказатьВыборИзМеню(ОповещениеОВыборе, СписокВыбора, Элементы["eComm_ЭкспрессНакладная_Открыть"]);
ИначеЕсли СписокВыбора.Количество() = 1 Тогда
ВыполнитьПослеВыбораЗначения(СписокВыбора[0], Объект.Ссылка);
Иначе
// Создадим если ранее накладная не была создана
ВыполнитьПослеВыбораЗначения(Новый Структура("Значение", Неопределено), Объект.Ссылка);
КонецЕсли;
ИначеЕсли Элемент.Имя = "eComm_ЭкспрессНакладная_Создать" Тогда
// Это создание новой накладной
ВыполнитьПослеВыбораЗначения(Новый Структура("Значение", Неопределено), Объект.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПослеВыбораЗначения(ЭлементСпискаВыбора, Заказ) Экспорт //++ eComm / Службы доставки
Если НЕ ЭлементСпискаВыбора = Неопределено Тогда
ЗначенияЗаполнения = Новый Структура("ДокументОснование", Заказ);
ОткрытьФорму("Документ.eComm_ЭкспрессНакладная.ФормаОбъекта", Новый Структура("Ключ, ЗначенияЗаполнения", ЭлементСпискаВыбора.Значение, ЗначенияЗаполнения));
КонецЕсли;
КонецПроцедуры
Для реквизита «Список» выполняем команду «Настройка списка» и приводим текст запроса к такому виду:
ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0) КАК СуммаОплатыОборот,
//++
,eComm_СтатусыЭкспрессНакладных.ЭкспрессНакладная КАК ЭкспрессНакладная,
eComm_СтатусыЭкспрессНакладных.ОписаниеСтатуса КАК ОписаниеСтатуса,
eComm_СтатусыЭкспрессНакладных.СтатусДенежногоПеревода,
eComm_СтатусыЭкспрессНакладных.ДнейХраненияНаСкладе КАК ДнейХраненияНаСкладе,
eComm_СтатусыЭкспрессНакладных.НачалоПлатногоХранения,
ЕСТЬNULL(СообщенияSMS.КоличествоSMS, 0) КАК SMS
//--
ИЗ
Документ.ЗаказКлиента КАК ДокументЗаказКлиента
//++
{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_ЭкспрессНакладныеСпискаЗаказов КАК eComm_ЭкспрессНакладныеСпискаЗаказов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_СтатусыЭкспрессНакладных КАК eComm_СтатусыЭкспрессНакладных
ПО eComm_ЭкспрессНакладныеСпискаЗаказов.ЭкспрессНакладная = eComm_СтатусыЭкспрессНакладных.ЭкспрессНакладная
ПО eComm_ЭкспрессНакладныеСпискаЗаказов.ДокументОснование = ДокументЗаказКлиента.Ссылка}
{ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СообщениеSMS.Ссылка) КАК КоличествоSMS,
СообщениеSMS.ВзаимодействиеОснование КАК ДокОснование
ИЗ
Документ.СообщениеSMS КАК СообщениеSMS
ГДЕ
СообщениеSMS.ПометкаУдаления = ЛОЖЬ
СГРУППИРОВАТЬ ПО
СообщениеSMS.ВзаимодействиеОснование) КАК СообщенияSMS
ПО ДокументЗаказКлиента.Ссылка = СообщенияSMS.ДокОснование}
//--
Для роли «Базовые права УТ» добавим право на чтение и просмотр к:
Приведем код к следующему виду:
Записать();
Оповестить("СообщениеSMSОтправлено"); //++
Закрыть();
Приведем код к следующему виду:
Если ПолучитьФункциональнуюОпцию("ИспользоватьСчетаНаОплатуКлиентам") Тогда
МассивОбъектовСДаннымиШаблоновСообщений.Добавить("Документ.СчетНаОплатуКлиенту");
КонецЕсли;
МассивОбъектовСДаннымиШаблоновСообщений.Добавить("Документ.eComm_ЭкспрессНакладная"); //++
Возврат МассивОбъектовСДаннымиШаблоновСообщений;
Если Вы используете провайдера TURBO SMS, тогда Вам, вероятно, понадобится исправить ошибки типовой конфигурации.
В реквизите табличной части «Адресаты» документа «СообщениеSMS» увеличиваем длину реквизита «ИдентификаторСообщения» до 36 символов
Приведем код к следующему виду:
Ответ = ПреобразоватьОтвет(ФайлОтвета, "ns1:ResultArray");
//ИдентификаторСообщения = Ответ.id;
//++
//Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",
// НомерПолучателя));
//
//Если ЗначениеЗаполнено(Ответ) Тогда
// Результат.ОписаниеОшибки = Результат.ОписаниеОшибки
// + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент)
// + ": " + Ответ
// + Символы.ПС;
//КонецЕсли;
Попытка
ИдентификаторСообщения = Новый УникальныйИдентификатор(Ответ);
УспешноОтправлено = Истина;
Исключение
УспешноОтправлено = Ложь;
КонецПопытки;
Если УспешноОтправлено Тогда
Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",
Элемент, Ответ));
Иначе
Результат.ОписаниеОшибки = Результат.ОписаниеОшибки
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент)
+ ": " + Ответ
+ Символы.ПС;
КонецЕсли;
//--
Приведем код к следующему виду:
| <soapenv:Body> | <tur:GetMessageStatus> | <!--Optional:--> | <tur:MessageId>" + ИдентификаторСообщения + "</tur:MessageId> | </tur:GetMessageStatus> | </soapenv:Body>
//++ //Баланс = ПреобразоватьОтвет(ФайлОтвета, "ns1:GetCreditBalanceResult"); //УдалитьФайлы(ФайлОтвета); //Ответ = Неопределено; //Запрос = Неопределено; //Соединение = Неопределено; //Возврат Баланс; СтатусДоставки = ПреобразоватьОтвет(ФайлОтвета, "ns1:GetMessageStatusResult"); УдалитьФайлы(ФайлОтвета); Возврат СтатусДоставкиSMS(СтатусДоставки); //--
Приведем код к следующему виду:
Если СокрЛП(ЧтениеХМЛ.Имя) <> Тег и ЧтениеХМЛ.ТипУзла <> ТипУзлаXML.Текст Тогда Продолжить; ИначеЕсли ЧтениеХМЛ.ТипУзла = ТипУзлаXML.Текст и СокрЛП(ЧтениеХМЛ.Имя) = "#text" Тогда //++ //ЗначениеВозврата = СокрЛП(ЧтениеХМЛ.Значение); //Прервать; Если ЧтениеХМЛ.Значение = "Сообщения успешно отправлены" Тогда Продолжить; Иначе ЗначениеВозврата = СокрЛП(ЧтениеХМЛ.Значение); Прервать; КонецЕсли; //-- КонецЕсли;
Функция СтатусДоставкиSMS(СтатусСтрокой)
//Сообщение с ID X не найдено
//Не достаточно параметров для выполнения функции
//Вы не авторизированы
//Отправлено
//В очереди
//Сообщение передано в мобильную сеть
//Сообщение доставлено получателю
//Истек срок сообщения
//Удалено оператором
//Не доставлено
//Сообщение доставлено на сервер
//Отклонено оператором
//Неизвестный статус
//Ошибка, сообщение не отправлено
//Не достаточно кредитов на счете
//Отправка отменена
//Отправка приостановлена
//Удалено пользователем
СоответствиеСтатусов = Новый Соответствие;
СоответствиеСтатусов.Вставить("" , "НеОтправлялось");
СоответствиеСтатусов.Вставить("Отправка приостановлена" , "НеОтправлялось"); // SCHEDULED
СоответствиеСтатусов.Вставить("В очереди" , "Отправляется"); // ENROUTE
СоответствиеСтатусов.Вставить("Сообщение передано в мобильную сеть" , "Отправляется"); // ENROUTE
СоответствиеСтатусов.Вставить("Сообщение доставлено на сервер" , "Отправляется"); // ENROUTE
СоответствиеСтатусов.Вставить("Сообщение доставлено получателю" , "Доставлено"); // DELIVERED
СоответствиеСтатусов.Вставить("Истек срок сообщения" , "НеДоставлено"); // EXPIRED
СоответствиеСтатусов.Вставить("Отправка отменена" , "НеДоставлено"); // DELETED
СоответствиеСтатусов.Вставить("Удалено пользователем" , "НеДоставлено"); // DELETED
СоответствиеСтатусов.Вставить("Ошибка, сообщение не отправлено" , "НеДоставлено"); // UNDELIVERABLE
СоответствиеСтатусов.Вставить("Отправлено" , "Отправлено"); // ACCEPTED
СоответствиеСтатусов.Вставить("Неизвестный статус" , "Ошибка"); // UNKNOWN
СоответствиеСтатусов.Вставить("Отклонено оператором" , "НеОпознаноПровайдером"); // REJECTED
СоответствиеСтатусов.Вставить("Удалено оператором" , "НеОпознаноПровайдером"); // DISCARDED
СоответствиеСтатусов.Вставить("Не доставлено" , "НеДоставлено"); // SENDING
СоответствиеСтатусов.Вставить("Не достаточно кредитов на счете" , "НеДоставлено"); // NOT_SUPPORTED
СоответствиеСтатусов.Вставить("Вы не авторизированы" , "НеДоставлено"); // WRONG_ALPHANAME
СоответствиеСтатусов.Вставить("Не достаточно параметров для выполнения функции", "НеДоставлено"); // WRONG_ALPHANAME_RETURNED
Результат = СоответствиеСтатусов[СтатусСтрокой];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции
Добавим на форму реквизит «ИмяОтправителя» (Строка)
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ЛогинДляОтправкиSMS, "Логин"); //++ ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Владелец, ИмяОтправителя, "ИмяОтправителя"); //-- УстановитьПривилегированныйРежим(Ложь);
ПарольИЛогин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль, Логин, ИмяОтправителя"); //++ eComm+ / Добавлен параметр "ИмяОтправителя" УстановитьПривилегированныйРежим(Ложь); ЛогинДляОтправкиSMS = ПарольИЛогин.Логин; ПарольДляОтправкиSMS = ?(ЗначениеЗаполнено(ПарольИЛогин.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); ИмяОтправителя = ПарольИЛогин.ИмяОтправителя; //++ eComm+ / Добавлена строка
Результат = Новый Структура("Логин, Пароль, Провайдер,ИмяОтправителя"); //++ eComm+
Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("Константа.ПровайдерSMS");
УстановитьПривилегированныйРежим(Истина);
ПарольИЛогин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Владелец, "Пароль,Логин,ИмяОтправителя");//++ eComm+
УстановитьПривилегированныйРежим(Ложь);
Результат.Логин = ПарольИЛогин.Логин;
Результат.Пароль = ПарольИЛогин.Пароль;
Результат.ИмяОтправителя = ПарольИЛогин.ИмяОтправителя; //++ eComm+
Результат.Провайдер =Константы.ПровайдерSMS.Получить();
КонецЕсли;
НастройкиОтправкиSMS = НастройкиОтправкиSMS(); Если НастройкиОтправкиSMS.Провайдер = Перечисления.ПровайдерыSMS.TURBO Тогда // TURBOSMS Результат = ОтправкаSMSЧерезTURBO.ОтправитьSMS(НомераПолучателей, Текст, НастройкиОтправкиSMS.ИмяОтправителя, НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль);