Производитель решил углубить идею управления кассовым аппаратом через 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С.)
В
На скриншоте 2 показанно все это. (Результат можно тут-же увидеть на самом аппарате в его таблице
http://IP-addres/index.html#plu или для тех кто понимает JSON по адресу http://IP-addres/cgi/tbl/PLU
(последний слеш не ставиться !!!).
Теперь вытянуть продажи... существует масса вариатов , я постраюсь на пальцах (ну сколько у меня хватит терпения и пальцев ).
Вариант 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...
но это наверное не так интересно ?
Надеюсь это все ВАМ действительно понадобилось.