diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index 28de2af7f..5cdfc9041 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -40,12 +40,12 @@ class TMask_anamag: public TMask { void clear_info_sto(); bool info_sto_dirty(); - void ricalcola_giacenze(TString newum,real fc); int add_totali_storico(TString &codmag); bool remove_totali_storico(TString & codmag); void update_totali_storico(TString & codmag); bool check_totali_storico(); public: + void ricalcola_giacenze(); TString16 um_principale; TEsercizi_contabili esercizi_contabili; @@ -312,9 +312,14 @@ bool TMask_anamag::handle_stoanno(TMask_field &fld, KEY k) { TSheet_field &fld_stomag= (TSheet_field &)fld.mask().field(F_SHEETSTOMAG); + if (mask.get_int(F_STOANNO) >=mask.esercizi_contabili.last()) + { + fld.error_box("Impossibile dare la composizione delle rimanenze per l'ultimo anno"); + mask.reset(F_STOANNO); + } if (mask.get(F_STOANNO).empty() ) { - mask.set(F_STOANNORIF, mask.esercizi_contabili.pred(mask.get_int(F_ANNORIF)) ); + mask.set(F_STOANNORIF, max(mask.esercizi_contabili.first(),mask.esercizi_contabili.pred(mask.get_int(F_ANNORIF))) ); mask.set(F_STOANNO, mask.get(F_STOANNORIF)); } if ( fld.focusdirty() && mask.last_annosto>0 && mask.last_annosto!=fld.mask().get_int(F_STOANNO)) @@ -349,6 +354,8 @@ bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k) TMask_anamag & m= (TMask_anamag &)(fld.mask()); if (k == K_ENTER) { + if (*f.cell(0,f.cid2index(FS_CODUM))==' ') + return error_box("La prima unità di misura deve essere specificata"); const int items = f.items(); if (items > 0) { @@ -363,20 +370,17 @@ bool TMask_anamag::handle_sheet_um(TMask_field &fld, KEY k) if (v.add(um)) return error_box("Le unità di misura devono essere diverse tra loro"); } - if (!m.um_principale.blank() && m.um_principale!=f.cell(0,f.cid2index(FS_CODUM))) { - for (int i= 0; i=f.items()) { - return error_box("L'unità di misura %s deve essere presente in tabella",(const char *)m.um_principale); - } else { - m.um_principale=f.cell(0,f.cid2index(FS_CODUM)); - } - m.ricalcola_giacenze(f.cell(0,f.cid2index(FS_CODUM)),f.cell(i,f.cid2index(FS_FCUM))); - } } + if (!m.um_principale.blank() && m.um_principale!=f.cell(0,f.cid2index(FS_CODUM))) { + for (int i= 0; i=f.items()) { + return error_box("L'unità di misura '%s' deve essere presente in tabella",(const char *)m.um_principale); + } + } } else if (k==K_TAB) { } else if (k==K_SPACE) { m.um_principale=f.cell(0,f.cid2index(FS_CODUM)); @@ -828,10 +832,13 @@ bool TMask_anamag::handle_sheet_um_um(TMask_field &fld, KEY k) x = 1.00; m.set(FS_FCUM, x); // il risultato viene scritto nel campo del fattore di conversione } else { - // prima unità di misura - f->mask().set(F_UMPRINCIPALE,curr_um); - f->mask().set(F_UMPRINCIPALE2,curr_um); - } + TString & um_p=((TMask_anamag &)f->mask()).um_principale; + if (um_p.blank()) { + f->mask().set(F_UMPRINCIPALE,curr_um); + f->mask().set(F_UMPRINCIPALE2,curr_um); + um_p=curr_um; + } + } } } return TRUE; @@ -903,10 +910,74 @@ void TMask_anamag::sheetgiac_put(TSheet_field &fld_righe, int item) } } -// aggiorna il valore delle giacenze del fattore indicato -void TMask_anamag:: ricalcola_giacenze(TString newum, real fc) +// Aggiorna il valore delle giacenze in base al cambiamento dell'unità di misura principale +void TMask_anamag::ricalcola_giacenze() { - + real fc(1.0); + TSheet_field & f=(TSheet_field &)field(F_SHEETUM); + if (!um_principale.blank() && um_principale!=f.cell(0,f.cid2index(FS_CODUM))) { + for (int i= 0; i