Patch level : 10.0

Files correlati     : mg1.exe
Ricompilazione Demo : [ ]
Commento            :
Corretto ricalcolo giacenze di magazzino (segnalazione Guimatrag)


git-svn-id: svn://10.65.10.50/branches/R_10_00@22551 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-01-18 16:52:15 +00:00
parent 7244924ffa
commit aade406255

View File

@ -645,6 +645,7 @@ bool TMov_mag::update_balances(bool lock)
if (pi) pi->addstatus(1);
const TSaldo_mag& saldo = (const TSaldo_mag&)_saldi_mag[*curr_key];
const TCodice_articolo& codart = saldo.codart();
TArticolo_giacenza& art = cached_article_balances(codart);
if (art.lock_and_prompt(lock ? _testandlock : _nolock))
@ -659,6 +660,7 @@ bool TMov_mag::update_balances(bool lock)
magcurr.put(MAG_NRIGA, nriga);
sld.add_row(magcurr);
err = mag.write();
CHECKD(err == NOERR, "Errore di write:" , err);
}
update_balances(magcurr, saldo);
err = mag.rewrite();
@ -736,46 +738,50 @@ void TMov_mag::update_balances(TRectype & magrec, const TSaldo_mag & s)
if (caus.update_qta())
{
const real diff = s.quant();
update_balance(magrec, MAG_GIAC, diff, caus.sgn(s_giac)); // update ..
update_balance(magrec, MAG_ACQ, diff, caus.sgn(s_acq)); // update ..
update_balance(magrec, MAG_ENT, diff, caus.sgn(s_ent));
update_balance(magrec, MAG_VEN, diff, caus.sgn(s_ven));
update_balance(magrec, MAG_USC, diff, caus.sgn(s_usc));
update_balance(magrec, MAG_ORDC, diff, caus.sgn(s_ordc));
update_balance(magrec, MAG_ORDF, diff, caus.sgn(s_ordf));
update_balance(magrec, MAG_RIM, diff, caus.sgn(s_rim));
update_balance(magrec, MAG_SCARTI, diff, caus.sgn(s_scart));
update_balance(magrec, MAG_INCL, diff, caus.sgn(s_incl));
update_balance(magrec, MAG_ACL, diff, caus.sgn(s_acl));
update_balance(magrec, MAG_PRODCOMP, diff, caus.sgn(s_prodc));
update_balance(magrec, MAG_PRODFIN, diff, caus.sgn(s_prodf));
update_balance(magrec, MAG_NLABEL, diff, caus.sgn(s_label));
update_balance(magrec, MAG_USER1, diff, caus.sgn(s_user1));
update_balance(magrec, MAG_USER2, diff, caus.sgn(s_user2));
update_balance(magrec, MAG_USER3, diff, caus.sgn(s_user3));
update_balance(magrec, MAG_USER4, diff, caus.sgn(s_user4));
update_balance(magrec, MAG_USER5, diff, caus.sgn(s_user5));
update_balance(magrec, MAG_USER6, diff, caus.sgn(s_user6));
if (!diff.is_zero())
{
update_balance(magrec, MAG_GIAC, diff, caus.sgn(s_giac)); // update ..
update_balance(magrec, MAG_ACQ, diff, caus.sgn(s_acq)); // update ..
update_balance(magrec, MAG_ENT, diff, caus.sgn(s_ent));
update_balance(magrec, MAG_VEN, diff, caus.sgn(s_ven));
update_balance(magrec, MAG_USC, diff, caus.sgn(s_usc));
update_balance(magrec, MAG_ORDC, diff, caus.sgn(s_ordc));
update_balance(magrec, MAG_ORDF, diff, caus.sgn(s_ordf));
update_balance(magrec, MAG_RIM, diff, caus.sgn(s_rim));
update_balance(magrec, MAG_SCARTI, diff, caus.sgn(s_scart));
update_balance(magrec, MAG_INCL, diff, caus.sgn(s_incl));
update_balance(magrec, MAG_ACL, diff, caus.sgn(s_acl));
update_balance(magrec, MAG_PRODCOMP, diff, caus.sgn(s_prodc));
update_balance(magrec, MAG_PRODFIN, diff, caus.sgn(s_prodf));
update_balance(magrec, MAG_NLABEL, diff, caus.sgn(s_label));
update_balance(magrec, MAG_USER1, diff, caus.sgn(s_user1));
update_balance(magrec, MAG_USER2, diff, caus.sgn(s_user2));
update_balance(magrec, MAG_USER3, diff, caus.sgn(s_user3));
update_balance(magrec, MAG_USER4, diff, caus.sgn(s_user4));
update_balance(magrec, MAG_USER5, diff, caus.sgn(s_user5));
update_balance(magrec, MAG_USER6, diff, caus.sgn(s_user6));
}
}
if (caus.update_val())
{
const real diff_val = s.valore();
update_balance(magrec, MAG_VALACQ, diff_val, caus.sgn(s_acq)); // update ..
update_balance(magrec, MAG_VALENT, diff_val, caus.sgn(s_ent));
update_balance(magrec, MAG_VALVEN, diff_val, caus.sgn(s_ven));
update_balance(magrec, MAG_VALUSC, diff_val, caus.sgn(s_usc));
update_balance(magrec, MAG_VALORDC, diff_val, caus.sgn(s_ordc));
update_balance(magrec, MAG_VALORDF, diff_val, caus.sgn(s_ordf));
update_balance(magrec, MAG_VALRIM, diff_val, caus.sgn(s_rim));
update_balance(magrec, MAG_VALSCARTI, diff_val, caus.sgn(s_scart));
update_balance(magrec, MAG_USERVAL1, diff_val, caus.sgn(s_user1));
update_balance(magrec, MAG_USERVAL2, diff_val, caus.sgn(s_user2));
update_balance(magrec, MAG_USERVAL3, diff_val, caus.sgn(s_user3));
update_balance(magrec, MAG_USERVAL4, diff_val, caus.sgn(s_user4));
update_balance(magrec, MAG_USERVAL5, diff_val, caus.sgn(s_user5));
update_balance(magrec, MAG_USERVAL6, diff_val, caus.sgn(s_user6));
if (!diff_val.is_zero())
{
update_balance(magrec, MAG_VALACQ, diff_val, caus.sgn(s_acq)); // update ..
update_balance(magrec, MAG_VALENT, diff_val, caus.sgn(s_ent));
update_balance(magrec, MAG_VALVEN, diff_val, caus.sgn(s_ven));
update_balance(magrec, MAG_VALUSC, diff_val, caus.sgn(s_usc));
update_balance(magrec, MAG_VALORDC, diff_val, caus.sgn(s_ordc));
update_balance(magrec, MAG_VALORDF, diff_val, caus.sgn(s_ordf));
update_balance(magrec, MAG_VALRIM, diff_val, caus.sgn(s_rim));
update_balance(magrec, MAG_VALSCARTI, diff_val, caus.sgn(s_scart));
update_balance(magrec, MAG_USERVAL1, diff_val, caus.sgn(s_user1));
update_balance(magrec, MAG_USERVAL2, diff_val, caus.sgn(s_user2));
update_balance(magrec, MAG_USERVAL3, diff_val, caus.sgn(s_user3));
update_balance(magrec, MAG_USERVAL4, diff_val, caus.sgn(s_user4));
update_balance(magrec, MAG_USERVAL5, diff_val, caus.sgn(s_user5));
update_balance(magrec, MAG_USERVAL6, diff_val, caus.sgn(s_user6));
}
}
}
@ -877,6 +883,7 @@ void TMov_mag::update_balance(TRectype & rec, const char * fieldname, const real
{
if (sgn != 0)
{
CHECK(!val.is_zero(), "Null balance");
if (sgn > 0)
rec.add(fieldname, val);
else
@ -1062,6 +1069,14 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
msg.format(FR("Ricostruzione saldi esercizio %04d : azzeramento giacenze clienti..."), codes);
c.scan(rel_reset_clifogiac, (void*)&p, msg);
}
// Compattamento giacenze dopo cancellazione
{
//prefix().close_closeable_isamfiles(); // Altrimenti segnala -69 durante la pack
TSystemisamfile mag(LF_MAG);
mag.pack(true, true);
}
// ricostruisce i saldi (ciclo sui movimenti)
bool ok = true;
@ -1078,12 +1093,5 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz,
a.close();
if (ok)
{
prefix().close_closeable_isamfiles(); // Altrimenti segnala -69 durante la pack
TSystemisamfile mag(LF_MAG);
mag.pack(true, true);
}
return ok;
}