В общем задача была разобраться с печатью именно фискалки, благо с обычной печатью всё просто, попробуем теперь с ним.

Т.к. дела раньше с фискальниками почти не имел, ссался, что в нём уже стоит ЭКЛЗ и все мои тестовые продажи Нидерландов уйдут в память, а потом при проверке налоговая не досчитается несколько ВВП,

но всё оказалась проще, ЭКЛЗ нет, а в сервисе сказали, что даётся 1000 тестовых печатей, пока там какая-то память не включиться, чтож, ок.

 

Первым делом как обычно качаем драйвера OPOS. Почему OPOS ? Лично я уже просто привык. У меня через них работает и чекопечатник и сканер штрих-кодов и печатник штрих-кодов и карт ридер и по мелочи разные фентифлюшки и в случай их замены не придётся пол протокола переписывать.

Дальше ставим непосредственно драйвера фискальника. Скорее всего это будет АТОЛ в рот ему ноги (версия 4.18). Ставим как обычно.

Проверить фискальник можно зайдя в папку с дровами и запустив (C:\Program Files\АТОЛ\Drivers\Bin\FPRNM_T.exe)

справа внизу клацаете галку устройство включено, вверху справа выбираете режим «1 регистрация», жамкаете «Войти»,

затем непосредственно продаёте: переходите на таб  «Регистрация» жамкаете на   «Продажа» и затем «Закрыть чек без сдачи».

Должен вылезти чек. За ошибками смотреть внизу в поле «Результат»

Так, теперь пора бы и начать кодить, а фиг там.

Ещё нужно сгенерировать заголовочник и реализацию для OPOS, а если точнее для ActiveX компонента, т.к. работа идёт через него.

Запускаем консольку, вбиваем:

cd C:\Projects\VKP-80K\
C:\Qt\5.4\mingw491_32\bin\dumpcpp "C:\Program Files (x86)\OPOS\CommonCO\OPOSFiscalPrinter.ocx"

Ток пути на свои замените.

В папке C:\Projects\VKP-80K\  должны появится вожделенные заголовочник и реализация.

Так же в эту папку не помешает кинуть заголовочник с константами OposFptr.h и Opos.h (из папки с установленными OPOS)

А вот теперь можно и покодить.

Создаём новый проектик (у меня простой консольный) и сразу в .pro файл добавляем

CONFIG += qaxcontainer # Для работы с ActiveX

Дальше в main.cpp подключаем наш заголовочник, константы, и заодно пространство имён (откройте заголовочник, вверху увидите), в моём случае

#include "oposfiscalprinter_cco.h"
#include "OposFptr.h"
using namespace OposFiscalPrinter_CCO;

Ну и теперь печатаем нашу продажу, приведу код с комментами, там всё просто:

OPOSFiscalPrinter * ECR;

ECR = new OPOSFiscalPrinter();

ECR->Open(""); //-- Подключаемся. Стандартное имя для этой фискалки, ищите в инструкции
ECR->ClaimDevice(1000); //-- Захватываем
ECR->SetDeviceEnabled(true); //-- Включаем

ECR->ResetPrinter(); //-- сбрасываем состояние в дефолтное

ECR->SetFiscalReceiptType(FPTR_RT_SALES); //-- Говорим, что начинаем продажу

ECR->BeginFiscalReceipt(false); //-- Начинаем печатать фискальный чек

int summ = 123;
int count = 1;

ECR->PrintRecItem( "ТЕСТ ПРОДАЖИ" , summ ,  count*1000, 0 , summ , "psc" ); //-- Печатаем продажу. count*1000 не ошибка, так надо =) 

int salesSumm =123; //-- нам нужно при окончании указать точную сумму всех операций, иначе чек будет анулирован

ECR->PrintRecTotal(salesSumm,  salesSumm , "1"); //-- печатаем итоговую сумму, сколько внесено, валюту.

ECR->PrintRecMessage("Тест прошёл успешно"); //-- кастомные сообщений после основной части текста

ECR->EndFiscalReceipt(false); //-- завершаем фискальник и выплёвываем его

ECR->PrintZReport(); //-- по-приколу распечатаем z-отчёт. P.S. должны быть промежутки между печатью z-ки, у меня принтер раньше, чем каждые 2 часа не давал.

ECR->SetDeviceEnabled(false);
ECR->close();

Вот так вот =)  Надеюсь всё получилось.

 

И на десерт — в Qt 5.5 не печатает на фискалке копейки 😀 в чём проблема я разобрался, но на это ушла вся ночь, поэтому решение за отдельную плату,  сами разберётесь, там просто оказывается.