From 79807cb1751bd70871ec63dbdd9b9414db9a2d2d Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 25 Jun 2007 15:39:02 +0000 Subject: [PATCH] Patch level : 4.0 Files correlati : batbgsa.msk mg0.exe Ricompilazione Demo : [ ] Commento : Migliorata gestione gruppi avanzati git-svn-id: svn://10.65.10.50/trunk@15447 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- mg/batbgsa.h | 6 +- mg/batbgsa.uml | 6 +- mg/mg0100.cpp | 253 ++++++++++++++++++++++++------------------------- mg/mg4200.cpp | 2 +- 4 files changed, 132 insertions(+), 135 deletions(-) diff --git a/mg/batbgsa.h b/mg/batbgsa.h index 27949761b..f518f2d16 100755 --- a/mg/batbgsa.h +++ b/mg/batbgsa.h @@ -2,9 +2,9 @@ #define F_CODLIV 101 #define F_DESLIV 102 #define F_FORMLIV 103 -#define F_ROOT 104 -#define F_CODGROUP 111 -#define F_DESGROUP 112 +#define F_CODGROUP 104 +#define F_DESGROUP 105 +#define F_ROOT 199 #define F_CHILD1 201 #define F_DESCR1 202 diff --git a/mg/batbgsa.uml b/mg/batbgsa.uml index 378d20235..43df846be 100755 --- a/mg/batbgsa.uml +++ b/mg/batbgsa.uml @@ -57,11 +57,11 @@ BEGIN KEY 1 USE GSA JOIN FSA ALIAS 500 INTO CODTAB==CODTAB[1,3] - INPUT CODTAB[1,3] F_CODLIV SELECT - INPUT CODTAB[4,24] F_CODGROUP + INPUT CODTAB[1,3] F_CODLIV SELECT + INPUT CODTAB[4,24] F_CODGROUP DISPLAY "Codice" CODTAB[1,3] DISPLAY "Parte@50 " 500@->S0 - DISPLAY "Gruppo@20" CODTAB[2,25] + DISPLAY "Gruppo@20" CODTAB[4,24] DISPLAY "Descrizione@50" S0 OUTPUT F_CODLIV CODTAB[1,3] OUTPUT F_CODGROUP CODTAB[4,24] diff --git a/mg/mg0100.cpp b/mg/mg0100.cpp index fd48b0400..f7dd31639 100755 --- a/mg/mg0100.cpp +++ b/mg/mg0100.cpp @@ -10,12 +10,31 @@ #include "mglib.h" #include "../ve/vetbmag.h" +// applicazione per la gestione delle tabelle di magazzino +class Tab_app_mag : public Tab_application +{ + +protected: // TRelation_application + virtual bool user_destroy() ; + virtual bool user_create() ; + virtual bool protected_record(TRectype& rec) ; + virtual int rewrite(const TMask& m); + + virtual TMask * set_mask(TMask * _m=NULL); + +public: + Tab_app_mag(); + virtual ~Tab_app_mag() {} +}; + +HIDDEN inline Tab_app_mag& app() { return (Tab_app_mag&)main_app(); } + + #define MAXMETACH 20 // maschere delle tabelle di magazzino class TMask_tabmag : public TMask { TCodice_livelli * cod_liv; - TTable *aux_tabf; TFile_cache *tab_cache; TMetachar * metach; @@ -27,74 +46,77 @@ class TMask_tabmag : public TMask static bool codlivart_handler(TMask_field &, KEY); // handler del numero formato articoli static bool codlivgiac_handler(TMask_field &, KEY); // handler del numero formato giacenze static bool codgrp_handler(TMask_field &, KEY); // handler del numero formato - + static bool adv_codgrp_handler(TMask_field& f, KEY k); // handler codice gruppo avanzato public: // @cmember Disabilita la verifica del modulo in chiave virtual bool check_autorization() const {return FALSE;} - TMask_tabmag(const char * ,const TString16 &); + TMask_tabmag(const char*, const TString&); virtual ~TMask_tabmag(); }; // costruttore della maschera -TMask_tabmag::TMask_tabmag(const char * _maskname,const TString16 &tabname): - TMask(_maskname) +TMask_tabmag::TMask_tabmag(const char * _maskname, const TString &tabname) + : TMask(_maskname) { - aux_tabf=NULL; - if (tabname == "MAG") // Magazzini + cod_liv = NULL; + + if (tabname == "MAG") // Magazzini + { + TMagazzini magazzini; + if (!magazzini.gestmultimag()) { - TMagazzini magazzini; - if (!magazzini.gestmultimag()) - { - set_handler(F_CODICE, singlemag_handler); - set_handler(F_MAGSTD, stdmag_handler); - //disable(F_MAGSTD); - } - if (!magazzini.gestdep()) - { - field(F_GESTGIA).reset(); - field(F_GESTGIA).disable(); - } + set_handler(F_CODICE, singlemag_handler); + set_handler(F_MAGSTD, stdmag_handler); + //disable(F_MAGSTD); } - else if (tabname == "%CAU") + if (!magazzini.gestdep()) { - if (!main_app().has_module(DBAUT)) - hide(F_DIBAEXPLOSION); - set_handler(F_SGNGIAC, sumsign_handler); - } - else if (tabname == "FCA") // FORMATO CODICE ARTICOLI - { - cod_liv=new TCodart_livelli; - aux_tabf = new TTable("FCA"); - metach= new TMetachar(""); - set_handler(F_FORMLIV, format_handler); - set_handler(F_CODLIV, codlivart_handler); - } - else if (tabname == "GCA") // GRUPPI CODICE ARTICOLI - { - cod_liv=new TCodart_livelli; - set_handler(F_CODGROUP, codgrp_handler); - } - else if (tabname == "FCG") // FORMATO CODICE GIACENZE - { - cod_liv = new TCodgiac_livelli; - metach = new TMetachar("") ; - aux_tabf = new TTable("FCG"); - set_handler(F_FORMLIV, formatgiac_handler); - set_handler(F_CODLIV, codlivgiac_handler); - } - else if (tabname == "GCG") // GRUPPI CODICE GIACENZE - { - cod_liv = new TCodgiac_livelli; - set_handler(F_CODGROUP, codgrp_handler); + field(F_GESTGIA).reset(); + field(F_GESTGIA).disable(); } + } else + if (tabname == "%CAU") + { + if (!main_app().has_module(DBAUT)) + hide(F_DIBAEXPLOSION); + set_handler(F_SGNGIAC, sumsign_handler); + } else + if (tabname == "FCA") // FORMATO CODICE ARTICOLI + { + cod_liv=new TCodart_livelli; + metach= new TMetachar(""); + set_handler(F_FORMLIV, format_handler); + set_handler(F_CODLIV, codlivart_handler); + } else + if (tabname == "GCA") // GRUPPI CODICE ARTICOLI + { + cod_liv=new TCodart_livelli; + set_handler(F_CODGROUP, codgrp_handler); + } else + if (tabname == "FCG") // FORMATO CODICE GIACENZE + { + cod_liv = new TCodgiac_livelli; + metach = new TMetachar("") ; + set_handler(F_FORMLIV, formatgiac_handler); + set_handler(F_CODLIV, codlivgiac_handler); + } else + if (tabname == "GCG") // GRUPPI CODICE GIACENZE + { + cod_liv = new TCodgiac_livelli; + set_handler(F_CODGROUP, codgrp_handler); + } else + if (tabname == "GSA") // GRUPPI CODICE AVANZATI + { + set_handler(F_CODGROUP, adv_codgrp_handler); + } } TMask_tabmag::~TMask_tabmag() { - if (aux_tabf!=NULL) - delete aux_tabf; + if (cod_liv!=NULL) + delete cod_liv; } // tabella magazzini: controllo codice @@ -168,14 +190,13 @@ bool TMask_tabmag::format_handler(TMask_field& f, KEY k) { TString s(f.get()); TMask_tabmag & mask=((TMask_tabmag &)f.mask()); - TTable * aux_tabf=mask.aux_tabf; + TTable aux_tabf(app().get_tabname()); s.strip_spaces(); f.set(s); - aux_tabf->zero(); - aux_tabf->put("CODTAB",mask.get_int(F_CODLIV)+1); - if (aux_tabf->read()==NOERR) + aux_tabf.put("CODTAB",mask.get_int(F_CODLIV)+1); + if (aux_tabf.read()==NOERR) { // non è l'ultimo livello: solo caratteri obbligatori if (mask.metach->has_opzchars(s)) @@ -198,20 +219,19 @@ bool TMask_tabmag::formatgiac_handler(TMask_field& f, KEY k) int total_len=0; TString s(f.get()); TMask_tabmag & mask=((TMask_tabmag &)f.mask()); - TTable * aux_tabf=mask.aux_tabf; + TTable aux_tabf(app().get_tabname()); s.strip_spaces(); f.set(s); mask.set(F_LENFORM,mask.metach->maxstrlen(s)); - aux_tabf->zero(); - aux_tabf->put("CODTAB",1); - if (aux_tabf->read()==NOERR) + aux_tabf.put("CODTAB",1); + if (aux_tabf.read()==NOERR) { do { - if (aux_tabf->get_int("CODTAB") != mask.get_int(F_CODLIV)) - total_len+=aux_tabf->get_int("I0"); - } while (aux_tabf->next()==NOERR); + if (aux_tabf.get_int("CODTAB") != mask.get_int(F_CODLIV)) + total_len+=aux_tabf.get_int("I0"); + } while (aux_tabf.next()==NOERR); } total_len+=mask.get_int(F_LENFORM); if (total_len > maxlen) @@ -229,56 +249,61 @@ bool TMask_tabmag::codlivart_handler(TMask_field& f, KEY k) { if (k == K_TAB && f.focusdirty()) { - TMask_tabmag & mask=((TMask_tabmag &)f.mask()); - TTable * aux_tabf=mask.aux_tabf; - int codliv=atoi((const char *)f.get()); - - if (codliv>1) + const int codliv=atoi(f.get()); + if (codliv>1) // Non è il primo codice { - aux_tabf->zero(); - aux_tabf->put("CODTAB",codliv-1); - if (aux_tabf->read()==NOERR) + TMask_tabmag & mask=((TMask_tabmag &)f.mask()); + TTable aux_tabf(app().get_tabname()); + aux_tabf.put("CODTAB",codliv-1); + if (aux_tabf.read()==NOERR) // esiste un precedente { - TString prevformat(aux_tabf->get("S1")); - aux_tabf->zero(); - aux_tabf->put("CODTAB",codliv+1); - if (aux_tabf->read()!=NOERR && mask.metach->has_opzchars(prevformat)) - { - f.error_box(TR("Il livello precedente include caratteri opzionali nel formato\ne non puo' divenire un livello intermedio")); - return FALSE; - } - } else { - f.error_box(TR("Non si possono inserire salti nel livello del codice")); - return FALSE; - } + TString prevformat(aux_tabf.get("S1")); + aux_tabf.put("CODTAB",codliv+1); + if (aux_tabf.read()!=NOERR && mask.metach->has_opzchars(prevformat)) + return f.error_box(TR("Il livello precedente include caratteri opzionali nel formato\ne non puo' divenire un livello intermedio")); + } + else + return f.error_box(TR("Non si possono inserire salti nel livello del codice")); } } return TRUE; } +// HANDLER DEL CODICE GRUPPO AVANZATO +bool TMask_tabmag::adv_codgrp_handler(TMask_field& f, KEY k) +{ + if (k == K_TAB && f.focusdirty()) + { + TMask& m = f.mask(); + if (m.query_mode()) + { + const int desc_pos = m.id2pos(f.dlg()) + 1; + TMask_field& desc = m.fld(desc_pos); + if (desc.empty()) // Copia il codice nella descrizione se necessario + desc.set(f.get()); + } + } + return true; +} // HANDLER DEL CODICE LIVELLO bool TMask_tabmag::codlivgiac_handler(TMask_field& f, KEY k) { if (k == K_TAB && f.focusdirty()) { - TMask_tabmag & mask=((TMask_tabmag &)f.mask()); - TTable * aux_tabf=mask.aux_tabf; - int codliv=atoi((const char *)f.get()); - + const int codliv = atoi(f.get()); if (codliv>1) // Non è il primo codice { - aux_tabf->zero(); - aux_tabf->put("CODTAB",codliv-1); - if (aux_tabf->read()!=NOERR) + TMask_tabmag & mask=((TMask_tabmag &)f.mask()); + TTable aux_tabf(app().get_tabname()); + + aux_tabf.put("CODTAB",codliv-1); + if (aux_tabf.read()!=NOERR) // non esiste un precedente - { - f.error_box(TR("Non si possono inserire salti nel livello del codice")); - return FALSE; - } + return f.error_box(TR("Non si possono inserire salti nel livello del codice")); } } return TRUE; @@ -291,44 +316,15 @@ bool TMask_tabmag::codgrp_handler(TMask_field& f, KEY k) if ((k == K_TAB && f.focusdirty() )||k == K_ENTER ) { TMask_tabmag & mask=((TMask_tabmag &)f.mask()); - if (!mask.cod_liv->enabled()) - { - f.error_box(TR("Livelli del codice non abilitati")); - return FALSE; - } + return f.error_box(TR("Livelli del codice non abilitati")); if (!f.empty() && !(mask.cod_liv->fit_to_format(f.get(),mask.get_int(F_CODLIV)))) - { - f.error_box(TR("Codice non corrispondente al formato previsto")); - return FALSE; - } + return f.error_box(TR("Codice non corrispondente al formato previsto")); } return TRUE; } - - - -// applicazione per la gestione delle tabelle di magazzino -class Tab_app_mag : public Tab_application -{ - -protected: // TRelation_application - virtual bool user_destroy() ; - virtual bool user_create() ; - virtual bool protected_record(TRectype& rec) ; - virtual int rewrite(const TMask& m); - - virtual TMask * set_mask(TMask * _m=NULL); - -public: - Tab_app_mag(); - virtual ~Tab_app_mag() {} -}; - - -HIDDEN inline Tab_app_mag& app() { return (Tab_app_mag&)main_app(); } // costruttore Tab_app_mag::Tab_app_mag() {} @@ -356,10 +352,11 @@ TMask * Tab_app_mag::set_mask(TMask * _m) { if (_m != NULL) return Tab_application::set_mask(_m); - else { - TFixed_string tabname(get_tabname()); - TString maskname; - return Tab_application::set_mask(new TMask_tabmag((const char *)get_mask_name(maskname),tabname)); + else + { + const TString& tabname = get_tabname(); + TString maskname; get_mask_name(maskname); + return Tab_application::set_mask(new TMask_tabmag(maskname, tabname)); } } diff --git a/mg/mg4200.cpp b/mg/mg4200.cpp index d438c5120..fd86fa4f6 100755 --- a/mg/mg4200.cpp +++ b/mg/mg4200.cpp @@ -206,7 +206,7 @@ bool TForm_inventario::valorizzazione(TForm_item &cf, TTipo_valorizz t) break; } - const TCurrency valore(p * giac_corretta); + const TCurrency valore(real(p * giac_corretta)); cf.set(valore.get_num().string()); return true;