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