diff --git a/ca/cacnv.cpp b/ca/cacnv.cpp index 0e009c080..abfdc7700 100755 --- a/ca/cacnv.cpp +++ b/ca/cacnv.cpp @@ -407,15 +407,6 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss analmov.put(MOVANA_DCODNUM, dcodnum); const long dndoc = mov_head.get_long(MOV_DNDOC); analmov.put(MOVANA_DNDOC, dndoc); - //se la chiave del documento origine e' completa puo' completare tale documento riempiendo il.. - //..campo NUMREGCA (con lo stesso numero di NUMREGCG, visto che sta trasportando i dati dalla.. - //..CG alla CA - if (provv != ' ' && danno > 0 && dcodnum.not_empty() && dndoc > 0) - { - TDocumento dadoc(provv, danno, dcodnum, dndoc); - dadoc.put(DOC_NUMREGCA, numreg_cg); - dadoc.write(); - } //MOVANA_TOTDOC e' il totale di tutte le sue righe;ancora non si conosce;sara' compilato.. //..successivamente utilizzando importone @@ -548,115 +539,123 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss //..DEFINITIVA,riordina le righe e le testate dei movimenti originari (MOV,RMOV,RMOVIVA).. //..riscrivendole if (analmov.write(f) == NOERR && definitiva) - { - //RIGHE MOVIMENTI CONTABILI - TArray cg_records; - for (int m = 0; m < mov.cg_items(); m++) - { - 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("CODCMS"); - rec->zero("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! - } - } - //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; - } + { + //se la chiave del documento origine e' completa puo' completare tale documento riempiendo il.. + //..campo NUMREGCA (con lo stesso numero di NUMREG di analmov, in generale != da NUMREGCG + if (provv != ' ' && danno > 0 && dcodnum.not_empty() && dndoc > 0) + { + TDocumento dadoc(provv, danno, dcodnum, dndoc); + dadoc.put(DOC_NUMREGCA, analmov.get(MOVANA_NUMREG)); + dadoc.rewrite(); + } + //RIGHE MOVIMENTI CONTABILI + TArray cg_records; + for (int m = 0; m < mov.cg_items(); m++) + { + 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("CODCMS"); + rec->zero("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! + } + } + //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++) - { - 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("CODCMS"); - rec->zero("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); - } - } - mov.destroy_iva_row(-1); + //RIGHE MOVIMENTI IVA (rifa' tutto il giochetto di prima per rmoviva) + TArray iva_records; + for (int n = 0; n < mov.iva_items(); n++) + { + 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("CODCMS"); + rec->zero("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); + } + } + mov.destroy_iva_row(-1); - FOR_EACH_ARRAY_ITEM(iva_records, iva_i, iva_obj) - { - mov.iva(iva_i) = *(TRectype*)iva_obj; - } + FOR_EACH_ARRAY_ITEM(iva_records, iva_i, iva_obj) + { + mov.iva(iva_i) = *(TRectype*)iva_obj; + } - //puo' finalmente riscrivere i files di origine puliti e compattati (sia iva che non) - mov.rewrite(); - } + //puo' finalmente riscrivere i files di origine puliti e compattati (sia iva che non) + mov.rewrite(); + } //if(write=NOERR && definitiva... } bool TConversione_cm2ca::convert_movs(TConversione_anal_msk& mask)