===== Встраивание подсистемы "Новая почта" ===== 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 |}} ===== Редактирование документа “Экспресс-накладная” ===== ==== Удаление макета "ДанныеШаблонаСообщений" документа “Экспресс-накладная” ==== {{ :unf_template_delete.png?direct&400 |}} ===== Редактирование документа “Заказ покупателя” ===== ==== Редактирование формы документа “Заказ покупателя” ==== Добавляем в конце метода “ПриСозданииНаСервере” следующий код //++ ingenum.com.ua / Торговые площадки eCommДоставкаСервер.ЗаказПокупателя_ФормаДокумента_ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); //-- ingenum Добавляем в конце модуля формы следующий код //++ eComm Доставка &НаКлиенте Процедура eComm_ЭкспрессНакладнаяНажатие(Элемент, СтандартнаяОбработка) Если ЗначениеЗаполнено(Объект.Ссылка) Тогда ЭН = eCommДоставкаСервер.ВернутьЭкспрессНакладную(Объект.Ссылка); ЗначенияЗаполнения = Новый Структура("ДокументОснование", Объект.Ссылка); ОткрытьФорму("Документ.eComm_ЭкспрессНакладная.ФормаОбъекта", Новый Структура("Ключ, ЗначенияЗаполнения", ЭН, ЗначенияЗаполнения)); Иначе ПоказатьПредупреждение(, "Данные не записаны. |Переход к экспресс-накладной возможен только после записи данных"); КонецЕсли; КонецПроцедуры //-- ==== Редактирование формы списка “Заказ покупателя” ==== Для реквизита "Список" выполняем команду "Настройка списка" и приводим текст запроса к такому виду: ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0) КАК СуммаОплатыОборот, //++ //ЗаказыПокупателейССайта.НомерЗаказаНаСайте КАК НомерНаСайте, ВЫБОР КОГДА НЕ ДокументЗаказПокупателя.НомерВходящегоДокумента = "" Тогда ДокументЗаказПокупателя.НомерВходящегоДокумента Иначе ЗаказыПокупателейССайта.НомерЗаказаНаСайте Конец КАК НомерНаСайте, eComm_СтатусыЭкспрессНакладных.ЭкспрессНакладная.НомерТТН КАК ЭкспрессНакладная, eComm_СтатусыЭкспрессНакладных.ОписаниеСтатуса КАК ОписаниеСтатуса, eComm_СтатусыЭкспрессНакладных.СтатусДенежногоПеревода, eComm_СтатусыЭкспрессНакладных.ДнейХраненияНаСкладе КАК ДнейХраненияНаСкладе, eComm_СтатусыЭкспрессНакладных.НачалоПлатногоХранения, ЕСТЬNULL(СообщенияSMS.КоличествоSMS, 0) КАК SMS, //-- ЗаказыПокупателейССайта.ДатаЗаказаНаСайте КАК ДатаНаСайте, ВЫБОР КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL ТОГДА 0 КОГДА НаличиеФайлов.ЕстьФайлы ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ЕстьФайлы ИЗ Документ.ЗаказПокупателя КАК ДокументЗаказПокупателя //++ {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_СтатусыЭкспрессНакладных КАК eComm_СтатусыЭкспрессНакладных ПО eComm_СтатусыЭкспрессНакладных.ДокументОснование = ДокументЗаказПокупателя.Ссылка} {ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СообщениеSMS.Ссылка) КАК КоличествоSMS, СообщениеSMS.ДокументОснование КАК ДокОснование ИЗ Документ.Событие КАК СообщениеSMS ГДЕ СообщениеSMS.ПометкаУдаления = ЛОЖЬ И СообщениеSMS.ТипСобытия = ЗНАЧЕНИЕ(Перечисление.ТипыСобытий.СообщениеSMS) И СообщениеSMS.ВходящееИсходящееСобытие = ЗНАЧЕНИЕ(Перечисление.ВходящееИсходящееСобытие.Исходящее) СГРУППИРОВАТЬ ПО СообщениеSMS.ДокументОснование) КАК СообщенияSMS ПО ДокументЗаказПокупателя.Ссылка = СообщенияSMS.ДокОснование} //-- {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикВыполненияЗаказов КАК ГрафикВыполнения ПО ДокументЗаказПокупателя.Ссылка = ГрафикВыполнения.Заказ Добавим колонки на форму списка ==== Редактирование роли "Базовые права УНФ" ==== Для роли "Базовые права УНФ" добавим право на чтение и просмотр к регистру "eComm_СтатусыЭкспрессНакладных" и документу "eComm_ЭкспрессНакладная" ==== Редактирование формы "ФормаСообщенияSMS" документа "Событие" ==== === Метод "ОтправкаSMSНастройкиВыполнены" === Приведем код к следующему виду: ПоказатьОповещениеПользователя(НСтр("ru='SMS успешно отправлено';uk='SMS успішно відправлено'"), ПолучитьНавигационнуюСсылку(Объект.Ссылка), Строка(Объект.Ссылка), БиблиотекаКартинок.Информация32); Оповестить("СообщениеSMSОтправлено"); //++ Закрыть(); ==== Расширяем определяемый тип "ПредметШаблонаСообщения" типом "ДокументСсылка.eComm_ЭкспрессНакладная" ==== ===== Исправление ошибок подсистемы "Отправка SMS TURBO" ===== Если Вы используете провайдера TURBO SMS, тогда Вам, вероятно, понадобится исправить ошибки типовой конфигурации. ==== Редактирование табличной части "Участники" документа "Событие" ==== В реквизите табличной части "Участники" документа "Событие" увеличиваем длину реквизита "ИдентификаторСообщения" до 36 символов ==== Редактирование формы "ФормаСообщенияSMS" документа "Событие" ==== === Метод "ВыполнитьОтправкуSMS" === Приведем код к следующему виду: //++ //РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, Объект.Содержание, Объект.ИмяОтправителяSMS, ОтправлятьВТранслите); РезультатОтправки = ОтправкаSMS.ОтправитьSMS(МассивНомеров, Объект.Содержание, ?(ЗначениеЗаполнено(Объект.ИмяОтправителяSMS),Объект.ИмяОтправителяSMS, Неопределено) , ОтправлятьВТранслите); //-- ==== Редактирование модуля "ОтправкаSMSЧерезTURBO" ==== === Метод "ОтправитьSMS" === Приведем код к следующему виду: Ответ = ПреобразоватьОтвет(ФайлОтвета, "ns1:ResultArray"); //ИдентификаторСообщения = Ответ.id; //++ //Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения", // НомерПолучателя)); // //Если ЗначениеЗаполнено(Ответ) Тогда // Результат.ОписаниеОшибки = Результат.ОписаниеОшибки // + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент) // + ": " + Ответ // + Символы.ПС; //КонецЕсли; Попытка ИдентификаторСообщения = Новый УникальныйИдентификатор(Ответ); УспешноОтправлено = Истина; Исключение УспешноОтправлено = Ложь; КонецПопытки; Если УспешноОтправлено Тогда Результат.ОтправленныеСообщения.Добавить(Новый Структура("НомерПолучателя,ИдентификаторСообщения", Элемент, Ответ)); Иначе Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='SMS на номер %1';uk='SMS на номер %1'"), Элемент) + ": " + Ответ + Символы.ПС; КонецЕсли; //-- === Метод "СтатусДоставки" === Приведем код к следующему виду: | | | | " + ИдентификаторСообщения + " | | //++ //Баланс = ПреобразоватьОтвет(ФайлОтвета, "ns1:GetCreditBalanceResult"); //УдалитьФайлы(ФайлОтвета); //Ответ = Неопределено; //Запрос = Неопределено; //Соединение = Неопределено; //Возврат Баланс; СтатусДоставки = ПреобразоватьОтвет(ФайлОтвета, "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 Результат = СоответствиеСтатусов[СтатусСтрокой]; Возврат ?(Результат = Неопределено, "Ошибка", Результат); КонецФункции Обратите внимание что расписание обновлений справочников необходимо настраивать ТОЛЬКО ПОСЛЕ ПЕРВОНАЧАЛЬНОГО РУЧНОГО ОБНОВЛЕНИЯ СПРАВОЧНИКОВ. Иначе города/отделения/улицы могут задублироваться