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
This commit is contained in:
guy 2007-06-25 15:39:02 +00:00
parent 3bb185d781
commit 79807cb175
4 changed files with 132 additions and 135 deletions

View File

@ -2,9 +2,9 @@
#define F_CODLIV 101 #define F_CODLIV 101
#define F_DESLIV 102 #define F_DESLIV 102
#define F_FORMLIV 103 #define F_FORMLIV 103
#define F_ROOT 104 #define F_CODGROUP 104
#define F_CODGROUP 111 #define F_DESGROUP 105
#define F_DESGROUP 112 #define F_ROOT 199
#define F_CHILD1 201 #define F_CHILD1 201
#define F_DESCR1 202 #define F_DESCR1 202

View File

@ -57,11 +57,11 @@ BEGIN
KEY 1 KEY 1
USE GSA USE GSA
JOIN FSA ALIAS 500 INTO CODTAB==CODTAB[1,3] JOIN FSA ALIAS 500 INTO CODTAB==CODTAB[1,3]
INPUT CODTAB[1,3] F_CODLIV SELECT INPUT CODTAB[1,3] F_CODLIV SELECT
INPUT CODTAB[4,24] F_CODGROUP INPUT CODTAB[4,24] F_CODGROUP
DISPLAY "Codice" CODTAB[1,3] DISPLAY "Codice" CODTAB[1,3]
DISPLAY "Parte@50 " 500@->S0 DISPLAY "Parte@50 " 500@->S0
DISPLAY "Gruppo@20" CODTAB[2,25] DISPLAY "Gruppo@20" CODTAB[4,24]
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CODLIV CODTAB[1,3] OUTPUT F_CODLIV CODTAB[1,3]
OUTPUT F_CODGROUP CODTAB[4,24] OUTPUT F_CODGROUP CODTAB[4,24]

View File

@ -10,12 +10,31 @@
#include "mglib.h" #include "mglib.h"
#include "../ve/vetbmag.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 #define MAXMETACH 20
// maschere delle tabelle di magazzino // maschere delle tabelle di magazzino
class TMask_tabmag : public TMask class TMask_tabmag : public TMask
{ {
TCodice_livelli * cod_liv; TCodice_livelli * cod_liv;
TTable *aux_tabf;
TFile_cache *tab_cache; TFile_cache *tab_cache;
TMetachar * metach; 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 codlivart_handler(TMask_field &, KEY); // handler del numero formato articoli
static bool codlivgiac_handler(TMask_field &, KEY); // handler del numero formato giacenze 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 codgrp_handler(TMask_field &, KEY); // handler del numero formato
static bool adv_codgrp_handler(TMask_field& f, KEY k); // handler codice gruppo avanzato
public: public:
// @cmember Disabilita la verifica del modulo in chiave // @cmember Disabilita la verifica del modulo in chiave
virtual bool check_autorization() const virtual bool check_autorization() const
{return FALSE;} {return FALSE;}
TMask_tabmag(const char * ,const TString16 &); TMask_tabmag(const char*, const TString&);
virtual ~TMask_tabmag(); virtual ~TMask_tabmag();
}; };
// costruttore della maschera // costruttore della maschera
TMask_tabmag::TMask_tabmag(const char * _maskname,const TString16 &tabname): TMask_tabmag::TMask_tabmag(const char * _maskname, const TString &tabname)
TMask(_maskname) : TMask(_maskname)
{ {
aux_tabf=NULL; cod_liv = NULL;
if (tabname == "MAG") // Magazzini
if (tabname == "MAG") // Magazzini
{
TMagazzini magazzini;
if (!magazzini.gestmultimag())
{ {
TMagazzini magazzini; set_handler(F_CODICE, singlemag_handler);
if (!magazzini.gestmultimag()) set_handler(F_MAGSTD, stdmag_handler);
{ //disable(F_MAGSTD);
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();
}
} }
else if (tabname == "%CAU") if (!magazzini.gestdep())
{ {
if (!main_app().has_module(DBAUT)) field(F_GESTGIA).reset();
hide(F_DIBAEXPLOSION); field(F_GESTGIA).disable();
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);
} }
} 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() TMask_tabmag::~TMask_tabmag()
{ {
if (aux_tabf!=NULL) if (cod_liv!=NULL)
delete aux_tabf; delete cod_liv;
} }
// tabella magazzini: controllo codice // tabella magazzini: controllo codice
@ -168,14 +190,13 @@ bool TMask_tabmag::format_handler(TMask_field& f, KEY k)
{ {
TString s(f.get()); TString s(f.get());
TMask_tabmag & mask=((TMask_tabmag &)f.mask()); TMask_tabmag & mask=((TMask_tabmag &)f.mask());
TTable * aux_tabf=mask.aux_tabf; TTable aux_tabf(app().get_tabname());
s.strip_spaces(); s.strip_spaces();
f.set(s); f.set(s);
aux_tabf->zero(); aux_tabf.put("CODTAB",mask.get_int(F_CODLIV)+1);
aux_tabf->put("CODTAB",mask.get_int(F_CODLIV)+1); if (aux_tabf.read()==NOERR)
if (aux_tabf->read()==NOERR)
{ {
// non è l'ultimo livello: solo caratteri obbligatori // non è l'ultimo livello: solo caratteri obbligatori
if (mask.metach->has_opzchars(s)) if (mask.metach->has_opzchars(s))
@ -198,20 +219,19 @@ bool TMask_tabmag::formatgiac_handler(TMask_field& f, KEY k)
int total_len=0; int total_len=0;
TString s(f.get()); TString s(f.get());
TMask_tabmag & mask=((TMask_tabmag &)f.mask()); TMask_tabmag & mask=((TMask_tabmag &)f.mask());
TTable * aux_tabf=mask.aux_tabf; TTable aux_tabf(app().get_tabname());
s.strip_spaces(); s.strip_spaces();
f.set(s); f.set(s);
mask.set(F_LENFORM,mask.metach->maxstrlen(s)); mask.set(F_LENFORM,mask.metach->maxstrlen(s));
aux_tabf->zero(); aux_tabf.put("CODTAB",1);
aux_tabf->put("CODTAB",1); if (aux_tabf.read()==NOERR)
if (aux_tabf->read()==NOERR)
{ {
do { do {
if (aux_tabf->get_int("CODTAB") != mask.get_int(F_CODLIV)) if (aux_tabf.get_int("CODTAB") != mask.get_int(F_CODLIV))
total_len+=aux_tabf->get_int("I0"); total_len+=aux_tabf.get_int("I0");
} while (aux_tabf->next()==NOERR); } while (aux_tabf.next()==NOERR);
} }
total_len+=mask.get_int(F_LENFORM); total_len+=mask.get_int(F_LENFORM);
if (total_len > maxlen) if (total_len > maxlen)
@ -229,56 +249,61 @@ bool TMask_tabmag::codlivart_handler(TMask_field& f, KEY k)
{ {
if (k == K_TAB && f.focusdirty()) if (k == K_TAB && f.focusdirty())
{ {
TMask_tabmag & mask=((TMask_tabmag &)f.mask()); const int codliv=atoi(f.get());
TTable * aux_tabf=mask.aux_tabf; if (codliv>1)
int codliv=atoi((const char *)f.get());
if (codliv>1)
// Non è il primo codice // Non è il primo codice
{ {
aux_tabf->zero(); TMask_tabmag & mask=((TMask_tabmag &)f.mask());
aux_tabf->put("CODTAB",codliv-1); TTable aux_tabf(app().get_tabname());
if (aux_tabf->read()==NOERR) aux_tabf.put("CODTAB",codliv-1);
if (aux_tabf.read()==NOERR)
// esiste un precedente // esiste un precedente
{ {
TString prevformat(aux_tabf->get("S1")); TString prevformat(aux_tabf.get("S1"));
aux_tabf->zero(); aux_tabf.put("CODTAB",codliv+1);
aux_tabf->put("CODTAB",codliv+1); if (aux_tabf.read()!=NOERR && mask.metach->has_opzchars(prevformat))
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"));
{ }
f.error_box(TR("Il livello precedente include caratteri opzionali nel formato\ne non puo' divenire un livello intermedio")); else
return FALSE; return f.error_box(TR("Non si possono inserire salti nel livello del codice"));
}
} else {
f.error_box(TR("Non si possono inserire salti nel livello del codice"));
return FALSE;
}
} }
} }
return TRUE; 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 // HANDLER DEL CODICE LIVELLO
bool TMask_tabmag::codlivgiac_handler(TMask_field& f, KEY k) bool TMask_tabmag::codlivgiac_handler(TMask_field& f, KEY k)
{ {
if (k == K_TAB && f.focusdirty()) if (k == K_TAB && f.focusdirty())
{ {
TMask_tabmag & mask=((TMask_tabmag &)f.mask()); const int codliv = atoi(f.get());
TTable * aux_tabf=mask.aux_tabf;
int codliv=atoi((const char *)f.get());
if (codliv>1) if (codliv>1)
// Non è il primo codice // Non è il primo codice
{ {
aux_tabf->zero(); TMask_tabmag & mask=((TMask_tabmag &)f.mask());
aux_tabf->put("CODTAB",codliv-1); TTable aux_tabf(app().get_tabname());
if (aux_tabf->read()!=NOERR)
aux_tabf.put("CODTAB",codliv-1);
if (aux_tabf.read()!=NOERR)
// non esiste un precedente // non esiste un precedente
{ return f.error_box(TR("Non si possono inserire salti nel livello del codice"));
f.error_box(TR("Non si possono inserire salti nel livello del codice"));
return FALSE;
}
} }
} }
return TRUE; 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 ) if ((k == K_TAB && f.focusdirty() )||k == K_ENTER )
{ {
TMask_tabmag & mask=((TMask_tabmag &)f.mask()); TMask_tabmag & mask=((TMask_tabmag &)f.mask());
if (!mask.cod_liv->enabled()) if (!mask.cod_liv->enabled())
{ return f.error_box(TR("Livelli del codice non abilitati"));
f.error_box(TR("Livelli del codice non abilitati"));
return FALSE;
}
if (!f.empty() && !(mask.cod_liv->fit_to_format(f.get(),mask.get_int(F_CODLIV)))) if (!f.empty() && !(mask.cod_liv->fit_to_format(f.get(),mask.get_int(F_CODLIV))))
{ return f.error_box(TR("Codice non corrispondente al formato previsto"));
f.error_box(TR("Codice non corrispondente al formato previsto"));
return FALSE;
}
} }
return TRUE; 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 // costruttore
Tab_app_mag::Tab_app_mag() {} Tab_app_mag::Tab_app_mag() {}
@ -356,10 +352,11 @@ TMask * Tab_app_mag::set_mask(TMask * _m)
{ {
if (_m != NULL) if (_m != NULL)
return Tab_application::set_mask(_m); return Tab_application::set_mask(_m);
else { else
TFixed_string tabname(get_tabname()); {
TString maskname; const TString& tabname = get_tabname();
return Tab_application::set_mask(new TMask_tabmag((const char *)get_mask_name(maskname),tabname)); TString maskname; get_mask_name(maskname);
return Tab_application::set_mask(new TMask_tabmag(maskname, tabname));
} }
} }

View File

@ -206,7 +206,7 @@ bool TForm_inventario::valorizzazione(TForm_item &cf, TTipo_valorizz t)
break; break;
} }
const TCurrency valore(p * giac_corretta); const TCurrency valore(real(p * giac_corretta));
cf.set(valore.get_num().string()); cf.set(valore.get_num().string());
return true; return true;