diff --git a/mg/mg1200.cpp b/mg/mg1200.cpp index 66bae52d0..af7eda16c 100755 --- a/mg/mg1200.cpp +++ b/mg/mg1200.cpp @@ -45,7 +45,6 @@ bool TMask_buildmov::handle_annoes(TMask_field &fld, KEY k) return TRUE; } - class TApp_rebuildbalances : public TSkeleton_application { TRelation* _rel; // relazione @@ -56,20 +55,14 @@ class TApp_rebuildbalances : public TSkeleton_application protected: virtual bool create(); virtual void main_loop(); - -public: - TApp_rebuildbalances() {} - virtual ~TApp_rebuildbalances() {} }; bool TApp_rebuildbalances::create() { - open_files(LF_UMART, LF_MAG, LF_RMOVMAG, LF_TABCOM, LF_STOMAG, - LF_DESLIN, LF_CODCORR, 0); + open_files(LF_UMART, LF_MAG, LF_RMOVMAG, LF_TABCOM, LF_STOMAG, LF_DESLIN, LF_CODCORR, 0); return TSkeleton_application::create(); } - void TApp_rebuildbalances::main_loop() { TMask_buildmov m; @@ -77,14 +70,12 @@ void TApp_rebuildbalances::main_loop() { if (!rebuild_balances(m.get_int(F_ANNOES))) warning_box(TR("A causa degli errori riscontrati i saldi di magazzino \npotrebbero non essere stati del tutto aggiornati. \nProcedere ad una nuova operazione di ''Ricostruzione saldi''")); - } } int mg1200(int argc, char* argv[]) { TApp_rebuildbalances a; - a.run(argc, argv, TR("Ricostruzione saldi")); return 0; } diff --git a/mg/mg1200.uml b/mg/mg1200.uml index 08d61ea0f..6141fcace 100755 --- a/mg/mg1200.uml +++ b/mg/mg1200.uml @@ -1,10 +1,6 @@ #include "mg1200.h" -TOOLBAR "topbar" 0 0 0 2 -#include -ENDPAGE - -PAGE "Ricostruzione Saldi" 0 0 0 0 +PAGE "Ricostruzione Saldi" -1 -1 40 3 DATE F_DATA BEGIN @@ -27,5 +23,11 @@ BEGIN END ENDPAGE + +TOOLBAR "topbar" 0 0 0 2 +#include +ENDPAGE + + ENDMASK diff --git a/mg/mglib.h b/mg/mglib.h index debc92080..a1a17a4c5 100755 --- a/mg/mglib.h +++ b/mg/mglib.h @@ -553,10 +553,10 @@ protected: // @member: effettua l'aggiornamento dei saldi di una giacenza sulle gacenze per ciente/fornitore void update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_clifo & s); // @member: effettua l'aggiornamento di un saldo di una giacenza - void update_balance(TRectype & rec, const char * fieldname, real diff) const; + void update_balance(TRectype & rec, const char * fieldname, const real& diff, int sgn) const; - void giac_putkey(TLocalisamfile & mag, TSaldo_mag & s); - void giac_putkey_clifo(TLocalisamfile & clifomag, TSaldo_mag_clifo & s); + void giac_putkey(TRectype& mag, const TSaldo_mag & s); + void giac_putkey_clifo(TRectype& clifomag, const TSaldo_mag_clifo & s); bool lock_anamag(const char *codart); bool unlock_anamag(const char *codart) ; virtual const char * codmag_rauto(int r) const { return NULL;} diff --git a/mg/mglib02.cpp b/mg/mglib02.cpp index b6bd1ceab..55eb9be45 100755 --- a/mg/mglib02.cpp +++ b/mg/mglib02.cpp @@ -521,8 +521,10 @@ void TArticolo_giacenza::set_body_key(TRectype & rowrec) void TArticolo_giacenza::set_anno_mag (int anno) { if (_anno_mag != anno) + { remove_body(LF_MAG); - _anno_mag = anno; + _anno_mag = anno; + } } void TArticolo_giacenza::set_anno_sto (int anno) @@ -633,13 +635,13 @@ bool TArticolo_giacenza::is_deletable(const TRectype& mag) const for (i = 0; protected_fields[i]; i++) { const TString& val = mag.get(protected_fields[i]); - if (val.not_empty() && !real::is_null(val)) + if (val.full() && !real::is_null(val)) return false; } for (i = 0; zero_fields[i]; i++) { const TString& val = mag.get(zero_fields[i]); - if (val.not_empty() && !real::is_null(val)) + if (val.full() && !real::is_null(val)) return false; } return true; @@ -647,7 +649,8 @@ bool TArticolo_giacenza::is_deletable(const TRectype& mag) const bool TArticolo_giacenza::azzera_saldi(int codes, int codespre, bool save_to_disk) { - TRecord_array oldmag = mag(codespre); + CHECKD(codes > 0 && codespre != codes, "Davvero azzereresti i saldi dall'esercizio ", codes); + TRecord_array& oldmag = mag(codespre); TRecord_array& rec_arr = mag(codes); const int last = rec_arr.last_row(); @@ -656,20 +659,22 @@ bool TArticolo_giacenza::azzera_saldi(int codes, int codespre, bool save_to_disk TRectype& mag = rec_arr[r]; for (int i = 0; zero_fields[i]; i++) mag.zero(zero_fields[i]); - const TString80 liv(mag.get(MAG_LIVELLO)); - const int row = find_mag(oldmag, mag.get(MAG_CODMAG), liv); - - if (row >= 0) - { - const TRectype & oldrec = oldmag[row]; - - for (int i = 0; protected_fields[i]; i++) - { - const TString& val = oldrec.get(protected_fields[i]); - if (val.not_empty() && !real::is_null(val)) - mag.put(protected_fields[i], val); - } - } + + if (codespre > 0) + { + const TString80 liv(mag.get(MAG_LIVELLO)); + const int row = find_mag(oldmag, mag.get(MAG_CODMAG), liv); + if (row >= 0) + { + const TRectype& oldrec = oldmag[row]; + for (int i = 0; protected_fields[i]; i++) + { + const TString& val = oldrec.get(protected_fields[i]); + if (val.full() && !real::is_null(val)) + mag.put(protected_fields[i], val); + } + } + } if (is_deletable(mag)) rec_arr.destroy_row(r, TRUE); } @@ -682,6 +687,7 @@ bool TArticolo_giacenza::azzera_saldi(int codes, int codespre, bool save_to_disk bool TArticolo_giacenza::riporta_saldi(int oldes, int newes, const TTipo_valorizz tipo, const char* catven, const char* codlis, bool save_to_disk) { + CHECKD(oldes > 0 && oldes != newes, "Davvero riporteresti i saldi dall'esercizio ", oldes); TString8 codmag; TString16 liv; TRecord_array& rec_arr = mag(oldes); @@ -929,8 +935,7 @@ real TArticolo_giacenza::costo_standard(int annoes) const real TArticolo_giacenza::costo_medio(int annoes, const char * codmag, const char * livello) const { - real acq; - real valacq; + real acq, valacq; #ifdef DBG if (strlen(codmag)>3) diff --git a/mg/mglib02a.cpp b/mg/mglib02a.cpp index 64eef2ab6..81c05f942 100755 --- a/mg/mglib02a.cpp +++ b/mg/mglib02a.cpp @@ -572,7 +572,7 @@ bool TMov_mag::lock_anamag(const char *codart) } -void TMov_mag::giac_putkey(TLocalisamfile & mag, TSaldo_mag & s) +void TMov_mag::giac_putkey(TRectype& mag, const TSaldo_mag & s) { mag.zero(); mag.put(MAG_ANNOES, s.codes()); @@ -581,7 +581,7 @@ void TMov_mag::giac_putkey(TLocalisamfile & mag, TSaldo_mag & s) mag.put(MAG_LIVELLO, s.livello()); } -void TMov_mag::giac_putkey_clifo(TLocalisamfile & clifomag, TSaldo_mag_clifo & s) +void TMov_mag::giac_putkey_clifo(TRectype& clifomag, const TSaldo_mag_clifo & s) { clifomag.zero(); clifomag.put(CLIFOGIAC_ANNOES, s.codes()); @@ -593,35 +593,35 @@ void TMov_mag::giac_putkey_clifo(TLocalisamfile & clifomag, TSaldo_mag_clifo & s } // aggiorna tutti i saldi in base alle modifiche fatte. -// il lock su anagrafica dovrebbe garantire il lock su tutte le -// giacenze dell'articolo +// il lock su anagrafica dovrebbe garantire il lock su tutte le giacenze dell'articolo bool TMov_mag::update_balances(bool lock) { bool updated_bal = true; TLocalisamfile mag(LF_MAG); mag.setkey(2); + TRectype& magcurr = mag.curr(); const TRecord_array& b = body(); - const TString8 hcodcaus(get(MOVMAG_CODCAUS)); - const long numreg = get_long(MOVMAG_NUMREG); + const TString8 hcodcaus = get(MOVMAG_CODCAUS); for (int i = b.last_row(); i > 0; i = b.pred_row(i)) if (causale(i).update_ultcos()) { const TRectype & rec = b[i]; TArticolo & art = articolo(i); - if (art.lock_and_prompt(lock ? _testandlock : _nolock)) { const real prezzo = art.convert_to_um(rec.get_real(RMOVMAG_PREZZO), NULL, rec.get(RMOVMAG_UM), false); - + const long numreg = get_long(MOVMAG_NUMREG); art.update_ultcosti(prezzo,get_date(MOVMAG_DATACOMP), numreg, i); art.rewrite(); } else + { if (lock) art.unlock(); + } } if (_saldi_mag.items() > 0) @@ -631,25 +631,30 @@ bool TMov_mag::update_balances(bool lock) _saldi_mag.get_keys(keys_mag); keys_mag.sort(); - for (TToken_string * curr_key = (TToken_string *)keys_mag.first_item(); - curr_key != NULL; - curr_key = (TToken_string *)keys_mag.succ_item() - ) + for (TToken_string* curr_key = (TToken_string*)keys_mag.first_item(); + curr_key != NULL; curr_key = (TToken_string*)keys_mag.succ_item()) { - TSaldo_mag & saldo = (TSaldo_mag &)_saldi_mag[*curr_key]; - TArticolo_giacenza & art = cached_article_balances(saldo.codart()); + 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)) { - giac_putkey(mag, saldo); - if (mag.read() != NOERR) + giac_putkey(magcurr, saldo); + int err = mag.read(); + if (err != NOERR) { - giac_putkey(mag, saldo); - mag.put(MAG_NRIGA, art.mag(get(MOVMAG_ANNOES)).rows() + 1); - mag.write(); + TRecord_array& sld = art.mag(saldo.codes()); + const int nriga = sld.rows() + 1; + giac_putkey(magcurr, saldo); + magcurr.put(MAG_NRIGA, nriga); + sld.add_row(magcurr); + sld.write(nriga > 1); // write riga singola, rewrite righe multiple } - update_balances(mag.curr(), saldo); - mag.rewrite(); + update_balances(magcurr, saldo); + err = mag.rewrite(); + if (err != NOERR) + updated_bal = false; if (lock) art.unlock(); @@ -661,6 +666,7 @@ bool TMov_mag::update_balances(bool lock) { TLocalisamfile clifomag(LF_CLIFOGIAC); clifomag.setkey(2); + TRectype& clifomag_curr = clifomag.curr(); TString_array keys_clifo; @@ -668,8 +674,7 @@ bool TMov_mag::update_balances(bool lock) keys_clifo.sort(); for (TToken_string* curr_key = (TToken_string*)keys_clifo.first_item(); - curr_key != NULL; - curr_key = (TToken_string *)keys_clifo.succ_item()) + curr_key != NULL; curr_key = (TToken_string*)keys_clifo.succ_item()) { TSaldo_mag_clifo & saldo=(TSaldo_mag_clifo &)_saldi_mag_clifo[*curr_key]; @@ -677,28 +682,28 @@ bool TMov_mag::update_balances(bool lock) if (art.lock_and_prompt(lock ? _testandlock : _nolock)) { - giac_putkey_clifo(clifomag, saldo); + giac_putkey_clifo(clifomag_curr, saldo); if (clifomag.read() != NOERR) { // non trovato: aggiungo clifomag.setkey(1); - giac_putkey_clifo(clifomag, saldo); - clifomag.put(CLIFOGIAC_NRIGA, 999); + giac_putkey_clifo(clifomag_curr, saldo); + clifomag_curr.put(CLIFOGIAC_NRIGA, 999); if (clifomag.read(_isgteq) == NOERR) clifomag.prev(); int nriga = 1; - if (clifomag.get_int(CLIFOGIAC_ANNOES) == saldo.codes() && - clifomag.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() && - clifomag.get(CLIFOGIAC_CODCF) == saldo.codcf() && - clifomag.get(CLIFOGIAC_CODART) == saldo.codart() && - clifomag.get(CLIFOGIAC_LIVELLO ) == saldo.livello()) - nriga = clifomag.get_int(CLIFOGIAC_NRIGA) + 1; - giac_putkey_clifo(clifomag, saldo); - clifomag.put(CLIFOGIAC_NRIGA, nriga); + if (clifomag_curr.get_int(CLIFOGIAC_ANNOES) == saldo.codes() && + clifomag_curr.get_char(CLIFOGIAC_TIPOCF) == saldo.tipocf() && + clifomag_curr.get(CLIFOGIAC_CODCF) == saldo.codcf() && + clifomag_curr.get(CLIFOGIAC_CODART) == saldo.codart() && + clifomag_curr.get(CLIFOGIAC_LIVELLO ) == saldo.livello()) + nriga = clifomag_curr.get_int(CLIFOGIAC_NRIGA) + 1; + giac_putkey_clifo(clifomag_curr, saldo); + clifomag_curr.put(CLIFOGIAC_NRIGA, nriga); clifomag.write(); clifomag.setkey(2); } - update_balances_clifo(clifomag.curr(), saldo); + update_balances_clifo(clifomag_curr, saldo); clifomag.rewrite(); if (lock) @@ -721,45 +726,45 @@ void TMov_mag::update_balances(TRectype & magrec, const TSaldo_mag & s) { const real diff = s.quant(); - update_balance(magrec, MAG_GIAC, diff * (real)caus.sgn(s_giac)); // update .. - update_balance(magrec, MAG_ACQ, diff * (real)caus.sgn(s_acq)); // update .. - update_balance(magrec, MAG_ENT, diff * (real)caus.sgn(s_ent)); - update_balance(magrec, MAG_VEN, diff * (real)caus.sgn(s_ven)); - update_balance(magrec, MAG_USC, diff * (real)caus.sgn(s_usc)); - update_balance(magrec, MAG_ORDC, diff * (real)caus.sgn(s_ordc)); - update_balance(magrec, MAG_ORDF, diff * (real)caus.sgn(s_ordf)); - update_balance(magrec, MAG_RIM, diff * (real)caus.sgn(s_rim)); - update_balance(magrec, MAG_SCARTI, diff * (real)caus.sgn(s_scart)); - update_balance(magrec, MAG_INCL, diff * (real)caus.sgn(s_incl)); - update_balance(magrec, MAG_ACL, diff * (real)caus.sgn(s_acl)); - update_balance(magrec, MAG_PRODCOMP, diff * (real)caus.sgn(s_prodc)); - update_balance(magrec, MAG_PRODFIN, diff * (real)caus.sgn(s_prodf)); - update_balance(magrec, MAG_NLABEL, diff * (real)caus.sgn(s_label)); - update_balance(magrec, MAG_USER1, diff * (real)caus.sgn(s_user1)); - update_balance(magrec, MAG_USER2, diff * (real)caus.sgn(s_user2)); - update_balance(magrec, MAG_USER3, diff * (real)caus.sgn(s_user3)); - update_balance(magrec, MAG_USER4, diff * (real)caus.sgn(s_user4)); - update_balance(magrec, MAG_USER5, diff * (real)caus.sgn(s_user5)); - update_balance(magrec, MAG_USER6, diff * (real)caus.sgn(s_user6)); + 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 * (real)caus.sgn(s_acq)); // update .. - update_balance(magrec, MAG_VALENT, diff_val * (real)caus.sgn(s_ent)); - update_balance(magrec, MAG_VALVEN, diff_val * (real)caus.sgn(s_ven)); - update_balance(magrec, MAG_VALUSC, diff_val * (real)caus.sgn(s_usc)); - update_balance(magrec, MAG_VALORDC, diff_val * (real)caus.sgn(s_ordc)); - update_balance(magrec, MAG_VALORDF, diff_val * (real)caus.sgn(s_ordf)); - update_balance(magrec, MAG_VALRIM, diff_val* (real)caus.sgn(s_rim)); - update_balance(magrec, MAG_VALSCARTI, diff_val * (real)caus.sgn(s_scart)); - update_balance(magrec, MAG_USERVAL1, diff_val * (real)caus.sgn(s_user1)); - update_balance(magrec, MAG_USERVAL2, diff_val * (real)caus.sgn(s_user2)); - update_balance(magrec, MAG_USERVAL3, diff_val * (real)caus.sgn(s_user3)); - update_balance(magrec, MAG_USERVAL4, diff_val * (real)caus.sgn(s_user4)); - update_balance(magrec, MAG_USERVAL5, diff_val * (real)caus.sgn(s_user5)); - update_balance(magrec, MAG_USERVAL6, diff_val * (real)caus.sgn(s_user6)); + 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)); } } @@ -773,48 +778,48 @@ void TMov_mag::update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_cl { const real diff = s.quant(); - update_balance(clifomagrec, CLIFOGIAC_GIAC, -diff * (real)caus.sgn(s_giac)); // update .. - update_balance(clifomagrec, CLIFOGIAC_ACQ, diff * (real)caus.sgn(s_ven)); // update .. - update_balance(clifomagrec, CLIFOGIAC_ENT, diff * (real)caus.sgn(s_usc)); - update_balance(clifomagrec, CLIFOGIAC_VEN, diff * (real)caus.sgn(s_acq)); - update_balance(clifomagrec, CLIFOGIAC_USC, diff * (real)caus.sgn(s_ent)); - update_balance(clifomagrec, CLIFOGIAC_ORDC, diff * (real)caus.sgn(s_ordf)); - update_balance(clifomagrec, CLIFOGIAC_ORDF, diff * (real)caus.sgn(s_ordc)); - update_balance(clifomagrec, CLIFOGIAC_RIM, -diff * (real)caus.sgn(s_rim)); - update_balance(clifomagrec, CLIFOGIAC_SCARTI, -diff * (real)caus.sgn(s_scart)); - update_balance(clifomagrec, CLIFOGIAC_INCL, diff * (real)caus.sgn(s_acl)); - update_balance(clifomagrec, CLIFOGIAC_ACL, diff * (real)caus.sgn(s_incl)); - update_balance(clifomagrec, CLIFOGIAC_PRODCOMP, -diff * (real)caus.sgn(s_prodc)); - update_balance(clifomagrec, CLIFOGIAC_PRODFIN, -diff * (real)caus.sgn(s_prodf)); - update_balance(clifomagrec, CLIFOGIAC_DOTIN, diff * (real)caus.sgn(s_dotin)); - update_balance(clifomagrec, CLIFOGIAC_DOTOD, diff * (real)caus.sgn(s_dotod)); - update_balance(clifomagrec, CLIFOGIAC_DOTTM, diff * (real)caus.sgn(s_dottm)); - update_balance(clifomagrec, CLIFOGIAC_CONSANNO, diff * (real)caus.sgn(s_consanno)); - update_balance(clifomagrec, CLIFOGIAC_USER1, diff * (real)caus.sgn(s_user1)); - update_balance(clifomagrec, CLIFOGIAC_USER2, diff * (real)caus.sgn(s_user2)); - update_balance(clifomagrec, CLIFOGIAC_USER3, diff * (real)caus.sgn(s_user3)); - update_balance(clifomagrec, CLIFOGIAC_USER4, diff * (real)caus.sgn(s_user4)); - update_balance(clifomagrec, CLIFOGIAC_USER5, diff * (real)caus.sgn(s_user5)); - update_balance(clifomagrec, CLIFOGIAC_USER6, diff * (real)caus.sgn(s_user6)); + update_balance(clifomagrec, CLIFOGIAC_GIAC, -diff, caus.sgn(s_giac)); // update .. + update_balance(clifomagrec, CLIFOGIAC_ACQ, diff, caus.sgn(s_ven)); // update .. + update_balance(clifomagrec, CLIFOGIAC_ENT, diff, caus.sgn(s_usc)); + update_balance(clifomagrec, CLIFOGIAC_VEN, diff, caus.sgn(s_acq)); + update_balance(clifomagrec, CLIFOGIAC_USC, diff, caus.sgn(s_ent)); + update_balance(clifomagrec, CLIFOGIAC_ORDC, diff, caus.sgn(s_ordf)); + update_balance(clifomagrec, CLIFOGIAC_ORDF, diff, caus.sgn(s_ordc)); + update_balance(clifomagrec, CLIFOGIAC_RIM, -diff, caus.sgn(s_rim)); + update_balance(clifomagrec, CLIFOGIAC_SCARTI, -diff, caus.sgn(s_scart)); + update_balance(clifomagrec, CLIFOGIAC_INCL, diff, caus.sgn(s_acl)); + update_balance(clifomagrec, CLIFOGIAC_ACL, diff, caus.sgn(s_incl)); + update_balance(clifomagrec, CLIFOGIAC_PRODCOMP, -diff, caus.sgn(s_prodc)); + update_balance(clifomagrec, CLIFOGIAC_PRODFIN, -diff, caus.sgn(s_prodf)); + update_balance(clifomagrec, CLIFOGIAC_DOTIN, diff, caus.sgn(s_dotin)); + update_balance(clifomagrec, CLIFOGIAC_DOTOD, diff, caus.sgn(s_dotod)); + update_balance(clifomagrec, CLIFOGIAC_DOTTM, diff, caus.sgn(s_dottm)); + update_balance(clifomagrec, CLIFOGIAC_CONSANNO, diff, caus.sgn(s_consanno)); + update_balance(clifomagrec, CLIFOGIAC_USER1, diff, caus.sgn(s_user1)); + update_balance(clifomagrec, CLIFOGIAC_USER2, diff, caus.sgn(s_user2)); + update_balance(clifomagrec, CLIFOGIAC_USER3, diff, caus.sgn(s_user3)); + update_balance(clifomagrec, CLIFOGIAC_USER4, diff, caus.sgn(s_user4)); + update_balance(clifomagrec, CLIFOGIAC_USER5, diff, caus.sgn(s_user5)); + update_balance(clifomagrec, CLIFOGIAC_USER6, diff, caus.sgn(s_user6)); } if (caus.update_val()) { const real diff_val = s.valore(); - update_balance(clifomagrec, CLIFOGIAC_VALACQ, diff_val * (real)caus.sgn(s_ven)); // update .. - update_balance(clifomagrec, CLIFOGIAC_VALENT, diff_val * (real)caus.sgn(s_usc)); - update_balance(clifomagrec, CLIFOGIAC_VALVEN, diff_val * (real)caus.sgn(s_acq)); - update_balance(clifomagrec, CLIFOGIAC_VALUSC, diff_val * (real)caus.sgn(s_ven)); - update_balance(clifomagrec, CLIFOGIAC_VALORDC, diff_val * (real)caus.sgn(s_ordf)); - update_balance(clifomagrec, CLIFOGIAC_VALORDF, diff_val * (real)caus.sgn(s_ordc)); - update_balance(clifomagrec, CLIFOGIAC_VALRIM, -diff_val* (real)caus.sgn(s_rim)); - update_balance(clifomagrec, CLIFOGIAC_VALSCARTI, -diff_val * (real)caus.sgn(s_scart)); - update_balance(clifomagrec, CLIFOGIAC_USERVAL1, diff_val * (real)caus.sgn(s_user1)); - update_balance(clifomagrec, CLIFOGIAC_USERVAL2, diff_val * (real)caus.sgn(s_user2)); - update_balance(clifomagrec, CLIFOGIAC_USERVAL3, diff_val * (real)caus.sgn(s_user3)); - update_balance(clifomagrec, CLIFOGIAC_USERVAL4, diff_val * (real)caus.sgn(s_user4)); - update_balance(clifomagrec, CLIFOGIAC_USERVAL5, diff_val * (real)caus.sgn(s_user5)); - update_balance(clifomagrec, CLIFOGIAC_USERVAL6, diff_val * (real)caus.sgn(s_user6)); + update_balance(clifomagrec, CLIFOGIAC_VALACQ, diff_val, caus.sgn(s_ven)); // update .. + update_balance(clifomagrec, CLIFOGIAC_VALENT, diff_val, caus.sgn(s_usc)); + update_balance(clifomagrec, CLIFOGIAC_VALVEN, diff_val, caus.sgn(s_acq)); + update_balance(clifomagrec, CLIFOGIAC_VALUSC, diff_val, caus.sgn(s_ven)); + update_balance(clifomagrec, CLIFOGIAC_VALORDC, diff_val, caus.sgn(s_ordf)); + update_balance(clifomagrec, CLIFOGIAC_VALORDF, diff_val, caus.sgn(s_ordc)); + update_balance(clifomagrec, CLIFOGIAC_VALRIM, -diff_val, caus.sgn(s_rim)); + update_balance(clifomagrec, CLIFOGIAC_VALSCARTI, -diff_val, caus.sgn(s_scart)); + update_balance(clifomagrec, CLIFOGIAC_USERVAL1, diff_val, caus.sgn(s_user1)); + update_balance(clifomagrec, CLIFOGIAC_USERVAL2, diff_val, caus.sgn(s_user2)); + update_balance(clifomagrec, CLIFOGIAC_USERVAL3, diff_val, caus.sgn(s_user3)); + update_balance(clifomagrec, CLIFOGIAC_USERVAL4, diff_val, caus.sgn(s_user4)); + update_balance(clifomagrec, CLIFOGIAC_USERVAL5, diff_val, caus.sgn(s_user5)); + update_balance(clifomagrec, CLIFOGIAC_USERVAL6, diff_val, caus.sgn(s_user6)); } } @@ -857,9 +862,15 @@ int TMov_mag::codice_esercizio(const TDate &d) return esercizi().date2esc(d); } -void TMov_mag::update_balance(TRectype & rec, const char * fieldname, real diff) const +void TMov_mag::update_balance(TRectype & rec, const char * fieldname, const real& val, const int sgn) const { - rec.put(fieldname,rec.get_real(fieldname) + diff); + if (sgn != 0) + { + if (sgn > 0) + rec.add(fieldname, val); + else + rec.add(fieldname, -val); + } } struct TBalance_params @@ -964,7 +975,8 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz, p.codes = codes; p.codesprec = esercizi().pred(codes); - p.zero_giac = p.codesprec > 0 && esercizi().esercizio(p.codesprec).chiusura_mag().ok(); + //p.zero_giac = p.codesprec > 0 && esercizi().esercizio(p.codesprec).chiusura_mag().ok(); + p.zero_giac = p.codesprec <= 0 || esercizi().esercizio(p.codesprec).chiusura_mag().ok(); p.catv = catven; p.codl = codlis; @@ -985,14 +997,13 @@ bool rebuild_balances(int codes, const TTipo_valorizz tipo_valorizz, // ricostruisce i saldi (ciclo sui movimenti) bool ok = true; - TRectype rec(LF_MOVMAG); + TRelation relmovmag(LF_MOVMAG); + TRectype& rec = relmovmag.curr(); rec.put(MOVMAG_ANNOES, codes); - TCursor mov_cur(new TRelation(LF_MOVMAG),"", 2, &rec, &rec); - - mov_cur.relation()->lfile().set_curr(new TMov_mag()); - mov_cur.freeze(); + TCursor mov_cur(&relmovmag ,"", 2, &rec, &rec); + relmovmag.lfile().set_curr(new TMov_mag()); msg.format(FR("Ricostruzione saldi esercizio %04d : ricalcolo..."), codes); mov_cur.scan(recalc_mov, (void *) &ok, msg);