diff --git a/mg/f110.dir b/mg/f110.dir index 266563cd1..49d822545 100755 --- a/mg/f110.dir +++ b/mg/f110.dir @@ -1,3 +1,3 @@ 110 0 -$movmag|52|52|135|0|Movimenti di magazzino (?)||| +$movmag|52|52|135|0|Movimenti di magazzino||| diff --git a/mg/mg1200.cpp b/mg/mg1200.cpp index 3ddb5920e..8d8f039c1 100755 --- a/mg/mg1200.cpp +++ b/mg/mg1200.cpp @@ -79,7 +79,7 @@ void TApp_rebuildbalances::main_loop() while (m.run()==K_ENTER) { if (!rebuild_balances(m.get(F_ANNOES))) - warning_box("A causa degli errori riscontrati i saldi di magazzino \npotrebbero non essere stati del tutto aggiornati. \nProcedere ad una nuova operazione di ''Ricostruzione saldi''"); + 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'")); } } @@ -87,6 +87,6 @@ int mg1200(int argc, char* argv[]) { TApp_rebuildbalances a; - a.run(argc, argv, "Ricostruzione saldi"); + a.run(argc, argv, TR("Ricostruzione saldi")); return 0; } diff --git a/mg/mg1200.uml b/mg/mg1200.uml index 46b25fdf4..827e94ce2 100755 --- a/mg/mg1200.uml +++ b/mg/mg1200.uml @@ -1,19 +1,6 @@ #include "mg1200.h" -TOOLBAR "" 0 19 40 2 - -BUTTON DLG_OK 14 2 -BEGIN - PROMPT -12 -1 "Ricostruisci" -END - -BUTTON DLG_CANCEL 14 2 -BEGIN - PROMPT -22 -1 "Annulla" -END -ENDPAGE - -PAGE "Ricostruzione movimenti" 11 50 10 +PAGE "Ricostruzione Saldi" -1 -1 36 4 DATE F_DATA BEGIN @@ -24,7 +11,7 @@ END NUMBER F_ANNOES 4 BEGIN - PROMPT 2 3 "Codice esercizio " + PROMPT 1 1 "Codice esercizio " USE ESC INPUT CODTAB F_ANNOES DISPLAY "Esercizio@20" CODTAB @@ -35,6 +22,19 @@ BEGIN FLAGS "Z" END +BUTTON DLG_ELABORA 14 2 +BEGIN + PROMPT -12 -1 "~Elabora" + PICTURE BMP_ELABORA + MESSAGE EXIT,K_ENTER +END + +BUTTON DLG_QUIT 14 2 +BEGIN + PROMPT -22 -1 "" +END + + ENDPAGE ENDMASK diff --git a/mg/mg3300.cpp b/mg/mg3300.cpp index 0b610b8a5..fdf71e5ca 100755 --- a/mg/mg3300.cpp +++ b/mg/mg3300.cpp @@ -9,9 +9,7 @@ #include "mglib.h" #include "mg3300.h" -#ifndef __CGLIB01_H #include "../cg/cglib01.h" -#endif TCausale_magazzino& get_cau(const char* codcaus) @@ -25,6 +23,7 @@ TCausale_magazzino& get_cau(const char* codcaus) } return *caus; } + class TForm_schedemag : public TForm_stampemg { int _tolivgiac,_tolivart; diff --git a/mg/mg3300.uml b/mg/mg3300.uml index 920ede69b..0f34583d2 100755 --- a/mg/mg3300.uml +++ b/mg/mg3300.uml @@ -212,19 +212,19 @@ BEGIN PROMPT 42 12 "Dettaglio i depositi" END -LIST F_ENABLER 40 +LIST F_ENABLER 30 BEGIN - PROMPT 2 14 "" - ITEM "AC|Dettaglia fino ai singoli articoli" + PROMPT 2 14 "Livello di dettaglio " + ITEM "AC|fino ai singoli articoli" MESSAGE RESET,F_TOLIVELLOGIAC|HIDE,F_TOLIVELLOGIAC|RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART - ITEM "AL|Dettaglia gli articoli fino al livello" + ITEM "AL|fino al livello" MESSAGE RESET,F_TOLIVELLOGIAC|HIDE,F_TOLIVELLOGIAC|SHOW,F_TOLIVELLOART|CHECK,F_TOLIVELLOART - ITEM "GC|Dettaglia le giacenze fino al livello " + ITEM "GC|fino al livello di giacenza" MESSAGE RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART|SHOW,F_TOLIVELLOGIAC|CHECK,F_TOLIVELLOGIAC - ITEM "|Massimo dettaglio" + ITEM "|massimo" MESSAGE ENABLE,F_SUDDIV_MAGAZZINI MESSAGE RESET,F_TOLIVELLOGIAC|RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART|HIDE,F_TOLIVELLOGIAC @@ -232,10 +232,9 @@ BEGIN END - NUMBER F_TOLIVELLOART 1 BEGIN - PROMPT 45 14 "" + PROMPT 57 14 "" USE FCA INPUT CODTAB F_TOLIVELLOART DISPLAY "Num." CODTAB @@ -251,7 +250,7 @@ END NUMBER F_TOLIVELLOGIAC 1 BEGIN - PROMPT 45 14 "" + PROMPT 57 14 "" USE FCG INPUT CODTAB F_TOLIVELLOGIAC DISPLAY "Num." CODTAB diff --git a/mg/mg4300.cpp b/mg/mg4300.cpp index fe7f8491b..46cbdfa34 100755 --- a/mg/mg4300.cpp +++ b/mg/mg4300.cpp @@ -7,7 +7,9 @@ #include "mag.h" #include "stomag.h" #include "umart.h" - +#include "movmag.h" +#include "rmovmag.h" + #include "../ve/veconf.h" #include "mglib.h" #include "mg4300.h" @@ -24,7 +26,7 @@ public: bool ragg_grpfis() const { return get_bool("B5"); } bool ragg_caus() const { return get_bool("B6"); } - int last_numreg() const { return get_int("I4"); } + long last_numreg() const { return get_long("I4"); } void set_last_numreg(long n) { put("I4",n); } // data ultima stampa esercizio precedente TDate last_print_prec() const { return get_date("D4"); } @@ -38,9 +40,8 @@ public: // ************************************************ // TEMP!!!!!!!!!!!!!!!! -TRegistro_giornalemag:: - TRegistro_giornalemag(const char* cod, int year) - :TRegistro_std(cod,year) +TRegistro_giornalemag::TRegistro_giornalemag(const char* cod, int year) + :TRegistro_std(cod,year) { if (tipo()!=TIPOREG_GIOMAG) fatal_box("Il registro richiesto non è relativo ad un libro giornale di magazzino"); @@ -49,8 +50,8 @@ TRegistro_giornalemag:: class TGiornalemag : public TForm_stampemg { - static TDate dadata; - static TDate adata; + static TDate _dadata; + static TDate _adata; static int freq_stampa; static bool stampa_def; static bool ragg_mag; @@ -61,6 +62,7 @@ class TGiornalemag : public TForm_stampemg static TCursor * cur; static TGiornalemag* giofrm; static TAssoc_array _cod_magazzini; + static TAssoc_array _cau_magazzino; static int _annoes; static int livello_giac; @@ -80,6 +82,8 @@ static bool filter_func(const TRelation* r); protected: // void add_mag(TRectype & magrec,const char * codreg); + void calcola_range_movimenti(TRecnotype& primo, TRecnotype& ultimo) const; + public: void set_parametri(TMask & m); bool can_be_printed(); @@ -181,11 +185,13 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s) valore << ' '; vv = ""; } + + const TRectype& anamag = cursor()->relation()->curr(LF_ANAMAG); if (ragg_articoli) { - valore << "Art." << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART) << ' '; + valore << "Art." << anamag.get(ANAMAG_CODART) << ' '; //vv << ' ' << cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC") << ' '; - TString livello(cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC")); + TString livello(cursor()->relation()->curr(LF_RMOVMAG).get("LIVGIAC")); if (livello.not_empty() && livello_giac != 0) { for (int lev=1; lev <= livello_giac; lev++) @@ -200,13 +206,15 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s) valore << livelli_giacenza().name(livello_giac); valore << " " << livelli_giacenza().group_descr_packed(livello,livello_giac) << " "; } - } else { + } + else + { if (ragg_classi) { - valore << "Classe fiscale " << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_CLASSEFIS) << ' '; + valore << "Classe fiscale " << anamag.get(ANAMAG_CLASSEFIS) << ' '; if (ragg_raggart) { - valore << " ragg. " << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_RAGGFIS) << ' '; + valore << " ragg. " << anamag.get(ANAMAG_RAGGFIS) << ' '; } } else { vv.cut(0); @@ -215,14 +223,16 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s) //valore << "Mov." << cursor()->relation()->lfile(LF_RMOVMAG).get("NUMREG") << "/"; //valore << cursor()->relation()->lfile(LF_RMOVMAG).get("NRIG"); } - vv << "Art. " << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART); + vv << "Art. " << anamag.get(ANAMAG_CODART); //vv << ' ' << cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC") << ' '; } } valore << vv; cf.set(valore); return TRUE; - } else if (subcode== "INFO_CAUS") { + } + else if (subcode== "INFO_CAUS") + { const TRectype& rec_caus = cache().get("%CAU", cf.get()); if (ragg_caus) { @@ -247,14 +257,16 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s) } -const char * TGiornalemag::get_cronofield(TVariable_rectype & r) +const char * TGiornalemag::get_cronofield(TVariable_rectype & rmovmag) { // static buffer - static TString * valore=NULL; if (valore == NULL ) valore = new TString80 ; + static TString * valore=NULL; + if (valore == NULL ) + valore = new TString16; + + const TRectype& movmag = cache().get(LF_MOVMAG, rmovmag.get(RMOVMAG_NUMREG)); + const TDate datamov = movmag.get(MOVMAG_DATAREG); - TDate datamov(cur->relation()->lfile(LF_MOVMAG).get_date("DATAREG")); - long numreg=cur->relation()->lfile(LF_MOVMAG).get_int("NUMREG"); - // gestione frequenza valore->cut(0); switch (freq_stampa ) { @@ -262,7 +274,7 @@ const char * TGiornalemag::get_cronofield(TVariable_rectype & r) valore->format("%4d%2d%2d%7d",datamov.year(), datamov.month(), datamov.day(), - numreg); + movmag.get_long("NUMREG")); break; default: valore->format("%4d%2d%2d",datamov.year(), @@ -272,62 +284,100 @@ const char * TGiornalemag::get_cronofield(TVariable_rectype & r) return *valore; } -const char * TGiornalemag::get_fiscfield(TVariable_rectype & r) +const char * TGiornalemag::get_fiscfield(TVariable_rectype & rmovmag) { - static TString * valore=NULL; if (valore == NULL ) valore = new TString80 ; - TString vv; - + static TString * valore=NULL; + if (valore == NULL ) + valore = new TString80 ; + + TString80 vv; valore->cut(0); + + const TString80 codart = rmovmag.get(RMOVMAG_CODART); + // gestione ragruppamenti if (!ragg_mag) { - valore->format("%-15s",(const char *)cur->relation()->lfile(LF_RMOVMAG).get("CODMAG")); + valore->format("%-15s",(const char *)rmovmag.get(RMOVMAG_CODMAG)); } if (ragg_articoli) { - *valore << cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART); + *valore << codart; - TString c2(cur->relation()->lfile(LF_RMOVMAG).get("LIVGIAC")); if (livello_giac) + { + const TString80 c2 = rmovmag.get("LIVGIAC"); *valore << livelli_giacenza().unpack_grpcode(c2, livello_giac); + } } else { if (ragg_classi) { - *valore << cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_CLASSEFIS); + const TRectype& anamag = cache().get(LF_ANAMAG, codart); + *valore << anamag.get(ANAMAG_CLASSEFIS); if (ragg_raggart) - { - *valore << cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_RAGGFIS); - } + *valore << anamag.get(ANAMAG_RAGGFIS); } else { if (!ragg_caus && freq_stampa==0) { - vv.format("%4d",cur->relation()->lfile(LF_RMOVMAG).get_int("NRIG")); + vv.format("%4d",rmovmag.get_int(RMOVMAG_NRIG)); } else { - vv.format("%-20s", (const char *)cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART)); + vv.format("%-20s", (const char *)codart); } } } + + TString16 codcaus = rmovmag.get(RMOVMAG_CODCAUS); + if (codcaus.empty()) + { + const TRectype& movmag = cache().get(LF_MOVMAG, rmovmag.get(RMOVMAG_NUMREG)); + codcaus = movmag.get(MOVMAG_CODCAUS); + } + if (ragg_caus) // raggruppo per "tipo" di causale - *valore << cur->curr(-ALIAS_CAUSALI).get("S8"); + { + TCausale_magazzino* caus = (TCausale_magazzino*)_cau_magazzino.objptr(codcaus); + *valore << caus->get("S8"); + } else - *valore << cur->curr(-ALIAS_CAUSALI).get("CODTAB"); + *valore << codcaus; *valore << vv; return *valore; } - +void TGiornalemag::calcola_range_movimenti(TRecnotype& primo, TRecnotype& ultimo) const +{ + TRelation rel(LF_MOVMAG); + TRectype recfr(LF_MOVMAG), recto(LF_MOVMAG); + if (_dadata.ok()) + recfr.put(MOVMAG_DATAREG, _dadata); + if (_adata.ok()) + recto.put(MOVMAG_DATAREG, _adata); + TCursor cur(&rel, "", 3, &recfr, &recto); + const TRecnotype items = cur.items(); + cur.freeze(); + primo = 0; + ultimo = 0; + for (cur = 0L; cur.pos() < items; ++cur) + { + const long numreg = rel.curr().get_long(MOVMAG_NUMREG); + if (primo == 0 || numreg < primo) + primo = numreg; + if (numreg > ultimo) + ultimo = numreg; + } +} void TGiornalemag::set_parametri(TMask & m) { // set static variables - dadata=m.get_date(F_DATAIN); - adata=m.get_date(F_DATAFIN); + _dadata=m.get_date(F_DATAIN); + _adata=m.get_date(F_DATAFIN); freq_stampa = m.get_int(F_FREQ); stampa_def = (*m.get(F_DEFINITIVA) == 'D'); ragg_mag = m.get_bool(F_RAGGMAG); @@ -350,7 +400,6 @@ void TGiornalemag::set_parametri(TMask & m) ragg_articoli || ragg_classi || ragg_caus); find_field('B',odd_page,"HEADER_MOV").show(freq_stampa==0); - TVariable_rectype *vrec_rmov= new TVariable_rectype(LF_RMOVMAG); vrec_rmov->add_field(new TVariable_field ("CRONO_FIELD",get_cronofield,32)); vrec_rmov->add_field(new TVariable_field ("FISC_FIELD",get_fiscfield,48)); @@ -360,15 +409,34 @@ void TGiornalemag::set_parametri(TMask & m) // inserisce tutti i magazzini collegati _cod_magazzini.destroy(); TTable mag("MAG"); - for (int err = mag.first(); err == NOERR; err = mag.next()) + int err; + for (err = mag.first(); err == NOERR; err = mag.next()) { const TString16 codmag(mag.get("CODTAB").left(3)); if (codmag.len() == 3 && mag.get("S8")==m.get(F_CODREG)) _cod_magazzini.add(codmag); } + + _cau_magazzino.destroy(); + TTable cau("%CAU"); + for (err = cau.first(); err == NOERR; err = cau.next()) + { + TCausale_magazzino* cm = new TCausale_magazzino(cau.curr()); + _cau_magazzino.add(cm->codice(), cm); + } + + TRecnotype primo, ultimo; + calcola_range_movimenti(primo, ultimo); + + TRectype recfr(LF_RMOVMAG), recto(LF_RMOVMAG); + if (primo > 0) + recfr.put(RMOVMAG_NUMREG, primo); + if (ultimo > 0) + recto.put(RMOVMAG_NUMREG, ultimo); + cursor()->setregion(recfr, recto); // setta il filtro sui magazzini di questo giornale - cursor()->set_filterfunction(filter_func,TRUE); + cursor()->set_filterfunction(filter_func,FALSE); } /* @@ -398,29 +466,32 @@ void TGiornalemag::add_mag(TRectype & magrec,const char * codreg) bool TGiornalemag::filter_func(const TRelation* r) { - const TRectype& movmag = r->curr(LF_MOVMAG); - const TDate datareg = movmag.get("DATAREG"); +// const TRectype& movmag = r->curr(LF_MOVMAG); + const TRectype& rmovmag = r->curr(LF_RMOVMAG); + const TRectype& movmag = cache().get(LF_MOVMAG, rmovmag.get(RMOVMAG_NUMREG)); + + const TDate datareg = movmag.get(MOVMAG_DATAREG); if (datareg.year() != _annoes) return FALSE; - if (!dadata.empty() && datareg < dadata) + if (!_dadata.empty() && datareg < _dadata) return FALSE; - if (!adata.empty() && datareg > adata) + if (!_adata.empty() && datareg > _adata) return FALSE; - const TString16 codmag = r->curr(LF_RMOVMAG).get("CODMAG").left(3); + const TString4 codmag = rmovmag.get(RMOVMAG_CODMAG).left(3); if (!_cod_magazzini.is_key(codmag)) return FALSE; // considera solo le causali "fiscali" o quelle che movimentano le rimanenze iniziali(movimenti d'apertura) - bool rval; - TCausale_magazzino& causrig=(TCausale_magazzino&)r->curr(-ALIAS_CAUSALIR); - if (causrig.codice().not_empty()) - rval = causrig.is_fiscale() || causrig.sgn(s_rim); - else - { - TCausale_magazzino& causmov=(TCausale_magazzino&)r->curr(-ALIAS_CAUSALI); - rval = causmov.is_fiscale() || causmov.sgn(s_rim); - } + bool rval = FALSE; + + TString16 codcaus = rmovmag.get(RMOVMAG_CODCAUS); + if (codcaus.empty()) + codcaus = movmag.get(MOVMAG_CODCAUS); + TCausale_magazzino* caus = (TCausale_magazzino*)_cau_magazzino.objptr(codcaus); + if (caus != NULL) + rval = caus->is_fiscale() || caus->sgn(s_rim); + return rval; } @@ -430,10 +501,10 @@ bool TGiornalemag::can_be_printed() { TLocalisamfile mov(LF_MOVMAG); mov.setkey(3); - mov.put("DATAREG",dadata); + mov.put(MOVMAG_DATAREG,_dadata); mov.read(); mov.prev(); - if (!mov.eof() || mov.get("NUMREGST")!=_reg_giorn->last_numreg()) + if (!mov.eof() || mov.get(MOVMAG_NUMREGST)!=_reg_giorn->last_numreg()) return FALSE; } return TRUE; @@ -454,8 +525,8 @@ TGiornalemag::~TGiornalemag() } // dichiarazioni degli static -TDate TGiornalemag::dadata; -TDate TGiornalemag::adata; +TDate TGiornalemag::_dadata; +TDate TGiornalemag::_adata; int TGiornalemag::freq_stampa; bool TGiornalemag::ragg_mag; bool TGiornalemag::stampa_def; @@ -467,6 +538,7 @@ int TGiornalemag::livello_giac; TCursor * TGiornalemag::cur; TGiornalemag * TGiornalemag::giofrm; TAssoc_array TGiornalemag::_cod_magazzini; +TAssoc_array TGiornalemag::_cau_magazzino; int TGiornalemag::_annoes; // STAMPA giornale @@ -476,7 +548,6 @@ class TStampa_giornalemag : public TSkeleton_application TGiornalemag * _giorn_mag; // to be moved into TPrint_application TCursor * _cur; - static bool livgiac_handler(TMask_field &, KEY); protected: virtual bool create(); virtual bool destroy(); diff --git a/mg/mg4300.frm b/mg/mg4300.frm index ea287d902..7754e1a9c 100755 --- a/mg/mg4300.frm +++ b/mg/mg4300.frm @@ -1,8 +1,6 @@ #include "mg4300.h" USE LF_RMOVMAG BY CRONO_FIELD FISC_FIELD JOIN LF_MOVMAG INTO NUMREG==NUMREG -JOIN %CAU TO LF_MOVMAG ALIAS ALIAS_CAUSALI INTO CODTAB==CODCAUS -JOIN %CAU TO LF_RMOVMAG ALIAS ALIAS_CAUSALIR INTO CODTAB==CAUS JOIN LF_ANAMAG TO LF_RMOVMAG INTO CODART==CODART JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS ALIAS_UMRMOV INTO CODART==CODART UM==UM @@ -112,8 +110,8 @@ SECTION BODY ODD 2 BEGIN PROMPT 10 1 "" MESSAGE COPY,FF_INFOCAUS - FIELD ALIAS_CAUSALIR@->CODTAB - FIELD ALIAS_CAUSALI@->CODTAB + FIELD CAUS + FIELD LF_MOVMAG->CODCAUS END STRINGA 102 12 BEGIN diff --git a/mg/mg4300.h b/mg/mg4300.h index cd0d01f69..c1a811850 100755 --- a/mg/mg4300.h +++ b/mg/mg4300.h @@ -23,8 +23,6 @@ #define G_DESART 3 #define G_PARAMVALORI 4 -#define ALIAS_CAUSALI 500 -#define ALIAS_CAUSALIR 501 #define ALIAS_UMRMOV 502 #define FF_CODTOT 601 diff --git a/mg/mglib.h b/mg/mglib.h index f73dfc69d..d4962c809 100755 --- a/mg/mglib.h +++ b/mg/mglib.h @@ -147,6 +147,7 @@ protected: void reset_anno_mag () { set_anno_mag();} void reset_anno_sto () { set_anno_sto();} bool is_last_esercizio(const char* annoes) const; + bool is_deletable(const TRectype& mag) const; void copia_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag); void add_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag, const real & qta, const real & prz); diff --git a/mg/mglib02.cpp b/mg/mglib02.cpp index f2ad05b49..6c1e2c944 100755 --- a/mg/mglib02.cpp +++ b/mg/mglib02.cpp @@ -568,31 +568,58 @@ bool TArticolo_giacenza::is_last_esercizio(const char* annoes) const return yes; } + +const char* const zero_fields[] = +{ + MAG_GIAC, MAG_PRODFIN, MAG_INCL, MAG_ACL, MAG_NLABEL, + MAG_RIM, MAG_VALRIM, MAG_ACQ, MAG_VALACQ, MAG_ENT, MAG_VALENT, + MAG_VEN, MAG_VALVEN, MAG_USC, MAG_VALUSC, MAG_ORDF, MAG_VALORDF, + MAG_ORDC, MAG_VALORDC, MAG_SCARTI, MAG_VALSCARTI, MAG_PRODCOMP, + "USER1", "USERVAL1", "USER2", "USERVAL2", "USER3", "USERVAL3", + "USER4", "USERVAL4", "USER5", "USERVAL5", "USER6", "USERVAL6", + NULL +}; + +const char* const protected_fields[] = +{ + MAG_UBICAZ, MAG_LIVRIOR, MAG_SCORTAMIN, MAG_LOTTORIOR, MAG_LOTTOIRIOR, MAG_GIORNIRIOR, NULL +}; + +bool TArticolo_giacenza::is_deletable(const TRectype& mag) const +{ + int i; + for (i = 0; protected_fields[i]; i++) + { + const TString& val = mag.get(protected_fields[i]); + if (val.not_empty() && !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)) + return false; + } + return true; +} + bool TArticolo_giacenza::azzera_saldi(const char* cod_es, bool save_to_disk) { TRecord_array& rec_arr = TArticolo_giacenza::mag(cod_es); const int last = rec_arr.last_row(); - for (int r = last;r > 0 ; r = rec_arr.pred_row(r)) // Scorre le righe + for (int r = last; r > 0; r = rec_arr.pred_row(r)) // Scorre le righe { TRectype& mag = rec_arr[r]; - - mag.put(MAG_GIAC,0); - mag.put(MAG_RIM,0);mag.put(MAG_VALRIM,0); - mag.put(MAG_ACQ,0);mag.put(MAG_VALACQ,0); - mag.put(MAG_ENT,0);mag.put(MAG_VALENT,0); - mag.put(MAG_VEN,0);mag.put(MAG_VALVEN,0); - mag.put(MAG_USC,0);mag.put(MAG_VALUSC,0); - mag.put(MAG_ORDF,0);mag.put(MAG_VALORDF,0); - mag.put(MAG_ORDC,0);mag.put(MAG_VALORDC,0); - mag.put(MAG_SCARTI,0);mag.put(MAG_VALSCARTI,0); - mag.put(MAG_PRODCOMP,0); - mag.put(MAG_PRODFIN,0); - mag.put(MAG_INCL,0); - mag.put(MAG_ACL,0); - mag.put(MAG_NLABEL,0); + for (int i = 0; zero_fields[i]; i++) + mag.zero(zero_fields[i]); + if (is_deletable(mag)) + rec_arr.destroy_row(r, TRUE); } - return save_to_disk ? (rec_arr.write(TRUE) == NOERR) : TRUE; + bool ok = TRUE; + if (save_to_disk) + ok = rec_arr.write(TRUE) == NOERR; + return ok; } bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, const TTipo_valorizz tipo, @@ -602,7 +629,7 @@ bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, co TRecord_array& rec_arr = TArticolo_giacenza::mag(oldes); const int last = rec_arr.last_row(); real rim, val, giac, inpf, proc, icl, acl; - TCurrency currency(ZERO, "_FIRM"); + TCurrency currency(ZERO); rec_arr.renum_key(MAG_ANNOES, codes); // Rinumera for (int r = last;r > 0 ; r = rec_arr.pred_row(r)) // Scorre le righe @@ -681,6 +708,9 @@ bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, co rec.zero(MAG_ORDF); rec.zero(MAG_VALORDF); rec.zero(MAG_ORDC); rec.zero(MAG_VALORDC); } + + if (is_deletable(rec)) + rec_arr.destroy_row(r, TRUE); } // Per non perdere le modifiche in memoria, al fine di avere i saldi riportati correttamente @@ -688,11 +718,12 @@ bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, co // dell'esercizio newes if (!save_to_disk) { - TRecord_array copia(rec_arr); - TRecord_array& nuovo = TArticolo_giacenza::mag(codes); - + const TRecord_array copia(rec_arr); if (copia.rows() > 0) + { + TRecord_array& nuovo = TArticolo_giacenza::mag(codes); nuovo = copia; + } else azzera_saldi(codes, FALSE); }