Доведение до ума выгрузки в Мобильную Кассу из Розницы 2.3
Ранее я уже писал, что не смог доделать задачу по выгрузке из Розницы в МК, потому что не было возможности отладить обмен.
В итоге был настроен обмен из Розницы в Мобильную кассу через файлы и я смог получить доступ к отладке.
Конвертация структуры ДанныеXDTO в ОбъектXDTO происходит в процедуре МенеджерОбменаЧерезУниверсальныйФормат.ОбъектXDTOИзДанныхXDTO.
Заказ имеет тип XDTO:
— Имя: Документ.ЗаказКлиента
— URIПространстваИмен: http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8
Посмотрим XDTO-пакет в конфигурации:
Как видим, для документа «ЗаказКлиента» здесь нет поля СтатусЗаказа:
Попробуем прямо в файле поменять значение свойства XDTO, добавим <СтатусЗаказа>Согласован</СтатусЗаказа>:
И вот тут я увидел, что несмотря на то, что наличие поля СтатусЗаказа не соответствует схеме, статус заказа присутствует после разбора схемы (контроль не четкий):
Но одновременно с этим я заметил свою ошибку — статус заказа должен быть в дополнительных реквизитах:
А это поле как раз есть в объекте XDTO, т.е. можно не менять схему:
Так что достаточно просто указать дополнительные реквизиты, ну заодно и контактную информацию.
Тестовый код выглядит так:
&Вместо("ПКО_Документ_ЗаказПокупателя_Отправка_ПриОтправкеДанных") Процедура дор_ПКО_Документ_ЗаказПокупателя_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки) //Вызываем старый обработчик ПродолжитьВызов(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки); //Вставляем комментарий ДанныеXDTO.Вставить("Комментарий", ДанныеИБ.Комментарий); ЗаписьЖурналаРегистрации("Отладка.Обмен", ,,,"Объект" + ДанныеИБ.Ссылка + " Комментарий: " + ДанныеИБ.Комментарий); //Определяем дополнительные значения для выгрузки СтатусЗаказа = "Согласован"; ЗаписьЖурналаРегистрации("Отладка.Обмен", ,,,"Объект" + ДанныеИБ.Ссылка + " Статус: " + СтатусЗаказа); Телефон = "+79090001122"; АдресЭлектроннойПочты = "test@mail.ru"; //Дополнительные реквизиты ДопРеквизиты = Новый ТаблицаЗначений; ДопРеквизиты.Колонки.Добавить("Свойство"); ДопРеквизиты.Колонки.Добавить("ЗначениеСвойства"); СтрокаДопРеквизита = ДопРеквизиты.Добавить(); СтрокаДопРеквизита.Свойство = Новый Структура("Наименование", "СтатусЗаказа"); СтрокаДопРеквизита.ЗначениеСвойства = СтатусЗаказа; ДанныеXDTO.Вставить("ДополнительныеРеквизиты", ДопРеквизиты); //Дополнительная информация ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Телефон", Телефон); ДополнительнаяИнформация.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты); ДанныеXDTO.Вставить("AdditionalInfo", ДополнительнаяИнформация); КонецПроцедуры
В XML-файле обмена тоже попадает корректно:
Статус при загрузке прогружается, но телефон и адрес почты нет. Оказывается, 1С ожидает дополнительную информацию как запакованную в JSON структуру:
Поэтому с дополнительной информацией пробуем другой код:
//Дополнительная информация ДополнительнаяИнформация = Новый Структура; ДополнительнаяИнформация.Вставить("Телефон", Телефон); ДополнительнаяИнформация.Вставить("АдресЭлектроннойПочты", АдресЭлектроннойПочты); ДанныеXDTO.Вставить("AdditionalInfo", дор_ЗначениеВJSON(ДополнительнаяИнформация)); Функция дор_ЗначениеВJSON(Данные, ПараметрыЗаписи = Неопределено) Экспорт ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи); ЗаписатьJSON(ЗаписьJSON, Данные); Результат = ЗаписьJSON.Закрыть(); Возврат Результат; КонецФункции
Функцию выгрузки в JSON пришлось скопировать из другого модуля, универсальной нет.
В файле обмена данные выглядят так:
Загрузка проходит успешно. Как видно, в заказе теперь корректно прогружаются статус, телефон и e-mail:
Осталось только прогружать корректный статус, e-mail и телефон.
Вот что значит, когда у программиста есть доступ к отладчику!
Продолжение, как говорится, следует…
Среда: Мобильная касса (для разработчиков) 3.14.7.0, Розница 2.3.10.61
Объем: 2 час.
Свежие комментарии