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:
parent
3bb185d781
commit
79807cb175
@ -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
|
||||||
|
@ -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]
|
||||||
|
253
mg/mg0100.cpp
253
mg/mg0100.cpp
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user