Протокол управления драйвером ККМ

Структура команды

<ControlProtocol messageType="request">

КОМАНДА[+параметры]

</ControlProtocol>

В ранних версиях QKkmServer использовался атрибут password элемента ControlProtocol. начиная с версии 4.10.29 пароль не используется. 
Рекомендуется использовать VPN или SSL-авторизацию.

 

Структура ответа

<ControlProtocol messageType="answer">
<error id="КОД_СТАТУСА" text="ОПИСАНИЕ_СТАТУСА"/>
<НАЗВАНИЕ_КОМАНДЫ [ПАРАМЕТРЫ] />
</ControlProtocol>

КОД_СТАТУСА - код ответа сервера. В случае успешного исполнения команды КОД_СТАТУСА=0

ОПИСАНИЕ_СТАТУСА - текстовое описание поля КОД_СТАТУСА. В случае успешного исполнения команды ОПИСАНИЕ_СТАТУСА=Ошибок нет.

НАЗВАНИЕ_КОМАНДЫ - название команды которая исполнялась сервером. За один сеанс работы сервер обрабатывает только одну команду.

ПАРАМЕТРЫ - ответы кассы, если данное предусмотрено.

 

Команды

В случае, если команда не возвращает каких-либо особенных параметров, то возвращается стандартная квитанция ответа в следующем формате:

<ControlProtocol messageType="answer">
<error id="0" text="Ошибок нет"/>
<КОМАНДА/>
</ControlProtocol>

Для облегчения описания такие ответы при описании протокола будут опускаться. Расшифровываться будут только ответы с параметрами.

 

Гудок

<Beep />

 

Продажа

<Sale

Text="НазваниеТовара"

Amount="1000"

Price="12345"

Group="2"

Tax1="0"

Tax2="0"

Tax3="0"

Tax4="0"

/>

Все величины указываются в МДЕ: граммах и копейках. В примере будет сформирована строка продажи 1000 единиц товара (к примеру, 1 КГ) товара НазваниеТовара по цене 123 рубля 45 коп во второй секции (группе) товаров без налогов.

 

Возврат продажи

Полностью аналогично формированию продажи товара.

<ReturnSale

Text="НазваниеТовара"

Amount="1000"

Price="12345"

Group="2"

Tax1="0"

Tax2="0"

Tax3="0"

Tax4="0"

/>

 

Промежуточный отчет без гашения

<XReport />

 

Закрытие смены (Z-отчет)

<ZReport />

 

Отчет по секциям ФР

<SectionsReport />

 

 

Аннулирование чека

<ChancelCheck />

 

Закрытие чека

<CloseCheck

SummaCash="СУММА"

Text="бла-бла-бла"

Discount="0"

Summa2="0"

Summa3="0"

Summa4="0"

Tax1="0"

Tax2="0"

Tax3="0"

Tax4="0"

/>

или можно использовать краткую форму
<CloseCheck

SummaCash="СУММА"

Text="бла-бла-бла"

Discount="2.3"

/>

 

 

Скидка

Введена в версии 3.6.4

<DiscountCheck

Summa="СУММА"

Text="бла-бла-бла"

Tax1="0"

Tax2="0"

Tax3="0"

Tax4="0"

/>

или можно использовать краткую форму
<DiscountCheck

Summa="СУММА"

Text="бла-бла-бла"

/>

 

Подытог чека

<SubTotal />

 

Продолжение печати после обрыва ленты или иной ошибки

<ContinuePrint />

 

Изъятие денег из кассы (инкассация)

<CashOut

Summa="СУММА"

/>

 

Запрос данных денежного регистра

<getMoneyReg

idReg="НОМЕР_РЕГИСТРА"

/>

 

Запрос данных из оперативного регистра

<getOperReg

idReg="НОМЕР_РЕГИСТРА"

/>

 

Обрезка чека

<CutCheck

isFullCut="0 или 1"

/>

 

Параметр isFullCut говорит о том, нужна ли полная отрезка чека или частичная

 

Печать произвольного текста

<PrintTextLine

DocumentType="docCheck"

Text="СТРОКА ТЕКСТА"

/>

DocumentType на какой ленте (документе) вывести стоку текста
 

docCheck

docControl

docList

на чековую ленту

на контрольную ленту

на подкладной документ

Строка текста обрезается до 38 символов. Если в вашей программе необходимо выводить длинную строку, то разбейте эту строку на подстроки длиной по 38 символов в печатайте каждую подстроку.

 

 

Печать произвольного количества строк текста

Введена в версии 4.4.4

<PrintTextLineLong

DocumentType="docCheck"

Text="СТРОКИ ТЕКСТА"

/>

DocumentType на какой ленте (документе) вывести стоку текста
 

docCheck

docControl

docList

на чековую ленту

на контрольную ленту

на подкладной документ

В параметре Text передаются все строки слитые через разделитель строк последовательность #kkm_br#. Text="Строка1#kkm_br#Строка2#kkm_br#Строка3" выведет на ККМ

Строка1
Строка2
Строка3

Обращаем внимание, что драйвер не анализирует успешность печати строки и в случае возникновения промежуточной ошибки оперативно узнать о ней в системе управления не удастся.

Каждая строка/подстрока текста обрезается до 40 символов. Обратите на это внимание.

 

Повтор документа

Введена в версии программы 3.3 от 02 мая 2013

<RepeatDocument />

 

Продвинуть документ

<FeedDocument

Positions="10"

DocumentType="docCheck"

/>

 

Positions на сколько линий (строк) продвинуть документ
DocumentType какой документ необходимо продвинуть
 

docCheck

docControl

docList

чековую ленту

контрольную ленту

подкладной документ

 

Полный статус ККМ

<getDeviceStatus />

Ответ:
<getDeviceStatus

isOnline="1"

deviceErrorCode="0"

dateFR="2012.12.11"

timeFR="20:03:20"

inn="88888888"

serialNumber="123456"

versionSoftFR="A.1"

dateSoftFR="Пт мар 22 2002"

buildSoftFR="4563"

versionSoftFiscalMemory="1.1"

dateSoftFiscalMemory="Пн сен 17 2001"

numberFR="1"

modeFR="8"

subModeFR="0"

flagsFiscalMemory="5"

 

operatorNumber="30"

portFR="0"

countLeftRefiscalizations="14"

currentDocNumber="284"

numberLastClousedSession="631"

 

countRefiscalizations="2"

flagsFR="979"

buildSoftFiscalMemory="31"

countFreeRecordsInFiscalMemory="1469"

isBufferNotEmpty="0"

isCapOpen="0"

isRollOperationJournalPresent="1"

isOpticalSensorCheckTape="1"

isDecimalPointPosition="1"

isUpperSensorPresent="0"

isLeverThermalHeadCheckTape="1"

isLeverThermalHeadControlTape="1"

 

isEklzFull="0"

isErrorRightSensor="0"

isErrorLeftSensor="0"

 

isRollCheckTapePresent="1"

isMoneyBoxOpen="0"

isEklzPresent="0"

isOpticalSensorOperationJournal="1"

isLowerSensorPresent="0"

statusMessageHTML="HTML-описание статуса"

/>

Описание параметров ответа

isOnline ККМ на связи или нет
deviceErrorCode код ошибки по протоколу 1.7 Штрих-М
dateFR текущая дата в часах ККМ
timeFR текущее время в часах ККМ
inn ИНН
serialNumber заводской номер
versionSoftFR версия программного обеспечения
dateSoftFR дата сборки прошивки
buildSoftFR номер сборки прошивки
versionSoftFiscalMemory версия прошивки фискальной памяти
dateSoftFiscalMemory дата изготовления прошивки фискальной памяти
numberFR логический номер ККМ в зале
modeFR режим работы ККМ
subModeFR номер подрежима работы ККМ
flagsFiscalMemory флаги фискальной памяти
operatorNumber номер оператора
portFR использование внешнего порта ККМ
countLeftRefiscalizations количество оставшихся операций рефискализации
currentDocNumber номер открытого документа продажи
numberLastClousedSession номер последней закрытой сессии
countRefiscalizations количество фискализаций которые уже были
flagsFR флаги ККМ
buildSoftFiscalMemory номер сборки прошивки фискальной памяти
countFreeRecordsInFiscalMemory количество свободных записей в фискальной памяти
Логические параметры (0 - ложь, 1- истина)
isBufferNotEmpty буфер документа не пуст
isCapOpen состояние крышки ККМ
isMoneyBoxOpen состояние денежного ящика
isRollOperationJournalPresent наличие ленты операционного журнала (контрольной ленты)
isLeverThermalHeadControlTape положение заслонки (рычага) контрольной ленты
isOpticalSensorOperationJournal контрольная лента вставлена
isRollCheckTapePresent наличие чековой ленты
isOpticalSensorCheckTape чековая лента заправлена (оптический датчик)
isLeverThermalHeadCheckTape состояние заслонка термопринтера чековой ленты
isUpperSensorPresent состояние верхнего датчика
isErrorRightSensor ошибка правого датчика
isErrorLeftSensor ошибка левого датчика
isDecimalPointPosition положение десятичного разделителя
isEklzFull состояние ЭКЛЗ (закончилась?)
isEklzPresent ЭКЛЗ присутствует в ККМ?
isLowerSensorPresent нижний датчик присутствует (подкладного документа)
statusMessageHTML подготовленный в формате HTML описатель состояния кассы (для встраивания в виджет)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поддержка 54-ФЗ - Онлайн-кассы Штрих-М

Для осуществления поддержки онлайн-касс добавлены следующие команды протокола (обязательные)

 

Открыть смену

<OpenSession  />

 

Открыть смену в фискальном накопителе

<OpenSessionFN  />

Возвращаемые значения:

newSessionFNId -- номер новой открытой смены

numberFD -- номер фискального документа

fiskalMark -- фискальный признак

 

Передать TLV-структуру

TLV -- type-lenght-value структура предназначена для предачи различных параметров на сервера ОФД. Как пример - тег 1008 -- передача телефонного номера или электронной почты на сервер ОФД.

<SetTLV type="целое_число"  len="длина" data="данные"  />