From d1fab0f6defb88fd58ad79953bdf1076663acaac Mon Sep 17 00:00:00 2001 From: luca Date: Mon, 24 Jan 2005 13:57:10 +0000 Subject: [PATCH] Patch level :2.2 nopatch Files correlati :cacnv.exe Ricompilazione Demo : [ ] Commento : terminata la conversione movimenti (compresi di rmov e rmoviva) anche in versione definitiva git-svn-id: svn://10.65.10.50/trunk@12629 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/cacnv.cpp | 113 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 101 insertions(+), 12 deletions(-) diff --git a/ca/cacnv.cpp b/ca/cacnv.cpp index 3e46ec9c6..fbe492ec1 100755 --- a/ca/cacnv.cpp +++ b/ca/cacnv.cpp @@ -298,23 +298,112 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva) //se e' riuscita la scrittura dei movimenti di analitica ed e' una conversione definitiva... if (analmov.write() == NOERR && definitiva) { - //azzera i campi codice commessa e fase in RMOV... + //RIGHE MOVIMENTI CONTABILI + TArray cg_records; for (int m = 0; m < mov.cg_items(); m++) { - TRectype& rmov = mov.cg(m); - - rmov.zero(RMV_CODCMS); - rmov.zero(RMV_FASCMS); + const TRectype& rmov = mov.cg(m); + int add_to = -1; + //se la riga movimento contabile ha un ROWTYPE... + if (rmov.get(RMV_ROWTYPE).not_empty()) + { + //cerca nell'array dei record riga mov(cg_records) partendo dall'ultima a scalare.. + for(add_to = cg_records.last(); add_to >=0; add_to--) + { + //prende il record add_to-esimo.. + const TRectype& rec = (TRectype&)cg_records[add_to]; + //se i campi gr.co.sottoc. di un record dell'array(cg_records) = a quelli della riga + //movimento contabile in esame(rmov) -> esce con add_to = al numero del record dell' + //array che soddisfa la condizione (quindi add_to > 0) + if (rmov.get_int(RMV_GRUPPO) == rec.get_int(RMV_GRUPPO) && + rmov.get_int(RMV_CONTO) == rec.get_int(RMV_CONTO) && + rmov.get_long(RMV_SOTTOCONTO) == rec.get_long(RMV_SOTTOCONTO)) + break; + } + } + //se add_to e' rimasto = -1 (la condizione di eguaglianza gr.co.sott. non e' stata soddisfatta + //da alcuna riga dell'array cg_records).. + if (add_to < 0) + { + TRectype* rec = new TRectype(rmov); + //azzera i campi codice commessa e fase in RMOV di origine... + rec->zero(RMV_CODCMS); + rec->zero(RMV_FASCMS); + //e aggiunge all'array cg_records il nuovo record ripulito + cg_records.add(rec); + rec->put(RMV_NUMRIG, cg_records.items()); + } + //se ivece add_to > 0 (vedi test su condizione gr.co.sott. sopra).. + else + { + //prende il record(rec) dell'array che soddsfaceva la condizione e somma ad esso importo e sezione + //di quello in esame(rmov) + TRectype& rec = (TRectype&)cg_records[add_to]; + TImporto imp_tot(rec.get_char(RMV_SEZIONE), rec.get_real(RMV_IMPORTO)); + TImporto imp_original(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO)); + imp_tot += imp_original; + imp_tot.normalize(); + rec.put(RMV_SEZIONE, imp_tot.sezione()); + rec.put(RMV_IMPORTO, imp_tot.valore()); + //notare che i campi descrittivi resteranno sempre quelli del primo record di cg_records + //che ha gr.co.sottoc. soddisfacenti la condizione sopra! + } } - //...e in RMOVIVA + //cancella solo le righe contabili del movimento originale.. + mov.destroy_cg_row(-1); + //e le sostituisce con le nuove che sono contenute (compattate) in cg-records + FOR_EACH_ARRAY_ITEM(cg_records, cg_i, cg_obj) + { + mov.cg(cg_i) = *(TRectype*)cg_obj; + } + + + //RIGHE MOVIMENTI IVA (rifa' tutto il giochetto di prima per rmoviva) + TArray iva_records; for (int n = 0; n < mov.iva_items(); n++) { - TRectype& rmoviva = mov.iva(n); - - rmoviva.zero(RMI_CODCMS); - rmoviva.zero(RMI_FASCMS); + const TRectype& rmoviva = mov.iva(n); + int add_to = -1; + for(add_to = iva_records.last(); add_to >=0; add_to--) + { + const TRectype& rec = (TRectype&)iva_records[add_to]; + if (rmoviva.get_int(RMI_GRUPPO) == rec.get_int(RMI_GRUPPO) && + rmoviva.get_int(RMI_CONTO) == rec.get_int(RMI_CONTO) && + rmoviva.get_long(RMI_SOTTOCONTO) == rec.get_long(RMI_SOTTOCONTO) && + rmoviva.get(RMI_CODIVA) == rec.get(RMI_CODIVA) && + rmoviva.get_int(RMI_TIPODET) == rec.get_int(RMI_TIPODET)) + break; + } + if (add_to < 0) + { + TRectype* rec = new TRectype(rmoviva); + rec->zero(RMI_CODCMS); + rec->zero(RMI_FASCMS); + iva_records.add(rec); + rec->put(RMI_NUMRIG, iva_records.items()); + } + else + { + TRectype& rec = (TRectype&)iva_records[add_to]; + //imponibile.. + real tot = rec.get_real(RMI_IMPONIBILE); + real original = rmoviva.get_real(RMI_IMPONIBILE); + tot += original; + rec.put(RMI_IMPONIBILE, tot); + //..e imposta + tot = rec.get_real(RMI_IMPOSTA); + original = rmoviva.get_real(RMI_IMPOSTA); + tot += original; + rec.put(RMI_IMPOSTA, tot); + } } - //manca il compattamento del file rmov e rmoviva + mov.destroy_iva_row(-1); + FOR_EACH_ARRAY_ITEM(iva_records, iva_i, iva_obj) + { + mov.iva(iva_i) = *(TRectype*)iva_obj; + } + + mov.rewrite(); //puo' finalmente riscrivere i files di origine puliti e compattati } } @@ -325,7 +414,7 @@ bool TConversione_cm2ca::convert_movs() msk.run(); //scandisce il file RMOV,alla ricerca dei record con codice fase o codice commessa compilato TRelation rel_rmov(LF_RMOV); - const bool definitiva = msk.get_int(F_TIPOCONV); + const bool definitiva = msk.get_int(F_TIPOCONV) != 0; //costruzione filtro con date (in caso di conversione provvisoria) TString filtro; filtro << "((CODCMS!='')||(FASCMS!=''))&&(ROWTYPE!='T')";