diff --git a/ca/cacnv.cpp b/ca/cacnv.cpp index 9b77e2cf1..63235f2c1 100755 --- a/ca/cacnv.cpp +++ b/ca/cacnv.cpp @@ -471,73 +471,72 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss //Per prima cosa crea l'array delle righe di ripartizione con questo gr/co/stc/annoes const int annoes = mov_head.get_int(MOV_ANNOES); - const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' '); + if (ca_config().get_bool("UsePdcc")) //solo se in CA si usa il piano dei conti contabile.. + { //..e' possibile costruire la riga movimento + //Compila la riga del movimentodi analitica + TRectype& analriga = analmov.new_row(); - const int righe_ripartizione = rrip.rows(); - const bool ripartisci = righe_ripartizione > 0; + analriga.put(RMOVANA_SEZIONE, importo.sezione()); + analriga.put(RMOVANA_IMPORTO, importo.valore()); + analriga.put(RMOVANA_DESCR, importo.descrizione()); - if (ripartisci) //ci sono righe ripartizione: da 1 riga mov CG a N righe mov CA - { - // Importo totale da distribuire arrotondato ai decimali della valuta di conto - TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec()); + analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES)); + analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG)); - // Calcola tutte le percentuali da ripartire - int i; - for (i = 1; i <= rrip.rows(); i++) - distrib.add(rrip[i].get_real(RRIP_RIPARTO)); + analriga.put(RMOVANA_CODCMS, chiave.get(0)); + analriga.put(RMOVANA_CODFASE, chiave.get(1)); - //Compila le righe del movimento di analitica in base alle righe ripartizione - for (i = 1; i <= rrip.rows(); i++) - { - const TRectype& riga_rip = rrip.row(i); + TString16 codconto; + codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto); + analriga.put(RMOVANA_CODCONTO, codconto); - TRectype& analriga = analmov.new_row(); - const real imp = distrib.get(); // Legge la quota da distribuire - analriga.put(RMOVANA_SEZIONE, importo.sezione()); - analriga.put(RMOVANA_IMPORTO, imp); //e la mette nella nuova riga - analriga.put(RMOVANA_DESCR, importo.descrizione()); - - analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES)); - analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG)); - - //parametri da prendere dalle righe ripartizione!! - analriga.put(RMOVANA_CODCCOSTO, riga_rip.get(RRIP_CODCOSTO)); - analriga.put(RMOVANA_CODCMS, riga_rip.get(RRIP_CODCMS)); - analriga.put(RMOVANA_CODFASE, riga_rip.get(RRIP_CODFASE)); - analriga.put(RMOVANA_CODCONTO, riga_rip.get(RRIP_CODCONTO)); - - //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi - check_phase(analriga); - } + //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi + check_phase(analriga); } - else //nessuna riga ripartizione -> da 1 riga movimento CG ad 1 riga movimento CA - { - if (ca_config().get_bool("UsePdcc")) //solo se in CA si usa il piano dei conti contabile.. - { //..e' possibile costruire la riga movimento - //Compila la riga del movimentodi analitica - TRectype& analriga = analmov.new_row(); + else + { + const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' ', 'I'); - analriga.put(RMOVANA_SEZIONE, importo.sezione()); - analriga.put(RMOVANA_IMPORTO, importo.valore()); - analriga.put(RMOVANA_DESCR, importo.descrizione()); + const int righe_ripartizione = rrip.rows(); + const bool ripartisci = righe_ripartizione > 0; - analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES)); - analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG)); + if (ripartisci) //ci sono righe ripartizione: da 1 riga mov CG a N righe mov CA + { + // Importo totale da distribuire arrotondato ai decimali della valuta di conto + TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec()); - analriga.put(RMOVANA_CODCMS, chiave.get(0)); - analriga.put(RMOVANA_CODFASE, chiave.get(1)); + // Calcola tutte le percentuali da ripartire + int i; + for (i = 1; i <= rrip.rows(); i++) + distrib.add(rrip[i].get_real(RRIP_RIPARTO)); - TString16 codconto; - codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto); - analriga.put(RMOVANA_CODCONTO, codconto); + //Compila le righe del movimento di analitica in base alle righe ripartizione + for (i = 1; i <= rrip.rows(); i++) + { + const TRectype& riga_rip = rrip.row(i); - //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi - check_phase(analriga); - } - else //qui va aggiunta la lista dei conti che non hanno ripartizione quando NON si usa il.. - //..piano dei conti contabile in analitica - error_box(TR("Manca la ripartizione di un conto")); - } + TRectype& analriga = analmov.new_row(); + const real imp = distrib.get(); // Legge la quota da distribuire + analriga.put(RMOVANA_SEZIONE, importo.sezione()); + analriga.put(RMOVANA_IMPORTO, imp); //e la mette nella nuova riga + analriga.put(RMOVANA_DESCR, importo.descrizione()); + + analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES)); + analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG)); + + //parametri da prendere dalle righe ripartizione!! + analriga.put(RMOVANA_CODCCOSTO, riga_rip.get(RRIP_CODCOSTO)); + analriga.put(RMOVANA_CODCMS, riga_rip.get(RRIP_CODCMS)); + analriga.put(RMOVANA_CODFASE, riga_rip.get(RRIP_CODFASE)); + analriga.put(RMOVANA_CODCONTO, riga_rip.get(RRIP_CODCONTO)); + + //controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi + check_phase(analriga); + } + } + else + error_box(TR("Manca la ripartizione di conversione del conto : %d %d %ld"), zio.gruppo(), zio.conto(), zio.sottoconto()); + } } //end FOR_EACH.. //e alla fine riesce a mettere anche l'importone in testata diff --git a/ca/calib01.cpp b/ca/calib01.cpp index 678454262..c71af25ad 100755 --- a/ca/calib01.cpp +++ b/ca/calib01.cpp @@ -1564,10 +1564,10 @@ int TAnal_ripartizioni_batch::indbil() const return head().get_int(RIP_INDBIL); } -int TAnal_ripartizioni_batch::read (const char* codice) +int TAnal_ripartizioni_batch::read (const char* codice, char tiporip) { TLocalisamfile rip(LF_RIP); - _rip.put(RIP_TIPO, "B"); //solo tipi batch! + _rip.put(RIP_TIPO, tiporip); //solo tipi batch! _rip.put(RIP_CODICE, codice); int err = _rip.read(rip); //leggi il record dal file if (err == NOERR) @@ -1628,14 +1628,14 @@ int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa, } if (err == NOERR) - err = read(rip.get(RIP_CODICE)); + err = read(rip.get(RIP_CODICE), 'B'); return err; } int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot, - const int annoes, const int indbil, const int classe_mov) const + const int annoes, const int indbil, const int classe_mov, char tiporip) const { - rip.put(RIP_TIPO, "B"); //solo tipi batch! + rip.put(RIP_TIPO, tiporip); //solo tipi batch! rip.put(RIP_GRUPPO, gr); rip.put(RIP_CONTO, co); rip.put(RIP_SOTTOCONTO, sot); @@ -1646,42 +1646,42 @@ int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, cons } int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot, - const int annoes, const int indbil, const int classe_mov) + const int annoes, const int indbil, const int classe_mov, char tiporip) { CHECKD(classe_mov > 0, "Classe movimento non valida ", classe_mov); TLocalisamfile rip(LF_RIP); rip.setkey(3); - int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov); + int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov, tiporip); if (err != NOERR) - err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0); + err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0, tiporip); //la put va rifatta perche' potrebbe essersi spostato al record successivo!!! //se fallisce il primo tentativo prova con lo stesso anno e indbil=0 if (err != NOERR && indbil != 0) { - err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov); + err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov, tiporip); if (err != NOERR) - err = read_rip_3(rip, gr, co, sot, annoes, 0, 0); + err = read_rip_3(rip, gr, co, sot, annoes, 0, 0, tiporip); } //se fallisce ancora riprova con anno=0 e lo stesso indbil if (err != NOERR && annoes != 0) { - err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov); + err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov, tiporip); if (err != NOERR) - err = read_rip_3(rip, gr, co, sot, 0, indbil, 0); + err = read_rip_3(rip, gr, co, sot, 0, indbil, 0, tiporip); //estremo tentativo con annoes e indbil = 0 if (err != NOERR && indbil != 0) { - err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov); + err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov, tiporip); if (err != NOERR) - err = read_rip_3(rip, gr, co, sot, 0, 0, 0); + err = read_rip_3(rip, gr, co, sot, 0, 0, 0, tiporip); } } if (err == NOERR) - err = read(rip.get(RIP_CODICE)); + err = read(rip.get(RIP_CODICE), tiporip); return err; } @@ -1708,8 +1708,9 @@ TObject* TCache_ripartizioni::key2obj(const char* key) const int anno = parametro.get_int(4); const int indbil = parametro.get_int(5); const int classe_mov = parametro.get_int(6); + const char tiporip = parametro.get_char(7); - rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov); + rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov, tiporip); } else //chiave 4 { @@ -1786,7 +1787,7 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, co return *(const TAnal_ripartizioni_batch*)objptr(parametro); } -const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov) +const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov, char tiporip) { //classi di movimento: se preventivi 2, se normali 1 int classe_movimento; @@ -1797,7 +1798,7 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, co TToken_string parametro; parametro << "3|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|' - << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento; //per chiave 3 + << annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento << '|' << tiporip; //per chiave 3 return *(const TAnal_ripartizioni_batch*)objptr(parametro); } diff --git a/ca/calib01.h b/ca/calib01.h index 15aa00759..fb96dc188 100755 --- a/ca/calib01.h +++ b/ca/calib01.h @@ -170,15 +170,15 @@ class TAnal_ripartizioni_batch : public TRecord_array TRectype _rip; private: int read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot, - const int annoes, const int indbil, const int classe_mov) const; + const int annoes, const int indbil, const int classe_mov, char tiporip) const; int read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, const char* fase, const int annoes, const int indbil, const int classe_mov) const; public: const TRectype& head() const { return _rip; } int indbil() const; - int read (const char* codice); + int read (const char* codice, char tiporip); int read (const char* codcosto, const char* commessa, const char* fase, const int annoes, const int indbil, const int classe_mov); - int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov); + int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov, char tiporip); TAnal_ripartizioni_batch(); }; @@ -198,7 +198,7 @@ public: void set_esercizio(const int codes); const TAnal_ripartizioni_batch& righe(const char* costo, const char* commessa, const char* fase, const int annoes, const int indbil, const char tipomov); - const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov); + const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov, char tiporip = 'B'); TCache_ripartizioni(); }; diff --git a/ve/velib04f.cpp b/ve/velib04f.cpp index a33eea9fb..9bf0228d1 100755 --- a/ve/velib04f.cpp +++ b/ve/velib04f.cpp @@ -438,7 +438,7 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri if (contanal.blank()) // Non ho trovato il conto in anagrafica ... { // Cerca la ripartizione del conto - const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov); + const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov, 'I'); TToken_string conto; for (int i = 1; i <= rip.rows(); i++) {