// Rinumerazione movimenti e saldi // fv 12/12/93 // ------------------------------------------------------------------------- // *TBI* Partenza dall'ultimo movimento stampato // *TBI* Aggiornamento scadenziario // *TBI* Aggiornamento cespiti // ------------------------------------------------------------------------- #include #include #include #include #include #include #include #include #define FLD_CG41_YEAR 100 #define MAX_CNT 300 #include #include #include #include #include #include "cglib02.h" struct therec { char DATAREG[9]; char REG[4]; char DATADOC[9]; char NUMPROT[9]; char ANNOES[5]; char NUMREG[8]; }; class CG4100_App : public TSkeleton_application { int _year; TMask* _msk; public: bool set_parms(); virtual void main_loop(); void sort_all(); bool sort_sal(); }; bool CG4100_App::set_parms() { _msk->run(); _year = _msk->get_int(FLD_CG41_YEAR); return _msk->last_key() == K_ENTER; } void CG4100_App::main_loop() { if (fexist("__sal__.sav")) warning_box(TR("Un'operazione di riordino saldi si e' conclusa impropriamente. Si raccomanda di rieseguirla")); _msk = new TMask("cg4100b"); sort_sal(); delete _msk; } bool CG4100_App::sort_sal() { if (!set_parms()) return FALSE; TSystemisamfile saldi(LF_SALDI); saldi.open(_excllock); TLocalisamfile mov(LF_MOV); TSaldo_agg sal; FILE* fp = fopen ("__sal__.sav","w"); fclose(fp); int gruppo, conto; const int year = _year; long oldnumreg = 0L, sottoconto; mov.setkey(1); sal.reset(); sal.set_anno_es(year); sal.clear_saldi(year); long numreg = 0L; tiposal tsal = normale; bool provvis = FALSE; TDate datareg; TString query; query << "USE RMOV SELECT ANNOES=" << _year; TISAM_recordset righe(query); TProgind prnd(righe.items(), TR("Riordino archivio saldi in corso\nLettura archivio movimenti..."), FALSE, TRUE); const TRectype& rmov = righe.cursor()->curr(); for (bool ok = righe.move_first(); ok; ok = righe.move_next()) { if (!prnd.addstatus(1)) break; if (_year != rmov.get_int(RMV_ANNOES)) continue; numreg = rmov.get_long(RMV_NUMREG); gruppo = rmov.get_int(RMV_GRUPPO); conto = rmov.get_int(RMV_CONTO); sottoconto = rmov.get_long(RMV_SOTTOCONTO); bool scaricato = false; if (numreg != oldnumreg) { if (sal.items() > 0) { sal.registra(); sal.reset(); } oldnumreg = numreg; mov.zero(); mov.put(MOV_NUMREG, numreg); mov.read(); CHECK(mov.good(),"Archivi movimenti e righe inconsistenti"); // Tipo saldo normale per default tsal = normale; const TString& codcaus = mov.get(MOV_CODCAUS); const TRectype& causale = cache().get(LF_CAUSALI, codcaus); if (!causale.empty()) { const char ac = causale.get_char(CAU_MOVAP); if (ac == 'A') tsal = apertura; else if (ac == 'C') tsal = chiusura; } scaricato = mov.get_bool(MOV_SCARCON); provvis = mov.get(MOV_PROVVIS).not_empty(); datareg = mov.get_date(MOV_DATAREG); sal.set_anno_es(_year); sal.set_tipo_saldo(tsal); sal.set_movprovv(provvis); sal.set_data_ulmov(datareg); sal.set_num_ulmov(oldnumreg); } const char sezione = rmov.get(RMV_SEZIONE)[0]; const real importo = rmov.get(RMV_IMPORTO); if (!importo.is_zero()) { if (gruppo <= 0 || conto <= 0 || sottoconto <= 0) { warning_box(FR("Conto non valido alla riga %d nel movimento %ld"), rmov.get_int(RMV_NUMRIG), numreg); continue; } sal.aggiorna(gruppo, conto, sottoconto, importo, sezione, true, scaricato); } } sal.registra(); remove("__sal__.sav"); return true; } int cg4100(int argc, char* argv[]) { CG4100_App main_app; main_app.run(argc, argv, TR("Ricalcolo Saldi")); return TRUE; }