Files
Tools_CPP/devices/Printers/FP300KZ/FP300KZ.~h
2024-11-01 12:23:13 +05:00

280 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//---------------------------------------------------------------------------
#ifndef PrinterH
#define PrinterH
//---------------------------------------------------------------------------
#include "../Printer.h"
#include "../../ComPort.h"
#include <stdTools.h>
#include <string>
//---------------------------------------------------------------------------
#define fcDisplayClear 0x21 //(33)Очистка дисплея
#define fcDispalyLower 0x23 //(35)Вывод текста в нижнюю строку дисплея
#define fcOpenServiceInv 0x26 //(38)Открытие нефискального чека
#define fcCloseServiceInv 0x27 //(39)Закрытие нефискального чека
#define fcSwitchPrg 0x29 //(41)Программирование конфигурационных ключей
#define fcPrintFreeTextInServiceInv 0x2A //(42)Печать свободного текста в нефискальном чеке
#define fcPrintSetup 0x2B //(43)Установка HEADER и FOOTER и опций печати
#define fcFeedPaper 0x2C //(44)Протяжка ленты
#define fcCutPaper 0x2D //(45)Обрезка ленты
#define fcDispalyUpper 0x2F //(47)Вывод текста в верхнюю строку дисплея
#define fcOpenFiscalInv 0x30 //(48)Открытие фискального (клиентского) чека
#define fcRegisterSale 0x31 //(49)Регистрация продажи
#define fcReportOnTaxRates 0x32 //(50)Отчет по налоговым ставкам и положению десятичной точки за период
#define fcSubtotal 0x33 //(51)Подитог
#define fcRegisterSaleDisp 0x34 //(52)Регистрация продажи с выводом на дисплей
#define fcTotal 0x35 //(53)Оплата (итог)
#define fcPrintFreeTextInFiscalInv 0x36 //(54)Печать свободного текста в фискальном чеке
#define fcCloseFiscalInv 0x38 //(56)Закрытие фискального чека
#define fcRegisterArticleSale 0x3A //(58)Регистрация продажи запрограммированного артикула
#define fcCancelFiscalInv 0x3C //(60)Аннуляция (сторно) фискального чека
#define fcSetDateTime 0x3D //(61)Установка даты и времени
#define fcGetDateTime 0x3E //(62)Чтение даты и времени
#define fcDisplayDateTime 0x3F //(63)Вывод даты и времени на дисплей
#define fcLatestFiscalRecord 0x40 //(64)Информация о последней фискальной записи
#define fcAmountOfSavingsPerDay 0x41 //(65)Информация о сумме накоплений за день
#define fcDepartmentReport 0x42 //(66)Отчет по секциям
#define fcFreeFieldsByFiscalMemory 0x44 //(68)Количество свободных полей в фискальной памяти
#define fcDailyFinancialReport 0x45 //(69)Дневной финансовый отчет
#define fcParishOrConsumption 0x46 //(70)Служебный приход или расход
#define fcPrintDiagnostic 0x47 //(71)Печать диагностической информации
#define fcFiscalization 0x48 //(72)Фискализация и пререгистрация
#define fcFullFiscalReportByNumber 0x49 //(73)Полный фискальный отчет за период заданный номерами смен
#define fcGetStatusFP 0x4A //(74)Получение статуса
#define fcFiscalTransactionsStatus 0x4C //(76)Статус фискальной транзакции
#define fcReduceFiscalReportByDate 0x4F //(79)Сокращенный фискальный отчет за период заданный датами
#define fcBeep 0x50 //(80)Звуковой сигнал
#define fcOpenBackInv 0x52 //(82)Открытие чека возврата
#define fcSetTaxRates 0x53 //(83)Установка положения десятичной точки и налоговых ставок
#define fcPrintBarCode 0x54 //(84)Печать штрих-кода
#define fcSetAddTypesOfPayment 0x55 //(85)Установка наименований дополнительных типов оплаты
#define fcDateOfLastEntryByFiscalMemory 0x56 //(86)Дата последней записи в фискальную память
#define fcSetDepartmentName 0x57 //(87)Программирование наименования секции
#define fcGetDepartmentInfo 0x58 //(88)Получение информации по секции
#define fcPrgProductionTestArea 0x59 //(89)Программирование производственной тестовой области
#define fcDiagnosticInfo 0x5A //(90)Диагностическая информация
#define fcSetManufacturersSerialNumber 0x5B //(91)Программирование заводского номера принтера
#define fcFullFiscalReportByDate 0x5E //(94)Полный фискальный отчет за период заданный датами
#define fcReduceFiscalReportByNumber 0x5F //(95)Сокращенный фискальный отчет за период заданный номерами смен
#define fcGetTaxRates 0x61 //(97)Чтение запрограммированных налоговых ставок
#define fcSetRNNAndRNM 0x62 //(98)Установка РНН и РНМ
#define fcGetRNNAndRNM 0x63 //(99)Чтение РНН и РНМ
#define fcDispalyFree 0x64 //(100)Вывод на дисплей свободного текста
#define fcSetOperatorPassword 0x65 //(101)Установка пароля оператора
#define fcSetOperatorName 0x66 //(102)Установка наименования оператора
#define fcInfoByCurrentInv 0x67 //(103)Информация о текущем чеке
#define fcOperatorReport 0x69 //(105)Отчет по операторам
#define fcOpenCashDrawer 0x6A //(106)Открытие денежного ящика
#define fcPrgAndReadArticle 0x6B //(107)Программирование и чтение данных артикула
#define fcPrintDuplicateInv 0x6D //(109)Печать дубликата чека
#define fcDailyReportByTypesOfPayment 0x6E //(110)Дневной отчет по типам оплаты
#define fcReportByArticle 0x6F //(111)Отчет по артикулам
#define fcReportByOperators 0x70 //(112)Отчет по операторам
#define fcGetLastPrintedDocNumber 0x71 //(113)Получение номера последнего напечатанного документа
#define fcGetInfoOfFiscalRecords 0x72 //(114)Получение информации о фискальной записи или записях за период
#define fcPrgGraphicLogo 0x73 //(115)Программирование графического логотипа
#define fcReadFiscalMemoryBlock 0x74 //(116)Чтение блока фискальной памяти
#define fcPrintEJ 0x78 //(119) Печать данных из электронной контрольной лентой
#define fcEJ 0x78 //(120)Работа с электронной контрольной лентой
#define fcReadROMBlock 0x79 //(121)Чтение блока из ПЗУ
#define fcServiceClearEJ 0x7E //(126)Сервисная очистка контрольной ленты
#define fcServiceClearRAM 0x7F //(127)Сервисное обнуление ОЗУ
//---------------------------------------------------------------------------
unsigned int MakeCRC(unsigned char* Buf, unsigned int BufStart,unsigned int BufLen);
//---------------------------------------------------------------------------
typedef char int1;
typedef unsigned char uint1;
typedef unsigned int uint4;
#if !defined( _BORLAND )
// typedef unsigned short Word; // 0..65535
#endif
typedef unsigned char BYTE;
//---------------------------------------------------------------------------
//Сласс статусов для принтера
//Текущее состояние принтера закодировано в поле длиной 6 байт
class MyStatus
{
private:
protected:
public:
bool s[6][8];
MyStatus();
void SetStatus(uint1* status);
std::string getStatus(); //Статусы в виде строки
};
//---------------------------------------------------------------------------
class FP300KZ : public CPrinter
{
private:
unsigned char ReadAr[255]; ///<буфер для чтения ответа
unsigned char FrameSeqNumber; ///<порядковый номер запроса
unsigned char CommandName; ///<Номер последней выполненной команды.
uint1 getNextSeq();
bool Sw1,Sw2,Sw3,Sw4,Sw5,Sw6,Sw7,Sw8; //Заполняются при вызове DiagnosticInfo
bool m_SaveLog; ///<Сохранять ли в лог файл
protected:
std::string m_ErrCode; ///<Функция фискализации
public:
std::string PrinterName; ///<Название принтера
std::string PrinterVersion; ///<Версия программного обеспечения
std::string PrinterNumber; ///<Заводской номер (серийник)
// int PrinterDecimal; ///<Количество знаков после запятой (Заполняется после вызова GetTaxRates) смотри m_Dots
//int iResultCode; ///<Код ошибки
int CheckCount; ///<Сколько распечатали чеков
std::string Password; ///<Пароль оператора временное хранилище
ComPort* cPort;
MyStatus* Status;
FP300KZ();
virtual ~FP300KZ();
bool PrinterInit(); //Инициализация принтера взятие инфы о версии и разделителе дробной части.
std::string getErrorDesc(int rc);
std::string getLastErrorDest();
int ResultCode(); //Код последней ошибки
bool SendPMessage(uint1* msg,uint1 size,std::string& answer);
bool OpenCOMPort(int ComNumber = -1,int BaudRate = -1); ///<Соедениться по COM порту
bool Print(); ///<Тестовая печать
void LoadSetup(); ///<Load COM port and speed
void SaveSetup(); ///<Save COM port and speed
void Init(); ///<Очистить буфера
int getComSpeed(); ///<Получить скорость порта из конфига
bool setComSpeed(int Speed); ///<Сохранить скорость порта
bool CutPaper(); ///<Отрезать бумагу
bool GetStatusFP(); ///<Получение статуса принтера команда: 4A
void NewLine(); ///<Курсор на новую строку
void Push(); ///<Прокрутить ???
bool FeedPaper(int cnt); ///<Протяжка ленты
bool OpenCashDrawer(int mSec = 0); ///<Открытие денежного ящика
bool SetDepartmentName(int dept,std::wstring line1,std::wstring line2); ///<Задать наименование департамента (Секции)
bool GetDepartmentInfo(int dept,int &RecSales,float &RecSum,int &TotSales,float &TotSum,std::wstring &Line1,std::wstring &Line2); ///<Получить информацию по секциям
bool DiagnosticInfo(); ///<Диагностическая информация
bool SetManufacturersSerialNumber(std::string Serial);
bool GetLastPrintedDocNumber(int& num); ///<Получение номера последнего напечатанного документа
//Чеки
bool CancelFiscalInv(); ///<Аннуляция (сторно) фискального чека
bool PrintDuplicateInv(); ///<Печать дубликата чека
bool OpenServiceInv(); ///<Открытие нефискального чека
bool CloseServiceInv(int& count); ///<Закрытие нефискального чека
bool OpenFiscalInv(int OpCode,std::string OpPwd,int TillNmb); ///<Открытие фискального (клиентского) чека
bool CloseFiscalInv(); ///<Закрытие фискального чека
bool OpenBackInv(int OpCode,std::string OpPwd,int TillNmb); ///<Открытие чека возврата
bool RegisterSale(std::wstring L1,std::wstring L2,int dep,std::string TaxCd,double Price,double Qwan, bool Abs, double Perc); ///<Регистрация продажи
bool RegisterSaleDisp(std::string L1,int dep,std::string TaxCd,std::string Price); ///<Регистрация продажи с выводом на дисплей
bool FiscalTransactionsStatus(bool& Open,int& Items,double& Amount,double& Tender); ///<Статус фискальной транзакции
bool SessionSec(int& sec); //Секунд с начала смены
bool PrintBarCode(int Type,std::string Data); ///<Печать штрих-кода
//Опциии печати
// std::string PrintSetup(std::string Item, std::string Text); ///<Установка HEADER и FOOTER и опций печати
bool PrintSetup(std::string Item, std::string Text, std::string& Answer); ///<Установка HEADER и FOOTER и опций печати
bool getPrintLogo(bool& Enable,int& Height); ///<Печатается ли графический логотип
bool setPrintLogo(bool Enable,int Height); ///<Печатается ли графический логотип
bool PrintFreeTextInServiceInv(std::string Text); ///<Печать свободного текста в нефискальном чеке 48 символов
bool PrintFreeTextInFiscalInv(std::string Text); ///<Печать свободного текста в фискальном чеке
bool Subtotal(std::string Print, std::string Display, bool Abs, double Perc,double& Sum); ///<Подитог
bool Total(std::string Line1,std::string Line2,std::string PaidMode,double Amount,double& Change); ///<Оплата (итог)
bool ParishOrConsumption(std::string Oper,std::string Password,double Amount,std::wstring strH,std::wstring strF,std::string& ExitCode,double& CashSum,double& ServIn,double& ServOut); ///<Служебный приход или расход
bool SetAddTypesOfPayment(char Option, std::wstring& Text); ///<Установка наименований дополнительных типов оплаты
//Отчёты
bool DepartmentReport();
bool AmountOfSavingsPerDay(double& TaxA,double& TaxB,double& TaxC,double& TaxD,double& TaxE); ///<Информация о сумме накоплений за день
bool FullFiscalReportByDate(std::string Password,std::string Receipts,std::string Start,std::string End); ///<Полный фискальный отчет за период заданный датами
bool ReduceFiscalReportByDate(std::string Password,std::string Receipts,std::string Start,std::string End); ///<Сокращёный фискальный отчет за период заданный датами
bool FullFiscalReportByNumber(std::string Password,std::string Receipts,int Start,int End); ///<Полный фискальный отчет за период заданный номерами смен
bool ReduceFiscalReportByNumber(std::string Password,std::string Receipts,int Start,int End); ///<сокражённый фискальный отчет за период заданный номерами смен
bool DailyFinancialReport(uint1 Option); ///<Дневной финансовый отчет
bool OperatorReport(); ///<Отчет по операторам
bool PrintDiagnostic(); ///<Печать диагностической информации
bool DailyReportByTypesOfPayment(std::string& Cash,std::string& Credit,std::string& Debit,std::string& Cheque,std::string& Pay1,std::string& Pay2,std::string& Pay3,std::string& Pay4,std::string& Closure,std::string& Receipt); ///<Дневной отчет по типам оплаты
bool ReportByArticle(std::string Option); ///<Отчет по артикулам
bool ReportOnTaxRates(std::string Start,std::string End); ///<Отчет по налоговым ставкам и положению десятичной точки за период
bool GetRNNAndRNM(std::string &RNN,std::string &RNM); ///<Чтение РНН и РНМ
bool SetRNNAndRNM(std::string RNN,std::string RNM); ///<Установка РНН и РНМ
bool SetOperatorPassword(std::string OpCode,std::string OldPwd,std::string NewPwd); ///<Установка пароля оператора
bool SetOperatorName(std::string OpCode,std::string Pwd,std::string OpName); ///<Установка наименования оператора
bool SetDateTime(std::string date,std::string time); ///<Установка даты и времени
bool GetDateTime(unsigned short& De,unsigned short& Me,unsigned short& Ye,unsigned short& Ho,unsigned short& Mi,unsigned short& Se); ///<Поолучение даты и времени
bool SwitchPrg(bool update); ///<Программирование конфигурационных ключей
bool getSmallEJ(bool& val); ///<Для сохранение сокращённой информации в ЭКЛ
bool setSmallEJ(bool val); ///<Для сохранение сокращённой информации в ЭКЛ
bool getDisplayTransparent(bool& val); ///<Режим прозрачного дисплея
bool setDisplayTransparent(bool val); ///<Режим прозрачного дисплея
bool getDisplayWin1251(bool& val); ///<Работа дисплея с кодовой таблицей Windows 1251
bool setDisplayWin1251(bool val); ///<Работа дисплея с кодовой таблицей Windows 1251
/* bool getAutoCut(); ///<Автоматическая обрезка ленты
bool setAutoCut(bool val); ///<Автоматическая обрезка ленты
*/
bool Beep(int Hz = 0, int mSec = 0); ///<Звуковой сигнал
//Дисплей
bool DisplayClear(); ///<Очистка дисплея
bool DispalyLower(std::string Text); ///<Вывод текста в нижнюю строку дисплея
bool DispalyUpper(std::string Text); ///<Вывод текста в верхнюю строку дисплея
bool DispalyFree(std::string Text); ///<Вывод на дисплей свободного текста
//Работа с электронной контрольной лентой
bool EJ(std::string Cmd); ///<Работа с электронной контрольной лентой
bool PrintEJ();
bool ServiceClearEJ(); ///< Сервисная очистка контрольной ленты
bool ServiceClearRAM(); ///< Сервисное обнуление ОЗУ
bool GetTaxRates(std::string &Decimals,std::string &Rounding,bool& bA,bool& bB,bool& bC,bool& bD, std::string &TaxA, std::string &TaxB, std::string &TaxC, std::string &TaxD); ///<Чтение запрограммированных налоговых ставок
bool SetTaxRates(int Decimal, std::string Rounding, std::string TaxA, std::string TaxB, std::string TaxC, std::string TaxD); ///<Установка положения десятичной точки и налоговых ставок
int GetState();
std::string GetStatusDescription(BYTE StatusCode); ///<Описание статуса
//Логотип
bool PrgGraphicLogo(int RowNum, std::string Data); ///<Программирование графического логотипа
bool getGraphicLogo(int RowNum, std::string &Data); ///<Программирование графического логотипа
bool Fiscalization(std::string Password,std::string Serial,std::string& ErrCode); ///<фискализация
bool reFiscalization(std::string OldPwd,std::string Password,std::string RNN,std::string RNM,std::string& ErrCode); ///<перерегистрация
bool LatestFiscalRecord(std::string& Clos,int& Rec, float& Total,float& VAT,std::string& Date); ///<Информация о последней фискальной записи
bool FreeFieldsByFiscalMemory(long& Logical); //<Количество логических мест для фискальных записей
//**************************************************************
//Методы для совместимости с CPrinter для создания универсального драйвера
bool isOk(){ return cPort->bOpen; };
bool CashInOut(bool test, double sum) //Приход + или расход -
{
float Amount=(float)sum; //10 цифр
std::string ExitCode;
double CashSum;
double ServIn;
double ServOut;
return ParishOrConsumption("1",Password,Amount,L"",L"",ExitCode,CashSum,ServIn,ServOut);
};
virtual bool GetCashSum(double& sum) //<Получить сумму наличности в кассе.
{
std::string ExitCode;
double CashSum=0,ServIn=0,ServOut=0;
bool b=ParishOrConsumption("1",Password,0.0,L"",L"",ExitCode,CashSum,ServIn,ServOut);
sum=CashSum;
return b;
};
bool PrintZReport(); ///<Печатать дневной отчёт с гашением
bool PrintXReport(); ///<Печатать дневной отчёт без гашения
bool PrintLine(std::wstring line); //Печатает строку текста (на служебном и на фискальном)
};
//---------------------------------------------------------------------------
#endif