Обратный инжиниринг пробития чеков в связке 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 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *