diff --git a/mg/mg0100.cpp b/mg/mg0100.cpp index beec74975..b66c6eb20 100755 --- a/mg/mg0100.cpp +++ b/mg/mg0100.cpp @@ -9,6 +9,7 @@ #include "mgtbcau.h" #include "mgtbfca.h" +#include "mgtbgsa.h" // applicazione per la gestione delle tabelle di magazzino @@ -20,6 +21,7 @@ protected: // TRelation_application virtual bool user_create() ; virtual bool protected_record(TRectype& rec) ; virtual int rewrite(const TMask& m); + virtual void init_query_mode(TMask& m); virtual TMask * set_mask(TMask * _m=NULL); @@ -288,7 +290,47 @@ bool TMask_tabmag::adv_codgrp_handler(TMask_field& f, KEY k) desc.set(f.get()); } } - return true; + else + if (k == K_F8) + { + TMask& m = f.mask(); + + if (m.query_mode()) + { + TString newcod(m.get(F_CODLIV)); + const int prlen = newcod.len(); + + newcod << ((TEditable_field&)f).get_window_data(); + + TString cod(newcod); + const int len = cod.len(); + TTable gsa("GSA"); + + cod << "999999"; + gsa.put("CODTAB", cod); + if (gsa.read(_isgteq) != _isemptyfile) + { + TString code = gsa.get("CODTAB"); + + if (cod < code.left(len) || (newcod == code.left(len) && !isdigit(code[len]))) + { + gsa.prev(); + code = gsa.get("CODTAB"); + } + 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); + f.set(newcod); + m.stop_run(K_INS); + } + } + } + } + return true; } // HANDLER DEL CODICE LIVELLO @@ -395,6 +437,13 @@ int Tab_app_mag::rewrite(const TMask& m) return Tab_application::rewrite(m); } +void Tab_app_mag::init_query_mode(TMask& m) +{ + TTable_application::init_query_mode(m); + + if (get_tabname() == "GSA" && argc() > 3) + m.set(F_CODLIV, argv(3)); +} int mg0100(int argc, char* argv[]) {