Передача данных на сервер ОФД Казахстана обеспечивается сервисом jnfd (Программный фискализатор (kz)).
Для обеспечения передачи данных на сервер ОФД (Казахстан) необходимо установить пакет jnfd.
aptitude install jnfd |
Запуск и управление сервисом jnfd осуществляется при помощи утилиты service. Для выполнения действия в консоли кассы выполняется соответствующая команда:
service jnfd [команда] |
[команда] может принимать значение:
start – запуск сервиса,stop – остановка сервиса,restart – перезапуск сервиса,status – получение статуса сервиса.После установки пакета будут созданы:
/linuxcash/cash/jnfd/config.properties, в котором настраиваются параметры подключения к серверу ОФД (Казахстан);/linuxcash/cash/jnfd/keystore/, в которой расположены сертификаты безопасности.Настройка параметров подключения к серверу ОФД (Казахстан) осуществляется в конфигурационном файле /linuxcash/cash/jnfd/config.properties.
| Наименование | Возможные значения | Описание | Примечания |
|---|---|---|---|
| Application.Mode.Service.Address | Адрес, на котором стартует сервис и куда подключается драйвер ФР | По умолчанию http://localhost:1234/NFDService | |
| OnlineRegistration.FSCNode.Url | Ссылка на сервис фискализации системы (URL сервера) | По умолчанию https://88.204.142.178:8014/FSCNode-II/ExtendedFiscalizationService.asmx | |
| OnlineRegistration.FSCNode.SecuritySettings.HostNameVerify.Enabled |
| Включить проверку сертификата | По умолчанию false |
| OnlineRegistration.TradeOperation.Timeout.Milliseconds | Таймаут обработки операций: продажа, возврат продажи (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.MoneyPlacement.Timeout.Milliseconds | Таймаут обработки операций: внесение, выплата (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.XReport.Timeout.Milliseconds | Таймаут получения суточного отчета без гашения (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.ZReport.Timeout.Milliseconds | Таймаут получения суточного отчета c гашением (в миллисекундах) | По умолчанию 5000 | |
| OnlineRegistration.SettingsSynchronizationTimeout.Seconds | Таймаут синхронизации (в секундах) | По умолчанию 300 | |
| CryptoCore.KeystorePath | Путь к хранилищу ключевых контейнеров | По умолчанию ./keystore | |
| CryptoCore.CAStorePath | Путь к хранилищу корневых сертификатов | По умолчанию ./keystore/ca_certs | |
| CryptoCore.DefaultKeyUID | Идентификатор ключевого контейнера (наименование ключа, указывается без расширения p12) | По умолчанию GOSTKNCA_649bb92b90c85f483b68c5842bdcbd349648964c | |
| CryptoCore.DefaultPIN | Пароль к ключевому контейнеру (PIN) | По умолчанию 123456 |
После изменения значений параметров необходимо перезапустить сервис |
В протокол ОФД версии 2.0.2 добавлены обязательные поля:
|
Для автоматической передачи фискальных данных по чеку продажи при закрытии чека рекомендуется активировать плагин |
Для возврата по чеку продажи необходимо настроить форму возврата для ввода фискальных данных в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/backbysale.ini:
[BackBySale.InputFiscalInfo.Field.1]
fieldId = fiscalSign
description = {"id": "inputFiscalInfoSourceFdNumber", "defaultMessage": "Номер ФД\nчека-основания"}
type = 10
regexp = "[0-9]{1,12}"
[BackBySale.InputFiscalInfo.Field.2]
fieldId = fnNumber
description = {"id": "inputFiscalInfoSourceFmNumber", "defaultMessage": "Номер ФМ\nчека-основания"};
type = 10
regexp = "[a-zA-Z0-9]{16}"
[BackBySale.InputFiscalInfo.Field.3]
fieldId = fnDate
description = {"id": "inputFiscalInfoDate", "defaultMessage": "Дата и время"}
type = 16
dateFormat = "dd.MM.yyyy hh:mm:ss"
regexp = "yyyyMMddhhmmss"
row = 2
[BackBySale.InputFiscalInfo.Field.4]
fieldId = sum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Общая сумма"}
type = 6
regexp = "[0-9]*(\.[0-9]{1,2})?"
[BackBySale.InputFiscalInfo.Field.5]
fieldId = serialnum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Номер ККТ"}
type = 10
regexp = "[a-zA-Z0-9]{16}" |
Каждая секция отвечает за конкретное поле в форме возврата для ввода фискальных данных. Количество допустимых символов задается маской в параметре |
При выполнении операции возврата осуществляется проверка на наличие в БД Documents таблице Fiscaldocument сохраненных фискальных данных чека продажи:

При нажатии на кнопку "Отмена" чек возврата не будет сформирован.
При вводе данных вручную проверяется правильность заполнения полей. Если введены некорректные данные, то поля будут подсвечены красным цветом. Введите корректные фискальные данные и нажмите клавишу "Ввод", чек возврата будет сформирован.
Для возврата необходимо настроить форму возврата для ввода фискальных данных в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/back.ini:
[Back.InputFiscalInfo]
; Регулярное выражение для ввода данных со сканера в диалоге
; По умолчанию ""
fieldDistributionRegexp = ".*&fn_number=(?<fnNumber>[a-zA-Z0-9]{16}).*&fd_number=(?<fdNumber>[0-9]{1,10}).*"
[Back.InputFiscalInfo]
; Регулярное выражение для ввода данных со сканера в диалоге
; По умолчанию ""
fieldDistributionRegexp = ".*&fn_number=(?<fnNumber>[a-zA-Z0-9]{16}).*&fd_number=(?<fdNumber>[0-9]{1,12}).*"
[Back.InputFiscalInfo.Field.1]
fieldId = fiscalSign
description = {"id": "inputFiscalInfoSourceFdNumber", "defaultMessage": "Номер ФД\nчека-основания"}
type = 10
regexp = "[0-9]{1,12}"
[Back.InputFiscalInfo.Field.2]
fieldId = fnNumber
description = {"id": "inputFiscalInfoSourceFmNumber", "defaultMessage": "Номер ФМ\nчека-основания"};
type = 10
regexp = "[a-zA-Z0-9]{16}"
[Back.InputFiscalInfo.Field.3]
fieldId = fnDate
description = {"id": "inputFiscalInfoDate", "defaultMessage": "Дата и время"}
type = 16
dateFormat = "dd.MM.yyyy hh:mm:ss"
regexp = "yyyyMMddhhmmss"
row = 2
[Back.InputFiscalInfo.Field.4]
fieldId = sum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Общая сумма"}
type = 6
regexp = "[0-9]*(\.[0-9]{1,2})?"
[Back.InputFiscalInfo.Field.5]
fieldId = serialnum
description = {"id": "inputFiscalInfoSum", "defaultMessage": "Номер ККТ"}
type = 10
regexp = "[a-zA-Z0-9]{16}" |
Каждая секция отвечает за конкретное поле в форме возврата для ввода фискальных данных. Количество допустимых символов задается маской в параметре |
При выполнении возврата будет выведен диалог ввода фискальных данных чека продажи:
При нажатии на кнопку "Отмена" чек возврата не будет сформирован.
При вводе данных вручную проверяется правильность заполнения полей. Если введены некорректные данные, то поля будут подсвечены красным цветом. Введите корректные фискальные данные и нажмите клавишу "Ввод", чек возврата будет сформирован.
Подключение принтера чеков и программного фискализатора (kz) осуществляется в Сервисном меню через Менеджер оборудования.
Для подключения необходимо последовательно выполнить следующие действия:



http://<ip>:<port>/NFDService.Для печати чеков использование шаблонов Artix не требуется. |
Параметры для программирования задаются в специальных секциях. Секция параметров представляет собой список строк. Одна строка предназначена для установки одного параметра. Имена параметров в данных секциях задаются по правилу:
param<N>, где N - номер параметра (1..n) |
Не допускаются «разрывы» нумерации списка параметров, т.е. нельзя использовать имена параметров: param1, param2, param4. В этом случае будут применены только параметры 1 и 2. Параметры с 4-го и все последующие игнорируются. Допускается нумерация параметров param1, param2, param3 и т.д.
Значения параметров формируются по правилам:
<N>:<p1> |
Нумерация параметра <N> | Возможное значение параметра <p1> |
|---|---|
1 – ширина документа | любое целое число |
| 2 – язык локализации документа |
|
| 3 – положение заголовка в чеке |
|
| 4 – печать рекламного текста |
|
| 5 – печать клише |
|
| 6 – печать короткого адреса |
|
| 7 – печать сокращенных X и Z отчетов |
|
| 8 – печать единичного количества |
|
| 9 – количество смен за которые необходимо хранить документы | любое целое число |
| 10 – режим применения налогов |
|
| 11 – изымать всю денежную наличность из кассы при закрытии смены |
|
<S>.<R>.<N>:<p1>&<p2> |
Параметры |
Порядковый номер <S> | Обязательный параметр <R> | Нумерация параметра <N> | Значения параметров <p(n)> |
|---|---|---|---|
любое значение от 1 до 30 | любое значение от 1 до 9 | 12 – операторы |
|
| любое значение от 1 до 16 | 13 – секции |
| |
любое значение от 1 до 4 | 14 – налоги |
| |
| любое значение от 1 до 10 | 15 – клише |
| |
| любое значение от 1 до 10 | 16 – рекламный текст |
|
Параметры для программирования задаются в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/fr.ini в секции [HW.FR.commons.params].
[HW.FR.commons.params] ; ; Параметры для программирования всех подключенных ФР ; param1 = "1:42"; param2 = "2.1.12:Оператор торгового зала Иванов.И.И.&12345"; param3 = "3.1.16:NORMAL&Рекламный текст"; |
Для использования ставки НДС необходимо:
Dictionaries таблицу Vat. Запрограммировать коды налогов в программном фискализаторе.
[HW.FR.1.params] ; STS - система налогообложения УСН ; VAT - налог на добавленную стоимость ; 16 - ставка НДС 16% ; 0 - ставка НДС 0% param1 = "1.1.14:STS&VAT&16" (код налога в ФР - 1) param2 = "2.2.14:STS&VAT&0" (код налога в ФР - 2) |
Настроить соотнесение налогов в ФР и кодов налогов в кассе в конфигурационном файле /linuxcash/cash/conf/fr.ini.
[HW.FR.1.TaxMapping] ; Соотнесение кодов налогов в ФР и кодов налогов в кассе ; <Код налога ФР> = <Код налога в кассе> 1=401 2=501 ; 1 - Код налога ФР для НДС 16% ; 2 - Код налога ФР для НДС 0% |
Dictionaries таблицу Tmc.При закрытии чека продажи:
ntin.Соотнесение отделов, к которым привязаны товары в кассовой программе и в ККМ, осуществляется посредством настройки секции [HW.FR.DepartMapping] в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/fr.ini.
Соотнесение типов оплат осуществляется посредством настройки секции [HW.FR.PayAccordance] в конфигурационном файле /linuxcash/cash/conf/ncash.ini.d/fr.ini.
Типы оплат, используемые на данном ФР:
Для драйвера "Программный фискализатор (kz)" реализована возможность настройки опций ФР. Для этого в конфигурационный файл /linuxcash/cash/conf/ncash.ini.d/fr.ini в секцию драйвера [HW.fiscalregister.ProgramFr.<номер устройства>] необходимо вручную добавить параметр driverOptions с указанием нужных настроек опций.
Правило задания опций:
<индекс опции>:<значение опции> |
| Индекс опции | Возможные значения | Описание | Поведение |
|---|---|---|---|
| 26 |
| Проверка суммы в денежном ящике при возврате по безналу | При настройке 26:0 проверка выполнена не будет. |
[Hw.fiscalregister.ProgramFr.2] driverOptions = 26:0 |
[Hw.fiscalregister.ProgramFr] driverOptions = 26:0 |
Подробнее о работе с оборудованием через ini-файлы можно прочитать в разделе "Создание устройств".
Для формирования x и z-отчетов используются шаблоны programfr_xreport.xml и programfr_zreport.xml соответственно, для формирования x-отчетов по отделам – programfr_xreportdept.xml, для формирования документов внесения и выема денег – programfr_moneyin.xml и programfr_moneyout.xml соответственно, для формирования чеков продажи используются шаблоны programfr_sale.xml и для формирования чеков возврата programfr_back.xml.
Во все отчеты, кроме programfr_xreportdept.xml, передается переменная entries, которая является ответом от ОФД и содержит фискальные данные. Для печати фискальных данных необходимо использовать эту переменную с нужным индексом списка.
<var name="entries[-5].data" align="left" maxwidth="all"/><br/> |
Нумерация строк начинается с 1, для всех тегов |
Печать информации о товарах на казахском языке возможна только если переводы добавлены в справочник. Подробнее о добавлении и корректном отображении переводов: |
Печать наименований товаров на казахском языке одновременно с русским настраивается в шаблонах programfr_sale.xml, programfr_back.xml:
<select query="select translation, idtype from dictionaries.tr where id=$bcode$ and lang='kk' and idtype IN (0, 1) order by idtype desc limit 1">
<text maxwidth="all" align="right">/ $translation$</text><br/>
</select> |
Если необходимо печатать наименования товаров на языке текущего интерфейса, то нужно внести изменения в шаблоны programfr_sale.xml, programfr_back.xml:
<select query="select IF(COUNT(translation)=0, '$name$', translation) translation, idtype from dictionaries.tr where id=$bcode$ and lang='$language$' and idtype IN (0, 1) order by idtype desc limit 1">
<text maxwidth="all" align="right">/ $translation$</text><br/>
</select> |
Для корректной печати информации о налогах, единицах измерения и т.д. одновременно на двух языках необходимо выгружать эту информацию в БД сразу на двух языках. |
Подробнее о редактировании шаблонов можно прочитать в разделе "Движок отчетов".