Corretto azzeramento giacenze in ricostruzione saldi magazzino

git-svn-id: svn://10.65.10.50/branches/R_10_00@23000 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2014-10-09 09:51:52 +00:00
parent b525875cc1
commit a91e533361
3 changed files with 12 additions and 8 deletions

View File

@ -59,7 +59,9 @@ protected:
bool TApp_rebuildbalances::create() 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(); return TSkeleton_application::create();
} }

View File

@ -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) 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); 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); TRecord_array& rec_arr = mag(codes);
const int last = rec_arr.last_row(); 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++) for (int i = 0; zero_fields[i]; i++)
mag.zero(zero_fields[i]); mag.zero(zero_fields[i]);
if (codespre > 0) if (codespre > 0 && oldmag.rows() > 0)
{ {
const TString80 liv(mag.get(MAG_LIVELLO)); const TString80 liv(mag.get(MAG_LIVELLO));
const int row = find_mag(oldmag, mag.get(MAG_CODMAG), liv); 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)) if (is_deletable(mag))
rec_arr.destroy_row(r, TRUE); rec_arr.destroy_row(r, TRUE);
} }
bool ok = true; bool ok = true;
if (save_to_disk) if (save_to_disk)
ok = rec_arr.write(TRUE) == NOERR; ok = rec_arr.write(true) == NOERR;
return ok; return ok;
} }

View File

@ -896,9 +896,8 @@ struct TBalance_params
HIDDEN bool reset_giac(const TRelation& rel, void* pJolly) HIDDEN bool reset_giac(const TRelation& rel, void* pJolly)
{ {
TArticolo_giacenza & articolo = (TArticolo_giacenza &) rel.lfile().curr();
TBalance_params & p = *((TBalance_params *)pJolly); TBalance_params & p = *((TBalance_params *)pJolly);
TArticolo_giacenza articolo(rel.curr());
if (p.zero_giac) if (p.zero_giac)
articolo.azzera_saldi(p.codes, p.codesprec); articolo.azzera_saldi(p.codes, p.codesprec);
else else
@ -1045,7 +1044,7 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
TRelation anamag_rel(LF_ANAMAG); TRelation anamag_rel(LF_ANAMAG);
TCursor anamag_cur(&anamag_rel); 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); msg.format(FR("Ricostruzione saldi esercizio %04d : azzeramento..."), codes);
anamag_cur.scan(reset_giac, (void*)&p, msg); anamag_cur.scan(reset_giac, (void*)&p, msg);
} }