АТОЛ. JPOS-драйвер v.1.14.10
Настройка драйвера
Настройка драйвера осуществляется через XML-файл, описывающий устройство по стандарту JPOS. Доступные следующие настройки:
- настройки связи с ККТ:
- channel - канал обмена с ККТ. Может принимать значения COM, USB, BLUETOOTH, TCP.
- com - название порта RS232 (для channel = COM). Для Windows принимает значения COMN, где N - номер порта. Для Linux - /dev/ttySN, где N - номер порта.
- baudrate - скорость порта RS232, бод (для channel = COM). Может принимать значения 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 912600.
- ip - IP-адрес и порт ККТ (для channel = TCP). Формат - host:port.
- mac - MAC-адрес ККТ (для channel = BLUETOOTH). Формат - XX:XX:XX:XX:XX:XX.
- usb - Путь к USB-устройству (для channel = USB). Только Linux. Например, 2-1.2 - путь из /sys/bus/usb/devices/. При использовании одной ККТ можно установить значение auto.
- настройки идентификаторов типов оплат. Значениями являются строки произвольной длины, которые будет использоваться в параметре description метода printRecTotal():
- paymentCash - идентификатор оплаты наличными.
- paymentElectronically - идентификатор оплаты безналичными.
- paymentPrepaid - идентификатор оплаты предварительной оплатой (авансом).
- paymentCredit - идентификатор оплаты последующей оплатой (кредитом).
- paymentOther - идентификатор оплаты иной формой оплаты (встречным предоставлением).
- payment6 - идентификатор оплаты, соответствующий расширенному типу оплаты №6 в ККТ.
- payment7 - идентификатор оплаты, соответствующий расширенному типу оплаты №7 в ККТ.
- payment8 - идентификатор оплаты, соответствующий расширенному типу оплаты №8 в ККТ.
- payment9 - идентификатор оплаты, соответствующий расширенному типу оплаты №9 в ККТ.
- payment10 - идентификатор оплаты, соответствующий расширенному типу оплаты №10 в ККТ.
- настройки типов оплат в ККТ:
- payment6Name - наименовение типа оплаты №6.
- payment7Name - наименовение типа оплаты №7.
- payment8Name - наименовение типа оплаты №8.
- payment9Name - наименовение типа оплаты №9.
- payment10Name - наименовение типа оплаты №10.
- payment6FiscalType - привязка типа оплаты №6 к способу расчета (2 - безналичными, 3 - аванс, 4 - кредит, 5 - встречное предоставление).
- payment7FiscalType - привязка типа оплаты №7 к способу расчета (2 - безналичными, 3 - аванс, 4 - кредит, 5 - встречное предоставление).
- payment8FiscalType - привязка типа оплаты №8 к способу расчета (2 - безналичными, 3 - аванс, 4 - кредит, 5 - встречное предоставление).
- payment9FiscalType - привязка типа оплаты №9 к способу расчета (2 - безналичными, 3 - аванс, 4 - кредит, 5 - встречное предоставление).
- payment10FiscalType - привязка типа оплаты №10 к способу расчета (2 - безналичными, 3 - аванс, 4 - кредит, 5 - встречное предоставление).
- настройки налоговых ставок. Значениями являются числа, которые будут использоваться в параметре vatInfo методов printRecItem() и printRecItemRefund(), а также в directIO #1026 (регистрация налога на чек):
- vat0 - идентификатор налоговой ставки “НСД 0%”.
- vatNo - идентификатор налоговой ставки “НСД не облагается”.
- vat10 - идентификатор налоговой ставки “НСД 10%”.
- vat18 - идентификатор налоговой ставки “НСД 20%” и “НСД 18%”.
- vat110 - идентификатор налоговой ставки “НДС расчитанный 10/110”.
- vat118 - идентификатор налоговой ставки “НДС расчитанный 20/120” и “НДС расчитанный 18/118”.
- настройки клише:
- numHeaderLines - количество строк заголовка чека (клише).
- numTrailerLines - количество строк подвала чека (реклама).
- picturesFileName - путь к файлу с описанием картинок для загрузки в ККТ. Если количество картинок в файле расходится с текущим количеством в ККТ, то картинки в ККТ удаляются и загружаются новые.
- clichePicturePrefix - подстрока, по которой драйвер будет определять строку клише с картинкой. Формат строки клише для печати картинки: {PREFIX}N,M{PREFIX}, где
- {PREFIX} - значение настройки clichePicturePrefix,
- N - номер картинки (картинки грузятся из файла picturesFileName по-порядку, нумеруются с 1)
- M - смещение при печати картинки, в пикселях
- настройки печати:
- printNonFiscalFooter - если значение равно 1, то при вызове endNonFiscalReceipt() печатается и подвал чека, и клише. Если 0 - только клише.
- defaultFont - шрифт нефискальных строк по умолчанию. Влияет на печать строк методами printRecMessage() и printNormal(), а также на любые строки, которые драйвер будет печатать самостоятельно. Не влияет на печать строк через directIO #1001 (печать строки с форматированием).
- настройки ККТ:
- parametersFileName - путь к файлу с настройками ККТ, которые будут переданы в ККТ при подключении. Подробное описание в разделе Загрузка настроек в ККТ.
- различные кастомизации:
- grandTotalsWithShiftTotals - если 1, необнуляемый итог, получаемый с помощью запроса getData(FPTR_GD_GRAND_TOTAL), возвращается с учетом сменного.
- grandTotalsInCents - если 1, то необнулямый, получаемый с помощью запроса getData(FPTR_GD_GRAND_TOTAL), возвращается в копейках.
- checkSubtotal - если 1, то сумма итога, переданная в методе printRecSubtotal(), проверяется на соответствие той, которая была подсчитана драйвером. Если будет расхождение - драйвер вернет ошибку.
- unitNameAsAttribute - если 1, то интерпретировать параметр unitName метода printRecItem() как значение реквизита 1197 (единицы измерения предмета расчета).
- receiptNumberType - если 1, то на запрос getData(FPTR_GD_RECEIPT_NUMBER) будет возвращаться номер последнего документа ФН. Если 0 - номер чека в смене из ФН.
- amountDecimalPlaces - кол-во знаков после запятой в суммах. При значении 2, для передачи суммы 12.34 нужно передавать 1234, а при значении 4 - 123400.
- cacheRecMessages - если 1, то все данные, поданные на печать методом printRecMessage() или directIO #1001 или #1002 в состоянии FPTR_PS_FISCAL_RECEIPT_ENDING, будут напечатаны после закрытия чека.
- openShiftBeforeClose - если 1, то драйвер будет открывать смену перед её закрытием при вызове printZReport().
- invertCashDrawerStatus - если 1, то драйвер будет инвертировать возвращаемое состояние денежного ящика.
- scriptsPath - путь к каталогу с пользовательскими скриптами ДТО10. Нужны, если в работе планируется использовать пользовательские реквизиты/скрипты ККТ. Подробнее про скрипты - в основной документации на ДТО10 - http://integration.atol.ru/api/#scripts.
Поддержка стандартных операций
Регистрация кассира
С помощью метода setPOSID()
и directIO #1038 можно задать имя кассира. С помощью directIO #1027 - ИНН кассира. Заданные таким образом параметры будут актуальны на время всей жизни экземпляра драйвера.
Печать чека
Открытие чека
Для открытия чека необходимо установить его тип и вызвать метод открытия чека beginFiscalReceipt()
. Поддерживаемые типы чека:
FPTR_RT_SALES
- чек приходаFPTR_RT_REFUND
- чек возврата прихода100
- чек коррекции прихода (не входит в стандарт UPOS)101
- чек коррекции возврата прихода (не входит в стандарт UPOS)102
- чек расхода (не входит в стандарт UPOS)103
- чек возврата расхода (не входит в стандарт UPOS)104
- чек коррекции расхода (не входит в стандарт UPOS)105
- чек коррекции возврата расхода (не входит в стандарт UPOS)
Параметры метода beginFiscalReceipt
игнорируются. Метод можно вызвать только из состояния FPTR_PS_MONITOR
. Метод переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT
.
Драйвер предоставляет возможность не печатать чек на чековой ленте. Для этого служит directIO #1009.
Регистрация реквизита чека
В стандарте UPOS нет способа зарегистрировать реквизит чека. Потому драйвер предоставляет данный функционал через метод directIO()
. Для этого используется directIO #1010.
Регистрация позиции чека продажи / покупки
Для регистрации позиции чека продажи / покупки используется следующий код:
При этом будет зарегистрирована простейшая позиция с наименованием “*1860 Напиток COCA-COLA газ.ПЭТ 2.0л”, общей суммой 40.00, количеством 2.000, ценой за единицу 20.00, ставкой налога #1 и единицей измерения кг. Формат передачи цен подчиняется настройке amountDecimalPlaces. Способ обработки единицы измерения подчиняется настройке unitNameAsAttribute. Налоговые ставки регулируются настройками vat0, vatNo, vat10, vat110, vat18, vat118. Вызов данного метода не требуется для регистрации чеков коррекции по ФФД 1.0 и 1.05.
Регистрация позиции чека возврата продажи / покупки
Для регистрации позиции чека возврата продажи / покупки используется следующий код:
При этом будет зарегистрирована простейшая позиция с наименованием “*1860 Напиток COCA-COLA газ.ПЭТ 2.0л”, общей суммой 40.00, количеством 2.000, ценой за единицу 20.00, ставкой налога #1 и единицей измерения кг. Формат передачи цен подчиняется настройке amountDecimalPlaces. Способ обработки единицы измерения подчиняется настройке unitNameAsAttribute. Налоговая ставка регулируется настройками vat0, vatNo, vat10, vat110, vat18, vat118. Вызов данного метода не требуется для регистрации чеков коррекции по ФФД 1.0 и 1.05.
Скидка на позицию
Для регистрации скидки на позицию используется метод printRecItemAdjustment()
. Сам метод на итоговую сумму чека не влияет, т.е. реальной скидки не делает, а только передает ее значение в ККТ для печати на чековой ленте. Драйвер обрабатывает только сумму скидки и её тип, остальные параметры игнорируются. Поддерживаются только суммовые скидки (тип FPTR_AT_AMOUNT_DISCOUNT
). Формат передачи суммы подчиняется настройке amountDecimalPlaces.
Вызов данного метода не требуется для регистрации чеков коррекции по ФФД 1.0 и 1.05.
Сумма налога на позицию
Для регистрации суммы налога на позицию используется метод directIO #1033. Формат передачи суммы подчиняется настройке amountDecimalPlaces.
Вызов данного метода не требуется для регистрации чеков коррекции по ФФД 1.0 и 1.05.
Сумму налога нужно передавать после регистрации позиции.
Регистрация реквизита позиции
В стандарте UPOS нет способа зарегистрировать реквизит позиции. Потому драйвер предоставляет данный функционал через метод directIO()
. Для этого используется directIO #1011. Его нужно вызвать до регистрации самой позиции. Допускается регистрация нескольких реквизитов. Вызов данного метода не требуется для регистрации чеков коррекции по ФФД 1.0 и 1.05.
Печать строки
Для печати строки на чековой ленте внутри чека используется метод printRecMessage()
. Поведение метода подчиняется настройкам cacheRecMessages и defaultFont.
Также внутри чека будет работать метод printNormal()
. Поддерживается только печать на чековой ленте (FPTR_S_RECEIPT
). Поведение метода НЕ подчиняется настройке cacheRecMessages, но подчиняется defaultFont.
Т.к. UPOS не позволяет менять форматирование текста, для этого можно использовать directIO #1001.
Печать штрихкода
В стандарте UPOS нет способа напечатать штрихкод. Потому драйвер предоставляет данный функционал через метод directIO()
. Для этого используется directIO #1002.
Регистрация скидки на чек
Драйвер позволяет зарегистрировать скидку-округления на чек. Для этого служит метод printRecSubtotalAdjustment()
. Поддреживается только один тип скидки - FPTR_AT_AMOUNT_DISCOUNT
. Формат передачи суммы подчиняется настройке amountDecimalPlaces.
Вызов данного метода не требуется для регистрации чеков коррекции по ФФД 1.0 и 1.05.
Регистрация налога на чек
В стандарте UPOS нет способа зарегистрировать налог на чек. Потому драйвер предоставляет данный функционал через метод directIO()
. Для этого используется directIO #1026. Метод доступен из состояний FPTR_PS_FISCAL_RECEIPT
и FPTR_PS_FISCAL_RECEIPT_TOTAL
.
Регистрация оплаты
Для регистрации оплаты используется метод printRecTotal()
. Драйвер обрабатывает только сумму и тип оплаты, сумма итога не обрабатывается. Формат передачи суммы оплаты подчиняется настройке amountDecimalPlaces. Типы оплат регулируются настройками paymentCash, paymentElectronically, paymentPrepaid, paymentCredit, paymentOther, payment6, payment7, payment8, payment9, payment10.
Метод доступен из состояний FPTR_PS_FISCAL_RECEIPT
и FPTR_PS_FISCAL_RECEIPT_TOTAL
. Первая оплата переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT_TOTAL
. Как только чек полностью оплачивается, драйвер переводится в состояние FPTR_PS_FISCAL_RECEIPT_ENDING
.
Отмена чека
Для отмены чека необходимо вызвать метод printRecVoid()
, а после него закрыть чек. Параметры метода игнорируются.
Метод переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT_ENDING
.
Закрытие чека
Для закрытия чека необходимо вызвать метод endFiscalReceipt()
. Параметры метода игнорируются.
Метод доступен из состояний FPTR_PS_FISCAL_RECEIPT
и FPTR_PS_FISCAL_RECEIPT_ENDING
. Метод переводит драйвер в состояние FPTR_PS_MONITOR
.
Пример формирования чека продажи
// Открытие чека
fptr.setFiscalReceiptType(FiscalPrinterConst.FPTR_RT_SALES);
fptr.beginFiscalReceipt(true);
// Дополнительные реквизиты чека - СНО, телефон получателя электронного чека
fptr.directIO(1010, new int[]{5, 0}, String.valueOf(0x01) /*ОСН*/);
fptr.directIO(1010, new int[]{1, 1}, "client@mail.ru");
// Регистрация позиции с дополнительными реквизитами и скидкой
fptr.directIO(1011, new int[]{3, 0}, String.valueOf(2)); // Признак предмета расчета
fptr.printRecItem("Товар 1", 4000, 2000, 1, 2000, "шт");
fptr.printRecItemAdjustment(FiscalPrinterConst.FPTR_AT_AMOUNT_DISCOUNT, "", 90, 1);
// Нефискальный текст - разделитель позиций
fptr.printRecMessage("----------------------------------------------------------------");
// Регистрация простейшей позиции
fptr.printRecItem("Товар 2", 3990, 1000, 1, 3990, "");
// Скидка-округление на чек
fptr.printRecSubtotalAdjustment(FiscalPrinterConst.FPTR_AT_AMOUNT_DISCOUNT, "", 90);
// Оплата
fptr.printRecTotal(7900, 7900, "00");
// Закрытие чека
fptr.endFiscalReceipt(false);
Пример формирования чека продажи без печати на чековой ленте
// Открытие чека
fptr.setFiscalReceiptType(FiscalPrinterConst.FPTR_RT_SALES);
fptr.beginFiscalReceipt(true);
fptr.directIO(1009, null, null);
// Дополнительные реквизиты чека - СНО, телефон получателя электронного чека
fptr.directIO(1010, new int[]{5, 0}, String.valueOf(0x01) /*ОСН*/);
fptr.directIO(1010, new int[]{1, 1}, "client@mail.ru");
// Регистрация позиции с дополнительными реквизитами и скидкой
fptr.printRecItem("Товар 1", 4000, 2000, 1, 2000, "шт");
fptr.printRecItemAdjustment(FiscalPrinterConst.FPTR_AT_AMOUNT_DISCOUNT, "", 90, 1);
// Нефискальный текст - разделитель позиций
fptr.printRecMessage("----------------------------------------------------------------");
// Регистрация простейшей позиции
fptr.printRecItem("Товар 2", 3990, 1000, 1, 3990, "");
// Скидка-округление на чек
fptr.printRecSubtotalAdjustment(FiscalPrinterConst.FPTR_AT_AMOUNT_DISCOUNT, "", 90);
// Оплата
fptr.printRecTotal(7900, 7900, "00");
// Закрытие чека
fptr.endFiscalReceipt(false);
Пример формирования чека продажи с табачным товаром
// Открытие чека
fptr.setFiscalReceiptType(FiscalPrinterConst.FPTR_RT_SALES);
fptr.beginFiscalReceipt(true);
// Регистрация табачной позиции
fptr.directIO(1029, null, new String[]{"98765432101234", "ABC1234"});
fptr.printRecItem("Табак", 4000, 2000, 1, 2000, "шт");
// Оплата
fptr.printRecTotal(4000, 4000, "00");
// Закрытие чека
fptr.endFiscalReceipt(false);
Пример формирования чека возврата
// Открытие чека
fptr.setFiscalReceiptType(FiscalPrinterConst.FPTR_RT_REFUND);
fptr.beginFiscalReceipt(true);
// Регистрация позиции
fptr.printRecItemRefund("Табак", 4000, 2000, 1, 2000, "шт");
// Оплата
fptr.printRecTotal(4000, 4000, "00");
// Закрытие чека
fptr.endFiscalReceipt(false);
Пример формирования чека коррекции (ФФД 1.0 и 1.05)
// Открытие чека
fptr.setFiscalReceiptType(100);
fptr.beginFiscalReceipt(true);
// Основание для коррекции
fptr.directIO(1010, new int[]{20, 0}, "0");
fptr.directIO(1010, new int[]{21, 1}, "№ 1234");
fptr.directIO(1010, new int[]{22, 4}, "01012018000000");
fptr.directIO(1010, new int[]{23, 1}, "Документ коррекции");
// Налоги
fptr.directIO(1026, new int[]{1}, "1000");
fptr.directIO(1026, new int[]{2}, "1300");
// Оплаты
fptr.printRecTotal(100000, 20000, "00");
fptr.printRecTotal(100000, 80000, "10");
// Закрытие чека
fptr.endFiscalReceipt(false);
Закрытие смены
Для закрытия смены используется метод printZReport()
. Автоматическое открытие смены регулируется настройкой openShiftBeforeClose.
Печать X-отчета
Для печати X-отчета используется метод printXReport()
.
Печать отчета о состоянии расчетов
Для печати отчета о состоянии расчетов printReport()
, указав тип отчета равный 100. Остальные параметры метода игнорируются.
Внесения / выплаты
Открытие документа внесения / выплаты
Для открытия документа внесения / выплаты необходимо установить его тип и вызвать метод beginFiscalReceipt()
. Поддерживаемые типы чека:
FPTR_RT_CASH_IN
- внесениеFPTR_RT_CASH_OUT
- выплата
Параметры метода beginFiscalReceipt
игнорируются.
Метод можно вызвать только из состояния FPTR_PS_MONITOR
. Метод переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT
.
Регистрация внесения / выплаты
Для регистрации внесения / выплаты используется метод printRecCash()
. Все суммы складываются и передаются в ККТ. Формат передачи суммы подчиняется настройке amountDecimalPlaces.
Отмена документа внесения / выплаты
Для отмены документа внесения / выплаты необходимо вызвать метод printRecVoid()
, а после него закрыть документ. Параметры метода игнорируются.
Метод переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT_ENDING
.
Закрытие документа внесения / выплаты
Для закрытия документа внесения / выплаты необходимо вызвать метод endFiscalReceipt()
. Параметры метода игнорируются.
Метод доступен из состояний FPTR_PS_FISCAL_RECEIPT
и FPTR_PS_FISCAL_RECEIPT_ENDING
. Метод переводит драйвер в состояние FPTR_PS_MONITOR
.
Пример формирования внесения
// Открытие внесения
fptr.setFiscalReceiptType(FiscalPrinterConst.FPTR_RT_CASH_IN);
fptr.beginFiscalReceipt(true);
// Внесение сумм
fptr.printRecCash(10000);
fptr.printRecCash(20000);
// Закрытие внесения
fptr.endFiscalReceipt(false);
Нефискальные документы
Открытие нефискального документа
Для открытия нефискального документа используется метод beginNonFiscal()
.
Метод можно вызвать только из состояния FPTR_PS_MONITOR
. Метод переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT
.
Закрытие нефискального документа
Для закрытия нефискального документа используется метод endNonFiscal()
.
Метод переводит драйвер в состояние FPTR_PS_MONITOR
.
Печать строки
Для печати строки на чековой ленте внутри нефискального документа используется метод printNormal()
. Поведение метода подчиняется настройке defaultFont.
Т.к. UPOS не позволяет менять форматирование текста, для этого можно использовать directIO #1001.
Печать штрихкода
В стандарте UPOS нет способа напечатать штрихкод. Потому драйвер предоставляет данный функционал через метод directIO()
. Для этого используется directIO #1002.
Пример печати нефискального документа (на примере слипа ЕГАИС)
// Открытие нефискального документа
fptr.beginNonFiscal();
// Печать строк и штрихкодов
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "ИНН: 111111111111 КПП: 222222222");
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "КАССА: 1 СМЕНА: 11");
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "ЧЕК: 314 ДАТА: 20.11.2017 15:39");
fptr.directIO(1002, new int[]{11, 7, 0, 0}, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "");
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7");
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "");
fptr.printNormal(FiscalPrinterConst.FPTR_S_RECEIPT, "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c " +
"78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 " +
"ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 " +
"81 74");
// Закрытие нефискального документа
fptr.endNonFiscal();
Запросы информации о ККТ и драйвере
Описание драйвера
Для запроса описания драйвера нужно вызвать метод getDeviceServiceDescription()
.
Версия драйвера
Для запроса версии драйвера нужно вызвать метод getDeviceServiceVersion()
.
Описание устройства
Для запроса описания устройства нужно вызвать метод getPhysicalDeviceDescription()
.
Название устройства
Для запроса наименования устройства нужно вызвать метод getPhysicalDeviceName()
.
Ширина ленты в символах
Для запроса ширины ленты нужно вызвать метод getMessageLength()
.
Количество строк заголовка клише
Для запроса количества строк нужно вызвать метод getNumHeaderLines()
. Он возвращает значение настройки numHeaderLines.
Количество строк подвала клише
Для запроса количества строк нужно вызвать метод getNumTrailerLines()
. Он возвращает значение настройки numTrailerLines.
Запросы состояния
Состояние крышки
Для запроса состояния крышки нужно вызвать метод getCoverOpen()
.
Состояние бумаги
Для запроса состояния бумаги нужно вызвать метод getRecEmpty()
.
Состояние смены
Для запроса состояния смены нужно вызвать метод getDayOpened()
.
Дата и время
Для запроса текущих даты и времени нужно вызвать метод getDate()
с типом запроса времени FPTR_DT_RTC
.
Т.к. по стандарту UPOS нельзя получить время с точносью до секунды, драйвер предоставляет directIO #1015 для этого.
Дата и время начала смены
Для запроса даты и времени начала смены нужно вызвать метод getDate()
с типом запроса времени FPTR_DT_START
.
Дата и время истечения смены
Для запроса даты и времени истечения смены нужно вызвать метод getDate()
с типом запроса времени FPTR_DT_EOD
.
Запросы счетчиков
Текущая сумма чека
Для запроса текущей суммы чека нужно вызвать метод getData()
с типом запроса FPTR_GD_CURRENT_TOTAL
.
String[] result = new String[1];
fptr.getData(FiscalPrinterConst.FPTR_GD_CURRENT_TOTAL, null, result);
Номер чека
Для запроса номера чека нужно вызвать метод getData()
с типом запроса FPTR_GD_RECEIPT_NUMBER
.
String[] result = new String[1];
fptr.getData(FiscalPrinterConst.FPTR_GD_RECEIPT_NUMBER, null, result);
Если настройка receiptNumberType имеет значение 0, то возвращается номер чека в смене. Если она равна 1, то возвращается номер документа из ФН.
Номер смены
Для запроса номера смены нужно вызвать метод getData()
с типом запроса FPTR_GD_Z_REPORT
.
Заводской номер ККТ
Для запроса заводского номера ККТ нужно вызвать метод getData()
с типом запроса FPTR_GD_PRINTER_ID
.
Версия ПО ККТ
Для запроса версии ПО ККТ нужно вызвать метод getData()
с типом запроса FPTR_GD_FIRMWARE
.
Обработка ошибок
Драйвер возвращает ошибки в виде исключений jpos.JposExeption
. Если ошибку вызвал обмен с ККТ, то поле origException
будет содержать ошибку драйвера в виде исключения ru.atol.drivers10.jpos.fptr.errors.DriverException
.
try {
...
}
catch (JposException e) {
if (e.getOrigException() instanceof ru.atol.drivers10.jpos.fptr.errors.DriverException) {
System.out.println(String.format("Driver error = %d [%s]", ((ru.atol.drivers10.jpos.fptr.errors.DriverException)e.getOrigException()).getErrorCode(), e.getMessage()));
} else {
System.out.println(String.format("JposException = %s", e.getMessage()));
}
}
Расширенный функционал (directIO)
1001 - печать текста с форматированием
Тип object
- String.
Входные параметры:
data[0]
- выравнивание- 0 - слева
- 1 - по центру
- 2 - справа
data[1]
- двойная ширинаdata[2]
- двойная высотаdata[3]
- яркостьdata[4]
- шрифтobject
- текст
Выходные параметры: Нет
Пример:
int alignment = 1;
int doubleWidth = 1;
int doubleHeight = 0;
int brightness = 7;
int font = 2;
String text = "Строка";
fptr.directIO(1001, new int[]{alignment, doubleWidth, doubleHeight, brightness, font}, text);
1002 - печать штрихкода
Тип object
- String.
Входные параметры:
data[0]
- тип ШК- 0 - EAN8
- 1 - EAN13
- 2 - UPCA
- 3 - UPCE
- 4 - CODE39
- 5 - CODE93
- 6 - CODE128
- 7 - CODABAR
- 8 - ITF
- 9 - ITF14
- 11 - QR
- 12 - PDF417
- 14 - CODE39_EXTENDED
data[1]
- коэфициент увеличенияdata[2]
- высота (для одномерных ШК)data[3]
- печатать текст ШКobject
- данные ШК
Выходные параметры: Нет
Пример:
int type = 11;
int height = 0;
int printText = 1;
int scale = 2;
String data = "qrdata";
fptr.directIO(1002, new int[]{type, scale, height, printText}, data);
1003 - открытие смены
Входные параметры: Нет
Выходные параметры: Нет
Пример:
1004 - чтение настройки ККТ
Тип object
- String[1].
Входные параметры:
data[0]
- номер настройки (см. документацию на драйвер ККТ, раздел Настройки ККТ.
Выходные параметры:
object[0]
- значение настройки
Пример:
int settingsID = 273;
String[] result = new String[1];
fptr.directIO(1004, new int[]{settingsID}, result);
1005 - запись настройки ККТ
Тип object
- String.
Входные параметры:
data[0]
- номер настройки (см. документацию на драйвер ККТ, раздел Настройки ККТ.object
- значение настройки
Выходные параметры: Нет
Пример:
int settingsID = 273;
String settingValue = "ofdp.platformaofd.ru";
fptr.directIO(1005, new int[]{settingsID}, settingValue);
1006 - применить настройки ККТ
Применяет настройки, записанные с помощью directIO #1005
Входные параметры: Нет
Выходные параметры: Нет
Пример:
1007 - запрос информации о последнем документе
Тип object
- String[3].
Входные параметры: Нет
Выходные параметры:
object[0]
- номер ФДobject[1]
- ФПДobject[2]
- дата и время (формат - ddMMyyyyHHmm)
Пример:
String[] result = new String[3];
fptr.directIO(1007, null, result);
String documentNumber = result[0];
String documentSign = result[1];
String documentDateTime = result[2];
1008 - запрос квитанции ОФД
Тип object
- String[2].
Входные параметры:
data[0]
- номер ФД
Выходные параметры:
object[0]
- ФПД ОФДobject[1]
- дата и время (формат - ddMMyyyyHHmm)
Пример:
String[] result = new String[2];
int documentNumber = 12;
fptr.directIO(1008, new int[]{documentNumber}, result);
String ofdSign = result[0];
String ticketDateTime = result[1];
1009 - отключение печати чека
Вызов directIO отключает печать следующего или текущего чека.
Входные параметры: Нет
Выходные параметры: Нет
Пример:
1010 - добавление реквизита чека
Выполняется только при открытом чеке.
Тип object
- String.
Входные параметры:
data[0]
- номер реквизита. Возможные значения:- 1 - телефон или email получателя (тег ФН 1008). Тип - строка;
- 2 - наименование получателя (тег ФН 1227). Тип - строка;
- 3 - ИНН получателя (тег ФН 1228). Тип - строка;
- 4 - email отправителя чека (тег ФН 1117). Тип - строка;
- 5 - система налогообложения (тег ФН 1055). Тип - число. Может принимать значения:
- 1 - ОСН;
- 2 - упрощенная Доход;
- 4 - упрощенная Доход минус Расход;
- 8 - ЕНВД;
- 16 - ЕСН;
- 32 - патент.
- 6 - место расчетов (тег ФН 1187). Тип - строка;
- 7 - признак агента (тег ФН 1057). Тип - число. Может принимать комбинацию следующих значений:
- 0 - не агент;
- 1 - банковский платежный агент;
- 2 - банковский платежный субагент;
- 4 - платежный агент;
- 8 - платежный субагент;
- 16 - поверенный;
- 32 - комиссионер;
- 64 - агент.
- 8 - телефон поставщика (тег ФН 1171) (может повторяться). Тип - строка;
- 9 - операция платежного агента (тег ФН 1044). Тип - строка;
- 10 - телефон платежного агента (тег ФН 1073) (может повторяться). Тип - строка;
- 11 - адрес оператора перевода (тег ФН 1005). Тип - строка;
- 12 - ИНН оператора перевода (тег ФН 1016). Тип - строка;
- 13 - наименование оператора перевода (тег ФН 1026). Тип - строка;
- 14 - телефон оператора перевода (тег ФН 1075) (может повторяться). Тип - строка;
- 15 - телефон оператора по приему платежей (тег ФН 1074) (может повторяться). Тип - строка;
- 18 - наименование дополнительного реквизита пользователя (тег ФН 1085). Тип - строка;
- 19 - значение дополнительного реквизита пользователя (тег ФН 1086). Тип - строка;
- 20 - тип коррекции (тег ФН 1173). Тип - число. Возможные значения:
- 0 - самостоятельно;
- 1 - по предписанию.
- 21 - наименование документа основания для коррекции (тег ФН 1177). Тип - строка;
- 22 - дата документа основания для коррекции (тег ФН 1178). Тип - дата / время;
- 23 - номер документа основания для коррекции (тег ФН 1179). Тип - строка;
- 24 - дополнительный реквизит чека (БСО) (тег ФН 1192). Тип - строка.
data[1]
- тип реквизита- 0 - целое число. Значение в
object
должно быть строкой с числом - “123”; - 1 - строка. Значение в
object
- произвольная строка; - 2 - дробное число. Значение в
object
должно быть строкой с числом - “1.23”; - 4 - дата / время. Значение в
object
должно быть строкой с датой, формат - ddMMyyyyHHmmss.
- 0 - целое число. Значение в
object
- значение реквизита.
Выходные параметры: Нет
Пример:
int attrNumber = 1;
int attrType = 1;
String attrValue = "user@mail.ru";
fptr.directIO(1010, new int[]{attrNumber, attrType}, attrValue);
1011 - добавление реквизита позиции
Выполняется только при открытом чеке. Вызывать нужно ДО регистрации позиции, к которой реквизиты должны быть применены.
Тип object
- String.
Входные параметры:
data[0]
- номер реквизита. Возможные значения:- 1 - код товара (тег ФН 1162). Тип - массив байтов;
- 2 - единицы измерения предмета расчета (тег ФН 1197). Тип - строка;
- 3 - признак предмета расчета (тег ФН 1212). Тип - число;
- 4 - признак способа расчета (тег ФН 1214). Тип - число;
- 5 - сумма акциза (тег ФН 1229). Тип - дробное число;
- 6 - код страны происхождения (тег ФН 1230). Тип - строка;
- 7 - признак агента (тег ФН 1057). Тип - число. Может принимать одно из следующих значений:
- 1 - банковский платежный агент;
- 2 - банковский платежный субагент;
- 4 - платежный агент;
- 8 - платежный субагент;
- 16 - поверенный;
- 32 - комиссионер;
- 64 - агент.
- 8 - телефон поставщика (тег ФН 1171) (может повторяться). Тип - строка;
- 9 - операция платежного агента (тег ФН 1044). Тип - строка;
- 10 - телефон платежного агента (тег ФН 1073) (может повторяться). Тип - строка;
- 11 - адрес оператора перевода (тег ФН 1005). Тип - строка;
- 12 - ИНН оператора перевода (тег ФН 1016). Тип - строка;
- 13 - наименование оператора перевода (тег ФН 1026). Тип - строка;
- 14 - телефон оператора перевода (тег ФН 1075) (может повторяться). Тип - строка;
- 15 - телефон оператора по приему платежей (тег ФН 1074) (может повторяться). Тип - строка;
- 16 - наименование поставщика (тег ФН 1225). Тип - строка;
- 17 - ИНН поставщика (тег ФН 1226). Тип - строка;
- 18 - номер таможенной декларации (тег ФН 1231). Тип - строка;
- 19 - дополнительный реквизит предмета расчета (тег ФН 1191). Тип - строка.
data[1]
- тип реквизита- 0 - целое число. Значение в
object
должно быть строкой с числом - “123”; - 1 - строка. Значение в
object
- произвольная строка; - 2 - дробное число. Значение в
object
должно быть строкой с числом - “1.23”; - 3 - массив байтов. Значение в
object
должно быть строкой с hex-представлением байтов, без разделителей - “0102FFAA”; - 4 - дата / время. Значение в
object
должно быть строкой с датой, формат - ddMMyyyyHHmmss.
- 0 - целое число. Значение в
object
- значение реквизита.
Выходные параметры: Нет
Пример:
int attrNumber = 3;
int attrType = 0;
String attrValue = "1";
fptr.directIO(1011, new int[]{attrNumber, attrType}, attrValue);
1012 - открыть денежный ящик
Входные параметры: Нет
Выходные параметры: Нет
Пример:
1013 - статус денежного ящика
Входные параметры: Нет
Выходные параметры:
- ata[0]` - 1, если денежный ящик открыт, 0 - если закрыт. На значение влияет настройка invertCashDrawerStatus.
Пример:
1014 - печать документа из ФН по номеру
Входные параметры:
data[0]
- номер документа.
Выходные параметры: Нет
Пример:
1015 - чтение даты и времени (с точностью до секунд)
Тип object
- String[1].
Входные параметры: Нет
Выходные параметры:
object[0]
- дата и время (формат - ddMMyyyyHHmmss)
Пример:
1016 - запись даты и времени (с точностью до секунд)
Тип object
- String.
Входные параметры:
object
- дата и время (формат - ddMMyyyyHHmmss)
Выходные параметры: Нет
Пример:
1017 - чтение реквизитов регистрации ККТ
Тип object
- String[1].
Входные параметры:
data[0]
- номер реквизита. Может принимать значения:- 1001 - признак автоматического режима;
- 1002 - признак автономного режима;
- 1009 - адрес расчетов;
- 1017 - ИНН ОФД;
- 1018 - ИНН организации;
- 1036 - номер автомата;
- 1037 - регистрационный номер устройства;
- 1046 - название ОФД;
- 1048 - название организации;
- 1056 - признак шифрования;
- 1057 - признак агента;
- 1060 - адрес сайта ФНС;
- 1062 - системы налогообложения;
- 1108 - признак ККТ для расчетов в сети Интернет;
- 1109 - признак расчетов за услуги;
- 1110 - признак АС БСО;
- 1117 - e-mail организации;
- 1126 - признак проведения лотерей;
- 1187 - адрес места расчетов;
- 1193 - признак проведения азартных игр;
- 1207 - признак подакцизного товара;
- 1209 - версия ФФД;
- 1221 - признак установки в автомате.
data[1]
- тип реквизита- 0 - целое число. Значение в
object
должно быть строкой с числом - “123”; - 1 - строка. Значение в
object
- произвольная строка.
- 0 - целое число. Значение в
Выходные параметры:
object[0]
- значение реквизита
Пример:
String[] result = new String[1];
int attrNumber = 1009;
int attrType = 1;
fptr.directIO(1017, new int[]{attrNumber, attrType}, result);
String attrValue = result[0];
1020 - чтение сменных счетчиков
Считывает все сменные счетчики из ККТ. Если какой-либо из счетчиков считать не удалось, в соответствующем элементе списка возвращается null
. Формат всех сумм, возвращаемых этим directIO, подчиняется настройке amountDecimalPlaces.
Тип object
- List
Входные параметры: Нет
Выходные параметры:
data[0]
- номер смены;data[1]
- сумма наличных в ДЯ;data[2]
- сумма внесений;data[3]
- количество внесений;data[4]
- сумма выплат;data[5]
- количество выплат;data[6]
- количество чеков прихода;data[7]
- сумма оплат чеков прихода наличными;data[8]
- сумма оплат чеков прихода безналичными;data[9]
- сумма оплат чеков прихода авансом;data[10]
- сумма оплат чеков прихода кредитом;data[11]
- сумма оплат чеков прихода встречным предоставлением;data[12]
- сумма оплат чеков прихода пользовательским типом оплаты #1;data[13]
- сумма оплат чеков прихода пользовательским типом оплаты #2;data[14]
- сумма оплат чеков прихода пользовательским типом оплаты #3;data[15]
- сумма оплат чеков прихода пользовательским типом оплаты #4;data[16]
- сумма оплат чеков прихода пользовательским типом оплаты #5;data[17]
- количество чеков расхода;data[18]
- сумма оплат чеков расхода наличными;data[19]
- сумма оплат чеков расхода безналичными;data[20]
- сумма оплат чеков расхода авансом;data[21]
- сумма оплат чеков расхода кредитом;data[22]
- сумма оплат чеков расхода встречным предоставлением;data[23]
- сумма оплат чеков расхода пользовательским типом оплаты #1;data[24]
- сумма оплат чеков расхода пользовательским типом оплаты #2;data[25]
- сумма оплат чеков расхода пользовательским типом оплаты #3;data[26]
- сумма оплат чеков расхода пользовательским типом оплаты #4;data[27]
- сумма оплат чеков расхода пользовательским типом оплаты #5;data[28]
- количество чеков возврата прихода;data[29]
- сумма оплат чеков возврата прихода наличными;data[30]
- сумма оплат чеков возврата прихода безналичными;data[31]
- сумма оплат чеков возврата прихода авансом;data[32]
- сумма оплат чеков возврата прихода кредитом;data[33]
- сумма оплат чеков возврата прихода встречным предоставлением;data[34]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #1;data[35]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #2;data[36]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #3;data[37]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #4;data[38]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #5;data[39]
- количество чеков возврата расхода;data[40]
- сумма оплат чеков возврата расхода наличными;data[41]
- сумма оплат чеков возврата расхода безналичными;data[42]
- сумма оплат чеков возврата расхода авансом;data[43]
- сумма оплат чеков возврата расхода кредитом;data[44]
- сумма оплат чеков возврата расхода встречным предоставлением;data[45]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #1;data[46]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #2;data[47]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #3;data[48]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #4;data[49]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #5.
Пример:
List<String> result = new LinkedList<>();
fptr.directIO(1020, null, result);
int shiftNumber = Integer.parseInt(result.get(0));
...
1021 - чтение необнуляемых итогов
Считывает необнуляемые итоги из ККТ. Если какой-либо из счетчиков считатать не удалось, в соответствующем элементе списка возвращается null
. Формат всех сумм, возвращаемых этим directIO, подчиняется настройке amountDecimalPlaces.
Тип object
- List
Входные параметры: Нет
Выходные параметры:
data[0]
- сумма оплат чеков прихода наличными;data[1]
- сумма оплат чеков прихода безналичными;data[2]
- сумма оплат чеков прихода авансом;data[3]
- сумма оплат чеков прихода кредитом;data[4]
- сумма оплат чеков прихода встречным предоставлением;data[5]
- сумма оплат чеков прихода пользовательским типом оплаты #1;data[6]
- сумма оплат чеков прихода пользовательским типом оплаты #2;data[7]
- сумма оплат чеков прихода пользовательским типом оплаты #3;data[8]
- сумма оплат чеков прихода пользовательским типом оплаты #4;data[9]
- сумма оплат чеков прихода пользовательским типом оплаты #5;data[10]
- сумма оплат чеков расхода наличными;data[11]
- сумма оплат чеков расхода безналичными;data[12]
- сумма оплат чеков расхода авансом;data[13]
- сумма оплат чеков расхода кредитом;data[14]
- сумма оплат чеков расхода встречным предоставлением;data[15]
- сумма оплат чеков расхода пользовательским типом оплаты #1;data[16]
- сумма оплат чеков расхода пользовательским типом оплаты #2;data[17]
- сумма оплат чеков расхода пользовательским типом оплаты #3;data[18]
- сумма оплат чеков расхода пользовательским типом оплаты #4;data[19]
- сумма оплат чеков расхода пользовательским типом оплаты #5;data[20]
- сумма оплат чеков возврата прихода наличными;data[21]
- сумма оплат чеков возврата прихода безналичными;data[22]
- сумма оплат чеков возврата прихода авансом;data[23]
- сумма оплат чеков возврата прихода кредитом;data[24]
- сумма оплат чеков возврата прихода встречным предоставлением;data[25]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #1;data[26]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #2;data[27]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #3;data[28]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #4;data[29]
- сумма оплат чеков возврата прихода пользовательским типом оплаты #5;data[30]
- сумма оплат чеков возврата расхода наличными;data[31]
- сумма оплат чеков возврата расхода безналичными;data[32]
- сумма оплат чеков возврата расхода авансом;data[33]
- сумма оплат чеков возврата расхода кредитом;data[34]
- сумма оплат чеков возврата расхода встречным предоставлением;data[35]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #1;data[36]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #2;data[37]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #3;data[38]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #4;data[39]
- сумма оплат чеков возврата расхода пользовательским типом оплаты #5.
Пример:
List<String> result = new LinkedList<>();
fptr.directIO(1021, null, result);
double shiftNumber = Double.parseDouble(result.get(0));
...
1022 - запрос информации о ФН
Тип object
- String[5].
Входные параметры: Нет
Выходные параметры:
object[0]
- серийный номер ФНobject[1]
- версия ФНobject[2]
- тип ФНobject[3]
- состояние ФНobject[4]
- флаги ФН
Пример:
String[] result = new String[5];
fptr.directIO(1022, null, result);
String serial = result[0];
String version = result[1];
String type = result[2];
String state = result[3];
String flags = result[4];
1023 - запрос статуса обмена с ОФД
Тип object
- String[5].
Входные параметры: Нет
Выходные параметры:
object[0]
- статус обменаobject[1]
- количество неотправленных ФДobject[2]
- номер первого неотправленного ФДobject[3]
- дата и время первого неотправленного ФД (формат - ddMMyyyyHHmm)
Пример:
String[] result = new String[4];
fptr.directIO(1023, null, result);
String status = result[0];
String documentsCount = result[1];
String documentNumber = result[2];
String documentDateTime = result[3];
1024 - запрос срока действия ФН
Тип object
- String[1].
Входные параметры: Нет
Выходные параметры:
object[0]
- дата и время окончания срока действия (формат - ddMMyyyyHHmm)
Пример:
1025 - запись произвольного поля в JSON чека
Позволяет запись в формируемый JPOS-драйвером JSON произвольное поле, которое в дальнейшем нужно обработать на уровне пользовательских скриптов драйвера. Поля можно записать в:
- позиции (перед методами
printRecItemXXX()
) - оплатами (перед методом
printRecTotal())
) - закрытие чека (перед методом
endFiscalReceipt()
)
Путь к пользовательским скриптам нужно прописать в настройку scriptsPath драйвера.
Тип object
- String[2].
Входные параметры:
object[0]
- ключobject[1]
- значение
Выходные параметры: Нет
Пример:
String[] userProperty = new String[]{"myUserAttribute", "myUserAttributeValue"};
fptr.directIO(1025, null, userProperty);
1026 - регистрация налога на чек
Тип object
- String.
Входные параметры:
data[0]
- номер ставки налога (одно из значений соответствующих настроек драйвера);object
- сумма налога (формат подчиняется настройке amountDecimalPlaces).
Выходные параметры: Нет
Пример:
int vatID = 1;
String vatValue = String.valueOf(100000);
fptr.directIO(1026, new int[]{vatID}, vatValue);
1027 - установка ИНН кассира
Тип object
- String.
Входные параметры:
object
- ИНН кассира.
Выходные параметры: Нет
Пример:
1029 - запись кода табачной продукции
ВАЖНО: С помощью этого directIO можно сформировать код табачной продукции ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.
Тип object
- String[2].
Входные параметры:
object[0]
- идентификтор продукта GTIN;object[1]
- код идентификации.
Выходные параметры: Нет
Пример:
String gtin = "98765432101234";
String code = "ABC1234";
fptr.directIO(1029, null, new String[]{gtin, code});
Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.
1030 - запись кода лекарства
ВАЖНО: С помощью этого directIO можно сформировать код лекарства ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.
Тип object
- String[2].
Входные параметры:
object[0]
- идентификтор продукта GTIN;object[1]
- контрольный (идентификационный) знак (КиЗ).
Выходные параметры: Нет
Пример:
String gtin = "98765432101234";
String code = "ABC1234567890";
fptr.directIO(1030, null, new String[]{gtin, code});
Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.
1031 - запись код меховой продукции
ВАЖНО: С помощью этого directIO можно сформировать код меховой продукции ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.
Тип object
- String[2].
Входные параметры:
object[0]
- идентификтор продукта GTIN;object[1]
- серийный номер.
Выходные параметры: Нет
Пример:
String gtin = "98765432101234";
String code = "RU-430302-ABC1234567";
fptr.directIO(1031, null, new String[]{gtin, code});
Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.
1032 - запрос суммы налогов за последний чек
Тип object
- String[6].
Входные параметры: Нет
Выходные параметры:
object[0]
- сумма по ставке “НДС 18%”object[1]
- сумма по ставке “НДС 10%”object[2]
- сумма по ставке “НДС расчитанный 18/118”object[3]
- сумма по ставке “НДС расчитанный 10/110”object[4]
- оборот по ставке “НДС 0%”object[5]
- оборот по ставке “НДС не облагается”
Пример:
1033 - регистрация налога на позицию
Тип object
- String.
Входные параметры:
object
- сумма налога (формат подчиняется настройке amountDecimalPlaces).
Выходные параметры: Нет
Пример:
Выполнять операцию нужно после регистрации позиции, к которой налог относится.
1034 - перевод чека в режим НДС18
Входные параметры:
data[0]
- 1, если регистрировать позиции со ставками НДС 18 (18/118), 0, если со ставками НДС 20 (20/120). Флаг имеет смысл после 2019.01.01.
Выходные параметры: Нет
Пример:
1035 - запрос состояния смены
Тип object
- String[1].
Входные параметры: Нет
Выходные параметры:
data[0]
- состояние смены (0 - закрыта, 1 - открыта, 2 - истекла)data[1]
- если смена закрыта, то номер последней закрытой смены. Если смена открыта или истекла - номер текущей смены.object[0]
- дата и время истечения текущей смены (формат - ddMMyyyyHHmmss)
Пример:
int[] intParams = new int[2];
String[] stringParams = new String[1];
fptr.directIO(1035, intParams, stringParams);
int shiftState = intParams[0];
int shiftNumber = intParams[1];
String shiftExpireDateTime = stringParams[0];
1036 - запрос статуса
Тип object
- String[10].
Входные параметры: Нет
Выходные параметры:
data[0]
- флаг фискальности ККТdata[1]
- флаг фискальности ФНdata[2]
- флаг наличия ФНdata[3]
- состояние смены (0 - закрыта, 1 - открыта, 2 - истекла)data[4]
- денежный ящик открыт/закрыт. На значение влияет настройка invertCashDrawerStatus.data[5]
- флаг наличия бумагиdata[6]
- крышка открыта/закрытаdata[7]
- флаг блокировки ККТ из-за фатальной ошибкиdata[8]
- флаг ошибки отрезчикаdata[9]
- флаг перегрева печатной головкиobject[0]
- текущие дата и время ККТ (формат - ddMMyyyyHHmmss)
Пример:
int[] intParams = new int[10];
String[] stringParams = new String[1];
fptr.directIO(1036, intParams, stringParams);
1037 - запись кода обуви
ВАЖНО: С помощью этого directIO можно сформировать код обуви ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.
Тип object
- String[2].
Входные параметры:
object[0]
- идентификтор продукта GTIN;object[1]
- серийный номер.
Выходные параметры: Нет
Пример:
String gtin = "98765432101234";
String serial = "sgEKKPPcS25y5";
fptr.directIO(1037, null, new String[]{gtin, serial});
Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.
1038 - установка имени кассира
Тип object
- String.
Входные параметры:
object
- имя кассира.
Выходные параметры: Нет
Пример:
1039 - запись “сырого” кода маркировки
Позволяет передать в ККТ расчитанное пользователем драйвера значение реквизита 1162.
Тип object
- Byte[] или byte[].
Входные параметры:
object
- значение реквизита.
Выходные параметры: Нет
Пример:
1040 - запись неразобранной марки
Позволяет передать в ККТ значение считанной сканером марки, которое будет средствами ККТ преобразовано в реквизит 1162.
Тип object
- Byte[] или byte[].
Входные параметры:
object
- значение марки.
Выходные параметры: Нет
Пример:
Программирование ККТ
Настройка клише
Драйвер использует следующий механизм по загрузке клише в ККТ:
- При подключении к ККТ драйвер синхронизирует загруженные в ККТ картинки с теми, которые указаны в файле из настройки picturesFileName.
- В ККТ записываются параметры клише из настроек numHeaderLines и numTrailerLines.
- Сами строки клише загружаются через стандартные методы setHeaderLine() и setTrailerLine(). Индексы строк не должны превышать значения настроек numHeaderLines и numTrailerLines соответственно.
- При загрузке обрабатывается каждая строка на предмет наличия подстроки clichePicturePrefix в ней. Если подстрока найдена, то все остальные данные удаляются, а найденная подстрока преобразуется в формат, пригодный для ККТ.
- Строка записывается в настройки ККТ.
Загрузка настроек в ККТ
Для автоматической загрузки настроек в ККТ служит CSV-файл с описанием настроек. Всего 3 поля - номер параметра, название и значение, разделенные запятой. Кодировка - UTF-8.
Например:
273,Адрес ОФД,ofdp.platformaofd.ru
274,Порт ОФД,21101
Сформировать файл с настройками можно как самостоятельно, так и выгрузить с ККТ, используя тест драйвера ККТ v.10. Для этого нужно зайти в Свойства, настроить связь с ККТ и зайти в Параметры ККТ и нажать Экспорт -> Как CVS (для JPOS/OPOS).
Настройки из XML-файла являются приоритетными. Например, значения настроек numHeaderLines и numTrailerLines перезатирают значения параметров №14 и №35.