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

2969 lines
101 KiB
C++
Raw Permalink 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.

//! FP300KZ
/*!
Äëÿ ïðèíòåðîâ: FP-300KZ, FP-1000 ÔKZ
\author Èâàíîâ Èãîðü Ì.
\file FP300KZ.cpp
*/
//---------------------------------------------------------------------------
#pragma hdrstop
#include "stdafx.h"
#include "FP300KZ.h"
#include <stdTools.h>
#include <mathTools.h>
#include <sstream>
#include <iostream>
#include <fstream>
#include <locale>
//#include <string>
#include <vector>
#include <math.h>
#include <direct.h> //mkdir
//#include <unistd.h>
//#include <pthread.h>
//#include <stdlib.h>
#if defined( __WXMSW__ ) //Åñëè êðîññïëàòôîðìêíííîå ïðèëîæåíèå
#include <wx/wx.h>
#endif // __WXMSW__
#include <windows.h> //Äëÿ Sleep ôóíêöèè
//---------------------------------------------------------------------------
//#pragma package(smart_init)
//---------------------------------------------------------------------------
//Äîáàâèë êîãäà äåëàë êðîñïëàòôîðìåíîãî êàññèððà
//typedef unsigned long DWORD;
//---------------------------------------------------------------------------
//Ñîõðàíèòü ëîã â òåêñòîâûé ôàéë
/*bool saveLog(std::string FileName, std::string Text)
{
try
{
for(uint4 i=0;i<Text.length();i++)
{ if(Text[i]=='\n') Text[i]=' '; //×òîá â 1 ñòðîêó áûëî
}
Text="["+getDateTime()+"] "+Text; //Äîáàâëÿåì äàòó
std::string path=getAppPathA()+std::string("logs\\"); //Ïóòü ê ôàéëó
_mkdir(path.c_str());
path+=FileName+"_"+getStrDate()+".log";
#if defined( _BORLAND )
std::ofstream file(path.c_str(),std::ios::app);
file << Text.c_str() << std::endl;
file.close();
#endif
#if defined( _VC )
FILE* pfile = fopen ( path.c_str(), "a" ); //Äëÿ þíèêîäà _wfopen
if(pfile!=NULL)
{ fputs( Text.c_str() , pfile );
fputs( "\n" , pfile );
fclose( pfile );
}
#endif
}catch(...)
{ return false;
}
return true;
}*/
//---------------------------------------------------------------------------
///Ïîñòðîéêà CRC ñïåöèàëüíîãî äëÿ ýòîãî ïðèíòåðà
//BufStart - Ñ êàêîãî áàéòà íà÷èíàòü ïîäñ÷¸ò
//BufEnd - Ïî êàêîé áàéò ñ÷èòàòü (íå äëèíà)
unsigned int MakeCRC_FP300KZ(unsigned char* Buf, unsigned int BufStart, unsigned int BufEnd)
{
unsigned int cs = 0;
for (unsigned int i = BufStart; i<BufEnd; i++)
cs += Buf[i];
unsigned int result = 0;
unsigned char *mas = (unsigned char *)&result;
mas[0] = ((cs >> 0x0C) & 0x0F) + 0x30;
mas[1] = ((cs >> 0x08) & 0x0F) + 0x30;
mas[2] = ((cs >> 0x04) & 0x0F) + 0x30;
mas[3] = ((cs >> 0x00) & 0x0F) + 0x30;
return result;
}
//---------------------------------------------------------------------------
StatusFP300KZ::StatusFP300KZ()
{
for(int i=0;i<8;i++)
for(int j=0;j<6;j++) s[j][i]=false;
}
//---------------------------------------------------------------------------
void StatusFP300KZ::SetStatus(uint1* status)
{
//ïåðåïèñûâàåì ñòàòóñ â ïåðåìåííûå äëÿ óäîáñòâà
//Áàéò 0: Îáùåå ïðåäíàçíà÷åíèå
s[0][7]=getBitVal(status[0],7); //0.7 Ðåçåðâ.
s[0][6]=getBitVal(status[0],6); //0.6 Îòêðûò ÷åê âîçâðàòà.
s[0][5]=getBitVal(status[0],5); //0.5 Ïðèçíàê îøèáêè (ôëàãè, ïîìå÷åííûå çíàêîì # â áàéòàõ 0, 1, 2).
s[0][4]=getBitVal(status[0],4); //0.4 # Ïå÷àòàþùåå óñòðîéñòâî íåèñïðàâíî.
s[0][3]=getBitVal(status[0],3); //0.3 Íå ïîäêëþ÷åí êëèåíòñêèé äèñïëåé.
s[0][2]=getBitVal(status[0],2); //0.2 Òàéìåð íå óñòàíîâëåí.
s[0][1]=getBitVal(status[0],1); //0.1 # Íåïðàâèëüíûé êîä ïîëó÷åííîé êîìàíäû.
s[0][0]=getBitVal(status[0],0); //0.0 # Ñèíòàêñè÷åñêàÿ îøèáêà â ïîëó÷åííûõ äàííûõ.
//Áàéò 1: Îáùåå ïðåäíàçíà÷åíèå
s[1][7]=getBitVal(status[1],7); //1.7 Ðåçåðâ.
s[1][6]=getBitVal(status[1],6); //1.6 Ýëåêòðîííàÿ êîíòðîëüíàÿ ëåíòà íàïå÷àòàíà.
s[1][5]=getBitVal(status[1],5); //1.5 Êðûøêà ïðèíòåðà îòêðûòà.
s[1][4]=getBitVal(status[1],4); //1.4 # Ïîñëå âêëþ÷åíèÿ ïðèíòåðà îáíàðóæåíû íàðóøåíèÿ äàííûõ â ÎÇÓ.
s[1][3]=getBitVal(status[1],3); //1.3 # Áàòàðåÿ ðàçðÿæåíà (Òàéìåð ðåàëüíîãî âðåìåíè â ñîñòîÿíèè RESET).
s[1][2]=getBitVal(status[1],2); //1.2 # ÎÇÓ îáíóëåíî.
s[1][1]=getBitVal(status[1],1); //1.1 # Êîìàíäà íå ìîæåò áûòü âûïîëíåíà â äàííîì ôèñêàëüíîì ðåæèìå.
s[1][0]=getBitVal(status[1],0); //1.0 Ïåðåïîëíåíèå ñóììû. Ñòàòóñ 1.1 òàêæå áóäåò óñòàíîâëåí è êîìàíäà íå ïîìåíÿåò äàííûå â ïðèíòåðå.
//Áàéò 2: Îáùåå ïðåäíàçíà÷åíèå
s[2][7]=getBitVal(status[2],7); //2.7 Ðåçåðâ.
s[2][6]=getBitVal(status[2],6); //2.6 Ýëåêòðîííàÿ êîíòðîëüíàÿ ëåíòà íå ïóñòà.
s[2][5]=getBitVal(status[2],5); //2.5 Îòêðûò ñëóæåáíûé ÷åê.
s[2][4]=getBitVal(status[2],4); //2.4 Ýëåêòðîííàÿ êîíòðîëüíàÿ ëåíòà çàïîëíåíà íà 90%.
s[2][3]=getBitVal(status[2],3); //2.3 Îòêðûò ôèñêàëüíûé ÷åê èëè ÷åê âîçâðàòà.
s[2][2]=getBitVal(status[2],2); //2.2 Ýëåêòðîííàÿ êîíòðîëüíàÿ ëåíòà çàïîëíåíà.
s[2][1]=getBitVal(status[2],1); //2.1 Íåäîñòàòî÷íî ëåíòû.
s[2][0]=getBitVal(status[2],0); //2.0 # Çàêîí÷èëàñü ëåíòà. Åñëè ôëàã óñòàíîâëåí âî âðåìÿ âûïîëíåíèÿ êîìàíäû ïå÷àòè, òî âûïîëíåíèå êîìàíäû áóäåò îñòàíîâëåíî è ñòàòóñ ïðèíòåðà íå èçìåíèòñÿ.
//Áàéò 3: Ñîñòîÿíèå êîíôèãóðàöèîííûõ ïåðåêëþ÷àòåëåé
s[3][7]=getBitVal(status[3],7); //3.7 Ðåçåðâ.
s[3][6]=getBitVal(status[3],6); //3.6 =1 Åñëè ïåðåêëþ÷àòåëü Sw7 â ïîëîæåíèè ON. Ñêîðîñòü ïåðåäà÷è äàííûõ â ñåðèéíûé ïîðò.
s[3][5]=getBitVal(status[3],5); //3.5 =1 Åñëè ïåðåêëþ÷àòåëü Sw6 â ïîëîæåíèè ON. Ñêîðîñòü ïåðåäà÷è äàííûõ â ñåðèéíûé ïîðò.
s[3][4]=getBitVal(status[3],4); //3.4 =1 Åñëè ïåðåêëþ÷àòåëü Sw5 â ïîëîæåíèè ON. Íå èñïîëüçóåòñÿ.
s[3][3]=getBitVal(status[3],3); //3.3 =1 Åñëè ïåðåêëþ÷àòåëü Sw4 â ïîëîæåíèè ON. Ðàáîòà äèñïëåÿ â êîäîâîé òàáëèöå 1251 (Windows Cyrillic).
s[3][2]=getBitVal(status[3],2); //3.2 =1 Åñëè ïåðåêëþ÷àòåëü Sw3 â ïîëîæåíèè ON. Çàäàåò ðåæèì "ïðîçðà÷íûé äèñïëåé".
s[3][1]=getBitVal(status[3],1); //3.1 =1 Åñëè ïåðåêëþ÷àòåëü Sw2 â ïîëîæåíèè ON. Íå èñïîëüçóåòñÿ.
s[3][0]=getBitVal(status[3],0); //3.0 =1 Åñëè ïåðåêëþ÷àòåëü Sw1 â ïîëîæåíèè ON. Ðàçðåøàåò àâòîìàòè÷åñêóþ îáðåçêó áóìàãè.
//Áàéò 4: Ôèñêàëüíàÿ ïàìÿòü
s[4][7]=getBitVal(status[4],7); //4.7 Ðåçåðâ.
s[4][6]=getBitVal(status[4],6); //4.6 Ðåçåðâ.
s[4][5]=getBitVal(status[4],5); //4.5 Ïðèçíàê îøèáêè (ôëàãè, ïîìå÷åííûå çíàêîì * â áàéòàõ 4 è 5).
s[4][4]=getBitVal(status[4],4); //4.4 * Ôèñêàëüíàÿ ïàìÿòü çàïîëíåíà.
s[4][3]=getBitVal(status[4],3); //4.3 Â ôèñêàëüíîé ïàìÿòè îñòàëîñü ìåíüøå 50 ñâîáîäíûõ ïîëåé.
s[4][2]=getBitVal(status[4],2); //4.2 Çàïðîãðàììèðîâàí çàâîäñêîé íîìåð ïðèíòåðà.
s[4][1]=getBitVal(status[4],1); //4.1 Çàïðîãðàììèðîâàíû íàëîãîâûå íîìåðà.
s[4][0]=getBitVal(status[4],0); //4.0 * Îøèáêà çàïèñè â ôèñêàëüíóþ ïàìÿòü.
//Áàéò 5: Ôèñêàëüíàÿ ïàìÿòü
s[5][7]=getBitVal(status[5],7); //5.7 Ðåçåðâ.
s[5][6]=getBitVal(status[5],6); //5.6 Ðåçåðâ.
s[5][5]=getBitVal(status[5],5); //5.5 Íå èñïîëüçóåòñÿ.
s[5][4]=getBitVal(status[5],4); //5.4 Çàäàíà õîòÿ áû îäíà íàëîãîâàÿ ñòàâêà.
s[5][3]=getBitVal(status[5],3); //5.3 Ôèñêàëüíûé ðåæèì âêëþ÷åí.
s[5][2]=getBitVal(status[5],2); //5.2 * Ïîñëåäíÿÿ çàïèñü â ôèñêàëüíóþ ïàìÿòü íå óñïåøíà.
s[5][1]=getBitVal(status[5],1); //5.1 Ôèñêàëüíàÿ ïàìÿòü îòôîðìàòèðîâàíà.
s[5][0]=getBitVal(status[5],0); //5.0 * Ôèñêàëüíàÿ ïàìÿòü óñòàíîâëåíà â ðåæèì ÒÎËÜÊÎ ×ÒÅÍÈÅ (çàáëîêèðîâàíà).
}
//---------------------------------------------------------------------------
//Ïîëó÷èòü ñòàòóñû â âèäå ñòðîêè
std::string StatusFP300KZ::getStatus()
{
std::string str="";
for(int i=0;i<8;i++)
for(int j=0;j<6;j++)
if(s[j][i]) str+="1"; else str+="0";
return str;
}
//---------------------------------------------------------------------------
//Îøèáêè ãåíåðþ ñàì ïî ñòàòóñàì
std::string FP300KZ::getErrorDesc(int ResultCode)
{
std::string result="";
switch( ResultCode )
{
//Îøèáêè âçÿòûå ó øòðèõîâ
case 0: result="OK"; break;
case 4: result="Ñèíòàêñè÷åñêàÿ îøèáêà â ïîëó÷åííûõ äàííûõ!"; break;
case 5: result="Íåò çàïðîøåííûõ äàííûõ!"; break;
case 78: result="Ñìåíà ïðåâûñèëà 24 ÷àñà!"; break;
case 79: result="Íåâåðíûé ïàðîëü!"; break;
case 103: result="Íåò ñâÿçè ñ ÔÏ!"; break;
case 192: result="Òàéìåð íå óñòàíîâëåí!"; break;
//Òå îøèáêè êîòîðûå ÿ ñàì ïðèäóìàë
case 500: result="Ïå÷àòàþùåå óñòðîéñòâî íåèñïðàâíî!"; break;
case 501: result="Íåïðàâèëüíûé êîä ïîëó÷åííîé êîìàíäû!"; break;
case 502: result="Ïîñëå âêëþ÷åíèÿ ïðèíòåðà îáíàðóæåíû íàðóøåíèÿ äàííûõ â ÎÇÓ!"; break;
case 503: result="Áàòàðåÿ ðàçðÿæåíà (Òàéìåð ðåàëüíîãî âðåìåíè â ñîñòîÿíèè RESET)!"; break;
case 504: result="ÎÇÓ îáíóëåíî!"; break;
case 505: result="Êîìàíäà íå ìîæåò áûòü âûïîëíåíà â äàííîì ôèñêàëüíîì ðåæèìå!"; break;
case 506: result="Îøèáêà çàïèñè â ôèñêàëüíóþ ïàìÿòü!"; break;
case 507: result="Ôèñêàëüíàÿ ïàìÿòü çàïîëíåíà!"; break;
case 508: result="Çàêîí÷èëàñü ëåíòà!"; break;
case 509: result="Óæå îòêðûò ôèñêàëüíûé ÷åê èëè ÷åê âîçâðàòà!"; break;
case 510: result="Êðûøêà ïðèíòåðà îòêðûòà!"; break;
case 511: result="Íå âîçìîæíî çàêðûòü ÷åê äîïëàòèòå äåíåã!"; break;
//Ïðè ôèñêàëèçàöèè
case 512: result="Íå èñïîëüçóåòñÿ!"; break;
case 513: result="Ïðîâåäåíî ìàêñèìàëüíîå êîëè÷åñòâî ïåðåðåãèñòðàöèé!"; break;
case 514: result="Íå óñòàíîâëåí çàâîäñêîé íîìåð (ôèñêàëèçàöèÿ) èëè íå âåðíûé ïàðîëü íàëîãîâîãî èíñïåêòîðà (ïåðåðåãèñòðàöèÿ)!"; break;
case 515: result="Íåêîððåêòíûé çàâîäñêîé íîìåð!"; break;
case 516: result="Îòêðûò ôèñêàëüíûé èëè íåôèñêàëüíûé ÷åê!"; break;
case 517: result="Îòïå÷àòàíû ôèñêàëüíûå ÷åêè ïîñëå Z-îò÷åòà. Íåîáõîäèìî ñíÿòü Z-îò÷åò!"; break;
case 518: result="Íå óñòàíîâëåíû ñòàâêè ÍÄÑ!"; break;
case 519: result="Íå âêëþ÷åíà íè îäíà ãðóïïà ÍÄÑ!"; break;
case 520: result="Íå óñòàíîâëåíû äàòà è âðåìÿ èëè ôèñêàëüíàÿ ïàìÿòü â ðåæèìå \"ÒÎËÜÊÎ ÄËß ×ÒÅÍÈß\"!"; break;
default:
result="Íåò îïèñàíèÿ îøèáêè!";
}
return result;
}
//---------------------------------------------------------------------------
std::string FP300KZ::getLastErrorDest()
{
return getErrorDesc(ResultCode());
}
//---------------------------------------------------------------------------
//Ãåíåðèì èç ñòàòóñîâ êîä îøèáêè â âèäå öèôðû
int FP300KZ::ResultCode()
{
if(CommandName==fcCancelFiscalInv) return 0; //Ïðè îòìåíå ÷åêà íå âûäàâàòü îøèáêó õîòü îí è íå áûë îòêðûòü
if(CommandName==fcFiscalization)
{
if(m_ErrCode=="1") return 512; //'1' Íå èñïîëüçóåòñÿ
if(m_ErrCode=="2") return 513; //'2' Ïðîâåäåíî ìàêñèìàëüíîå êîëè÷åñòâî ïåðåðåãèñòðàöèé.
if(m_ErrCode=="3") return 514; //'3' Íå óñòàíîâëåí çàâîäñêîé íîìåð (ôèñêàëèçàöèÿ) èëè íå âåðíûé ïàðîëü íàëîãîâîãî èíñïåêòîðà (ïåðåðåãèñòðàöèÿ).
if(m_ErrCode=="4") return 515; //'4' Íåêîððåêòíûé çàâîäñêîé íîìåð.
if(m_ErrCode=="5") return 516; //'5' Îòêðûò ôèñêàëüíûé èëè íåôèñêàëüíûé ÷åê.
if(m_ErrCode=="6") return 517; //'6' Îòïå÷àòàíû ôèñêàëüíûå ÷åêè ïîñëå Z-îò÷åòà. Íåîáõîäèìî ñíÿòü Z-îò÷åò.
if(m_ErrCode=="7") return 518; //'7' Íå óñòàíîâëåíû ñòàâêè ÍÄÑ.
if(m_ErrCode=="8") return 519; //'8' Íå âêëþ÷åíà íè îäíà ãðóïïà ÍÄÑ.
if(m_ErrCode=="9") return 520; //'9' Íå óñòàíîâëåíû äàòà è âðåìÿ èëè ôèñêàëüíàÿ ïàìÿòü â ðåæèìå "ÒÎËÜÊÎ ÄËß ×ÒÅÍÈß".
m_ErrCode="";
}
//1 1 Íåèñïðàâåí íàêîïèòåëü ÔÏ 1, ÔÏ 2 èëè ÷àñû
//2 2 Îòñóòñòâóåò ÔÏ 1
//3 3 Îòñóòñòâóåò ÔÏ 2
if(Status->s[0][0]) return 4; //0x04 Íåêîððåêòíûå ïàðàìåòðû â êîìàíäå îáðàùåíèÿ ê ÔÏ
/*5 5 Íåò çàïðîøåííûõ äàííûõ
6 6 ÔÏ â ðåæèìå âûâîäà äàííûõ
7 7 Íåêîððåêòíûå ïàðàìåòðû â êîìàíäå äëÿ äàííîé ðåàëèçàöèè ÔÏ
8 8 Êîìàíäà íå ïîääåðæèâàåòñÿ â äàííîé ðåàëèçàöèè ÔÏ
9 9 Íåêîððåêòíàÿ äëèíà êîìàíäû
0A 10 Ôîðìàò äàííûõ íå BCD
0B 11 Íåèñïðàâíà ÿ÷åéêà ïàìÿòè ÔÏ ïðè çàïèñè èòîãà
11 17 Íå ââåäåíà ëèöåíçèÿ
12 18 Çàâîäñêîé íîìåð óæå ââåäåí
13 19 Òåêóùàÿ äàòà ìåíüøå äàòû ïîñëåäíåé çàïèñè â ÔÏ
14 20 Îáëàñòü ñìåííûõ èòîãîâ ÔÏ ïåðåïîëíåíà
15 21 Ñìåíà óæå îòêðûòà
16 22 Ñìåíà íå îòêðûòà
17 23 Íîìåð ïåðâîé ñìåíû áîëüøå íîìåðà ïîñëåäíåé ñìåíû
18 24 Äàòà ïåðâîé ñìåíû áîëüøå äàòû ïîñëåäíåé ñìåíû
19 25 Íåò äàííûõ â ÔÏ
1A 26 Îáëàñòü ïåðåðåãèñòðàöèé â ÔÏ ïåðåïîëíåíà
1B 27 Çàâîäñêîé íîìåð íå ââåäåí
1C 28 Â çàäàííîì äèàïàçîíå åñòü ïîâðåæäåííàÿ çàïèñü
1D 29 Ïîâðåæäåíà ïîñëåäíÿÿ çàïèñü ñìåííûõ èòîãîâ
1F 31 Îòñóòñòâóåò ïàìÿòü ðåãèñòðîâ
20 32 Ïåðåïîëíåíèå äåíåæíîãî ðåãèñòðà ïðè äîáàâëåíèè
21 33 Âû÷èòàåìàÿ ñóììà áîëüøå ñîäåðæèìîãî äåíåæíîãî ðåãèñòðà
22 34 Íåâåðíàÿ äàòà
23 35 Íåò çàïèñè àêòèâèçàöèè
24 36 Îáëàñòü àêòèâèçàöèé ïåðåïîëíåíà
25 37 Íåò àêòèâèçàöèè ñ çàïðàøèâàåìûì íîìåðîì
33 51 Íåêîððåêòíûå ïàðàìåòðû â êîìàíäå
35 53 Íåêîððåêòíûé ïàðàìåòð ïðè äàííûõ íàñòðîéêàõ
36 54 Íåêîððåêòíûå ïàðàìåòðû â êîìàíäå äëÿ äàííîé ðåàëèçàöèè ÔÐ
37 55 Êîìàíäà íå ïîääåðæèâàåòñÿ â äàííîé ðåàëèçàöèè ÔÐ
38 56 Îøèáêà â ÏÇÓ +
39 57 Âíóòðåííÿÿ îøèáêà ÏÎ ÔÐ
3A 58 Ïåðåïîëíåíèå íàêîïëåíèÿ ïî íàäáàâêàì â ñìåíå
3C 60 ÝÊËÇ: íåâåðíûé ðåãèñòðàöèîííûé íîìåð
3E 62 Ïåðåïîëíåíèå íàêîïëåíèÿ ïî ñåêöèÿì â ñìåíå
3F 63 Ïåðåïîëíåíèå íàêîïëåíèÿ ïî ñêèäêàì â ñìåíå
40 64 Ïåðåïîëíåíèå äèàïàçîíà ñêèäîê
41 65 Ïåðåïîëíåíèå äèàïàçîíà îïëàòû íàëè÷íûìè
42 66 Ïåðåïîëíåíèå äèàïàçîíà îïëàòû òèïîì 2
43 67 Ïåðåïîëíåíèå äèàïàçîíà îïëàòû òèïîì 3
44 68 Ïåðåïîëíåíèå äèàïàçîíà îïëàòû òèïîì 4
45 69 Cóììà âñåõ òèïîâ îïëàòû ìåíüøå èòîãà ÷åêà
46 70 Íå õâàòàåò íàëè÷íîñòè â êàññå
47 71 Ïåðåïîëíåíèå íàêîïëåíèÿ ïî íàëîãàì â ñìåíå
48 72 Ïåðåïîëíåíèå èòîãà ÷åêà
4A 74 Îòêðûò ÷åê - îïåðàöèÿ íåâîçìîæíà
4B 75 Áóôåð ÷åêà ïåðåïîëíåí
4C 76 Ïåðåïîëíåíèå íàêîïëåíèÿ ïî îáîðîòó íàëîãîâ â ñìåíå
4D 77 Âíîñèìàÿ áåçíàëè÷íîé îïëàòîé ñóììà áîëüøå ñóììû ÷åêà
4E 78 Ñìåíà ïðåâûñèëà 24 ÷àñà
*/
//if(CommandName==fcOpenFiscalInv && Password=="") return 79; //4F 79 Íåâåðíûé ïàðîëü
/*50 80 Èäåò ïå÷àòü ïðåäûäóùåé êîìàíäû
51 81 Ïåðåïîëíåíèå íàêîïëåíèé íàëè÷íûìè â ñìåíå
52 82 Ïåðåïîëíåíèå íàêîïëåíèé ïî òèïó îïëàòû 2 â ñìåíå
53 83 Ïåðåïîëíåíèå íàêîïëåíèé ïî òèïó îïëàòû 3 â ñìåíå
54 84 Ïåðåïîëíåíèå íàêîïëåíèé ïî òèïó îïëàòû 4 â ñìåíå
56 86 Íåò äîêóìåíòà äëÿ ïîâòîðà
57 87 ÝÊËÇ: êîëè÷åñòâî çàêðûòûõ ñìåí íå ñîâïàäàåò ñ ÔÏ
58 88 Îæèäàíèå êîìàíäû ïðîäîëæåíèÿ ïå÷àòè
59 89 Äîêóìåíò îòêðûò äðóãèì îïåðàòîðîì
5B 91 Ïåðåïîëíåíèå äèàïàçîíà íàäáàâîê
5C 92 Ïîíèæåíî íàïðÿæåíèå 24Â
5D 93 Òàáëèöà íå îïðåäåëåíà
5E 94 Íåêîððåêòíàÿ îïåðàöèÿ
5F 95 Îòðèöàòåëüíûé èòîã ÷åêà
60 96 Ïåðåïîëíåíèå ïðè óìíîæåíèè
61 97 Ïåðåïîëíåíèå äèàïàçîíà öåíû
62 98 Ïåðåïîëíåíèå äèàïàçîíà êîëè÷åñòâà
63 99 Ïåðåïîëíåíèå äèàïàçîíà îòäåëà
64 100 ÔÏ îòñóòñòâóåò +
65 101 Íå õâàòàåò äåíåã â ñåêöèè
66 102 Ïåðåïîëíåíèå äåíåã â ñåêöèè*/
if(!cPort->isOpen()) return 103; //0x67 Îøèáêà ñâÿçè ñ ÔÏ +
/*68 104 Íå õâàòàåò äåíåã ïî îáîðîòó íàëîãîâ
69 105 Ïåðåïîëíåíèå äåíåã ïî îáîðîòó íàëîãîâ
6A 106 Îøèáêà ïèòàíèÿ â ìîìåíò îòâåòà ïî I2C
6B 107 Íåò ÷åêîâîé ëåíòû
6C 108 Íåò êîíòðîëüíîé ëåíòû
6D 109 Íå õâàòàåò äåíåã ïî íàëîãó
6E 110 Ïåðåïîëíåíèå äåíåã ïî íàëîãó
6F 111 Ïåðåïîëíåíèå ïî âûïëàòå â ñìåíå
70 112 Ïåðåïîëíåíèå ÔÏ
71 113 Îøèáêà îòðåç÷èêà +
72 114 Êîìàíäà íå ïîääåðæèâàåòñÿ â äàííîì ïîäðåæèìå
73 115 Êîìàíäà íå ïîääåðæèâàåòñÿ â äàííîì ðåæèìå
74 116 Îøèáêà ÎÇÓ
75 117 Îøèáêà ïèòàíèÿ +
76 118 Îøèáêà ïðèíòåðà: íåò èìïóëüñîâ ñ òàõîãåíåðàòîðà +
77 119 Îøèáêà ïðèíòåðà: íåò ñèãíàëà ñ äàò÷èêîâ +
78 120 Çàìåíà ÏÎ
79 121 Çàìåíà ÔÏ
7A 122 Ïîëå íå ðåäàêòèðóåòñÿ
7B 123 Îøèáêà îáîðóäîâàíèÿ
7C 124 Íå ñîâïàäàåò äàòà
7D 125 Íåâåðíûé ôîðìàò äàòû
7E 126 Íåâåðíîå çíà÷åíèå â ïîëå äëèíû
7F 127 Ïåðåïîëíåíèå äèàïàçîíà èòîãà ÷åêà
80 128 Îøèáêà ñâÿçè ñ ÔÏ +
81 129 Îøèáêà ñâÿçè ñ ÔÏ +
82 130 Îøèáêà ñâÿçè ñ ÔÏ +
83 131 Îøèáêà ñâÿçè ñ ÔÏ +
84 132 Ïåðåïîëíåíèå íàëè÷íîñòè
85 133 Ïåðåïîëíåíèå ïî ïðîäàæàì â ñìåíå
86 134 Ïåðåïîëíåíèå ïî ïîêóïêàì â ñìåíå
87 135 Ïåðåïîëíåíèå ïî âîçâðàòàì ïðîäàæ â ñìåíå
88 136 Ïåðåïîëíåíèå ïî âîçâðàòàì ïîêóïîê â ñìåíå
89 137 Ïåðåïîëíåíèå ïî âíåñåíèþ â ñìåíå
8A 138 Ïåðåïîëíåíèå ïî íàäáàâêàì â ÷åêå
8B 139 Ïåðåïîëíåíèå ïî ñêèäêàì â ÷åêå
8C 140 Îòðèöàòåëüíûé èòîã íàäáàâêè â ÷åêå
8D 141 Îòðèöàòåëüíûé èòîã ñêèäêè â ÷åêå
8E 142 Íóëåâîé èòîã ÷åêà
8F 143 Êàññà íå ôèñêàëèçèðîâàíà
90 144 Ïîëå ïðåâûøàåò ðàçìåð, óñòàíîâëåííûé â íàñòðîéêàõ
91 145 Âûõîä çà ãðàíèöó ïîëÿ ïå÷àòè ïðè äàííûõ íàñòðîéêàõ øðèôòà
92 146 Íàëîæåíèå ïîëåé
93 147 Âîññòàíîâëåíèå ÎÇÓ ïðîøëî óñïåøíî
94 148 Èñ÷åðïàí ëèìèò îïåðàöèé â ÷åêå
A0 160 Îøèáêà ñâÿçè ñ ÝÊËÇ +
A1 161 ÝÊËÇ îòñóòñòâóåò +
A2 162 ÝÊËÇ: Íåêîððåêòíûé ôîðìàò èëè ïàðàìåòð êîìàíäû
A3 163 Íåêîððåêòíîå ñîñòîÿíèå ÝÊËÇ
A4 164 Àâàðèÿ ÝÊËÇ
A5 165 Àâàðèÿ ÊÑ â ñîñòàâå ÝÊËÇ
A6 166 Èñ÷åðïàí âðåìåííîé ðåñóðñ ÝÊËÇ
A7 167 ÝÊËÇ ïåðåïîëíåíà
A8 168 ÇÊËÇ: Íåâåðíûå äàòà è âðåìÿ
A9 169 ÝÊËÇ: Íåò çàïðîøåííûõ äàííûõ
AA 170 Ïåðåïîëíåíèå ÝÊËÇ (îòðèöàòåëüíûé èòîã äîêóìåíòà)
B0 176 ÝÊËÇ: Ïåðåïîëíåíèå â ïàðàìåòðå êîëè÷åñòâî
B1 177 ÝÊËÇ: Ïåðåïîëíåíèå â ïàðàìåòðå ñóììà
B2 178 ÝÊËÇ: Óæå àêòèâèçèðîâàíà*/
if(Status->s[0][2]) return 192; //0xC0 Êîíòðîëü äàòû è âðåìåíè (ïîäòâåðäèòå äàòó è âðåìÿ)
/*C1 193 ÝÊËÇ: ñóòî÷íûé îò÷¸ò ñ ãàøåíèåì ïðåðâàòü íåëüçÿ
C2 194 Ïðåâûøåíèå íàïðÿæåíèÿ â áëîêå ïèòàíèÿ
C3 195 Íåñîâïàäåíèå èòîãîâ ÷åêà è ÝÊËÇ
C4 196 Íåñîâïàäåíèå íîìåðîâ ñìåí
Ñ5 197 Áóôåð ïîäêëàäíîãî äîêóìåíòà ïóñò
C6 198 Ïîäêëàäíîé äîêóåìíò îòñóòñòâóåò
C7 199 Ïîëå íå ðåäàêòèðóåòñÿ â äàííîì ðåæèìå*/
//Ñâîè êîäû îøèáîê ïîòîìó ÷òî íåìîãó íàéòè â ñïèñêå âûøå ýòîãî çíà÷åíèÿ
if(Status->s[0][4]) return 500; //Ïå÷àòàþùåå óñòðîéñòâî íåèñïðàâíî.
if(Status->s[0][1]) return 501; //Íåïðàâèëüíûé êîä ïîëó÷åííîé êîìàíäû.
if(Status->s[1][4]) return 502; //Ïîñëå âêëþ÷åíèÿ ïðèíòåðà îáíàðóæåíû íàðóøåíèÿ äàííûõ â ÎÇÓ.
if(Status->s[1][3]) return 503; //Áàòàðåÿ ðàçðÿæåíà (Òàéìåð ðåàëüíîãî âðåìåíè â ñîñòîÿíèè RESET).
if(Status->s[1][2]) return 504; //ÎÇÓ îáíóëåíî.
if(Status->s[1][1])
{
if(CommandName==fcOpenFiscalInv && Status->s[2][3]) return 509; else //Óæå îòêðûò ôèñêàëüíûé ÷åê èëè ÷åê âîçâðàòà.
if(CommandName==fcCloseFiscalInv)
{
bool Open; int Items; double Amount=0,Tender=0;
FiscalTransactionsStatus(Open,Items,Amount,Tender);
CommandName=fcCloseFiscalInv; //×òîá ïðè ñëåäóþùåì âûçîâå íå îáíîëèëîñü
Status->s[1][1]=true; //×òîá ïî ïðåæíåìó áûëà îøèáêà
if(Open && Amount-(Tender+0.002)>0) return 511; //"Íå âîçìîæíî çàêðûòü ÷åê äîïëàòèòå äåíåã!"
}else
if(CommandName==fcOpenFiscalInv)
{
//Ïðîâåðÿåì ñêîëüêî âðåìåíè ïðîøëî ñ íà÷àëà ñìåíû
m_SaveLog=false;
int sec;
if(GetTimeZReport(sec).ErrorCode==0 && sec>24*60*60)
{
Status->s[1][1]=true;
CommandName=fcOpenFiscalInv; //×òîá íå èçìåíèëîñü
return 78;
}
m_SaveLog=true;
}
return 505; //Êîìàíäà íå ìîæåò áûòü âûïîëíåíà â äàííîì ôèñêàëüíîì ðåæèìå.
}
if(Status->s[4][0]) return 506; //Îøèáêà çàïèñè â ôèñêàëüíóþ ïàìÿòü.
if(Status->s[4][4]) return 507; //Ôèñêàëüíàÿ ïàìÿòü çàïîëíåíà.
if(Status->s[2][0]) return 508; //Çàêîí÷èëàñü ëåíòà.
//509 çàíÿò "Óæå îòêðûò ôèñêàëüíûé ÷åê èëè ÷åê âîçâðàòà."
if(Status->s[1][5]) return 510; //Êðûøêà ïðèíòåðà îòêðûòà!
//511 çàíÿò "Íå âîçìîæíî çàêðûòü ÷åê äîïëàòèòå äåíåã!"
//512 Íå èñïîëüçóåòñÿ
//513 Ïðîâåäåíî ìàêñèìàëüíîå êîëè÷åñòâî ïåðåðåãèñòðàöèé.
//514 Íå óñòàíîâëåí çàâîäñêîé íîìåð (ôèñêàëèçàöèÿ) èëè íå âåðíûé ïàðîëü íàëîãîâîãî èíñïåêòîðà (ïåðåðåãèñòðàöèÿ).
//515 Íåêîððåêòíûé çàâîäñêîé íîìåð.
//516 Îòêðûò ôèñêàëüíûé èëè íåôèñêàëüíûé ÷åê.
//517 Îòïå÷àòàíû ôèñêàëüíûå ÷åêè ïîñëå Z-îò÷åòà. Íåîáõîäèìî ñíÿòü Z-îò÷åò.
//518 Íå óñòàíîâëåíû ñòàâêè ÍÄÑ.
//519 Íå âêëþ÷åíà íè îäíà ãðóïïà ÍÄÑ.
//520 Íå óñòàíîâëåíû äàòà è âðåìÿ èëè ôèñêàëüíàÿ ïàìÿòü â ðåæèìå "ÒÎËÜÊÎ ÄËß ×ÒÅÍÈß".
return 0;// m_ErrorCode;
}
//---------------------------------------------------------------------------
FP300KZ::FP300KZ()
{
cPort=new ComPort();
Status=new StatusFP300KZ();
CheckCount=0;
FrameSeqNumber=0x20;
PrinterName="none";
m_Dots=0;
m_ErrCode="this";
m_SaveLog=true;
}
//---------------------------------------------------------------------------
FP300KZ::~FP300KZ()
{
delete cPort;
}
//---------------------------------------------------------------------------
//Ïîëó÷èòü ñëåäóþùèé ïîðÿäêîâûé íîìåð çàïðîñà.
uint1 FP300KZ::getNextSeq()
{
FrameSeqNumber++;
if(FrameSeqNumber == 0x20 + 30) FrameSeqNumber = 0x20;
if(FrameSeqNumber < 0x20) FrameSeqNumber = 0x20;
return FrameSeqNumber;
}
//---------------------------------------------------------------------------
//Çàäåðæêà â ìèëëèñåêóíäàõ
void FP300KZ::SleepMs(int ms)
{
#ifdef __WXMSW__
wxThread::Sleep(60);
#endif // __WXMSW__
#if defined(WIN32) || defined(_WINDOWS) || defined(_BORLAND)
Sleep(60);
#endif
}
//---------------------------------------------------------------------------
/// Ïàêóåì è îòïðàâëÿåì ñîîáùåíèå íà ïðèíòåð ïîòîì æä¸ì îòâåòà
///\param msg Ññûëêà íà ïåðâûé ñèìâîë ìàññèâà ñèìâîëîâ
///\param size Ðàçìåð ìàññèâà
///\param answer Îòâåò â âèäå ñòðîêè
///\Åñëè ðåçóëüòàò true òî âñ¸ îê
/*bool FP300KZ::SendPMessage(uint8_t* msg,uint32_t msize,std::string &answer)
{
//m_ErrorCode=0; //Îáíóëÿåì êîä îøèáêè ïåðåä âûïîëíåíèåì êîìàíäû
if(!cPort->isOpen()) { return false; }
CommandName=msg[3]; //Ñîõðàíÿåì íîìåð ïîñëåäíåé êîìàíäû
for(int i=0;i<sizeof(ReadAr);i++) ReadAr[i]=0; //Î÷èùàåì áóôåð îòâåòà.
bool result=false; //Õîòü ÷òîòî ïîëó÷èëè
getNextSeq();//Óâåëè÷èì íà 1
if(cPort->isOpen())
{
for(int i=0;i<5;i++) //Åñëè ïîñëå 5 ïîïûòîê íåò îòâåòà òî ïðèíòåð íåèñïðàâåí...
{
//Îòïðàâëÿþ çàïðîñ íà ïðèíòåð
msg[1]=0x20+msize-1; //Ðàçìåð
msg[2]=FrameSeqNumber;
unsigned int crc=MakeCRC_FP300KZ(msg,1,msize);
cPort->Write(msg,msize); //Îòïðàâëÿåì äàííûå
cPort->Write(&crc,4); //Êîíòðîëüíàÿ ñóììà
cPort->WriteChar(0x03); //Ïðèçíàê êîíöà ñîîáùåíèÿ
//Ïûòàþñü ïðèíÿòü îòâåò îò ïðèíòåðà
bool isOk=true;
int j=0;
while(j<9) //9*60=540 â öèêëå ÷òîá æäàòü îòâåòà íå áîëåå 500ms ïî äîêóìåíòàöèè
{
uint1 start=0;
unsigned long BytesRead=cPort->Read(&start,sizeof(start)); //÷èòàåìì áàéò (îòâåò äîëæåí ïðèòè â òå÷åíèè 60 ms õîñò äîëæåí æäàòü 500 ms)
if(BytesRead==0) //Íè÷åãî íå ïðî÷èòàë
{
SleepMs(60);
isOk=false;
//m_ErrorCode=103; //Êîä îøèáêè
break;
}else
if(start==0x15) //NACK îøèáêà â êîíòðîëüíîé ñóììå çàïðîñ çàíîâî îòïðàâèòü
{
SleepMs(60);
isOk=false;
break;
}else
if(start==0x16) //SYN êîììàíäà ïîäîæäàòü äàííûå ïîñûëàåòñÿ êàæäûå 60ms
{
SleepMs(60);
j=0; //Íà÷èíàåì æäàòü ïî íîâîé (ìîæåò çàöèêëèòñÿ)
}else
if(start==0x01) //Äî÷èòûâàåì
{
ReadAr[0]=start; //Äëÿ ïîäñ÷¸òà CRC
uint1 size=0;
cPort->Read(&size,1); //Ðçàìåð äàííûõ â áàéòàõ
ReadAr[1]=size;
size=ReadAr[1]-0x20 + 6; //Ðàçìåð âñåãî ñîîáùåíèÿ (+5 ýòî 1 áàéò íà÷àëî è CRC 4 áàéòà è 1 áàéò êîíåö)
BytesRead=2; //Òàê êàê ïðèçíàê íà÷àëà è ðàçìåð óæå ïðî÷èòàëè
for(int j=0;j<100;j++)
{
BytesRead+=cPort->Read(&ReadAr[BytesRead],size-BytesRead);
if(BytesRead>=size)
break;
}
//Ïðîâåðÿåì îòâåò íà CRC
unsigned int crc0=MakeCRC_FP300KZ(ReadAr,1,size-5);
unsigned int crc1=*((unsigned int*)&ReadAr[size-5]);
if(crc0!=crc1) isOk=false; //Îøèáêà â êîíòðîëüíîé ñóììå îòâåòà
else
{
Status->SetStatus(&ReadAr[size-12]); //÷èòàåì ñòàòóñ
answer.assign((char*)&ReadAr[4],size-17); //Äîáàâëÿåì îòâåò â ðåçóëüòàò
result=true;
}
if(result) break;
}
j++;
}
if(!isOk) continue; //Îøèáêà ïîâòîðÿåì çàïðîñ
break; //âñ¸ â ïîðÿäêå
}
}
//if(!result) m_ErrorCode=5;
return result;
}*/
bool FP300KZ::SendPMessage(uint8_t* msg,uint32_t msize,std::string &answer)
{
//SleepMs(1000);
bool rez = false; //Õîòü ÷òîòî ïîëó÷èëè
//Áóôåð ïîä îòâåò
unsigned char buffer[1024*100]; //áóôåð äëÿ ÷òåíèÿ îòâåòà
memset(buffer, 0, sizeof(buffer)); //Î÷èùàåì áóôåð îòâåòà.
int bufferS = 0;
if (msize > 3)
{
CommandName = msg[3]; //Ñîõðàíÿåì íîìåð ïîñëåäíåé êîìàíäû
getNextSeq();//Óâåëè÷èì íà 1
if (cPort->isOpen())
{
for (int i = 0; i < 6; i++) //Åñëè ïîñëå 5 ïîïûòîê íåò îòâåòà òî ïðèíòåð íåèñïðàâåí...
{
//Åñëè åñòü ìóñîð â ïîðòå òî ÷èòàþ åãî
int len = cPort->Read(buffer, sizeof(buffer));
if (len>0)
{
std::cout << "WASTE! " + Utility::toHexString(buffer, len) << std::endl;
}
memset(buffer, 0, sizeof(buffer));
if (i>0) std::cout << "REPEAT SEND!" << std::endl;
//Îòïðàâëÿþ çàïðîñ íà ïðèíòåð
msg[1] = 0x20 + msize - 1; //Ðàçìåð
msg[2] = FrameSeqNumber;
unsigned int crc = MakeCRC_FP300KZ(msg, 1, msize);
cPort->Write(msg, msize); //Îòïðàâëÿåì äàííûå
cPort->Write(&crc, 4); //Êîíòðîëüíàÿ ñóììà
cPort->WriteChar(0x03); //Ïðèçíàê êîíöà ñîîáùåíèÿ
//Ïûòàþñü ïðèíÿòü îòâåò îò ïðèíòåðà
bufferS = 0;
bool isOk = true;
//int j = 0;
//while (j < 9) //9*60=540 â öèêëå ÷òîá æäàòü îòâåòà íå áîëåå 500ms ïî äîêóìåíòàöèè
for (int jj = 0; jj<10; jj++) //100ìñ * 10 = 1 ñåêóíäû ìàêñ âðåìÿ ìàêñ âðåìÿ äëÿ îæèäàíèÿ äàííûõ
{
int BytesRead = cPort->Read(&buffer[bufferS], sizeof(buffer) - bufferS);
if (BytesRead>0) jj = 0; //×òîáû íà÷àòü æäàòü ïî íîâîé
//Ïðîâåðÿþ åñòü ëè âî âñ¸ì ñêà÷åíîì NACK îøèáêà CRC
if (bufferS + BytesRead>1 && buffer[0] != 0x01)
{
bool NACK = false;
for (int k = bufferS; k<bufferS + BytesRead; k++)
{
if (buffer[k] == 0x15)
{
std::cout << "NACK" << std::endl;
SleepMs(60);
NACK = true;
break;
}
}
if (NACK) break; //Âûõîäèì èç öèêëà è ïîâòîðÿåì çàïðîñ
}
bufferS += BytesRead;
//Èùó ïåðâóþ ïîçèöèþ ñ 0x01 åñëè îíà åñòü òî ñäâèãàþ ìàññèâ
int pos = -1;
for (int k = 0; k<bufferS; k++)
{
pos = k;
if (buffer[k] == 0x01) break; //×òîáû íå çàò¸ðëî äàííûå
if(buffer[k]==0x16) std::cout << "WAIT" << std::endl; //SYN êîììàíäà ïîäîæäàòü äàííûå ïîñûëàåòñÿ êàæäûå 60ms
}
if (pos>0)
{
//Ñäâèãàþ ìàññèâ
for (int k = 0; k<bufferS - pos; k++)
{
buffer[k] = buffer[k + pos];
}
bufferS -= pos; //Êîððåêòèðóþ ðàçìåð ïðèíÿòîãî
SleepMs(60); //Òàê êàê ìîã ïîïàñòüñÿ áàéò 0x16 SYN êîììàíäà ïîäîæäàòü äàííûå ïîñûëàåòñÿ êàæäûå 60ms òî íåìíîãî æäó...
}
//íà÷àëî ïàêåòà
if (bufferS >= 2 && buffer[0] == 0x01 && bufferS >= buffer[1] - 0x20 + 6) //Íà÷àëî ïàêåòà
{
unsigned short size = buffer[1] - 0x20 + 6;
//Ïðîâåðÿåì îòâåò íà CRC
unsigned int crc0 = MakeCRC_FP300KZ(buffer, 1, size - 5);
unsigned int crc1 = *((unsigned int*)&buffer[size - 5]);
if (crc0 != crc1)
{
memset(buffer, 0, sizeof(buffer));
pos = 0;
}
else
{
Status->SetStatus(&buffer[size - 12]); //÷èòàåì ñòàòóñ
answer.assign((char*)&buffer[4], size - 17); //Äîáàâëÿåì îòâåò â ðåçóëüòàò
rez = true;
}
break;
}
}
if (!isOk) continue; //Îøèáêà ïîâòîðÿåì çàïðîñ
break; //âñ¸ â ïîðÿäêå
}
}
}
return rez;
}
//---------------------------------------------------------------------------
bool FP300KZ::CloseCOMPort()
{
return cPort->Close();
}
//---------------------------------------------------------------------------
//bool FP300KZ::OpenCOMPort(std::string ComNumber,int BaudRate)
bool FP300KZ::OpenSerial(std::string ComNumber, int BaudRate)
{
cPort->ComNumber=ComNumber;
cPort->BaudRate=BaudRate;
cPort->Close();
if(cPort->Open(cPort->ComNumber))
{
if(!cPort->Setup(0))
return false;
if (!cPort->SetTimeout(300))
return false;
}else return false;
return true;
}
//---------------------------------------------------------------------------
void FP300KZ::LoadSetup()
{
/*
std::wstring path=getCommonAppPathW()+L"\\NewTon\\Setup.ini";
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
cPort->port=ini->ReadString("Printer","Port","");
cPort->BaudRate=ini->ReadInteger("Printer","BaudRate",0);
CheckCount=ini->ReadInteger("Printer","CheckCount",0);
delete ini;
*/
}
//---------------------------------------------------------------------------
void FP300KZ::SaveSetup()
{
/*
std::wstring path=getCommonAppPathW()+L"\\NewTon\\Setup.ini";
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
ini->WriteString("Printer","Port",cPort->port);
ini->WriteInteger("Printer","BaudRate",cPort->BaudRate);
ini->WriteInteger("Printer","CheckCount",CheckCount);
delete ini;
*/
}
//---------------------------------------------------------------------------
bool FP300KZ::Print()
{
return false;
}
//---------------------------------------------------------------------------
void FP300KZ::NewLine()
{
}
//---------------------------------------------------------------------------
/*public byte[] ReturnBCC(byte[] bytePacketData)
{
// <BCC> Êîíòðîëíà ñóìà (0000H-FFFFH)
// äúëæèíà: 4 áàéòà
// ñòîéíîñò: 30H - 3FH
// Ñóìàòà âêëþ÷âà îò <01> áåç íåãî äî <05> âêë.
// Âñÿêà öèôðà îò äâàòà áàéòà ñå ïðåäàâà êàòî è ñå ïðèáàâè 30H.
// Íàïðèìåð ñóìàòà 1AE3H ñå ïðåäñòàâÿ êàòî 31H,3AH,3EH,33H.
// IN HEX
// 01 25 50 4C 54 05 30
// In decimal
// 1 37 80 76 84 5 48
Int64 triset_HEX = 0x30;
byte[] bRes = new byte[4];
int i = 48;
int iRes = 0;
// int i = 0;
int iCountB = 0;
string hexval1 = String.Empty;
string hexval2 = String.Empty;
StringBuilder sb = new StringBuilder();
foreach (byte n in bytePacketData)
{
if (n != (byte)01)
{
if (iCountB == 0)
{
sb.Append(n.ToString("X2"));
string hexString = sb.ToString();
triset_HEX = triset_HEX + Convert.ToInt64(hexString, 16);
}
iCountB++;
if (iCountB > 1)
iCountB = 0;
}
if (n == (byte)05)
break;
}
return this.ConvertHexToByteArr(Convert.ToString( triset_HEX ));
}
*/
//---------------------------------------------------------------------------
//Èíèöèàëèçàöèÿ ïåðåìåííûõ PrinterName PrinterVersion PrinterNumber PrinterDecimal
//Áåç êîòîðûõ ïðèíòåð íå ìîæåò ðàáîòàòü...
MyError FP300KZ::PrinterInit()
{
MyError err;
err = DiagnosticInfo();
if(err.ErrorCode == 0)
{
bool bA,bB,bC,bD;
std::string Decimal,r,TaxA,TaxB,TaxC,TaxD;
err = GetTaxRates(Decimal,r,bA,bB,bC,bD,TaxA,TaxB,TaxC,TaxD);
// if(b) b=b && fp->GetStatusFP();
}
return err;
}
//---------------------------------------------------------------------------
///Ïîëó÷åíèå áàéòîâ ñòàòóñà ïðèíòåðà 4A
MyError FP300KZ::GetStatusFP()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcGetStatusFP,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber+".log",std::string("GetStatusFP(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Àííóëÿöèÿ (ñòîðíî) ôèñêàëüíîãî ÷åêà
MyError FP300KZ::CancelFiscalInv()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcCancelFiscalInv,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("CancelFiscalInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îòêðûòèå ôèñêàëüíîãî (êëèåíòñêîãî) ÷åêà
///OpCode - Íîìåð îïåðàòîðà 1..16
///OpPwd - Ïàðîëü îïåðàòîðà 4 - 6 öèôð
///TillNmb - Íîìåð êàññîâîãî ìåñòà öåëîå ÷èñëî 1..99999
MyError FP300KZ::OpenFiscalInv(int OpCode,std::string OpPwd,int TillNmb)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcOpenFiscalInv;
msg+= Utility::IntToStdStr(OpCode)+","+OpPwd+","+ Utility::IntToStdStr(TillNmb);
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("OpenFiscalInv(OpCode="+ Utility::IntToStdStr(OpCode)+",OpPwd=****,TillNmb="+ Utility::IntToStdStr(TillNmb)+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Çàêðûòèå ôèñêàëüíîãî ÷åêà
MyError FP300KZ::CloseFiscalInv()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcCloseFiscalInv,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
{
std::stringstream ss;
ss << "CloseFiscalInv();";
if (err.ErrorCode != 0) ss << " ErrorCode: " << err.ErrorCode << " ErrorDescription: " << err.ErrorMessage;
Utility::logrotate(PrinterName + "_" + PrinterNumber + ".log", ss.str());
}
return err;
}
//---------------------------------------------------------------------------
///Îòêðûòèå íåôèñêàëüíîãî ÷åêà
MyError FP300KZ::OpenServiceInv()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcOpenServiceInv,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("OpenServiceInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Çàêðûòèå íåôèñêàëüíîãî ÷åêà
///TODO îòâåò: Êîëè÷åñòâî âñåõ íàïå÷àòàííûõ ÷åêîâ (ôèñêàëüíûõ è ñëóæåáíûõ) ñ ìîìåíòà ïîñëåäíåãî çàêðûòèÿ ñìåíû äî òåêóùåãî ìîìåíòà /4 áàéòà/.
MyError FP300KZ::CloseServiceInv(int& count)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
count=0;
unsigned char msg[5] = {0x01,0x24,0x20,fcCloseServiceInv,0x05};
std::string str;
bool b=SendPMessage(msg,sizeof(msg),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (b)
{
count = Utility::StdStrToInt(str);
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("CloseServiceInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îòêðûòèå ÷åêà âîçâðàòà
/**OpCode - Íîìåð îïåðàòîðà 1..16
* OpPwd - 4 - 6 öèôð
* TillNmb - Íîìåð êàññîâîãî ìåñòà /öåëîå ÷èñëî 1..99999/
*/
MyError FP300KZ::OpenBackInv(int OpCode,std::string OpPwd,int TillNmb)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcOpenBackInv;
msg+= Utility::IntToStdStr(OpCode)+','+OpPwd+','+ Utility::IntToStdStr(TillNmb);
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("OpenBackInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïå÷àòü äóáëèêàòà ÷åêà
MyError FP300KZ::PrintDuplicateInv()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[6] = {0x01,0x25,0x20,fcPrintDuplicateInv,0x31,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("PrintDuplicateInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
/** Óñòàíîâêà íàèìåíîâàíèé äîïîëíèòåëüíûõ òèïîâ îïëàòû
Option - 1..4 íîìåð òèïà îïëàòû
Name - Íàèìåíîâàíèå òèïà îïëàòû (åñëè name = '' òî âåðí¸ò òåêóùåå)
*/
MyError FP300KZ::SetAddTypesOfPayment(char Option, std::wstring& Text)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetAddTypesOfPayment;
switch(Option)
{
case 1:
msg+='I';
break;
case 2:
msg+='J';
break;
case 3:
msg+='K';
break;
case 4:
msg+='L';
break;
}
if(Text.length()!=0)
{
msg+=',';
msg.append(Utility::ws2s(Text),0,31); //Â äîêóìåíòàöèè ìàêñ 31 áàéò
}
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b && Text.length()!=0 && answer!="P") b=b && false;
if(b && Text.length()==0) Text = Utility::StringToWString(answer, std::locale(""));
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetAddTypesOfPayment(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïå÷àòàòü äíåâíîé îò÷¸ò ñ ãàøåíèåì
MyError FP300KZ::PrintZReport()
{
/*MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";*/
bool b=PrintEJ().ErrorCode==0; //ïå÷àòàåì êîíòðîëüíóþ ëåíòó
if(b) b=b && EJ("E").ErrorCode==0; //Îò÷èùÿÿåì êîíòðîëüíóþ ëåíòó
//if(b) b=b && ==0; //Ñàì Z îò÷¸ò
Sleep(100);
return DailyFinancialReport('1');
}
//---------------------------------------------------------------------------
//Ïå÷àòàòü äíåâíîé îò÷¸ò áåç ãàøåíèÿ
MyError FP300KZ::PrintXReport()
{
return DailyFinancialReport('3');
}
//---------------------------------------------------------------------------
//Ïå÷àòàåò ñòðîêó òåêñòà (íà ñëóæåáíîì è íà ôèñêàëüíîì)
MyError FP300KZ::PrintLine(std::wstring line)
{
MyError err;
err = PrintFreeTextInFiscalInv(Utility::ws2s(line)); //TODO ïîäïðàâèòü íà ru-ru.1251 ðîâåðèòü â èíòåðíåòå
if(err.ErrorCode!=0) err=PrintFreeTextInServiceInv(Utility::ws2s(line)); //Ïå÷àòü ñâîáîäíîãî òåêñòà â íåôèñêàëüíîì ÷åêå
return err;
}
//---------------------------------------------------------------------------
///Äíåâíîé ôèíàíñîâûé îò÷åò
///'0' - Z îò÷¸ò áåç ðåãèñòðîâ
///'1' - Z îò÷¸ò ñ ðåãèñòðàìè
///'2' - X îò÷¸ò áåç ðåãèñòðîâ
///'3' - X îò÷¸ò ñ ñîäåðæàíèåì ðåãèñòðîâ
MyError FP300KZ::DailyFinancialReport(uint1 Option)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
//N íà êîíöå íå ñäåëàë ñìîòðè äîêóìåíòàöèþ
unsigned char msg[6] = {0x01,0x25,0x20,fcDailyFinancialReport,Option,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DailyFinancialReport(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îò÷åò ïî íàëîãîâûì ñòàâêàì è ïîëîæåíèþ äåñÿòè÷íîé òî÷êè çà ïåðèîä
///Start - Äàòà íà÷àëà ïåðèîäà DDMMYY /6 áàéò/
///End - Äàòà îêîí÷àíèÿ ïåðèîäà DDMMYY /6 áàéò/
MyError FP300KZ::ReportOnTaxRates(std::string Start,std::string End) //Îò÷åò ïî íàëîãîâûì ñòàâêàì è ïîëîæåíèþ äåñÿòè÷íîé òî÷êè çà ïåðèîä
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcReportOnTaxRates;
msg+=Start+','+End;
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if(answer=="f") b=false; //Åñëè íå çàäàííî íàëîãîâûõ ñòàâîê çà ïåðèîä.
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ReportOnTaxRates(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïîëíûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé äàòàìè
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà îò 4 äî 6 öèôð.
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì 'X'. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
///Start - Íà÷àëüíàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
///End - Êîíå÷íàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
///Åñëè âòîðîé ïàðàìåòð îòñóòñòâóåò, êîìàíäà ãåíåðèðóåò ìåñÿ÷íûé èëè ãîäîâîé îò÷åò. Ñèíòàêñèñ â ýòîì ñëó÷àå:
///Start Ìåñÿö - 4 áàéòà (MMYY) äëÿ ìåñÿ÷íîãî îò÷åòà.
///Start Ãîä - 2 áàéòà (YY) äëÿ ãîäîâîãî îò÷åòà.
MyError FP300KZ::FullFiscalReportByDate(std::string Password,std::string Receipts,std::string Start,std::string End)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFullFiscalReportByDate;
msg+=Password+',';
msg+=Receipts;
msg+=Start+','+End;
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("FullFiscalReportByDate(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ñîêðàù¸íûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé äàòàìè
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà îò 4 äî 6 öèôð.
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì 'X'. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
///Start - Íà÷àëüíàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
///End - Êîíå÷íàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
///Åñëè âòîðîé ïàðàìåòð îòñóòñòâóåò, êîìàíäà ãåíåðèðóåò ìåñÿ÷íûé èëè ãîäîâîé îò÷åò. Ñèíòàêñèñ â ýòîì ñëó÷àå:
///Start Ìåñÿö - 4 áàéòà (MMYY) äëÿ ìåñÿ÷íîãî îò÷åòà.
///Start Ãîä - 2 áàéòà (YY) äëÿ ãîäîâîãî îò÷åòà.
MyError FP300KZ::ReduceFiscalReportByDate(std::string Password,std::string Receipts,std::string Start,std::string End)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcReduceFiscalReportByDate;
msg+=Password+',';
msg+=Receipts;
msg+=Start+','+End;
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ReduceFiscalReportByDate(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïîëíûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé íîìåðàìè ñìåí
///Îáëàñòü äàííûõ: <Password>, [[<Receipts>]<Start>,<End>]
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà îò 4 äî 6 öèôð.
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì X. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
///Start - Íîìåð ïåðâîé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
///End - Íîìåð ïîñëåäíåé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
MyError FP300KZ::FullFiscalReportByNumber(std::string Password,std::string Receipts,int Start,int End)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFullFiscalReportByNumber;
msg+=Password+',';
msg+=Receipts;
msg+= Utility::IntToStdStr(Start)+','+ Utility::IntToStdStr(End);
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("FullFiscalReportByNumber(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ñîêðàù¸íûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé íîìåðàìè ñìåí
///Îáëàñòü äàííûõ: <Password>, [[<Receipts>]<Start>,<End>]
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà îò 4 äî 6 öèôð.
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì X. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
///Start - Íîìåð ïåðâîé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
///End - Íîìåð ïîñëåäíåé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
MyError FP300KZ::ReduceFiscalReportByNumber(std::string Password,std::string Receipts,int Start,int End)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcReduceFiscalReportByNumber;
msg+=Password+',';
msg+=Receipts;
msg+= Utility::IntToStdStr(Start)+','+ Utility::IntToStdStr(End);
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ReduceFiscalReportByNumber(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Äíåâíîé îò÷åò ïî òèïàì îïëàòû
MyError FP300KZ::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)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcDailyReportByTypesOfPayment,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
Cash= Utility::CutBeforeFirst(answer,',');
Credit= Utility::CutBeforeFirst(answer,',');
Debit= Utility::CutBeforeFirst(answer,',');
Cheque= Utility::CutBeforeFirst(answer,',');
Pay1= Utility::CutBeforeFirst(answer,',');
Pay2= Utility::CutBeforeFirst(answer,',');
Pay3= Utility::CutBeforeFirst(answer,',');
Pay4= Utility::CutBeforeFirst(answer,',');
Closure= Utility::CutBeforeFirst(answer,',');
Receipt= Utility::CutBeforeFirst(answer,',');
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DailyReportByTypesOfPayment(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îò÷åò ïî àðòèêóëàì
///'S' - Ïå÷àòàþòñÿ òîëüêî äàííûå àðòèêóëîâ ïî êîòîðûì áûëè ïðîäàæè.
///'P' - Ïå÷àòàþòñÿ äàííûå âñåõ çàïðîãðàììèðîâàííûõ àðòèêóëîâ.
MyError FP300KZ::ReportByArticle(std::string Option) //#define fcReportByArticle 0x6F //(111)Îò÷åò ïî àðòèêóëàì
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcReportByArticle; msg+=Option; msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ReportByArticle(Option="+Option+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îò÷åò ïî îïåðàòîðàì
MyError FP300KZ::OperatorReport()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcOperatorReport,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("OperatorReport(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïðîòÿæêà ëåíòû
///\param cnt Êîëè÷åñòâî ñòðîê
MyError FP300KZ::FeedPaper(int cnt)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFeedPaper;
msg+= Utility::IntToStdStr(cnt);
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("FeedPaper(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îòêðûòèå äåíåæíîãî ÿùèêà
MyError FP300KZ::OpenCashDrawer(int mSec)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcOpenCashDrawer;
if(mSec>0) msg+= Utility::IntToStdStr(mSec);
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("OpenCashDrawer(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//<Dept>,<Line1>[<LF><Line2>]
///Çàäàòü íàèìåíîâàíèå äåïàðòàìåíòà (Ñåêöèè)
MyError FP300KZ::SetDepartmentName(int dept,std::wstring line1,std::wstring line2)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetDepartmentName;
msg+= Utility::IntToStdStr(dept);
msg+=',';
msg.append(Utility::ws2s(line1),0,36); //Â äîêóìåíòàöèè ìàêñ 36 áàéò
if(line2.length()>0)
{
msg+=(char)10;
msg.append(Utility::ws2s(line2),0,46); //Â äîêóìåíòàöèè ìàêñ 46 áàéò
}
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetDepartmentName(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïîëó÷èòü èíôîðìàöèþ ïî ñåêöèÿì
MyError FP300KZ::GetDepartmentInfo(int dept,int &RecSales,float &RecSum,int &TotSales,float &TotSum,std::wstring &Line1,std::wstring &Line2)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcGetDepartmentInfo;
msg+= Utility::IntToStdStr(dept);
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if(b)
{
if(Utility::CutBeforeFirst(str,',')=="P") //Ñåêöèÿ çàïðîãðàììèðîâàííà
{
std::string nstr;
nstr= Utility::CutBeforeFirst(str,',');
RecSales= Utility::StdStrToInt(nstr);
RecSum= Utility::fromString<float>(Utility::CutBeforeFirst(str,',')); //Íàòóðàëüíîå ÷èñëî â òåêñòîâîì âèäå ñ 2 äåñÿòè÷íûìè çíàêàìè
nstr= Utility::CutBeforeFirst(str,',');
TotSales= Utility::StdStrToInt(nstr);
TotSum= Utility::fromString<float>(Utility::CutBeforeFirst(str,',')); //Íàòóðàëüíîå ÷èñëî â òåêñòîâîì âèäå ñ 2 äåñÿòè÷íûìè çíàêàìè
Line1= Utility::StringToWString(Utility::CutBeforeFirst(str, (char)10), std::locale(""));
Line2= Utility::StringToWString(str, std::locale(""));
}else
{
RecSales=0;
RecSum=0;
TotSales=0;
TotSum=0;
Line1=L' ';
Line2=L' ';
}
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("GetDepartmentInfo(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îáðåçêà ëåíòû
MyError FP300KZ::CutPaper()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcCutPaper; msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("CutPaper(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïå÷àòü äèàãíîñòè÷åñêîé èíôîðìàöèè
MyError FP300KZ::PrintDiagnostic()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x20,0x20,fcPrintDiagnostic,0x05};
std::string answer;
int b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName + "_" + PrinterNumber + ".log", std::string("PrintDiagnostic(); //") + (b ? "OK=" : "ERROR=") + Utility::IntToStdStr(err.ErrorCode) + " " + err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
MyError FP300KZ::SetManufacturersSerialNumber(std::string Serial)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetManufacturersSerialNumber;
msg+=Serial;
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
b=b && Utility::BeforeFirst(answer,',')=="P";
//Âòîðàÿ ÷àñòü ääîëæíà áûòü "KAZAKHSTAN"
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetManufacturersSerialNumber(Serial="+Serial+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
std::string FP300KZ::GetStatusDescription(BYTE StatusCode)
{
if (StatusCode == 0x00)
{
return "OK";
}
if (StatusCode == 0xFF)
{
return "Ïðèíòåð íåäîñòóïåí!";
}
BYTE code = (BYTE)StatusCode & (BYTE)0x04;
if (code > 0)
{
return "Áóìàãà êîí÷èëàñü ";
}
code = (BYTE)StatusCode & (BYTE)0x01;
if (code > 0)
{
return "Áóìàãà ñêîðî êîí÷èòñÿ ";
}
return "";
}
//---------------------------------------------------------------------------
///×òåíèå ÐÍÍ è ÐÍÌ
MyError FP300KZ::GetRNNAndRNM(std::string &RNN,std::string &RNM)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcGetRNNAndRNM,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
if (b)
{
RNN = Utility::BeforeFirst(answer, ',');
RNM = Utility::AfterFirst(answer, ',');
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("GetRNNAndRNM("+RNN+","+RNM+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Óñòàíîâêà ÐÍÍ è ÐÍÌ
MyError FP300KZ::SetRNNAndRNM(std::string RNN,std::string RNM)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetRNNAndRNM;
msg+=RNN+','+RNM;
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetRNNAndRNM(RNN="+RNN+",RNM="+RNM+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Óñòàíîâêà ïàðîëÿ îïåðàòîðà
///\param OpCode Íîìåð îïåðàòîðà
///\param OldPwd Ñòàðûé ïàðîëü
///\param NewPwd Íîâûé ïàðîëü
///\return Óñïåõ ëèáî ïðîâàë
MyError FP300KZ::SetOperatorPassword(std::string OpCode,std::string OldPwd,std::string NewPwd)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetOperatorPassword;
msg+=OpCode+','+OldPwd+','+NewPwd;
msg+=(char)0x05;
std::string answer;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetOperatorPassword(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Óñòàíîâêà íàèìåíîâàíèÿ îïåðàòîðà
///\param OpCode Íîìåð îïåðàòîðà. Îò 1 äî 16 ñòðîêà.
///\param Pwd Ïàðîëü (4 äî 8 öèôð).
///\param OpName Íàèìåíîâàíèå îïåðàòîðà (äî 30 ñèìâîëîâ).
///\return Óñïåõ ëèáî ïðîâàë
MyError FP300KZ::SetOperatorName(std::string OpCode,std::string Pwd,std::string OpName)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetOperatorName;
msg+=OpCode+','+Pwd+','+OpName;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetOperatorName(OpCode="+OpCode+",OpName="+OpName+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Óñòàíîâêà äàòû è âðåìåíè
///\param date - Äàòà â ôîðìàòå "DD-MM-YY"
///\param time - âððåìÿ â ôîðìàòå "HH:MM[:SS]"
MyError FP300KZ::SetDateTime(std::string date, std::string time) //#define fcSetDateTime 0x3D //(61)Óñòàíîâêà äàòû è âðåìåíè
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetDateTime;
msg+= Utility::trim(date)+' '+ Utility::trim(time);
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetDateTime(\"")+date+std::string("\", \"")+time+std::string("\"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïîîëó÷åíèå äàòû è âðåìåíè
///\param date - Äàòà â ôîðìàòå "DD-MM-YY"
///\param time - âððåìÿ â ôîðìàòå "HH:MM:SS"
MyError FP300KZ::GetDateTime(unsigned short& De,unsigned short& Me,unsigned short& Ye,unsigned short& Ho,unsigned short& Mi,unsigned short& Se)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcGetDateTime; msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if(b)
{
De= Utility::StdStrToInt(Utility::CutBeforeFirst(str,'-'));
Me= Utility::StdStrToInt(Utility::CutBeforeFirst(str,'-'));
Ye= Utility::StdStrToInt(Utility::CutBeforeFirst(str,' '));//+2000; çàêîìåíòèë ÷òîá áûëî îäèíàêîâî ñ òåì ÷òî ïðè óñòàíîâêè âðåìåíè
Ho= Utility::StdStrToInt(Utility::CutBeforeFirst(str,':'));
Mi= Utility::StdStrToInt(Utility::CutBeforeFirst(str,':'));
Se= Utility::StdStrToInt(str);
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("GetDateTime(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Óñòàíîâêà HEADER è FOOTER è îïöèé ïå÷àòè
MyError FP300KZ::PrintSetup(std::string Item, std::string Text, std::string& Answer)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrintSetup;
msg+=Item+Text;
msg+=(char)0x05;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),Answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("PrintSetup(Item="+Item+",Text="+Text+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
MyError FP300KZ::PrintFreeTextInServiceInv(std::string Text) //Ïå÷àòü ñâîáîäíîãî òåêñòà â íåôèñêàëüíîì ÷åêå
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrintFreeTextInServiceInv;
msg+=Text;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("PrintFreeTextInServiceInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïå÷àòü ñâîáîäíîãî òåêñòà â ôèñêàëüíîì ÷åêå
MyError FP300KZ::PrintFreeTextInFiscalInv(std::string Text)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrintFreeTextInFiscalInv;
msg+=Text;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("PrintFreeTextInFiscalInv(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ðåãèñòðàöèÿ ïðîäàæè
///[<L1>][<Lf><L2>]<Tab><TaxCd><[Sign]Price>[*<Qwan>][,Perc|;Abs]
///L1 - Ïåðâàÿ ñòðîêà îïèñàíèÿ ïðîäàæè, äî 36 áàéò òåêñòà
///L2 - Âòîðàÿ ñòðîêà îïèñàíèÿ ïðîäàæè, äî 36 áàéò òåêñòà
///dep - Äåïàðòàìåíò îòäåë (1..10)
///TaxCd - Îäèí áàéò ñîäåðæàùèé áóêâó ñîîòâåòñòâóþùóþ íàëîãîâîé ãðóïïå (À, Á, Â, Ã, Ä).
///Price - Öåíà åäèíèöû (äî 8 çíà÷àùèõ öèôð).
///Qwan - Êîëè÷åñòâî òîâàðà (Äëèíà äî 8 çíà÷àùèõ öèôð íå áîëåå 3-õ çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè).
///Abs - àáñîëþáíîå ëè çíà÷åíèå â Perc èíà÷å ïðîöåíòû
///Perc - Íàäáàâêà èëè ñêèäêà (â çàâèñèìîñòè îò çíàêà) â ïðîöåíòàõ
MyError FP300KZ::RegisterSale(std::wstring L1,std::wstring L2,int dep, std::string TaxCd,double Price,double Qwan,bool Abs,double Perc)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
L1= Utility::replaceStrings(L1,L"\n",L" "); //Èçáàâëÿåìñÿ îò ïåðåõîäîâ íà íîâóþ ñòðîêó
L2= Utility::replaceStrings(L2,L"\n",L" "); //Èçáàâëÿåìñÿ îò ïåðåõîäîâ íà íîâóþ ñòðîêó
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcRegisterSale;
msg.append(Utility::ws2s(L1),0,36); //Â äîêóìåíòàöèè ìàêñ 36 áàéò
if(L2.length()>0)
{
msg+=(char)0x0A;
msg.append(Utility::ws2s(L2),0,36); //Â äîêóìåíòàöèè ìàêñ 36 áàéò
}
msg+=(char)0x09;
if(dep>0)
{
msg+= Utility::IntToStdStr(dep); //Ïàðàìåòð äåïàðòàìåíò îòäåë â äîêóìåíòàöèè â ñòðîêå êîìàíäû ïðîïóùåí!!!!
msg+=(char)0x09;
}
msg+=TaxCd; //íàëîãîâîé ãðóïïà 1 áàéò
msg+= Utility::FloatToStdStr(Price,m_Dots); //Ó÷èòûâàåì çíàêè ïîñëå çàïÿòîé
msg+='*'+ Utility::FloatToStdStr(Qwan,3);
if(Perc!=0)
if(Abs) msg+=';'+ Utility::FloatToStdStr(Perc,m_Dots); // àáñîëþòíîì çíà÷åíèè
else msg+=','+ Utility::FloatToStdStr(Perc,2); //Ñêèäêà èëè íàäáàâêà
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
{
std::stringstream ss;
ss << "RegisterSale(L1=\"" << Utility::WStringToString(L1,std::locale("")) << "\",L2=\"" << Utility::WStringToString(L2,std::locale("")) << "\",dep=" << Utility::IntToStdStr(dep) << ",TaxCd='" << TaxCd << "',Price=" << Utility::FloatToStdStr(Price, 2, '.') << ",Qwan=" << Utility::FloatToStdStr(Qwan, 3, '.') << ",Abs='" << Abs << "',Perc=" << Utility::FloatToStdStr(Perc, 2, '.') << ");";
if(err.ErrorCode != 0) ss << " ErrorCode: " << err.ErrorCode << " ErrorDescription: " << err.ErrorMessage;
Utility::logrotate(PrinterName + "_" + PrinterNumber + ".log", ss.str());
}
return err;
}
//---------------------------------------------------------------------------
//Ðåãèñòðàöèÿ ïðîäàæè ñ âûâîäîì íà äèñïëåé
/// [Line]]<Tab><TaxCd><[Sign]Price>[*Qwan][,Perc|;Abs]
///Line - Ñòðîêà äî 20 áàéòà ñîäåðæàùàÿ òåêñò îïèñûâàþùèé ïðîäàæó.
///TaxCd - Îäèí áàéò ñîäåðæàùèé áóêâó ñîîòâåòñòâóþùóþ íàëîãîâîé ãðóïïå (À, Á, Â, Ã, Ä).
///Price - Öåíà åäèíèöû (äî 8 çíà÷àùèõ öèôð).
MyError FP300KZ::RegisterSaleDisp(std::string L1,int dep,std::string TaxCd,std::string Price)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcRegisterSaleDisp;
msg+=L1;
msg+=(char)0x09;
if(dep>0)
{
msg+= Utility::IntToStdStr(dep); //Ïàðàìåòð äåïàðòàìåíò îòäåë â äîêóìåíòàöèè â ñòðîêå êîìàíäû ïðîïóùåí!!!!
msg+=(char)0x09;
}
msg+=TaxCd; //íàëîãîâîé ãðóïïà 1 áàéò
msg+=Price;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("RegisterSaleDisp(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïîäèòîã
//Print - Åñëè 1 ïîäèòîã ïå÷àòàåòñÿ.
//Display - Åñëè 1 ñóììà ïîäèòîãà âûâîäèòñÿ íà äèñïëåé.
//Abs - Àáñîëþòíîå ëè çíà÷÷åíèå false òî Perc â ïðîöåíòàõ
//Perc - Ñêèäêà èëè íàäáàâêà â ïðîöåíòàõ (+-99.9) â çàâèñèìîñòè îò çíàêà
//Sum - Ñóììà ïîäèòîãà â òåêóùåì ôèñêàëüíîì ÷åêå /äî 10 áàéòà/
MyError FP300KZ::Subtotal(std::string Print,std::string Display, bool Abs, double Perc,double& Sum)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSubtotal;
msg+=Print+Display;
if(Perc!=0) //Ñêèäêà ëèáî íàöåíêà
{
if(Abs) msg+=';'+ Utility::FloatToStdStr(Perc,2);
else msg+=','+ Utility::FloatToStdStr(Perc,2);
}
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
Sum= Utility::fromString<double>(Utility::CutBeforeFirst(str,','))/M();
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("Subtotal(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Îïëàòà (èòîã)
//Line1 - Ïåðâàÿ ñòðîêà òåêñòà äî 36 áàéò
//Line2 - Âòîðàÿ ñòðîêà òåêñòà äî 36 áàéò
//PaidMode - Òèï îïëàòû: 'P' Îïëàòà íàëè÷íûìè; 'N' Îïëàòà â êðåäèò; 'C' Îïëàòà ÷åêîì; 'D' Îïëàòà äåáèòíîé êàðòîé 'I' - Ïðîãðàììèðóåìûé òèï îïëàòû 1 'J' - Ïðîãðàììèðóåìûé òèï îïëàòû 2 'K' - Ïðîãðàììèðóåìûé òèï îïëàòû 3 'L' - Ïðîãðàììèðóåìûé òèï îïëàòû 4
//Îäèí áàéò ñî çíà÷åíèåì +, óêàçûâàþùèé çíàê Amount (ñóììû îïëàòû).
//Amount - Ñóììà îïëàòû /äî 10 çíà÷àùèõ öèôð/.
//Change - Ñäà÷à
MyError FP300KZ::Total(std::string Line1,std::string Line2,std::string PaidMode,double Amount, double& Change)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
Change = 0;
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcTotal;
msg+=Line1;
msg+=(char)0x0A;
msg+=Line2;
msg+=(char)0x09; //<Tab>
msg+=PaidMode; //Òèï îïëàòû
if(Amount>0) msg+='+';
msg+= Utility::FloatToStdStr(Amount,m_Dots);
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b && str.length()>1)
{
if(str[0]=='F') b=false;
std::string s="";
s.append(str,1,str.length()-1);
Change= Utility::StdStrToDouble(s) / M();
if(str[0]=='D') Change=-fabs(Change);
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
{
std::stringstream ss;
ss << "Total(Line1=\"" << Line1 << "\",Line2=\"" << Line2 << "\",PaidMode=" << PaidMode << ",Amount=" << Utility::FloatToStdStr(Amount, 2, '.') << ",Change=" << Utility::FloatToStdStr(Change, 3, '.') << ");";
if (err.ErrorCode != 0) ss << " ErrorCode: " << err.ErrorCode << " ErrorDescription: " << err.ErrorMessage;
Utility::logrotate(PrinterName + "_" + PrinterNumber + ".log", ss.str());
}
return err;
}
//---------------------------------------------------------------------------
//Ñëóæåáíûé ïðèõîä èëè ðàñõîä
//Amount Ñóììà (äî 10 çíà÷àùèõ öèôð).  çàâèñèìîñòè îò çíàêà èíòåðïðåòèðóåòñÿ êàê ïðèõîä èëè ðàñõîä.
//strH - Çàãîëîâîê strF - ïîñëåäíÿÿ ñòðîêà
//ExitCode P Çàÿâêà èñïîëíåíà. Åñëè çàÿâëåííàÿ ñóììà íåíóëåâàÿ, ïðèíòåð ïå÷àòàåò ñëóæåáíûé ÷åê ðåãèñòðèðóþùèé îïåðàöèþ. F Çàÿâêà îòêëîíåíà â ñëó÷àå åñëè: Ñóììà íàëè÷íîñòè â êàññå ìåíüøå ñóììû çàÿâëåííîãî ñëóæåáíîãî ðàñõîäà. Îòêðûò ôèñêàëüíûé èëè íåôèñêàëüíûé ÷åê.
//CashSum Ñóììà íàëè÷íîñòè â êàññå. Ñóììà íàðàñòàþùàÿ ïîñëå ñëóæåáíîãî ïðèõîäà è ïîñëå êàæäîé îïëàòû íàëè÷íûìè.
//ServIn Ñóììà âñåõ êîìàíä “Ñëóæåáíûé ïðèõîä”.
//ServOut Ñóììà âñåõ êîìàíä “Ñëóæåáíûé ðàñõîä”.
MyError FP300KZ::ParishOrConsumption(std::string Oper,std::string Password,double Amount,std::wstring strH,std::wstring strF,std::string& ExitCode,double& CashSum,double& ServIn,double& ServOut)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcParishOrConsumption;
if(PrinterName.find("FP600")!=std::string::npos)
{
if(Amount!=0)
{ msg+=Oper+","; //Äëÿ Áåëàðóñîâ
msg+=Password+","; //Äëÿ Áåëàðóñîâ
msg+= Utility::FloatToStdStr(Amount,2);
}
}else
{
if(Amount!=0)
{
msg+= Utility::FloatToStdStr(Amount,2);
while(strH.length()>0)
{
std::wstring str = Utility::CutBeforeWFirst(strH,L'\n');
msg+='\t'; msg+='h'; msg.append(Utility::ws2s(str),0,48);
}
while(strF.length()>0)
{
std::wstring str = Utility::CutBeforeWFirst(strF,L'\n');
msg+='\t'; msg+='f'; msg.append(Utility::ws2s(str),0,48);
}
}
}
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
ExitCode= Utility::CutBeforeFirst(str,',');
CashSum= Utility::fromString<double>(Utility::CutBeforeFirst(str,','))/M();
ServIn= Utility::fromString<double>(Utility::CutBeforeFirst(str,','))/M();
ServOut= Utility::fromString<double>(str)/M();
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ParishOrConsumption(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïå÷àòü øòðèõ-êîäà
///Type - Òèï øòðèõ êîäà îò 1 äî 5 (1-EAN8, 2-EAN13, 3-Code 128, 4-ITF, 5-ITF)
MyError FP300KZ::PrintBarCode(int Type,std::string Data)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrintBarCode;
msg+= Utility::IntToStdStr(Type);
msg+=',';
msg+=Data;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("PrintBarCode(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Çâóêîâîé ñèãíàë
///\param Hz ×àñòîòà çâóêà
///\param mSec Ìèëèñåêóíä
MyError FP300KZ::Beep(int Hz,int mSec)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
if(Hz==0) Hz=294;
if(mSec==0) mSec=1000/8;
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcBeep;
msg+= Utility::IntToStdStr(Hz);
msg+=',';
msg+= Utility::IntToStdStr(mSec);
msg+=(char)0x05;
std::string str="";
bool b = SendPMessage((uint1*)msg.c_str(),msg.size(),str);
b = b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage=getErrorDesc(ResultCode());
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("Beep(); //")+((err.ErrorCode==0) ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Êîëè÷åñòâî ëîãè÷åñêèõ ìåñò äëÿ ôèñêàëüíûõ çàïèñåé
///\Logical Êîëè÷åñòâî ëîãè÷åñêèõ ìåñò äëÿ ôèñêàëüíûõ çàïèñåé
MyError FP300KZ::FreeFieldsByFiscalMemory(long& Logical)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFreeFieldsByFiscalMemory;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if(b)
{
Logical= Utility::StdStrToInt(Utility::CutBeforeFirst(str,',')); //
}
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("FreeFieldsByFiscalMemory(Logical); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïðîãðàììèðîâàíèå êîíôèãóðàöèîííûõ êëþ÷åé
///Åñëè update=false òî êîìàíäà çàïèñûâàåò èç ÎÇÓ âî ôëýø-ïàìÿòü ãðàôè÷åñêèé ëîãîòèï, âûñîòó ïå÷àòè øòðèõ-êîäà, ïëîòíîñòü ïå÷àòè è äëèíó èìïóëüñà îòêðûâàíèÿ äåíåæíîãî ÿùèêà. Ïîñëå îáíóëåíèÿ ÎÇÓ çíà÷åíèÿ ýòèõ ïàðàìåòðîâ âîññòàíàâëèâàþòñÿ èç ôëýø-ïàìÿòè.
///\param update Åñëè false òî çíà÷åíèÿ êîíôèãóðàçèîííûõ êëþ÷åé íå èçìåíÿþòñÿ, à äàííûå íàñòðîåê ïðèíòåðà çàïèñûâàþòñÿ âî ôëýø-ïàìÿòü
MyError FP300KZ::SwitchPrg(bool update)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,key="";
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSwitchPrg;
if(update)
{
if(Sw8) key+='1'; else key+='0'; //Ñðîêîñòü
if(Sw7) key+='1'; else key+='0'; //Ñðîêîñòü
if(Sw6) key+='1'; else key+='0'; //Ñðîêîñòü
if(Sw5) key+='1'; else key+='0'; //Íå èñïîëüçóåòñÿ
if(Sw4) key+='1'; else key+='0'; //Ðàáîòà äèñïëåÿ ñ êîäîâîé òàáëèöåé Windows 1251
if(Sw3) key+='1'; else key+='0'; //Ðåæèì ïðîçðà÷íîãî äèñïëåÿ
if(Sw2) key+='1'; else key+='0'; //Íå èñïîëüçóåòñÿ
if(Sw1) key+='1'; else key+='0'; //çàïèñü ÷àñòè÷íîé èíôîðìàöèè íà êîíòðîëüíóþ ëåíòó(ñòàðîå: Àâòîìàòè÷åñêàÿ îáðåçêà ëåíòû)
msg+=key;
}
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SwitchPrg("+key+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Äëÿ ñîõðàíåíèå ñîêðàù¸ííîé èíôîðìàöèè â ÝÊË
bool FP300KZ::getSmallEJ(bool& val)
{ //val=Sw1;
val=Sw2;
return true;//Âñåãäà true ïîòîìó ÷òî çíà÷åíèå áåð¸òñÿ íå çäåñü.
}
//---------------------------------------------------------------------------
//Äëÿ ñîõðàíåíèå ñîêðàù¸ííîé èíôîðìàöèè â ÝÊË
MyError FP300KZ::setSmallEJ(bool val)
{ //Sw1=val;
Sw2=val;
return SwitchPrg(true); //Ñîõðàíèì ïåðåêëþ÷àòåëè
}
//---------------------------------------------------------------------------
//Ðåæèì ïðîçðà÷íîãî äèñïëåÿ
bool FP300KZ::getDisplayTransparent(bool& val)
{ val=Sw3;
return true;//Âñåãäà true ïîòîìó ÷òî çíà÷åíèå áåð¸òñÿ íå çäåñü.
}
//---------------------------------------------------------------------------
//Ðåæèì ïðîçðà÷íîãî äèñïëåÿ
MyError FP300KZ::setDisplayTransparent(bool val)
{ Sw3=val;
return SwitchPrg(true);
}
//---------------------------------------------------------------------------
///<Ðàáîòà äèñïëåÿ ñ êîäîâîé òàáëèöåé Windows 1251
bool FP300KZ::getDisplayWin1251(bool& val)
{
val=Sw4;
return true;//Âñåãäà true ïîòîìó ÷òî çíà÷åíèå áåð¸òñÿ íå çäåñü.
}
//---------------------------------------------------------------------------
///<Ðàáîòà äèñïëåÿ ñ êîäîâîé òàáëèöåé Windows 1251
MyError FP300KZ::setDisplayWin1251(bool val)
{ Sw4=val;
return SwitchPrg(true);
}
//---------------------------------------------------------------------------
//Ïîëó÷èòü ñêîðîñòü ïîðòà èç êîíôèãà "bps"
int FP300KZ::getComSpeed()
{
int speed=0;
if(!Sw6 && !Sw7 && !Sw8) speed=1200;
if(!Sw6 && !Sw7 && Sw8) speed=2400;
if(!Sw6 && Sw7 && !Sw8) speed=4800;
if(!Sw6 && Sw7 && Sw8) speed=9600;
if( Sw6 && !Sw7 && !Sw8) speed=19200;
if( Sw6 && !Sw7 && Sw8) speed=38400;
if( Sw6 && Sw7 && !Sw8) speed=57600;
if( Sw6 && Sw7 && Sw8) speed=115200;
return speed;
}
//---------------------------------------------------------------------------
//Óñòàíîâèòü ñêîðîñòü ïîðòà
bool FP300KZ::setComSpeed(int Speed)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
bool b=false;
if(Speed==1200) {Sw6=0; Sw7=0; Sw8=0; b=true;}
if(Speed==2400) {Sw6=0; Sw7=0; Sw8=1; b=true;}
if(Speed==4800) {Sw6=0; Sw7=1; Sw8=0; b=true;}
if(Speed==9600) {Sw6=0; Sw7=1; Sw8=1; b=true;}
if(Speed==19200) {Sw6=1; Sw7=0; Sw8=0; b=true;}
if(Speed==38400) {Sw6=1; Sw7=0; Sw8=1; b=true;}
if(Speed==57600) {Sw6=1; Sw7=1; Sw8=0; b=true;}
if(Speed==115200) {Sw6=1; Sw7=1; Sw8=1; b=true;}
if (b)
{
err = SwitchPrg(true); //Çàïèøåì
}else
{
err.ErrorCode = 1;
err.ErrorMessage = "Íå òà ñêîðîñòü!";
}
return b;
}
//---------------------------------------------------------------------------
///Êîìàíäà î÷èùàåò äèñïëåé.
///Åñëè îòêðûò ôèñêàëüíûé ÷åê è Sw3 â ïîëîæåíèè OFF, î÷èùàåòñÿ òîëüêî íèæíÿÿ ñòðîêà.
MyError FP300KZ::DisplayClear()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x24,0x20,fcDisplayClear,0x05};
std::string answer;
bool b=SendPMessage(msg,sizeof(msg),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DisplayClear(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Âûâîä òåêñòà â íèæíþþ ñòðîêó äèñïëåÿ
//Text - Äî 20 ñèìâîëîâ òåêñòà
MyError FP300KZ::DispalyLower(std::string Text)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcDispalyLower;
msg+=Text;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DispalyLower(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Âûâîä òåêñòà â âåðõíþþ ñòðîêó äèñïëåÿ
///Text - Äî 20 ñèìâîëîâ òåêñòà
MyError FP300KZ::DispalyUpper(std::string Text)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcDispalyUpper;
msg+=Text;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DispalyUpper(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Âûâîä íà äèñïëåé ñâîáîäíîãî òåêñòà
///Òåêñò (äî 40 ñèìâîëîâ), êîòîðûé âûâîäèòñÿ íà äèñïëåé. Åñëè íåîáõîäèìî âûâåñòè ñèìâîë ASCII ìåíüøå ÷åì 20h (óïðàâëÿþùèå ñèìâîëû) òî îíè óâåëè÷èâàþòñÿ íà 40h è ïðåäâàðÿþòñÿ 10h.
MyError FP300KZ::DispalyFree(std::string Text)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcDispalyFree;
msg+=Text;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DispalyFree(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///×òåíèå çàïðîãðàììèðîâàííûõ íàëîãîâûõ ñòàâîê
///\param Decimals Òî÷åê ïîñëå çàïÿòîé 0,1 èëè 2
///\param bA,bB,bC,bD Îçíà÷àåò ðàçðåøåíèå íàëîãîâîé ãðóïïû
///\param TaxA Íàëîãîâàÿ ñòàâêà À
///\param TaxB Íàëîãîâàÿ ñòàâêà Á
///\param TaxC Íàëîãîâàÿ ñòàâêà Â
///\param TaxD Íàëîãîâàÿ ñòàâêà Ã
MyError FP300KZ::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)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetTaxRates;
msg+=(char)0x05;
std::string str="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
if(b)
{
Decimals= Utility::CutBeforeFirst(str,',');
m_Dots= Utility::StdStrToInt(Decimals); //Çàïîëíÿåì ãëîáàëüíóþ ïåðåìåííóþ
if(PrinterName.find("FP600")!=std::string::npos)
{
Rounding= Utility::CutBeforeFirst(str,','); //Äëÿ Áåëàðóñîâ îêðóãëåíèå
}
bA=str[0]=='1'; bB=str[1]=='1'; bC=str[2]=='1'; bD=str[3]=='1';
Utility::CutBeforeFirst(str,',');
TaxA= Utility::CutBeforeFirst(str,',');
TaxB= Utility::CutBeforeFirst(str,',');
TaxC= Utility::CutBeforeFirst(str,',');
TaxD=str;
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("GetTaxRates(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Óñòàíîâêà ïîëîæåíèÿ äåñÿòè÷íîé òî÷êè è íàëîãîâûõ ñòàâîê
///\param Decimal 0,1 èëè 2 çíàêà ïîñëå çàïÿòîé
MyError FP300KZ::SetTaxRates(int Decimal,std::string Rounding,std::string TaxA, std::string TaxB, std::string TaxC, std::string TaxD)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetTaxRates;
str+= Utility::IntToStdStr(Decimal)+","; //0,1,2 çíàêà ïîñëå çàïÿòîé
if(PrinterName.find("FP600")!=std::string::npos) //Äëÿ áåëîðóñîâ îêðóãëåíèå
{
str+=Rounding+',';
}
if(TaxA!="") str+='1'; else str+='0'; //Ðàçðåøåíà èëè íåò
if(TaxB!="") str+='1'; else str+='0'; //Ðàçðåøåíà èëè íåò
if(TaxC!="") str+='1'; else str+='0'; //Ðàçðåøåíà èëè íåò
if(TaxD!="") str+='1'; else str+='0'; //Ðàçðåøåíà èëè íåò
str+=",";
str+=TaxA+',';
str+=TaxB+',';
str+=TaxC+',';
str+=TaxD;
msg+=str;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("SetTaxRates("+answer+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ñòàòóñ ôèñêàëüíîé òðàíçàêöèè
///\param Open Îòêðûò ôèñêàëüíûé èëè ñëóæåáíûé ÷åê
///\param Items Êîëè÷åñòâî çàðåãèñòðèðîâàííûõ ïðîäàæ â òåêóùåì èëè ïîñëåäíåì ôèñêàëüíîì ÷åêå.
///\param Amount Ñóììà ïîñëåäíåãî ôèñêàëüíîãî ÷åêà
///\param Tender Ñóììà îïëàòû òåêóùåãî èëè ïîñëåäíåãî ÷åêà.
MyError FP300KZ::FiscalTransactionsStatus(bool& Open,int& Items,double& Amount,double& Tender)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFiscalTransactionsStatus;
msg+='T';
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (b)
{
Open = Utility::CutBeforeFirst(answer, ',') == "1";
Items = Utility::StdStrToInt(Utility::CutBeforeFirst(answer, ','));
Amount = Utility::fromString<double>(Utility::CutBeforeFirst(answer, ',')) / M();
Tender = Utility::fromString<double>(answer) / M();
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("FiscalTransactionsStatus(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Äèàãíîñòè÷åñêàÿ èíôîðìàöèÿ
MyError FP300KZ::DiagnosticInfo()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = {0x01,0x20,0x20,fcDiagnosticInfo,0x05};
std::string answer="";
bool b=SendPMessage(msg,sizeof(msg),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
//<Name><FwRev><Sp><FwDate><Sp><FwTime>,<Chk>,<Sw>,<ZNM>
PrinterName= Utility::CutBeforeFirst(answer,',');
PrinterVersion= Utility::CutBeforeFirst(answer,','); //Âåðñèÿ äàòà âðåìÿ
Utility::CutBeforeFirst(answer,','); //Êîíòðîëüíàÿ ñóììà
std::string Sw18 = Utility::CutBeforeFirst(answer,',');//Ïîëîæåíèå êîíôèãóðàöèîííûõ ïåðåêëþ÷àòåëåé Sw1 äî Sw8. Ñòðîêà 4 áàéòà ñîñòîÿùàÿ èç0 è1
Sw8=Sw18[0]=='1';
Sw7=Sw18[1]=='1';
Sw6=Sw18[2]=='1';
Sw5=Sw18[3]=='1';
Sw4=Sw18[4]=='1';
Sw3=Sw18[5]=='1';
Sw2=Sw18[6]=='1';
Sw1=Sw18[7]=='1';
PrinterNumber=answer; //Çàâîäñêîé íîìåð - 12 áàéò.
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (PrinterName == "FPG-350")
{
err.ErrorCode = 1;
err.ErrorMessage = "Ýòî äðàéâåð äëÿ ñòàðûõ ïðèíòåðîâ áåç îòïðàâêè â ÎÔÄ à íå äëÿ íîâûõ!";
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DiagnosticInfo(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïîëó÷åíèå âðåìåíè ñ íà÷àëà îòêðûòèÿ ñìåíû.
MyError FP300KZ::GetTimeZReport(int & time)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
unsigned char msg[5] = { 0x01,0x20,0x20,fcGetTimeZReport,0x05 };
std::string answer = "";
bool b = SendPMessage(msg, sizeof(msg), answer);
b = b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (b)
{
time = Utility::StdStrToInt(answer);
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName + "_" + PrinterNumber + ".log", std::string("DiagnosticInfo(); //") + (b ? "OK=" : "ERROR=") + Utility::IntToStdStr(err.ErrorCode) + " " + err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ðàáîòà ñ ýëåêòðîííîé êîíòðîëüíîé ëåíòîé
MyError FP300KZ::EJ(std::string Cmd)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcEJ;
msg+=Cmd;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("EJ("+Cmd+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ïå÷àòü ýëåêòðîííîé êîíòðîëüíîé ëåíòû ñ íà÷àëà (ïåðâàÿ ñòðîêà) íîðìàëüíûì øðèôòîì. Íå Íå ïå÷àòàþòñÿ ñëóæåáíûå ÷åêè, ÷åêè ñëóæåáíîãî ïðèõîäà è ðàñõîäà è Õ-îò÷åò. Ïîëå Data ïóñòîå.
MyError FP300KZ::PrintEJ()
{
return EJ("PL");
}
//---------------------------------------------------------------------------
///Ñåðâèñíàÿ î÷èñòêà êîíòðîëüíîé ëåíòû
MyError FP300KZ::ServiceClearEJ()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcServiceClearEJ;
msg+='F';
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if(b)
{
if(answer!="P") b=false; //'P' (óñïåøíî) èëè 'F' (ãðåøêà)
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ServiceClearEJ(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
///Ñåðâèñíîå îáíóëåíèå ÎÇÓ
MyError FP300KZ::ServiceClearRAM()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcServiceClearRAM;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("ServiceClearRAM(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïå÷àòàåòñÿ ëè ãðàôè÷åñêèé ëîãîòèï
///\param Enable Ðàçðåøåíî ëèáî çàïðåùåíî ïå÷àòàòü ãðàôè÷åñêèé ëîãîòèï.
///\param Height Âûñîòà ãðàôè÷åñêîãî ëîãîòèïà
MyError FP300KZ::getPrintLogo(bool& Enable,int& Height)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string str;
err = PrintSetup("I", "L", str);
if(err.ErrorCode==0)
{
Enable = Utility::CutBeforeFirst(str,',')=="1";
Height = Utility::StdStrToInt(str);
}
return err;
}
//---------------------------------------------------------------------------
//Ïå÷àòàòü ëè ãðàôè÷åñêèé ëîãîòèï
///\param Enable Ðàçðåøåíî ëèáî çàïðåùåíî ïå÷àòàòü ãðàôè÷åñêèé ëîãîòèï.
///\param Height Âûñîòà ãðàôè÷åñêîãî ëîãîòèïà
MyError FP300KZ::setPrintLogo(bool Enable,int Height)
{
std::string str="";
if(Enable) str+="1,"; else str+="0,";
str+= Utility::IntToStdStr(Height);
std::string Answer="";
return PrintSetup("L",str,Answer);
}
//---------------------------------------------------------------------------
//Ïðîãðàììèðîâàíèå ãðàôè÷åñêîãî ëîãîòèïà 576x96 òî÷ååê
//RowNum - íîìåð ëèíèè
//Data - øåñòàäöàòåðè÷íàÿ ñòðîêà
MyError FP300KZ::PrgGraphicLogo(int RowNum, std::string Data)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrgGraphicLogo;
msg+= Utility::IntToStdStr(RowNum);
msg+=',';
msg+=Data;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("PrgGraphicLogo("+ Utility::IntToStdStr(RowNum)+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïðîãðàììèðîâàíèå ãðàôè÷åñêîãî ëîãîòèïà
///\param RowNum - Íîìåð ñòðîêè
///\param Data - Ðåçóëüòàò "01010101110"
MyError FP300KZ::getGraphicLogo(int RowNum, std::string &Data)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,res;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrgGraphicLogo;
msg+='R'+ Utility::IntToStdStr(RowNum);
msg+=(char)0x05;
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),res);
if(b)
{
Data="";
for(uint4 i=0;i<res.size()/2;i++)
{
std::string sub=res.substr(i*2,2);
int ch=0;
#if defined( _VC )
sscanf(sub.c_str(),"%X",&ch);
#endif
#if defined( _BORLAND )
AnsiString str=sub.c_str();
ch=StrToInt("0x"+str);
#endif
//Ïðåîáðàçóåì â ñòðîêó èç 1 è 0
if(getBitVal(ch,7)) Data+='0'; else Data+='1';
if(getBitVal(ch,6)) Data+='0'; else Data+='1';
if(getBitVal(ch,5)) Data+='0'; else Data+='1';
if(getBitVal(ch,4)) Data+='0'; else Data+='1';
if(getBitVal(ch,3)) Data+='0'; else Data+='1';
if(getBitVal(ch,2)) Data+='0'; else Data+='1';
if(getBitVal(ch,1)) Data+='0'; else Data+='1';
if(getBitVal(ch,0)) Data+='0'; else Data+='1';
}
}
else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("getGraphicLogo("+ Utility::IntToStdStr(RowNum)+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ôèñêàëèçàöèÿ
//<Password>,<Serial>
MyError FP300KZ::Fiscalization(std::string Password,std::string Serial,std::string& ErrCode)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFiscalization;
msg+=Password+","+Serial;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
ErrCode=answer; //Êîä îøèáêè
m_ErrCode=answer;
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("Fiscalization("+Password+","+Serial+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Ïåðåðåãèñòðàöèÿ
//<OldPwd>,<Password>,<RNN>,<RNM>
MyError FP300KZ::reFiscalization(std::string OldPwd,std::string Password,std::string RNN,std::string RNM,std::string& ErrCode)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFiscalization;
msg+=Password+","+OldPwd+","+RNN+","+RNM; //Áûëà îøèáêà â äîêóìåíòàöèè (ñòàðûé è íîâûé ïàðîëü ïîìåíÿë ìåñòàìè)
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
ErrCode=answer;
m_ErrCode=answer;
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("reFiscalization("+OldPwd+","+Password+","+RNN+","+RNM+"); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Èíôîðìàöèÿ î ñóììå íàêîïëåíèé çà äåíü
MyError FP300KZ::AmountOfSavingsPerDay(double& TaxA,double& TaxB,double& TaxC,double& TaxD,double& TaxE)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcAmountOfSavingsPerDay;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
TaxA= Utility::fromString<double>(Utility::CutBeforeFirst(answer,','))/M();//TaxA
TaxB= Utility::fromString<double>(Utility::CutBeforeFirst(answer,','))/M();//TaxB
TaxC= Utility::fromString<double>(Utility::CutBeforeFirst(answer,','))/M();//TaxC
TaxD= Utility::fromString<double>(Utility::CutBeforeFirst(answer,','))/M();//TaxD
TaxE= Utility::fromString<double>(Utility::CutBeforeFirst(answer,','))/M();//TaxE
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("AmountOfSavingsPerDay(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
MyError FP300KZ::DepartmentReport()
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcDepartmentReport;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if (!b)
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("DepartmentReport(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
MyError FP300KZ::GetLastPrintedDocNumber(int& num)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
num = 0;
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcGetLastPrintedDocNumber;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
num = Utility::StdStrToInt(answer);
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("GetLastPrintedDocNumber(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------
//Èíôîðìàöèÿ î ïîñëåäíåé ôèñêàëüíîé çàïèñè
///\param Clos Íîìåð ïîñëåäíåé ôèñêàëüíîé çàïèñè - 4 áàéòà.
///\param Rec Êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü - 4 áàéòà.
///\param Total Îáùàÿ ñóììà ïðîäàæ çà äåíü - 12 áàéò ñî çíàêîì.
///\param VAT Îáùàÿ ñóììà íàëîãîâ çà äåíü - 12 áàéò ñî çíàêîì.
///\param Date Äàòà ïîñëåäíåé ôèñêàëüíîé çàïèñè - 6 áàéò /DDMMYY/.
MyError FP300KZ::LatestFiscalRecord(std::string& Clos,int& Rec, float& Total,float& VAT,std::string& Date)
{
MyError err;
err.ErrorCode = 0;
err.ErrorMessage = "";
std::string msg,str;
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcLatestFiscalRecord;
msg+=(char)0x05;
std::string answer="";
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
if(b)
{
Clos= Utility::CutBeforeFirst(answer,',');
if(PrinterName.find("FP600")==std::string::npos)
Rec= Utility::StdStrToInt(Utility::CutBeforeFirst(answer,','));
else
Rec=-1;
Total= Utility::fromString<float>(Utility::CutBeforeFirst(answer,','));
VAT= Utility::fromString<float>(Utility::CutBeforeFirst(answer,','));
Date=answer;
}else
{
err.ErrorCode = ResultCode();
err.ErrorMessage = getErrorDesc(err.ErrorCode);
}
if (m_SaveLog)
Utility::logrotate(PrinterName+"_"+PrinterNumber + ".log",std::string("GetLastPrintedDocNumber(); //")+(b ? "OK=" : "ERROR=")+ Utility::IntToStdStr(err.ErrorCode)+" "+ err.ErrorMessage);
return err;
}
//---------------------------------------------------------------------------