diff --git a/mg/mglib02a.cpp b/mg/mglib02a.cpp index 2cbc1018d..e26516daf 100755 --- a/mg/mglib02a.cpp +++ b/mg/mglib02a.cpp @@ -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; }