Финальные штрихи обмена Розница 2.3 и Мобильной кассы
Это уже третий этап в настройке обмена Розницы 2.3 и Мобильной кассы. Предыдущий этап можно почитать тут.
На этом этапе осталось передавать в МК с обменом не тестовые, а реальные данные, т.е. по сути просто их извлечь из базы.
Добавил в заказ поля времени доставки (скопировал из конфигурации МК):
Вывел их в форму документа заказа покупателя:
Код для формы документа:
&НаСервере Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) //Вставляем время с и по ПолеПеред = ЭтаФорма.Элементы.Магазин; Элемент = ЭтаФорма.Элементы.Добавить("дор_ПериодДоставкиПо", Тип("ПолеФормы"), Элементы.дор_ДатаДоставки); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "Объект.дор_ПериодДоставкиПо"; Элемент.АвтоМаксимальнаяШирина = ложь; Элемент.Ширина = 4; Элемент.РастягиватьПоГоризонтали = ложь; Элемент.Заголовок = "По"; Элемент.ФорматРедактирования = "ДФ=HH:mm"; КонецПроцедуры
Клиент захотел, чтобы в списке интервал выводился в одну колонку, пришлось немного потрудиться:
&НаСервере Процедура кмл_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) //Осипов - тут добавить создание колонок нужных //Меняем запрос списка ВставляемыйТекст = " ВЫРАЗИТЬ(NULL КАК Строка(20)) КАК дор_ИнтервалДоставкиСтрокой," + " ДокументЗаказПокупателя.дор_ПериодДоставкиС КАК дор_ПериодДоставкиС," + " ДокументЗаказПокупателя.дор_ПериодДоставкиПо КАК дор_ПериодДоставкиПо" + " , "; Маркер = "ВЫБРАТЬ"; Если Найти(Список.ТекстЗапроса, ВставляемыйТекст) = 0 Тогда Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, Маркер, Маркер + ВставляемыйТекст); КонецЕсли; ПолеПеред = ЭтаФорма.Элементы.Магазин; Элемент = ЭтаФорма.Элементы.Вставить("дор_ИнтервалДоставкиСтрокой", Тип("ПолеФормы"), ПолеПеред.Родитель, ПолеПеред); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "Список.дор_ИнтервалДоставкиСтрокой"; Элемент.АвтоМаксимальнаяШирина = ложь; Элемент.Ширина = 7; Элемент.РастягиватьПоГоризонтали = ложь; Элемент.Заголовок = "Интервал"; КонецПроцедуры &НаСервереБезКонтекста Процедура дор_СписокПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки) Для Каждого Строка ИЗ Строки Цикл СтрокаДанных = Строка.Значение.Данные; //Невидимые поля оптимизатором не тянутся из базы данных, поэтому извлекаю их через Ссылка //Для ускорения можно сделать поля с признаком получения данных всегда Если ЗначениеЗаполнено(СтрокаДанных.Ссылка.дор_ПериодДоставкиС) ИЛИ ЗначениеЗаполнено(СтрокаДанных.Ссылка.дор_ПериодДоставкиПо) Тогда СтрокаДанных.дор_ИнтервалДоставкиСтрокой = Формат(СтрокаДанных.Ссылка.дор_ПериодДоставкиС, "ДФ=HH:mm") + "-" + Формат(СтрокаДанных.Ссылка.дор_ПериодДоставкиПо, "ДФ=HH:mm"); КонецЕсли; КонецЦикла; КонецПроцедуры
Выглядит в списке так:
Далее наполнил выгрузку в МК фактическими данными:
&Вместо("ПКО_Документ_ЗаказПокупателя_Отправка_ПриОтправкеДанных") Процедура дор_ПКО_Документ_ЗаказПокупателя_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки) //Вызываем старый обработчик ПродолжитьВызов(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки); //Определяем дополнительные значения для выгрузки Статус = ДанныеИБ.Статус; СтатусЗаказа = "НеСогласован"; //По умолчанию Если Статус = Перечисления.СтатусыЗаказовПокупателей.Согласован Тогда СтатусЗаказа = "Согласован"; ИначеЕсли Статус = Перечисления.СтатусыЗаказовПокупателей.Закрыт Тогда СтатусЗаказа = "Закрыт"; ИначеЕсли ЛОЖЬ Тогда СтатусЗаказа = "Отменен"; //Такого статуса нет КонецЕсли; //ЗаписьЖурналаРегистрации("Отладка.Обмен", ,,,"Объект" + ДанныеИБ.Ссылка + " Статус: " + СтатусЗаказа); Телефон = ДанныеИБ.КонтрагентТелефон; //"+79090001122"; //Здесь используется не е-мэйл контрагента, а е-мэйл физлциа - особенность розницы АдресЭлектроннойПочты = СокрЛП(УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(ДанныеИБ.Контрагент.ФизЛицо, Справочники.ВидыКонтактнойИнформации.EmailФизическогоЛица)); //"test@mail.ru"; АдресДоставки = ДанныеИБ.АдресДоставки; ДатаДоставки = ДанныеИБ.ЖелаемаяДатаПродажи; ПериодДоставкиС = ДанныеИБ.дор_ПериодДоставкиС; ПериодДоставкиПо = ДанныеИБ.дор_ПериодДоставкиПо; дор_СтатусЗаказаНаСайте = ДанныеИБ.дор_СтатусЗаказаНаСайте; //Дополнительные реквизиты ДопРеквизиты = Новый ТаблицаЗначений; ДопРеквизиты.Колонки.Добавить("Свойство"); ДопРеквизиты.Колонки.Добавить("ЗначениеСвойства"); СтрокаДопРеквизита = ДопРеквизиты.Добавить(); СтрокаДопРеквизита.Свойство = Новый Структура("Наименование", "СтатусЗаказа"); СтрокаДопРеквизита.ЗначениеСвойства = СтатусЗаказа; СтрокаДопРеквизита = ДопРеквизиты.Добавить(); СтрокаДопРеквизита.Свойство = Новый Структура("Наименование", "ДоставкаС"); СтрокаДопРеквизита.ЗначениеСвойства = ПериодДоставкиС; СтрокаДопРеквизита = ДопРеквизиты.Добавить(); СтрокаДопРеквизита.Свойство = Новый Структура("Наименование", "ДоставкаПо"); СтрокаДопРеквизита.ЗначениеСвойства = ПериодДоставкиПо; //Вставляем комментарий ДанныеXDTO.Вставить("Комментарий", ДанныеИБ.Комментарий //+ ?(АдресДоставки = "", "", " " + АдресДоставки) + ?(ЗначениеЗаполнено(дор_СтатусЗаказаНаСайте) = "", "", " " + дор_СтатусЗаказаНаСайте) + ?(ЗначениеЗаполнено(ПериодДоставкиС) ИЛИ ЗначениеЗаполнено(ПериодДоставкиПо), " Интервал: " + Формат(ПериодДоставкиС, "ДФ=HH:mm") + "-" + Формат(ПериодДоставкиПо, "ДФ=HH:mm") , "") ); //ЗаписьЖурналаРегистрации("Отладка.Обмен", ,,,"Объект" + ДанныеИБ.Ссылка + " Комментарий: " + ДанныеИБ.Комментарий); //Дополнительная информация ДанныеXDTO.Вставить("ДополнительныеРеквизиты", ДопРеквизиты); ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Телефон", Телефон); ДополнительнаяИнформация.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты); ДанныеXDTO.Вставить("AdditionalInfo", дор_ЗначениеВJSON(ДополнительнаяИнформация)); КонецПроцедуры
Поля интервала доставки выгружались без времени, пришлось сделать небольшую доработку в процедуру конвертации свойства:
&Вместо("ОбъектXDTOИзДанныхXDTO") Функция дор_ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, Знач Источник, Знач ТипXDTO, СсылкиИзОбъекта, ПроведеноЗаполнениеСвойств, Знач Расширения) Результат = ПродолжитьВызов(КомпонентыОбмена, Источник, ТипXDTO, СсылкиИзОбъекта, ПроведеноЗаполнениеСвойств, Расширения); Если ТипЗнч(Источник) = Тип("СтрокаТаблицыЗначений") Тогда Попытка Если Источник.Свойство.Наименование = "ДоставкаС" ИЛИ Источник.Свойство.Наименование = "ДоставкаПо" Тогда ЗначениеСвойства = Источник.ЗначениеСвойства; //Вставляем дату с временем // https://www.w3schools.com/xml/schema_dtypes_date.asp ТипДаты = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime"); ЗначениеXDTO = ФабрикаXDTO.Создать(ТипДаты, ЗначениеСвойства); Результат.ЗначениеСвойства.Дата = ЗначениеXDTO; КонецЕсли; Исключение КонецПопытки; КонецЕсли; Возврат Результат; КонецФункции
Но увы, не помогло. Время все равно обрезалось.
Тогда я попробовал поменять тип date на dateTime:
В выгрузке появилось время:
Но при загрузке выдает ошибку:
Значение: '0001-01-01T10:00:00' не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}date
Поэтому интервал просто добавил в комментарий.
Адрес доставки загружается на стороне МК целиком в поле «Адрес доставки город», так что разбирать адрес на составляющие не имеет смысла:
Среда: Мобильная касса (для разработчиков) 3.14.7.0, Розница 2.3.10.61
Объем: 2 час.
Свежие комментарии