2182 lines
84 KiB
Plaintext
2182 lines
84 KiB
Plaintext
//! FP300KZ
|
||
/*!
|
||
Êëàññ ïðèíòåðà FP300KZ
|
||
\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__
|
||
//---------------------------------------------------------------------------
|
||
//#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());
|
||
//#if defined( _VC )
|
||
// CreateDirectoryA(path.c_str(), NULL); //Ïðîáóåì ñîçäàòü ïàïêó
|
||
//#endif
|
||
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;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
MyStatus::MyStatus()
|
||
{
|
||
for(int i=0;i<8;i++)
|
||
for(int j=0;j<6;j++) s[j][i]=false;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void MyStatus::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 MyStatus::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->bOpen) 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(SessionSec(sec) && 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 m_ErrorCode;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
FP300KZ::FP300KZ()
|
||
{
|
||
cPort=new ComPort();
|
||
Status=new MyStatus();
|
||
CheckCount=0;
|
||
for(int i=0;i<sizeof(ReadAr);i++) ReadAr[i]=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;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
/*function FP_SendPMessage(var FP:TFP;cmd:TFiscalCommands;const Args:AnsiString;var ReceivedArguments:AnsiString;var ReceivedStatus:TReceivedStatus):integer;
|
||
var
|
||
ReceivedMessage,
|
||
packedCommand:AnsiString;
|
||
i:integer;
|
||
begin
|
||
Result:=FPE_NOTANSVER;
|
||
FillChar(ReceivedStatus,sizeof(ReceivedStatus),$FF);
|
||
ReceivedMessage:='';
|
||
if FP_Serial_Open(FP) then
|
||
begin
|
||
FP.LastCommand:=FiscalCommands[cmd];
|
||
for i := 0 to MSG_SEND_RETRIES-1 do
|
||
begin
|
||
packedCommand:=FP_PackMessage(FP,Args);
|
||
if FP_Serial_WriteToComPort(FP,packedCommand[1], Length(packedCommand)) then
|
||
begin
|
||
if FP_ReceiveMessage(FP,ReceivedMessage) = FPE_NACK then
|
||
begin
|
||
// NACK or no answer received so wait a little untill the next retry
|
||
Sleep(MSG_SEND_RETRY_WAIT);
|
||
continue;
|
||
end;
|
||
Result:=FP_UnpackMessage(FP,ReceivedMessage,ReceivedArguments,ReceivedStatus);
|
||
break;
|
||
end;
|
||
end;
|
||
FP_Serial_Close(FP);
|
||
end;
|
||
end;*/
|
||
//---------------------------------------------------------------------------
|
||
/// Ïàêóåì è îòïðàâëÿåì ñîîáùåíèå íà ïðèíòåð ïîòîì æä¸ì îòâåòà
|
||
///\param msg Ññûëêà íà ïåðâûé ñèìâîë ìàññèâà ñèìâîëîâ
|
||
///\param size Ðàçìåð ìàññèâà
|
||
///\param answer Îòâåò â âèäå ñòðîêè
|
||
///\Åñëè ðåçóëüòàò true òî âñ¸ îê
|
||
bool FP300KZ::SendPMessage(uint1* msg,uint1 size,std::string &answer)
|
||
{
|
||
m_ErrorCode=0; //Îáíóëÿåì êîä îøèáêè ïåðåä âûïîëíåíèåì êîìàíäû
|
||
if(!cPort->bOpen) { m_ErrorCode=103; return false; }
|
||
|
||
CommandName=msg[3]; //Ñîõðàíÿåì íîìåð ïîñëåäíåé êîìàíäû
|
||
for(int i=0;i<sizeof(ReadAr);i++) ReadAr[i]=0; //Î÷èùàåì áóôåð îòâåòà.
|
||
|
||
bool result=false; //Õîòü ÷òîòî ïîëó÷èëè
|
||
getNextSeq();//Óâåëè÷èì íà 1
|
||
if(cPort->bOpen)
|
||
{
|
||
for(int i=0;i<5;i++) //Åñëè ïîñëå 5 ïîïûòîê íåò îòâåòà òî ïðèíòåð íåèñïðàâåí...
|
||
{
|
||
//Îòïðàâëÿþ çàïðîñ íà ïðèíòåð
|
||
msg[1]=0x20+size-1; //Ðàçìåð
|
||
msg[2]=FrameSeqNumber;
|
||
unsigned int crc=MakeCRC(msg,1,size);
|
||
cPort->Write(msg,size); //Îòïðàâëÿåì äàííûå
|
||
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) //Íè÷åãî íå ïðî÷èòàë
|
||
{
|
||
#ifdef __WXMSW__
|
||
wxThread::Sleep(60);
|
||
#endif // __WXMSW__
|
||
#ifdef _BORLAND
|
||
Sleep(60);
|
||
#endif
|
||
isOk=false;
|
||
m_ErrorCode=103; //Êîä îøèáêè
|
||
break;
|
||
}else
|
||
if(start==0x15) //NACK îøèáêà â êîíòðîëüíîé ñóììå çàïðîñ çàíîâî îòïðàâèòü
|
||
{
|
||
#ifdef __WXMSW__
|
||
wxThread::Sleep(60);
|
||
#endif // __WXMSW__
|
||
#ifdef _BORLAND
|
||
Sleep(60);
|
||
#endif
|
||
isOk=false;
|
||
break;
|
||
}else
|
||
if(start==0x16) //SYN êîììàíäà ïîäîæäàòü äàííûå ïîñûëàåòñÿ êàæäûå 60ms
|
||
{
|
||
#ifdef __WXMSW__
|
||
wxThread::Sleep(60);
|
||
#endif // __WXMSW__
|
||
#ifdef _BORLAND
|
||
Sleep(60);
|
||
#endif
|
||
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(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::OpenCOMPort(int ComNumber,int BaudRate)
|
||
{
|
||
if(ComNumber>=0)
|
||
cPort->ComNumber=ComNumber;
|
||
if(BaudRate>=0)
|
||
cPort->BaudRate=BaudRate;
|
||
|
||
cPort->Close();
|
||
|
||
if(cPort->Open(cPort->ComNumber))
|
||
{
|
||
if(!cPort->Setup(0))
|
||
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 ));
|
||
}
|
||
*/
|
||
//---------------------------------------------------------------------------
|
||
///Ïîñòðîéêà CRC ñïåöèàëüíîãî äëÿ ýòîãî ïðèíòåðà
|
||
//BufStart - Ñ êàêîãî áàéòà íà÷èíàòü ïîäñ÷¸ò
|
||
//BufEnd - Ïî êàêîé áàéò ñ÷èòàòü (íå äëèíà)
|
||
unsigned int MakeCRC(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;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Èíèöèàëèçàöèÿ ïåðåìåííûõ PrinterName PrinterVersion PrinterNumber PrinterDecimal
|
||
//Áåç êîòîðûõ ïðèíòåð íå ìîæåò ðàáîòàòü...
|
||
bool FP300KZ::PrinterInit()
|
||
{
|
||
bool b=DiagnosticInfo();
|
||
if(b)
|
||
{
|
||
bool bA,bB,bC,bD;
|
||
std::string Decimal,r,TaxA,TaxB,TaxC,TaxD;
|
||
b=b && GetTaxRates(Decimal,r,bA,bB,bC,bD,TaxA,TaxB,TaxC,TaxD);
|
||
// if(b) b=b && fp->GetStatusFP();
|
||
}
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïîëó÷åíèå áàéòîâ ñòàòóñà ïðèíòåðà 4A
|
||
bool FP300KZ::GetStatusFP()
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetStatusFP(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Àííóëÿöèÿ (ñòîðíî) ôèñêàëüíîãî ÷åêà
|
||
bool FP300KZ::CancelFiscalInv()
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("CancelFiscalInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îòêðûòèå ôèñêàëüíîãî (êëèåíòñêîãî) ÷åêà
|
||
///OpCode - Íîìåð îïåðàòîðà 1..16
|
||
///OpPwd - Ïàðîëü îïåðàòîðà 4 - 6 öèôð
|
||
///TillNmb - Íîìåð êàññîâîãî ìåñòà öåëîå ÷èñëî 1..99999
|
||
bool FP300KZ::OpenFiscalInv(int OpCode,std::string OpPwd,int TillNmb)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcOpenFiscalInv;
|
||
msg+=IntToStdStr(OpCode)+","+OpPwd+","+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)
|
||
//{ Password=OpPwd; //Ñîõðàíÿåì ïàðîëü
|
||
//}
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("OpenFiscalInv(OpCode="+IntToStdStr(OpCode)+",OpPwd=****,TillNmb="+IntToStdStr(TillNmb)+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Çàêðûòèå ôèñêàëüíîãî ÷åêà
|
||
bool FP300KZ::CloseFiscalInv()
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("CloseFiscalInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îòêðûòèå íåôèñêàëüíîãî ÷åêà
|
||
bool FP300KZ::OpenServiceInv()
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("OpenServiceInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Çàêðûòèå íåôèñêàëüíîãî ÷åêà
|
||
///TODO îòâåò: Êîëè÷åñòâî âñåõ íàïå÷àòàííûõ ÷åêîâ (ôèñêàëüíûõ è ñëóæåáíûõ) ñ ìîìåíòà ïîñëåäíåãî çàêðûòèÿ ñìåíû äî òåêóùåãî ìîìåíòà /4 áàéòà/.
|
||
bool FP300KZ::CloseServiceInv(int& count)
|
||
{
|
||
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=fromString<int>(str);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("CloseServiceInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îòêðûòèå ÷åêà âîçâðàòà
|
||
/**OpCode - Íîìåð îïåðàòîðà 1..16
|
||
* OpPwd - 4 - 6 öèôð
|
||
* TillNmb - Íîìåð êàññîâîãî ìåñòà /öåëîå ÷èñëî 1..99999/
|
||
*/
|
||
bool FP300KZ::OpenBackInv(int OpCode,std::string OpPwd,int TillNmb)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcOpenBackInv;
|
||
msg+=IntToStdStr(OpCode)+','+OpPwd+','+IntToStdStr(TillNmb);
|
||
msg+=(char)0x05;
|
||
std::string answer;
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("OpenBackInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïå÷àòü äóáëèêàòà ÷åêà
|
||
bool FP300KZ::PrintDuplicateInv()
|
||
{
|
||
unsigned char msg[6] = {0x01,0x25,0x20,fcPrintDuplicateInv,0x31,0x05};
|
||
std::string answer;
|
||
bool b=SendPMessage(msg,sizeof(msg),answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrintDuplicateInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
/** Óñòàíîâêà íàèìåíîâàíèé äîïîëíèòåëüíûõ òèïîâ îïëàòû
|
||
Option - 1..4 íîìåð òèïà îïëàòû
|
||
Name - Íàèìåíîâàíèå òèïà îïëàòû (åñëè name = '' òî âåðí¸ò òåêóùåå)
|
||
*/
|
||
bool FP300KZ::SetAddTypesOfPayment(char Option, std::wstring& Text)
|
||
{
|
||
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(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=s2ws(answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetAddTypesOfPayment(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïå÷àòàòü äíåâíîé îò÷¸ò ñ ãàøåíèåì
|
||
bool FP300KZ::PrintZReport()
|
||
{
|
||
bool b=PrintEJ(); //ïå÷àòàåì êîíòðîëüíóþ ëåíòó
|
||
if(b) b=b && EJ("E"); //Îò÷èùÿÿåì êîíòðîëüíóþ ëåíòó
|
||
if(b) b=b && DailyFinancialReport('1'); //Ñàì Z îò÷¸ò
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïå÷àòàòü äíåâíîé îò÷¸ò áåç ãàøåíèÿ
|
||
bool FP300KZ::PrintXReport()
|
||
{
|
||
return DailyFinancialReport('3');
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïå÷àòàåò ñòðîêó òåêñòà (íà ñëóæåáíîì è íà ôèñêàëüíîì)
|
||
bool FP300KZ::PrintLine(std::wstring line)
|
||
{
|
||
bool b=PrintFreeTextInFiscalInv(ws2s(line)); //TODO ïîäïðàâèòü íà ru-ru.1251 ðîâåðèòü â èíòåðíåòå
|
||
if(!b) b=PrintFreeTextInServiceInv(ws2s(line)); //Ïå÷àòü ñâîáîäíîãî òåêñòà â íåôèñêàëüíîì ÷åêå
|
||
return b;
|
||
|
||
// bool b=PrintFreeTextInFiscalInv(WStringToString(line, std::locale(""),'?')); //TODO ïîäïðàâèòü íà ru-ru.1251 ðîâåðèòü â èíòåðíåòå
|
||
// if(!b) b=PrintFreeTextInServiceInv(WStringToString(line, std::locale(""),'?')); //Ïå÷àòü ñâîáîäíîãî òåêñòà â íåôèñêàëüíîì ÷åêå
|
||
// return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Äíåâíîé ôèíàíñîâûé îò÷åò
|
||
///'0' - Z îò÷¸ò áåç ðåãèñòðîâ
|
||
///'1' - Z îò÷¸ò ñ ðåãèñòðàìè
|
||
///'2' - X îò÷¸ò áåç ðåãèñòðîâ
|
||
///'3' - X îò÷¸ò ñ ñîäåðæàíèåì ðåãèñòðîâ
|
||
bool FP300KZ::DailyFinancialReport(uint1 Option)
|
||
{
|
||
//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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DailyFinancialReport(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îò÷åò ïî íàëîãîâûì ñòàâêàì è ïîëîæåíèþ äåñÿòè÷íîé òî÷êè çà ïåðèîä
|
||
///Start - Äàòà íà÷àëà ïåðèîäà – DDMMYY /6 áàéò/
|
||
///End - Äàòà îêîí÷àíèÿ ïåðèîäà – DDMMYY /6 áàéò/
|
||
bool FP300KZ::ReportOnTaxRates(std::string Start,std::string End) //Îò÷åò ïî íàëîãîâûì ñòàâêàì è ïîëîæåíèþ äåñÿòè÷íîé òî÷êè çà ïåðèîä
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ReportOnTaxRates(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïîëíûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé äàòàìè
|
||
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà îò 4 äî 6 öèôð.
|
||
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì 'X'. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
|
||
///Start - Íà÷àëüíàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
|
||
///End - Êîíå÷íàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
|
||
///Åñëè âòîðîé ïàðàìåòð îòñóòñòâóåò, êîìàíäà ãåíåðèðóåò ìåñÿ÷íûé èëè ãîäîâîé îò÷åò. Ñèíòàêñèñ â ýòîì ñëó÷àå:
|
||
///Start Ìåñÿö - 4 áàéòà (MMYY) äëÿ ìåñÿ÷íîãî îò÷åòà.
|
||
///Start Ãîä - 2 áàéòà (YY) äëÿ ãîäîâîãî îò÷åòà.
|
||
bool FP300KZ::FullFiscalReportByDate(std::string Password,std::string Receipts,std::string Start,std::string End)
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("FullFiscalReportByDate(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ñîêðàù¸íûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé äàòàìè
|
||
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà îò 4 äî 6 öèôð.
|
||
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì 'X'. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
|
||
///Start - Íà÷àëüíàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
|
||
///End - Êîíå÷íàÿ äàòà ïåðèîäà. 6 áàéò DDMMYY.
|
||
///Åñëè âòîðîé ïàðàìåòð îòñóòñòâóåò, êîìàíäà ãåíåðèðóåò ìåñÿ÷íûé èëè ãîäîâîé îò÷åò. Ñèíòàêñèñ â ýòîì ñëó÷àå:
|
||
///Start Ìåñÿö - 4 áàéòà (MMYY) äëÿ ìåñÿ÷íîãî îò÷åòà.
|
||
///Start Ãîä - 2 áàéòà (YY) äëÿ ãîäîâîãî îò÷åòà.
|
||
bool FP300KZ::ReduceFiscalReportByDate(std::string Password,std::string Receipts,std::string Start,std::string End)
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ReduceFiscalReportByDate(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïîëíûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé íîìåðàìè ñìåí
|
||
///Îáëàñòü äàííûõ: <Password>, [[<Receipts>]<Start>,<End>]
|
||
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà – îò 4 äî 6 öèôð.
|
||
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì ‘X’. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
|
||
///Start - Íîìåð ïåðâîé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
|
||
///End - Íîìåð ïîñëåäíåé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
|
||
bool FP300KZ::FullFiscalReportByNumber(std::string Password,std::string Receipts,int Start,int End)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFullFiscalReportByNumber;
|
||
|
||
msg+=Password+',';
|
||
msg+=Receipts;
|
||
msg+=IntToStdStr(Start)+','+IntToStdStr(End);
|
||
|
||
msg+=(char)0x05;
|
||
|
||
std::string answer;
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("FullFiscalReportByNumber(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ñîêðàù¸íûé ôèñêàëüíûé îò÷åò çà ïåðèîä çàäàííûé íîìåðàìè ñìåí
|
||
///Îáëàñòü äàííûõ: <Password>, [[<Receipts>]<Start>,<End>]
|
||
///Password - Ïàðîëü íàëîãîâîãî èíñïåêòîðà – îò 4 äî 6 öèôð.
|
||
///Receipts - Íå îáÿçàòåëüíûé ïàðàìåòð: îäèí áàéò ñî çíà÷åíèåì ‘X’. Åñëè îí ïðèñóòñòâóåò, òî â îò÷åòå ïå÷àòàåòñÿ êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü.
|
||
///Start - Íîìåð ïåðâîé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
|
||
///End - Íîìåð ïîñëåäíåé ñìåíû îò÷åòíîãî ïåðèîäà. 4 áàéòà.
|
||
bool FP300KZ::ReduceFiscalReportByNumber(std::string Password,std::string Receipts,int Start,int End)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcReduceFiscalReportByNumber;
|
||
|
||
msg+=Password+',';
|
||
msg+=Receipts;
|
||
msg+=IntToStdStr(Start)+','+IntToStdStr(End);
|
||
|
||
msg+=(char)0x05;
|
||
|
||
std::string answer;
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ReduceFiscalReportByNumber(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Äíåâíîé îò÷åò ïî òèïàì îïëàòû
|
||
bool 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)
|
||
{
|
||
//
|
||
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=CutBeforeFirst(answer,',');
|
||
Credit=CutBeforeFirst(answer,',');
|
||
Debit=CutBeforeFirst(answer,',');
|
||
Cheque=CutBeforeFirst(answer,',');
|
||
Pay1=CutBeforeFirst(answer,',');
|
||
Pay2=CutBeforeFirst(answer,',');
|
||
Pay3=CutBeforeFirst(answer,',');
|
||
Pay4=CutBeforeFirst(answer,',');
|
||
Closure=CutBeforeFirst(answer,',');
|
||
Receipt=CutBeforeFirst(answer,',');
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DailyReportByTypesOfPayment(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îò÷åò ïî àðòèêóëàì
|
||
///'S' - Ïå÷àòàþòñÿ òîëüêî äàííûå àðòèêóëîâ ïî êîòîðûì áûëè ïðîäàæè.
|
||
///'P' - Ïå÷àòàþòñÿ äàííûå âñåõ çàïðîãðàììèðîâàííûõ àðòèêóëîâ.
|
||
bool FP300KZ::ReportByArticle(std::string Option) //#define fcReportByArticle 0x6F //(111)Îò÷åò ïî àðòèêóëàì
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ReportByArticle(Option="+Option+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îò÷åò ïî îïåðàòîðàì
|
||
bool FP300KZ::OperatorReport()
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("OperatorReport(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïðîòÿæêà ëåíòû
|
||
///\param cnt Êîëè÷åñòâî ñòðîê
|
||
bool FP300KZ::FeedPaper(int cnt)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcFeedPaper;
|
||
msg+=IntToStdStr(cnt);
|
||
msg+=(char)0x05;
|
||
std::string answer;
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("FeedPaper(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îòêðûòèå äåíåæíîãî ÿùèêà
|
||
bool FP300KZ::OpenCashDrawer(int mSec)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcOpenCashDrawer;
|
||
if(mSec>0) msg+=IntToStdStr(mSec);
|
||
msg+=(char)0x05;
|
||
std::string answer;
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("OpenCashDrawer(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//<Dept>,<Line1>[<LF><Line2>]
|
||
///Çàäàòü íàèìåíîâàíèå äåïàðòàìåíòà (Ñåêöèè)
|
||
bool FP300KZ::SetDepartmentName(int dept,std::wstring line1,std::wstring line2)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetDepartmentName;
|
||
msg+=IntToStdStr(dept);
|
||
msg+=',';
|
||
msg.append(ws2s(line1),0,36); //Â äîêóìåíòàöèè ìàêñ 36 áàéò
|
||
if(line2.length()>0)
|
||
{
|
||
msg+=(char)10;
|
||
msg.append(ws2s(line2),0,46); //Â äîêóìåíòàöèè ìàêñ 46 áàéò
|
||
}
|
||
msg+=(char)0x05;
|
||
std::string answer;
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetDepartmentName(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïîëó÷èòü èíôîðìàöèþ ïî ñåêöèÿì
|
||
bool FP300KZ::GetDepartmentInfo(int dept,int &RecSales,float &RecSum,int &TotSales,float &TotSum,std::wstring &Line1,std::wstring &Line2)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcGetDepartmentInfo;
|
||
msg+=IntToStdStr(dept);
|
||
msg+=(char)0x05;
|
||
|
||
std::string str="";
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
|
||
if(b)
|
||
{
|
||
if(CutBeforeFirst(str,',')=="P") //Ñåêöèÿ çàïðîãðàììèðîâàííà
|
||
{
|
||
std::string nstr;
|
||
nstr=CutBeforeFirst(str,',');
|
||
RecSales=StdStrToInt(nstr);
|
||
RecSum=fromString<float>(CutBeforeFirst(str,',')); //Íàòóðàëüíîå ÷èñëî â òåêñòîâîì âèäå ñ 2 äåñÿòè÷íûìè çíàêàìè
|
||
nstr=CutBeforeFirst(str,',');
|
||
TotSales=StdStrToInt(nstr);
|
||
TotSum=fromString<float>(CutBeforeFirst(str,',')); //Íàòóðàëüíîå ÷èñëî â òåêñòîâîì âèäå ñ 2 äåñÿòè÷íûìè çíàêàìè
|
||
Line1=s2ws(CutBeforeFirst(str,(char)10));
|
||
Line2=s2ws(str);
|
||
}else
|
||
{
|
||
RecSales=0;
|
||
RecSum=0;
|
||
TotSales=0;
|
||
TotSum=0;
|
||
Line1=L' ';
|
||
Line2=L' ';
|
||
}
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetDepartmentInfo(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îáðåçêà ëåíòû
|
||
bool FP300KZ::CutPaper()
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("CutPaper(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïå÷àòü äèàãíîñòè÷åñêîé èíôîðìàöèè
|
||
bool FP300KZ::PrintDiagnostic()
|
||
{
|
||
unsigned char msg[5] = {0x01,0x20,0x20,fcPrintDiagnostic,0x05};
|
||
std::string answer;
|
||
bool b=SendPMessage(msg,sizeof(msg),answer);
|
||
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrintDiagnostic(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
bool FP300KZ::SetManufacturersSerialNumber(std::string Serial)
|
||
{
|
||
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 && BeforeFirst(answer,',')=="P";
|
||
//Âòîðàÿ ÷àñòü ääîëæíà áûòü "KAZAKHSTAN"
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetManufacturersSerialNumber(Serial="+Serial+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
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 "";
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///×òåíèå ÐÍÍ è ÐÍÌ
|
||
bool FP300KZ::GetRNNAndRNM(std::string &RNN,std::string &RNM)
|
||
{
|
||
unsigned char msg[5] = {0x01,0x24,0x20,fcGetRNNAndRNM,0x05};
|
||
std::string answer;
|
||
bool b=SendPMessage(msg,sizeof(msg),answer);
|
||
RNN=BeforeFirst(answer,',');
|
||
RNM=AfterFirst(answer,',');
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetRNNAndRNM("+RNN+","+RNM+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Óñòàíîâêà ÐÍÍ è ÐÍÌ
|
||
bool FP300KZ::SetRNNAndRNM(std::string RNN,std::string RNM)
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetRNNAndRNM(RNN="+RNN+",RNM="+RNM+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Óñòàíîâêà ïàðîëÿ îïåðàòîðà
|
||
///\param OpCode Íîìåð îïåðàòîðà
|
||
///\param OldPwd Ñòàðûé ïàðîëü
|
||
///\param NewPwd Íîâûé ïàðîëü
|
||
///\return Óñïåõ ëèáî ïðîâàë
|
||
bool FP300KZ::SetOperatorPassword(std::string OpCode,std::string OldPwd,std::string NewPwd)
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetOperatorPassword(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Óñòàíîâêà íàèìåíîâàíèÿ îïåðàòîðà
|
||
///\param OpCode Íîìåð îïåðàòîðà. Îò 1 äî 16 ñòðîêà.
|
||
///\param Pwd Ïàðîëü (4 äî 8 öèôð).
|
||
///\param OpName Íàèìåíîâàíèå îïåðàòîðà (äî 30 ñèìâîëîâ).
|
||
///\return Óñïåõ ëèáî ïðîâàë
|
||
bool FP300KZ::SetOperatorName(std::string OpCode,std::string Pwd,std::string OpName)
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetOperatorName(OpCode="+OpCode+",OpName="+OpName+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Óñòàíîâêà äàòû è âðåìåíè
|
||
///\param date - Äàòà â ôîðìàòå "DD-MM-YY"
|
||
///\param time - âððåìÿ â ôîðìàòå "HH:MM[:SS]"
|
||
bool FP300KZ::SetDateTime(std::string date, std::string time) //#define fcSetDateTime 0x3D //(61)Óñòàíîâêà äàòû è âðåìåíè
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetDateTime;
|
||
msg+=trim(date)+' '+trim(time);
|
||
msg+=(char)0x05;
|
||
std::string str="";
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
|
||
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetDateTime(\"")+date+std::string("\", \"")+time+std::string("\"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïîîëó÷åíèå äàòû è âðåìåíè
|
||
///\param date - Äàòà â ôîðìàòå "DD-MM-YY"
|
||
///\param time - âððåìÿ â ôîðìàòå "HH:MM:SS"
|
||
bool FP300KZ::GetDateTime(unsigned short& De,unsigned short& Me,unsigned short& Ye,unsigned short& Ho,unsigned short& Mi,unsigned short& Se)
|
||
{
|
||
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=fromString<int>(CutBeforeFirst(str,'-'));
|
||
Me=fromString<int>(CutBeforeFirst(str,'-'));
|
||
Ye=fromString<int>(CutBeforeFirst(str,' '));//+2000; çàêîìåíòèë ÷òîá áûëî îäèíàêîâî ñ òåì ÷òî ïðè óñòàíîâêè âðåìåíè
|
||
|
||
Ho=fromString<int>(CutBeforeFirst(str,':'));
|
||
Mi=fromString<int>(CutBeforeFirst(str,':'));
|
||
Se=fromString<int>(str);
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetDateTime(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Óñòàíîâêà HEADER è FOOTER è îïöèé ïå÷àòè
|
||
bool FP300KZ::PrintSetup(std::string Item, std::string Text, std::string& Answer)
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrintSetup(Item="+Item+",Text="+Text+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
bool FP300KZ::PrintFreeTextInServiceInv(std::string Text) //Ïå÷àòü ñâîáîäíîãî òåêñòà â íåôèñêàëüíîì ÷åêå
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrintFreeTextInServiceInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïå÷àòü ñâîáîäíîãî òåêñòà â ôèñêàëüíîì ÷åêå
|
||
bool FP300KZ::PrintFreeTextInFiscalInv(std::string Text)
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrintFreeTextInFiscalInv(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðåãèñòðàöèÿ ïðîäàæè
|
||
///[<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 - Íàäáàâêà èëè ñêèäêà (â çàâèñèìîñòè îò çíàêà) â ïðîöåíòàõ
|
||
bool FP300KZ::RegisterSale(std::wstring L1,std::wstring L2,int dep, std::string TaxCd,double Price,double Qwan,bool Abs,double Perc)
|
||
{
|
||
L1=replaceStrings(L1,L"\n",L" "); //Èçáàâëÿåìñÿ îò ïåðåõîäîâ íà íîâóþ ñòðîêó
|
||
L2=replaceStrings(L2,L"\n",L" "); //Èçáàâëÿåìñÿ îò ïåðåõîäîâ íà íîâóþ ñòðîêó
|
||
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcRegisterSale;
|
||
msg.append(ws2s(L1),0,36); //Â äîêóìåíòàöèè ìàêñ 36 áàéò
|
||
if(L2.length()>0)
|
||
{
|
||
msg+=(char)0x0A;
|
||
msg.append(ws2s(L2),0,36); //Â äîêóìåíòàöèè ìàêñ 36 áàéò
|
||
}
|
||
msg+=(char)0x09;
|
||
if(dep>0)
|
||
{
|
||
msg+=IntToStdStr(dep); //Ïàðàìåòð äåïàðòàìåíò îòäåë â äîêóìåíòàöèè â ñòðîêå êîìàíäû ïðîïóùåí!!!!
|
||
msg+=(char)0x09;
|
||
}
|
||
msg+=TaxCd; //íàëîãîâîé ãðóïïà 1 áàéò
|
||
msg+=FloatToStdStr(Price,m_Dots); //Ó÷èòûâàåì çíàêè ïîñëå çàïÿòîé
|
||
msg+='*'+FloatToStdStr(Qwan,3);
|
||
if(Perc!=0)
|
||
if(Abs) msg+=';'+FloatToStdStr(Perc,m_Dots); // àáñîëþòíîì çíà÷åíèè
|
||
else msg+=','+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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("RegisterSale(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðåãèñòðàöèÿ ïðîäàæè ñ âûâîäîì íà äèñïëåé
|
||
/// [Line]]<Tab><TaxCd><[Sign]Price>[*Qwan][,Perc|;Abs]
|
||
///Line - Ñòðîêà äî 20 áàéòà ñîäåðæàùàÿ òåêñò îïèñûâàþùèé ïðîäàæó.
|
||
///TaxCd - Îäèí áàéò ñîäåðæàùèé áóêâó ñîîòâåòñòâóþùóþ íàëîãîâîé ãðóïïå (À, Á, Â, Ã, Ä).
|
||
///Price - Öåíà åäèíèöû (äî 8 çíà÷àùèõ öèôð).
|
||
bool FP300KZ::RegisterSaleDisp(std::string L1,int dep,std::string TaxCd,std::string Price)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcRegisterSaleDisp;
|
||
|
||
msg+=L1;
|
||
msg+=(char)0x09;
|
||
if(dep>0)
|
||
{
|
||
msg+=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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("RegisterSaleDisp(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïîäèòîã
|
||
//Print - Åñëè ‘1’ – ïîäèòîã ïå÷àòàåòñÿ.
|
||
//Display - Åñëè ‘1’ – ñóììà ïîäèòîãà âûâîäèòñÿ íà äèñïëåé.
|
||
//Abs - Àáñîëþòíîå ëè çíà÷÷åíèå false òî Perc â ïðîöåíòàõ
|
||
//Perc - Ñêèäêà èëè íàäáàâêà â ïðîöåíòàõ (+-99.9) â çàâèñèìîñòè îò çíàêà
|
||
//Sum - Ñóììà ïîäèòîãà â òåêóùåì ôèñêàëüíîì ÷åêå /äî 10 áàéòà/
|
||
bool FP300KZ::Subtotal(std::string Print,std::string Display, bool Abs, double Perc,double& Sum)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSubtotal;
|
||
|
||
msg+=Print+Display;
|
||
if(Perc!=0) //Ñêèäêà ëèáî íàöåíêà
|
||
{
|
||
if(Abs) msg+=';'+FloatToStdStr(Perc,2);
|
||
else msg+=','+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=fromString<double>(CutBeforeFirst(str,','))/M();
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("Subtotal(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Îïëàòà (èòîã)
|
||
//Line1 - Ïåðâàÿ ñòðîêà òåêñòà äî 36 áàéò
|
||
//Line2 - Âòîðàÿ ñòðîêà òåêñòà äî 36 áàéò
|
||
//PaidMode - Òèï îïëàòû: 'P' – Îïëàòà íàëè÷íûìè; 'N' – Îïëàòà â êðåäèò; 'C' – Îïëàòà ÷åêîì; 'D' – Îïëàòà äåáèòíîé êàðòîé 'I' - Ïðîãðàììèðóåìûé òèï îïëàòû 1 'J' - Ïðîãðàììèðóåìûé òèï îïëàòû 2 'K' - Ïðîãðàììèðóåìûé òèï îïëàòû 3 'L' - Ïðîãðàììèðóåìûé òèï îïëàòû 4
|
||
//Îäèí áàéò ñî çíà÷åíèåì ‘+’, óêàçûâàþùèé çíàê Amount (ñóììû îïëàòû).
|
||
//Amount - Ñóììà îïëàòû /äî 10 çíà÷àùèõ öèôð/.
|
||
//Change - Ñäà÷à
|
||
bool FP300KZ::Total(std::string Line1,std::string Line2,std::string PaidMode,double Amount, double& Change)
|
||
{
|
||
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+=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)
|
||
{
|
||
if(str[0]=='F') b=false;
|
||
std::string s="";
|
||
s.append(str,1,str.length()-1);
|
||
Change=fromString<double>(s)/M();
|
||
if(str[0]=='D') Change=-fabs(Change);
|
||
}
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("Total(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ñëóæåáíûé ïðèõîä èëè ðàñõîä
|
||
//Amount Ñóììà (äî 10 çíà÷àùèõ öèôð).  çàâèñèìîñòè îò çíàêà èíòåðïðåòèðóåòñÿ êàê ïðèõîä èëè ðàñõîä.
|
||
//strH - Çàãîëîâîê strF - ïîñëåäíÿÿ ñòðîêà
|
||
//ExitCode ‘P’ Çàÿâêà èñïîëíåíà. Åñëè çàÿâëåííàÿ ñóììà íåíóëåâàÿ, ïðèíòåð ïå÷àòàåò ñëóæåáíûé ÷åê ðåãèñòðèðóþùèé îïåðàöèþ. ‘F’ Çàÿâêà îòêëîíåíà â ñëó÷àå åñëè: Ñóììà íàëè÷íîñòè â êàññå ìåíüøå ñóììû çàÿâëåííîãî ñëóæåáíîãî ðàñõîäà. Îòêðûò ôèñêàëüíûé èëè íåôèñêàëüíûé ÷åê.
|
||
//CashSum Ñóììà íàëè÷íîñòè â êàññå. Ñóììà íàðàñòàþùàÿ ïîñëå ñëóæåáíîãî ïðèõîäà è ïîñëå êàæäîé îïëàòû íàëè÷íûìè.
|
||
//ServIn Ñóììà âñåõ êîìàíä “Ñëóæåáíûé ïðèõîä”.
|
||
//ServOut Ñóììà âñåõ êîìàíä “Ñëóæåáíûé ðàñõîä”.
|
||
bool 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)
|
||
{
|
||
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+=FloatToStdStr(Amount,2);
|
||
}
|
||
}else
|
||
{
|
||
if(Amount!=0)
|
||
{
|
||
msg+=FloatToStdStr(Amount,2);
|
||
while(strH.length()>0)
|
||
{
|
||
std::wstring str = CutBeforeWFirst(strH,L'\n');
|
||
msg+='\t'; msg+='h'; msg.append(ws2s(str),0,48);
|
||
}
|
||
while(strF.length()>0)
|
||
{
|
||
std::wstring str = CutBeforeWFirst(strF,L'\n');
|
||
msg+='\t'; msg+='f'; msg.append(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=CutBeforeFirst(str,',');
|
||
CashSum=fromString<double>(CutBeforeFirst(str,','))/M();
|
||
ServIn=fromString<double>(CutBeforeFirst(str,','))/M();
|
||
ServOut=fromString<double>(str)/M();
|
||
}
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ParishOrConsumption(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïå÷àòü øòðèõ-êîäà
|
||
///Type - Òèï øòðèõ êîäà îò 1 äî 5 (1-EAN8, 2-EAN13, 3-Code 128, 4-ITF, 5-ITF)
|
||
bool FP300KZ::PrintBarCode(int Type,std::string Data)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrintBarCode;
|
||
msg+=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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrintBarCode(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Çâóêîâîé ñèãíàë
|
||
///\param Hz ×àñòîòà çâóêà
|
||
///\param mSec Ìèëèñåêóíä
|
||
bool FP300KZ::Beep(int Hz,int mSec)
|
||
{
|
||
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+=IntToStdStr(Hz);
|
||
msg+=',';
|
||
msg+=IntToStdStr(mSec);
|
||
msg+=(char)0x05;
|
||
std::string str="";
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),str);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("Beep(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Êîëè÷åñòâî ëîãè÷åñêèõ ìåñò äëÿ ôèñêàëüíûõ çàïèñåé
|
||
///\Logical Êîëè÷åñòâî ëîãè÷åñêèõ ìåñò äëÿ ôèñêàëüíûõ çàïèñåé
|
||
bool FP300KZ::FreeFieldsByFiscalMemory(long& Logical)
|
||
{
|
||
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=fromString<long>(CutBeforeFirst(str,','));
|
||
Logical=fromString<int>(CutBeforeFirst(str,',')); //
|
||
}
|
||
b=b && !Status->s[0][5]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("FreeFieldsByFiscalMemory(Logical); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïðîãðàììèðîâàíèå êîíôèãóðàöèîííûõ êëþ÷åé
|
||
///Åñëè update=false òî êîìàíäà çàïèñûâàåò èç ÎÇÓ âî ôëýø-ïàìÿòü ãðàôè÷åñêèé ëîãîòèï, âûñîòó ïå÷àòè øòðèõ-êîäà, ïëîòíîñòü ïå÷àòè è äëèíó èìïóëüñà îòêðûâàíèÿ äåíåæíîãî ÿùèêà. Ïîñëå îáíóëåíèÿ ÎÇÓ çíà÷åíèÿ ýòèõ ïàðàìåòðîâ âîññòàíàâëèâàþòñÿ èç ôëýø-ïàìÿòè.
|
||
///\param update Åñëè false òî çíà÷åíèÿ êîíôèãóðàçèîííûõ êëþ÷åé íå èçìåíÿþòñÿ, à äàííûå íàñòðîåê ïðèíòåðà çàïèñûâàþòñÿ âî ôëýø-ïàìÿòü
|
||
bool FP300KZ::SwitchPrg(bool update)
|
||
{
|
||
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);
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SwitchPrg("+key+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äëÿ ñîõðàíåíèå ñîêðàù¸ííîé èíôîðìàöèè â ÝÊË
|
||
bool FP300KZ::getSmallEJ(bool& val)
|
||
{ //val=Sw1;
|
||
val=Sw2;
|
||
return true;//Âñåãäà true ïîòîìó ÷òî çíà÷åíèå áåð¸òñÿ íå çäåñü.
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äëÿ ñîõðàíåíèå ñîêðàù¸ííîé èíôîðìàöèè â ÝÊË
|
||
bool FP300KZ::setSmallEJ(bool val)
|
||
{ //Sw1=val;
|
||
Sw2=val;
|
||
return SwitchPrg(true); //Ñîõðàíèì ïåðåêëþ÷àòåëè
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðåæèì ïðîçðà÷íîãî äèñïëåÿ
|
||
bool FP300KZ::getDisplayTransparent(bool& val)
|
||
{ val=Sw3;
|
||
return true;//Âñåãäà true ïîòîìó ÷òî çíà÷åíèå áåð¸òñÿ íå çäåñü.
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðåæèì ïðîçðà÷íîãî äèñïëåÿ
|
||
bool FP300KZ::setDisplayTransparent(bool val)
|
||
{ Sw3=val;
|
||
return SwitchPrg(true);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///<Ðàáîòà äèñïëåÿ ñ êîäîâîé òàáëèöåé Windows 1251
|
||
bool FP300KZ::getDisplayWin1251(bool& val)
|
||
{
|
||
val=Sw4;
|
||
return true;//Âñåãäà true ïîòîìó ÷òî çíà÷åíèå áåð¸òñÿ íå çäåñü.
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///<Ðàáîòà äèñïëåÿ ñ êîäîâîé òàáëèöåé Windows 1251
|
||
bool 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)
|
||
{
|
||
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) b=SwitchPrg(true); //Çàïèøåì
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Êîìàíäà î÷èùàåò äèñïëåé.
|
||
///Åñëè îòêðûò ôèñêàëüíûé ÷åê è Sw3 â ïîëîæåíèè OFF, î÷èùàåòñÿ òîëüêî íèæíÿÿ ñòðîêà.
|
||
bool FP300KZ::DisplayClear()
|
||
{
|
||
unsigned char msg[5] = {0x01,0x24,0x20,fcDisplayClear,0x05};
|
||
std::string answer;
|
||
bool b=SendPMessage(msg,sizeof(msg),answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DisplayClear(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Âûâîä òåêñòà â íèæíþþ ñòðîêó äèñïëåÿ
|
||
//Text - Äî 20 ñèìâîëîâ òåêñòà
|
||
bool FP300KZ::DispalyLower(std::string Text)
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DispalyLower(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Âûâîä òåêñòà â âåðõíþþ ñòðîêó äèñïëåÿ
|
||
///Text - Äî 20 ñèìâîëîâ òåêñòà
|
||
bool FP300KZ::DispalyUpper(std::string Text)
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DispalyUpper(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Âûâîä íà äèñïëåé ñâîáîäíîãî òåêñòà
|
||
///Òåêñò (äî 40 ñèìâîëîâ), êîòîðûé âûâîäèòñÿ íà äèñïëåé. Åñëè íåîáõîäèìî âûâåñòè ñèìâîë ASCII ìåíüøå ÷åì 20h (óïðàâëÿþùèå ñèìâîëû) òî îíè óâåëè÷èâàþòñÿ íà 40h è ïðåäâàðÿþòñÿ 10h.
|
||
bool FP300KZ::DispalyFree(std::string Text)
|
||
{
|
||
//Text=TransformCode(Text);
|
||
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DispalyFree(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///×òåíèå çàïðîãðàììèðîâàííûõ íàëîãîâûõ ñòàâîê
|
||
///\param Decimals Òî÷åê ïîñëå çàïÿòîé 0,1 èëè 2
|
||
///\param bA,bB,bC,bD Îçíà÷àåò ðàçðåøåíèå íàëîãîâîé ãðóïïû
|
||
///\param TaxA Íàëîãîâàÿ ñòàâêà À
|
||
///\param TaxB Íàëîãîâàÿ ñòàâêà Á
|
||
///\param TaxC Íàëîãîâàÿ ñòàâêà Â
|
||
///\param TaxD Íàëîãîâàÿ ñòàâêà Ã
|
||
bool 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)
|
||
{
|
||
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=CutBeforeFirst(str,',');
|
||
m_Dots=fromString<int>(Decimals); //Çàïîëíÿåì ãëîáàëüíóþ ïåðåìåííóþ
|
||
if(PrinterName.find("FP600")!=std::string::npos)
|
||
{
|
||
Rounding=CutBeforeFirst(str,','); //Äëÿ Áåëàðóñîâ îêðóãëåíèå
|
||
}
|
||
bA=str[0]=='1'; bB=str[1]=='1'; bC=str[2]=='1'; bD=str[3]=='1';
|
||
CutBeforeFirst(str,',');
|
||
TaxA=CutBeforeFirst(str,',');
|
||
TaxB=CutBeforeFirst(str,',');
|
||
TaxC=CutBeforeFirst(str,',');
|
||
TaxD=str;
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetTaxRates(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Óñòàíîâêà ïîëîæåíèÿ äåñÿòè÷íîé òî÷êè è íàëîãîâûõ ñòàâîê
|
||
///\param Decimal 0,1 èëè 2 çíàêà ïîñëå çàïÿòîé
|
||
bool FP300KZ::SetTaxRates(int Decimal,std::string Rounding,std::string TaxA, std::string TaxB, std::string TaxC, std::string TaxD)
|
||
{
|
||
std::string msg,str;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcSetTaxRates;
|
||
str+=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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SetTaxRates("+answer+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ñòàòóñ ôèñêàëüíîé òðàíçàêöèè
|
||
///\param Open Îòêðûò ôèñêàëüíûé èëè ñëóæåáíûé ÷åê
|
||
///\param Items Êîëè÷åñòâî çàðåãèñòðèðîâàííûõ ïðîäàæ â òåêóùåì èëè ïîñëåäíåì ôèñêàëüíîì ÷åêå.
|
||
///\param Amount Ñóììà ïîñëåäíåãî ôèñêàëüíîãî ÷åêà
|
||
///\param Tender Ñóììà îïëàòû òåêóùåãî èëè ïîñëåäíåãî ÷åêà.
|
||
bool FP300KZ::FiscalTransactionsStatus(bool& Open,int& Items,double& Amount,double& Tender)
|
||
{
|
||
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);
|
||
|
||
Open=CutBeforeFirst(answer,',')=="1";
|
||
Items=fromString<int>(CutBeforeFirst(answer,','));
|
||
|
||
Amount=fromString<double>(CutBeforeFirst(answer,','))/M();
|
||
Tender=fromString<double>(answer)/M();
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("FiscalTransactionsStatus(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïîëó÷èòü êîëè÷åñòâî ñåêóíä ñ íà÷àëà îòêðûòèÿ ñìåíû
|
||
bool FP300KZ::SessionSec(int& sec)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)93;
|
||
msg+=(char)0x05;
|
||
std::string answer="";
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
if(b)
|
||
sec=fromString<int>(answer);
|
||
if(m_SaveLog)
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("SessionSec(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Äèàãíîñòè÷åñêàÿ èíôîðìàöèÿ
|
||
bool FP300KZ::DiagnosticInfo()
|
||
{
|
||
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=CutBeforeFirst(answer,',');
|
||
PrinterVersion=CutBeforeFirst(answer,','); //Âåðñèÿ äàòà âðåìÿ
|
||
CutBeforeFirst(answer,','); //Êîíòðîëüíàÿ ñóììà
|
||
std::string Sw18 = 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 áàéò.
|
||
}
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DiagnosticInfo(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ðàáîòà ñ ýëåêòðîííîé êîíòðîëüíîé ëåíòîé
|
||
bool FP300KZ::EJ(std::string Cmd)
|
||
{
|
||
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);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("EJ("+Cmd+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ïå÷àòü ýëåêòðîííîé êîíòðîëüíîé ëåíòû ñ íà÷àëà (ïåðâàÿ ñòðîêà) íîðìàëüíûì øðèôòîì. Íå Íå ïå÷àòàþòñÿ ñëóæåáíûå ÷åêè, ÷åêè ñëóæåáíîãî ïðèõîäà è ðàñõîäà è Õ-îò÷åò. Ïîëå Data ïóñòîå.
|
||
bool FP300KZ::PrintEJ()
|
||
{
|
||
return EJ("PL");
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ñåðâèñíàÿ î÷èñòêà êîíòðîëüíîé ëåíòû
|
||
bool FP300KZ::ServiceClearEJ()
|
||
{
|
||
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' (ãðåøêà)
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ServiceClearEJ(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
///Ñåðâèñíîå îáíóëåíèå ÎÇÓ
|
||
bool FP300KZ::ServiceClearRAM()
|
||
{
|
||
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);
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("ServiceClearRAM(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïå÷àòàåòñÿ ëè ãðàôè÷åñêèé ëîãîòèï
|
||
///\param Enable Ðàçðåøåíî ëèáî çàïðåùåíî ïå÷àòàòü ãðàôè÷åñêèé ëîãîòèï.
|
||
///\param Height Âûñîòà ãðàôè÷åñêîãî ëîãîòèïà
|
||
bool FP300KZ::getPrintLogo(bool& Enable,int& Height)
|
||
{
|
||
std::string str;
|
||
if(PrintSetup("I","L",str))
|
||
{
|
||
Enable = CutBeforeFirst(str,',')=="1";
|
||
Height =fromString<int>(str);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïå÷àòàòü ëè ãðàôè÷åñêèé ëîãîòèï
|
||
///\param Enable Ðàçðåøåíî ëèáî çàïðåùåíî ïå÷àòàòü ãðàôè÷åñêèé ëîãîòèï.
|
||
///\param Height Âûñîòà ãðàôè÷åñêîãî ëîãîòèïà
|
||
bool FP300KZ::setPrintLogo(bool Enable,int Height)
|
||
{
|
||
std::string str="";
|
||
if(Enable) str+="1,"; else str+="0,";
|
||
str+=IntToStdStr(Height);
|
||
|
||
std::string Answer="";
|
||
return PrintSetup("L",str,Answer);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïðîãðàììèðîâàíèå ãðàôè÷åñêîãî ëîãîòèïà 576x96 òî÷ååê
|
||
//RowNum - íîìåð ëèíèè
|
||
//Data - øåñòàäöàòåðè÷íàÿ ñòðîêà
|
||
bool FP300KZ::PrgGraphicLogo(int RowNum, std::string Data)
|
||
{
|
||
std::string msg;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrgGraphicLogo;
|
||
|
||
msg+=IntToStdStr(RowNum);
|
||
msg+=',';
|
||
msg+=Data;
|
||
|
||
msg+=(char)0x05;
|
||
std::string answer="";
|
||
bool b=SendPMessage((uint1*)msg.c_str(),msg.size(),answer);
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("PrgGraphicLogo("+IntToStdStr(RowNum)+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïðîãðàììèðîâàíèå ãðàôè÷åñêîãî ëîãîòèïà
|
||
///\param RowNum - Íîìåð ñòðîêè
|
||
///\param Data - Ðåçóëüòàò "01010101110"
|
||
bool FP300KZ::getGraphicLogo(int RowNum, std::string &Data)
|
||
{
|
||
std::string msg,res;
|
||
msg+=(char)0x01; msg+=(char)0x20; msg+=(char)0x20; msg+=(char)fcPrgGraphicLogo;
|
||
msg+='R'+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';
|
||
}
|
||
}
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("getGraphicLogo("+IntToStdStr(RowNum)+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ôèñêàëèçàöèÿ
|
||
//<Password>,<Serial>
|
||
bool FP300KZ::Fiscalization(std::string Password,std::string Serial,std::string& ErrCode)
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("Fiscalization("+Password+","+Serial+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Ïåðåðåãèñòðàöèÿ
|
||
//<OldPwd>,<Password>,<RNN>,<RNM>
|
||
bool FP300KZ::reFiscalization(std::string OldPwd,std::string Password,std::string RNN,std::string RNM,std::string& ErrCode)
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("reFiscalization("+OldPwd+","+Password+","+RNN+","+RNM+"); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Èíôîðìàöèÿ î ñóììå íàêîïëåíèé çà äåíü
|
||
bool FP300KZ::AmountOfSavingsPerDay(double& TaxA,double& TaxB,double& TaxC,double& TaxD,double& TaxE)
|
||
{
|
||
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=fromString<double>(CutBeforeFirst(answer,','))/M();//TaxA
|
||
TaxB=fromString<double>(CutBeforeFirst(answer,','))/M();//TaxB
|
||
TaxC=fromString<double>(CutBeforeFirst(answer,','))/M();//TaxC
|
||
TaxD=fromString<double>(CutBeforeFirst(answer,','))/M();//TaxD
|
||
TaxE=fromString<double>(CutBeforeFirst(answer,','))/M();//TaxE
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("AmountOfSavingsPerDay(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
bool FP300KZ::DepartmentReport()
|
||
{
|
||
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]; //Ïðèçíàê îøèáêè
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("DepartmentReport(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
bool FP300KZ::GetLastPrintedDocNumber(int& num)
|
||
{
|
||
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=fromString<int>(answer);
|
||
}else num=0;
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetLastPrintedDocNumber(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//Èíôîðìàöèÿ î ïîñëåäíåé ôèñêàëüíîé çàïèñè
|
||
///\param Clos Íîìåð ïîñëåäíåé ôèñêàëüíîé çàïèñè - 4 áàéòà.
|
||
///\param Rec Êîëè÷åñòâî ôèñêàëüíûõ ÷åêîâ çà äåíü - 4 áàéòà.
|
||
///\param Total Îáùàÿ ñóììà ïðîäàæ çà äåíü - 12 áàéò ñî çíàêîì.
|
||
///\param VAT Îáùàÿ ñóììà íàëîãîâ çà äåíü - 12 áàéò ñî çíàêîì.
|
||
///\param Date Äàòà ïîñëåäíåé ôèñêàëüíîé çàïèñè - 6 áàéò /DDMMYY/.
|
||
bool FP300KZ::LatestFiscalRecord(std::string& Clos,int& Rec, float& Total,float& VAT,std::string& Date)
|
||
{
|
||
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=CutBeforeFirst(answer,',');
|
||
if(PrinterName.find("FP600")==std::string::npos)
|
||
Rec=fromString<int>(CutBeforeFirst(answer,','));
|
||
else
|
||
Rec=-1;
|
||
Total=fromString<float>(CutBeforeFirst(answer,','));
|
||
VAT=fromString<float>(CutBeforeFirst(answer,','));
|
||
Date=answer;
|
||
}
|
||
saveLog(PrinterName+"_"+PrinterNumber,std::string("GetLastPrintedDocNumber(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
|
||
return b;
|
||
}
|
||
//---------------------------------------------------------------------------
|