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Отправлено"); //++
Закрыть();
КонецЕсли;
Если Вы используете провайдера TURBO SMS, тогда Вам, вероятно, понадобится исправить ошибки типовой конфигурации.
В реквизите табличной части «Адресаты» документа «СообщениеSMS» увеличиваем длину реквизита «ИдентификаторСообщения» до 36 символов
Приведем код к следующему виду:
УстановитьПривилегированныйРежим(Истина); НастройкиОтправкиSMS = НастройкиОтправкиSMS(); УстановитьПривилегированныйРежим(Ложь); //++ //Если ИмяОтправителя = Неопределено Тогда Если ИмяОтправителя = Неопределено ИЛИ ИмяОтправителя = " " Тогда //-- ИмяОтправителя = НастройкиОтправкиSMS.ИмяОтправителя; КонецЕсли;
Приведем код к следующему виду:
Ответ = ПреобразоватьОтвет(ФайлОтвета, "ns1:ResultArray");
//ИдентификаторСообщения = Ответ.id;
//++
//Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",
// НомерПолучателя));
//
//Если ЗначениеЗаполнено(Ответ) Тогда
// Результат.ОписаниеОшибки = Результат.ОписаниеОшибки
// + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент)
// + ": " + Ответ
// + Символы.ПС;
//КонецЕсли;
Попытка
ИдентификаторСообщения = Новый УникальныйИдентификатор(Ответ);
УспешноОтправлено = Истина;
Исключение
УспешноОтправлено = Ложь;
КонецПопытки;
Если УспешноОтправлено Тогда
Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения",
Элемент, Ответ));
Иначе
Результат.ОписаниеОшибки = Результат.ОписаниеОшибки
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент)
+ ": " + Ответ
+ Символы.ПС;
КонецЕсли;
//--
Заменим метод «Статуст доставки» на приведенный ниже:
Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт // eComm
Авторизация = АвторизацияНаСайте(НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль);
sXML =
"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tur=""http://turbosms.in.ua/api/Turbo"">
| <soapenv:Header/>
| <soapenv:Body>
| <tur:GetMessageStatus>
| <!--Optional:-->
| <tur:MessageId>" + ИдентификаторСообщения + "</tur:MessageId>
| </tur:GetMessageStatus>
| </soapenv:Body>
|</soapenv:Envelope>";
Соединение = Новый HTTPСоединение("turbosms.in.ua", 80);
Заголовки = Новый Соответствие();
Заголовки.Вставить("COOKIE", Авторизация);
Запрос = Новый HTTPЗапрос("/api/soap.html", Заголовки);
Запрос.УстановитьТелоИзСтроки(sXML);
ФайлОтвета = ПолучитьИмяВременногоФайла();
Ответ = Соединение.ОтправитьДляОбработки(Запрос, ФайлОтвета);
Если Ответ.КодСостояния <> 200 Тогда
Возврат Ответ.КодСостояния;
КонецЕсли;
СтатусДоставки = ПреобразоватьОтвет(ФайлОтвета, "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
Результат = СоответствиеСтатусов[СтатусСтрокой];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции