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:
parent
f0b8ff7b65
commit
4fe9b183f5
27
ve/ve1.url
Executable file
27
ve/ve1.url
Executable 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"
|
||||
|
||||
|
189
ve/ve2100.cpp
189
ve/ve2100.cpp
@ -1,100 +1,89 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
|
||||
#include "ve2100.h"
|
||||
|
||||
|
||||
|
||||
class TTabelle_sconti: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
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_destroy();
|
||||
virtual TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
|
||||
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
|
||||
|
||||
public:
|
||||
TTabelle_sconti() {}
|
||||
virtual ~TTabelle_sconti() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
bool TTabelle_sconti::user_create() {
|
||||
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||
|
||||
_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
|
||||
else {
|
||||
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
|
||||
}
|
||||
switch (_sconti) {
|
||||
case 'D': { // sconti documento
|
||||
_msk= new TMask("VE2100D"); // apre la maschera relativa
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'R': { // sconti di riga
|
||||
_msk= new TMask("VE2100R"); // apre la maschera relativa
|
||||
set_search_field(F_R_RICERCA); // setta il campo di ricerca
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'I': { // sconti incondizionati
|
||||
_msk= new TMask("VE2100I"); // apre la maschera relativa
|
||||
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[1]= F_I_SCCLIENTI;
|
||||
_sci_k_id[2]= F_I_ZONE;
|
||||
_sci_k_id[3]= F_I_CONDPAG;
|
||||
for (int i=0; i<4; i++) {
|
||||
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
|
||||
else _sci_k_enabled[i]= gotcha= TRUE; // se c'è almeno un campo abilitato "gotcha" esce TRUE dal ciclo
|
||||
}
|
||||
if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
|
||||
break;
|
||||
}
|
||||
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");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file)
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TTabelle_sconti::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
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[]) {
|
||||
TTabelle_sconti a;
|
||||
|
||||
a.run(argc, argv, "Tabella sconti ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.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 {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
char _sconti; // carattere che indica il tipo di tabella
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
|
||||
public:
|
||||
TTabelle_sconti() {}
|
||||
virtual ~TTabelle_sconti() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
bool TTabelle_sconti::user_create() {
|
||||
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
|
||||
if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando
|
||||
else {
|
||||
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
|
||||
}
|
||||
TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta
|
||||
switch (_sconti) {
|
||||
case 'D': // sconti documento
|
||||
_msk= new TMask("VE2100D"); // apre la maschera relativa
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'R': // sconti di riga
|
||||
_msk= new TMask("VE2100R"); // apre la maschera relativa
|
||||
set_search_field(F_R_RICERCA); // setta il campo di ricerca
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'I': // sconti incondizionati
|
||||
_msk= new TMask("VE2100I"); // apre la maschera relativa
|
||||
set_search_field(F_I_RICERCA); // setta il campo di ricerca
|
||||
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[2]= F_I_ZONE;
|
||||
sci_k_id[3]= F_I_CONDPAG;
|
||||
for (i=0; i<4; i++) {
|
||||
if (prassid.get_bool("ScoKey", "ve", i)) { // se nel file di config. il campo è abilitato...
|
||||
REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera...
|
||||
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");
|
||||
break;
|
||||
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");
|
||||
break;
|
||||
}
|
||||
if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file)
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TTabelle_sconti::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ve2100(int argc, char* argv[]) {
|
||||
TTabelle_sconti a;
|
||||
|
||||
a.run(argc, argv, "Tabella sconti ");
|
||||
return 0;
|
||||
}
|
||||
|
556
ve/ve2200.cpp
556
ve/ve2200.cpp
@ -1,268 +1,288 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
#include <tabutil.h>
|
||||
#include <mailbox.h>
|
||||
#include <execp.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "ve2200.h"
|
||||
#include "ve2300x.h" // include anche il file dei campi della maschera delle righe
|
||||
|
||||
#define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe
|
||||
|
||||
|
||||
|
||||
class TCondizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
TString16 _condven; // stringa che indica il tipo di archivio
|
||||
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
|
||||
bool _catven_on; // booleano di abilitazione del campo CATVEN
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
|
||||
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_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_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 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:
|
||||
TCondizioni_vendita() {}
|
||||
virtual ~TCondizioni_vendita() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
return (TCondizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::user_create() {
|
||||
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||
|
||||
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
|
||||
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
|
||||
else {
|
||||
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
|
||||
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
|
||||
}
|
||||
_condven.upper(); // rende la stringa upper-case
|
||||
_msk= new TMask("VE2200X");
|
||||
switch (_condven[0]) {
|
||||
case 'L': { // listini
|
||||
// settaggio dei campi da eliminare
|
||||
_tohide.set(F_C_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(F_C_OBBLIG);
|
||||
set_search_field(F_L_COD); // impostazione del campo di ricerca
|
||||
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
|
||||
_catven_on= (prassid.get_bool("CODLISCV")); // setta il booleano di abilitazione di CATVEN
|
||||
_msk->set_handler(F_L_CODLISSUCC, handle_codlissucc); // setta l'handler per il campo di codice successivo
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'C': // contratti
|
||||
// settaggio dei campi da eliminare
|
||||
_tohide.set(F_L_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_L_CATVEN);
|
||||
_tohide.set(F_L_CODLISSUCC);
|
||||
set_search_field(F_C_COD); // impostazione del campo di ricerca
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'O': // offerte
|
||||
// settaggio dei campi da eliminare
|
||||
_tohide.set(F_L_COD);
|
||||
_tohide.set(F_C_COD);
|
||||
_tohide.set(F_L_CATVEN);
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(F_C_OBBLIG);
|
||||
_tohide.set(F_L_CODLISSUCC);
|
||||
set_search_field(F_O_COD); // impostazione del campo di ricerca
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
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");
|
||||
break;
|
||||
}
|
||||
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
|
||||
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
|
||||
_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_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
|
||||
}
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
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)
|
||||
switch (_condven[0]) {
|
||||
case 'L': // listini
|
||||
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 << "|"; // 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
|
||||
break;
|
||||
case 'C': // contratti
|
||||
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 << "|"; // appende il separatore
|
||||
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
|
||||
break;
|
||||
case 'O': // offerte
|
||||
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 << "|"; // appende il separatore
|
||||
body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
}
|
||||
appname << _condven; // aggiunge al lancio dell'applicazione la selezione del tipo di archivio
|
||||
TMessage msg(cmd2name(appname), MSG_FS, (const char *)body); // istanzia il messaggio per l'applicazione
|
||||
msg.send(); // invia il messaggio all'applicazione
|
||||
TExternal_app ve2_2(appname); // istanzia l'applicazione esterna...
|
||||
ve2_2.run(); // ...la lancia e rimane in attesa del suo termine
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_datacam(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
|
||||
TString datacam(fld.get()); // legge la data di cambio nel campo corrente
|
||||
if (datacam.not_empty()) {
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
TString codval(m.get(F_CODVAL)); // prende il codice della valuta
|
||||
if (codval.not_empty()) {
|
||||
TTable cam("CAM"); // apre la tabella cambi
|
||||
cam.put("CODTAB", codval << datacam); // riempie la chiave
|
||||
if (cam.read() == NOERR) m.set(F_CAMBIO, cam.get("R10")); // se la lettura riesce il valore del cambio viene posto nel campo CAMBIO della maschera
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
if (fld.get().not_empty()) {
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
if (m.get(F_VALIN).not_empty()) {
|
||||
TDate valfin(fld.get()); // prende la data di fine validità
|
||||
TDate valin(m.get(F_VALIN)); // prende la data di inizio validità
|
||||
if (valfin<valin) {
|
||||
error_box("La data di inizio validità deve essere minore della data di fine");
|
||||
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;
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::write(const TMask &m) {
|
||||
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
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->write(); // invoca la scrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::rewrite(const TMask &m) {
|
||||
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
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
void TCondizioni_vendita::init_query_mode(TMask &m) {
|
||||
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) {
|
||||
if (_tohide[i]) {
|
||||
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NORMAL); // 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_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
|
||||
_msk->disable(F_L_CATVEN); // ...e disabilitato
|
||||
}
|
||||
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
|
||||
}
|
||||
|
||||
int ve2200(int argc, char* argv[]) {
|
||||
TCondizioni_vendita a;
|
||||
|
||||
a.run(argc, argv, "Condizioni di vendita ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
#include <tabutil.h>
|
||||
#include <mailbox.h>
|
||||
#include <execp.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "ve2200.h"
|
||||
#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 DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
|
||||
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
|
||||
|
||||
|
||||
|
||||
class TCondizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
TString16 _condven; // stringa che indica il tipo di archivio
|
||||
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
|
||||
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_destroy();
|
||||
virtual TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
|
||||
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_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
|
||||
static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo)
|
||||
|
||||
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 bool remove(); // metodo usato per cancellare il record sul file
|
||||
|
||||
public:
|
||||
TCondizioni_vendita() {}
|
||||
virtual ~TCondizioni_vendita() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
return (TCondizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TCondizioni_vendita::user_create() {
|
||||
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||
|
||||
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
|
||||
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
|
||||
else {
|
||||
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
|
||||
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
|
||||
}
|
||||
_condven.upper(); // rende la stringa upper-case
|
||||
_msk= new TMask("VE2200X");
|
||||
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
|
||||
switch (_condven[0]) {
|
||||
case 'L': { // listini
|
||||
if (!(prassid.get_bool("Ges", NULL, A_LISTINI))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
|
||||
else {
|
||||
// eliminazione campi di altri archivi
|
||||
DESTROY(F_C_COD);
|
||||
DESTROY(F_O_COD);
|
||||
DESTROY(F_C_TIPOCF);
|
||||
DESTROY(F_C_CODCF);
|
||||
DESTROY(F_C_OBBLIG);
|
||||
set_search_field(F_L_COD); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_LC_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
|
||||
_codlis_catven= prassid.get_bool("CodLisCV"); // setta il booleano di abilitazione delle categoria di vendita
|
||||
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;
|
||||
}
|
||||
break;
|
||||
}
|
||||
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
|
||||
DESTROY(F_L_COD);
|
||||
DESTROY(F_O_COD);
|
||||
DESTROY(F_L_CATVEN);
|
||||
DESTROY(F_LC_CODSUCC);
|
||||
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;
|
||||
}
|
||||
break;
|
||||
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
|
||||
DESTROY(F_L_COD);
|
||||
DESTROY(F_C_COD);
|
||||
DESTROY(F_L_CATVEN);
|
||||
DESTROY(F_C_TIPOCF);
|
||||
DESTROY(F_C_CODCF);
|
||||
DESTROY(F_C_OBBLIG);
|
||||
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;
|
||||
}
|
||||
break;
|
||||
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");
|
||||
break;
|
||||
}
|
||||
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
|
||||
_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(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à
|
||||
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);
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
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
|
||||
TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio
|
||||
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 body; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera)
|
||||
switch (_condven[0]) {
|
||||
case 'L': // listini
|
||||
body << F_R_L_RICERCA << "|"; // appende l'id del campo di ricerca
|
||||
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 << F_R_L_COD << "=" << m.get(F_L_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
case 'C': // contratti
|
||||
body << F_R_C_RICERCA << "|"; // appende l'id del campo di ricerca
|
||||
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 << F_R_C_CODCF << "=" << m.get(F_C_CODCF) << "|"; // appende il filtro sul campo codice cliente/fornitore
|
||||
body << F_R_C_COD << "=" << m.get(F_C_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
case 'O': // offerte
|
||||
body << F_R_O_RICERCA << "|"; // appende l'id del campo di ricerca
|
||||
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
|
||||
body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice
|
||||
break;
|
||||
}
|
||||
appname << _condven; // aggiunge al lancio dell'applicazione la selezione del tipo di archivio
|
||||
TMessage msg(cmd2name(appname), MSG_FS, (const char *)body); // istanzia il messaggio per l'applicazione
|
||||
msg.send(); // invia il messaggio all'applicazione
|
||||
TExternal_app ve2_2(appname); // istanzia l'applicazione esterna...
|
||||
ve2_2.run(); // ...la lancia e rimane in attesa del suo termine
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_datacam(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
|
||||
TString datacam(fld.get()); // legge la data di cambio nel campo corrente
|
||||
if (datacam.not_empty()) {
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
TString codval(m.get(F_CODVAL)); // prende il codice della valuta
|
||||
if (codval.not_empty()) {
|
||||
TTable cam("CAM"); // apre la tabella cambi
|
||||
cam.put("CODTAB", codval << datacam); // riempie la chiave
|
||||
if (cam.read() == NOERR) m.set(F_CAMBIO, cam.get("R10")); // se la lettura riesce il valore del cambio viene posto nel campo CAMBIO della maschera
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
if (fld.get().not_empty()) {
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
if (m.get(F_VALIN).not_empty()) {
|
||||
TDate valfin(fld.get()); // prende la data di fine validità
|
||||
TDate valin(m.get(F_VALIN)); // prende la data di inizio validità
|
||||
if (valfin<valin) {
|
||||
error_box("La data di inizio validità deve essere minore della data di fine");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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) {
|
||||
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
_rel->write(); // invoca la scrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
int TCondizioni_vendita::rewrite(const TMask &m) {
|
||||
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
|
||||
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
|
||||
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
bool TCondizioni_vendita::remove() {
|
||||
TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale
|
||||
TLocalisamfile rcondv(LF_RCONDV); // apre il file delle righe per ottenenre il record corrente
|
||||
TRectype delrec(rcondv.curr()); // istanzia il record basato sul file delle righe, da usare come campione
|
||||
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
|
||||
TCursor delcur(&delrel, "", 1, &delrec, &delrec); // istanzia il cursore di cancellazione sulla relazione delle righe
|
||||
long n= delcur.items(); // legge il numero di elementi del cursore
|
||||
delcur.freeze(); // congela il cursore al suo stato attuale
|
||||
bool proceed= FALSE; // istanzia il booleano di conferma alla cancellazione
|
||||
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[]) {
|
||||
TCondizioni_vendita a;
|
||||
|
||||
a.run(argc, argv, "Condizioni di vendita ");
|
||||
return 0;
|
||||
}
|
||||
|
@ -13,12 +13,14 @@
|
||||
#define F_GESTSCAGL 121
|
||||
#define F_GESTSCO 122
|
||||
#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
|
||||
#define F_L_CATVEN 131
|
||||
#define F_L_COD 132
|
||||
#define F_L_CODLISSUCC 133
|
||||
#define F_LC_CODSUCC 133 // campo comune anche ai contratti
|
||||
|
||||
// campi riservati ai contratti
|
||||
#define F_C_TIPOCF 141
|
||||
|
@ -11,7 +11,7 @@ STRING F_TIPO 1
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
FIELD LF_CONDV->TIPO
|
||||
FLAG "DU"
|
||||
FLAG "DUP"
|
||||
KEY 1
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
@ -141,8 +141,8 @@ BEGIN
|
||||
DISPLAY "Valuta" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CODVAL CODTAB
|
||||
MESSAGE ENABLE,F_CAMBIO|ENABLE,F_DATACAM
|
||||
MESSAGE EMPTY "1",F_CAMBIO|DISABLE,F_CAMBIO|CLEAR,F_DATACAM|DISABLE,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|ENABLE,F_IMPLORDI
|
||||
END
|
||||
|
||||
NUMBER F_CAMBIO 15 5
|
||||
@ -206,33 +206,63 @@ BEGIN
|
||||
FIELD LF_CONDV->OBBLIG
|
||||
END
|
||||
|
||||
STRING F_SEQRIC 3
|
||||
LIST F_SEQRIC_1 8
|
||||
BEGIN
|
||||
PROMPT 2 17 "Sequenza ricerca "
|
||||
FIELD LF_CONDV->SEQRIC
|
||||
FLAG "U"
|
||||
PROMPT 2 16 "Sequenza ricerca "
|
||||
FIELD LF_CONDV->SEQRIC[1,1]
|
||||
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
|
||||
|
||||
// campo riservato ai listini
|
||||
STRING F_L_CODLISSUCC 3
|
||||
STRING F_LC_CODSUCC 3
|
||||
BEGIN
|
||||
PROMPT 33 17 "Codice listino succ. "
|
||||
PROMPT 2 17 "Codice successivo "
|
||||
FIELD LF_CONDV->CODLISSUCC
|
||||
FLAG "U"
|
||||
USE LF_CONDV
|
||||
INPUT TIPO F_TIPO 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 "Descrizione@50" DESCR
|
||||
OUTPUT F_L_CODLISSUCC COD
|
||||
OUTPUT F_LC_CODSUCC COD
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
// bottone di lancio dell'applicazione delle righe
|
||||
BUTTON BTN_RIGHE 63 1
|
||||
BEGIN
|
||||
PROMPT 0 -1 "Editing delle righe di questa testata"
|
||||
PROMPT 0 -1 "Righe di questa testata"
|
||||
MESSAGE K_F5
|
||||
END
|
||||
|
||||
|
521
ve/ve2300.cpp
521
ve/ve2300.cpp
@ -1,253 +1,268 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
|
||||
#include "ve2300.h"
|
||||
|
||||
|
||||
|
||||
class TRighe_condizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
bool _catven_on; // booleano di abilitazione del campo CATVEN
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
|
||||
static void hide_and_show_codriga(TMask &); // 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_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
|
||||
|
||||
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 void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
|
||||
|
||||
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() {}
|
||||
virtual ~TRighe_condizioni_vendita() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
return (TRighe_condizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::user_create() {
|
||||
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||
|
||||
_rcondven= "*"; // inizializzazione dell'indicatore del tipo di archivio
|
||||
if (argc()>2) { // se c'è, prende il tipo di archivio dalla linea di comando
|
||||
TString temp(argv(2));
|
||||
_rcondven= temp.left(1); // prende solo il primo carattere
|
||||
} else {
|
||||
TMask choose("VE2300"); // istanzia la maschera di scelta del tipo di archivio
|
||||
if (choose.run() == K_ENTER) _rcondven= choose.get(F_TIPORCV); // prende il tipo di archivio dalla maschera
|
||||
}
|
||||
_rcondven.upper(); // rende la stringa upper-case
|
||||
_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
|
||||
_catven_on= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione di CATVEN
|
||||
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
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'C': // contratti
|
||||
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_R_L_COD);
|
||||
_tohide.set(F_R_O_COD);
|
||||
_tohide.set(F_R_LO_UM);
|
||||
_tohide.set(F_R_L_RICERCA);
|
||||
_tohide.set(F_R_O_RICERCA);
|
||||
_tohide.set(F_R_O_ARTES);
|
||||
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
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'O': // offerte
|
||||
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_R_C_TIPOCF);
|
||||
_tohide.set(F_R_C_CODCF);
|
||||
_tohide.set(F_R_L_COD);
|
||||
_tohide.set(F_R_C_COD);
|
||||
_tohide.set(F_R_L_RICERCA);
|
||||
_tohide.set(F_R_C_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
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
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");
|
||||
break;
|
||||
}
|
||||
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
|
||||
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
|
||||
_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
|
||||
}
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void TRighe_condizioni_vendita::hide_and_show_codriga(TMask &m) {
|
||||
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_campo= m.get(F_R_TIPORIGA)[0]; // prende il tag in TIPORIGA del campo da abilitare
|
||||
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
|
||||
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...
|
||||
m.efield(id_campi[i]).check_type(CHECK_REQUIRED); // ...abilitato al checking...
|
||||
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 (_rcondven != "C") { // se non stiamo lavorando sui contratti...
|
||||
if (tag_campo=='A') { // ...ed è stata selezionata una riga di articoli...
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // ...l'unità di misura viene attivata al checking...
|
||||
m.enable(F_R_LO_UM); // ...e abilitata...
|
||||
} else { // ...altrimenti, se è stata selezionata una riga non di articoli...
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // ...l'unità di misura viene rimossa dal checking...
|
||||
m.disable(F_R_LO_UM); // ...e disabilitata
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
if ((k==K_TAB) && fld.get().not_empty()) {
|
||||
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
|
||||
TMask &m= fld.mask(); // prende la maschera principale
|
||||
TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita)
|
||||
condv.put("TIPO", _rcondven); // riempie il campo "TIPO"
|
||||
switch (_rcondven[0]) {
|
||||
case 'L': // riempie il resto della chiave dei listini
|
||||
condv.put("CATVEN", m.get(F_R_L_CATVEN));
|
||||
condv.put("COD", m.get(F_R_L_COD));
|
||||
break;
|
||||
case 'C': // riempie il resto della chiave dei contratti
|
||||
condv.put("TIPOCF", m.get(F_R_C_TIPOCF));
|
||||
condv.put("CODCF", m.get(F_R_C_CODCF));
|
||||
condv.put("COD", m.get(F_R_C_COD));
|
||||
break;
|
||||
case 'O': // riempie il resto della chiave delle offerte
|
||||
condv.put("COD", m.get(F_R_O_COD));
|
||||
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.get_bool("GESTUM")) {
|
||||
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // disabilita il checking sul campo "unità di misura"
|
||||
m.disable(F_R_LO_UM); // disabilita il campo "unità di misura"
|
||||
} 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"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCAGL")) {
|
||||
m.efield(F_R_NSCAGL).check_type(CHECK_NONE); // disabilita il checking sul campo "quantità limite scaglione"
|
||||
m.disable(F_R_NSCAGL); // disabilita il campo "quantità limite scaglione"
|
||||
m.disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||
} else {
|
||||
m.efield(F_R_NSCAGL).check_type(CHECK_REQUIRED); // abilita il checking sul campo "quantità limite scaglione"
|
||||
m.enable(F_R_NSCAGL); // abilita il campo "quantità limite scaglione"
|
||||
m.enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCO")) {
|
||||
m.disable(F_R_SCONTO); // disabilita il campo "sconto"
|
||||
m.disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
|
||||
m.disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
|
||||
m.disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
|
||||
m.disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
|
||||
m.disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
|
||||
} else {
|
||||
m.enable(F_R_SCONTO); // abilita il campo "sconto"
|
||||
m.enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
|
||||
m.enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
|
||||
m.enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
|
||||
m.enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
|
||||
m.enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio"
|
||||
}
|
||||
return TRUE;
|
||||
} else {
|
||||
error_box("Non esiste una testata corrispondente alla chiave specificata");
|
||||
return FALSE;
|
||||
}
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
int TRighe_condizioni_vendita::write(const TMask &m) {
|
||||
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
if (_rcondven != "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
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->write(); // invoca la scrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
int TRighe_condizioni_vendita::rewrite(const TMask &m) {
|
||||
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
if (_rcondven != "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
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->rewrite(); // invoca la riscrittura 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[]) {
|
||||
TRighe_condizioni_vendita a;
|
||||
|
||||
a.run(argc, argv, "Righe condizioni vendita ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.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 {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
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_destroy();
|
||||
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; } // ritorna il flag di cambio maschera a seconda dei modi di funzionamento, in questa applicazione la maschera è una sola quindi il flag è FALSE
|
||||
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(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_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
|
||||
|
||||
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
|
||||
|
||||
public:
|
||||
TRighe_condizioni_vendita() {}
|
||||
virtual ~TRighe_condizioni_vendita() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
|
||||
return (TRighe_condizioni_vendita &)main_app();
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool TRighe_condizioni_vendita::user_create() {
|
||||
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
|
||||
|
||||
_rcondven= "*"; // inizializzazione dell'indicatore del tipo di archivio
|
||||
if (argc()>2) { // se c'è, prende il tipo di archivio dalla linea di comando
|
||||
TString temp(argv(2));
|
||||
_rcondven= temp.left(1); // prende solo il primo carattere
|
||||
} else {
|
||||
TMask choose("VE2300"); // istanzia la maschera di scelta del tipo di archivio
|
||||
if (choose.run() == K_ENTER) _rcondven= choose.get(F_TIPORCV); // prende il tipo di archivio dalla maschera
|
||||
}
|
||||
_rcondven.upper(); // rende la stringa upper-case
|
||||
_msk= new TMask("VE2300X");
|
||||
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
|
||||
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
|
||||
_msk->set_handler(F_R_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'C': // contratti
|
||||
_gest_um= hidden; // rimuove la gestione delle unità di misura
|
||||
DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
DESTROY(F_R_L_COD);
|
||||
DESTROY(F_R_O_COD);
|
||||
DESTROY(F_R_LO_UM);
|
||||
_msk->hide(F_R_L_RICERCA);
|
||||
_msk->hide(F_R_O_RICERCA);
|
||||
_msk->hide(F_R_O_ARTES);
|
||||
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
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'O': // offerte
|
||||
_gest_um= disactivated; // attiva di default la gestione delle unità di misura pur lasciando il campo disabilitato
|
||||
DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
DESTROY(F_R_C_TIPOCF);
|
||||
DESTROY(F_R_C_CODCF);
|
||||
DESTROY(F_R_L_COD);
|
||||
DESTROY(F_R_C_COD);
|
||||
_msk->hide(F_R_L_RICERCA);
|
||||
_msk->hide(F_R_C_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
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
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");
|
||||
break;
|
||||
}
|
||||
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
|
||||
_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
|
||||
hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
}
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
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
|
||||
char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
|
||||
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
|
||||
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
|
||||
if (tag_campo == tag_campi[i]) { CREATE(id_campi[i]); } // il campo indicato con il tag viene reso visibile
|
||||
else { DESTROY(id_campi[i]); } // i campi non corrispondenti al tag vengono resi invisibili
|
||||
}
|
||||
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
|
||||
}
|
||||
switch (_gest_um) {
|
||||
case hidden: // se l'unità di misura deve essere fuori dai piedi...
|
||||
DESTROY(F_R_LO_UM); // ...il campo viene relativo soppresso
|
||||
break;
|
||||
case disabled: // se l'unità di misura deve essere tra i piedi (ma inutilizzabile)
|
||||
case disactivated:
|
||||
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) {
|
||||
if (k==K_SPACE) hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
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
|
||||
TMask *_msk= app()._msk; // prende il puntatore alla maschera principale dell'applicazione
|
||||
TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita)
|
||||
condv.put("TIPO", _rcondven); // riempie il campo "TIPO"
|
||||
switch (_rcondven[0]) {
|
||||
case 'L': // riempie il resto della chiave dei listini
|
||||
condv.put("CATVEN", _msk->get(F_R_L_CATVEN));
|
||||
condv.put("COD", _msk->get(F_R_L_COD));
|
||||
break;
|
||||
case 'C': // riempie il resto della chiave dei contratti
|
||||
condv.put("TIPOCF", _msk->get(F_R_C_TIPOCF));
|
||||
condv.put("CODCF", _msk->get(F_R_C_CODCF));
|
||||
condv.put("COD", _msk->get(F_R_C_COD));
|
||||
break;
|
||||
case 'O': // riempie il resto della chiave delle offerte
|
||||
condv.put("COD", _msk->get(F_R_O_COD));
|
||||
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 (_gest_um != hidden) { // se le unità di misura possono essere utilizzate...
|
||||
if (!(condv.get_bool("GESTUM"))) _gest_um= disabled; // ma nella testata sono disabilitate, setta la disabilitazione del campo "unità di misura"...
|
||||
else _gest_um= disactivated; // altrimenti ne setta la possibile abilitazione
|
||||
}
|
||||
hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura"
|
||||
if (!condv.get_bool("GESTSCAGL")) {
|
||||
KILL(F_R_NSCAGL); // disabilita il campo "numero scaglione"
|
||||
_msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||
} else {
|
||||
REVIVE(F_R_NSCAGL); // abilita il campo "numero scaglione"
|
||||
_msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCO")) {
|
||||
_msk->disable(F_R_SCONTO); // disabilita il campo "sconto"
|
||||
_msk->disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
|
||||
_msk->disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
|
||||
_msk->disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
|
||||
_msk->disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
|
||||
_msk->disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
|
||||
} else {
|
||||
_msk->enable(F_R_SCONTO); // abilita il campo "sconto"
|
||||
_msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
|
||||
_msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
|
||||
_msk->enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
|
||||
_msk->enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
|
||||
_msk->enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio"
|
||||
}
|
||||
return TRUE;
|
||||
} else {
|
||||
error_box("Non esiste una testata corrispondente alla chiave specificata");
|
||||
return FALSE;
|
||||
}
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
int TRighe_condizioni_vendita::write(const TMask &m) {
|
||||
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
if (_rcondven != "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
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->write(); // invoca la scrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
int TRighe_condizioni_vendita::rewrite(const TMask &m) {
|
||||
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
|
||||
if (_rcondven != "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
|
||||
TRectype &r= f.curr(); // prende il record corrente del file principale
|
||||
f.zero("TIPOCF"); // svuota il campo TIPOCF
|
||||
}
|
||||
_rel->rewrite(); // invoca la riscrittura della relazione
|
||||
return (_rel->status()); // ritorna lo stato della relazione
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ve2300(int argc, char* argv[]) {
|
||||
TRighe_condizioni_vendita a;
|
||||
|
||||
a.run(argc, argv, "Righe condizioni vendita ");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ STRING F_R_TIPO 1
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
FIELD LF_RCONDV->TIPO
|
||||
FLAG "DU"
|
||||
FLAG "DUP"
|
||||
KEY 1
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
@ -121,15 +121,16 @@ BEGIN
|
||||
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
|
||||
ITEM "A|Articolo"
|
||||
ITEM "G|Gr. merc."
|
||||
ITEM "R|Rag. fis."
|
||||
END
|
||||
|
||||
STRING F_R_CODRIGA_A 20
|
||||
BEGIN
|
||||
PROMPT 19 5 "Codice "
|
||||
FIELD LF_RCONDV->CODRIGA
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE LF_ANAGR
|
||||
INPUT CODART F_R_CODRIGA_A
|
||||
@ -143,6 +144,7 @@ STRING F_R_CODRIGA_G 20
|
||||
BEGIN
|
||||
PROMPT 19 5 "Codice "
|
||||
FIELD LF_RCONDV->CODRIGA
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE %GMC
|
||||
INPUT CODTAB F_R_CODRIGA_G
|
||||
@ -157,6 +159,7 @@ STRING F_R_CODRIGA_R 20
|
||||
BEGIN
|
||||
PROMPT 19 5 "Codice "
|
||||
FIELD LF_RCONDV->CODRIGA
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE %RFA
|
||||
INPUT CODTAB F_R_CODRIGA_R
|
||||
@ -179,6 +182,7 @@ STRING F_R_LO_UM 2 // campo riservato a listini e offerte
|
||||
BEGIN
|
||||
PROMPT 21 7 "U.M. "
|
||||
FIELD LF_RCONDV->UM
|
||||
FLAG "U"
|
||||
KEY 1
|
||||
USE LF_UMART KEY 2
|
||||
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
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
USE LF_RCONDV
|
||||
FLAG "D"
|
||||
USE LF_RCONDV SELECT (CATVEN==#F_R_L_CATVEN)&&(COD==#F_R_L_COD)
|
||||
INPUT TIPO F_R_TIPO SELECT
|
||||
INPUT CATVEN F_R_L_CATVEN SELECT
|
||||
INPUT COD F_R_L_COD SELECT
|
||||
//INPUT CATVEN F_R_L_CATVEN
|
||||
//INPUT COD F_R_L_COD
|
||||
INPUT TIPORIGA F_R_TIPORIGA
|
||||
INPUT CODRIGA F_R_CODRIGA_A
|
||||
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
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
USE LF_RCONDV
|
||||
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 TIPOCF F_R_C_TIPOCF SELECT
|
||||
INPUT CODCF F_R_C_CODCF SELECT
|
||||
INPUT COD F_R_C_COD SELECT
|
||||
//INPUT TIPOCF F_R_C_TIPOCF
|
||||
//INPUT CODCF F_R_C_CODCF
|
||||
//INPUT COD F_R_C_COD
|
||||
INPUT TIPORIGA F_R_TIPORIGA
|
||||
INPUT CODRIGA F_R_CODRIGA_A
|
||||
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
|
||||
BEGIN
|
||||
PROMPT 100 100 ""
|
||||
USE LF_RCONDV
|
||||
FLAG "D"
|
||||
USE LF_RCONDV SELECT COD==#F_R_L_COD
|
||||
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 CODRIGA F_R_CODRIGA_A
|
||||
INPUT UM F_R_LO_UM
|
||||
@ -288,8 +292,6 @@ BOOLEAN F_R_ADDIVA
|
||||
BEGIN
|
||||
PROMPT 2 11 "Addebito IVA"
|
||||
FIELD LF_RCONDV->ADDIVA
|
||||
MESSAGE TRUE ENABLE,F_R_CODIVA
|
||||
MESSAGE FALSE DISABLE,F_R_CODIVA
|
||||
END
|
||||
|
||||
STRING F_R_CODIVA 4
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <xvt.h>
|
||||
|
||||
//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 ve3400(int argc, char* argv[]); // stampa anagrafica di magazzino
|
||||
|
||||
@ -15,9 +15,9 @@ int main( int argc, char** argv) {
|
||||
|
||||
switch (r) {
|
||||
//case 0: rt = ve3100(argc, argv); break;
|
||||
//case 1: rt = ve3200(argc, argv); break;
|
||||
//case 2: rt = ve3300(argc, argv); break;
|
||||
case 3: rt = ve3400(argc, argv); break;
|
||||
case 1: rt = ve3200(argc, argv); break;
|
||||
//case 2: rt = ve3300(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;
|
||||
}
|
||||
return (rt);
|
||||
|
208
ve/ve3200.cpp
Executable file
208
ve/ve3200.cpp
Executable 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;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#define F_TIPO 101
|
||||
#define F_CODCAT 102
|
||||
#define F_SCONTO 103
|
||||
|
||||
#include "ve3200x.h"
|
||||
|
||||
#define F_TIPOCV 101
|
||||
|
||||
|
@ -1,45 +1,26 @@
|
||||
#include "VE3200.H"
|
||||
#include "ve3200.h"
|
||||
|
||||
// #define LF_SCONTI
|
||||
#define LF_ANAMAG 47
|
||||
PAGE "Stampa condizioni di vendita " -1 -1 40 10
|
||||
|
||||
TOOLBAR "" 0 20 60 2
|
||||
#include <toolbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Archivio sconti documenti " 11 60 14
|
||||
|
||||
LISTBOX F_TIPO 1
|
||||
RADIOBUTTON F_TIPOCV 36
|
||||
BEGIN
|
||||
PROMPT 0 0 ""
|
||||
ITEM "R|"
|
||||
FLAG "H"
|
||||
// FIELD LF_SCONTI->TIPO
|
||||
PROMPT 1 2 "Tipo di archivio "
|
||||
ITEM "L|Listini"
|
||||
ITEM "C|Contratti"
|
||||
ITEM "O|Offerte"
|
||||
END
|
||||
|
||||
STRING F_CODCAT 2
|
||||
BUTTON DLG_SELECT 9 2
|
||||
BEGIN
|
||||
PROMPT 3 2 "Codice "
|
||||
// FIELD LF_SCONTI->CODCAT
|
||||
FLAG "U"
|
||||
PROMPT -12 -1 "Selezione"
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
|
||||
STRING F_SCONTO 25
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT 3 4 "Sconto documento "
|
||||
// FIELD LF_SCONTI->SCONTO
|
||||
END
|
||||
|
||||
|
||||
GROUPBOX DLG_NULL 60 7
|
||||
|
||||
BEGIN
|
||||
PROMPT 0 0 ""
|
||||
FLAG "R"
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
|
||||
ENDMASK
|
||||
|
1
ve/ve3200x.h
Executable file
1
ve/ve3200x.h
Executable file
@ -0,0 +1 @@
|
||||
|
458
ve/ve3200x.uml
Executable file
458
ve/ve3200x.uml
Executable 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
|
Loading…
x
Reference in New Issue
Block a user