===== Встраивание подсистемы "Новая почта" =====
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
Результат = СоответствиеСтатусов[СтатусСтрокой];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции
Обратите внимание что расписание обновлений справочников необходимо настраивать ТОЛЬКО ПОСЛЕ ПЕРВОНАЧАЛЬНОГО РУЧНОГО ОБНОВЛЕНИЯ СПРАВОЧНИКОВ. Иначе города/отделения/улицы могут задублироваться