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

1378 lines
42 KiB
C++
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.

//! AYRA01FRKZ
/*!
Êëàññ ïðèíòåðà AYRA01FRKZ
\author Èâàíîâ Èãîðü Ì.
\file FP300KZ.cpp
*/
//---------------------------------------------------------------------------
#pragma hdrstop
#include "stdafx.h"
#include "AYRA01FRKZ.h"
#include <stdTools.h>
#include <mathTools.h>
#include <sstream>
#include <iostream>
#include <fstream>
#include <locale>
//#include <string>
#include <vector>
#include <math.h>
//#include <unistd.h>
//#include <pthread.h>
//#include <stdlib.h>
#if defined( __WXMSW__ ) //Åñëè êðîññïëàòôîðìêíííîå ïðèëîæåíèå
#include <wx/wx.h>
#include <wx/textfile.h>
#include <wxTools.h>
#endif // __WXMSW__
//---------------------------------------------------------------------------
//#pragma package(smart_init)
//---------------------------------------------------------------------------
//Ñîõðàíèòü ëîã â òåêñòîâûé ôàéë
bool saveLog(std::string FileName, std::string Text)
{
try
{
for(uint4 i=1;i<=Text.length();i++) if(Text[i]=='\n') Text[i]=' '; //×òîá â 1 ñòðîêó áûëî
Text="["+getDateTime()+"] "+Text; //Äîáàâëÿåì äàòó
std::string path=getAppPathA()+std::string("logs\\"); //Ïóòü ê ôàéëó
//#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
fputs( Text.c_str() , pfile );
fputs( "\n" , pfile );
fclose( pfile );
#endif
}catch(...)
{ return false;
}
return true;
}
//---------------------------------------------------------------------------
AYRA01FRKZ::AYRA01FRKZ()
{
cPort=new ComPort();
m_Password="0000";
}
//---------------------------------------------------------------------------
AYRA01FRKZ::~AYRA01FRKZ()
{
delete cPort;
}
//---------------------------------------------------------------------------
//Ñîåäåíèòüñÿ ïî COM ïîðòó
bool AYRA01FRKZ::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(1))
return false;
}else return false;
return true;
}
//---------------------------------------------------------------------------
/*
//Çàïèñûâàåì â ôàéë
wxTextFile* TextFile = new wxTextFile();
if(!wxFileExists(L"o:\\WriteReqwest.txt")) TextFile->Create(L"o:\\WriteReqwest.txt");
TextFile->Open(L"o:\\WriteReqwest.txt");
if(TextFile->IsOpened())
{
TextFile->AddLine(L"0) "+IntToStr(ch));
TextFile->Write();
TextFile->Close();
}
delete TextFile;
*/
//---------------------------------------------------------------------------
//Çàïèñûâàòü çàïðîñ
//request - Çàïðîñ äàííûõ îáû÷íî 1é áàéò íîìåð êîìàíäû à îñòàëüíûå äàííûå
bool AYRA01FRKZ::WriteReqwest(std::string request)
{
/*
unsigned char ENQ = 0x05; //Çàïðîñ
unsigned char ACK = 0x06; //Ïîäòâåðæäåíèå
unsigned char STX = 0x02; //Íà÷àëî òåêñòà
unsigned char ETX = 0x03; //Êîíåö òåêñòà
unsigned char EOT = 0x04; //Êîíåö ïåðåäà÷è
unsigned char NAK = 0x15; //Îòðèöàíèå
unsigned char DLE = 0x10; //Ýêðàíèðîâàíèå óïðàâëÿþùèõ ñèìâîëîâ
//Â âèäå ñòðîîêè
std::string sSTX; sSTX+=STX;
std::string sDLE; sDLE+=DLE;
std::string sETX; sETX+=ETX;
//Äëÿ ìàñêèðîâêè äàííûõ
std::string sDLEDLE; sDLEDLE+=DLE; sDLEDLE+=DLE;
std::string sDLEETX; sDLEETX+=DLE; sDLEETX+=ETX;
//Ìàñêèðóåì áàéòû, ðàâíûå DLE è ETX
request=replaceStrings(request,sDLE,sDLEDLE);
request=replaceStrings(request,sETX,sDLEETX);
//Äîáàâëÿåì â êîíåö ETX
request+=ETX;
//Ïîäñ÷èòûâàåì CRC
unsigned char crc=0;
for(size_t i=0;i<request.length();i++)
crc=crc ^ request[i];
//Äîáàâëÿåì â íà÷àëî STX
request=sSTX+request;
//Äîáàâëÿåì â êîíåö CRC
request+=crc;
unsigned char ch;
if(!cPort->SetTimeout(500)) //Îæèäàíèå ãîòîâíîñòè T1 è T3 0,5 ñåê îò ïðè¸ìíèêà (îäèíàêîâî ïîýòîìó â 1 ìåñòå)
return false;
cPort->Write(&ENQ,1); //Çàïðîñ ñåàíñà ñâÿçè
cPort->Read(&ch,1);
if(ch==ACK) //Ïîäòâåðæäåíèå ãîòîâíîñòè
{
for(int i=0;i<10;i++)
{
cPort->Write(request.c_str(),request.length()); //Ïåðåäà÷à êàäðà äàííûõ
cPort->Read(&ch,1); //Ïîäòâåðæäåíèå ïðèåìà êàäðà
if(ch==ACK)
{ cPort->Write(&EOT,1); //Çàâåðøåíèå ñåàíñà ñâÿçè
return true;
}else
if(ch==NAK) //Îòðèöàíèå (Îøèáêà)
{
//Ïîâòîð ñîîáùåíèÿ íå áîëüøå 10 ðàç
}
}
}
return false;
*/
//unsigned char t=0x95;
//cPort->Write(&t,1);
unsigned char ENQ = 0x05; //Çàïðîñ
unsigned char ACK = 0x06; //Ïîäòâåðæäåíèå
unsigned char STX = 0x02; //Íà÷àëî òåêñòà
unsigned char ETX = 0x03; //Êîíåö òåêñòà
unsigned char EOT = 0x04; //Êîíåö ïåðåäà÷è
unsigned char NAK = 0x15; //Îòðèöàíèå
unsigned char DLE = 0x10; //Ýêðàíèðîâàíèå óïðàâëÿþùèõ ñèìâîëîâ
//Â âèäå ñòðîîêè
std::string sSTX; sSTX+=STX;
std::string sDLE; sDLE+=DLE;
std::string sETX; sETX+=ETX;
//Äëÿ ìàñêèðîâêè äàííûõ
std::string sDLEDLE; sDLEDLE+=DLE; sDLEDLE+=DLE;
std::string sDLEETX; sDLEETX+=DLE; sDLEETX+=ETX;
//Ìàñêèðóåì áàéòû, ðàâíûå DLE è ETX
request=replaceStrings(request,sDLE,sDLEDLE);
request=replaceStrings(request,sETX,sDLEETX);
//Ïîäñ÷èòûâàåì CRC
unsigned char CRC=0;
CRC=CRC ^ ETX;
for(size_t i=0;i<request.length();i++)
CRC=CRC ^ request[i];
//Äîáàâëÿåì â íà÷àëî STX â êîíåö ETX è CRC
request=sSTX+request+sETX;
request+=CRC;
unsigned char ch;
if(!cPort->SetTimeout(500)) //Îæèäàíèå ãîòîâíîñòè T1 è T3 0,5 ñåê îò ïðè¸ìíèêà (îäèíàêîâî ïîýòîìó â 1 ìåñòå)
return false;
//Ïî áëîê ñõåìå
for(int frc=0;frc<100;frc++)
{
for(int rc=0;rc<5;rc++) //Ïðè íåïðàâèëüíîì îòâåòå íå áîëüøå 5 ðàç
{
cPort->Write(&ENQ,1); //Çàïðîñ ñåàíñà ñâÿçè
if(cPort->Read(&ch,1)>0)
{
if(ch==NAK)
{ Sleep(500); //Îæèäàåì âðåìÿ T1 0,5 ñåê
continue;
}else
//Åñëè êîíôëèêòíàÿ ñèòóàöèÿ îòâåòèë ENQ
if(ch==ENQ)
{
Sleep(500); //Îæèäàåì âðåìÿ T7 0,5 ñåê
break;
}else
if(ch==ACK) //Ïîäòâåðæäåíèå ãîòîâíîñòè
{
for(int rc2=0;rc2<10;rc2++)
{
cPort->Write(request.c_str(),request.length()); //Ïåðåäà÷à êàäðà äàííûõ
if(cPort->Read(&ch,1)>0) //Ïîäòâåðæäåíèå ïðèåìà êàäðà
{
if(ch==ACK)
{ cPort->Write(&EOT,1); //Çàâåðøåíèå ñåàíñà ñâÿçè
return true;
}else
if(ch==ENQ && rc2>1)
{
ch=0;
//??? ïåðåõîä â îïð ïîçèöèþ ïðè¸ìà äàííûõ (óðîäöû)
}else
if(ch==NAK) //Îòðèöàíèå (Îøèáêà)
{
//Ïîâòîð ñîîáùåíèÿ íå áîëüøå 10 ðàç
}
}
}
cPort->Write(&EOT,1);
return false;
}else
break;
}
}
cPort->Write(&EOT,1); //Íåò îòâåòà èëè íåïðàâèëüíûé îòâåò íà çàïðîñ óñòàíîâêè ñâÿçè
}
return false;
}
//---------------------------------------------------------------------------
//×èòàòü îòâåò ïðèíòåðà
bool AYRA01FRKZ::ReadAnswer(std::string &answer)
{
unsigned char ENQ = 0x05; //Çàïðîñ
unsigned char ACK = 0x06; //Ïîäòâåðæäåíèå
unsigned char STX = 0x02; //Íà÷àëî òåêñòà
unsigned char ETX = 0x03; //Êîíåö òåêñòà
unsigned char EOT = 0x04; //Êîíåö ïåðåäà÷è
unsigned char NAK = 0x15; //Îòðèöàíèå
unsigned char DLE = 0x10; //Ýêðàíèðîâàíèå óïðàâëÿþùèõ ñèìâîëîâ
unsigned char ch=0;
if(!cPort->SetTimeout(500)) //Îæèäàíèå ãîòîâíîñòè T1 è T3 0,5 ñåê îò ïðè¸ìíèêà (îäèíàêîâî ïîýòîìó â 1 ìåñòå)
return false;
//Ïîëó÷àåì îòâåò
answer="";
for(int rc=0; rc<100; rc++)
{
if(cPort->Read(&ch,1)>0)
{
if(ch==ENQ)
{
for(int frc=0;frc<10;frc++)
{
cPort->Write(&ACK,1); //Ïîäòâåðæäåíèå ãîòîâíîñòè
L_RC:
int rc2;
for(rc2=0;rc2<10;rc2++) //Ïîâòîð êàäðà äàííûõ ìîæåò ïðîèñõîäèòü äî 10 ðàç
{
if(!cPort->SetTimeout(2000)) return false; //Îæèäàíèå ãîòîâíîñòè T2 2 ñåê.
if(cPort->Read(&ch,1)>0)
{
if(ch==STX) //Ïðèíèìàåì ñàì îòâåò
{
answer=""; //Î÷èùÿåì áóôåð îòâåòà
unsigned char crc=0; //Äëÿ ïîäñ÷¸òà CRC
while(true)
{
if(cPort->Read(&ch,1)==0)
{
frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}
crc=crc ^ ch;
if(ch==DLE) //Åñëè ìàñêèðîâêà ñèìâîëîâ DLE è ETX
{
if(cPort->Read(&ch,1)==0)
{
frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}
crc=crc ^ ch;
answer+=ch;
}else
if(ch==ETX)
{
answer+=ch;
break;
}else answer+=ch;
if(answer.length()>2048) //Çàùèòà îò ïåðåïîëíåíèÿ áóôåðà
{ frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}
}
if(cPort->Read(&ch,1)==0) //×èòàåì CRC
{
frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}
if(ch==crc)
{ cPort->Write(&ACK,1); //Îòâå÷àåì ÷òî ñ CRC âñ¸ â ïîðÿäêå
if(!cPort->SetTimeout(500)) //Îæèäàíèå ãîòîâíîñòè Ò4 0,5 ñåê.
return false;
if(cPort->Read(&ch,1)>0)
{
if(ch==STX)
{
frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}else
if(ch==EOT) //Ïîëó÷èëè ïðèçíàê êîíöà ïàêåòà
{ return true;
}else
{
if(cPort->Read(&ch,1)>0)
{ frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}else return true;
}
}else return true; //Õîòü è íåäîæäàëèñü ïîñëåäíåãî áàéòà âñ¸ðàâíî true
break;
}
else
{
cPort->Write(&NAK,1); //Îòðèöàíèå íåïðàâèëüíûå äàííûå
frc++; if(frc<=10) goto L_RC; else return false; //Íà ìåòêó L_RC ëèáî âûéòè
}
}else
if(ch==ENQ)
{
break;
}
}else return false; //Âåðíóòü "Íåò îòâåòà"
}
if(rc2==10) return false; //Âåðíóòü "Íåò îòâåòà"
}
}
}else return false; //Âåðíóòü "Íåò îòâåòà"
}
return false; //Âåðíóòü "Íåò îòâåòà"
}
//---------------------------------------------------------------------------
//Çâóêîâîé ñèãíàë
bool AYRA01FRKZ::Beep(int Hz,int mSec)
{
std::string req;
req=CodeBSD(m_Password);
req+=fcBeep;
m_ErrorCode=200;
if(!WriteReqwest(req))
return false;
m_ErrorCode=0;//Îòâåòà íà êîìàíäó ãóäîê íåò
return true;
}
//---------------------------------------------------------------------------
//Îòðåçàòü áóìàãó
bool AYRA01FRKZ::CutPaper(bool full)
{
std::string req;
req=CodeBSD(m_Password);
req+=fc75;
if(full) req+="0"; else req+="1";
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
return true;
}
//---------------------------------------------------------------------------
//Ïðîòÿíóòü áóìàãó
//lines - êîëè÷åñòâî ñðîê
bool AYRA01FRKZ::FeedPaper(int lines)
{
std::string req;
req=CodeBSD(m_Password);
req+=fc75;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
return true;
}
//---------------------------------------------------------------------------
//Îòêðûòèå äåíåæíîãî ÿùèêà
bool AYRA01FRKZ::OpenCashDrawer(int mSec)
{
std::string req;
req=CodeBSD(m_Password);
req+=(char)fcOpenCashDrawer;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ïå÷àòàòü äíåâíîé îò÷¸ò ñ ãàøåíèåì
bool AYRA01FRKZ::PrintZReport()
{
std::string req;
req=CodeBSD(m_Password);
req+=fcDailyFinancialReport;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ïå÷àòàòü äíåâíîé îò÷¸ò áåç ãàøåíèÿ
bool AYRA01FRKZ::PrintXReport()
{
return PrintReport(1);
}
//---------------------------------------------------------------------------
//Íà÷àëî ñíÿòèÿ îò÷åòà áåç ãàøåíèÿ
///\param type - Òèï îò÷¸òà 1 - Ñóòî÷íûé îò÷åò (X-îò÷åò) 2 - Îò÷åò ïî ñåêöèÿì 3 - Îò÷åò ïî êàññèðàì 4 - Îò÷åò ïî òîâàðàì 5 - Ïî÷àñîâîé îò÷åò 7 - Îò÷åò êîëè÷åñòâ
bool AYRA01FRKZ::PrintReport(unsigned char type)
{
std::string req;
req=CodeBSD(m_Password);
req+=fc67;
req+=type; //Ñóòî÷íûé îò÷¸ò áåç ãàøåíÿ
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ïå÷àòàåò ñòðîêó òåêñòà
bool AYRA01FRKZ::PrintLine(std::wstring line)
{
std::string req;
req=CodeBSD(m_Password);
req+=fc4C;
//req+=WStringToString(line, std::locale("rus_rus.866"),'?'); //Êàç ñèìâîëû íå ïðåîáðàçóåò
req+=UnicodeToDOS886(line); //Ñàìîäåëüíîå ïðåîáðàçîâàíèå â DOS
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
return true;
}
//---------------------------------------------------------------------------
//Ãîòîâ ëè ê ðàáîòå ïðèíòåð (äîëæíà áûñòðî âûïîëíÿòñÿ)
bool AYRA01FRKZ::isOk()
{
return true;
}
//---------------------------------------------------------------------------
//Èíèöèàëèçàöèÿ ïðèíòåðà.
bool AYRA01FRKZ::PrinterInit()
{
//Ïîëó÷èòü êîë-âî òî÷åê ïîñëå çàïÿòîé
std::string state;
return GetStateKKM(state);
}
//---------------------------------------------------------------------------
//Ïîëó÷èòü òèï óñòðîéñòâà
bool AYRA01FRKZ::GetDeviseType()
{
std::string req;
req=CodeBSD(m_Password);
req+=fcA5;
m_ErrorCode=200; //200 C8h Íåò óñòðîéñòâà, îáðàáàòûâàþùåãî äàííóþ êîìàíäó
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
m_ErrorCode=(unsigned char)ans[0]; //Êîä_îøèáêè (1)
unsigned char v=(unsigned char)ans[0]; //Âåðñèÿ_ïðîòîêîëà (1)
unsigned char t=(unsigned char)ans[0]; //Òèï (1)
unsigned char m=(unsigned char)ans[0]; //Ìîäåëü (1)
//<Ðåæèì (2)>, <Âåðñèÿ_óñòðîéñòâà (5)>, <Íàçâàíèå (N)>.
}
return true;
}
//---------------------------------------------------------------------------
//Âíåñåíèå +, âûåìêà -
bool AYRA01FRKZ::CashInOut(bool test, double sum)
{
std::string req;
req=CodeBSD(m_Password);
if(sum>0) req+=fc49; //Âííåñåíèå
else req+=fc4F; //Âûïëàòà
req+=(char)test; //Òåñòîâûé ëèáî ðåàëüíû âçíîñ
req+=CodeBSD(ceil(fabs(sum)*M()),5); //Ñóììà öåëàÿ
m_ErrorCode=200; //200 C8h Íåò óñòðîéñòâà, îáðàáàòûâàþùåãî äàííóþ êîìàíäó
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
//Êîä îøèáêè
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
return true;
}
//---------------------------------------------------------------------------
//Ïîëó÷èòü ñóììó íàëè÷íîñòè â êàññå.
bool AYRA01FRKZ::GetCashSum(double& sum)
{
return true;
}
//---------------------------------------------------------------------------
//Çàïðîñ ñîñòîÿíèÿ ÊÊÌ îòâåò â âèäå ñòðîêè (Ôîðìàò íå ïðèäóìàë íàâåðíî êàê â ini ôàéëå ñäåëàòü...)
bool AYRA01FRKZ::GetStateKKM(std::string& state)
{
std::string req;
req=CodeBSD(m_Password);
req+=fc3F;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
m_ErrorCode=0;
state=ans;
if(ans[0]='D')
{
//Ôîðìàò îòâåòà:
//"D"<Êàññèð(1)> <Íîìåð_â_çàëå(1)> <Äàòà_YMD(3)><Âðåìÿ_HMS(3)> <Ôëàãè(1)> <Çàâîäñêîé_íîìåð(4)> <Ìîäåëü(1)>
//<Âåðñèÿ_ÊÊÌ(2)> <Ðåæèì_ðàáîòû(1)> <Íîìåð_÷åêà(2)> <Íîìåð_ñìåíû(2)><Ñîñòîÿíèå_÷åêà(1)> <Ñóììà_÷åêà(5)>
//<Äåñÿòè÷íàÿ_òî÷êà(1)> <Ïîðò(1)>
unsigned char cs1 = BSDToInt(ans[1]); //Êàññèð(1) 00..30 (áûëî 0)
unsigned char cs2 = BSDToInt(ans[2]); //Íîìåð_â_çàëå(1) 01..99 (áûëî 1)
unsigned char year = BSDToInt(ans[3]); //Ãîä 00..99
unsigned char month = BSDToInt(ans[4]); //Ìåñÿö 01..12
unsigned char day = BSDToInt(ans[5]); //Äåíü 01..31
unsigned char hours = BSDToInt(ans[6]); //×àñû 00..23
unsigned char min = BSDToInt(ans[7]); //Ìèíóòû 00..59
unsigned char sec = BSDToInt(ans[8]); //Ñåêóíäû 00..59
unsigned char st = ans[9]; //ñîñòîÿíèå ÊÊÌ (áûëî 26)
bool f1=getBitVal(st,0); //ÊÊÌ ôèñêàëèçèðîâàíà (0 - íåò, 1 - äà)
bool f2=getBitVal(st,1); //Ñìåíà îòêðûòà (0 - íåò, 1 - äà)
bool f3=getBitVal(st,2); //Äåíåæíûé ÿùèê îòêðûò (0 - äà, 1 - íåò)
bool f4=getBitVal(st,3); //Âåñîâîé äàò÷èê ×Ë (0-íåò áóìàãè, 1-åñòü áóìàãà)
bool f5=getBitVal(st,4); //Áèò íå èñïîëüçóåòñÿ
bool f6=getBitVal(st,5); //Cîñòîÿíèå äàò÷èêà êðûøêè (0 êðûøêà çàêðûòà, 1 êðûøêà îòêðûòà)
bool f7=getBitVal(st,6); //Áèò íå èñïîëüçóåòñÿ è äîëæåí ñîäåðæàòü 0
bool f8=getBitVal(st,7); //Ðàâåí 1, åñëè íàïðÿæåíèå íà áàòàðåéêè ìåíüøå äîïóñòèìîãî
unsigned int num=StdStrToInt(DecodeBSD(ans, 10, 4)); //Çàâîäñêîé_íîìåð(4) (00000000 .. 99999999)
unsigned char model = ans[14]; //Ìîäåëü óñòðîéñòâà 42 Àóðà-01ÔÐ-KZ 43 PayVKP-80KZ
//Âåðñèÿ ÏÎ ÊÊÌ 2 ASCI ñèìâîëà (Ó àóðû áûëà: "30")
unsigned char mod = ans[17]; //Ðåæèì ðàáîòû
bool r0=getBitVal(mod,0); //0-é (ìëàäøèé) áèò: 0 áóìàãà åñòü, 1 íåò áóìàãè (â ïðèíòåðå ÷åêîâ).
bool r1=getBitVal(mod,1); //1-é áèò: 0 ñâÿçü ñ ïðèíòåðîì ÷åêîâ åñòü, 1 ñâÿçè íåò.
bool r2=getBitVal(mod,2); //2-é áèò: 0 íåò îøèáîê, 1 ìåõàíè÷åñêàÿ îøèáêà ïå÷àòàþùåãî óñòðîéñòâà.
bool r3=getBitVal(mod,3); //3-é áèò: 0 íåò îøèáîê îòðåç÷èêà, 1 îøèáêà îòðåç÷èêà.
bool r4=getBitVal(mod,4); //4-é áèò: 0 íåò îøèáîê ïðèíòåðà, 1 âîññòàíîâèìàÿ îøèáêà ïðèíòåðà (ïåðåãðåâ).
bool r5=getBitVal(mod,5); //5-é áèò: 0 áóôåð ïðèíòåðà ÏÄ èñïîëüçóåòñÿ, 1 áóôåð ïðèíòåðà ÏÄ ïóñòîé.
bool r6=getBitVal(mod,6); //6-é áèò: 0 áóôåð ïðèíòåðà ÏÄ íå ïåðåïîëíåí, 1 áóôåð ïðèíòåðà ÏÄ ïåðåïîëíåí.
unsigned int ns=StdStrToInt(DecodeBSD(ans, 18, 2)); //Íîìåð ÷åêà 0000..9999 (áûëî 38)
unsigned int nc=StdStrToInt(DecodeBSD(ans, 20, 2)); //Íîìåð ñìåíû 0000..9999 (áûëî 0)
unsigned char stn = ans[22]; //Ñîñòîÿíèå ÷åêà
//0-1 áèò: 0 ÷åê çàêðûò, 1 îòêðûò ÷åê ðåãèñòðàöèè, 2- îòêðûò ÷åê âîçâðàòà, 3 îòêðûò ÷åê àííóëèðîâàíèÿ.
//2 áèò: 0 ÷åê ïðîäàæè, 1 ÷åê ïîêóïêè (òèï ÷åêà áèòû 0-1).
//3 áèò: 0 ÷åê ôîðìèðóåòñÿ ñðàçó, 1 ôîðìèðóåòñÿ îòëîæåííûé äîêóìåíò.
unsigned int sum=StdStrToInt(DecodeBSD(ans, 23, 5)); //Ñóììà ÷åêà 0000000000 .. 9999999999 ãäå. - ñóììà òåêóùåãî ÷åêà (èìååò ñìûñë òîëüêî â ðåæèìå ðåãèñòðàöèè), ôîðìàò BCD.
//unsigned int dot=ans[28]; //Äåñÿòè÷íàÿ òî÷êà 0 .. 3 - ïîëîæåíèå äåñÿòè÷íîé òî÷êè âî âñåõ äåíåæíûõ âåëè÷èíàõ (êîë-âî ðàçðÿäîâ ñïðàâà îò äåñÿòè÷íîé òî÷êè)
m_Dots=ans[28]; //Äåñÿòè÷íàÿ òî÷êà 0 .. 3 - ïîëîæåíèå äåñÿòè÷íîé òî÷êè âî âñåõ äåíåæíûõ âåëè÷èíàõ (êîë-âî ðàçðÿäîâ ñïðàâà îò äåñÿòè÷íîé òî÷êè)
unsigned int port=ans[29]; //Ïîðò Íîìåð ïîðòà ÊÊÌ, ê êîòîðîìó ïîäêëþ÷åí ÏÊ. Ôîðìàò äâîè÷íî-äåñÿòè÷íîå ÷èñëî èç äèàïàçîíà: 1, 2, 3. Î ïîðòàõ áîëåå ïîäðîáíî ãîâîðèòñÿ íà ñòðàíèöå 84.
}
return true;
}
//---------------------------------------------------------------------------
//Îòêðûòèå ôèñêàëüíîãî (êëèåíòñêîãî) ÷åêà
/*Òèï ÷åêà
1 ÷åê ïðîäàæè
2 ÷åê âîçâðàòà ïðîäàæè
3 ÷åê àííóëèðîâàíèÿ ïðîäàæè
4 ÷åê ïîêóïêè
5 ÷åê âîçâðàòà ïîêóïêè
6 ÷åê àííóëèðîâàíèÿ ïîêóïêè.
*/
bool AYRA01FRKZ::OpenFiscalInv(unsigned char type)
{
std::string req;
req=CodeBSD(m_Password);
req+=(char)fc92;
req+=(char)0x00;
req+=(char)type;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
std::string ans;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Óñòàíîâèòü äàòó è âðåìÿ
bool AYRA01FRKZ::SetDateTime(unsigned char ye,unsigned char mo,unsigned char de,unsigned char ho,unsigned char mi,unsigned char se)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc4B;
req+=CodeBSD(ye); //Ãîä
req+=CodeBSD(mo); //Ìåñÿö
req+=CodeBSD(de); //Äåíü
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode!=0) return false;
req=CodeBSD(m_Password);
req+=fc64;
req+=CodeBSD(ho); //×àñû
req+=CodeBSD(mi); //Ìèíóòû
req+=CodeBSD(se); //Ñåêóíäû
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode!=0) return false;
return true;
}
//---------------------------------------------------------------------------
//Íàëè÷íûõ â äåíþæíîì ÿùèêå
bool AYRA01FRKZ::GetCashSum(double* sum)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc4D;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
*sum=0;
m_ErrorCode=(unsigned char)ans[1];
}else
if(ans[0]==fc4D)
{
*sum=BSDToInt(ans, 1, 7)/M();
m_ErrorCode=0;
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Çàïðîñ ñîñòîÿíèÿ ÊÊÌ
///state1 - Ñîñòîÿíèå èç 8 áèòîâ ñìîòðè äîêóèåíòàöèþ
bool AYRA01FRKZ::GetStateKKM(unsigned char &state1,unsigned char &state2,unsigned char &flags)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc45;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
state1=ans[1] & 15;
state2=(ans[1] >> 4) & 15;
flags=ans[2];
m_ErrorCode=0;
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Îòêðûòèå ñìåíû
//test - òåñò îïåðàöèè
//text - òåêñò äëÿ ïå÷àòè
bool AYRA01FRKZ::OpenGang(bool test, std::wstring text)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=(char)fc9A;
req+=(char)test;
req+=UnicodeToDOS886(text); //Ñàìîäåëüíîå ïðåîáðàçîâàíèå â DOS
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Àíóëèðîâàíèå âñåãî ÷åêà
bool AYRA01FRKZ::Storno()
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fcCancelFiscalInv; //fc59;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ïå÷àòü îêîí÷àíèå ÷åêà
bool AYRA01FRKZ::PrintTail()
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc73;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ïå÷àòü êîíòðîëüíîé ëåíòû
bool AYRA01FRKZ::PrintEJ(bool full,bool clear)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=(char)fcB7;
if(full) req+=CodeBSD("01"); else req+=CodeBSD("02");
if(clear) req+=CodeBSD("01"); else req+=CodeBSD("00");
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Âõîä â ðåæèì
//state - ðåæèì 1 - Ðåæèì ðåãèñòðàöèè 2 - Ðåæèì îò÷åòîâ áåç ãàøåíèÿ 3 - Ðåæèì îò÷åòîâ ñ ãàøåíèåì 4 - Ðåæèì ïðîãðàììèðîâàíèÿ 5 - Ðåæèì äîñòóïà ê ÔÏ
//password - Ïàðîëü äëÿ âõîäà âðåæèì
bool AYRA01FRKZ::EnterInState(int state,int password)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc56;
req+=CodeBSD(state,1);
req+=CodeBSD(password,4);
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Âûõîä èç ðåæèìà
bool AYRA01FRKZ::ExitFromState()
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc48;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ðåãèñòðàöèÿ ïðîäàæè (êîìàíäà ðåæèìà ðåãèñòðàöèè)
///\param price - Öåíà
///\param count - Êîëè÷åñòâî
///\param section - Ñåêöèÿ â êîòîðóþ îñóùåñòâëÿåòñÿ ðåãèñòðàöèÿ 0..30
bool AYRA01FRKZ::RegisterSale(double price, double count, unsigned char section)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc52;
req+=(char)0x00; //Äëÿ Àóðû-01ÔÐ-KZ âñåãäà 0
req+=CodeBSD(price*100.0f,5); //Öåíà(5) (Â äîêóìåíòàöèè ñêçàííî 2 çíàêà ïîñëå çàïÿòîé)
req+=CodeBSD(count*1000.0f,5); //Êîëè÷åñòâî(5) ( äîêóìåíòàöèè ñêçàííî 3 çíàêà ïîñëå çàïÿòîé)
req+=CodeBSD(section,1); //Ñåêöèÿ(1)
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ñòîðíèðîâàíèå ïðîäàæè
bool AYRA01FRKZ::StornoSale(bool test, double price, double count, unsigned char section)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc4E;
req+=(char)test;
req+=CodeBSD(price*100.0f,5); //Öåíà(5)
req+=CodeBSD(count*1000.0f,5); //Êîëè÷åñòâî(5)
req+=CodeBSD(section,1); //Ñåêöèÿ(1) 0..30
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
bool AYRA01FRKZ::Abort(bool test, bool nal, double price, double count)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc41;
unsigned char ch=0;
setBit(&ch,7,test); //Òåñò
setBit(&ch,6,nal); //Ïðîâåðÿòü ëè íàëè÷íîñòü
req+=(char)ch;
req+=CodeBSD(price*M(),5);
req+=CodeBSD(count*1000,5);
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
bool AYRA01FRKZ::Return(bool test, bool nal, double price, double count)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc57;
unsigned char ch=0;
setBit(&ch,7,test); //Òåñò
setBit(&ch,6,nal); //Ïðîâåðÿòü ëè íàëè÷íîñòü
req+=(char)ch;
//req+=(char)test;
req+=CodeBSD(price*M(),5);
req+=CodeBSD(count*1000,5);
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Îòìåíà ïîñëåäíåé ñêèäêè/íàäáàâêè
bool AYRA01FRKZ::ReturnDiscount()
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc78;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ðàñ÷¸ò ïî ÷åêó
//test - Ïðîâåðêà ìîæíî ëè âûïîëíèòü äàííóþ îïåðàöèþ
//type - Òèï îïëàòû 1 - íàëè÷íûìè 2,3,4 - îñòàëüíûå òèïû îïëàòû
//price - Ñóììà äëÿ ðàñ÷¸òà
bool AYRA01FRKZ::Settle(bool test,int type,double price)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=(char)fc99;
req+=(char)test;
req+=CodeBSD(type,1); //Òèï îïëàòû (1)
req+=CodeBSD(price*M(),5); //Ñóììà (5)
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ñòîðíî ðàñ÷¸òà ïî ÷åêó
//test - Ïðîâåðêà ìîæíî ëè âûïîëíèòü äàííóþ îïåðàöèþ
//type - Òèï îïëàòû (0,1,2,3 - 0 íàëè÷íûìè)
//price - Ñóììà äëÿ ðàñ÷¸òà
//remainder - Îñòàòîê
//deal - Ñäà÷à
bool AYRA01FRKZ::ReturnSettle(bool test,int type,double price, double* remainder, double* deal)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=(char)fc9B;
req+=(char)test;
req+=CodeBSD(type,1); //Òèï îïëàòû (1)
req+=CodeBSD(price,5); //Ñóììà (5)
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
if(m_ErrorCode==0) //Åñëè íåò îøèáêè âûáèðàåì "Îñòàòîê" è "Ñäà÷ó"
{
*remainder=BSDToInt(ans, 2, 5);
*deal=BSDToInt(ans, 7, 5);
}else { *remainder=0; *deal=0; }
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Çàêðûòü ÷åê ñî çäà÷åé
//<Ôëàãè(1)><Òèï îïëàòû(1)><Âíåñåííàÿ ñóììà(5)>.
bool AYRA01FRKZ::CloseFiscalInv(bool test, int type, double price)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc4A;
req+=(char)test;
req+=CodeBSD(type,1); //Òèï îïëàòû (1)
req+=CodeBSD(price*M(),5); //Ñóììà (5)
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//Ñêèäêà - ëèáî íàäáàâêà +
//area - Íà ïîîñëåäíþþ îïåðàöèþ 0 ëèáî íà âåñü ÷åê 1
//abs - Ïðîöåíòîì 0 ñóììîé 1
//price - Çíà÷åíèå +- â ïðîöåíòàõ ëèáî ñóììîé
bool AYRA01FRKZ::Discount(bool test, bool area, bool abs, double price)
{
std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc43;
req+=(char)test;
req+=(char)area;
req+=(char)abs;
if(price<0) req+=(char)0x00; else req+=(char)0x01;
if(abs)
req+=CodeBSD(price*M(),5); //ñóììîé
else
req+=CodeBSD(price*M(),3); //Ïðîöåíòîì
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
//×òåíèå ïîëÿ èç òàáëèöû
bool AYRA01FRKZ::ReadTable(unsigned char table,unsigned short row,unsigned char field, std::string& ans)
{
//std::string ans;
std::string req;
req=CodeBSD(m_Password);
req+=fc46;
req+=table;
req+=((unsigned char *)&row)[1]; //Ñ íà÷àëà ñòàðøèé ïîòîì ìëàäøèé áàéò
req+=((unsigned char *)&row)[0]; //Ñ íà÷àëà ñòàðøèé ïîòîì ìëàäøèé áàéò
req+=field;
m_ErrorCode=200;
if(!WriteReqwest(req)) return false;
if(!ReadAnswer(ans)) return false;
if(ans.length()>3)
{
if(ans[0]==0x55) //Ïðèø¸ë êîä îøèáêè
{
m_ErrorCode=(unsigned char)ans[1];
}
}
if(m_ErrorCode==0) return true; else return false;
}
//---------------------------------------------------------------------------
/*Ïðîãðàììèðîâàíèå äàòû
Êîìàíäà: "d" <Äåíü(1)><Ìåñÿö(1)><Ãîä(1)>
Îòâåò: "U" <Êîä Îøèáêè(1)><0>.
Êîä êîìàíäû ("d", 64h, 100).
Äîïóñòèìûå çíà÷åíèÿ (ôîðìàò BCD) ñì. êîìàíäó Çàïðîñ ñîñòîÿíèÿ
ÊÊÌ íà ñòð. 29.
Ïðèìå÷àíèå 1: Åñëè ââîäèìàÿ äàòà ìåíüøå äàòû ïîñëåäíåé çàïèñè ÔÏ, òî ÊÊÌ
áëîêèðóåòñÿ äî ââîäà ïðàâèëüíîé äàòû.
Ïðèìå÷àíèå 2: Åñëè ââîäèìàÿ äàòà ïðåâûøàåò òåêóùóþ äàòó ÊÊÌ õîòÿ áû íà îäèí
äåíü, òî ÊÊÌ îæèäàåò ïîäòâåðæäåíèÿ ââîäà äàòû. Äëÿ ïîäòâåðæäåíèÿ ââîäà äàòû
íåîáõîäèìî ïîâòîðèòü êîìàíäó «Ïðîãðàììèðîâàíèå äàòû».
Âíèìàíèå! Êîìàíäà ìîæåò áûòü âûïîëíåíà òîëüêî ïðè çàêðûòîé ñìåíå.
Âíèìàíèå! Íå âûïîëíÿòü äàííóþ êîìàíäó, åñëè ÊÊÌ çàáëîêèðîâàíà â ðåçóëüòàòå
ïîÿâëåíèÿ îøèáêè ÝÆ, ò.ê. ýòî ìîæåò âûçâàòü ñáîé â ïàìÿòè ÊÊÌ.
Ïðîãðàììèðîâàíèå âðåìåíè
Êîìàíäà: "K" <×àñ(1)><Ìèíóòà(1)><Ñåêóíäà(1)>
Îòâåò: "U" <Êîä Îøèáêè(1)><0>.
Êîä êîìàíäû ("K", 4Bh, 75).
Äîïóñòèìûå çíà÷åíèÿ (ôîðìàò BCD) ñì. êîìàíäó Çàïðîñ ñîñòîÿíèÿ
ÊÊÌ íà ñòð. 29.
Ïðèìå÷àíèå: Êîìàíäà ìîæåò áûòü âûïîëíåíà òîëüêî â òîì ñëó÷àå, åñëè òåêóùàÿ äàòà
ÊÊÌ ìåíüøå 01.01.2090 è áîëüøå 31.12.1999.
Âíèìàíèå! Êîìàíäà ìîæåò áûòü âûïîëíåíà òîëüêî ïðè çàêðûòîé ñìåíå.
Âíèìàíèå! Íå âûïîëíÿòü äàííóþ êîìàíäó, åñëè ÊÊÌ çàáëîêèðîâàíà â ðåçóëüòàòå
ïîÿâëåíèÿ îøèáêè ÝÆ, ò.ê. ýòî ìîæåò âûçâàòü ñáîé â ïàìÿòè ÊÊÌ.
*/
//---------------------------------------------------------------------------
std::wstring AYRA01FRKZ::GetErrorDesc(int ResultCode)
{
std::wstring result;
switch( ResultCode )
{
case 0: result=L"Îøèáîê íåò"; break;
case 1: result=L"Êîíòðîëüíàÿ ëåíòà îáðàáîòàíà áåç îøèáîê"; break;
case 8: result=L"Íåâåðíàÿ öåíà (ñóììà)"; break;
case 10: result=L"Íåâåðíîå êîëè÷åñòâî"; break;
case 11: result=L"Ïåðåïîëíåíèå ñ÷åò÷èêà íàëè÷íîñòè"; break;
case 12: result=L"Íåâîçìîæíî ñòîðíî ïîñëåäíåé îïåðàöèè"; break;
case 13: result=L"Ñòîðíî ïî êîäó íåâîçìîæíî (â ÷åêå çàðåãèñòðèðîâàíî ìåíüøåå êîëè÷åñòâî òîâàðîâ ñ óêàçàííûì êîäîì)"; break;
case 14: result=L"Íåâîçìîæåí ïîâòîð ïîñëåäíåé îïåðàöèè"; break;
case 15: result=L"Ïîâòîðíàÿ ñêèäêà íà îïåðàöèþ íåâîçìîæíà"; break;
case 16: result=L"Ñêèäêà/íàäáàâêà íà ïðåäûäóùóþ îïåðàöèþ íåâîçìîæíà"; break;
case 17: result=L"Íåâåðíûé êîä òîâàðà"; break;
case 18: result=L"Íåâåðíûé øòðèõ-êîä òîâàðà"; break;
case 19: result=L"Íåâåðíûé ôîðìàò"; break;
case 20: result=L"Íåâåðíàÿ äëèíà"; break;
case 21: result=L"ÊÊÌ çàáëîêèðîâàíà â ðåæèìå ââîäà äàòû"; break;
case 22: result=L"Òðåáóåòñÿ ïîäòâåðæäåíèå ââîäà äàòû"; break;
case 24: result=L"Íåò áîëüøå äàííûõ äëÿ ïåðåäà÷è ÏÎ ÊÊÌ"; break;
case 25: result=L"Íåò ïîäòâåðæäåíèÿ èëè îòìåíû ïðîäàæè"; break;
case 26: result=L"Îò÷åò ñ ãàøåíèåì ïðåðâàí. Âõîä â ðåæèì íåâîçìîæåí."; break;
case 27: result=L"Îòêëþ÷åíèå êîíòðîëÿ íàëè÷íîñòè íåâîçìîæíî (íå íàñòðîåíû íåîáõîäèìûå òèïû îïëàòû)."; break;
case 30: result=L"Âõîä â ðåæèì çàáëîêèðîâàí"; break;
case 31: result=L"Ïðîâåðüòå äàòó è âðåìÿ"; break;
case 32: result=L"Çàðåçåðâèðîâàíî"; break;
case 33: result=L"Íåâîçìîæíî çàêðûòü àðõèâ"; break;
case 61: result=L"Òîâàð íå íàéäåí"; break;
case 62: result=L"Âåñîâîé øòðèõ-êîä ñ êîëè÷åñòâîì <>1.000"; break;
case 63: result=L"Ïåðåïîëíåíèå áóôåðà ÷åêà"; break;
case 64: result=L"Íåäîñòàòî÷íîå êîëè÷åñòâî òîâàðà"; break;
case 65: result=L"Ñòîðíèðóåìîå êîëè÷åñòâî áîëüøå ïðîäàííîãî"; break;
case 66: result=L"Çàáëîêèðîâàííûé òîâàð íå íàéäåí â áóôåðå ÷åêà"; break;
case 67: result=L"Äàííûé òîâàð íå ïðîäàâàëñÿ â ÷åêå, ñòîðíî íåâîçìîæíî"; break;
case 68: result=L"Memo PlusTM 3TM çàáëîêèðîâàíî ñ ÏÊ"; break;
case 69: result=L"Îøèáêà êîíòðîëüíîé ñóììû òàáëèöû íàñòðîåê Memo PlusTM 3TM"; break;
case 70: result=L"Íåâåðíàÿ êîìàíäà îò ÊÊÌ"; break;
case 102: result=L"Êîìàíäà íå ðåàëèçóåòñÿ â äàííîì ðåæèìå ÊÊÌ"; break;
case 103: result=L"Íåò áóìàãè"; break;
case 104: result=L"Íåò ñâÿçè ñ ïðèíòåðîì ÷åêîâ"; break;
case 105: result=L"Ìåõàíè÷åñêàÿ îøèáêà ïå÷àòàþùåãî óñòðîéñòâà"; break;
case 106: result=L"Íåâåðíûé òèï ÷åêà"; break;
case 107: result=L"Íåò áîëüøå ñòðîê êàðòèíêè"; break;
case 108: result=L"Íåâåðíûé íîìåð ðåãèñòðà"; break;
case 109: result=L"Íåäîïóñòèìîå öåëåâîå óñòðîéñòâî"; break;
case 110: result=L"Íåò ìåñòà â ìàññèâå êàðòèíîê"; break;
case 111: result=L"Íåâåðíûé íîìåð êàðòèíêè / êàðòèíêà îòñóòñòâóåò"; break;
case 112: result=L"Ñóììà ñòîðíî áîëüøå, ÷åì áûëî ïîëó÷åíî äàííûì òèïîì îïëàòû"; break;
case 113: result=L"Ñóììà íå íàëè÷íûõ ïëàòåæåé ïðåâûøàåò ñóììó ÷åêà"; break;
case 114: result=L"Ñóììà ïëàòåæåé ìåíüøå ñóììû ÷åêà"; break;
case 115: result=L"Íàêîïëåíèå ìåíüøå ñóììû âîçâðàòà èëè àííóëèðîâàíèÿ"; break;
case 117: result=L"Ïåðåïîëíåíèå ñóììû ïëàòåæåé"; break;
case 118: result=L"(çàðåçåðâèðîâàíî)"; break;
case 122: result=L"Äàííàÿ ìîäåëü ÊÊÌ íå ìîæåò âûïîëíèòü êîìàíäó"; break;
case 123: result=L"Íåâåðíàÿ âåëè÷èíà ñêèäêè / íàäáàâêè"; break;
case 124: result=L"Îïåðàöèÿ ïîñëå ñêèäêè / íàäáàâêè íåâîçìîæíà"; break;
case 125: result=L"Íåâåðíàÿ ñåêöèÿ"; break;
case 126: result=L"Íåâåðíûé âèä îïëàòû"; break;
case 127: result=L"Ïåðåïîëíåíèå ïðè óìíîæåíèè"; break;
case 128: result=L"Îïåðàöèÿ çàïðåùåíà â òàáëèöå íàñòðîåê"; break;
case 129: result=L"Ïåðåïîëíåíèå èòîãà ÷åêà"; break;
case 130: result=L"Îòêðûò ÷åê àííóëèðîâàíèÿ îïåðàöèÿ íåâîçìîæíà"; break;
case 132: result=L"Ïåðåïîëíåíèå áóôåðà êîíòðîëüíîé ëåíòû"; break;
case 134: result=L"Âíîñèìàÿ êëèåíòîì ñóììà ìåíüøå ñóììû ÷åêà"; break;
case 135: result=L"Îòêðûò ÷åê âîçâðàòà îïåðàöèÿ íåâîçìîæíà"; break;
case 136: result=L"Ñìåíà ïðåâûñèëà 24 ÷àñà"; break;
case 137: result=L"Îòêðûò ÷åê ïðîäàæè îïåðàöèÿ íåâîçìîæíà"; break;
case 138: result=L"Ïåðåïîëíåíèå ÔÏ"; break;
case 140: result=L"Íåâåðíûé ïàðîëü"; break;
case 141: result=L"Áóôåð êîíòðîëüíîé ëåíòû íå ïåðåïîëíåí"; break;
case 142: result=L"Èäåò îáðàáîòêà êîíòðîëüíîé ëåíòû"; break;
case 143: result=L"Îáíóëåííàÿ êàññà (ïîâòîðíîå ãàøåíèå íåâîçìîæíî)"; break;
case 145: result=L"Íåâåðíûé íîìåð òàáëèöû"; break;
case 146: result=L"Íåâåðíûé íîìåð ðÿäà"; break;
case 147: result=L"Íåâåðíûé íîìåð ïîëÿ"; break;
case 148: result=L"Íåâåðíàÿ äàòà"; break;
case 149: result=L"Íåâåðíîå âðåìÿ"; break;
case 150: result=L"Ñóììà ÷åêà ïî ñåêöèè ìåíüøå ñóììû ñòîðíî"; break;
case 151: result=L"Ïîäñ÷åò ñóììû ñäà÷è íåâîçìîæåí"; break;
case 152: result=L"Â ÊÊÌ íåò äåíåã äëÿ âûïëàòû"; break;
case 154: result=L"×åê çàêðûò îïåðàöèÿ íåâîçìîæíà"; break;
case 155: result=L"×åê îòêðûò îïåðàöèÿ íåâîçìîæíà"; break;
case 156: result=L"Ñìåíà îòêðûòà, îïåðàöèÿ íåâîçìîæíà"; break;
case 157: result=L"ÊÊÌ çàáëîêèðîâàíà, æäåò ââîäà ïàðîëÿ äîñòóïà ê ÔÏ"; break;
case 158: result=L"Çàâîäñêîé íîìåð óæå çàäàí"; break;
case 159: result=L"Êîëè÷åñòâî ïåðåðåãèñòðàöèé íå ìîæåò áûòü áîëåå 4"; break;
case 160: result=L"Îøèáêà Ô.Ï."; break;
case 162: result=L"Íåâåðíàÿ ñìåíà"; break;
case 163: result=L"Íåâåðíûé òèï îò÷åòà"; break;
case 164: result=L"Íåäîïóñòèìûé ïàðîëü"; break;
case 165: result=L"Íåäîïóñòèìûé çàâîäñêîé íîìåð ÊÊÌ"; break;
case 166: result=L"Íåäîïóñòèìûé ÐÍÌ"; break;
case 167: result=L"Íåäîïóñòèìûé ÈÍÍ"; break;
case 168: result=L"ÊÊÌ íå ôèñêàëèçèðîâàíà"; break;
case 169: result=L"Íå çàäàí çàâîäñêîé íîìåð"; break;
case 170: result=L"Íåò îò÷åòîâ"; break;
case 171: result=L"Ðåæèì íå àêòèâèçèðîâàí"; break;
case 172: result=L"Íåò óêàçàííîãî ÷åêà â ÊË"; break;
case 173: result=L"Íåò áîëüøå çàïèñåé ÊË"; break;
case 174: result=L"Íåêîððåêòíûé êîä èëè íîìåð êîäà çàùèòû ÊÊÌ"; break;
case 176: result=L"Òðåáóåòñÿ âûïîëíåíèå îáùåãî ãàøåíèÿ"; break;
case 177: result=L"Êîìàíäà íå ðàçðåøåíà ââåäåííûìè êîäàìè çàùèòû ÊÊÌ"; break;
case 178: result=L"Íåâîçìîæíà îòìåíà ñêèäêè/íàäáàâêè"; break;
case 179: result=L"Íåâîçìîæíî çàêðûòü ÷åê äàííûì òèïîì îïëàòû (â ÷åêå ïðèñóòñòâóþò îïåðàöèè áåç êîíòðîëÿ íàëè÷íûõ)"; break;
case 186: result=L"Îøèáêà îáìåíà ñ ôèñêàëüíûì ìîäóëåì"; break;
case 190: result=L"Íåîáõîäèìî ïðîâåñòè ïðîôèëàêòè÷åñêèå ðàáîòû"; break;
case 200: result=L"Íåò óñòðîéñòâà, îáðàáàòûâàþùåãî äàííóþ êîìàíäó"; break;
case 201: result=L"Íåò ñâÿçè ñ âíåøíèì óñòðîéñòâîì"; break;
case 202: result=L"Îøèáî÷íîå ñîñòîÿíèå ÒÐÊ"; break;
case 203: result=L"Áîëüøå îäíîé ðåãèñòðàöèè â ÷åêå"; break;
case 204: result=L"Îøèáî÷íûé íîìåð ÒÐÊ"; break;
case 205: result=L"Íåâåðíûé äåëèòåëü"; break;
case 207: result=L"Â ÊÊÌ ïðîèçâåäåíî 20 àêòèâèçàöèé"; break;
case 208: result=L"Çàðåçåðâèðîâàíî"; break;
case 209: result=L"Ïåðåãðåâ ãîëîâêè ïðèíòåðà"; break;
case 210: result=L"Çàðåçåðâèðîâàíî"; break;
case 211: result=L"Çàðåçåðâèðîâàíî"; break;
case 212: result=L"Çàðåçåðâèðîâàíî"; break;
case 213: result=L"Çàðåçåðâèðîâàíî"; break;
case 214: result=L"Çàðåçåðâèðîâàíî"; break;
case 215: result=L"Çàðåçåðâèðîâàíî"; break;
case 216: result=L"Çàðåçåðâèðîâàíî"; break;
case 217: result=L"Çàðåçåðâèðîâàíî"; break;
case 218: result=L"Çàðåçåðâèðîâàíî"; break;
case 219: result=L"Çàðåçåðâèðîâàíî"; break;
case 220: result=L"Áóôåð ïåðåïîëíåí"; break;
case 221: result=L"Íåâîçìîæíî íàïå÷àòàòü âòîðóþ ôèñêàëüíóþ êîïèþ"; break;
case 222: result=L"Òðåáóåòñÿ ãàøåíèå ÝÆ"; break;
default:
result=L"Íåò îïèñàíèÿ îøèáêè!";
}
return result;
}
//---------------------------------------------------------------------------