diff --git a/mg/mg0100.cpp b/mg/mg0100.cpp index b66c6eb20..3b6019058 100755 --- a/mg/mg0100.cpp +++ b/mg/mg0100.cpp @@ -299,6 +299,7 @@ bool TMask_tabmag::adv_codgrp_handler(TMask_field& f, KEY k) { TString newcod(m.get(F_CODLIV)); const int prlen = newcod.len(); + const bool autonumalfa = cache().get("FSA", newcod).get_bool("B1"); newcod << ((TEditable_field&)f).get_window_data(); @@ -306,7 +307,7 @@ bool TMask_tabmag::adv_codgrp_handler(TMask_field& f, KEY k) const int len = cod.len(); TTable gsa("GSA"); - cod << "999999"; + cod << (autonumalfa ? "ZZZZZZ" : "999999"); gsa.put("CODTAB", cod); if (gsa.read(_isgteq) != _isemptyfile) { @@ -319,11 +320,39 @@ bool TMask_tabmag::adv_codgrp_handler(TMask_field& f, KEY k) } if (newcod == code.left(len)) { - const int progr = atol(code.mid(len)) + 1; - TString fmt; - fmt.format("%%s%%0%dld", code.len() - len); - newcod.ltrim(prlen); - newcod.format(fmt, (const char *)newcod, progr); + if (autonumalfa) + { + + newcod = code; + newcod.ltrim(prlen); + + int add = 1; + int lastpos = newcod.len() - 1; + + while (lastpos >= 0) + { + newcod[lastpos] += add; + if (newcod[lastpos] > '9' && newcod[lastpos] < 'A') + { + newcod[lastpos] = 'A'; + break; + } + else + if (newcod[lastpos] > 'Z') + newcod[lastpos--] = '0'; + else + break; + } + } + else + { + const int progr = atol(code.mid(len)) + 1; + TString fmt; + + fmt.format("%%s%%0%dld", code.len() - len); + newcod.ltrim(prlen); + newcod.format(fmt, (const char *)newcod, progr); + } f.set(newcod); m.stop_run(K_INS); } diff --git a/mg/mgtbfsa.h b/mg/mgtbfsa.h index 25712efd1..76415b326 100755 --- a/mg/mgtbfsa.h +++ b/mg/mgtbfsa.h @@ -1,6 +1,7 @@ -#define F_CODLIV 101 -#define F_ROOT 102 -#define F_DESLIV 103 -#define F_FORMLIV 104 +#define F_CODLIV 101 +#define F_ROOT 102 +#define F_DESLIV 103 +#define F_FORMLIV 104 +#define F_AUTOALFA 105 diff --git a/mg/mgtbfsa.uml b/mg/mgtbfsa.uml index 759614c87..491ceb868 100755 --- a/mg/mgtbfsa.uml +++ b/mg/mgtbfsa.uml @@ -9,7 +9,7 @@ ENDPAGE PAGE "Formato Sottocodice Articoli" 0 0 0 0 -GROUPBOX DLG_NULL 78 7 +GROUPBOX DLG_NULL 78 9 BEGIN PROMPT 1 1 "Sottocodici Articolo" FLAGS "R" @@ -61,6 +61,12 @@ BEGIN CHECKTYPE REQUIRED END +BOOLEAN F_AUTOALFA +BEGIN + PROMPT 2 7 "Auto numerazione alfabetica" + FIELD B1 +END + ENDPAGE ENDMASK \ No newline at end of file diff --git a/ve/ve2400.cpp b/ve/ve2400.cpp index f96192a94..61ef0f371 100755 --- a/ve/ve2400.cpp +++ b/ve/ve2400.cpp @@ -1035,15 +1035,16 @@ bool TMask_anamag::handle_sheet_cod(TMask_field &fld, KEY k) TMask &m= fld.mask(); // prende la maschere d'origine del campo TAssoc_array v; // istanzia l'hash table per il controllo di univocità - TString80 codart = m.get(F_CODART); - v.add(codart); // aggiunge all'hash table il codice articolo originale + TString80 codart; for (int i= 0; i< items; i++) { codart = f.cell(i,0); if (codart.blank()) return error_box("I codici alternativi non possono essere vuoti"); - if (v.add(codart)) + if (codart == m.get(F_CODART)) return error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già + if (v.add(codart) && !yesno_box("I codici alternativi devono essere diversi tra loro, si desidera continuare ?")) + return false; // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già } } } @@ -1107,7 +1108,7 @@ bool TMask_anamag::notify_sheet_cod(TSheet_field & s, int r, KEY k) if (codcorr.read(_isgteq) == NOERR && codcorr.get(CODCORR_CODARTALT) == codice) { if (codcorr.get(CODCORR_CODART) != codart) - return s.error_box("Il codice %s è già un codice corrispondente", (const char *) codice); + return s.yesno_box("Il codice %s è già un codice corrispondente", (const char *) codice); } }