В общем задача была разобраться с печатью именно фискалки, благо с обычной печатью всё просто, попробуем теперь с ним.
Т.к. дела раньше с фискальниками почти не имел, ссался, что в нём уже стоит ЭКЛЗ и все мои тестовые продажи Нидерландов уйдут в память, а потом при проверке налоговая не досчитается несколько ВВП,
но всё оказалась проще, ЭКЛЗ нет, а в сервисе сказали, что даётся 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 подключаем наш заголовочник, константы, и заодно пространство имён (откройте заголовочник, вверху увидите), в моём случаеf
#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();</pre>
Вот так вот =) Надеюсь всё получилось.
[tip]И на десерт — в Qt 5.5 не печатает на фискалке копейки 😀 в чём проблема я разобрался, но на это ушла вся ночь, поэтому решение за