diff --git a/src/cg/cgsaldac.cpp b/src/cg/cgsaldac.cpp index ad6fe6857..9be75393c 100755 --- a/src/cg/cgsaldac.cpp +++ b/src/cg/cgsaldac.cpp @@ -1409,6 +1409,9 @@ bool TPartita::read(const TBill& clifo, int year, const char* num) else _num.trim(); _align = allineamento_corrente(); + + real dare; + real avere; TRiga_partite* partita = new TRiga_partite(this); // Record campione della partita TString16 str; @@ -1427,17 +1430,59 @@ bool TPartita::read(const TBill& clifo, int year, const char* num) partita->renum_key(PART_ANNO, str); // Anno partita partita->renum_key(PART_NUMPART, _num); // Numero partita _part.read(partita); + + TBit_array regs; + int firstrow =first(); + bool changed = false; + + for (int r = last(); r >= firstrow; r = pred(r)) + { + TRiga_partite & row = riga(r); + long nreg = row.get_long(PART_NREG); + int rate = row.rate(); + + if (regs[nreg]) + { + _part.destroy_row(r); + changed = true; + } + else + regs.set(nreg); + } if (_part.exist(UNASSIGNED)) _part.destroy_row(UNASSIGNED); // Elimina riga saldo; - - TRectype* unas = new TRectype(LF_PAGSCA); // Record pagamenti non assegnati + + TRectype* unas = new TRectype(LF_PAGSCA); // Record pagamenti non assegnati partita->copy_key_to_row(*unas); unas->put(PART_NRIGA, (int)UNASSIGNED); unas->put(SCAD_NRATA, (int)UNASSIGNED); _unassigned.read(unas); if (_unassigned.rows() > 0 &&_part.rows() <= 0) // non assegnati orfani! _unassigned.destroy_rows(); + +/* +TImporto saldo; + TImporto doc; + TImporto pag; + TImporto imp; + + calcola_saldo(saldo, doc, pag, imp); + + TImporto oldsaldo; + TImporto olddoc; + TImporto oldpag; + TImporto oldimp; + TRectype riga_saldo(LF_PARTITE); + + read_saldo(riga_saldo,oldsaldo, olddoc, oldpag, oldimp, true); + + if (saldo != oldsaldo || doc != olddoc || pag != oldpag || imp != oldimp) + write_saldo(true); + */ + + if (changed) + rewrite(); return ok(); } @@ -1492,7 +1537,7 @@ int TPartita::write_saldo(bool re, TRectype* rec) const } int TPartita::read_saldo(TRectype& riga, - TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp) + TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp, bool low_level) { int err = NOERR; @@ -1504,7 +1549,7 @@ int TPartita::read_saldo(TRectype& riga, sld.put(PART_NRIGA, (int)UNASSIGNED); err = part.read(); - if (err != NOERR) + if (err != NOERR && !low_level) { const TPartita p(riga); err = p.write_saldo(false, &sld); diff --git a/src/cg/cgsaldac.h b/src/cg/cgsaldac.h index 9191b1766..6c739bbfd 100755 --- a/src/cg/cgsaldac.h +++ b/src/cg/cgsaldac.h @@ -322,7 +322,7 @@ public: static void carica_allineamento(); static char allineamento_richiesto(char tipocf); - static int read_saldo(TRectype& riga, TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp); + static int read_saldo(TRectype& riga, TImporto& saldo, TImporto& doc, TImporto& pag, TImporto& imp, bool low_level = false); static bool rileva_sempre_differenze_cambi(); int tipopag2causale(int tipo) const;