gifts2017

Работа с кассовым аппаратом MG-545T (02) по http протоколу (JSON)

Опубликовал Evgeny K (mar_a) в раздел Обмен - Обмен с другими системами

Программируем базу товаров прямо из 1С 8.х.х в кассовый аппарат , скачиваем напрямую отчеты о проданных товарах.
Обработка не подвязана под какую либо конфигурацию, но полностью демонстрирует возможность , как можно заполнить данными БД кассового аппарата и наоборот,
как скачать отчеты о проданных товарах или БД товаров, запрограммированных в аппарате.

 Производитель решил углубить идею управления кассовым аппаратом через http протокол. Или другими словами дал упрощенный метод управления кассовым аппаратом в формате JSON.

 Данная обработка пригодиться частным мелким организациям работающим на кассовых аппаратах MG-545T (02) которые хотят быстро программировать свой (т.к. модель всего одна) кассовый аппарат MG-545T(02) удаленно через ETHERNET (не путать с Интернетом, хотя и через И-нет тоже можно - предварительно пробросив порт 80 наружу), либо через кабель USB (в этом случае USB работает в режиме RNDIS - виртуальная сетевая карта).

 Начну с начала. Рассказывать буду подробно и четко (если что поправляйте исправлю).

1) Подключили аппарат вышеуказанным методом (если Windows 7, 8 , 10 - даже через USB драйверов не надо).

( В случае необходимости для Windows 98, Windows XP драйвер USB-RNDIS можно скачать тут или зеркало ).

2) Набрать на кассовом аппарате команду 929   ПС  распечатает все IP адреса по которым можно добраться к заветному аппарату.
Не удивляйтесь он может одновременно откликаться как по Ethernet, USB-RNDIS и быть подключен к GPRS. (последнего конфигурацию не печатает).

3) Теперь мы можем использовать этот аппарат через 1С - указав IP в первой вкладке обработки (см. скриншот).

 

Теперь можем исправить шапку чека - переписать , переименовать заключительную часть чека. Но самое главное мы можем программировать товары из 1С непосредственно в этот аппарат. (Изначально прийдеться правда синхронизировать ID налоговой ставки в аппарате и в 1С.)

mg V545T
 

На скриншоте 2 показанно все это. (Результат можно тут-же увидеть на самом аппарате в его таблице
http://IP-addres/index.html#plu или для тех кто понимает JSON по адресу http://IP-addres/cgi/tbl/PLU  
(последний слеш не ставиться !!!).


Теперь вытянуть продажи... существует масса вариатов , я постраюсь на пальцах (ну сколько у меня хватит терпения и пальцев Laughing ).

Вариант 1 Чтение таблицы продаж за текущую ОТКРЫТУЮ смену. (до снятия Z отчета).

Даем запрос на чтение по GET http://IP-addres/cgi/chk (незабывайте что аппарат отдает ответы в UTF-8 так что русские символы я декодирую в понятную кодировку для чтения) 

В ответ нам прийдет JSON который прийдеться распарсить и получим все чеки которые пробивались на данном аппарате.
Кто желает углубиться, тот читает протокол JSON котоый я так-же прикрутил к этой статье.

Для тех кто не хочет изучать как и что, может получить значения чеков перейдя на вкладку Служебные функции и нажать на скромно стаящую кнопку Таблица чеков (на данном этапе я все вывожу в окно служебных сообщений, т.к. не знаю на какой конфигурации и куда надо данные записывать в 1С) . 

Вариант 2 Чтение таблиц электронного журнала за любой Z отчет.
Сразу банальный вопрос - а почему не за дату, и откуда я буду знать нумерацию Z отчетов? Да тут все очевидно просто за одну и ту-же дату работники умудряются делать несколько Z отчетов , что в принципе позволительно - поэтому логичнее делать этот отчет по номерам Z отчетов который печатается на ленте самого отчета при его снятии (каждый кассир знает ГДЕ).

Теперь о самом процессе... вызываем  GET http://IP-addres/cgi/ejournal?Z=НОМЕР ,

где НОМЕР - это и есть ВАШ номер интересующей смены в рамках Z отчета 
получаемые данные и будут содержать необходимые чеки  в рамках от номера(Z-1) до номера(Z) (т.е. за всю закрытую смену).

Ответ как ВЫ догадались приходит опять JSON-ом котрый распарсив мы (ВЫ) получим всю необходимую информацию.

Распарсив получим например:

Z >-> 3 (Номер Z отчета - именно тот который Я и посылал
id >-> 1
oper_id >-> 1
datetime >-> 1465475700   (Дата время в UNIX формате)

id >-> 22  (Номер операции кому надо берите...)
no >-> 1
beg_id >-> 1
oper_id >-> 1  
datetime >-> 1465475702     (Дата время в UNIX формате)
DI >-> 14
code >-> 1        (Код товара который я пробил ради теста)
name >-> Товар ТЕСТ 1  (Его название кстати было запрограммировано в аппарат из коробки заводом)
qty >-> 1.000  (Кол-во проданных товаров)
price >-> 99.88  (Цена - это я поменял ему цену - изначально была 0грн)
sum >-> 99.88   (Сумма сделки)
tax >-> 1            (Налог 1 - что соответствует А налогу - а вот к чему он привязан? см. ниже оборву мысль...)
no >-> 1  (Номер вида оплаты)
name >-> ГОТIВКОЮ  (вид оплаты - НАЛОМ конечно-же) 
sum >-> 99.88 (Вся эта сумма по налу - хотя могли быть и другие варианты, частичная оплата и сдача...)
id >-> 33
no >-> 2
beg_id >-> 23
oper_id >-> 1

Для этого аппарат должен быть зафискализирован и в его памяти есть как минимум 1 (один) снятый Z отчет.

Не производите сами фискализацию процесс необратим !!! (аппарат становиться на учет в налоговую).

Полученные данные я вывожу в окно служебных сообщений. Вы естественно можете манипулировать с этими данными и даже формировать расходные документы, а можете ...

Вернусь к оборванной мысли , то где взять налоговые ставки :

по GET http://IP-addres/cgi/tbl/Tax в ответ ВЫ получите JSON с заранее запрогрммированными налогами.
Рекомендуется не менять эти ставки в дальнейшем ! 

Пример выглядитвот так:

По адресу URL http://IP-addres/cgi/tbl/Tax
2)Результат=[
{"id":1,"Prc":20.00,"Extra":5.00,"SMode":2,"SName":"ЗБІР"},
{"id":2,"Prc":0.00,"Extra":0.00,"SMode":0,"SName":"ЗБІР"},
{"id":3,"Prc":0.00,"Extra":0.00,"SMode":0,"SName":"ЗБІР"},
{"id":4,"Prc":0.00,"Extra":0.00,"SMode":0,"SName":"ЗБІР"},
{"id":5,"Prc":0.00,"Extra":0.00,"SMode":0,"SName":"ЗБІР"}]

Или если распарсить:

id >-> 1     (Идентификатор налога)
Prc >-> 20.00 (Процент налоговой ставки)
Extra >-> 5.00 (Процент акцизного сбора )
SMode >-> 2    (Режим по которому начисляется процент акциза т.е. (БазаЦена+НДС)+Акциз = КонечнаяЦена )
SName >-> ЗБІР (То что печатается на виде акциза)
id >-> 2  
Prc >-> 0.00
Extra >-> 0.00
SMode >-> 0
SName >-> ЗБІР  

и т.д.


Остальные варианты чтения ВЫ можно получить изучив протокол обмена и используя команды получить то ,что необходимо из аппарата.


Так например можно прочитать всю поднаготную аппрата за всю историю (или часть истории)
вызвав GET http://IP-addres/cgi/tbl/FDay  - это таблица фискальной памяти , внешне она выглядит приблизительно так

[
{"id":1,"valid":1,"Date":1465419600,"STax0":0.00,"STax1":699.82,"STax2":0.00,"STax3":0.00,"STax4":0.00,"SRet0":0.00,"SRet1":0.00,"SRet2":0.00,"SRet3":0.00,"SRet4":0.00,"NChk":6,"NRet":0},
{"id":2,"valid":1,"Date":1465419600,"STax0":0.00,"STax1":111.10,"STax2":0.00,"STax3":0.00,"STax4":0.00,"SRet0":0.00,"SRet1":0.00,"SRet2":0.00,"SRet3":0.00,"SRet4":0.00,"NChk":2,"NRet":0},
{"id":3,"valid":1,"Date":1465506000,"STax0":0.00,"STax1":111.10,"STax2":0.00,"STax3":0.00,"STax4":0.00,"SRet0":0.00,"SRet1":0.00,"SRet2":0.00,"SRet3":0.00,"SRet4":0.00,"NChk":2,"NRet":0},
{"id":4,"valid":1,"Date":1465765200,"STax0":0.00,"STax1":99.88,"STax2":0.00,"STax3":0.00,"STax4":0.00,"SRet0":0.00,"SRet1":0.00,"SRet2":0.00,"SRet3":0.00,"SRet4":0.00,"NChk":1,"NRet":0}]
Выделил строку которую внимательный читатель заметил что я ее разбирал ВЫШЕ в качестве примера.
На самом деле важными параметрами тут являются всего 2(два), а именно ДАТА-ВРЕМЯ "Date":1465506000,
и номер Z отчета
"id":3.

Предположим Вам надо выудить инфу о всем, что продавалось на этом аппарате с 09.06.2016 по 12.06.2016
Легко перевести эти данные в UNIX формат (т.е. кто посмотрит код в 1С удивиться как 
просто это выполнить на уровне 1С)
отберем номера ID которые попадают в наш разрез
дат начиная с 1465430400 секунды по 1465689600 секунду.
Как видим из примера у нас попадают 2 отчета (всего)
это с id=3 и id=4 , т.к. 1465506000 больше или равен искомому 1465430400
с другой стороны ограничение  1465689600 сек.
Теперь осталось обратиться по GET http://IP-addres/cgi/ejournal?Z=3 , потом  
GET http://IP-addres/cgi/ejournal?Z=4
получить данные и распарсить , результат записать в нужные места ВАШЕЙ конфигурации. 

Теперь о главном :

Аппарат можно было-бы запрограммировать и ввести товары старым способом - через WEB консоль обратившись по его IP...
но это наверное не так интересно ?

Надеюсь это все ВАМ действительно понадобилось.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
1C 8.x.x
.epf 40,27Kb
13.06.16
2
.epf ver.2.0.1 40,27Kb 2 Скачать
Протокол JSON аппарата MG-545 T (02)
.pdf 1,10Mb
13.06.16
1
.pdf 1.0.0.1 1,10Mb 1 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа