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()
{
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();
}

View File

@ -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;
}

View File

@ -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);
}