diff --git a/mg/mg1200.cpp b/mg/mg1200.cpp index af7eda16c..380d59084 100755 --- a/mg/mg1200.cpp +++ b/mg/mg1200.cpp @@ -59,7 +59,9 @@ protected: bool TApp_rebuildbalances::create() { - open_files(LF_UMART, LF_MAG, LF_RMOVMAG, LF_TABCOM, LF_STOMAG, LF_DESLIN, LF_CODCORR, 0); + open_files(LF_CLIFO, LF_UMART, LF_MAG, LF_MOVMAG, LF_RMOVMAG, + LF_TAB, LF_TABCOM, LF_STOMAG, LF_DESLIN, LF_CODCORR, + LF_ANAMAG, LF_CLIFOGIAC, 0); return TSkeleton_application::create(); } diff --git a/mg/mglib02.cpp b/mg/mglib02.cpp index 871d8abc6..c1c487086 100755 --- a/mg/mglib02.cpp +++ b/mg/mglib02.cpp @@ -589,7 +589,7 @@ int TArticolo_giacenza::find_storico(int annoesrif, const char * codmag, int fro return find_storico(rsto, codmag, from); } -TRecord_array & TArticolo_giacenza::mag(int annoes) const +TRecord_array& TArticolo_giacenza::mag(int annoes) const { ((TArticolo_giacenza*)this)->set_anno_mag(annoes > 0 ? annoes : esercizi().last_mag()); return body(LF_MAG); @@ -632,7 +632,9 @@ bool TArticolo_giacenza::is_deletable(const TRectype& mag) const bool TArticolo_giacenza::azzera_saldi(int codes, int codespre, bool save_to_disk) { CHECKD(codes > 0 && codespre != codes, "Davvero azzereresti i saldi dall'esercizio ", codes); - TRecord_array& oldmag = mag(codespre); + TRecord_array oldmag(LF_MAG, MAG_NRIGA); + if (codespre > 0) + oldmag = mag(codespre); // Non usare TRecord_array& in quanto mag(codes) lo sovrascriebbe! TRecord_array& rec_arr = mag(codes); const int last = rec_arr.last_row(); @@ -642,7 +644,7 @@ bool TArticolo_giacenza::azzera_saldi(int codes, int codespre, bool save_to_disk for (int i = 0; zero_fields[i]; i++) mag.zero(zero_fields[i]); - if (codespre > 0) + if (codespre > 0 && oldmag.rows() > 0) { const TString80 liv(mag.get(MAG_LIVELLO)); const int row = find_mag(oldmag, mag.get(MAG_CODMAG), liv); @@ -657,12 +659,13 @@ bool TArticolo_giacenza::azzera_saldi(int codes, int codespre, bool save_to_disk } } } + if (is_deletable(mag)) rec_arr.destroy_row(r, TRUE); } bool ok = true; if (save_to_disk) - ok = rec_arr.write(TRUE) == NOERR; + ok = rec_arr.write(true) == NOERR; return ok; } diff --git a/mg/mglib02a.cpp b/mg/mglib02a.cpp index bba2fa286..4082540b5 100755 --- a/mg/mglib02a.cpp +++ b/mg/mglib02a.cpp @@ -896,9 +896,8 @@ struct TBalance_params HIDDEN bool reset_giac(const TRelation& rel, void* pJolly) { - TArticolo_giacenza & articolo = (TArticolo_giacenza &) rel.lfile().curr(); TBalance_params & p = *((TBalance_params *)pJolly); - + TArticolo_giacenza articolo(rel.curr()); if (p.zero_giac) articolo.azzera_saldi(p.codes, p.codesprec); else @@ -1045,7 +1044,7 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz, TRelation anamag_rel(LF_ANAMAG); TCursor anamag_cur(&anamag_rel); - anamag_cur.relation()->lfile().set_curr(new TArticolo_giacenza()); + //anamag_cur.relation()->lfile().set_curr(new TArticolo_giacenza()); msg.format(FR("Ricostruzione saldi esercizio %04d : azzeramento..."), codes); anamag_cur.scan(reset_giac, (void*)&p, msg); }