Archivi sconti e condizioni di vendita (listini contratti campagne)
git-svn-id: svn://10.65.10.50/trunk@1736 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
176e05ce6c
commit
bfbdd47c8e
52
ve/ve2.cpp
52
ve/ve2.cpp
@ -1,40 +1,24 @@
|
||||
#include <xvt.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include <checks.h>
|
||||
#include <xvt.h>
|
||||
|
||||
// #define MAIN
|
||||
|
||||
|
||||
#define usage "Errore - Utilizzo: %s -{0|1|2|3}"
|
||||
|
||||
extern int ve2100(int argc, char* argv[]); // listini
|
||||
extern int ve2200(int argc, char* argv[]); // contratti
|
||||
extern int ve2300(int argc, char* argv[]); // offerte-campagne
|
||||
extern int ve2100(int argc, char* argv[]); // tabelle sconti (di riga/di documento/incondizionati)
|
||||
extern int ve2200(int argc, char* argv[]); // testate listini/contratti/offerte
|
||||
extern int ve2300(int argc, char* argv[]); // righe listini/contratti/offerte
|
||||
extern int ve2400(int argc, char* argv[]); // anagrafica di magazzino
|
||||
|
||||
int main( int argc, char** argv)
|
||||
{
|
||||
int rt = -1;
|
||||
const int r = (argc > 1) ? atoi( &argv[1][1] ) : -1;
|
||||
|
||||
switch (r)
|
||||
{
|
||||
case 0:
|
||||
rt = ve2100( argc, argv );
|
||||
break;
|
||||
case 1:
|
||||
rt = ve2200( argc, argv );
|
||||
break;
|
||||
case 2:
|
||||
rt = ve2300( argc, argv );
|
||||
break;
|
||||
case 3:
|
||||
rt = ve2400( argc, argv );
|
||||
break;
|
||||
default:
|
||||
error_box( usage, argv[0] );
|
||||
break;
|
||||
}
|
||||
return rt;
|
||||
|
||||
int main( int argc, char** argv) {
|
||||
int rt= -1;
|
||||
const int r= (argc>1)?(atoi(&argv[1][1])):(-1);
|
||||
|
||||
switch (r) {
|
||||
case 0: rt = ve2100(argc, argv); break;
|
||||
case 1: rt = ve2200(argc, argv); break;
|
||||
case 2: rt = ve2300(argc, argv); break;
|
||||
case 3: rt = ve2400(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);
|
||||
}
|
||||
|
||||
|
229
ve/ve2200.cpp
229
ve/ve2200.cpp
@ -1,60 +1,211 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <config.h>
|
||||
#include <tabutil.h>
|
||||
|
||||
#include "ve2200.h"
|
||||
|
||||
#define LF_CONDV 52
|
||||
#define LF_RCONDV 53
|
||||
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
class TCondizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
#ifndef __RELAPP_H
|
||||
#include <relapp.h>
|
||||
#endif
|
||||
TString16 _condven; // stringa che indica il tipo di archivio
|
||||
short _tohide[10]; // vettore degli identificatori di campi che devono essere nascosti
|
||||
|
||||
#ifndef __LFFILES_H
|
||||
#include <lffiles.h>
|
||||
#endif
|
||||
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; }
|
||||
|
||||
class TConcli_application : public TRelation_application
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
static bool handler_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio)
|
||||
static bool handler_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
|
||||
static bool handler_codlissucc(TMask_field &, KEY); // handler del campo CODLISSUCC (codice listino successivo)
|
||||
static bool handler_seqric(TMask_field &, KEY); // handler del campo SEQRIC (sequenza di ricerca)
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask* get_mask(int mode) { return _msk;}
|
||||
virtual bool changing_mask(int mode) { return FALSE;}
|
||||
virtual TRelation* get_relation() const { return _rel;}
|
||||
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:
|
||||
|
||||
TConcli_application( ) { };
|
||||
virtual ~TConcli_application() { }
|
||||
public:
|
||||
TCondizioni_vendita() {}
|
||||
virtual ~TCondizioni_vendita() {}
|
||||
};
|
||||
|
||||
bool TConcli_application::user_create()
|
||||
{
|
||||
_msk = new TMask( "VE2200" );
|
||||
_rel = new TRelation( LF_CONDV );
|
||||
// _rel.add( "%PIP" )
|
||||
|
||||
|
||||
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[0]= 5;
|
||||
_tohide[1]= F_C_COD;
|
||||
_tohide[2]= F_O_COD;
|
||||
_tohide[3]= F_C_TIPOCF;
|
||||
_tohide[4]= F_C_CODCF;
|
||||
_tohide[5]= 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
|
||||
if (toupper(prassid.get("CATVEN_ON")[0])!='T') _msk->disable(F_L_CATVEN); // disabilita il campo CATVEN se non è abilitato nella config.
|
||||
_msk->set_handler(F_L_CODLISSUCC, handler_codlissucc); // setta l'handler per il campo di codice successivo
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
}
|
||||
case 'C': { // contratti
|
||||
// settaggio dei campi da eliminare
|
||||
_tohide[0]= 4;
|
||||
_tohide[1]= F_L_COD;
|
||||
_tohide[2]= F_O_COD;
|
||||
_tohide[3]= F_L_CATVEN;
|
||||
_tohide[4]= 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[0]= 7;
|
||||
_tohide[1]= F_L_COD;
|
||||
_tohide[2]= F_C_COD;
|
||||
_tohide[3]= F_L_CATVEN;
|
||||
_tohide[4]= F_C_TIPOCF;
|
||||
_tohide[5]= F_C_CODCF;
|
||||
_tohide[6]= F_C_OBBLIG;
|
||||
_tohide[7]= 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(F_DATACAM, handler_datacam); // imposta l'handler per il campo della data del cambio
|
||||
_msk->set_handler(F_VALFIN, handler_valfin); // imposta l'handler per il campo di fine validità
|
||||
_msk->set_handler(F_SEQRIC, handler_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 TConcli_application::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
return TRUE;
|
||||
bool TCondizioni_vendita::handler_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;
|
||||
}
|
||||
|
||||
int ve2200(int argc, char* argv[])
|
||||
{
|
||||
bool TCondizioni_vendita::handler_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;
|
||||
}
|
||||
|
||||
TConcli_application a;
|
||||
bool TCondizioni_vendita::handler_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;
|
||||
}
|
||||
|
||||
a.run(argc, argv, "Gestione contratti " );
|
||||
bool TCondizioni_vendita::handler_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 (int i=1; i<=_tohide[0]; i++) {
|
||||
if (_msk->field(_tohide[i]).is_edit()) _msk->efield(_tohide[i]).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile
|
||||
_msk->disable(_tohide[i]); // disabilita il campo
|
||||
_msk->hide(_tohide[i]); // rende invisibile il campo
|
||||
}
|
||||
_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;
|
||||
}
|
||||
|
48
ve/ve2200.h
48
ve/ve2200.h
@ -1,49 +1,5 @@
|
||||
#define F_TIPO 101
|
||||
#define F_TIPOCF 104
|
||||
#define F_CODCF 105
|
||||
#define F_CODCF1 106
|
||||
#define F_CODDIV1 107
|
||||
#define F_COD 108
|
||||
#define F_COD1 109
|
||||
#define F_DESCR 110
|
||||
#define F_CODVAL 111
|
||||
#define F_CODVAL1 112
|
||||
#define F_CAMBIO 113
|
||||
#define F_DATACAM 114
|
||||
#define F_VALIN 115
|
||||
#define F_VALFIN 116
|
||||
#define F_IMPLORDI 117
|
||||
#define F_GESTUM 118
|
||||
#define F_GESTSCAGL 119
|
||||
#define F_GESTSCO 120
|
||||
#define F_SCONST 121
|
||||
#define F_OBBLIG 122
|
||||
|
||||
#define F_SEQRIC 124
|
||||
#define F_FLART 125
|
||||
#define F_FLCAT 126
|
||||
#define F_FLLIN 127
|
||||
#define F_FLRAGG 128
|
||||
#include "ve2200x.h"
|
||||
|
||||
#define F_CATVEN2 129
|
||||
#define F_COD2 130
|
||||
#define F_TIPOCV 101
|
||||
|
||||
|
||||
#define F_SHEET2 302
|
||||
|
||||
#define FS_QLIM 101
|
||||
#define FS_PREZZO 102
|
||||
#define FS_SCONTO 103
|
||||
#define FS_ADDIVA 104
|
||||
#define FS_CODIVA 105
|
||||
#define FS_PRECPROVV 106
|
||||
#define FS_QOM 107
|
||||
#define FS_QBASE 108
|
||||
#define FS_CODARTOM 109
|
||||
#define FS_PROMAGGIO 110
|
||||
#define FS_UMOM 111
|
||||
#define FS_CODLOTTO 112
|
||||
|
||||
#define FS_CODIVA1 114
|
||||
#define FS_CODARTOM1 115
|
||||
#define FS_CODLOTTO1 116
|
||||
|
219
ve/ve2300.cpp
219
ve/ve2300.cpp
@ -1,59 +1,210 @@
|
||||
|
||||
#include <relapp.h>
|
||||
|
||||
#include "ve2300.h"
|
||||
|
||||
#define LF_CONDV 52
|
||||
#define LF_RCONDV 53
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __RELAPP_H
|
||||
#include <relapp.h>
|
||||
#endif
|
||||
// !! verificare le disabilitazioni incrociate tra i campi e le loro relative riabilitazioni
|
||||
// !! durante i cambi di chiave e dei campi con ricerche custom
|
||||
|
||||
#ifndef __LFFILES_H
|
||||
#include <lffiles.h>
|
||||
#endif
|
||||
|
||||
class Tofferte_application : public TRelation_application
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
class TRighe_condizioni_vendita: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale
|
||||
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
virtual TMask* get_mask(int mode) { return _msk;}
|
||||
virtual bool changing_mask(int mode) { return FALSE;}
|
||||
virtual TRelation* get_relation() const { return _rel;}
|
||||
virtual TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
|
||||
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
|
||||
TBit_array _todisable; // vettore degli identificatori di campi che devono essere disabilitati
|
||||
|
||||
Tofferte_application( ) { };
|
||||
virtual ~Tofferte_application() { }
|
||||
TRighe_condizioni_vendita() {}
|
||||
virtual ~TRighe_condizioni_vendita() {}
|
||||
};
|
||||
|
||||
bool Tofferte_application::user_create()
|
||||
{
|
||||
_msk = new TMask( "VE2300" );
|
||||
_rel = new TRelation( LF_CONDV );
|
||||
// _rel.add( "%PIP" )
|
||||
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
|
||||
|
||||
warning_box("Questa applicazione non è ancora stata definitivamente debuggata"); // !! rimuovere la warning box a fine debugging
|
||||
_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_C_TIPOCF); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(F_C_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_C_RICERCA);
|
||||
_tohide.set(F_O_RICERCA);
|
||||
_tohide.set(F_CO_CODLOTTO);
|
||||
_tohide.set(F_O_ARTES);
|
||||
set_search_field(F_L_RICERCA); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'C': // contratti
|
||||
_tohide.set(F_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_L_COD);
|
||||
_tohide.set(F_O_COD);
|
||||
_tohide.set(F_LO_UM);
|
||||
_tohide.set(F_L_RICERCA);
|
||||
_tohide.set(F_O_RICERCA);
|
||||
_tohide.set(F_O_ARTES);
|
||||
set_search_field(F_C_RICERCA); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_C_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
|
||||
gotcha= TRUE;
|
||||
break;
|
||||
case 'O': // offerte
|
||||
_tohide.set(F_L_CATVEN); // settaggio dei campi da eliminare...
|
||||
_tohide.set(F_C_TIPOCF);
|
||||
_tohide.set(F_C_CODCF);
|
||||
_tohide.set(F_L_COD);
|
||||
_tohide.set(F_C_COD);
|
||||
_tohide.set(F_L_RICERCA);
|
||||
_tohide.set(F_C_RICERCA);
|
||||
set_search_field(F_O_RICERCA); // impostazione del campo di ricerca
|
||||
_msk->set_handler(F_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)
|
||||
_todisable.reset(); // inizializza il vettore dei campi da disabilitare
|
||||
_msk->set_handler(F_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
|
||||
}
|
||||
return (gotcha);
|
||||
}
|
||||
|
||||
bool TRighe_condizioni_vendita::user_destroy() {
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool Tofferte_application::user_destroy()
|
||||
{
|
||||
delete _msk;
|
||||
delete _rel;
|
||||
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
TBit_array &_todisable= app()._todisable; // vettore per la disabilitazione dei campi, ricavato dalla proprietà dell'applicazione
|
||||
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
|
||||
if ((fld.get() != "A") && (_rcondven != "C")) _todisable.set(F_LO_UM); // se il tipo riga è "Articolo" e non siamo sui contratti, l'unità di misura deve essere disabilitata
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int ve2300(int argc, char* argv[])
|
||||
{
|
||||
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
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_L_CATVEN));
|
||||
condv.put("COD", m.get(F_L_COD));
|
||||
break;
|
||||
case 'C': // riempie il resto della chiave dei contratti
|
||||
condv.put("TIPOCF", m.get(F_C_TIPOCF));
|
||||
condv.put("CODCF", m.get(F_C_CODCF));
|
||||
condv.put("COD", m.get(F_C_COD));
|
||||
break;
|
||||
case 'O': // riempie il resto della chiave delle offerte
|
||||
condv.put("COD", m.get(F_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
|
||||
TBit_array &_todisable= app()._todisable; // vettore per la disabilitazione dei campi, ricavato dalla proprietà dell'applicazione
|
||||
_todisable.reset(); // resetta il vettore dei campi da disabilitare
|
||||
if (!condv.get_bool("GESTUM")) _todisable.set(F_LO_UM); // mette nel vettore di dabilitazione il campo "unità di misura" della maschera (campo chiave)
|
||||
if (!condv.get_bool("GESTSCAGL")) {
|
||||
_todisable.set(F_NSCAGL); // mette nel vettore di dabilitazione il campo "n.ro scaglione" della maschera (campo chiave)
|
||||
m.disable(F_QLIM); // disabilita il campo "quantità limite scaglione"
|
||||
}
|
||||
if (!condv.get_bool("GESTSCO")) {
|
||||
m.disable(F_SCONTO); // disabilita il campo "sconto"
|
||||
m.disable(F_QOM); // disabilita il campo "quantità art. omaggio"
|
||||
m.disable(F_QBASE); // disabilita il campo "quantità base x sconto"
|
||||
m.disable(F_CODARTOM); // disabilita il campo "codice articolo omaggio"
|
||||
m.disable(F_PROMAGGIO); // disabilita il campo "prezzo omaggio"
|
||||
m.disable(F_UMOM); // disabilita 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;
|
||||
}
|
||||
|
||||
Tofferte_application a;
|
||||
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
|
||||
}
|
||||
|
||||
a.run(argc, argv, "Gestione offerte/campagne " );
|
||||
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
|
||||
}
|
||||
}
|
||||
for (i= (short)_todisable.first_one(); i<=(short)_todisable.last_one(); i++) { // ciclo sul vettore dei campi da disabilitare
|
||||
if (_todisable[i]) {
|
||||
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NONE); // disabilita il checking sul campo se è editabile
|
||||
_msk->disable(i); // disabilita il campo
|
||||
}
|
||||
}
|
||||
_msk->set(F_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;
|
||||
}
|
||||
|
||||
|
44
ve/ve2300.h
44
ve/ve2300.h
@ -1,45 +1,5 @@
|
||||
#define F_TIPO 101
|
||||
#define F_COD 108
|
||||
#define F_COD1 109
|
||||
#define F_DESCR 110
|
||||
#define F_CODVAL 111
|
||||
#define F_CODVAL1 112
|
||||
#define F_CAMBIO 113
|
||||
#define F_DATACAM 114
|
||||
#define F_VALIN 115
|
||||
#define F_VALFIN 116
|
||||
#define F_IMPLORDI 117
|
||||
#define F_GESTUM 118
|
||||
#define F_GESTSCAGL 119
|
||||
#define F_GESTSCO 120
|
||||
#define F_SCONST 121
|
||||
|
||||
#define F_SEQRIC 124
|
||||
#define F_FLART 125
|
||||
#define F_FLCAT 126
|
||||
#define F_FLLIN 127
|
||||
#define F_FLRAGG 128
|
||||
#include "ve2300x.h"
|
||||
|
||||
#define F_CATVEN2 129
|
||||
#define F_COD2 130
|
||||
#define F_TIPORCV 101
|
||||
|
||||
|
||||
#define F_SHEET3 303
|
||||
|
||||
#define FS_QLIM 101
|
||||
#define FS_PREZZO 102
|
||||
#define FS_SCONTO 103
|
||||
#define FS_ADDIVA 104
|
||||
#define FS_CODIVA 105
|
||||
#define FS_PRECPROVV 106
|
||||
#define FS_QOM 107
|
||||
#define FS_QBASE 108
|
||||
#define FS_CODARTOM 109
|
||||
#define FS_PROMAGGIO 110
|
||||
#define FS_UMOM 111
|
||||
#define FS_CODLOTTO 112
|
||||
#define FS_ARTES 113
|
||||
|
||||
#define FS_CODIVA1 114
|
||||
#define FS_CODARTOM1 115
|
||||
#define FS_CODLOTTO1 116
|
||||
|
225
ve/ve2400.cpp
225
ve/ve2400.cpp
@ -1,29 +1,15 @@
|
||||
|
||||
#include <relapp.h>
|
||||
#include <tabutil.h>
|
||||
#include <msksheet.h>
|
||||
#include <assoc.h>
|
||||
#include <checks.h>
|
||||
|
||||
#include "ve2400.h"
|
||||
|
||||
#ifndef __CHECKS_H
|
||||
#include <checks.h>
|
||||
#endif
|
||||
|
||||
#ifndef __RELAPP_H
|
||||
#include <relapp.h>
|
||||
#endif
|
||||
|
||||
#ifndef __TABUTIL_H
|
||||
#include <tabutil.h>
|
||||
#endif
|
||||
|
||||
#ifndef __MSKSHEET_H
|
||||
#include <msksheet.h>
|
||||
#endif
|
||||
|
||||
#ifndef __ASSOC_H
|
||||
#include <assoc.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
class TAnamag_application: public TRelation_application {
|
||||
class TAnagrafica_magazzino: public TRelation_application {
|
||||
TMask *_msk; // maschera principale
|
||||
TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino)
|
||||
TLocalisamfile *_umart; // file di accesso alle unità di misura
|
||||
@ -35,9 +21,9 @@ class TAnamag_application: public TRelation_application {
|
||||
|
||||
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 TMask *get_mask(int) { return _msk; }
|
||||
virtual bool changing_mask(int) { return FALSE; }
|
||||
virtual TRelation *get_relation() const { return _rel; }
|
||||
virtual void init_insert_mode(TMask &);
|
||||
|
||||
virtual int read(TMask& m);
|
||||
@ -50,13 +36,13 @@ class TAnamag_application: public TRelation_application {
|
||||
static bool handle_sheet0_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura
|
||||
|
||||
public:
|
||||
TAnamag_application() {}
|
||||
virtual ~TAnamag_application() {}
|
||||
TAnagrafica_magazzino() {}
|
||||
virtual ~TAnagrafica_magazzino() {}
|
||||
};
|
||||
|
||||
|
||||
|
||||
bool TAnamag_application::user_create() {
|
||||
bool TAnagrafica_magazzino::user_create() {
|
||||
_msk= new TMask("VE2400");
|
||||
_msk->set_handler(F_SHEET0, handle_sheet0);
|
||||
_msk->set_handler(F_SHEET1, handle_sheet1);
|
||||
@ -77,7 +63,7 @@ bool TAnamag_application::user_create() {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TAnamag_application::user_destroy() {
|
||||
bool TAnagrafica_magazzino::user_destroy() {
|
||||
delete _linee_rec2;
|
||||
delete _linee_rec1;
|
||||
delete _linee_rec0;
|
||||
@ -89,7 +75,7 @@ bool TAnamag_application::user_destroy() {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int TAnamag_application::read(TMask& m) {
|
||||
int TAnagrafica_magazzino::read(TMask& m) {
|
||||
int err= TRelation_application::read(m);
|
||||
if (err == NOERR) {
|
||||
TRectype rum(_umart->curr()); // prende il record corrente dal file delle unità di misura
|
||||
@ -146,7 +132,7 @@ int TAnamag_application::read(TMask& m) {
|
||||
return err;
|
||||
}
|
||||
|
||||
int TAnamag_application::write(const TMask& m) {
|
||||
int TAnagrafica_magazzino::write(const TMask& m) {
|
||||
int err= TRelation_application::write(m);
|
||||
if (err == NOERR) {
|
||||
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
||||
@ -210,7 +196,7 @@ int TAnamag_application::write(const TMask& m) {
|
||||
return err;
|
||||
}
|
||||
|
||||
int TAnamag_application::rewrite(const TMask& m) {
|
||||
int TAnagrafica_magazzino::rewrite(const TMask& m) {
|
||||
int err= TRelation_application::rewrite(m);
|
||||
if (err == NOERR) {
|
||||
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
||||
@ -274,7 +260,7 @@ int TAnamag_application::rewrite(const TMask& m) {
|
||||
return err;
|
||||
}
|
||||
|
||||
void TAnamag_application::init_insert_mode(TMask &m) {
|
||||
void TAnagrafica_magazzino::init_insert_mode(TMask &m) {
|
||||
TSheet_field &f= (TSheet_field &)m.field(F_SHEET0);
|
||||
if (f.items()==0) {
|
||||
TToken_string &row= f.row(-1); // aggiunge una riga allo sheet
|
||||
@ -285,98 +271,109 @@ void TAnamag_application::init_insert_mode(TMask &m) {
|
||||
}
|
||||
}
|
||||
|
||||
bool TAnamag_application::handle_sheet0(TMask_field &fld, KEY k) {
|
||||
bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k) {
|
||||
if (k==K_ENTER) {
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
for (int i= 0; i<f.items(); i++) {
|
||||
if (!v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
error_box("Le unità di misura devono essere diverse tra loro");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (i==f.items());
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
bool TAnamag_application::handle_sheet1(TMask_field &fld, KEY k) {
|
||||
if (k==K_ENTER) {
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
for (int i= 0; i<f.items(); i++) {
|
||||
if (!v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
error_box("I codici di lingua devono essere diversi tra loro");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (i==f.items());
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
bool TAnamag_application::handle_sheet2(TMask_field &fld, KEY k) {
|
||||
if (k==K_ENTER) {
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
TMask &m= fld.mask(); // prende la maschere d'origine del campo
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
|
||||
for (int i= 0; i<f.items(); i++) {
|
||||
if (!v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (i==f.items());
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
bool TAnamag_application::handle_sheet0_um(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
TMask &m= fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
|
||||
TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo
|
||||
CHECK(f != NULL, "Il puntatore allo sheet è nullo");
|
||||
TString16 me(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente)
|
||||
if ((f->selected() != 0) && me.not_empty()) {
|
||||
|
||||
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
|
||||
//
|
||||
// SHEET:
|
||||
// -----
|
||||
// riga u.m. f.c.
|
||||
// 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc)
|
||||
// ... ... ...
|
||||
// ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc)
|
||||
//
|
||||
// se (your==my) allora X=(your_fc/my_fc) ...chiaro, no!? :-)
|
||||
|
||||
TTable t("%UM");
|
||||
real x(0.0); // fattore di conversione dell'unità di misura corrente
|
||||
const TString16 you(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
|
||||
t.zero();
|
||||
t.put("CODTAB", me);
|
||||
if (t.read() == NOERR) {
|
||||
TString16 my(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
|
||||
real my_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
||||
t.zero();
|
||||
t.put("CODTAB", you);
|
||||
if (t.read() == NOERR) {
|
||||
TString16 your(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto
|
||||
real your_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
||||
if (your==my) {
|
||||
x= your_fc/my_fc;
|
||||
message_box("me:%s, my:%s, my_fc:%s, you:%s your:%s, your_fc:%s, x:%s", (const char *)me, (const char *)my, my_fc.stringa(), (const char *)you, (const char *)your, your_fc.stringa(), x.stringa());
|
||||
} // NON FUNZIONA UN CAZZO!
|
||||
if (f.items()>0) {
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
for (int i= 0; i<f.items(); i++) {
|
||||
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
error_box("Le unità di misura devono essere diverse tra loro");
|
||||
break;
|
||||
}
|
||||
real x(f.cell(i,1));
|
||||
if (x.is_zero()) { // controlla che il fattore di conversione (secondo elemento) non sia 0
|
||||
error_box("I fattori di conversione delle unità di misura non possono valere 0");
|
||||
break;
|
||||
}
|
||||
}
|
||||
TToken_string &row= f->row(f->selected()); // prende la riga corrente dello sheet
|
||||
row.add(x.stringa(), 1); // inserisce il valore precalcolato (0 se non è possibile calcolarlo);
|
||||
f->force_update(f->selected()); // forza l'aggiornamento della riga corrente dello sheet
|
||||
return (i==f.items());
|
||||
} else return TRUE;
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k) {
|
||||
if (k==K_ENTER) {
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
if (f.items()>1) {
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
for (int i= 0; i<f.items(); i++) {
|
||||
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
error_box("I codici di lingua devono essere diversi tra loro");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (i==f.items());
|
||||
} else return TRUE;
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
bool TAnagrafica_magazzino::handle_sheet2(TMask_field &fld, KEY k) {
|
||||
if (k==K_ENTER) {
|
||||
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
||||
if (f.items()>0) {
|
||||
TMask &m= fld.mask(); // prende la maschere d'origine del campo
|
||||
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
|
||||
v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
|
||||
for (int i= 0; i<f.items(); i++) {
|
||||
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
|
||||
error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (i==f.items());
|
||||
} else return TRUE;
|
||||
} else return TRUE;
|
||||
}
|
||||
|
||||
bool TAnagrafica_magazzino::handle_sheet0_um(TMask_field &fld, KEY k) {
|
||||
if (k==K_TAB) {
|
||||
TMask &m= fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
|
||||
TString16 me(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente)
|
||||
if (me.not_empty()) { // se il codice dell'unità di misura è vuoto non viene fatto alcun calcolo
|
||||
TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo
|
||||
CHECK(f != NULL, "Il puntatore allo sheet è nullo");
|
||||
if (f->selected() != 0) {
|
||||
|
||||
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
|
||||
//
|
||||
// SHEET:
|
||||
// -----
|
||||
// riga u.m. f.c.
|
||||
// 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc)
|
||||
// ... ... ...
|
||||
// ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc)
|
||||
//
|
||||
// se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-)
|
||||
|
||||
TTable t("%UMS");
|
||||
real x(0.0); // fattore di conversione dell'unità di misura corrente
|
||||
const TString16 you(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
|
||||
t.zero();
|
||||
t.put("CODTAB", me);
|
||||
if (t.read() == NOERR) {
|
||||
TString16 my(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
|
||||
real my_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
||||
t.zero();
|
||||
t.put("CODTAB", you);
|
||||
if (t.read() == NOERR) {
|
||||
TString16 your(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto
|
||||
real your_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
||||
if (your==my) {
|
||||
x= my_fc/your_fc; // calcola il rapporto tra i fattori di conversione
|
||||
x.round(5); // arrotonda il risultato a 5 decimali
|
||||
}
|
||||
}
|
||||
}
|
||||
m.set(FS_FCUM, x.stringa()); // il risultato viene scritto nel campo del fattore di conversione
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int ve2400(int argc, char* argv[]) {
|
||||
TAnamag_application a;
|
||||
TAnagrafica_magazzino a;
|
||||
|
||||
a.run(argc, argv, "Anagrafica di magazzino ");
|
||||
return 0;
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
#include <lffiles.h>
|
||||
#include "VE2400.H"
|
||||
|
||||
@ -47,7 +46,7 @@ END
|
||||
GROUPBOX DLG_NULL 71 5
|
||||
BEGIN
|
||||
PROMPT 0 0 ""
|
||||
FLAG "R"
|
||||
//FLAG "R"
|
||||
END
|
||||
|
||||
STRING F_GRMERC1 3
|
||||
@ -61,7 +60,7 @@ END
|
||||
STRING F_GRMERC1B 2
|
||||
BEGIN
|
||||
PROMPT 21 5 ""
|
||||
FIELD LF_ANAGR->GRMERC1[4,5]
|
||||
FIELD LF_ANAGR->GRMERC1[4,5]
|
||||
GROUP 1
|
||||
FLAG "U"
|
||||
MESSAGE EMPTY CLEAR,2@
|
||||
@ -101,7 +100,7 @@ END
|
||||
STRING F_GRMERC2B 2
|
||||
BEGIN
|
||||
PROMPT 21 6 ""
|
||||
FIELD LF_ANAGR->GRMERC2[4,5]
|
||||
FIELD LF_ANAGR->GRMERC2[4,5]
|
||||
GROUP 2
|
||||
FLAG "U"
|
||||
MESSAGE EMPTY CLEAR,3@
|
||||
@ -142,7 +141,7 @@ END
|
||||
STRING F_GRMERC3B 2
|
||||
BEGIN
|
||||
PROMPT 21 7 ""
|
||||
FIELD LF_ANAGR->GRMERC3[4,5]
|
||||
FIELD LF_ANAGR->GRMERC3[4,5]
|
||||
GROUP 3
|
||||
FLAG "U"
|
||||
NUM_EXPR (#F_GRMERC3=="")||((#F_GRMERC3!=#F_GRMERC1)&&(#F_GRMERC3!=#F_GRMERC2))
|
||||
@ -366,25 +365,25 @@ BEGIN
|
||||
PROMPT 1 17 "Classe doganale "
|
||||
FIELD LF_ANAGR->CLASSDOG
|
||||
FLAG "UZ"
|
||||
USE %CLD
|
||||
INPUT CODTAB F_CLASSDOG
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CLASSDOG CODTAB
|
||||
OUTPUT F_CLASSDOG1 S0
|
||||
CHECKTYPE NORMAL
|
||||
USE %CLD
|
||||
INPUT CODTAB F_CLASSDOG
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_CLASSDOG CODTAB
|
||||
OUTPUT F_CLASSDOG1 S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_CLASSDOG1 40
|
||||
BEGIN
|
||||
PROMPT 36 17 ""
|
||||
FLAG "D"
|
||||
USE %CLD KEY 2
|
||||
INPUT S0 F_CLASSDOG1
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
OUTPUT F_CLASSDOG CODTAB
|
||||
OUTPUT F_CLASSDOG1 S0
|
||||
USE %CLD KEY 2
|
||||
INPUT S0 F_CLASSDOG1
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
OUTPUT F_CLASSDOG CODTAB
|
||||
OUTPUT F_CLASSDOG1 S0
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
12
ve/veuml1.h
12
ve/veuml1.h
@ -1,7 +1,7 @@
|
||||
#ifndef __VEUML1_H
|
||||
#define __VEUML1_H
|
||||
|
||||
#ifndef __VEUML_H
|
||||
#ifndef __VEUML_H
|
||||
#include "VEUML.H"
|
||||
#endif
|
||||
|
||||
@ -16,11 +16,11 @@
|
||||
#define F_CIVCF 303
|
||||
#define F_NOME_VAL 304
|
||||
#define F_DESCODPAG 305
|
||||
#define F_DATASCAD1 306
|
||||
#define F_DATASCAD2 307
|
||||
#define F_DATASCAD3 308
|
||||
#define F_DATASCAD4 309
|
||||
#define F_DATASCAD5 310
|
||||
#define F_DATASCAD1 306
|
||||
#define F_DATASCAD2 307
|
||||
#define F_DATASCAD3 308
|
||||
#define F_DATASCAD4 309
|
||||
#define F_DATASCAD5 310
|
||||
#define F_BANCA_APP 311
|
||||
#define F_BANCA_PRE 312
|
||||
#define F_INDSP 313
|
||||
|
Loading…
x
Reference in New Issue
Block a user