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

2186 lines
84 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

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

//! 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
//Áåç êîòîðûõ ïðèíòåð íå ìîæåò ðàáîòàòü...
int FP300KZ::PrinterInit()
{
int result;
result = DiagnosticInfo();
if(b)
{
bool bA,bB,bC,bD;
std::string Decimal,r,TaxA,TaxB,TaxC,TaxD;
result = GetTaxRates(Decimal,r,bA,bB,bC,bD,TaxA,TaxB,TaxC,TaxD);
// if(b) b=b && fp->GetStatusFP();
}
return result;
}
//---------------------------------------------------------------------------
///Ïîëó÷åíèå áàéòîâ ñòàòóñà ïðèíòåðà 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 Ìèëèñåêóíä
MyError FP300KZ::Beep(int Hz,int mSec)
{
MyError result;
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="";
SendPMessage((uint1*)msg.c_str(),msg.size(),str);
result.ErrorCode=ResultCode();
// result.ErrorMessage=getErrorDesc(ResultCode());
saveLog(PrinterName+"_"+PrinterNumber,std::string("Beep(); //")+(b ? "OK=" : "ERROR=")+IntToStdStr(ResultCode())+" "+getErrorDesc(ResultCode()));
return result;
}
//---------------------------------------------------------------------------
//Êîëè÷åñòâî ëîãè÷åñêèõ ìåñò äëÿ ôèñêàëüíûõ çàïèñåé
///\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;
}
//---------------------------------------------------------------------------