===== Встраивание подсистемы "Новая почта" ===== 1. Объединяем с конфигурацией модуля новой почты {{ :delivery1.jpg?400 |}} 2. Выполняем объединение 3. Пропускаем зависимости {{ :delivery2.jpg?400 |}} 4.1 Если модуль "Новая почта" внедряется совместно с модулями торговых площадок "eComm+" тогда перетаскиваем подсистему "Новая почта" в торговые площадки Только вместе с "eComm+" {{ :delivery3.jpg?400 |}} 4.2 Если модуль "Новая почта" внедряется самостоятельно (без модулей "eComm+") тогда отображаем подсистему "eComm_СлужбыДоставки" в командном интерфейсе Только самостоятельно (без "eComm+") {{ ::bas_np_only.png?400 |}} ===== Редактирование документа “Заказ клиента” ===== ==== Редактирование формы документа “Заказ клиента” ==== Добавляем в конце метода “ПриСозданииНаСервере” следующий код //++ 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.ДокОснование} //-- Отобразим добавленные колонки на форме списка {{ :nobaposhtaorderlist.png?direct&600 |}} ==== Редактирование роли "Базовые права УТ" ==== Для роли "Базовые права УТ" добавим право на чтение и просмотр к: * регистрам "eComm_СтатусыЭкспрессНакладных", "eComm_ЭкспрессНакладныеСпискаЗаказов" * документу "eComm_ЭкспрессНакладная" ==== Редактирование формы документа "СообщениеSMS" ==== === Метод "ОтправитьВыполнить" === Приведем код к следующему виду: Если ОтправленоУспешно Тогда Оповестить("СообщениеSMSОтправлено"); //++ Закрыть(); КонецЕсли; ==== Расширяем определяемый тип "ПредметШаблонаСообщения" типом "ДокументСсылка.eComm_ЭкспрессНакладная" ==== ==== Редактирование типа реквизита "ВзаимодействиеОснование" документа "СообщениеSMS" ==== * Дополним реквизит документа "ВзаимодействиеОснование" типом "ДокументСсылка.ЗаказКлиента" * Дополним реквизит формы элемента "ВзаимодействиеОснование" документа "СообщениеSMS" типом "ДокументСсылка.ЗаказКлиента" ===== Исправление ошибок подсистемы "Отправка SMS TURBO" ===== Если Вы используете провайдера TURBO SMS, тогда Вам, вероятно, понадобится исправить ошибки типовой конфигурации. ==== Редактирование табличной части "Адресаты" документа "СообщениеSMS" ==== В реквизите табличной части "Адресаты" документа "СообщениеSMS" увеличиваем длину реквизита "ИдентификаторСообщения" до 36 символов ==== Редактирование модуля "ОтправкаSMS" ==== === Метод "ОтправитьSMS" === Приведем код к следующему виду: УстановитьПривилегированныйРежим(Истина); НастройкиОтправкиSMS = НастройкиОтправкиSMS(); УстановитьПривилегированныйРежим(Ложь); //++ //Если ИмяОтправителя = Неопределено Тогда Если ИмяОтправителя = Неопределено ИЛИ ИмяОтправителя = " " Тогда //-- ИмяОтправителя = НастройкиОтправкиSMS.ИмяОтправителя; КонецЕсли; ==== Редактирование модуля "ОтправкаSMSЧерезTURBO" ==== === Метод "ОтправитьSMS" === Приведем код к следующему виду: Ответ = ПреобразоватьОтвет(ФайлОтвета, "ns1:ResultArray"); //ИдентификаторСообщения = Ответ.id; //++ //Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения", // НомерПолучателя)); // //Если ЗначениеЗаполнено(Ответ) Тогда // Результат.ОписаниеОшибки = Результат.ОписаниеОшибки // + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент) // + ": " + Ответ // + Символы.ПС; //КонецЕсли; Попытка ИдентификаторСообщения = Новый УникальныйИдентификатор(Ответ); УспешноОтправлено = Истина; Исключение УспешноОтправлено = Ложь; КонецПопытки; Если УспешноОтправлено Тогда Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения", Элемент, Ответ)); Иначе Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент) + ": " + Ответ + Символы.ПС; КонецЕсли; //-- === Метод "СтатусДоставки" === Заменим метод "Статуст доставки" на приведенный ниже: Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт // eComm Авторизация = АвторизацияНаСайте(НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль); sXML = " | | | | | " + ИдентификаторСообщения + " | | |"; Соединение = Новый HTTPСоединение("turbosms.in.ua", 80); Заголовки = Новый Соответствие(); Заголовки.Вставить("COOKIE", Авторизация); Запрос = Новый HTTPЗапрос("/api/soap.html", Заголовки); Запрос.УстановитьТелоИзСтроки(sXML); ФайлОтвета = ПолучитьИмяВременногоФайла(); Ответ = Соединение.ОтправитьДляОбработки(Запрос, ФайлОтвета); Если Ответ.КодСостояния <> 200 Тогда Возврат Ответ.КодСостояния; КонецЕсли; СтатусДоставки = ПреобразоватьОтвет(ФайлОтвета, "ns1:GetMessageStatusResult"); УдалитьФайлы(ФайлОтвета); Возврат СтатусДоставкиSMS(СтатусДоставки); КонецФункции === Метод "ПреобразоватьОтвет" === Приведем код к следующему виду: Если СокрЛП(ЧтениеХМЛ.Имя) <> Тег и ЧтениеХМЛ.ТипУзла <> ТипУзлаXML.Текст Тогда Продолжить; ИначеЕсли ЧтениеХМЛ.ТипУзла = ТипУзлаXML.Текст и СокрЛП(ЧтениеХМЛ.Имя) = "#text" Тогда //++ //ЗначениеВозврата = СокрЛП(ЧтениеХМЛ.Значение); //Прервать; Если ЧтениеХМЛ.Значение = "Сообщения успешно отправлены" Тогда Продолжить; Иначе ЗначениеВозврата = СокрЛП(ЧтениеХМЛ.Значение); Прервать; КонецЕсли; //-- КонецЕсли; === Добавим метод "СтатусДоставкиSMS" в конце модуля === Функция СтатусДоставкиSMS(СтатусСтрокой) //Сообщение с ID X не найдено //Не достаточно параметров для выполнения функции //Вы не авторизированы //Отправлено //В очереди //Сообщение передано в мобильную сеть //Сообщение доставлено получателю //Истек срок сообщения //Удалено оператором //Не доставлено //Сообщение доставлено на сервер //Отклонено оператором //Неизвестный статус //Ошибка, сообщение не отправлено //Не достаточно кредитов на счете //Отправка отменена //Отправка приостановлена //Удалено пользователем СоответствиеСтатусов = Новый Соответствие; СоответствиеСтатусов.Вставить("" , "НеОтправлялось"); СоответствиеСтатусов.Вставить("Отправка приостановлена" , "НеОтправлялось"); // SCHEDULED СоответствиеСтатусов.Вставить("В очереди" , "Отправляется"); // ENROUTE СоответствиеСтатусов.Вставить("Сообщение передано в мобильную сеть" , "Отправляется"); // ENROUTE СоответствиеСтатусов.Вставить("Сообщение доставлено на сервер" , "Отправляется"); // ENROUTE СоответствиеСтатусов.Вставить("Сообщение доставлено получателю" , "Доставлено"); // DELIVERED СоответствиеСтатусов.Вставить("Истек срок сообщения" , "НеДоставлено"); // EXPIRED СоответствиеСтатусов.Вставить("Отправка отменена" , "НеДоставлено"); // DELETED СоответствиеСтатусов.Вставить("Удалено пользователем" , "НеДоставлено"); // DELETED СоответствиеСтатусов.Вставить("Ошибка, сообщение не отправлено" , "НеДоставлено"); // UNDELIVERABLE СоответствиеСтатусов.Вставить("Отправлено" , "Отправлено"); // ACCEPTED СоответствиеСтатусов.Вставить("Неизвестный статус" , "Ошибка"); // UNKNOWN СоответствиеСтатусов.Вставить("Отклонено оператором" , "НеОпознаноПровайдером"); // REJECTED СоответствиеСтатусов.Вставить("Удалено оператором" , "НеОпознаноПровайдером"); // DISCARDED СоответствиеСтатусов.Вставить("Не доставлено" , "НеДоставлено"); // SENDING СоответствиеСтатусов.Вставить("Не достаточно кредитов на счете" , "НеДоставлено"); // NOT_SUPPORTED СоответствиеСтатусов.Вставить("Вы не авторизированы" , "НеДоставлено"); // WRONG_ALPHANAME СоответствиеСтатусов.Вставить("Не достаточно параметров для выполнения функции", "НеДоставлено"); // WRONG_ALPHANAME_RETURNED Результат = СоответствиеСтатусов[СтатусСтрокой]; Возврат ?(Результат = Неопределено, "Ошибка", Результат); КонецФункции Обратите внимание что расписание обновлений справочников необходимо настраивать ТОЛЬКО ПОСЛЕ ПЕРВОНАЧАЛЬНОГО РУЧНОГО ОБНОВЛЕНИЯ СПРАВОЧНИКОВ. Иначе города/отделения/улицы могут задублироваться