Modifiche a gestione sconti, contratti, offerte, listini. Aggiunte stampe.

git-svn-id: svn://10.65.10.50/trunk@1890 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
gianluca 1995-09-25 15:36:30 +00:00
parent f0b8ff7b65
commit 4fe9b183f5
13 changed files with 1421 additions and 688 deletions

27
ve/ve1.url Executable file
View File

@ -0,0 +1,27 @@
#include <default.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
ITEM BAR_ITEM(1) "~Parametri"

View File

@ -4,6 +4,9 @@
#include "ve2100.h" #include "ve2100.h"
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); }
class TTabelle_sconti: public TRelation_application { class TTabelle_sconti: public TRelation_application {
@ -11,8 +14,6 @@ class TTabelle_sconti: public TRelation_application {
TRelation *_rel; // relazione principale TRelation *_rel; // relazione principale
char _sconti; // carattere che indica il tipo di tabella char _sconti; // carattere che indica il tipo di tabella
short _sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
bool _sci_k_enabled[4]; // vettore di abilitazione dei campi chiave per la maschera degli sconti incondizionati
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
@ -20,8 +21,6 @@ class TTabelle_sconti: public TRelation_application {
virtual bool changing_mask(int) { return FALSE; } virtual bool changing_mask(int) { return FALSE; }
virtual TRelation *get_relation() const { return _rel; } virtual TRelation *get_relation() const { return _rel; }
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public: public:
TTabelle_sconti() {} TTabelle_sconti() {}
virtual ~TTabelle_sconti() {} virtual ~TTabelle_sconti() {}
@ -31,6 +30,8 @@ public:
bool TTabelle_sconti::user_create() { bool TTabelle_sconti::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione bool gotcha= FALSE; // booleano di avvenuta inizializzazione
short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
int i; // indice di ciclo
_sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella _sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella
if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando
@ -38,38 +39,36 @@ bool TTabelle_sconti::user_create() {
TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella
if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera
} }
TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta
switch (_sconti) { switch (_sconti) {
case 'D': { // sconti documento case 'D': // sconti documento
_msk= new TMask("VE2100D"); // apre la maschera relativa _msk= new TMask("VE2100D"); // apre la maschera relativa
gotcha= TRUE; gotcha= TRUE;
break; break;
} case 'R': // sconti di riga
case 'R': { // sconti di riga
_msk= new TMask("VE2100R"); // apre la maschera relativa _msk= new TMask("VE2100R"); // apre la maschera relativa
set_search_field(F_R_RICERCA); // setta il campo di ricerca set_search_field(F_R_RICERCA); // setta il campo di ricerca
gotcha= TRUE; gotcha= TRUE;
break; break;
} case 'I': // sconti incondizionati
case 'I': { // sconti incondizionati
_msk= new TMask("VE2100I"); // apre la maschera relativa _msk= new TMask("VE2100I"); // apre la maschera relativa
set_search_field(F_I_RICERCA); // setta il campo di ricerca set_search_field(F_I_RICERCA); // setta il campo di ricerca
TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente
_sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente sci_k_id[1]= F_I_SCCLIENTI;
_sci_k_id[1]= F_I_SCCLIENTI; sci_k_id[2]= F_I_ZONE;
_sci_k_id[2]= F_I_ZONE; sci_k_id[3]= F_I_CONDPAG;
_sci_k_id[3]= F_I_CONDPAG; for (i=0; i<4; i++) {
for (int i=0; i<4; i++) { if (prassid.get_bool("ScoKey", "ve", i)) { // se nel file di config. il campo è abilitato...
if (prassid.get("SCOKEY", "ve", i).empty()) _sci_k_enabled[i]= FALSE; // se nel file di config. il campo non è abilitato, viene indicato nel vettore di abilitazione REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera...
else _sci_k_enabled[i]= gotcha= TRUE; // se c'è almeno un campo abilitato "gotcha" esce TRUE dal ciclo gotcha= TRUE; // ...e viene settato il flag di ok
} else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera
} }
if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta"); if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
break; break;
} default: // messaggio di errore se si indica una tabella non valida
default: { // messaggio di errore se si indica una tabella non valida
error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza"); error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza");
break; break;
} }
}
if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file) if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file)
return (gotcha); return (gotcha);
} }
@ -80,17 +79,7 @@ bool TTabelle_sconti::user_destroy() {
return TRUE; return TRUE;
} }
void TTabelle_sconti::init_query_mode(TMask &m) {
for (int i=0; i<4; i++) {
if (_sci_k_enabled[i]) { // se il campo deve essere abilitato...
m.enable(_sci_k_id[i]); // ...lo abilita...
m.efield(_sci_k_id[i]).check_type(CHECK_REQUIRED); // ...e lo rende richiesto...
} else { // ...altrimenti...
m.disable(_sci_k_id[i]); // ...lo disabilita...
m.efield(_sci_k_id[i]).check_type(CHECK_NORMAL); // ...e lo rende non richiesto
}
}
}
int ve2100(int argc, char* argv[]) { int ve2100(int argc, char* argv[]) {
TTabelle_sconti a; TTabelle_sconti a;

View File

@ -8,8 +8,11 @@
#include "ve2200.h" #include "ve2200.h"
#include "ve2300x.h" // include anche il file dei campi della maschera delle righe #include "ve2300x.h" // include anche il file dei campi della maschera delle righe
#include "veconf.h"
#define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe #define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe
#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
@ -19,7 +22,8 @@ class TCondizioni_vendita: public TRelation_application {
TString16 _condven; // stringa che indica il tipo di archivio TString16 _condven; // stringa che indica il tipo di archivio
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
bool _catven_on; // booleano di abilitazione del campo CATVEN bool _codlis_catven; // booleano di abilitazione della categoria di vendita nella chiave dei listini
bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
@ -30,13 +34,11 @@ class TCondizioni_vendita: public TRelation_application {
static bool handle_mask(TMask &, KEY); // handler custom della maschera (per il tasto di aggancio alle righe) static bool handle_mask(TMask &, KEY); // handler custom della maschera (per il tasto di aggancio alle righe)
static bool handle_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio) static bool handle_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio)
static bool handle_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità) static bool handle_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
static bool handle_codlissucc(TMask_field &, KEY); // handler del campo CODLISSUCC (codice listino successivo) static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo)
static bool handle_seqric(TMask_field &, KEY); // handler del campo SEQRIC (sequenza di ricerca)
virtual int write(const TMask &); // metodo usato per scrivere il record sul file virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual bool remove(); // metodo usato per cancellare il record sul file
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public: public:
TCondizioni_vendita() {} TCondizioni_vendita() {}
@ -49,6 +51,8 @@ TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe
return (TCondizioni_vendita &)main_app(); return (TCondizioni_vendita &)main_app();
} }
bool TCondizioni_vendita::user_create() { bool TCondizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione bool gotcha= FALSE; // booleano di avvenuta inizializzazione
@ -60,41 +64,60 @@ bool TCondizioni_vendita::user_create() {
} }
_condven.upper(); // rende la stringa upper-case _condven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2200X"); _msk= new TMask("VE2200X");
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_condven[0]) { switch (_condven[0]) {
case 'L': { // listini case 'L': { // listini
// settaggio dei campi da eliminare if (!(prassid.get_bool("Ges", NULL, A_LISTINI))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
_tohide.set(F_C_COD); else {
_tohide.set(F_O_COD); // eliminazione campi di altri archivi
_tohide.set(F_C_TIPOCF); DESTROY(F_C_COD);
_tohide.set(F_C_CODCF); DESTROY(F_O_COD);
_tohide.set(F_C_OBBLIG); DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_OBBLIG);
set_search_field(F_L_COD); // impostazione del campo di ricerca set_search_field(F_L_COD); // impostazione del campo di ricerca
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente _msk->set_handler(F_LC_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
_catven_on= (prassid.get_bool("CODLISCV")); // setta il booleano di abilitazione di CATVEN _codlis_catven= prassid.get_bool("CodLisCV"); // setta il booleano di abilitazione delle categoria di vendita
_msk->set_handler(F_L_CODLISSUCC, handle_codlissucc); // setta l'handler per il campo di codice successivo if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita
_gest_um= prassid.get_bool("GesUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GesSca", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GesSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE; gotcha= TRUE;
}
break; break;
} }
case 'C': // contratti case 'C': // contratti
if (!(prassid.get_bool("Ges", NULL, A_CONTRATTI))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// settaggio dei campi da eliminare // settaggio dei campi da eliminare
_tohide.set(F_L_COD); DESTROY(F_L_COD);
_tohide.set(F_O_COD); DESTROY(F_O_COD);
_tohide.set(F_L_CATVEN); DESTROY(F_L_CATVEN);
_tohide.set(F_L_CODLISSUCC); DESTROY(F_LC_CODSUCC);
set_search_field(F_C_COD); // impostazione del campo di ricerca set_search_field(F_C_COD); // impostazione del campo di ricerca
_gest_um= prassid.get_bool("GesUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GesSca", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GesSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE; gotcha= TRUE;
}
break; break;
case 'O': // offerte case 'O': // offerte
if (!(prassid.get_bool("Ges", NULL, A_OFFERTE))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// settaggio dei campi da eliminare // settaggio dei campi da eliminare
_tohide.set(F_L_COD); DESTROY(F_L_COD);
_tohide.set(F_C_COD); DESTROY(F_C_COD);
_tohide.set(F_L_CATVEN); DESTROY(F_L_CATVEN);
_tohide.set(F_C_TIPOCF); DESTROY(F_C_TIPOCF);
_tohide.set(F_C_CODCF); DESTROY(F_C_CODCF);
_tohide.set(F_C_OBBLIG); DESTROY(F_C_OBBLIG);
_tohide.set(F_L_CODLISSUCC);
set_search_field(F_O_COD); // impostazione del campo di ricerca set_search_field(F_O_COD); // impostazione del campo di ricerca
_msk->set_handler(F_LC_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
_gest_um= prassid.get_bool("GesUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GesSca", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GesSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE; gotcha= TRUE;
}
break; break;
default: // messaggio di errore se si indica un archivio non valido default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza"); error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
@ -102,10 +125,19 @@ bool TCondizioni_vendita::user_create() {
} }
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file) _rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
_msk->set_handler(handle_mask); // imposta l'handler generale della maschera _msk->set_handler(handle_mask); // imposta l'handler generale della maschera
_msk->set_handler(F_DATACAM, handle_datacam); // imposta l'handler per il campo della data del cambio _msk->set_handler(F_DATACAM, handle_datacam); // imposta l'handler per il campo della data del cambio
_msk->set_handler(F_VALFIN, handle_valfin); // imposta l'handler per il campo di fine validità _msk->set_handler(F_VALFIN, handle_valfin); // imposta l'handler per il campo di fine validità
_msk->set_handler(F_SEQRIC, handle_seqric); // imposta l'handler per il campo di sequenza di ricerca if (!_gest_um) _msk->disable(F_GESTUM); // disabilita condizionalmente il booleano di gestione delle unità di misura
if (!_gest_sca) _msk->disable(F_GESTSCAGL); // disabilita condizionalmente il booleano di gestione degli scaglioni
if (!_gest_so) _msk->disable(F_GESTSCO); // disabilita condizionalmente il booleano di gestione degli sconti/omaggi
_gest_val= prassid.get_bool("GesVal"); // legge il booleano di abilitazione delle gastione delle valute
if (!_gest_val) { // se la gestione delle valute è disabilitata i campi di gestione vengono disabilitati
_msk->disable(F_CODVAL);
_msk->disable(F_CAMBIO);
_msk->disable(F_DATACAM);
}
} }
return (gotcha); return (gotcha);
} }
@ -119,36 +151,26 @@ bool TCondizioni_vendita::user_destroy() {
bool TCondizioni_vendita::handle_mask(TMask &m, KEY k) { bool TCondizioni_vendita::handle_mask(TMask &m, KEY k) {
if (k==K_F5) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing if (k==K_F5) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing
TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio
bool &_catven_on= app()._catven_on; // prende il booleano di attivazione del campo CATVEN bool &_codlis_catven= app()._codlis_catven; // prende il booleano di attivazione del campo CATVEN
TString appname(RCONDVEN_APP); // istanzia e inizializza la stringa con il nome dell'applicazione da lanciare TString appname(RCONDVEN_APP); // istanzia e inizializza la stringa con il nome dell'applicazione da lanciare
TString body; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera) TString body; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera)
switch (_condven[0]) { switch (_condven[0]) {
case 'L': // listini case 'L': // listini
body << F_R_L_RICERCA; // appende l'id del campo di ricerca body << F_R_L_RICERCA << "|"; // appende l'id del campo di ricerca
body << "|"; // appende il separatore body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo body << F_R_L_CATVEN << "=" << ((_codlis_catven)?(m.get(F_L_CATVEN)):("")) << "|"; // appende il filtro sulla categoria di vendita
body << "|"; // appende il separatore
body << F_R_L_CATVEN << "="; // appende il filtro sulla categoria di vendita...
if (_catven_on) body << m.get(F_L_CATVEN); // ...
body << "|"; // appende il separatore
body << F_R_L_COD << "=" << m.get(F_L_COD); // appende il filtro sul campo codice body << F_R_L_COD << "=" << m.get(F_L_COD); // appende il filtro sul campo codice
break; break;
case 'C': // contratti case 'C': // contratti
body << F_R_C_RICERCA; // appende l'id del campo di ricerca body << F_R_C_RICERCA << "|"; // appende l'id del campo di ricerca
body << "|"; // appende il separatore body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF) << "|"; // appende il filtro sul campo tipo cliente/fornitore
body << "|"; // appende il separatore body << F_R_C_CODCF << "=" << m.get(F_C_CODCF) << "|"; // appende il filtro sul campo codice cliente/fornitore
body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF); // appende il filtro sul campo tipo cliente/fornitore
body << "|"; // appende il separatore
body << F_R_C_CODCF << "=" << m.get(F_C_CODCF); // appende il filtro sul campo codice cliente/fornitore
body << "|"; // appende il separatore
body << F_R_C_COD << "=" << m.get(F_C_COD); // appende il filtro sul campo codice body << F_R_C_COD << "=" << m.get(F_C_COD); // appende il filtro sul campo codice
break; break;
case 'O': // offerte case 'O': // offerte
body << F_R_O_RICERCA; // appende l'id del campo di ricerca body << F_R_O_RICERCA << "|"; // appende l'id del campo di ricerca
body << "|"; // appende il separatore body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice
break; break;
} }
@ -187,79 +209,77 @@ bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k) {
if (valfin<valin) { if (valfin<valin) {
error_box("La data di inizio validità deve essere minore della data di fine"); error_box("La data di inizio validità deve essere minore della data di fine");
return FALSE; return FALSE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
}
bool TCondizioni_vendita::handle_codlissucc(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString codlissucc(fld.get()); // prende il codice listino successivo dal campo corrente
if (codlissucc.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString cod(m.get(F_L_COD)); // prende il codice listino corrente dalla maschera
if (codlissucc == cod) {
error_box("Il codice del listino successivo deve essere diverso dal codice del listino corrente");
return FALSE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
}
bool TCondizioni_vendita::handle_seqric(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString &seqric= fld.get(); // prende la stringa contenenta la sequenza di ricerca dal campo corrente
if (seqric.not_empty()) {
bool gotcha= TRUE; // flag di validità della sequenza
for (int i=0; i<seqric.len(); i++) {
char c= toupper(seqric[i]); // prende la lettera corrente della sequenza
if ((c!='A') && (c!='G') && (c!='R')) gotcha= FALSE; // se la lettera non rientra tra quelle possibili abbassa il flag di validità
for (int j= i+1; j<seqric.len(); j++) if (c== toupper(seqric[j])) gotcha= FALSE; // se la lettera compare anche più avanti nella sequenza abbassa il flag di validitià
if (!gotcha) break; // se il flag di validità è basso esce anticipatamente
} }
if (!gotcha) error_box("La sequenza di ricerca deve essere una combinazine di 'A' (Articoli), 'G' (Gruppi merceologici) e 'R' (Raggruppamenti fiscali), in cui ogni lettera compare al massimo una volta"); }
return (gotcha); }
} else return TRUE; }
} else return TRUE; return TRUE;
}
bool TCondizioni_vendita::handle_codsucc(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString &_condven= app()._condven; // prende il tipo di archivio dall'applicazione principale
TString codsucc(fld.get()); // prende il codice successivo dal campo corrente
if (codsucc.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString cod; // istanzia la stringa per il codice corrente
switch (_condven[0]) {
case 'L': cod= m.get(F_L_COD); break; // prende il codice listino corrente dal campo della maschera
case 'C': cod= m.get(F_C_COD); break; // prende il codice contratto dal campo della maschera
}
if (codsucc == cod) {
error_box("Il codice successivo deve essere diverso dal codice corrente");
return FALSE;
}
}
}
return TRUE;
} }
int TCondizioni_vendita::write(const TMask &m) { int TCondizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->write(); // invoca la scrittura della relazione _rel->write(); // invoca la scrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione return (_rel->status()); // ritorna lo stato della relazione
} }
int TCondizioni_vendita::rewrite(const TMask &m) { int TCondizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->rewrite(); // invoca la riscrittura della relazione _rel->rewrite(); // invoca la riscrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione return (_rel->status()); // ritorna lo stato della relazione
} }
void TCondizioni_vendita::init_query_mode(TMask &m) { bool TCondizioni_vendita::remove() {
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) { TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale
if (_tohide[i]) { TLocalisamfile rcondv(LF_RCONDV); // apre il file delle righe per ottenenre il record corrente
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile TRectype delrec(rcondv.curr()); // istanzia il record basato sul file delle righe, da usare come campione
_msk->hide(i); // rende invisibile il campo delrec.zero(); // svuota il record campione
delrec.put("TIPO", _condven); // setta il tipo di archivio
delrec.put("COD", condv.get("COD")); // setta il codice della testata
if ((_condven=="L") && _codlis_catven) delrec.put("CATVEN", condv.get("CATVEN")); // setta la categoria di vendita se è abilitata e siamo nei listini
if (_condven=="C") {
delrec.put("TIPOCF", condv.get("TIPOCF")); // setta i dati del cliente/fornitore se siamo nei contratti
delrec.put("CODCF", condv.get("CODCF"));
} }
} TRelation delrel(LF_RCONDV); // istanzia una relazione sulle righe
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso... TCursor delcur(&delrel, "", 1, &delrec, &delrec); // istanzia il cursore di cancellazione sulla relazione delle righe
_msk->efield(F_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking... long n= delcur.items(); // legge il numero di elementi del cursore
_msk->disable(F_L_CATVEN); // ...e disabilitato delcur.freeze(); // congela il cursore al suo stato attuale
} bool proceed= FALSE; // istanzia il booleano di conferma alla cancellazione
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio if (n==1) proceed= yesno_box("Esiste una riga collegata a questa testata: verrà anch'essa cancellata. Procedo?"); // viene richiesta conferma alla cancellazione della riga...
if (n>1) proceed= yesno_box("Esistono %ld righe collegate a questa testata: verranno anch'esse cancellate. Procedo?", n); // ...o delle righe
if (proceed) { // se si conferma le righe vengono cancellate
TLocalisamfile &delfile= delcur.file(); // prende riferimento al file delle righe dal cursore
for (delcur=0; delcur.pos()<n; ++delcur) delfile.remove(); // ciclo sugli elementi del cursore, cancella i record del file delle righe
} else return FALSE;
return (TRelation_application::remove()); // viene invocata la funzione standard di cancellazione del record corrente
} }
int ve2200(int argc, char* argv[]) { int ve2200(int argc, char* argv[]) {
TCondizioni_vendita a; TCondizioni_vendita a;

View File

@ -13,12 +13,14 @@
#define F_GESTSCAGL 121 #define F_GESTSCAGL 121
#define F_GESTSCO 122 #define F_GESTSCO 122
#define F_SCONST 123 #define F_SCONST 123
#define F_SEQRIC 124 #define F_SEQRIC_1 124
#define F_SEQRIC_2 125
#define F_SEQRIC_3 126
// campi riservati ai listini // campi riservati ai listini
#define F_L_CATVEN 131 #define F_L_CATVEN 131
#define F_L_COD 132 #define F_L_COD 132
#define F_L_CODLISSUCC 133 #define F_LC_CODSUCC 133 // campo comune anche ai contratti
// campi riservati ai contratti // campi riservati ai contratti
#define F_C_TIPOCF 141 #define F_C_TIPOCF 141

View File

@ -11,7 +11,7 @@ STRING F_TIPO 1
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FIELD LF_CONDV->TIPO FIELD LF_CONDV->TIPO
FLAG "DU" FLAG "DUP"
KEY 1 KEY 1
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
@ -141,8 +141,8 @@ BEGIN
DISPLAY "Valuta" CODTAB DISPLAY "Valuta" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CODVAL CODTAB OUTPUT F_CODVAL CODTAB
MESSAGE ENABLE,F_CAMBIO|ENABLE,F_DATACAM MESSAGE ENABLE,F_CAMBIO|ENABLE,F_DATACAM|DISABLE,F_IMPLORDI
MESSAGE EMPTY "1",F_CAMBIO|DISABLE,F_CAMBIO|CLEAR,F_DATACAM|DISABLE,F_DATACAM MESSAGE EMPTY "1",F_CAMBIO|DISABLE,F_CAMBIO|CLEAR,F_DATACAM|DISABLE,F_DATACAM|ENABLE,F_IMPLORDI
END END
NUMBER F_CAMBIO 15 5 NUMBER F_CAMBIO 15 5
@ -206,33 +206,63 @@ BEGIN
FIELD LF_CONDV->OBBLIG FIELD LF_CONDV->OBBLIG
END END
STRING F_SEQRIC 3 LIST F_SEQRIC_1 8
BEGIN BEGIN
PROMPT 2 17 "Sequenza ricerca " PROMPT 2 16 "Sequenza ricerca "
FIELD LF_CONDV->SEQRIC FIELD LF_CONDV->SEQRIC[1,1]
FLAG "U" ITEM "A|Articoli"
ITEM "G|Gr. Merc"
ITEM "R|Rag. Fis"
VALIDATE STR_EXPR (#THIS_FIELD!=#F_SEQRIC_2)&&(#THIS_FIELD!=#F_SEQRIC_3)
WARNING "La sequenza di ricerca deve indicare tre tipi diversi di righe"
END
LIST F_SEQRIC_2 8
BEGIN
PROMPT 32 16 ""
FIELD LF_CONDV->SEQRIC[2,2]
ITEM "-|Nessuno"
ITEM "A|Articoli"
ITEM "G|Gr. Merc"
ITEM "R|Rag. Fis"
VALIDATE STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_SEQRIC_1)&&(#THIS_FIELD!=#F_SEQRIC_3))
WARNING "La sequenza di ricerca deve indicare tre tipi diversi di righe"
END
LIST F_SEQRIC_3 8
BEGIN
PROMPT 45 16 ""
FIELD LF_CONDV->SEQRIC[3,3]
ITEM "-|Nessuno"
ITEM "A|Articoli"
ITEM "G|Gr. Merc"
ITEM "R|Rag. Fis"
VALIDATE STR_EXPR (#THIS_FIELD=="")||((#THIS_FIELD!=#F_SEQRIC_1)&&(#THIS_FIELD!=#F_SEQRIC_2))
WARNING "La sequenza di ricerca deve indicare tre tipi diversi di righe"
END END
// campo riservato ai listini // campo riservato ai listini
STRING F_L_CODLISSUCC 3 STRING F_LC_CODSUCC 3
BEGIN BEGIN
PROMPT 33 17 "Codice listino succ. " PROMPT 2 17 "Codice successivo "
FIELD LF_CONDV->CODLISSUCC FIELD LF_CONDV->CODLISSUCC
FLAG "U" FLAG "U"
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_TIPO SELECT INPUT TIPO F_TIPO SELECT
INPUT CATVEN F_L_CATVEN SELECT INPUT CATVEN F_L_CATVEN SELECT
INPUT COD F_L_CODLISSUCC INPUT TIPOCF F_C_TIPOCF SELECT
INPUT CODCF F_C_CODCF SELECT
INPUT COD F_LC_CODSUCC
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_L_CODLISSUCC COD OUTPUT F_LC_CODSUCC COD
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
// bottone di lancio dell'applicazione delle righe // bottone di lancio dell'applicazione delle righe
BUTTON BTN_RIGHE 63 1 BUTTON BTN_RIGHE 63 1
BEGIN BEGIN
PROMPT 0 -1 "Editing delle righe di questa testata" PROMPT 0 -1 "Righe di questa testata"
MESSAGE K_F5 MESSAGE K_F5
END END

View File

@ -4,21 +4,46 @@
#include "ve2300.h" #include "ve2300.h"
#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
#define CREATE(x) { _msk->field(x).set_key(1); _msk->show(x); }
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); }
enum state { // tipo di var. per la gestione delle abilitazioni dei campi
hidden, // nascosto, disabilitato, rimosso, distrutto, ucciso... insomma, fuori dai piedi
disabled, // disabilitato, visibile, non riabilitabile... cioè proprio in mezzo ai piedi e senza possibilità di toglierlo
disactivated, // disabilitato ma visibile... cioè giusto tra i piedi
activated // attivato... cioè utilizzabile come gli altri
};
// il campo unità di misura nella chiave viene gestito con i quattro stati per risolvere i
// conflitti di abilitazione/disabilitazione incrociati tra vari flag e stati del programma:
// il listbox del tipo di riga ha la priorità più bassa, cambia solo tra gli ultimi due stati
// (disactivated e activated); il flag "GESTUM" nella testata cambia lo stato del campo tra
// gli intermedi (disabled e disactivated); il tipo di archivio cambia tra il primo e il terzo
// stato (hidden e disactivated)
class TRighe_condizioni_vendita: public TRelation_application { class TRighe_condizioni_vendita: public TRelation_application {
TMask *_msk; // maschera principale TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale TRelation *_rel; // relazione principale
bool _catven_on; // booleano di abilitazione del campo CATVEN TString16 _rcondven; // stringa che indica il tipo di archivio
bool _codlis_catven; // booleano di abilitazione del campo CATVEN
state _gest_um; // variabile di abilitazione delle unità di misura
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
virtual TMask *get_mask(int) { return _msk; } virtual TMask *get_mask(int) { return _msk; } // punto d'aggancio tra la maschera della rel.app. e la maschera principale dell'applicazione
virtual bool changing_mask(int) { return FALSE; } virtual bool changing_mask(int) { return FALSE; } // ritorna il flag di cambio maschera a seconda dei modi di funzionamento, in questa applicazione la maschera è una sola quindi il flag è FALSE
virtual TRelation *get_relation() const { return _rel; } virtual bool changing_keys() const { return TRUE; } // ritorna il flag di rigenerazione della lista delle chiavi ad ogni find(), in questa applicazione le chiavi cambiano continuamente quindi il flag è TRUE
virtual TRelation *get_relation() const { return _rel; } // punto d'aggancio tra la relazione della rel.app. e la relazione principale dell'applicazione
static void hide_and_show_codriga(TMask &); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga) static void hide_and_show_codriga(void); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
static bool handle_tiporiga(TMask_field &, KEY); // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale) static bool handle_tiporiga(TMask_field &, KEY); // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
static bool handle_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta) static bool handle_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
@ -26,12 +51,7 @@ class TRighe_condizioni_vendita: public TRelation_application {
virtual int write(const TMask &); // metodo usato per scrivere il record sul file virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public: public:
TString16 _rcondven; // stringa che indica il tipo di archivio
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
TRighe_condizioni_vendita() {} TRighe_condizioni_vendita() {}
virtual ~TRighe_condizioni_vendita() {} virtual ~TRighe_condizioni_vendita() {}
}; };
@ -42,6 +62,8 @@ TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla c
return (TRighe_condizioni_vendita &)main_app(); return (TRighe_condizioni_vendita &)main_app();
} }
bool TRighe_condizioni_vendita::user_create() { bool TRighe_condizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione bool gotcha= FALSE; // booleano di avvenuta inizializzazione
@ -55,44 +77,46 @@ bool TRighe_condizioni_vendita::user_create() {
} }
_rcondven.upper(); // rende la stringa upper-case _rcondven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2300X"); _msk= new TMask("VE2300X");
_tohide.reset(); // resetta il vettore dei campi da eliminare
switch (_rcondven[0]) {
case 'L': { // listini
_tohide.set(F_R_C_TIPOCF); // settaggio dei campi da eliminare...
_tohide.set(F_R_C_CODCF);
_tohide.set(F_R_C_COD);
_tohide.set(F_R_O_COD);
_tohide.set(F_R_C_RICERCA);
_tohide.set(F_R_O_RICERCA);
_tohide.set(F_R_CO_CODLOTTO);
_tohide.set(F_R_O_ARTES);
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
_catven_on= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione di CATVEN switch (_rcondven[0]) {
case 'L': // listini
_gest_um= disactivated; // attiva di default la gestione delle unità di misura pur lasciando il campo disabilitato
DESTROY(F_R_C_TIPOCF); // settaggio dei campi da eliminare...
DESTROY(F_R_C_CODCF);
DESTROY(F_R_C_COD);
DESTROY(F_R_O_COD);
_msk->hide(F_R_C_RICERCA);
_msk->hide(F_R_O_RICERCA);
_msk->hide(F_R_CO_CODLOTTO);
_msk->hide(F_R_O_ARTES);
_codlis_catven= prassid.get_bool("CodLisCV"); // setta il booleano di abilitazione di CATVEN
if (!_codlis_catven) KILL(F_R_L_CATVEN); // disabilita condizionalmente le categorie di vendita
set_search_field(F_R_L_RICERCA); // impostazione del campo di ricerca set_search_field(F_R_L_RICERCA); // impostazione del campo di ricerca
_msk->set_handler(F_R_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata _msk->set_handler(F_R_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
gotcha= TRUE; gotcha= TRUE;
break; break;
}
case 'C': // contratti case 'C': // contratti
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare... _gest_um= hidden; // rimuove la gestione delle unità di misura
_tohide.set(F_R_L_COD); DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare...
_tohide.set(F_R_O_COD); DESTROY(F_R_L_COD);
_tohide.set(F_R_LO_UM); DESTROY(F_R_O_COD);
_tohide.set(F_R_L_RICERCA); DESTROY(F_R_LO_UM);
_tohide.set(F_R_O_RICERCA); _msk->hide(F_R_L_RICERCA);
_tohide.set(F_R_O_ARTES); _msk->hide(F_R_O_RICERCA);
_msk->hide(F_R_O_ARTES);
set_search_field(F_R_C_RICERCA); // impostazione del campo di ricerca set_search_field(F_R_C_RICERCA); // impostazione del campo di ricerca
_msk->set_handler(F_R_C_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata _msk->set_handler(F_R_C_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
gotcha= TRUE; gotcha= TRUE;
break; break;
case 'O': // offerte case 'O': // offerte
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare... _gest_um= disactivated; // attiva di default la gestione delle unità di misura pur lasciando il campo disabilitato
_tohide.set(F_R_C_TIPOCF); DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare...
_tohide.set(F_R_C_CODCF); DESTROY(F_R_C_TIPOCF);
_tohide.set(F_R_L_COD); DESTROY(F_R_C_CODCF);
_tohide.set(F_R_C_COD); DESTROY(F_R_L_COD);
_tohide.set(F_R_L_RICERCA); DESTROY(F_R_C_COD);
_tohide.set(F_R_C_RICERCA); _msk->hide(F_R_L_RICERCA);
_msk->hide(F_R_C_RICERCA);
set_search_field(F_R_O_RICERCA); // impostazione del campo di ricerca set_search_field(F_R_O_RICERCA); // impostazione del campo di ricerca
_msk->set_handler(F_R_O_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata _msk->set_handler(F_R_O_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
gotcha= TRUE; gotcha= TRUE;
@ -103,8 +127,9 @@ bool TRighe_condizioni_vendita::user_create() {
} }
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file) _rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
_msk->set(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio
_msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga _msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
hide_and_show_codriga(*_msk); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
} }
return (gotcha); return (gotcha);
} }
@ -115,90 +140,92 @@ bool TRighe_condizioni_vendita::user_destroy() {
return TRUE; return TRUE;
} }
void TRighe_condizioni_vendita::hide_and_show_codriga(TMask &m) { void TRighe_condizioni_vendita::hide_and_show_codriga() {
TMask *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione
if (_msk->query_mode()) { // se la maschera è in modo query procede con i controlli...
short id_campi[3]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione short id_campi[3]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
char tag_campo= m.get(F_R_TIPORIGA)[0]; // prende il tag in TIPORIGA del campo da abilitare state &_gest_um= app()._gest_um; // prende il riferimento al booleano di abilitazione delle unità di misura
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio
TBit_array &_tohide= app()._tohide; // prende il riferimento all'array di campi da eliminare char tag_campo= toupper(_msk->get(F_R_TIPORIGA)[0]); // prende il tag del campo da abilitare in TIPORIGA
for (int i=0; i<3; i++) { // ciclo sui tre campi CODRIGA for (int i=0; i<3; i++) { // ciclo sui tre campi CODRIGA
if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene... if (tag_campo == tag_campi[i]) { CREATE(id_campi[i]); } // il campo indicato con il tag viene reso visibile
m.efield(id_campi[i]).check_type(CHECK_REQUIRED); // ...abilitato al checking... else { DESTROY(id_campi[i]); } // i campi non corrispondenti al tag vengono resi invisibili
m.show(id_campi[i]); // ...mostrato...
_tohide.reset(id_campi[i]); // ...e rimosso dal vettore di eliminazione...
} else { // ...mentre gli altri vengono...
m.efield(id_campi[i]).check_type(CHECK_NONE); // ...disabilitati dal checking...
m.hide(id_campi[i]); // ...nascosti...
_tohide.set(id_campi[i]); // ...e aggiunti al vettore di eliminazione
} }
if ((_gest_um != hidden) && (_gest_um != disabled)) { // se è abilitata (o abilitabile) la gestione delle unità di misura ed è stata selezionata una riga di articoli...
if (tag_campo=='A') _gest_um= activated; // ...il campo "unità di misura" viene abilitato...
else _gest_um= disactivated; // ...altrimenti viene disabilitato
} }
if (_rcondven != "C") { // se non stiamo lavorando sui contratti... switch (_gest_um) {
if (tag_campo=='A') { // ...ed è stata selezionata una riga di articoli... case hidden: // se l'unità di misura deve essere fuori dai piedi...
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // ...l'unità di misura viene attivata al checking... DESTROY(F_R_LO_UM); // ...il campo viene relativo soppresso
m.enable(F_R_LO_UM); // ...e abilitata... break;
} else { // ...altrimenti, se è stata selezionata una riga non di articoli... case disabled: // se l'unità di misura deve essere tra i piedi (ma inutilizzabile)
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // ...l'unità di misura viene rimossa dal checking... case disactivated:
m.disable(F_R_LO_UM); // ...e disabilitata CREATE(F_R_LO_UM); // ...il campo relativo viene rimesso al mondo...
KILL(F_R_LO_UM); // ...ma subito ucciso
break;
case activated: // se l'unità di misura deve funzionare...
CREATE(F_R_LO_UM); // ...il campo relativo viene rimesso al mondo...
REVIVE(F_R_LO_UM); // ...e lasciato vivere in pace
break;
} }
} }
} }
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) { bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
if (k==K_TAB) hide_and_show_codriga(fld.mask()); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA if (k==K_SPACE) hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
return TRUE; return TRUE;
} }
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) { bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
if ((k==K_TAB) && fld.get().not_empty()) { if ((k==K_TAB) && fld.get().not_empty()) {
state &_gest_um= app()._gest_um; // prende il riferimento al booleano di abilitazione delle unità di misura
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
TMask &m= fld.mask(); // prende la maschera principale TMask *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione
TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita) TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita)
condv.put("TIPO", _rcondven); // riempie il campo "TIPO" condv.put("TIPO", _rcondven); // riempie il campo "TIPO"
switch (_rcondven[0]) { switch (_rcondven[0]) {
case 'L': // riempie il resto della chiave dei listini case 'L': // riempie il resto della chiave dei listini
condv.put("CATVEN", m.get(F_R_L_CATVEN)); condv.put("CATVEN", _msk->get(F_R_L_CATVEN));
condv.put("COD", m.get(F_R_L_COD)); condv.put("COD", _msk->get(F_R_L_COD));
break; break;
case 'C': // riempie il resto della chiave dei contratti case 'C': // riempie il resto della chiave dei contratti
condv.put("TIPOCF", m.get(F_R_C_TIPOCF)); condv.put("TIPOCF", _msk->get(F_R_C_TIPOCF));
condv.put("CODCF", m.get(F_R_C_CODCF)); condv.put("CODCF", _msk->get(F_R_C_CODCF));
condv.put("COD", m.get(F_R_C_COD)); condv.put("COD", _msk->get(F_R_C_COD));
break; break;
case 'O': // riempie il resto della chiave delle offerte case 'O': // riempie il resto della chiave delle offerte
condv.put("COD", m.get(F_R_O_COD)); condv.put("COD", _msk->get(F_R_O_COD));
break; break;
} }
if (condv.read()==NOERR) { // se la lettura è andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata if (condv.read()==NOERR) { // se la lettura è andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata
if (!condv.get_bool("GESTUM")) { if (_gest_um != hidden) { // se le unità di misura possono essere utilizzate...
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // disabilita il checking sul campo "unità di misura" if (!(condv.get_bool("GESTUM"))) _gest_um= disabled; // ma nella testata sono disabilitate, setta la disabilitazione del campo "unità di misura"...
m.disable(F_R_LO_UM); // disabilita il campo "unità di misura" else _gest_um= disactivated; // altrimenti ne setta la possibile abilitazione
} else {
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // abilita il checking sul campo "unità di misura"
m.enable(F_R_LO_UM); // abilita il campo "unità di misura"
} }
hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura"
if (!condv.get_bool("GESTSCAGL")) { if (!condv.get_bool("GESTSCAGL")) {
m.efield(F_R_NSCAGL).check_type(CHECK_NONE); // disabilita il checking sul campo "quantità limite scaglione" KILL(F_R_NSCAGL); // disabilita il campo "numero scaglione"
m.disable(F_R_NSCAGL); // disabilita il campo "quantità limite scaglione" _msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
m.disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
} else { } else {
m.efield(F_R_NSCAGL).check_type(CHECK_REQUIRED); // abilita il checking sul campo "quantità limite scaglione" REVIVE(F_R_NSCAGL); // abilita il campo "numero scaglione"
m.enable(F_R_NSCAGL); // abilita il campo "quantità limite scaglione" _msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
m.enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
} }
if (!condv.get_bool("GESTSCO")) { if (!condv.get_bool("GESTSCO")) {
m.disable(F_R_SCONTO); // disabilita il campo "sconto" _msk->disable(F_R_SCONTO); // disabilita il campo "sconto"
m.disable(F_R_QOM); // disabilita il campo "quantità art. omaggio" _msk->disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
m.disable(F_R_QBASE); // disabilita il campo "quantità base x sconto" _msk->disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
m.disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio" _msk->disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
m.disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio" _msk->disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
m.disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio" _msk->disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
} else { } else {
m.enable(F_R_SCONTO); // abilita il campo "sconto" _msk->enable(F_R_SCONTO); // abilita il campo "sconto"
m.enable(F_R_QOM); // abilita il campo "quantità art. omaggio" _msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
m.enable(F_R_QBASE); // abilita il campo "quantità base x sconto" _msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
m.enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio" _msk->enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
m.enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio" _msk->enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
m.enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio" _msk->enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio"
} }
return TRUE; return TRUE;
} else { } else {
@ -230,19 +257,7 @@ int TRighe_condizioni_vendita::rewrite(const TMask &m) {
return (_rel->status()); // ritorna lo stato della relazione return (_rel->status()); // ritorna lo stato della relazione
} }
void TRighe_condizioni_vendita::init_query_mode(TMask &m) {
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) { // ciclo sul vettore dei campi da eliminare
if (_tohide[i]) {
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NONE); // disabilita il checking sul campo se è editabile
_msk->hide(i); // rende invisibile il campo
}
}
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
_msk->efield(F_R_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
_msk->disable(F_R_L_CATVEN); // ...e disabilitato
}
_msk->set(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio
}
int ve2300(int argc, char* argv[]) { int ve2300(int argc, char* argv[]) {
TRighe_condizioni_vendita a; TRighe_condizioni_vendita a;

View File

@ -11,7 +11,7 @@ STRING F_R_TIPO 1
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FIELD LF_RCONDV->TIPO FIELD LF_RCONDV->TIPO
FLAG "DU" FLAG "DUP"
KEY 1 KEY 1
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
@ -121,15 +121,16 @@ BEGIN
FIELD LF_RCONDV->TIPORIGA FIELD LF_RCONDV->TIPORIGA
FLAG "P" FLAG "P"
KEY 1 KEY 1
ITEM "A|Articolo" // MESSAGE ENABLE,F_CODRIGA_A|SHOW,F_CODRIGA_A|CLEAR,F_CODRIGA_G|HIDE,F_CODRIGA_G|CLEAR,F_CODRIGA_R|HIDE,F_CODRIGA_R ITEM "A|Articolo"
ITEM "G|Gr. merc." // MESSAGE ENABLE,F_CODRIGA_G|SHOW,F_CODRIGA_G|CLEAR,F_CODRIGA_A|HIDE,F_CODRIGA_A|CLEAR,F_CODRIGA_R|HIDE,F_CODRIGA_R ITEM "G|Gr. merc."
ITEM "R|Rag. fis." // MESSAGE ENABLE,F_CODRIGA_R|SHOW,F_CODRIGA_R|CLEAR,F_CODRIGA_A|HIDE,F_CODRIGA_A|CLEAR,F_CODRIGA_G|HIDE,F_CODRIGA_G ITEM "R|Rag. fis."
END END
STRING F_R_CODRIGA_A 20 STRING F_R_CODRIGA_A 20
BEGIN BEGIN
PROMPT 19 5 "Codice " PROMPT 19 5 "Codice "
FIELD LF_RCONDV->CODRIGA FIELD LF_RCONDV->CODRIGA
FLAG "U"
KEY 1 KEY 1
USE LF_ANAGR USE LF_ANAGR
INPUT CODART F_R_CODRIGA_A INPUT CODART F_R_CODRIGA_A
@ -143,6 +144,7 @@ STRING F_R_CODRIGA_G 20
BEGIN BEGIN
PROMPT 19 5 "Codice " PROMPT 19 5 "Codice "
FIELD LF_RCONDV->CODRIGA FIELD LF_RCONDV->CODRIGA
FLAG "U"
KEY 1 KEY 1
USE %GMC USE %GMC
INPUT CODTAB F_R_CODRIGA_G INPUT CODTAB F_R_CODRIGA_G
@ -157,6 +159,7 @@ STRING F_R_CODRIGA_R 20
BEGIN BEGIN
PROMPT 19 5 "Codice " PROMPT 19 5 "Codice "
FIELD LF_RCONDV->CODRIGA FIELD LF_RCONDV->CODRIGA
FLAG "U"
KEY 1 KEY 1
USE %RFA USE %RFA
INPUT CODTAB F_R_CODRIGA_R INPUT CODTAB F_R_CODRIGA_R
@ -179,6 +182,7 @@ STRING F_R_LO_UM 2 // campo riservato a listini e offerte
BEGIN BEGIN
PROMPT 21 7 "U.M. " PROMPT 21 7 "U.M. "
FIELD LF_RCONDV->UM FIELD LF_RCONDV->UM
FLAG "U"
KEY 1 KEY 1
USE LF_UMART KEY 2 USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM JOIN %UMS INTO CODTAB=UM
@ -193,11 +197,11 @@ END
STRING F_R_L_RICERCA 1 // campo di aggancio per la ricerca sui listini, nascosto STRING F_R_L_RICERCA 1 // campo di aggancio per la ricerca sui listini, nascosto
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
USE LF_RCONDV
FLAG "D" FLAG "D"
USE LF_RCONDV SELECT (CATVEN==#F_R_L_CATVEN)&&(COD==#F_R_L_COD)
INPUT TIPO F_R_TIPO SELECT INPUT TIPO F_R_TIPO SELECT
INPUT CATVEN F_R_L_CATVEN SELECT //INPUT CATVEN F_R_L_CATVEN
INPUT COD F_R_L_COD SELECT //INPUT COD F_R_L_COD
INPUT TIPORIGA F_R_TIPORIGA INPUT TIPORIGA F_R_TIPORIGA
INPUT CODRIGA F_R_CODRIGA_A INPUT CODRIGA F_R_CODRIGA_A
INPUT UM F_R_LO_UM INPUT UM F_R_LO_UM
@ -217,12 +221,12 @@ END
STRING F_R_C_RICERCA 1 // campo di aggancio per la ricerca sui contratti, nascosto STRING F_R_C_RICERCA 1 // campo di aggancio per la ricerca sui contratti, nascosto
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
USE LF_RCONDV
FLAG "D" FLAG "D"
USE LF_RCONDV SELECT (TIPOCF==#F_R_C_TIPOCF)&&(CODCF==#F_R_C_CODCF)&&(COD==#F_R_L_COD)
INPUT TIPO F_R_TIPO SELECT INPUT TIPO F_R_TIPO SELECT
INPUT TIPOCF F_R_C_TIPOCF SELECT //INPUT TIPOCF F_R_C_TIPOCF
INPUT CODCF F_R_C_CODCF SELECT //INPUT CODCF F_R_C_CODCF
INPUT COD F_R_C_COD SELECT //INPUT COD F_R_C_COD
INPUT TIPORIGA F_R_TIPORIGA INPUT TIPORIGA F_R_TIPORIGA
INPUT CODRIGA F_R_CODRIGA_A INPUT CODRIGA F_R_CODRIGA_A
INPUT NSCAGL F_R_NSCAGL INPUT NSCAGL F_R_NSCAGL
@ -239,10 +243,10 @@ END
STRING F_R_O_RICERCA 1 // campo di aggancio per la ricerca sulle offerte, nascosto STRING F_R_O_RICERCA 1 // campo di aggancio per la ricerca sulle offerte, nascosto
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
USE LF_RCONDV
FLAG "D" FLAG "D"
USE LF_RCONDV SELECT COD==#F_R_L_COD
INPUT TIPO F_R_TIPO SELECT INPUT TIPO F_R_TIPO SELECT
INPUT COD F_R_O_COD SELECT //INPUT COD F_R_O_COD
INPUT TIPORIGA F_R_TIPORIGA INPUT TIPORIGA F_R_TIPORIGA
INPUT CODRIGA F_R_CODRIGA_A INPUT CODRIGA F_R_CODRIGA_A
INPUT UM F_R_LO_UM INPUT UM F_R_LO_UM
@ -288,8 +292,6 @@ BOOLEAN F_R_ADDIVA
BEGIN BEGIN
PROMPT 2 11 "Addebito IVA" PROMPT 2 11 "Addebito IVA"
FIELD LF_RCONDV->ADDIVA FIELD LF_RCONDV->ADDIVA
MESSAGE TRUE ENABLE,F_R_CODIVA
MESSAGE FALSE DISABLE,F_R_CODIVA
END END
STRING F_R_CODIVA 4 STRING F_R_CODIVA 4

View File

@ -3,7 +3,7 @@
#include <xvt.h> #include <xvt.h>
//extern int ve3100(int argc, char* argv[]); // stampa tabelle sconti (di riga/di documento/incondizionati) //extern int ve3100(int argc, char* argv[]); // stampa tabelle sconti (di riga/di documento/incondizionati)
//extern int ve3200(int argc, char* argv[]); // stampa testate listini/contratti/offerte extern int ve3200(int argc, char* argv[]); // stampa testate listini/contratti/offerte
//extern int ve3300(int argc, char* argv[]); // stampa righe listini/contratti/offerte //extern int ve3300(int argc, char* argv[]); // stampa righe listini/contratti/offerte
extern int ve3400(int argc, char* argv[]); // stampa anagrafica di magazzino extern int ve3400(int argc, char* argv[]); // stampa anagrafica di magazzino
@ -15,7 +15,7 @@ int main( int argc, char** argv) {
switch (r) { switch (r) {
//case 0: rt = ve3100(argc, argv); break; //case 0: rt = ve3100(argc, argv); break;
//case 1: rt = ve3200(argc, argv); break; case 1: rt = ve3200(argc, argv); break;
//case 2: rt = ve3300(argc, argv); break; //case 2: rt = ve3300(argc, argv); break;
case 3: rt = ve3400(argc, argv); break; case 3: rt = ve3400(argc, argv); break;
default: error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 2 [L|C|O] | 3]", argv[0]); break; default: error_box("Sintassi: %s -[0 [R|D|I] | 1 [L|C|O] | 2 [L|C|O] | 3]", argv[0]); break;

208
ve/ve3200.cpp Executable file
View File

@ -0,0 +1,208 @@
#include <printapp.h>
#include <mask.h>
#include "ve3200.h"
#define UMS1 201
#define UMS2 202
// !! Manca la gestione della maschera di selezione del tipo di archivio nel caso non sia
// specificato sulla linea di comando
// !! Manca la gestione della maschera di filtro (con i relativi handler sui vari tipi di
// abilitazioni incrociate)
// !! Manca la selezione del file in corso di stampa nella set_page() e la relativa impostazione
// della pagina
// !! Manca la creazione della struttura della stampa dei dati
// !! Manca tutto il resto!
class TStampa_condizioni_vendita: public TPrint_application {
TRelation *_rel; // relazione principale
protected:
virtual bool user_create(void);
virtual bool user_destroy(void);
virtual bool set_print(int);
virtual void set_page(int, int);
virtual void preprocess_header(void);
virtual void process_link(int, const char *);
};
bool TStampa_condizioni_vendita::user_create() {
_rel= new TRelation(LF_CONDV); // crea la relazione principale
_rel->add(LF_RCONDV, "TIPO==TIPO|CATVEN==CATVEN|TIPOCF==TIPOCF|CODCF==CODCF|COD==COD");
_rel->add("%CVE", "CODTAB==CATVEN");
_rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF");
_rel->add("%VAL", "CODTAB==CODVAL");
_rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1);
_rel->add("%UMS", "CODTAB==UMOM", 1, LF_RCONDV, UMS2);
add_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa
add_file(LF_CONDV); // notifica il file della testata alla stampa
add_file(LF_RCONDV); // notifica il file delle righe alla stampa
enable_print_menu(); // abilita il menù di stampa
enable_setprint_menu(); // abilita il menù di settaggio della stampa
return TRUE;
}
bool TStampa_condizioni_vendita::user_destroy() {
delete _rel; // distrugge la relazione principale
return TRUE;
}
bool TStampa_condizioni_vendita::set_print(int) {
TMask mask("ve3200x"); // istanzia la maschera di selezione del filtro di stampa
if (mask.run()== K_ENTER) { // lancia la maschera, se viene confermata vengono trovati gli estremi del cursore
/* TLocalisamfile &anagr= _rel->lfile(); // prende il file principale
TRectype da(anagr.curr()), a(anagr.curr()); // prende due copie del record del file principale
da.zero(); // azzera il record di inizio
a.zero(); // azzera il record di fine
if (mask.get(F_CODART_1).not_empty()) { // se il campo "dall'articolo..." non è vuoto viene trovato il record di inizio
anagr.zero(); // svuota il record corrente
anagr.put("CODART", mask.get(F_CODART_1)); // compone la chiave
if (anagr.read()== NOERR) da= anagr.curr(); // si posiziona, se il record esiste il record iniziale viene riempito
}
if (mask.get(F_CODART_2).not_empty()) { // se il campo "all'articolo..." non è vuoto viene trovato il record di fine
anagr.zero(); // svuota il record corrente
anagr.put("CODART", mask.get(F_CODART_2)); // compone la chiave
if (anagr.read()== NOERR) a= anagr.curr(); // si posiziona, se il record esiste il record finale viene riempito
}
current_cursor()->setregion(da, a); // viene settata la regione del cursore
if (_st_umart) { // se la stampa delle unità di misura è abilitata vengono aperti i file relativi
_umart= new TLocalisamfile(LF_UMART); // crea il file sulle unità di misura dell'articolo
_arr_umart= new TRecord_array(LF_UMART, "NRIGA"); // crea il record array sulle unità di misura degli articoli
}
if (_st_codcorr) { // se la stampa dei codici corrispondenti è abilitata vengono aperti i file relativi
_codcorr= new TLocalisamfile(LF_CODCORR); // crea il file con i codici corrispondenti dell'articolo
_arr_codcorr= new TRecord_array(LF_CODCORR, "NRIGA"); // crea il record array sui codici corrispondenti
}
force_setpage(); // forza il lancio della set_page() ad ogni record del file da stampare
disable_links(); // disabilita tutti i link ipertestuali
_anagr_link_id= enable_link("Collegamento a anagrafica di magazzino", 'g'); // abilita il collegamento all'anagrafica di magazzino
*/
return TRUE;
} else return FALSE;
}
/* 1 1 1 1
1 2 3 4 5 6 7 8 9 0 1 2 3
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
*/
void TStampa_condizioni_vendita::preprocess_header()
{
/*reset_header(); // l'header viene resettato
int i= 1; // contatore delle linee
set_header(i, "@125gPag @#"); // la prima linea contiene, sicuramente, il numero di pagina
const long firm= get_firm(); // legge l'id della ditta corrente
TLocalisamfile ditte(LF_NDITTE); // apre il file ditte
ditte.zero(); // vuota il record
ditte.put("CODDITTA", firm); // riempie la chiave
if (ditte.read()== NOERR) { // se il record della ditta viene trovato viene settato l'header
const TString &s= ditte.get("RAGSOC"); // legge la ragione sociale della ditta
set_header(i, "Ditta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header
}
set_header(++i, "Codice articolo@22gT@24gDescrizione@75gGrMer@81gDescrizione gruppo merceologico"); // setta la linea successiva dell'header
if (_st_umart || _st_codcorr) set_header(++i, ""); // crea una linea vuota se almeno una stampa condizionale è abilitata
if (_st_codcorr) set_header(i, "Cod. art. altern."); // se è abilitata la stampa dei codici corrispondenti l'header lo indica
if (_st_umart) set_header(i, "@50gUM@53gFatt. conv."); // se è abilitata la stampa delle unità di misura l'header lo indica
set_header(++i, "Forn.@7gRagione sociale@58gCosto standard@83gPeso@105gTara"); // la linea successiva contiene il fornitore e altri dati
if (_st_umart) set_header(i, "@80gUP"); // su questa linea viene indicata anche l'unità di misura del peso (se abilitata)
set_header(++i, "Pezzi x conf.@23gPezzi x collo@45gAR@48gRD"); // l'ultima linea d'header contiene i pezzi per confezione e altri dati
if (_st_fisc) set_header(i, "@51gAF@54gRagFs@60gC@62gCCA@66gGrA@70gCnA@74gSottCA@81gCCV@85gGrV@89gCnV@93gSottCV@100gClasseDog@111gIva@116gIvaR"); // aggiunge i dati fiscali sull'ultima linea
set_header(++i, ""); // aggiunge due linee vuote
set_header(++i, "");
*/
}
void TStampa_condizioni_vendita::set_page(int file, int) {
/*if (file== LF_ANAGR) { // se il file in stampa non è il file principale non c'è nulla da fare
TLocalisamfile &anagr= _rel->lfile(); // prende il riferimento al file principale
set_row(1, "$[g]@20s$[n]@22g@1s@24g@50s@75g@5s@81g@50s", FLD(LF_ANAGR, "CODART"), FLD(LF_ANAGR, "TIPO"), FLD(LF_ANAGR, "DESCR"), FLD(LF_ANAGR, "GRMERC1"), FLD(-GMC1, "S0")); // imposta la prima linea di dati
int n_codcorr= 0, n_umart= 0, n_gmc= (anagr.get("GRMERC2").not_empty())?(1):(0)+(anagr.get("GRMERC3").not_empty())?(1):(0); // legge il numero di gruppi merc.
if (_st_codcorr) { // se è abilitata la stampa dei codici corrispondenti viene letto il numero di codici presenti, altrimenti viene lasciato a 0
_codcorr->zero(); // il record corrente del file dei codici corrispondenti viene vuotato
_codcorr->put("CODART", anagr.get("CODART")); // viene composta la chiave
_arr_codcorr->read(_codcorr->curr()); // il record array dei codici viene caricato
n_codcorr= _arr_codcorr->rows(); // viene settato il numero di codici trovato
}
if (_st_umart) { // se è abilitata la stampa delle unità di misura viene letto il numero di unità di mis. da stampare, altrimenti viene lasciato a 0
_umart->zero(); // il record corrente del file delle unità di misura viene vuotato
_umart->put("CODART", anagr.get("CODART")); // viene composta la chiave
_arr_umart->read(_umart->curr()); // il record array delle unità di misura viene caricato
n_umart= _arr_umart->rows(); // viene settato il numero di unità di misura trovate
}
int n_max= max3(n_gmc, n_codcorr, n_umart); // viene trovato il maggiore dei tre contatori (gruppi merc., unità di mis. e codici corrisp.)
for (int i=1; i<=n_max; i++) { // ciclo sul maggiore dei contatori
set_row(i+1, ""); // vuota la linea di stampa corrente
if (i<=n_codcorr) { // se ci sono ancora codici corrispondenti gli spazi relativi della riga vengono riempiti
TString codartalt(_arr_codcorr->row(i, FALSE).get("CODARTALT")); // legge il codice corrispondente dell'articolo
TString tipo(_arr_codcorr->row(i, FALSE).get("TIPO")); // legge il tipo
set_row(i+1, "@1g%-20s@22g%1s@24gCodice alternativo", (const char *)codartalt, (const char *)tipo); // setta gli spazi della riga con i valori letti
}
if (i<=n_umart) { // se ci sono ancora unità di misura gli spazi relativi della riga vengono riempiti
TString um(_arr_umart->row(i, FALSE).get("UM")); // legge l'id dell'unità di misura
real fc(_arr_umart->row(i, FALSE).get_real("FC")); // legge il suo fattore di conversione
set_row(i+1, "@50g%-2s@53g%-s", (const char *)um, fc.string(10, 5)); // setta gli spazi della riga con i valori letti
}
if (i<=n_gmc) { // se ci sono ancora gruppi merceologici gli spazi relativi della riga vengono riempiti
TString grmerc, descr; // istanzia le due variabili per codice del gruppo e descrizione
if (i==1) { // se è il primo deve essere letto dal secondo campo GRMERC del file dell'anagrafica
grmerc= anagr.get("GRMERC2"); // legge il codice del gruppo
descr= _rel->lfile(-GMC2).get("S0"); // legge la sua descrizione dalla tabella
} else { // se è il secondo deve essere letto dal terzo campo GRMERC del file dell'anagrafica
grmerc= anagr.get("GRMERC3"); // legge il codice del gruppo
descr= _rel->lfile(-GMC3).get("S0"); // legge la sua descriziona dalla tabella
}
set_row(i+1, "@75g%-5s@81g%-50s", (const char *)grmerc, (const char *)descr);
}
}
set_row(n_max+2, "@5s@7g@50s@58g@15.5n@83g@15.5n@105g@15.5n", FLD(LF_ANAGR, "CODFORN"), FLD(LF_CLIFO, "RAGSOC"), FLD(LF_ANAGR, "COSTSTD"), FLD(LF_ANAGR, "PESO"), FLD(LF_ANAGR, "TARA")); // imposta la penultima linea
if (_st_umart) set_row(n_max+2, "@80g@2s", FLD(LF_ANAGR, "UMP")); // se è abilitata la stampa delle unità di misura aggiunge l'u.m. del peso
set_row(n_max+3, "@15.5n@23g@15.5n@45g@f@48g@f", FLD(LF_ANAGR, "PPCONF"), FLD(LF_ANAGR, "PPCOLLO"), FLD(LF_ANAGR, "ARTPROD"), FLD(LF_ANAGR, "RIORDINO")); // imposta l'ultima linea
if (_st_fisc) set_row(n_max+3, "@51g@f@54g@5s@60g@1s@62g@3s@66g@3n@70g@3n@74g@6n@81g@3s@85g@3n@89g@3n@93g@6n@100g@10s@111g@4s@116g@4s", // imposta i dati fiscali sull'ultima linea
FLD(LF_ANAGR, "ARTFIS"), FLD(LF_ANAGR, "RAGGFIS"), FLD(LF_ANAGR, "CLASSEFIS"),
FLD(LF_ANAGR, "CATCONA"), FLD(LF_ANAGR, "GRUPPOA"), FLD(LF_ANAGR, "CONTOA"), FLD(LF_ANAGR, "SOTTOCA"),
FLD(LF_ANAGR, "CATCONV"), FLD(LF_ANAGR, "GRUPPOV"), FLD(LF_ANAGR, "CONTOV"), FLD(LF_ANAGR, "SOTTOCV"),
FLD(LF_ANAGR, "CLASSDOG"), FLD(LF_ANAGR, "CODIVA"), FLD(LF_ANAGR, "CODIVAR"));
set_row(n_max+4, ""); // aggiunge due linee vuote
set_row(n_max+5, "");
}
*/
}
void TStampa_condizioni_vendita::process_link(int id, const char *text) {
/*if (id== _anagr_link_id) {
TString body= "1|"; // istanzia la stringa per il corpo del messaggio e gli aggiunge il numero della chiave e il separatore
body << text; // aggiunge al corpo del messaggio il codice dell'articolo per riempire la chiave
TMessage msg(ANAMAG_APP, MSG_LN, (const char *)body); // crea il messaggio per l'applicazione di anagrafica di magazzino
msg.send(); // invia il messaggio
TExternal_app ve2_3(ANAMAG_APP); // crea l'applicazione esterna dell'anagrafica di magazzino
ve2_3.run(); // lancia l'applicazione esterna
}
*/
}
int ve3200(int argc, char* argv[]) {
TStampa_condizioni_vendita a;
a.run(argc, argv, "Stampa condizioni vendita");
return 0;
}

View File

@ -1,5 +1,5 @@
#define F_TIPO 101
#define F_CODCAT 102
#define F_SCONTO 103
#include "ve3200x.h"
#define F_TIPOCV 101

View File

@ -1,45 +1,26 @@
#include "VE3200.H" #include "ve3200.h"
// #define LF_SCONTI PAGE "Stampa condizioni di vendita " -1 -1 40 10
#define LF_ANAMAG 47
TOOLBAR "" 0 20 60 2 RADIOBUTTON F_TIPOCV 36
#include <toolbar.h>
ENDPAGE
PAGE "Archivio sconti documenti " 11 60 14
LISTBOX F_TIPO 1
BEGIN BEGIN
PROMPT 0 0 "" PROMPT 1 2 "Tipo di archivio "
ITEM "R|" ITEM "L|Listini"
FLAG "H" ITEM "C|Contratti"
// FIELD LF_SCONTI->TIPO ITEM "O|Offerte"
END END
STRING F_CODCAT 2 BUTTON DLG_SELECT 9 2
BEGIN BEGIN
PROMPT 3 2 "Codice " PROMPT -12 -1 "Selezione"
// FIELD LF_SCONTI->CODCAT MESSAGE EXIT,K_ENTER
FLAG "U"
END END
BUTTON DLG_QUIT 9 2
STRING F_SCONTO 25
BEGIN BEGIN
PROMPT 3 4 "Sconto documento " PROMPT -22 -1 ""
// FIELD LF_SCONTI->SCONTO
END
GROUPBOX DLG_NULL 60 7
BEGIN
PROMPT 0 0 ""
FLAG "R"
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

1
ve/ve3200x.h Executable file
View File

@ -0,0 +1 @@

458
ve/ve3200x.uml Executable file
View File

@ -0,0 +1,458 @@
#include <lffiles.h>
#include "ve3200x.h"
PAGE "Stampa condizioni di vendita" -1 -1 72 14
STRING F_TIPO 1 // tipo di archivio
BEGIN
PROMPT 100 100 ""
FLAG "DU"
END
STRING F_L_CATVEN 2 // categoria di vendita, solo listini
BEGIN
PROMPT 2 2 "Cat. vendita "
FLAG "U"
USE %CVE
INPUT CODTAB F_L_CATVEN
DISPLAY "Cat." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_L_CATVEN CODTAB
END
LIST F_C_TIPOCF 7 // tipo cliente/fornitore, solo contratti
BEGIN
PROMPT 2 2 "Tipo "
ITEM "C|Cliente"
ITEM "F|Fornit."
END
STRING F_C_CODCF 6 // codice cliente/fornitore, solo contratti
BEGIN
PROMPT 22 2 "Codice "
FLAG "U"
USE LF_CLIFO
INPUT TIPOCF F_C_TIPOCF
INPUT CODCF F_C_CODCF
DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_C_TIPOCF TIPOCF
OUTPUT F_C_CODCF CODCF
END
STRING F_L_COD 3 // codice listino, solo listini
BEGIN
PROMPT 2 4 "Codice listino "
FLAG "U"
USE LF_CONDV
INPUT TIPO F_TIPO SELECT
INPUT CATVEN F_L_CATVEN
INPUT COD F_L_COD
DISPLAY "C.V." CATVEN
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO
OUTPUT F_L_CATVEN CATVEN
OUTPUT F_L_COD COD
END
NUMBER F_C_COD 3 // codice contratto, solo contratti
BEGIN
PROMPT 2 4 "Numero contratto "
USE LF_CONDV
INPUT TIPO F_TIPO SELECT
INPUT TIPOCF F_C_TIPOCF
INPUT CODCF F_C_CODCF
INPUT COD F_C_COD
DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Numero" COD
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO
OUTPUT F_C_TIPOCF TIPOCF
OUTPUT F_C_CODCF CODCF
OUTPUT F_C_COD COD
END
STRING F_O_COD 3 // codice offerta, solo offerte
BEGIN
PROMPT 2 3 "Codice offerta "
FLAG "U"
USE LF_CONDV
INPUT TIPO F_TIPO SELECT
INPUT COD F_O_COD
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO
OUTPUT F_O_COD COD
END
LIST F_TIPORIGHE 8 // listbox per tipo di selezione righe
BEGIN
PROMPT 2 6 "Righe "
ITEM "A|Articolo " MESSAGE CLEAR,F_DARIGA_A|ENABLE,F_DARIGA_A|SHOW,F_DARIGA_A|CLEAR,F_ARIGA_A|ENABLE,F_ARIGA_A|SHOW,F_ARIGA_A|HIDE,F_DARIGA_G|HIDE,F_DARIGA_R|HIDE,F_ARIGA_G|HIDE,F_ARIGA_R
ITEM "G|Gr. merc." MESSAGE CLEAR,F_DARIGA_G|ENABLE,F_DARIGA_G|SHOW,F_DARIGA_G|CLEAR,F_ARIGA_G|ENABLE,F_ARIGA_G|SHOW,F_ARIGA_A|HIDE,F_DARIGA_A|HIDE,F_DARIGA_R|HIDE,F_ARIGA_A|HIDE,F_ARIGA_R
ITEM "R|Rag. fis." MESSAGE CLEAR,F_DARIGA_R|ENABLE,F_DARIGA_R|SHOW,F_DARIGA_R|CLEAR,F_ARIGA_R|ENABLE,F_ARIGA_R|SHOW,F_ARIGA_R|HIDE,F_DARIGA_A|HIDE,F_DARIGA_G|HIDE,F_ARIGA_A|HIDE,F_ARIGA_G
END
BOOLEAN F_TUTTERIGHE // checkbox per selezione di tutte le righe
BEGIN
PROMPT 20 6 "Tutte"
MESSAGE TRUE DISABLE,F_TIPORIGHE|DISABLE,F_DARIGA_A|DISABLE,F_DARIGA_G|DISABLE,F_DARIGA_R|DISABLE,F_ARIGA_A|DISABLE,F_ARIGA_G|DISABLE,F_ARIGA_R
MESSAGE FALSE ENABLE,F_TIPORIGHE|ENABLE,F_DARIGA_A|ENABLE,F_DARIGA_G|ENABLE,F_DARIGA_R|ENABLE,F_ARIGA_A|ENABLE,F_ARIGA_G|ENABLE,F_ARIGA_R
END
STRING F_DARIGA_A 20 // riga articolo di inizio
BEGIN
PROMPT 2 8 "Da "
USE LF_ANAGR
INPUT CODART F_R_CODRIGA_A
DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_CODRIGA_A CODART
END
STRING F_DARIGA_G 20 // riga gruppo merceologico di inizio
BEGIN
PROMPT 2 8 "Da "
USE %GMC
INPUT CODTAB F_R_CODRIGA_G
DISPLAY "Gr. merc." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_G CODTAB
MESSAGE COPY,F_DARIGA_A
END
STRING F_DARIGA_R 20 // riga raggruppamento fiscale di inizio
BEGIN
PROMPT 2 8 "Da "
USE %RFA
INPUT CODTAB F_R_CODRIGA_R
DISPLAY "Ragg. fisc." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_R CODTAB
MESSAGE COPY,F_DARIGA_A
END
STRING F_ARIGA_A 20 // riga articolo di fine
BEGIN
PROMPT 2 9 "A "
USE LF_ANAGR
INPUT CODART F_R_CODRIGA_A
DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_CODRIGA_A CODART
END
STRING F_ARIGA_G 20 // riga gruppo merceologico di fine
BEGIN
PROMPT 2 9 "A "
USE %GMC
INPUT CODTAB F_R_CODRIGA_G
DISPLAY "Gr. merc." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_G CODTAB
MESSAGE COPY,F_DARIGA_A
END
STRING F_ARIGA_R 20 // riga raggruppamento fiscale di fine
BEGIN
PROMPT 2 9 "A "
USE %RFA
INPUT CODTAB F_R_CODRIGA_R
DISPLAY "Ragg. fisc." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_R CODTAB
MESSAGE COPY,F_DARIGA_A
END
GROUPBOX DLG_NULL 71 10 // groupbox attorno agli ultimi tre checkbox
BEGIN
PROMPT 0 1 ""
END
BOOLEAN F_TESTACOMP // checkbox per stampa completa della testata
BEGIN
PROMPT 2 11 "Testata completa"
END
BOOLEAN F_RICHECOMP // checkbox per stampa completa delle righe
BEGIN
PROMPT 2 12 "Righe complete"
END
BOOLEAN F_L_LISTVALUTA // checkbox per stampa del listino in valuta o in lire
BEGIN
PROMPT 2 13 "Listino in valuta"
END
GROUPBOX DLG_NULL 71 5 // groupbox attorno agli ultimi tre checkbox
BEGIN
PROMPT 0 10 ""
END
/* -------------------------------------------------------------------------
STRING F_TIPO 1
BEGIN
PROMPT 100 100 ""
FIELD LF_CONDV->TIPO
FLAG "DU"
KEY 1
CHECKTYPE REQUIRED
END
// campo riservato ai listini
STRING F_L_CATVEN 2
BEGIN
PROMPT 2 2 "Cat. vendita "
FIELD LF_CONDV->CATVEN
FLAG "U"
KEY 1
USE %CVE
INPUT CODTAB F_L_CATVEN
DISPLAY "Cat." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_L_CATVEN CODTAB
CHECKTYPE REQUIRED
END
// campo riservato ai contratti
LIST F_C_TIPOCF 7
BEGIN
PROMPT 2 2 "Tipo "
FIELD LF_CONDV->TIPOCF
KEY 1
ITEM "C|Cliente"
ITEM "F|Fornit."
CHECKTYPE REQUIRED
END
// campo riservato ai contratti
STRING F_C_CODCF 6
BEGIN
PROMPT 22 2 "Codice "
FIELD LF_CONDV->CODCF
FLAG "U"
KEY 1
USE LF_CLIFO
INPUT TIPOCF F_C_TIPOCF
INPUT CODCF F_C_CODCF
DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_C_TIPOCF TIPOCF
OUTPUT F_C_CODCF CODCF
CHECKTYPE REQUIRED
END
// campo riservato ai listini
STRING F_L_COD 3
BEGIN
PROMPT 2 4 "Codice listino "
FIELD LF_CONDV->COD
FLAG "U"
KEY 1
USE LF_CONDV
INPUT TIPO F_TIPO SELECT
INPUT CATVEN F_L_CATVEN
INPUT COD F_L_COD
DISPLAY "C.V." CATVEN
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO
OUTPUT F_L_CATVEN CATVEN
OUTPUT F_L_COD COD
CHECKTYPE REQUIRED
END
// campo riservato ai contratti
NUMBER F_C_COD 3
BEGIN
PROMPT 2 4 "Numero contratto "
FIELD LF_CONDV->COD
KEY 1
USE LF_CONDV
INPUT TIPO F_TIPO SELECT
INPUT TIPOCF F_C_TIPOCF
INPUT CODCF F_C_CODCF
INPUT COD F_C_COD
DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF
DISPLAY "Numero" COD
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO
OUTPUT F_C_TIPOCF TIPOCF
OUTPUT F_C_CODCF CODCF
OUTPUT F_C_COD COD
CHECKTYPE REQUIRED
END
// campo riservato alle offerte
STRING F_O_COD 3
BEGIN
PROMPT 2 3 "Codice offerta "
FIELD LF_CONDV->COD
FLAG "U"
KEY 1
USE LF_CONDV
INPUT TIPO F_TIPO SELECT
INPUT COD F_O_COD
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO
OUTPUT F_O_COD COD
CHECKTYPE REQUIRED
END
----------------------------------------------------------------------------
LIST F_R_TIPORIGA 8
BEGIN
PROMPT 2 5 "Riga "
FIELD LF_RCONDV->TIPORIGA
FLAG "P"
KEY 1
ITEM "A|Articolo" // MESSAGE ENABLE,F_CODRIGA_A|SHOW,F_CODRIGA_A|CLEAR,F_CODRIGA_G|HIDE,F_CODRIGA_G|CLEAR,F_CODRIGA_R|HIDE,F_CODRIGA_R
ITEM "G|Gr. merc." // MESSAGE ENABLE,F_CODRIGA_G|SHOW,F_CODRIGA_G|CLEAR,F_CODRIGA_A|HIDE,F_CODRIGA_A|CLEAR,F_CODRIGA_R|HIDE,F_CODRIGA_R
ITEM "R|Rag. fis." // MESSAGE ENABLE,F_CODRIGA_R|SHOW,F_CODRIGA_R|CLEAR,F_CODRIGA_A|HIDE,F_CODRIGA_A|CLEAR,F_CODRIGA_G|HIDE,F_CODRIGA_G
END
STRING F_R_CODRIGA_A 20
BEGIN
PROMPT 19 5 "Codice "
FIELD LF_RCONDV->CODRIGA
KEY 1
USE LF_ANAGR
INPUT CODART F_R_CODRIGA_A
DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_CODRIGA_A CODART
CHECKTYPE REQUIRED
END
STRING F_R_CODRIGA_G 20
BEGIN
PROMPT 19 5 "Codice "
FIELD LF_RCONDV->CODRIGA
KEY 1
USE %GMC
INPUT CODTAB F_R_CODRIGA_G
DISPLAY "Gr. merc." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_G CODTAB
CHECKTYPE REQUIRED
MESSAGE COPY,F_R_CODRIGA_A
END
STRING F_R_CODRIGA_R 20
BEGIN
PROMPT 19 5 "Codice "
FIELD LF_RCONDV->CODRIGA
KEY 1
USE %RFA
INPUT CODTAB F_R_CODRIGA_R
DISPLAY "Ragg. fisc." CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_R CODTAB
CHECKTYPE REQUIRED
MESSAGE COPY,F_R_CODRIGA_A
END
----------------------------------------------------------------------------
STRING F_CODART_1 20
BEGIN
PROMPT 2 1 "Dall'art. "
FLAG "U"
USE LF_ANAGR
INPUT CODART F_CODART_1
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_1 CODART
OUTPUT F_DESCR_1 DESCR
CHECKTYPE NORMAL
END
STRING F_DESCR_1 50
BEGIN
PROMPT 2 2 "Descrizione "
USE LF_ANAGR KEY 2
INPUT DESCR F_DESCR_1
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_1 CODART
OUTPUT F_DESCR_1 DESCR
END
STRING F_CODART_2 20
BEGIN
PROMPT 2 4 "All'art. "
FLAG "U"
USE LF_ANAGR
INPUT CODART F_CODART_2
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_2 CODART
OUTPUT F_DESCR_2 DESCR
CHECKTYPE NORMAL
END
STRING F_DESCR_2 50
BEGIN
PROMPT 2 5 "Descrizione "
USE LF_ANAGR KEY 2
INPUT DESCR F_DESCR_2
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CODART_2 CODART
OUTPUT F_DESCR_2 DESCR
END
GROUPBOX DLG_NULL 71 7
BEGIN
PROMPT 0 0 ""
//FLAG "R"
END
BOOLEAN F_ST_UMART
BEGIN
PROMPT 2 8 "Stampa unita' di misura"
END
BOOLEAN F_ST_CODCORR
BEGIN
PROMPT 2 9 "Stampa codici corrispondenti"
END
BOOLEAN F_ST_FISC
BEGIN
PROMPT 2 10 "Stampa dati fiscali"
END
GROUPBOX DLG_NULL 71 5
BEGIN
PROMPT 0 7 "Controllo stampa"
//FLAG "R"
END
------------------------------------------------------------------------- */
BUTTON DLG_SELECT 9 2
BEGIN
PROMPT -12 -1 "Selezione"
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK