первый

This commit is contained in:
2024-11-01 12:23:13 +05:00
parent 801d9d33fa
commit 0688c46a7e
226 changed files with 162921 additions and 0 deletions

View File

@ -0,0 +1,645 @@
//---------------------------------------------------------------------------
#pragma hdrstop
#include "PrinterOPOS.h"
#include "OposFiscalPrinter_1_7_Lib_OCX.h"
#include "ud_Module.h"
#include <Registry.hpp>
#include <Math.h>
#include <DateUtils.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
PrinterOPOS* printerOPOS;
//---------------------------------------------------------------------------
char * kkm_err_msg_ru[] = {
"OK", //0
"<EFBFBD><EFBFBD> ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //1 FM ID Error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> ", //2 FM Rec Error
"Flash Chip <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //3 Flash Chip cant clear
"<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>", //4 FM not empty
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //5 FM Data destroyed
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>", //6 Cmd ignor prn mode
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //7 Oper code is absent
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //8 Doc type is absent
"<EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>", //9 Ser num CR
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //10 Password error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>", //11 Data/Time error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>", //12 Factory registration has already pass
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //13 Ser num CR destroyed
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>", //14 Fiscalize has already pass
"<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>", //15 Not fisc mode CR
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //16 Fiscalize Data destroyed
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //17 Rewrite is conclude
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //18 Rewrite is destroyed
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //19 Shift already open
"<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //20 Shift not opened
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>", //21 Many goods in receipt
"<EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //22 EOD data in FM destroyed
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //23 Document format error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //24 Text rewrite
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD> <20><><EFBFBD>", //25 Many parameters in document
"<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><>", //26 Document parameters error
"<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><>", //27 Parameters value error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //28 Object non-existent
"<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //29 Document is not finished
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>", //30 goods/operation description not enough
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //31 Check sum packet
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>", //32 Prn not ready
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //33 Nested interrupts
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //34 Check Sum Error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>", //35 Overflow if FM
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //36 Unknown command
"CRC <20><><EFBFBD>", //37 CRC RAM
"CRC <20><>", //38 CRC FM
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //39 Data port defective
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", //40 Receipts parameters sequence
"0xy <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>", //41 0xy for required properties
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //42 Length request
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>", //43 number capacity
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //44 Overflow
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>", //45 Number is absent
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //46 Not response
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //47 Transmission error
"<EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //48 Math overflow
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...", //49 Paper out...
"<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!", //50 CR not ready!!!
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!", //51 Memory error!!
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //52 Printer off
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //53 Insufficient memory
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //54 Lenght number less
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //55 Zero lenght number
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //56 Password lenght less permissible
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //57 Zero lenght password
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", //58 Impossible value
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD>", //59 Time-out overdraw
"",
"<EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"","","","","","",//69
"","","","","","","","","","",//79
"","","","","","","","","","",//89
"","","","","","","","","","",//99
"","","","","","","","","","",//109
"","","","","","","","","","",//119
"","","","","","","","","","",//129
"","","","","","","","","","",//139
"","","","","","","","","","",//149
"","","","","","","","","","",//159
"","","","","","","","","","",//169
"","","","","","","","","","",//179
"","","","","","","","","","",//189
"","","","","","","","","","",//199
"","","","","","","","","","",//209
"","","","","","","","","","",//219
"","","","","","","","","","",//229
"","","","","","","","","","",//239
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>",//240 Cmd not init
"<EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//241 Cmd write err
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(DSR=0)",//242 Prn not ready (DSR=0)
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//243 Cmd ok
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//244 Cmd resp timeout
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//245 Prn error
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//246 Cmd resp large
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//247 Cmd resp small
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//248
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//249
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//250 Cmd break
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//251
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//252
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//253
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",//254
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)!"//255 Previous cmd run
};
//---------------------------------------------------------------------------
PrinterOPOS::PrinterOPOS(TComponent* AOwner)
{
Crashed=false;
fp=new TOPOSFiscalPrinter(AOwner);
fp->DeviceEnabled = False;
FListGoods= new TList();
LoadSetup();
}
//---------------------------------------------------------------------------
PrinterOPOS::~PrinterOPOS()
{
delete FListGoods;
delete fp;
}
//---------------------------------------------------------------------------
void PrinterOPOS::LoadSetup()
{
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
// cPort->port=ini->ReadString("Printer","Port","");
// cPort->BaudRate=ini->ReadInteger("Printer","BaudRate",0);
CheckId=ini->ReadInteger("Printer","CheckCount",0);
TestMode=ini->ReadBool("Printer","TestMode",true);
HeadLine=ini->ReadString("Printer","HeadLine","");
delete ini;
}
//---------------------------------------------------------------------------
void PrinterOPOS::SaveSetup()
{
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",CheckId);
ini->WriteBool("Printer","TestMode",CheckId);
ini->WriteString("Printer","HeadLine",HeadLine);
delete ini;
}
//---------------------------------------------------------------------------
bool PrinterOPOS::Start() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> COM <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(fp->DeviceEnabled) return true;
FState = fp->Open(L"MbsFiscalPrinter");
if(FState!=0)
{
saveLog(IntToStr(FState)+"(PrinterOPOS::Start)"+GetStatusDescription(FState));
return false;
}
FState = fp->ClaimDevice(1000);
if(FState!=0)
{
saveLog(IntToStr(FState)+"(PrinterOPOS::Start)"+GetStatusDescription(FState));
return false;
}
fp->DeviceEnabled = True;
return true;
}
//---------------------------------------------------------------------------
void PrinterOPOS::setHeader(TStrings* Text)
{
//if(fp->DayOpened){FState=19; return;}
long err;
for(int i=0;i<Text->Count;i++)
{
WideString str=Text->Strings[i];
err=fp->SetHeaderLine(i+1,str,false);
if(err!=0)
{
saveLog(IntToStr(err)+"(PrinterOPOS::setHeader)"+GetStatusDescription(err));
break;
}
}
err=fp->ResetPrinter();
if(err!=0) saveLog(IntToStr(err)+"(PrinterOPOS::setHeader)"+GetStatusDescription(err));
}
//---------------------------------------------------------------------------
void PrinterOPOS::getHeader(TStrings* Text)
{
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
Text->Add(ini->ReadString("Printer","HeadLine1",""));
Text->Add(ini->ReadString("Printer","HeadLine2",""));
Text->Add(ini->ReadString("Printer","HeadLine3",""));
Text->Add(ini->ReadString("Printer","HeadLine4",""));
Text->Add(ini->ReadString("Printer","HeadLine5",""));
delete ini;
for(int i=Text->Count-1;i>=0;i--)
if(Text->Strings[i]=="")Text->Delete(i); else break;
}
//---------------------------------------------------------------------------
void PrinterOPOS::setTrailer(TStrings* Text)
{
//if(fp->DayOpened){FState=19; return;}
long err;
for(int i=0;i<Text->Count;i++)
{
WideString str=Text->Strings[i];
err=fp->SetTrailerLine(i+1,str,false);
if(err!=0)
{ saveLog(IntToStr(err)+"(PrinterOPOS::setTrailer)"+GetStatusDescription(err));
break;
}
}
err=fp->ResetPrinter();
if(err!=0) saveLog(IntToStr(err)+"(PrinterOPOS::setTrailer)"+GetStatusDescription(err));
}
//---------------------------------------------------------------------------
void PrinterOPOS::getTrailer(TStrings* Text)
{
TIniFile* ini=new TIniFile(ExtractFilePath(ParamStr(0))+"\\Setup.ini");
Text->Add(ini->ReadString("Printer","TailLine1",""));
Text->Add(ini->ReadString("Printer","TailLine2",""));
Text->Add(ini->ReadString("Printer","TailLine3",""));
Text->Add(ini->ReadString("Printer","TailLine4",""));
Text->Add(ini->ReadString("Printer","TailLine5",""));
delete ini;
for(int i=Text->Count-1;i>=0;i--)
if(Text->Strings[i]=="")Text->Delete(i); else break;
}
//---------------------------------------------------------------------------
void PrinterOPOS::addGoods(Goods* goods)
{
FListGoods->Add(goods);
}
//---------------------------------------------------------------------------
void PrinterOPOS::ClearGoods()
{
try
{
while(FListGoods->Count>0)
{
Goods* g=(Goods*)FListGoods->Items[0];
delete g;
FListGoods->Delete(0);
}
FListGoods->Clear();
}catch(...)
{
Crashed=true;
}
}
//---------------------------------------------------------------------------
int PrinterOPOS::getGoodsPrice()
{
int sum=0;
for(int i=0;i<FListGoods->Count;i++)
sum+=((Goods*)FListGoods->Items[i])->price;
return sum;
}
//------------------------------------------------------------------------------
int PrinterOPOS::getNextCheckId()
{
CheckId++; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SaveSetup(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
return CheckId;
}
//------------------------------------------------------------------------------
bool PrinterOPOS::SaveCheck(int CheckId) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>)
{
if(dModule->UserType) //true - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>; false - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
dModule->SaveCheck(CheckId,dModule->UserId,0,getGoodsPrice());
else
dModule->SaveCheck(CheckId,0,dModule->UserId,getGoodsPrice());
}
//---------------------------------------------------------------------------
bool PrinterOPOS::deleteCheck(int CheckId) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
dModule->UpdateChek(CheckId);
}
//---------------------------------------------------------------------------
bool PrinterOPOS::PrintLine(WideString line)
{
//<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long err = fp->PrintNormal(2, WideString(WCHAR(0x1B)) + WideString(WCHAR(0x7C)) + line + L"\n");
return err==0;
}
//---------------------------------------------------------------------------
//sales - true <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, false - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//check - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> =0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//TODO <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
bool PrinterOPOS::PrintCheck(bool sales, int check) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
long err=0;
Currency cur=0;
Currency cAllPrice=0;
bool bOk=true;
try
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
cAllPrice=getGoodsPrice();
if(check==0) //<2F><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
{
CheckId++; //<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
check=CheckId;
SaveSetup(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}
if(fp->RecEmpty) throw Exception("<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
if(!DayOpened())
if(!OpenShift()) throw Exception("<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>");
Currency UnitPrice,AllPriceDrb,AllPrice;
long Qnt,vat;
BSTR* bstr;
WideString sStr;
BSTR sTmp=new OLECHAR[255];
sTmp=L"";
long MbsResponceCode;
CURRENCY Amount1,Amount2;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//vat=11; sTmp=L"<22><><EFBFBD><EFBFBD><EFBFBD>";
//err = fp->DirectIO(4, &vat, &sTmp);
//if (err) goto ErrHandler;
if(sales) fp->FiscalReceiptType = FPTR_RT_SALES; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else fp->FiscalReceiptType=FPTR_RT_SERVICE; //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>)
err = fp->BeginFiscalReceipt(true);
if (err) throw Exception(getLastError(&err)); //251
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(int i=0;i<FListGoods->Count;i++)
{
Goods* goods=(Goods*)FListGoods->Items[i];
VarCyFromR8(goods->price*100,&Amount1);
Amount2.int64=0;
err=fp->PrintRecItem(goods->name+L"-/--/-0", Amount1, goods->count, goods->VatInfo, Amount2, L"<EFBFBD><EFBFBD>");
if (err) throw Exception(getLastError(&err));
}
ClearGoods();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> PrintRecTotal)
err = fp->DirectIO(3, &CheckId, &sTmp);
if (err) throw Exception(getLastError(&err));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//setNalog(1,12);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
Amount2.int64=0;
VarCyFromR8(cAllPrice*100,&Amount1);
err=fp->PrintRecTotal(Amount1, Amount1, L"na");
if (err) throw Exception(getLastError(&err));
err = fp->EndFiscalReceipt(True); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (AdditionalTrailer) <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(err) throw Exception(getLastError(&err));
}
catch(Exception &exception)
{
printerOPOS->ClearGoods();
if(err==251) Crashed=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
saveLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: N: "+IntToStr(dModule->UserId)+" <20><><EFBFBD><EFBFBD><EFBFBD>: "+CurrToStr(cAllPrice)+" <20><><EFBFBD>: "+IntToStr(CheckId)+". "+exception.Message);
dModule->SendError(err,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: N: "+IntToStr(dModule->UserId)+" <20><><EFBFBD><EFBFBD><EFBFBD>: "+IntToStr(cAllPrice)+" <20><><EFBFBD>: "+IntToStr(CheckId)+". "+exception.Message);
bOk=false;
}
catch(...)
{
printerOPOS->ClearGoods();
if(err==251) Crashed=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
saveLog("<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: N: "+IntToStr(dModule->UserId)+" <20><><EFBFBD><EFBFBD><EFBFBD>: "+IntToStr(cAllPrice)+" <20><><EFBFBD>: "+IntToStr(CheckId));
dModule->SendError(1,"<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>: N: "+IntToStr(dModule->UserId)+" <20><><EFBFBD><EFBFBD><EFBFBD>: "+IntToStr(cAllPrice)+" <20><><EFBFBD>: "+IntToStr(CheckId));
bOk=false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if(!bOk)
{
fp->PrintRecVoid(L"");
}
return bOk;
}
//---------------------------------------------------------------------------
void PrinterOPOS::Cut() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
FState = fp->PrintNormal(2, WideString(WCHAR(0x1B)) + WideString(WCHAR(0x7C)) + "75P"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FState!=0) saveLog(IntToStr(FState)+"(PrinterOPOS::Cut)"+GetStatusDescription(FState));
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int PrinterOPOS::GetState()
{
if(!fp->DeviceEnabled)FState=245;
//if(FState!=0) return FState;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
// fp->ResultCodeExtended
return 0;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool PrinterOPOS::isOk()
{
long err=0;
try
{
if(Crashed) throw Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
if(fp->RecEmpty) throw "<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
AnsiString str;
if(!DayOpened())
OpenShift();
if(DayOpened())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
TDateTime dt=getDateOpenShift();
str=getLastError(&err);
if(err) throw Exception(getLastError(&err));
dModule->getDate();
if(HoursBetween(dt,dModule->date)>24) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> 24 <20><><EFBFBD><EFBFBD><EFBFBD>
throw Exception("[1]<5D><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
} else throw Exception("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
BSTR bstr=new OLECHAR[50];
err=fp->GetDate(&bstr);
if(err) throw Exception(getLastError(&err));
}
catch(Exception &exception)
{
if(err==251) Crashed=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
saveLog("(PrinterOPOS::isOk)"+exception.Message);
dModule->SendError(1,"(PrinterOPOS::isOk)"+exception.Message);
return false;
}
catch (...)
{
if(err==251) Crashed=true; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
saveLog("(PrinterOPOS::isOk)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
dModule->SendError(1,"(PrinterOPOS::isOk)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return false;
}
return true;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
TDateTime PrinterOPOS::getDateOpenShift()
{
long iTmp,err;
BSTR sTmp=new OLECHAR[50];
err = fp->DirectIO(13, &iTmp, &sTmp);
if(err!=0) return 0;
return StrToDateTime(sTmp);
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AnsiString PrinterOPOS::GetStatusDescription(long err)
{
AnsiString str;
try
{
if(err<256)
str=kkm_err_msg_ru[err];
if(str=="") str="<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}catch(...)
{
saveLog("(PrinterOPOS::GetStatusDescription) <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return "<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
return str;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AnsiString PrinterOPOS::getLastError(long* err)
{
BSTR str=new OLECHAR[255];
str=L"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!";
try
{
fp->DirectIO(1, err, &str);
}catch(...)
{
saveLog("(PrinterOPOS::getLastError) <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
if(str==L"") return GetStatusDescription(*err);
return str;
}
//---------------------------------------------------------------------------
AnsiString PrinterOPOS::getLastError()
{
long err;
return getLastError(&err);
}
//---------------------------------------------------------------------------
int PrinterOPOS::getCOMPort()
{
int n=-1;
TRegistry* reg=new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
if(reg->OpenKeyReadOnly("\\SOFTWARE\\OLEforRetail\\ServiceOPOS\\FiscalPrinter\\MbsFiscalPrinter"))
{
n = reg->ReadInteger("COM Num");
}
delete reg;
return n;
}
//---------------------------------------------------------------------------
void PrinterOPOS::setCOMPort(int n)
{
TRegistry* reg=new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
if(reg->OpenKey("\\SOFTWARE\\OLEforRetail\\ServiceOPOS\\FiscalPrinter\\MbsFiscalPrinter",true))
{
reg->WriteInteger("COM Num",n);
}
delete reg;
}
//---------------------------------------------------------------------------
int PrinterOPOS::getBaudRate()
{
int n=-1;
TRegistry* reg=new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
if(reg->OpenKeyReadOnly("\\SOFTWARE\\OLEforRetail\\ServiceOPOS\\FiscalPrinter\\MbsFiscalPrinter"))
{
n = reg->ReadInteger("COM Speed");
}
delete reg;
return n;
}
//---------------------------------------------------------------------------
void PrinterOPOS::setBaudRate(int val)
{
TRegistry* reg=new TRegistry;
reg->RootKey = HKEY_LOCAL_MACHINE;
if(reg->OpenKey("\\SOFTWARE\\OLEforRetail\\ServiceOPOS\\FiscalPrinter\\MbsFiscalPrinter",true))
{
reg->WriteInteger("COM Speed",val);
}
delete reg;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool PrinterOPOS::PrintZReport()
{
int sum=getDaySum();
long err=fp->PrintZReport();
if(err==0)
{
dModule->addZReport(sum);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Z <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dModule->addPaper(-142*2);//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else
{
saveLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Z <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
dModule->SendError(1,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Z <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
return err==0;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
void PrinterOPOS::PrintXReport()
{
fp->PrintXReport();
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
bool PrinterOPOS::OpenShift()
{
long n=1;
BSTR str=L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1";
long err=fp->DirectIO (6,&n,&str); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(err!=0) saveLog(IntToStr(err)+"(PrinterOPOS::OpenShift)"+GetStatusDescription(err));
err=fp->SetVatValue(1,L"120");
return err==0;
}
//---------------------------------------------------------------------------
bool PrinterOPOS::DayOpened()
{
return fp->DayOpened;
}
//---------------------------------------------------------------------------
bool PrinterOPOS::setTrainingMode(bool val)
{
if(getTrainingMode()==val) return true;
long err;
if(val) err=fp->BeginTraining(); else err=fp->EndTraining();
AnsiString str=getLastError(&err);
if(err!=0) saveLog(IntToStr(err)+"(PrinterOPOS::setTrainingMode)"+str);
return err==0;
}
//---------------------------------------------------------------------------
bool PrinterOPOS::getTrainingMode()
{
return fp->TrainingModeActive;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool PrinterOPOS::setNalog(long n,float stavka)
{
// long s=stavka*100;
// WideString str=IntToStr(s);
BSTR s1=L"120";
long err = fp->DirectIO(2, &n, &s1);
if(err!=0) saveLog(IntToStr(err)+"(PrinterOPOS::OpenShift)"+GetStatusDescription(err));
return err==0;
}
//---------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int PrinterOPOS::getDaySum()
{
try
{
long n=1;
BSTR str=new OLECHAR[20];
long err=fp->DirectIO (300,&n,&str);
if(err!=0)throw Exception("["+IntToStr(err)+"]"+GetStatusDescription(err));
return StrToInt(str)/100.0;
}catch(...)
{
saveLog("(PrinterOPOS::getDaySum) <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
dModule->SendError(1,"(PrinterOPOS::getDaySum) <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return 0;
}
}