//--------------------------------------------------------------------------- #ifndef PrinterH #define PrinterH //--------------------------------------------------------------------------- #include "../Printer.h" #include "../../ComPort.h" #include #include //--------------------------------------------------------------------------- #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 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(); ///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