//--------------------------------------------------------------------------- #include #pragma hdrstop #include "ValidatorThread.h" #include "Validator.h" #include "PrinterOPOS.h" #include "uf_Main.h" #include "ud_Module.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Important: Methods and properties of objects in VCL can only be // used in a method called using Synchronize, for example: // // Synchronize(UpdateCaption); // // where UpdateCaption could look like: // // void __fastcall ValidatorThread::UpdateCaption() // { // Form1->Caption = "Updated in a thread"; // } //--------------------------------------------------------------------------- __fastcall ValidatorThread::ValidatorThread(bool CreateSuspended) : TThread(CreateSuspended) { bStop=false; } //--------------------------------------------------------------------------- void __fastcall ValidatorThread::Execute() { while(!bStop) { pay=validator->getPay(); if(pay!=0) Synchronize(UpdateCaption); } validator->endPay(); } //--------------------------------------------------------------------------- void ValidatorThread::Stop() { bStop=true; } //--------------------------------------------------------------------------- //передаём сумму void __fastcall ValidatorThread::UpdateCaption() { bool isOk=true; frmMain->gbtnJCheck->Enabled=true; //разрешаем кнопк платёж frmMain->gbtnPCheck->Enabled=true; frmMain->gbtnMainMenu->Enabled=false; frmMain->sum+=pay; frmMain->Label13->Caption=dModule->language->Values["npay"]+" "+IntToStr(frmMain->sum)+"тг."; frmMain->Label9->Caption=frmMain->Label13->Caption; try { //Сохраняем платёж в базе данных if(dModule->UserType) //true - Юредическое лицо { if(dModule->BalanceType) //Задолженность по холодной воде { if(dModule->addPayJuridicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} }else //Задолженность по канализации { if(dModule->addPayJuridicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} } }else //false - физическое лицо { if(dModule->BalanceType) //Задолженность по холодной воде { if(dModule->addPayPhysicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} }else //Задолженность по канализации { if(dModule->addPayPhysicalPerson(dModule->UserId, pay, printerOPOS->CheckId+1)) dModule->OraSession1->Commit(); else {isOk=false; dModule->OraSession1->Rollback();} } } }catch(...){isOk=false;} //Если не сохранился в баре Оракла то сохраняем локально if(!isOk) { if(dModule->BalanceType) dModule->savePay(1,dModule->UserType,dModule->UserId,pay,printerOPOS->CheckId+1); //Холодная else dModule->savePay(2,dModule->UserType,dModule->UserId,pay,printerOPOS->CheckId+1); //Канализация } } //---------------------------------------------------------------------------