1. Объединяем с конфигурацией модуля новой почты
2. Выполняем объединение
3. Пропускаем зависимости
4.1 Если модуль «Новая почта» внедряется совместно с модулями торговых площадок «eComm+» тогда перетаскиваем подсистему «Новая почта» в торговые площадки
4.2 Если модуль «Новая почта» внедряется самостоятельно (без модулей «eComm+») тогда отображаем подсистему «eComm_СлужбыДоставки» в командном интерфейсе
На форме документа «Заказ покупателя» добавим на панель вкладку «НоваяПочта». На панели разместим надпись (гиперссылка) «eComm_ЭкспрессНакладная_Открыть» и надпись «eComm_ЭкспрессНакладная_Создать».
| Имя элемента | Синоним | Элемент | Гиперссылка | Ширина | Картинка |
|---|---|---|---|---|---|
| eComm_ЭкспрессНакладная_Открыть | Отправить ЭН | Надпись | Истина | 350 | Документ |
| eComm_ЭкспрессНакладная_Создать | Создать | Надпись | Истина | 150 | СоздатьЭлементСписка |
Скопируем следующий код в конце размещения методов модуля формы документа «заказ покупателя»
Процедура eComm_ЭкспрессНакладнаяНажатие(Элемент) //++ eComm / Службы доставки
Если НЕ ЗначениеЗаполнено(ЭтотОбъект.Ссылка) Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Данные не записаны.
|Переход к экспресс-накладной возможен только после сохранения заказа';
|
|uk = 'Данные не записаны.
|Перехід до експрес-накладної можливий лише після збереження замовлення'"));
Возврат;
КонецЕсли;
Если Элемент.Имя = "eComm_ЭкспрессНакладная_Открыть" Тогда
// Это открытие списка накладных
СписокВыбора = eCommДоставкаСервер.СписокЭкспрессНакладных(ЭтотОбъект.Ссылка);
Если СписокВыбора.Количество() > 1 Тогда
ВыбрЗначение = ВыбратьИзМеню(СписокВыбора, Элемент);
Если НЕ ВыбрЗначение = Неопределено Тогда
ВыполнитьПослеВыбораЗначения(ВыбрЗначение, ЭтотОбъект.Ссылка);
КонецЕсли;
ИначеЕсли СписокВыбора.Количество() = 1 Тогда
ВыполнитьПослеВыбораЗначения(СписокВыбора[0], ЭтотОбъект.Ссылка);
Иначе
// Создадим если ранее накладная не была создана
ВыполнитьПослеВыбораЗначения(Новый Структура("Значение", Неопределено), ЭтотОбъект.Ссылка);
КонецЕсли;
ИначеЕсли Элемент.Имя = "eComm_ЭкспрессНакладная_Создать" Тогда
// Это создание новой накладной
ВыполнитьПослеВыбораЗначения(Новый Структура("Значение", Неопределено), ЭтотОбъект.Ссылка);
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьПослеВыбораЗначения(ЭлементСпискаВыбора, Заказ) Экспорт //++ eComm / Службы доставки
Если НЕ ЭлементСпискаВыбора = Неопределено Тогда
ЗначенияЗаполнения = Новый Структура("ДокументОснование", Заказ);
ОткрытьФорму("Документ.eComm_ЭкспрессНакладная.ФормаОбъекта", Новый Структура("Ключ, ЗначенияЗаполнения", ЭлементСпискаВыбора.Значение, ЗначенияЗаполнения));
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьОписаниеЭН() //++ eComm / Службы доставки
ОписаниеСтатуса = "";
Если ЗначениеЗаполнено(ЭтотОбъект.Ссылка) Тогда
Попытка
СписокНакладных = eCommДоставкаСервер.СписокЭкспрессНакладных(ЭтотОбъект.Ссылка);
КоличествоЭкспрессНакладных = СписокНакладных.Количество();
Если КоличествоЭкспрессНакладных > 0 Тогда
ОписаниеСтатуса = СписокНакладных[0].Представление;
КонецЕсли;
Исключение
КонецПопытки;
Если КоличествоЭкспрессНакладных > 1 Тогда
ОписаниеСтатуса = ОписаниеСтатуса + НСтр("ru = ' и еще '; uk = ' та ще '") + (КоличествоЭкспрессНакладных - 1) + НСтр("ru = ' накладных'; uk = ' накладних'");
КонецЕсли;
КонецЕсли;
ЭлементыФормы.eComm_ЭкспрессНакладная_Открыть.Заголовок = ?(ЗначениеЗаполнено(ОписаниеСтатуса), "Статус накладной: " + ОписаниеСтатуса, "Отправить ЭН");
КонецПроцедуры
Обработчиком нажатия для элементов «eComm_ЭкспрессНакладная_Открыть» и «eComm_ЭкспрессНакладная_Создать» выберем из списка метод
"eComm_ЭкспрессНакладнаяНажатие"
Добавим в конце метода «ПередОткрытием» следующий код:
ЗаполнитьОписаниеЭН(); //++ eComm Доставка
| Имя колонки | Элемент управления | ТекстШапки | ТолькоПросмотр |
|---|---|---|---|
| ЭкспрессНакладная | Поле ввода | Экспресс-накладная | Истина |
| ОписаниеСтатуса | Поле ввода | Описание статуса | Истина |
| СтатусДенежногоПеревода | Поле ввода | Статус денежного перевода | Истина |
| ДнейХраненияНаСкладе | Поле ввода | Дней хранения на складе | Истина |
| НачалоПлатногоХранения | Поле ввода | Начало платного хранения | Истина |
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов.Колонки.Добавить("Документ", Новый ОписаниеТипов("ДокументСсылка.ЗаказПокупателя"));
Для каждого Строка из ОформленияСтрок цикл
СтрокаТаблицы = ТаблицаДокументов.Добавить();
СтрокаТаблицы.Документ = Строка.ДанныеСтроки.Ссылка;
КонецЦикла;
МенеджерВременныхТаблиц = новый МенеджерВременныхТаблиц();
//Запрос для создания временной таблицы
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ
| Таб.Документ КАК Документ
| Поместить ВременнаяТаблицаДокументов
|ИЗ &ТаблицаСсылок КАК Таб";
Запрос.УстановитьПараметр("ТаблицаСсылок",ТаблицаДокументов);
Запрос.Выполнить();
//Запрос для получения данных из временных таблиц
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВременнаяТаблицаДокументов.Документ КАК Документ,
| ЕСТЬNULL(ЭкспрессНакладныеСпискаЗаказов.ЭкспрессНакладная.НомерТТН, """") КАК ЭкспрессНакладная,
| СтатусыЭкспрессНакладных.ОписаниеСтатуса,
| СтатусыЭкспрессНакладных.СтатусДенежногоПеревода,
| СтатусыЭкспрессНакладных.ДнейХраненияНаСкладе,
| СтатусыЭкспрессНакладных.НачалоПлатногоХранения
|ИЗ
| ВременнаяТаблицаДокументов КАК ВременнаяТаблицаДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_ЭкспрессНакладныеСпискаЗаказов КАК ЭкспрессНакладныеСпискаЗаказов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.eComm_СтатусыЭкспрессНакладных КАК СтатусыЭкспрессНакладных
| ПО ЭкспрессНакладныеСпискаЗаказов.ЭкспрессНакладная = СтатусыЭкспрессНакладных.ЭкспрессНакладная
| ПО (ЭкспрессНакладныеСпискаЗаказов.ДокументОснование = ВременнаяТаблицаДокументов.Документ)";
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
ТаблицаРезультат.Индексы.Добавить("Документ");
Для каждого Строка из ОформленияСтрок цикл
текСсылка = Строка.ДанныеСтроки.Ссылка;
СтрокаТаблицыРезультат = ТаблицаРезультат.Найти(текСсылка,"Документ");
Если СтрокаТаблицыРезультат <> Неопределено Тогда
Если ЗначениеЗаполнено(СтрокаТаблицыРезультат.ЭкспрессНакладная) Тогда
Строка.Ячейки.ЭкспрессНакладная.Значение = СтрокаТаблицыРезультат.ЭкспрессНакладная;
Строка.Ячейки.ОписаниеСтатуса.Значение = СтрокаТаблицыРезультат.ОписаниеСтатуса;
Строка.Ячейки.СтатусДенежногоПеревода.Значение = СтрокаТаблицыРезультат.СтатусДенежногоПеревода;
Строка.Ячейки.ДнейХраненияНаСкладе.Значение = СтрокаТаблицыРезультат.ДнейХраненияНаСкладе;
Строка.Ячейки.НачалоПлатногоХранения.Значение = СтрокаТаблицыРезультат.НачалоПлатногоХранения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Разместим в общем модуле «eCommСерверДоработки» (необходимо добавить в случае отсутствия) код:
Процедура ЗагрузкаОплатНоваяПочта() Экспорт
ОткрытьФорму("Обработка.eComm_НоваяПочта.Форма.ЗагрузкаОплат");
КонецПроцедуры
Добавим в интерфейс «Полный» (или какой-либо другой требуемый интерфейс) подменю «eComm» с пунктами: «Учетные записи доставки», «Экспресс-накладные» и «Загрузка оплат»
| Тип кнопки | Действие | Текст | Картинка |
|---|---|---|---|
| Действие | Справочник.eComm_УчетныеЗаписиСлужбДоставки: Открыть справочник | Учетные записи доставки | Справочник |
| Действие | Документ.eComm_ЭкспрессНакладная: Открыть список документов | Экспресс-накладные | Документ |
| Действие | eCommСерверДоработки.ЗагрузкаОплатНоваяПочта | Загрузка оплат (НП) | Обработка |