Подгрузка безналичных чеков из мобильной кассы в Розницу 2.3
Я наладил обмен из МК в Розницу через универсальный формат обмена Enterprise Data (ED). Но при тестировании столкнулся с проблемой — все чеки приходили как наличные, оплата картой не учитывалась.
Проверил файл обмена — касса формирует правильный файл:
Но вот типовой код обмена через ED ожидает увидеть для чека раздел ОплатаПлатежнымиКартами:
Но этого раздела нет, поэтому приходится писать свою заплатку.
У клиента не используется частичная оплата, поэтому код замены простой, модуль МенеджерОбменаЧерезУниверсальныйФормат:
&Вместо("ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO") Процедура дор_ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена) ПродолжитьВызов(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена); //Корректируем оплату картой Если ДанныеXDTO.Свойство("ОплатыККМ") И ДанныеXDTO.ОплатыККМ.Количество() > 0 Тогда ОплатаПлатежнымиКартами = 0; Для Каждого СтрокаXDTO Из ДанныеXDTO.ОплатыККМ Цикл ОплатаПлатежнымиКартами = ОплатаПлатежнымиКартами + СтрокаXDTO.Сумма; КонецЦикла; Если ПолученныеДанные.ДополнительныеСвойства.Свойство("Оплата") И ПолученныеДанные.ДополнительныеСвойства.Оплата.Количество() > 0 Тогда ПолученныеДанные.ДополнительныеСвойства.Оплата[0].Сумма = ОплатаПлатежнымиКартами; ПолученныеДанные.ДополнительныеСвойства.Оплата[0].ВидОплаты = Справочники.ВидыОплатЧекаККМ.НайтиПоНаименованию("Платежная карта", Истина); КонецЕсли; КонецЕсли; КонецПроцедуры
Оплата загружается корректно:
Можно было бы переконвертировать структуру перед входом в конвертацию, но это лишнее для этой задачи.
UPD 2022-05-16: в коде была обнаружена ошибка, все виды оплаты грузились в безналичные. Заодно реализовал и смешанную оплату:
Чек загружается корректно:
Исправленный код:
&Вместо("ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO") Процедура дор_ПКО_Документ_ЧекККМ_Получение_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена) ПродолжитьВызов(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена); //Корректируем оплату картой Если ДанныеXDTO.Свойство("ОплатыККМ") И ДанныеXDTO.ОплатыККМ.Количество() > 0 Тогда ОплатаПлатежнымиКартами = 0; СуммаОплатыНаличных = ПолученныеДанные.СуммаДокумента; Для Каждого СтрокаXDTO Из ДанныеXDTO.ОплатыККМ Цикл Если СтрокаXDTO.ТипОплаты.Значение = "Электронно" Тогда ОплатаПлатежнымиКартами = ОплатаПлатежнымиКартами + СтрокаXDTO.Сумма; КонецЕсли; КонецЦикла; СуммаОплатыНаличных = СуммаОплатыНаличных - ОплатаПлатежнымиКартами; Если ПолученныеДанные.ДополнительныеСвойства.Свойство("Оплата") Тогда //И ПолученныеДанные.ДополнительныеСвойства.Оплата.Количество() > 0 Тогда Оплата = ПолученныеДанные.ДополнительныеСвойства.Оплата; Оплата.Очистить(); Если СуммаОплатыНаличных <> 0 Тогда //Может быть и минус при возврате, видимо С = Новый Структура; С.Вставить("ВидОплаты", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОплатЧекаККМ.Наличные")); С.Вставить("Сумма", СуммаОплатыНаличных); Оплата.Добавить(С); КонецЕсли; Если ОплатаПлатежнымиКартами <> 0 Тогда С = Новый Структура; С.Вставить("ВидОплаты", Справочники.ВидыОплатЧекаККМ.НайтиПоНаименованию("Платежная карта", Истина)); С.Вставить("Сумма", ОплатаПлатежнымиКартами); Оплата.Добавить(С); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры
Среда: МК: 3.14.7.0 Розница: 2.3.11.33 Объем: 1 час.
Свежие комментарии