АТОЛ. JPOS-драйвер v.1.14.10 АТОЛ. JPOS-драйвер v.1.14.10

АТОЛ. 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 - смещение при печати картинки, в пикселях
      Например, #$1,15#$ соответствует печати в строке клише картинки №1 со смещением 15 пикселей.
  • настройки печати:
    • 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.

Пример формирования чека продажи

Пример формирования чека продажи без печати на чековой ленте

Пример формирования чека продажи с табачным товаром

Пример формирования чека возврата

Пример формирования чека коррекции (ФФД 1.0 и 1.05)

Закрытие смены

Для закрытия смены используется метод 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.

Пример формирования внесения

Нефискальные документы

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

Для открытия нефискального документа используется метод beginNonFiscal().

Метод можно вызвать только из состояния FPTR_PS_MONITOR. Метод переводит драйвер в состояние FPTR_PS_FISCAL_RECEIPT.

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

Для закрытия нефискального документа используется метод endNonFiscal().

Метод переводит драйвер в состояние FPTR_PS_MONITOR.

Печать строки

Для печати строки на чековой ленте внутри нефискального документа используется метод printNormal(). Поведение метода подчиняется настройке defaultFont.

Т.к. UPOS не позволяет менять форматирование текста, для этого можно использовать directIO #1001.

Печать штрихкода

В стандарте UPOS нет способа напечатать штрихкод. Потому драйвер предоставляет данный функционал через метод directIO(). Для этого используется directIO #1002.

Пример печати нефискального документа (на примере слипа ЕГАИС)

Запросы информации о ККТ и драйвере

Описание драйвера

Для запроса описания драйвера нужно вызвать метод 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.

Номер чека

Для запроса номера чека нужно вызвать метод getData() с типом запроса FPTR_GD_RECEIPT_NUMBER.

Если настройка 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.

Расширенный функционал (directIO)

1001 - печать текста с форматированием

Тип object - String.

Входные параметры:

  • data[0] - выравнивание
    • 0 - слева
    • 1 - по центру
    • 2 - справа
  • data[1] - двойная ширина
  • data[2] - двойная высота
  • data[3] - яркость
  • data[4] - шрифт
  • object - текст

Выходные параметры: Нет

Пример:

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 - данные ШК

Выходные параметры: Нет

Пример:

1003 - открытие смены

Входные параметры: Нет

Выходные параметры: Нет

Пример:

1004 - чтение настройки ККТ

Тип object - String[1].

Входные параметры:

  • data[0] - номер настройки (см. документацию на драйвер ККТ, раздел Настройки ККТ.

Выходные параметры:

  • object[0] - значение настройки

Пример:

1005 - запись настройки ККТ

Тип object - String.

Входные параметры:

  • data[0] - номер настройки (см. документацию на драйвер ККТ, раздел Настройки ККТ.
  • object - значение настройки

Выходные параметры: Нет

Пример:

1006 - применить настройки ККТ

Применяет настройки, записанные с помощью directIO #1005

Входные параметры: Нет

Выходные параметры: Нет

Пример:

1007 - запрос информации о последнем документе

Тип object - String[3].

Входные параметры: Нет

Выходные параметры:

  • object[0] - номер ФД
  • object[1] - ФПД
  • object[2] - дата и время (формат - ddMMyyyyHHmm)

Пример:

1008 - запрос квитанции ОФД

Тип object - String[2].

Входные параметры:

  • data[0] - номер ФД

Выходные параметры:

  • object[0] - ФПД ОФД
  • object[1] - дата и время (формат - ddMMyyyyHHmm)

Пример:

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.
  • object - значение реквизита.

Выходные параметры: Нет

Пример:

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.
  • object - значение реквизита.

Выходные параметры: Нет

Пример:

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 - произвольная строка.

Выходные параметры:

  • object[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.

Пример:

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.

Пример:

1022 - запрос информации о ФН

Тип object - String[5].

Входные параметры: Нет

Выходные параметры:

  • object[0] - серийный номер ФН
  • object[1] - версия ФН
  • object[2] - тип ФН
  • object[3] - состояние ФН
  • object[4] - флаги ФН

Пример:

1023 - запрос статуса обмена с ОФД

Тип object - String[5].

Входные параметры: Нет

Выходные параметры:

  • object[0] - статус обмена
  • object[1] - количество неотправленных ФД
  • object[2] - номер первого неотправленного ФД
  • object[3] - дата и время первого неотправленного ФД (формат - ddMMyyyyHHmm)

Пример:

1024 - запрос срока действия ФН

Тип object - String[1].

Входные параметры: Нет

Выходные параметры:

  • object[0] - дата и время окончания срока действия (формат - ddMMyyyyHHmm)

Пример:

1025 - запись произвольного поля в JSON чека

Позволяет запись в формируемый JPOS-драйвером JSON произвольное поле, которое в дальнейшем нужно обработать на уровне пользовательских скриптов драйвера. Поля можно записать в:

  • позиции (перед методами printRecItemXXX())
  • оплатами (перед методом printRecTotal()))
  • закрытие чека (перед методом endFiscalReceipt())

Путь к пользовательским скриптам нужно прописать в настройку scriptsPath драйвера.

Тип object - String[2].

Входные параметры:

  • object[0] - ключ
  • object[1] - значение

Выходные параметры: Нет

Пример:

1026 - регистрация налога на чек

Тип object - String.

Входные параметры:

  • data[0] - номер ставки налога (одно из значений соответствующих настроек драйвера);
  • object - сумма налога (формат подчиняется настройке amountDecimalPlaces).

Выходные параметры: Нет

Пример:

1027 - установка ИНН кассира

Тип object - String.

Входные параметры:

  • object - ИНН кассира.

Выходные параметры: Нет

Пример:

1029 - запись кода табачной продукции

ВАЖНО: С помощью этого directIO можно сформировать код табачной продукции ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.

Тип object - String[2].

Входные параметры:

  • object[0] - идентификтор продукта GTIN;
  • object[1] - код идентификации.

Выходные параметры: Нет

Пример:

Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.

1030 - запись кода лекарства

ВАЖНО: С помощью этого directIO можно сформировать код лекарства ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.

Тип object - String[2].

Входные параметры:

  • object[0] - идентификтор продукта GTIN;
  • object[1] - контрольный (идентификационный) знак (КиЗ).

Выходные параметры: Нет

Пример:

Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.

1031 - запись код меховой продукции

ВАЖНО: С помощью этого directIO можно сформировать код меховой продукции ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.

Тип object - String[2].

Входные параметры:

  • object[0] - идентификтор продукта GTIN;
  • object[1] - серийный номер.

Выходные параметры: Нет

Пример:

Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.

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)

Пример:

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)

Пример:

1037 - запись кода обуви

ВАЖНО: С помощью этого directIO можно сформировать код обуви ТОЛЬКО старого образца. Рекомендуется использовать directIO #1040 или directIO #1039.

Тип object - String[2].

Входные параметры:

  • object[0] - идентификтор продукта GTIN;
  • object[1] - серийный номер.

Выходные параметры: Нет

Пример:

Выполнять операцию нужно непосредственно перед регистрацией позиции, к которой код товара относится.

1038 - установка имени кассира

Тип object - String.

Входные параметры:

  • object - имя кассира.

Выходные параметры: Нет

Пример:

1039 - запись “сырого” кода маркировки

Позволяет передать в ККТ расчитанное пользователем драйвера значение реквизита 1162.

Тип object - Byte[] или byte[].

Входные параметры:

  • object - значение реквизита.

Выходные параметры: Нет

Пример:

1040 - запись неразобранной марки

Позволяет передать в ККТ значение считанной сканером марки, которое будет средствами ККТ преобразовано в реквизит 1162.

Тип object - Byte[] или byte[].

Входные параметры:

  • object - значение марки.

Выходные параметры: Нет

Пример:

Программирование ККТ

Настройка клише

Драйвер использует следующий механизм по загрузке клише в ККТ:

  1. При подключении к ККТ драйвер синхронизирует загруженные в ККТ картинки с теми, которые указаны в файле из настройки picturesFileName.
  2. В ККТ записываются параметры клише из настроек numHeaderLines и numTrailerLines.
  3. Сами строки клише загружаются через стандартные методы setHeaderLine() и setTrailerLine(). Индексы строк не должны превышать значения настроек numHeaderLines и numTrailerLines соответственно.
  4. При загрузке обрабатывается каждая строка на предмет наличия подстроки clichePicturePrefix в ней. Если подстрока найдена, то все остальные данные удаляются, а найденная подстрока преобразуется в формат, пригодный для ККТ.
  5. Строка записывается в настройки ККТ.

Загрузка настроек в ККТ

Для автоматической загрузки настроек в ККТ служит CSV-файл с описанием настроек. Всего 3 поля - номер параметра, название и значение, разделенные запятой. Кодировка - UTF-8.

Например:

273,Адрес ОФД,ofdp.platformaofd.ru
274,Порт ОФД,21101

Сформировать файл с настройками можно как самостоятельно, так и выгрузить с ККТ, используя тест драйвера ККТ v.10. Для этого нужно зайти в Свойства, настроить связь с ККТ и зайти в Параметры ККТ и нажать Экспорт -> Как CVS (для JPOS/OPOS).

Настройки из XML-файла являются приоритетными. Например, значения настроек numHeaderLines и numTrailerLines перезатирают значения параметров №14 и №35.