correzione prima serie di errori

git-svn-id: svn://10.65.10.50/trunk@2684 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-03-20 16:15:18 +00:00
parent 2994f22df3
commit e68afa141a
27 changed files with 4136 additions and 4003 deletions

View File

@ -1,6 +1,4 @@
#include "batbtip.h" #include "batbtip.h"
//#include "ve4.h"
TOOLBAR "" 0 20 60 2 TOOLBAR "" 0 20 60 2
@ -10,11 +8,11 @@ ENDPAGE
PAGE "Tabella tipi di documento" -1 -1 60 14 PAGE "Tabella tipi di documento" -1 -1 60 14
GROUPBOX DLG_NULL 75 7 GROUPBOX DLG_NULL 75 7
BEGIN BEGIN
PROMPT 1 0 "" PROMPT 1 0 ""
FLAG "R" FLAG "R"
END END
STRING F_CODTAB 4 STRING F_CODTAB 4
BEGIN BEGIN

View File

@ -15,47 +15,51 @@ END
STRING F_UM 2 STRING F_UM 2
BEGIN BEGIN
PROMPT 2 2 "Unita' di misura " PROMPT 2 2 "Unita' di misura "
FIELD %UM->CODTAB FIELD CODTAB
KEY 1 KEY 1
FLAG "U" FLAG "U"
USE %UM USE %UMS
FLAG "U"
INPUT CODTAB F_UM INPUT CODTAB F_UM
DISPLAY "Codice " CODTAB DISPLAY "Codice " CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_UM CODTAB OUTPUT F_UM CODTAB
OUTPUT F_DESCR S0 OUTPUT F_DESCR S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_DESCR 50 STRING F_DESCR 50
BEGIN BEGIN
PROMPT 2 4 "Descrizione " PROMPT 2 4 "Descrizione "
FIELD %UM->S0 FIELD S0
KEY 2 KEY 2
USE %UM KEY 2 USE %UMS KEY 2
INPUT S0 F_DESCR INPUT S0 F_DESCR
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_UM CODTAB DISPLAY "Codice " CODTAB
OUTPUT F_DESCR S0 COPY OUTPUT F_UM
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_UMR 2 STRING F_UMR 2
BEGIN BEGIN
PROMPT 2 8 "Unita' di riferimento " PROMPT 2 8 "Unita' di riferimento "
FIELD %UM->S7 FIELD S7
FLAG "U" FLAG "U"
USE %UMS
INPUT CODTAB F_UMR
COPY DISPLAY F_UM
OUTPUT F_UMR CODTAB
CHECKTYPE NORMAL
ADD NONE
END END
NUMBER F_FC 15 5 NUMBER F_FC 15 5
BEGIN BEGIN
PROMPT 2 10 "Fattore conv. al rif. " PROMPT 2 10 "F.Conversione al riferim. "
FIELD %UM->R0 FIELD R10
VALIDATE REQIF_FUNC 1 F_UMR
WARNING "Fattore di conversione obbligatorio se specificata l'unita' di misura di riferimento"
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -87,7 +87,7 @@ void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
} }
} }
void TCliForVendite::update_mask( TMask_vendite& m, bool onload ) void TCliForVendite::update_mask( TVariable_mask& m, bool onload )
{ {
TString16 stato; TString16 stato;
@ -198,7 +198,7 @@ bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
return TRUE; return TRUE;
} }
void TCliForVendite::imposta_dati_comune( TMask_vendite& m ) void TCliForVendite::imposta_dati_comune( TVariable_mask& m )
{ {
TLocalisamfile comuni(LF_COMUNI); TLocalisamfile comuni(LF_COMUNI);
comuni.setkey( 1 ); comuni.setkey( 1 );
@ -217,7 +217,7 @@ void TCliForVendite::imposta_dati_comune( TMask_vendite& m )
m.set( F_PROVCOM, comuni.get( "PROVCOM" ) ); m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
} }
void TCliForVendite::imposta_indirizzo_spedizione( TMask_vendite& m ) void TCliForVendite::imposta_indirizzo_spedizione( TVariable_mask& m )
{ {
TString16 stato; TString16 stato;
if( occasionale( ) ) if( occasionale( ) )
@ -276,7 +276,7 @@ void TCliForVendite::imposta_indirizzo_spedizione( TMask_vendite& m )
m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) ); m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );
} }
void TCliForVendite::imposta_sconto_testa( TMask_vendite& m ) void TCliForVendite::imposta_sconto_testa( TVariable_mask& m )
{ {
TConfig ditta( CONFIG_DITTA ); TConfig ditta( CONFIG_DITTA );
TString16 codsconto; TString16 codsconto;
@ -349,7 +349,7 @@ void TCliForVendite::imposta_sconto_testa( TMask_vendite& m )
} }
} }
void TCliForVendite::imposta_valuta( TMask_vendite& m ) void TCliForVendite::imposta_valuta( TVariable_mask& m )
{ {
TConfig ditta( CONFIG_DITTA ); TConfig ditta( CONFIG_DITTA );

View File

@ -14,8 +14,8 @@
#endif #endif
#ifndef __TMASKVEN_H #ifndef __VARMASK_H
#include "tmaskven.h" #include <varmask.h>
#endif #endif
class TData_picker : public TRelation class TData_picker : public TRelation
@ -32,7 +32,7 @@ public:
int get_int( const int file, const TString& fieldname ); int get_int( const int file, const TString& fieldname );
long get_long( const int file, const TString& fieldname ); long get_long( const int file, const TString& fieldname );
bool get_bool( const int file, const TString& fieldname ); bool get_bool( const int file, const TString& fieldname );
void set( TMask_vendite& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); }; void set( TVariable_mask& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); };
}; };
class TCliFor : public TData_picker class TCliFor : public TData_picker
@ -65,11 +65,11 @@ class TCliForVendite : public TCliFor
public: public:
void update_mask( TMask_vendite& m, bool onload = FALSE ); void update_mask( TVariable_mask& m, bool onload = FALSE );
void imposta_dati_comune( TMask_vendite& m ); void imposta_dati_comune( TVariable_mask& m );
void imposta_valuta( TMask_vendite& m ); void imposta_valuta( TVariable_mask& m );
void imposta_indirizzo_spedizione( TMask_vendite& m ); void imposta_indirizzo_spedizione( TVariable_mask& m );
void imposta_sconto_testa( TMask_vendite& m ); void imposta_sconto_testa( TVariable_mask& m );
}; };

View File

@ -9,7 +9,7 @@
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
int rt = -1; int rt = -1;
const int r = (argc > 1) ? atoi( &argv[1][1] ) : -1; const int r = (argc > 1) ? atoi( &argv[1][1] ) : 1;
switch (r) switch (r)
{ {

View File

@ -242,7 +242,7 @@ bool TMotore_application::val_handler( TMask_field& f, KEY key )
// m.set( F_CAMBIO, "" ); // m.set( F_CAMBIO, "" );
// m.set( F_DATACAMBIO, "" ); // m.set( F_DATACAMBIO, "" );
app( ).clifo( ).imposta_valuta( ( TMask_vendite& ) m ); app( ).clifo( ).imposta_valuta( ( TVariable_mask& ) m );
return TRUE; return TRUE;
} }
@ -400,7 +400,7 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
if ( f.focusdirty( ) ) if ( f.focusdirty( ) )
{ {
app( ).clifo( ).load( cf, atol( f.get( ) ), "" ); app( ).clifo( ).load( cf, atol( f.get( ) ), "" );
app( ).clifo( ).update_mask( ( TMask_vendite& ) m ); app( ).clifo( ).update_mask( ( TVariable_mask& ) m );
if( f.mask( ).id2pos( F_OCCASEDIT ) > 0 ) if( f.mask( ).id2pos( F_OCCASEDIT ) > 0 )
{ {
if ( app( ).clifo( ).occasionale( ) && app( ).clifo( ).occas_mask( ).get( O_CODICE ).empty( ) ) if ( app( ).clifo( ).occasionale( ) && app( ).clifo( ).occas_mask( ).get( O_CODICE ).empty( ) )
@ -495,7 +495,7 @@ void TMotore_application::get_edit_mask( const char * profilo )
_proname = new TFilename( fn ); _proname = new TFilename( fn );
_proname->upper( ); _proname->upper( );
if ( _msk1 ) delete _msk1; if ( _msk1 ) delete _msk1;
_msk1 = new TMask_vendite( pro( ).get( "MSKFILE", "MAIN" ) ); _msk1 = new TVariable_mask( pro( ).get( "MSKFILE", "MAIN" ) );
// edit_mask( ).set( F_PROFILO, query_mask( ).get( F_PROFILO ) ); // edit_mask( ).set( F_PROFILO, query_mask( ).get( F_PROFILO ) );
// edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) ); // edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) );
_sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET ); _sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET );
@ -526,7 +526,7 @@ void TMotore_application::get_edit_mask( const char * profilo )
} }
} }
listbox.replace_items( keys, descrs ); listbox.replace_items( keys, descrs );
sheet( ).set_getmask( ss_getmask ); ((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" );
for ( i = 1; i <= numhandler; i ++ ) for ( i = 1; i <= numhandler; i ++ )
{ {
@ -638,7 +638,7 @@ int TMotore_application::read( TMask& m )
edit_mask( ).set( F_DESTIPODOC, query_mask( ).get( F_DESTIPODOC ) ); edit_mask( ).set( F_DESTIPODOC, query_mask( ).get( F_DESTIPODOC ) );
const char tipocf = m.get( F_TIPOCF )[ 0 ]; const char tipocf = m.get( F_TIPOCF )[ 0 ];
clifo( ).load( tipocf, m.get_int( F_CODCF ), rel( ).curr( ).get( "OCFPI" ) ); clifo( ).load( tipocf, m.get_int( F_CODCF ), rel( ).curr( ).get( "OCFPI" ) );
clifo( ).update_mask( ( TMask_vendite& ) m, TRUE ); clifo( ).update_mask( ( TVariable_mask& ) m, TRUE );
TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC ); TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC );
TRectype r = rdoc.curr( ); TRectype r = rdoc.curr( );
TRectype& trec = get_relation( )->curr( ); TRectype& trec = get_relation( )->curr( );

View File

@ -112,12 +112,12 @@
#include "ve1000o.h" #include "ve1000o.h"
#endif #endif
#ifndef __TMASKVEN_H #ifndef __VARMASK_H
#include "tmaskven.h" #include <varmask.h>
#endif #endif
#ifndef __EXECP_H #ifndef __EXECP_H
#include "execp.h" #include <execp.h>
#endif #endif
#ifndef __SCONTI_H #ifndef __SCONTI_H
@ -143,13 +143,13 @@ class TMotore_application : public TRelation_application
TMask* _msk; TMask* _msk;
// Puntatore alla maschera di modifica/inserimento ( dipende dal profilo ) // Puntatore alla maschera di modifica/inserimento ( dipende dal profilo )
TMask_vendite* _msk1; TVariable_mask* _msk1;
// puntatore alla relazione // puntatore alla relazione
TRelation* _rel; TRelation* _rel;
// Puntatore allo sheet delle righe documento // Puntatore allo sheet delle righe documento
TSheet_field* _sheet; TSheet_field * _sheet;
// Oggetto cliente per il motore // Oggetto cliente per il motore
TCliForVendite* _clifor; TCliForVendite* _clifor;
@ -253,11 +253,11 @@ public:
// Operazione // Operazione
const char tipocf( ){ return _tipocf; } const char tipocf( ) { return _tipocf; }
void tipocf( const char tcf ){ _tipocf = tcf; } void tipocf( const char tcf ) { _tipocf = tcf; }
bool valida_operazione( int operazione ); bool valida_operazione( int operazione );
TSheet_field& ss( ) const { return *_sheet; } TSheet_field & ss( ) const { return *_sheet; }
TMotore_application( ) { _pro = NULL; } TMotore_application( ) { _pro = NULL; }
virtual ~TMotore_application( ) { if ( _pro ) delete _pro; } virtual ~TMotore_application( ) { if ( _pro ) delete _pro; }
virtual const char* get_next_key( ); virtual const char* get_next_key( );

View File

@ -3,23 +3,33 @@
#include <relation.h> #include <relation.h>
#include <tabutil.h> #include <tabutil.h>
int numerazione_definitiva(TLocalisamfile& doc) { int numerazione_definitiva(TLocalisamfile& doc)
{
int err= NOERR; // istanzia la variabile per il codice d'errore int err= NOERR; // istanzia la variabile per il codice d'errore
TRectype &rec_doc= doc.curr(); // prende il record corrente dal file delle testate TRectype &rec_doc= doc.curr(); // prende il record corrente dal file delle testate
TTable tabnum("NUM"); // istanzia la tabella delle numerazioni TTable tabnum("NUM"); // istanzia la tabella delle numerazioni
tabnum.put("CODTAB", rec_doc.get("CODNUM")); // posiziona la tabella tabnum.put("CODTAB", rec_doc.get("CODNUM")); // posiziona la tabella
if ((err= tabnum.read(_isequal, _lock))==NOERR) { // legge la tabella bloccandone il record if ((err= tabnum.read(_isequal, _lock))==NOERR)
{ // legge la tabella bloccandone il record
long newndoc= tabnum.get_long("I1"); // legge il nuovo numero di documento dalla tabella long newndoc= tabnum.get_long("I1"); // legge il nuovo numero di documento dalla tabella
tabnum.put("I1", newndoc+1); // aggiorna il nuovo numero di documento nella tabella tabnum.put("I1", newndoc+1); // aggiorna il nuovo numero di documento nella tabella
doc.read(rec_doc, _isequal, _lock); // blocca il record corrente del file documenti doc.read(rec_doc, _isequal, _lock); // blocca il record corrente del file documenti
TRectype newrec_doc(rec_doc); // istanzia un nuovo record su quello corrente TRectype newrec_doc(rec_doc); // istanzia un nuovo record su quello corrente
newrec_doc.put("NDOC", newndoc); // scrive il nuovo numero di documento nel nuovo record newrec_doc.put("NDOC", newndoc); // scrive il nuovo numero di documento nel nuovo record
newrec_doc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione newrec_doc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
TRecord_array arr_rdoc(LF_RIGHEDOC, "NRIGA"); // istanzia il record array per le righe TRecord_array arr_rdoc(LF_RIGHEDOC, "NRIGA"); // istanzia il record array per le righe
if ((err= arr_rdoc.read(rec_doc))==NOERR) { // legge le righe del documento basandosi sul record con la vecchia chiave if ((err= arr_rdoc.read(rec_doc))==NOERR)
{ // legge le righe del documento basandosi sul record con la vecchia chiave
TRecord_array newarr_rdoc(arr_rdoc); // crea una copia del record array per tenere le nuove righe TRecord_array newarr_rdoc(arr_rdoc); // crea una copia del record array per tenere le nuove righe
for (int i=1; i<=newarr_rdoc.last_row(); i++) { // ciclo sui record delle righe
for (int i=1; i<=newarr_rdoc.last_row(); i++)
{ // ciclo sui record delle righe
TRectype &newrec_rdoc= newarr_rdoc.row(i, FALSE); // prende il record della riga corrente TRectype &newrec_rdoc= newarr_rdoc.row(i, FALSE); // prende il record della riga corrente
newrec_rdoc.put("NDOC", newndoc); // scrive il nuovo numero di documento newrec_rdoc.put("NDOC", newndoc); // scrive il nuovo numero di documento
newrec_rdoc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione newrec_rdoc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
} }

View File

@ -33,17 +33,17 @@
class TDocVen_Form: public TForm { class TDocVen_Form: public TForm {
TRelation &_firmrel; // relazione di gestione dei dati della ditta corrente TRelation &_firmrel; // relazione di gestione dei dati della ditta corrente
TString _module; // codice del modulo di carta associato a questo al form TString _module; // codice del modulo di carta associato a questo al form
TPiede_documento *_total_prog; // oggetto per i totalizzatori progressivi TPiede_documento *_total_prog; // oggetto per i totalizzatori progressivi
TRiga *_riga; // oggetto per la gestione della singola riga del documento TRiga *_riga; // oggetto per la gestione della singola riga del documento
TCliFor *_cliente; // oggetto per le informazioni sul cliente TCliFor *_cliente; // oggetto per le informazioni sul cliente
bool _cli_loaded; // flag che indica se l'oggetto cliente è già stato caricato bool _cli_loaded; // flag che indica se l'oggetto cliente è già stato caricato
protected: protected:
virtual void extended_parse_general(TScanner &); // gestione dei parametri estesi nella sezione general virtual void extended_parse_general(TScanner &); // gestione dei parametri estesi nella sezione general
virtual bool validate(TForm_item &, TToken_string &); // gestione dei messaggi estesi nei campi virtual bool validate(TForm_item &, TToken_string &); // gestione dei messaggi estesi nei campi
virtual word set_body(word p, bool u); // derivata per la gestione del totalizzatore virtual word set_body(word p, bool u); // derivata per la gestione del totalizzatore
public: public:
const TString &get_module_code() { return _module; } // ritorna il codice del modulo di carta const TString &get_module_code() { return _module; } // ritorna il codice del modulo di carta
TDocVen_Form(const char *, TRelation &); TDocVen_Form(const char *, TRelation &);
virtual ~TDocVen_Form(); virtual ~TDocVen_Form();
}; };
@ -59,19 +59,19 @@ TDocVen_Form::TDocVen_Form(const char* name, TRelation &rel): TForm(), _firmrel(
} }
TDocVen_Form::~TDocVen_Form() { TDocVen_Form::~TDocVen_Form() {
delete _total_prog; delete _total_prog;
delete _riga; delete _riga;
delete _cliente; delete _cliente;
} }
word TDocVen_Form::set_body(word p, bool u) { word TDocVen_Form::set_body(word p, bool u) {
if (u) { // se si sta effettivamente generando il body viene fatto anche il calcolo del totalizzatore if (u) { // se si sta effettivamente generando il body viene fatto anche il calcolo del totalizzatore
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC); TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
TRectype &recriga= rdoc.curr(); TRectype &recriga= rdoc.curr();
_riga->load(rdoc.curr()); _riga->load(rdoc.curr());
_riga->somma(*_total_prog); _riga->somma(*_total_prog);
} }
return TForm::set_body(p, u); return TForm::set_body(p, u);
} }
void TDocVen_Form::extended_parse_general(TScanner &scanner) { void TDocVen_Form::extended_parse_general(TScanner &scanner) {
@ -200,8 +200,8 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
if (align== "TOP") cf.y()= fi.y(); if (align== "TOP") cf.y()= fi.y();
if (align== "MIDDLE") cf.y()= fi.y()+ fi.effective_height()/2; if (align== "MIDDLE") cf.y()= fi.y()+ fi.effective_height()/2;
if (align== "BOTTOM") cf.y()= fi.y()+ fi.effective_height()-1; if (align== "BOTTOM") cf.y()= fi.y()+ fi.effective_height()-1;
if (align== "LEFT") cf.x()= fi.x(); if (align== "LEFT") cf.set_x(fi.x());
if (align== "RIGHT") cf.x()= fi.x()+ fi.width(); if (align== "RIGHT") cf.set_x(fi.x()+ fi.width());
i++; i++;
} }
return (TRUE); return (TRUE);
@ -289,38 +289,38 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
} // fine _CIFRELETTERE } // fine _CIFRELETTERE
if (code.left(6) == "_TOTAL") { if (code.left(6) == "_TOTAL") {
// totalizzatori di testata/coda, riga e progressione // totalizzatori di testata/coda, riga e progressione
// sintassi: _TOTAL_{CODA|RIGA|PROGRES},<totalizzatore>[,<campo form>] // sintassi: _TOTAL_{CODA|RIGA|PROGRES},<totalizzatore>[,<campo form>]
// dove: <totalizzatore> è il codice del totalizzatore richiesto // dove: <totalizzatore> è il codice del totalizzatore richiesto
// <campo form> è il campo della form che riceve il valore del totalizzatore, se non è specificato è scritto nel campo corrente // <campo form> è il campo della form che riceve il valore del totalizzatore, se non è specificato è scritto nel campo corrente
static real zero("0.0"); // 0 sotto forma di real per i casi in cui il totalizzatore non viene trovato static real zero("0.0"); // 0 sotto forma di real per i casi in cui il totalizzatore non viene trovato
TString tot= s.get(); // prende il codice del totalizzatore richiesto TString tot= s.get(); // prende il codice del totalizzatore richiesto
TForm_item *fi; // puntatore al campo della form in cui scrivere il valore del totalizzatore TForm_item *fi; // puntatore al campo della form in cui scrivere il valore del totalizzatore
if (s.items()==2) { if (s.items()==2) {
TString c= s.get(); // prende il codice del campo della form TString c= s.get(); // prende il codice del campo della form
if (c[0]== '#') c.ltrim(1); if (c[0]== '#') c.ltrim(1);
fi= &(cf.find_field(c)); // prende il puntatore al campo specificato fi= &(cf.find_field(c)); // prende il puntatore al campo specificato
} else fi= &cf; // prende il puntatore al campo corrente } else fi= &cf; // prende il puntatore al campo corrente
if (code.mid(6) == "_CODA") { if (code.mid(6) == "_CODA") {
TLocalisamfile &doc= (cursor())->file(LF_DOC); TLocalisamfile &doc= (cursor())->file(LF_DOC);
TToken_string totcoda(doc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string TToken_string totcoda(doc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string
int pos= totcoda.get_pos(tot); // cerca il totalizzatore richiesto, il suo valore è nel token successivo int pos= totcoda.get_pos(tot); // cerca il totalizzatore richiesto, il suo valore è nel token successivo
if (pos>=0) fi->set(totcoda.get(pos+1)); // setta il campo della form if (pos>=0) fi->set(totcoda.get(pos+1)); // setta il campo della form
else fi->set(zero.string()); else fi->set(zero.string());
} }
if (code.mid(6) == "_RIGA") { if (code.mid(6) == "_RIGA") {
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC); TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
TToken_string totriga(rdoc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string TToken_string totriga(rdoc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string
int pos= totriga.get_pos(tot); // cerca il totalizzatore richiesto, il suo valore è nel token successivo int pos= totriga.get_pos(tot); // cerca il totalizzatore richiesto, il suo valore è nel token successivo
if (pos>=0) fi->set(totriga.get(pos+1)); // setta il campo della form if (pos>=0) fi->set(totriga.get(pos+1)); // setta il campo della form
else fi->set(zero.string()); else fi->set(zero.string());
} }
if (code.mid(6) == "_PROGRES") { if (code.mid(6) == "_PROGRES") {
TString16 tot16(tot); TString16 tot16(tot);
fi->set(_total_prog->get(tot16).string()); fi->set(_total_prog->get(tot16).string());
} }
return (TRUE); return (TRUE);
} // fine _TOTAL_xxx } // fine _TOTAL_xxx
if (code== "_CLIENTE") { if (code== "_CLIENTE") {
// lettura dei dati del cliente // lettura dei dati del cliente
@ -348,14 +348,14 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
// + CFVEN (17) Clienti/fornitori per vendite // + CFVEN (17) Clienti/fornitori per vendite
// + %COMUNI (113@) Comune di residenza // + %COMUNI (113@) Comune di residenza
// + %COMUNI (213@) Comune di nascita // + %COMUNI (213@) Comune di nascita
TLocalisamfile &doc= (cursor())->file(LF_DOC); TLocalisamfile &doc= (cursor())->file(LF_DOC);
TString16 tipocf= doc.get("TIPOCF"), codcf= doc.get("CODCF"), ocfpi= doc.get("OCFPI"); TString16 tipocf= doc.get("TIPOCF"), codcf= doc.get("CODCF"), ocfpi= doc.get("OCFPI");
if (!_cli_loaded ) { // il cliente è sulla testata del documento di vendita, quindi può essere caricato una volta sola per tutte if (!_cli_loaded ) { // il cliente è sulla testata del documento di vendita, quindi può essere caricato una volta sola per tutte
_cliente->load(tipocf[0], atol(codcf), ocfpi); _cliente->load(tipocf[0], atol(codcf), ocfpi);
_cliente->add(LF_COMUNI, "COM=STATOCF+COMCF", 1, LF_CLIFO, 100+LF_COMUNI); _cliente->add(LF_COMUNI, "COM=STATOCF+COMCF", 1, LF_CLIFO, 100+LF_COMUNI);
_cliente->add(LF_COMUNI, "COM=STATONASC+COMNASC", 1, LF_CLIFO, 200+LF_COMUNI); _cliente->add(LF_COMUNI, "COM=STATONASC+COMNASC", 1, LF_CLIFO, 200+LF_COMUNI);
_cli_loaded= TRUE; _cli_loaded= TRUE;
} }
TString in(s.get()); // prende la macro o il fieldref TString in(s.get()); // prende la macro o il fieldref
if (in[0]=='!') { if (in[0]=='!') {
in.ltrim(1); in.ltrim(1);
@ -366,7 +366,7 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
if (in=="CAP") cf.set(_cliente->get(LF_CLIFO, "CAPCF")); if (in=="CAP") cf.set(_cliente->get(LF_CLIFO, "CAPCF"));
if (in=="COM") cf.set(_cliente->get(-(100+LF_COMUNI), "DENCOM")); if (in=="COM") cf.set(_cliente->get(-(100+LF_COMUNI), "DENCOM"));
if (in=="PROV") cf.set(_cliente->get(-(100+LF_COMUNI), "PROVCOM")); if (in=="PROV") cf.set(_cliente->get(-(100+LF_COMUNI), "PROVCOM"));
if (in=="IVA") cf.set(_cliente->get(LF_CLIFO, "PAIV")); if (in=="IVA") cf.set(_cliente->get(LF_CLIFO, "PAIV"));
if (in=="CF") cf.set(_cliente->get(LF_CLIFO, "COFI")); if (in=="CF") cf.set(_cliente->get(LF_CLIFO, "COFI"));
if (in=="PERS") cf.set(_cliente->get(LF_CLIFO, "TIPOPERS")); if (in=="PERS") cf.set(_cliente->get(LF_CLIFO, "TIPOPERS"));
if (in=="DATANAS") cf.set(_cliente->get(LF_CLIFO, "DATANASC")); if (in=="DATANAS") cf.set(_cliente->get(LF_CLIFO, "DATANASC"));
@ -399,55 +399,55 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
} // fine _CLIENTE } // fine _CLIENTE
if (code== "_RIEPILOGOIVA") { if (code== "_RIEPILOGOIVA") {
// tabella riepilogo aliquote iva e relative imposte // tabella riepilogo aliquote iva e relative imposte
// sintassi: _RIEPILOGOIVA,<macro> // sintassi: _RIEPILOGOIVA,<macro>
// dove: <macro> è uno dei seguenti: // dove: <macro> è uno dei seguenti:
// !IMPONIB colonna degli imponibili // !IMPONIB colonna degli imponibili
// !ALIQ colonna delle aliquote // !ALIQ colonna delle aliquote
// !IMPOSTE colonna delle imposte // !IMPOSTE colonna delle imposte
// !DESCR colonna delle descrizioni // !DESCR colonna delle descrizioni
TString in= s.get(); // prende l'indicatore della colonna da creare TString in= s.get(); // prende l'indicatore della colonna da creare
TLocalisamfile &doc= (cursor())->file(LF_DOC); TLocalisamfile &doc= (cursor())->file(LF_DOC);
TToken_string totaliz(doc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string TToken_string totaliz(doc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string
if (in[0]=='!') { if (in[0]=='!') {
in.ltrim(1); in.ltrim(1);
int w= cf.width(), num= totaliz.items(); int w= cf.width(), num= totaliz.items();
TString out, curr, tot; TString out, curr, tot;
for (int i=0; i<num; i+=2) { // ciclo sui totalizzatori presenti for (int i=0; i<num; i+=2) { // ciclo sui totalizzatori presenti
if (i==0) tot= totaliz.get(0); // prende il codice del totalizzatore corrente if (i==0) tot= totaliz.get(0); // prende il codice del totalizzatore corrente
else tot= totaliz.get(); else tot= totaliz.get();
curr= totaliz.get(); // prende il valore del totalizzatore corrente curr= totaliz.get(); // prende il valore del totalizzatore corrente
if (in=="IMPONIB") { if (in=="IMPONIB") {
if (tot.match("IVAI_????")) curr.right_just(w); if (tot.match("IVAI_????")) curr.right_just(w);
} }
if (in=="IMPOSTE") { if (in=="IMPOSTE") {
if (tot.match("IVAV_????")) curr.right_just(w); if (tot.match("IVAV_????")) curr.right_just(w);
} }
if ((in=="ALIQ") || (in=="DESCR")) { if ((in=="ALIQ") || (in=="DESCR")) {
if (tot.match("IVAI_????")) { if (tot.match("IVAI_????")) {
TString code= tot.mid(5); // prende il codice dell'aliquota per la tabella iva TString code= tot.mid(5); // prende il codice dell'aliquota per la tabella iva
TTable iva("%IVA"); // inizializza la tabella, imposta il codice e tenta una lettura TTable iva("%IVA"); // inizializza la tabella, imposta il codice e tenta una lettura
iva.put("CODTAB", code); iva.put("CODTAB", code);
if (iva.read()==NOERR) { if (iva.read()==NOERR) {
if (in=="ALIQ") { if (in=="ALIQ") {
curr= iva.get("R0"); // legge l'aliquota curr= iva.get("R0"); // legge l'aliquota
curr.right_just(w); curr.right_just(w);
} }
if (in=="DESCR") { if (in=="DESCR") {
if (iva.get("S1").not_empty()) { // il tipo di aliquota è diverso da "regime iva normale" ? if (iva.get("S1").not_empty()) { // il tipo di aliquota è diverso da "regime iva normale" ?
curr= iva.get("S0"); // legge la descrizione curr= iva.get("S0"); // legge la descrizione
curr.left_just(w); curr.left_just(w);
} }
} }
} else curr.spaces(w); } else curr.spaces(w);
} }
} }
if (out.not_empty()) out << "|"; // aggiunge il separatore di riga per le paragraph string preformattate if (out.not_empty()) out << "|"; // aggiunge il separatore di riga per le paragraph string preformattate
out << curr; // aggiunge la riga corrente alla colonna out << curr; // aggiunge la riga corrente alla colonna
} }
cf.set(out); // scrive la colonna nel campo corrente cf.set(out); // scrive la colonna nel campo corrente
} }
return (TRUE); return (TRUE);
} // fine _RIEPILOGOIVA } // fine _RIEPILOGOIVA
return TForm::validate(cf, s); // se il codice del messaggio non è identificato viene passato alla funzione standard return TForm::validate(cf, s); // se il codice del messaggio non è identificato viene passato alla funzione standard
@ -500,7 +500,7 @@ bool TStampa_Doc_Vendita::create() {
_provv= argv(4); // il terzo è il flag di numerazione provvisoria _provv= argv(4); // il terzo è il flag di numerazione provvisoria
_dalnum= atol(argv(5)); // il quarto è il numero di documento di partenza _dalnum= atol(argv(5)); // il quarto è il numero di documento di partenza
_alnum= atol(argv(6)); // il quinto è il numero di documento di fine _alnum= atol(argv(6)); // il quinto è il numero di documento di fine
_definitiva= (strcmp(argv(7), "D")==0); // il sesto è se la stampa è definitiva (rinumerazione dei documenti) _definitiva= (strcmp(argv(7), "D")==0); // il sesto è se la stampa è definitiva (rinumerazione dei documenti)
_interattivo= FALSE; _interattivo= FALSE;
print(); print();
} else { // oppure lancio della maschera } else { // oppure lancio della maschera
@ -608,24 +608,24 @@ void TStampa_Doc_Vendita::print() {
} }
behaviour TStampa_Doc_Vendita::on_module_change(const TString &modulo, TString &modulo_prec) { behaviour TStampa_Doc_Vendita::on_module_change(const TString &modulo, TString &modulo_prec) {
if (!_interattivo) return skip; // se siamo in interattivo il documento viene saltato... if (!_interattivo) return skip; // se siamo in interattivo il documento viene saltato...
else { // ...altrimenti viene chiesto all'utente il da farsi else { // ...altrimenti viene chiesto all'utente il da farsi
int risp= yesnocancel_box("Il modulo di carta è cambiato: inserisci il modulo '%s' e premi 'Sì' per continuare, 'No' per saltare il documento o 'Cancel' per interrompere la stampa", modulo); int risp= yesnocancel_box("Il modulo di carta è cambiato: inserisci il modulo '%s' e premi 'Sì' per continuare, 'No' per saltare il documento o 'Cancel' per interrompere la stampa", modulo);
behaviour ret; behaviour ret;
switch (risp) { switch (risp) {
case K_YES: case K_YES:
modulo_prec= modulo; // aggiorna l'inseguitore dei moduli modulo_prec= modulo; // aggiorna l'inseguitore dei moduli
ret= go; // la stampa può continuare ret= go; // la stampa può continuare
break; break;
case K_NO: case K_NO:
ret= skip; // il documento viene saltato ret= skip; // il documento viene saltato
break; break;
case K_ESC: case K_ESC:
ret= cancel; // la stampa viene interrotta ret= cancel; // la stampa viene interrotta
break; break;
} }
return ret; return ret;
} }
} }
bool TStampa_Doc_Vendita::query_final_print() { bool TStampa_Doc_Vendita::query_final_print() {

View File

@ -308,4 +308,3 @@ END
ENDPAGE ENDPAGE


View File

@ -4,6 +4,7 @@
#include <msksheet.h> #include <msksheet.h>
#include <assoc.h> #include <assoc.h>
#include <checks.h> #include <checks.h>
#include <defmask.h>
#include "ve2400.h" #include "ve2400.h"
@ -27,10 +28,12 @@ class TAnagrafica_magazzino: public TRelation_application {
virtual void init_insert_mode(TMask &); virtual void init_insert_mode(TMask &);
virtual int read(TMask& m); virtual int read(TMask& m);
virtual bool remove();
virtual int write(const TMask& m); virtual int write(const TMask& m);
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
static bool handle_sheet0(TMask_field &, KEY); // handler dello sheet delle unità di misura static bool handle_sheet0(TMask_field &, KEY); // handler dello sheet delle unità di misura
static bool notify_sheet0(TSheet_field & s, int r, KEY k); // handler dello sheet delle unità di misura
static bool handle_sheet1(TMask_field &, KEY); // handler dello sheet delle descrizioni in lingua static bool handle_sheet1(TMask_field &, KEY); // handler dello sheet delle descrizioni in lingua
static bool handle_sheet2(TMask_field &, KEY); // handler dello sheer dei codici alternativi static bool handle_sheet2(TMask_field &, KEY); // handler dello sheer dei codici alternativi
static bool handle_sheet0_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura static bool handle_sheet0_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unità di misura
@ -42,9 +45,11 @@ public:
bool TAnagrafica_magazzino::user_create() { bool TAnagrafica_magazzino::user_create()
_msk= new TMask("VE2400"); {
_msk= new TMask("ve2400");
_msk->set_handler(F_SHEET0, handle_sheet0); _msk->set_handler(F_SHEET0, handle_sheet0);
((TSheet_field &)_msk->field(F_SHEET0)).set_notify(notify_sheet0);
_msk->set_handler(F_SHEET1, handle_sheet1); _msk->set_handler(F_SHEET1, handle_sheet1);
_msk->set_handler(F_SHEET2, handle_sheet2); _msk->set_handler(F_SHEET2, handle_sheet2);
@ -63,7 +68,8 @@ bool TAnagrafica_magazzino::user_create() {
return TRUE; return TRUE;
} }
bool TAnagrafica_magazzino::user_destroy() { bool TAnagrafica_magazzino::user_destroy()
{
delete _linee_rec2; delete _linee_rec2;
delete _linee_rec1; delete _linee_rec1;
delete _linee_rec0; delete _linee_rec0;
@ -75,56 +81,68 @@ bool TAnagrafica_magazzino::user_destroy() {
return TRUE; return TRUE;
} }
int TAnagrafica_magazzino::read(TMask& m) { int TAnagrafica_magazzino::read(TMask& m)
int err= TRelation_application::read(m); {
if (err == NOERR) { const int err= TRelation_application::read(m);
if (err == NOERR)
{
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0); // prende il sheet delle unità di misura
TRectype rum(_umart->curr()); // prende il record corrente dal file delle unità di misura TRectype rum(_umart->curr()); // prende il record corrente dal file delle unità di misura
f0.destroy(); // cancella lo sheet
rum.zero(); rum.zero();
rum.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) rum.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
_linee_rec0->read(rum); // legge il record array _linee_rec0->read(rum); // legge il record array
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0); // prende il sheet delle unità di misura
f0.destroy(); // cancella lo sheet const int lastum = _linee_rec0->last_row();
int last= _linee_rec0->last_row(); for (int i= 1; i <= lastum; i++)
if (last>0) { {
for (int i= 1; i <= last; i++) { TRectype &rec= _linee_rec0->row(i, TRUE); // prende il record della riga corrente dal record array
TRectype &rec= _linee_rec0->row(i, TRUE); // prende il record della riga corrente dal record array TToken_string &row= f0.row(i-1);
TToken_string &row= f0.row(i-1); row = "";
row= rec.get("UM"); // imposta la riga dello sheet con i campi del record della riga corrente row.add(rec.get("UM")); // imposta la riga dello sheet con i campi del record della riga corrente
if (i != 1) row.add(rec.get("FC")); row.add(rec.get("FC"));
else row.add("1"); // forza a 1 il secondo campo della prima riga (il fattore di conversione della prima U.M. deve essere 1)
}
} else {
TToken_string &row= f0.row(-1); // aggiunge una riga allo sheet
row.add("");
row.add("1"); // setta il secondo campo della riga aggiunta a 1
} }
if (f0.items() == 0)
((TToken_string &)f0.row(0)) = "|1"; // aggiunge una riga allo sheet
else
((TToken_string &)f0.row(0)).add("1",1); // forza la prima unita' di misura a 1
f0.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1) f0.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1)
f0.force_update(0); // aggiorna lo stato della riga 0 f0.force_update(0); // aggiorna lo stato della riga 0
TRectype r(_deslin->curr()); // prende il record corrente dal file delle descrizioni in lingua TRectype r(_deslin->curr()); // prende il record corrente dal file delle descrizioni in lingua
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1); // prende il sheet delle descrizioni in lingua
r.zero(); r.zero();
r.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) r.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
_linee_rec1->read(r); // legge il record array _linee_rec1->read(r); // legge il record array
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1); // prende il sheet delle descrizioni in lingua
f1.destroy(); // cancella lo sheet f1.destroy(); // cancella lo sheet
last= _linee_rec1->last_row(); const int lastdes= _linee_rec1->last_row();
for (int i= 1; i <= last; i++) { for (i = 1; i <= lastdes; i++)
{
TRectype &rec= _linee_rec1->row(i, TRUE); // prende il record della riga corrente dal record array TRectype &rec= _linee_rec1->row(i, TRUE); // prende il record della riga corrente dal record array
TToken_string &row= f1.row(i-1); TToken_string &row= f1.row(i-1);
row= rec.get("CODLIN"); // imposta la riga dello sheet con i campi del record della riga corrente
row = "";
row.add(rec.get("CODLIN")); // imposta la riga dello sheet con i campi del record della riga corrente
row.add(rec.get("DESCR")); row.add(rec.get("DESCR"));
} }
TRectype rcor(_codcorr->curr()); // prende il record corrente dal file dei codici corrispondenti TRectype rcor(_codcorr->curr()); // prende il record corrente dal file dei codici corrispondenti
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2); // prende lo sheet dei codici corrispondenti
rcor.zero(); rcor.zero();
rcor.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera) rcor.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
_linee_rec2->read(rcor); // legge il record array _linee_rec2->read(rcor); // legge il record array
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2); // prende lo sheet dei codici corrispondenti
f2.destroy(); // cancella lo sheet f2.destroy(); // cancella lo sheet
last= _linee_rec2->last_row(); const int lastcod = _linee_rec2->last_row();
for (i= 1; i <= last; i++) { for (i= 1; i <= lastcod; i++)
{
TRectype &rec= _linee_rec2->row(i, TRUE); // prende il record della riga corrente dal record array TRectype &rec= _linee_rec2->row(i, TRUE); // prende il record della riga corrente dal record array
TToken_string &row= f2.row(i-1); TToken_string &row= f2.row(i-1);
row = "";
row= rec.get("CODARTALT"); // imposta la riga dello sheet con i campi del record della riga corrente row= rec.get("CODARTALT"); // imposta la riga dello sheet con i campi del record della riga corrente
row.add(rec.get("TIPO")); row.add(rec.get("TIPO"));
} }
@ -132,208 +150,280 @@ int TAnagrafica_magazzino::read(TMask& m) {
return err; return err;
} }
int TAnagrafica_magazzino::write(const TMask& m) { bool TAnagrafica_magazzino::remove()
{
return _linee_rec0->remove() == NOERR &&
_linee_rec1->remove() == NOERR &&
_linee_rec2->remove() == NOERR &&
TRelation_application::remove();
}
int TAnagrafica_magazzino::write(const TMask& m)
{
int err= TRelation_application::write(m); int err= TRelation_application::write(m);
if (err == NOERR) {
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
_linee_rec0->destroy_rows();
if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART)); if (err != NOERR)
return err;
for (int i= 0; i < f0.items(); i++) { TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
TToken_string &row= f0.row(i);
const TString16 um(row.get(0));
const real fc(row.get());
if (um.not_empty() && (!fc.is_zero())) { _linee_rec0->destroy_rows();
TRectype &rec= _linee_rec0->row(i+1, TRUE); if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART));
rec.put("UM", um);
rec.put("FC", fc); for (int i= 0; i < f0.items(); i++)
} {
TToken_string &row= f0.row(i);
TString16 um(row.get(0));
um.rtrim();
if (um.not_empty())
{
TRectype &rec= _linee_rec0->row(i+1, TRUE);
rec.put("UM", um);
rec.put("FC", row.get());
} }
err= _linee_rec0->write();
} }
err = _linee_rec0->write();
if (err == NOERR) { if (err != NOERR)
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1); return err;
_linee_rec1->destroy_rows();
if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART)); TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1);
for (int i= 0; i < f1.items(); i++) { _linee_rec1->destroy_rows();
TToken_string &row= f1.row(i); if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART));
const TString16 codlin(row.get(0));
const TString80 descr(row.get());
if (codlin.not_empty() && descr.not_empty()) { for (i = 0; i < f1.items(); i++)
TRectype &rec= _linee_rec1->row(i+1, TRUE); {
rec.put("CODLIN", codlin); TToken_string &row= f1.row(i);
rec.put("DESCR", descr); TString16 codlin(row.get(0));
}
codlin.rtrim();
if (codlin.not_empty())
{
TRectype &rec= _linee_rec1->row(i+1, TRUE);
rec.put("CODLIN", codlin);
rec.put("DESCR", row.get());
} }
err= _linee_rec1->write();
} }
err= _linee_rec1->write();
if (err == NOERR) { if (err != NOERR)
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2); return err;
_linee_rec2->destroy_rows();
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART)); TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
for (int i= 0; i < f2.items(); i++) { _linee_rec2->destroy_rows();
TToken_string &row= f2.row(i); if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART));
const TString80 codartalt(row.get(0));
const TString16 tipo(row.get());
if (codartalt.not_empty()) { for (i= 0; i < f2.items(); i++)
TRectype &reccor= _linee_rec2->row(i+1, TRUE); {
reccor.put("CODARTALT", codartalt); TToken_string &row= f2.row(i);
reccor.put("TIPO", tipo); TString80 codartalt(row.get(0));
}
codartalt.rtrim();
if (codartalt.not_empty())
{
TRectype &reccor= _linee_rec2->row(i+1, TRUE);
reccor.put("CODARTALT", codartalt);
reccor.put("TIPO", row.get());
} }
err= _linee_rec2->write();
} }
err= _linee_rec2->write();
return err; return err;
} }
int TAnagrafica_magazzino::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);
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
_linee_rec0->destroy_rows();
if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART)); _linee_rec0->destroy_rows();
if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART));
for (int i= 0; i < f0.items(); i++) { for (int i= 0; i < f0.items(); i++)
TToken_string & row = f0.row(i); {
const TString16 um(row.get(0)); TToken_string & row = f0.row(i);
const real fc(row.get()); TString16 um(row.get(0));
if (um.not_empty() && (!fc.is_zero())) { um.rtrim();
TRectype &rec= _linee_rec0->row(i+1, TRUE); if (um.not_empty())
rec.put("UM", um); {
rec.put("FC", fc); TRectype &rec= _linee_rec0->row(i+1, TRUE);
}
rec.put("UM", um);
rec.put("FC", row.get());
} }
err= _linee_rec0->rewrite();
} }
if (err == NOERR) { int err = _linee_rec0->rewrite();
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1);
_linee_rec1->destroy_rows();
if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART)); if (err != NOERR)
return err;
for (int i= 0; i < f1.items(); i++) { TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1);
TToken_string & row = f1.row(i); _linee_rec1->destroy_rows();
const TString16 codlin(row.get(0));
const TString80 descr(row.get());
if (codlin.not_empty() && descr.not_empty()) { if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART));
TRectype &rec= _linee_rec1->row(i+1, TRUE);
rec.put("CODLIN", codlin); for (i= 0; i < f1.items(); i++)
rec.put("DESCR", descr); {
} TToken_string & row = f1.row(i);
TString16 codlin(row.get(0));
codlin.rtrim();
if (codlin.not_empty())
{
TRectype &rec= _linee_rec1->row(i+1, TRUE);
rec.put("CODLIN", codlin);
rec.put("DESCR", row.get());
} }
err= _linee_rec1->rewrite();
} }
err = _linee_rec1->rewrite();
if (err == NOERR) { if (err != NOERR)
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2); return err;
_linee_rec2->destroy_rows();
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART)); TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
for (int i= 0; i < f2.items(); i++) { _linee_rec2->destroy_rows();
TToken_string &row= f2.row(i); if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART));
const TString80 codartalt(row.get(0));
const TString80 tipo(row.get());
if (codartalt.not_empty()) { for (i = 0; i < f2.items(); i++)
TRectype &reccor= _linee_rec2->row(i+1, TRUE); {
reccor.put("CODARTALT", codartalt); TToken_string &row= f2.row(i);
reccor.put("TIPO", tipo); TString80 codartalt(row.get(0));
}
codartalt.rtrim();
if (codartalt.not_empty())
{
TRectype &reccor = _linee_rec2->row(i+1, TRUE);
reccor.put("CODARTALT", codartalt);
reccor.put("TIPO", row.get());
} }
err= _linee_rec2->write();
} }
err = _linee_rec2->rewrite();
if (err == NOERR)
err= TRelation_application::rewrite(m);
return err; return err;
} }
void TAnagrafica_magazzino::init_insert_mode(TMask &m) { void TAnagrafica_magazzino::init_insert_mode(TMask &m)
{
TSheet_field &f= (TSheet_field &)m.field(F_SHEET0); TSheet_field &f= (TSheet_field &)m.field(F_SHEET0);
if (f.items()==0) { if (f.items()==0)
TToken_string &row= f.row(-1); // aggiunge una riga allo sheet {
row.add(""); ((TToken_string &)f.row(0)) = "|1"; // aggiunge una riga allo sheet
row.add("1"); // setta il secondo campo della riga aggiunta a 1
f.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1) f.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1)
f.force_update(0); // aggiorna lo stato della riga 0 f.force_update(0); // aggiorna lo stato della riga 0
} }
} }
bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k) { bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k)
if (k==K_ENTER) { {
if (k == K_ENTER)
{
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
if (f.items()>0) { const int items = f.items();
if (items > 0)
{
TAssoc_array v; // istanzia l'hash table per il controllo di univocità TAssoc_array v; // istanzia l'hash table per il controllo di univocità
for (int i= 0; i<f.items(); i++) { for (int i= 0; i<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"); const TString16 um(f.cell(i,0));
break;
} if (um.empty())
real x(f.cell(i,1)); return error_box("Le unita' di misura non possono essere vuote");
if (x.is_zero()) { // controlla che il fattore di conversione (secondo elemento) non sia 0 if (v.add(um))
error_box("I fattori di conversione delle unità di misura non possono valere 0"); return error_box("Le unità di misura devono essere diverse tra loro"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
break;
}
} }
return (i==f.items()); }
} else return TRUE; }
} else return TRUE; return TRUE;
} }
bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k) { bool TAnagrafica_magazzino::notify_sheet0(TSheet_field &s, int r, KEY k)
if (k==K_ENTER) { {
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente if (k == K_TAB)
if (f.items()>1) { s.sheet_mask().enable(DLG_DELREC, r > 0);
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
for (int i= 0; i<f.items(); i++) { return TRUE;
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) { bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k)
if (k==K_ENTER) { {
if (k == K_ENTER)
{
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
if (f.items()>0) { const int items = f.items();
if (items > 0)
{
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
for (int i= 0; i < items; i++)
{
const TString16 codlin(f.cell(i,0));
if (codlin.empty())
return error_box("I codici lingua non possono essere vuoti");
if (v.add(codlin))
return error_box("I codici lingua devono essere diversi tra loro"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
}
}
}
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
const int items = f.items();
if (items > 0)
{
TMask &m= fld.mask(); // prende la maschere d'origine del campo TMask &m= fld.mask(); // prende la maschere d'origine del campo
TAssoc_array v; // istanzia l'hash table per il controllo di univocità 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 v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
for (int i= 0; i<f.items(); i++) { for (int i= 0; i< 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"); const TString80 codart(f.cell(i,0));
break;
} if (codart.empty())
return error_box("I codici alternativi non possono essere vuoti");
if (v.add(codart))
return error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo"); // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
} }
return (i==f.items()); }
} else return TRUE; }
} else return TRUE; return TRUE;
} }
bool TAnagrafica_magazzino::handle_sheet0_um(TMask_field &fld, KEY k) { 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) if (fld.focusdirty() && k == K_TAB)
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 TMask &m = fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
const TString16 curr_um(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente)
if (curr_um.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 TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo
CHECK(f != NULL, "Il puntatore allo sheet è nullo"); CHECK(f != NULL, "Il puntatore allo sheet è nullo");
if (f->selected() != 0) { if (f->selected() > 0)
{
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET // ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
// //
@ -347,32 +437,43 @@ bool TAnagrafica_magazzino::handle_sheet0_um(TMask_field &fld, KEY k) {
// se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-) // se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-)
TTable t("%UMS"); TTable t("%UMS");
real x(0.0); // fattore di conversione dell'unità di misura corrente real x; // 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) const TString16 first_um(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
t.zero(); t.zero();
t.put("CODTAB", me); t.put("CODTAB", curr_um);
if (t.read() == NOERR) { 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 const TString16 rif_um(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
t.zero(); x = t.get_real("R10"); // prende il suo fattore di conversione
t.put("CODTAB", you);
if (t.read() == NOERR) { if (rif_um != first_um)
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 t.zero();
if (your==my) { t.put("CODTAB", first_um);
x= my_fc/your_fc; // calcola il rapporto tra i fattori di conversione if (t.read() == NOERR)
x.round(5); // arrotonda il risultato a 5 decimali {
TString16 first_um_rif(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto
const real first_um_rif_fc(t.get_real("R10")); // prende il suo fattore di conversione
if (first_um_rif == rif_um)
{
x /= first_um_rif_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 if (x == ZERO)
x = 1.00;
m.set(FS_FCUM, x); // il risultato viene scritto nel campo del fattore di conversione
} }
} }
} }
return TRUE; return TRUE;
} }
int ve2400(int argc, char* argv[]) { int ve2400(int argc, char* argv[])
{
TAnagrafica_magazzino a; TAnagrafica_magazzino a;
a.run(argc, argv, "Anagrafica di magazzino "); a.run(argc, argv, "Anagrafica di magazzino ");

View File

@ -1,5 +1,5 @@
#include <lffiles.h> #include <lffiles.h>
#include "VE2400.H" #include "ve2400.h"
TOOLBAR "" 0 20 60 2 TOOLBAR "" 0 20 60 2
#include <toolbar.h> #include <toolbar.h>
@ -59,10 +59,10 @@ END
STRING F_GRMERC1B 2 STRING F_GRMERC1B 2
BEGIN BEGIN
PROMPT 21 5 "" PROMPT 21 5 ""
FIELD LF_ANAGR->GRMERC1[4,5] FIELD LF_ANAGR->GRMERC1[4,5]
GROUP 1 GROUP 1
FLAG "U" FLAG "U"
MESSAGE EMPTY CLEAR,2@ MESSAGE EMPTY CLEAR,2@
MESSAGE ENABLE,2@ MESSAGE ENABLE,2@
USE %GMC USE %GMC
@ -94,15 +94,15 @@ BEGIN
PROMPT 1 6 "Gruppo merc. 2 " PROMPT 1 6 "Gruppo merc. 2 "
FIELD LF_ANAGR->GRMERC2[1,3] FIELD LF_ANAGR->GRMERC2[1,3]
GROUP 2 GROUP 2
FLAG "U" FLAG "U"
END END
STRING F_GRMERC2B 2 STRING F_GRMERC2B 2
BEGIN BEGIN
PROMPT 21 6 "" PROMPT 21 6 ""
FIELD LF_ANAGR->GRMERC2[4,5] FIELD LF_ANAGR->GRMERC2[4,5]
GROUP 2 GROUP 2
FLAG "U" FLAG "U"
MESSAGE EMPTY CLEAR,3@ MESSAGE EMPTY CLEAR,3@
MESSAGE ENABLE,3@ MESSAGE ENABLE,3@
NUM_EXPR (#F_GRMERC2=="")||(#F_GRMERC2!=#F_GRMERC1) NUM_EXPR (#F_GRMERC2=="")||(#F_GRMERC2!=#F_GRMERC1)
@ -135,15 +135,15 @@ BEGIN
PROMPT 1 7 "Gruppo merc. 3 " PROMPT 1 7 "Gruppo merc. 3 "
FIELD LF_ANAGR->GRMERC3[1,3] FIELD LF_ANAGR->GRMERC3[1,3]
GROUP 3 GROUP 3
FLAG "U" FLAG "U"
END END
STRING F_GRMERC3B 2 STRING F_GRMERC3B 2
BEGIN BEGIN
PROMPT 21 7 "" PROMPT 21 7 ""
FIELD LF_ANAGR->GRMERC3[4,5] FIELD LF_ANAGR->GRMERC3[4,5]
GROUP 3 GROUP 3
FLAG "U" FLAG "U"
NUM_EXPR (#F_GRMERC3=="")||((#F_GRMERC3!=#F_GRMERC1)&&(#F_GRMERC3!=#F_GRMERC2)) NUM_EXPR (#F_GRMERC3=="")||((#F_GRMERC3!=#F_GRMERC1)&&(#F_GRMERC3!=#F_GRMERC2))
USE %GMC USE %GMC
INPUT CODTAB[1,3] F_GRMERC3 INPUT CODTAB[1,3] F_GRMERC3
@ -180,10 +180,10 @@ STRING F_CATCONA 3
BEGIN BEGIN
PROMPT 1 12 "Categoria conto acquisti " PROMPT 1 12 "Categoria conto acquisti "
FIELD LF_ANAGR->CATCONA FIELD LF_ANAGR->CATCONA
GROUP 11 GROUP 11
MESSAGE CLEAR,12@ MESSAGE CLEAR,12@
MESSAGE EMPTY ENABLE,12@ MESSAGE EMPTY ENABLE,12@
FLAG "UZ" FLAG "UZ"
USE CAA USE CAA
INPUT CODTAB F_CATCONA INPUT CODTAB F_CATCONA
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -200,7 +200,7 @@ STRING F_CATCONA1 40
BEGIN BEGIN
PROMPT 36 12 "" PROMPT 36 12 ""
FLAG "D" FLAG "D"
GROUP 11 GROUP 11
USE CAA KEY 2 USE CAA KEY 2
INPUT S0 F_CATCONA1 INPUT S0 F_CATCONA1
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
@ -215,23 +215,23 @@ STRING F_GRUPPOA 2
BEGIN BEGIN
PROMPT 1 13 "Conto d'acquisto " PROMPT 1 13 "Conto d'acquisto "
FIELD LF_ANAGR->GRUPPOA FIELD LF_ANAGR->GRUPPOA
GROUP 12 GROUP 12
MESSAGE CLEAR,11@ MESSAGE CLEAR,11@
MESSAGE EMPTY ENABLE,11@ MESSAGE EMPTY ENABLE,11@
END END
STRING F_CONTOA 2 STRING F_CONTOA 2
BEGIN BEGIN
PROMPT 22 13 "" PROMPT 22 13 ""
FIELD LF_ANAGR->CONTOA FIELD LF_ANAGR->CONTOA
GROUP 12 GROUP 12
END END
STRING F_SOTTOCA 6 STRING F_SOTTOCA 6
BEGIN BEGIN
PROMPT 26 13 "" PROMPT 26 13 ""
FIELD LF_ANAGR->SOTTOCA FIELD LF_ANAGR->SOTTOCA
GROUP 12 GROUP 12
USE LF_PCON USE LF_PCON
INPUT GRUPPO F_GRUPPOA INPUT GRUPPO F_GRUPPOA
INPUT CONTO F_CONTOA INPUT CONTO F_CONTOA
@ -244,14 +244,14 @@ BEGIN
OUTPUT F_CONTOA CONTO OUTPUT F_CONTOA CONTO
OUTPUT F_SOTTOCA SOTTOCONTO OUTPUT F_SOTTOCA SOTTOCONTO
OUTPUT F_DESCRA DESCR OUTPUT F_DESCRA DESCR
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING F_DESCRA 40 STRING F_DESCRA 40
BEGIN BEGIN
PROMPT 36 13 "" PROMPT 36 13 ""
FLAG "D" FLAG "D"
GROUP 12 GROUP 12
USE LF_PCON KEY 2 USE LF_PCON KEY 2
INPUT DESCR F_DESCRA INPUT DESCR F_DESCRA
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
@ -268,9 +268,9 @@ BEGIN
PROMPT 1 14 "Categoria conto vendite " PROMPT 1 14 "Categoria conto vendite "
FIELD LF_ANAGR->CATCONV FIELD LF_ANAGR->CATCONV
GROUP 21 GROUP 21
MESSAGE CLEAR,22@ MESSAGE CLEAR,22@
MESSAGE EMPTY ENABLE,22@ MESSAGE EMPTY ENABLE,22@
FLAG "UZ" FLAG "UZ"
USE CRA USE CRA
INPUT CODTAB F_CATCONV INPUT CODTAB F_CATCONV
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -303,8 +303,8 @@ BEGIN
PROMPT 1 15 "Conto di vendita " PROMPT 1 15 "Conto di vendita "
FIELD LF_ANAGR->GRUPPOV FIELD LF_ANAGR->GRUPPOV
GROUP 22 GROUP 22
MESSAGE CLEAR,21@ MESSAGE CLEAR,21@
MESSAGE EMPTY ENABLE,21@ MESSAGE EMPTY ENABLE,21@
END END
STRING F_CONTOV 2 STRING F_CONTOV 2
@ -331,7 +331,7 @@ BEGIN
OUTPUT F_CONTOV CONTO OUTPUT F_CONTOV CONTO
OUTPUT F_SOTTOCV SOTTOCONTO OUTPUT F_SOTTOCV SOTTOCONTO
OUTPUT F_DESCRV DESCR OUTPUT F_DESCRV DESCR
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING F_DESCRV 40 STRING F_DESCRV 40
@ -365,25 +365,25 @@ BEGIN
PROMPT 1 17 "Classe doganale " PROMPT 1 17 "Classe doganale "
FIELD LF_ANAGR->CLASSDOG FIELD LF_ANAGR->CLASSDOG
FLAG "UZ" FLAG "UZ"
USE %CLD USE %CLD
INPUT CODTAB F_CLASSDOG INPUT CODTAB F_CLASSDOG
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CLASSDOG CODTAB OUTPUT F_CLASSDOG CODTAB
OUTPUT F_CLASSDOG1 S0 OUTPUT F_CLASSDOG1 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING F_CLASSDOG1 40 STRING F_CLASSDOG1 40
BEGIN BEGIN
PROMPT 36 17 "" PROMPT 36 17 ""
FLAG "D" FLAG "D"
USE %CLD KEY 2 USE %CLD KEY 2
INPUT S0 F_CLASSDOG1 INPUT S0 F_CLASSDOG1
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
OUTPUT F_CLASSDOG CODTAB OUTPUT F_CLASSDOG CODTAB
OUTPUT F_CLASSDOG1 S0 OUTPUT F_CLASSDOG1 S0
END END
ENDPAGE ENDPAGE
@ -402,7 +402,7 @@ BEGIN
DISPLAY "Descrizione@40" S0 DISPLAY "Descrizione@40" S0
OUTPUT F_CODIVA CODTAB OUTPUT F_CODIVA CODTAB
OUTPUT F_CODIVA1 S0 OUTPUT F_CODIVA1 S0
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
STRING F_CODIVA1 40 STRING F_CODIVA1 40

View File

@ -1,37 +1,46 @@
// SHEET 0 (unità di misura) DI VE2400 // SHEET 0 (unita' di misura) DI VE2400
PAGE "Pagina 1" 8 5 65 14 PAGE "Pagina 1" 8 5 65 11
STRING FS_CODUM 2 STRING FS_CODUM 2
BEGIN BEGIN
PROMPT 3 3 "U.M. " PROMPT 3 2 "Unita' di misura "
FIELD LF_UMART->UM FIELD LF_UMART->UM
FLAG "U" FLAG "U"
USE %UMS USE %UMS
INPUT CODTAB FS_CODUM INPUT CODTAB FS_CODUM
DISPLAY "U.M. " CODTAB DISPLAY "U.M. " CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT FS_CODUM CODTAB OUTPUT FS_CODUM CODTAB
CHECKTYPE REQUIRED
WARNING "Unita' di misura errata"
END END
NUMBER FS_FCUM 15 5 NUMBER FS_FCUM 15 5
BEGIN BEGIN
PROMPT 3 7 "Fattore conv. " PROMPT 3 4 "Fattore di conversione "
FIELD LF_UMART->FC FIELD LF_UMART->FC
CHECKTYPE REQUIRED
WARNING "Fattore di conversione obbligatorio"
END END
BUTTON 1 9 2 BUTTON DLG_OK 9 2
BEGIN BEGIN
PROMPT 15 12 "" PROMPT -13 -1 ""
END END
BUTTON 2 9 2 BUTTON DLG_CANCEL 9 2
BEGIN BEGIN
PROMPT 38 12 "" PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK


View File

@ -1,44 +1,41 @@
// SHEET 1 (descrizioni in lingua) DI VE2400 // SHEET 1 (descrizioni in lingua) DI VE2400
PAGE "Pagina 1" 8 5 65 14 PAGE "Pagina 1" 8 5 65 11
STRING FS_CODLIN 1 STRING FS_CODLIN 1
BEGIN BEGIN
PROMPT 3 3 "Codice lingua " PROMPT 3 2 "Codice lingua "
FIELD LF_DESLIN->CODLIN FIELD LF_DESLIN->CODLIN
USE %LNG USE %LNG
INPUT CODTAB FS_CODLIN INPUT CODTAB FS_CODLIN
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0 DISPLAY "Descrizione@30" S0
OUTPUT FS_CODLIN CODTAB OUTPUT FS_CODLIN CODTAB
// OUTPUT FS_CODLIN1 S0 CHECKTYPE REQUIRED
END WARNING "Codice lingua errato"
END
STRING FS_DESCR 50 STRING FS_DESCR 50
BEGIN BEGIN
PROMPT 1 7 "Descrizione " PROMPT 3 4 "Descrizione "
FIELD LF_DESLIN->DESCR FIELD LF_DESLIN->DESCR
VALIDATE REQIF_FUNC 1 FS_CODLIN
END END
/* BUTTON DLG_OK 9 2
STRING FS_CODLIN1 30
BEGIN BEGIN
PROMPT 1 5 "" PROMPT -13 -1 ""
FLAG "D"
END END
*/ BUTTON DLG_CANCEL 9 2
BUTTON 1 9 2
BEGIN BEGIN
PROMPT 15 12 "" PROMPT -23 -1 ""
END END
BUTTON 2 9 2 BUTTON DLG_DELREC 9 2
BEGIN BEGIN
PROMPT 38 12 "" PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END END
ENDPAGE ENDPAGE

View File

@ -1,17 +1,19 @@
// SHEET 2 (codici alternativi) DI VE2400 // SHEET 2 (codici alternativi) DI VE2400
PAGE "Pagina 1" 8 5 65 14 PAGE "Pagina 1" 8 5 65 11
STRING FS_CODARTALT 20 STRING FS_CODARTALT 20
BEGIN BEGIN
PROMPT 3 3 "Codice art. alt. " PROMPT 3 2 "Codice alternativo "
FIELD LF_CODCORR->CODARTALT FIELD LF_CODCORR->CODARTALT
CHECKTYPE REQUIRED
WARNING "Codice alternativo obbligatorio"
END END
LISTBOX FS_TIPO 10 LISTBOX FS_TIPO 10
BEGIN BEGIN
PROMPT 2 7 "Tipo di codice " PROMPT 2 4 "Tipo di codice "
ITEM "N|Normal " ITEM "N|Normal "
ITEM "8|EAN8 " ITEM "8|EAN8 "
ITEM "1|EA13 " ITEM "1|EA13 "
@ -20,21 +22,20 @@ BEGIN
FIELD LF_CODCORR->TIPO FIELD LF_CODCORR->TIPO
END END
/* STRING FS_CODARTALT1 50 BUTTON DLG_OK 9 2
BEGIN BEGIN
PROMPT 2 5 "" PROMPT -13 -1 ""
FLAG "D"
END
*/
BUTTON 1 9 2
BEGIN
PROMPT 15 12 ""
END END
BUTTON 2 9 2 BUTTON DLG_CANCEL 9 2
BEGIN BEGIN
PROMPT 38 12 "" PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END END
ENDPAGE ENDPAGE

View File

@ -29,7 +29,7 @@
class TStampa_condizioni_vendita: public TPrint_application { class TStampa_condizioni_vendita: public TPrint_application {
TRelation *_rel; // relazione principale TRelation *_rel; // relazione principale
TString16 _condven; // stringa che indica il tipo di archivio TString16 _condven; // stringa che indica il tipo di archivio
bool _codlis_catven; // booleano di abilitazione della categoria di vendita nella chiave dei listini bool _codlis_catven; // booleano di abilitazione della categoria di vendita nella chiave dei listini
bool _codcon_codcf; // booleano di abilitazione del codice cliente/fornitore nella chiave dei contratti bool _codcon_codcf; // booleano di abilitazione del codice cliente/fornitore nella chiave dei contratti
bool _listval; // booleano di abilitazione della stampa dei listini in valuta bool _listval; // booleano di abilitazione della stampa dei listini in valuta
@ -50,65 +50,65 @@ protected:
bool TStampa_condizioni_vendita::user_create() { bool TStampa_condizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione bool gotcha= FALSE; // booleano di avvenuta inizializzazione
int indice; // indice delle variabili di configurazione per le abilitazioni int indice; // indice delle variabili di configurazione per le abilitazioni
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio _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 if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else { else {
TMask choose("ve3200"); // istanzia la maschera di scelta del tipo di archivio TMask choose("ve3200"); // 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 if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
} }
_condven.upper(); // rende la stringa upper-case _condven.upper(); // rende la stringa upper-case
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_condven[0]) { switch (_condven[0]) {
case 'L': // listini case 'L': // listini
indice= A_LISTINI; // setta l'indice dell'archivio listini indice= A_LISTINI; // setta l'indice dell'archivio listini
if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
else { else {
_codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita _codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita
gotcha= TRUE; gotcha= TRUE;
} }
break; break;
case 'C': // contratti case 'C': // contratti
indice= A_CONTRATTI; // setta l'indice dell'archivio contratti indice= A_CONTRATTI; // setta l'indice dell'archivio contratti
if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio contratti sia abilitato if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio contratti sia abilitato
else { else {
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione delle categoria di vendita _codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione delle categoria di vendita
gotcha= TRUE; gotcha= TRUE;
} }
break; break;
case 'O': // offerte case 'O': // offerte
indice= A_OFFERTE; // setta l'indice dell'archivio offerte indice= A_OFFERTE; // setta l'indice dell'archivio offerte
if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio offerte sia abilitato if (!(prassid.get_bool("GES", NULL, indice))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio offerte sia abilitato
else gotcha= TRUE; else gotcha= TRUE;
break; break;
default: // messaggio di errore se si indica un archivio non valido default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza"); error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break; break;
} }
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_gest_um= prassid.get_bool("GESUM", NULL, indice); // setta il booleano di abilitazione delle unità di misura _gest_um= prassid.get_bool("GESUM", NULL, indice); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, indice); // setta il booleano di abilitazione degli scaglioni _gest_sca= prassid.get_bool("GESSCA", NULL, indice); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, indice); // setta il booleano di abilitazione degli sconti/omaggi _gest_so= prassid.get_bool("GESSO", NULL, indice); // setta il booleano di abilitazione degli sconti/omaggi
_gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione della gestione delle valute _gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione della gestione delle valute
_rel= new TRelation(LF_RCONDV); // crea la relazione principale _rel= new TRelation(LF_RCONDV); // crea la relazione principale
_rel->add(LF_ANAGR, "CODART==CODRIGA", 1, LF_RCONDV, ART1); _rel->add(LF_ANAGR, "CODART==CODRIGA", 1, LF_RCONDV, ART1);
_rel->add(LF_ANAGR, "CODART==CODARTOM", 1, LF_RCONDV, ART2); _rel->add(LF_ANAGR, "CODART==CODARTOM", 1, LF_RCONDV, ART2);
_rel->add("%GMC", "CODTAB[1,3]==CODRIGA", 1, LF_RCONDV, GMC1); _rel->add("%GMC", "CODTAB[1,3]==CODRIGA", 1, LF_RCONDV, GMC1);
_rel->add("%GMC", "CODTAB[4,5]==CODRIGA", 1, LF_RCONDV, GMC2); _rel->add("%GMC", "CODTAB[4,5]==CODRIGA", 1, LF_RCONDV, GMC2);
_rel->add("%RFA", "CODTAB==CODRIGA", 1, LF_RCONDV, RFA); _rel->add("%RFA", "CODTAB==CODRIGA", 1, LF_RCONDV, RFA);
_rel->add(LF_CONDV, "TIPO==TIPO|CATVEN==CATVEN|TIPOCF==TIPOCF|CODCF==CODCF|COD==COD"); _rel->add(LF_CONDV, "TIPO==TIPO|CATVEN==CATVEN|TIPOCF==TIPOCF|CODCF==CODCF|COD==COD");
_rel->add("%CVE", "CODTAB==CATVEN", 1, LF_CONDV, CVE); _rel->add("%CVE", "CODTAB==CATVEN", 1, LF_CONDV, CVE);
_rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF", 1, LF_CONDV); _rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF", 1, LF_CONDV);
_rel->add("%VAL", "CODTAB==CODVAL", 1, LF_CONDV, VAL); _rel->add("%VAL", "CODTAB==CODVAL", 1, LF_CONDV, VAL);
_rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1); _rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1);
_rel->add("%UMS", "CODTAB==UMOM", 1, LF_RCONDV, UMS2); _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_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa
add_file(LF_RCONDV); // notifica il file delle righe alla stampa add_file(LF_RCONDV); // notifica il file delle righe alla stampa
enable_print_menu(); // abilita il menù di stampa enable_print_menu(); // abilita il menù di stampa
enable_setprint_menu(); // abilita il menù di settaggio della stampa enable_setprint_menu(); // abilita il menù di settaggio della stampa
} }
return (gotcha); return (gotcha);
} }
bool TStampa_condizioni_vendita::user_destroy() { bool TStampa_condizioni_vendita::user_destroy() {
@ -117,81 +117,81 @@ bool TStampa_condizioni_vendita::user_destroy() {
} }
bool TStampa_condizioni_vendita::set_print(int) { bool TStampa_condizioni_vendita::set_print(int) {
TMask mask("ve3200x"); TMask mask("ve3200x");
mask.set(F_TIPO, _condven); // settaggio del campo di tipo archivio mask.set(F_TIPO, _condven); // settaggio del campo di tipo archivio
switch (_condven[0]) { switch (_condven[0]) {
case 'L': // listini case 'L': // listini
DESTROY(F_C_COD); // eliminazione campi di altri archivi DESTROY(F_C_COD); // eliminazione campi di altri archivi
DESTROY(F_C_TIPOCF); DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF); DESTROY(F_C_CODCF);
DESTROY(F_O_COD); DESTROY(F_O_COD);
if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita
if (!_gest_val) KILL(F_L_LISTVALUTA); // disabilita condizionalmente la gestione delle valute if (!_gest_val) KILL(F_L_LISTVALUTA); // disabilita condizionalmente la gestione delle valute
break; break;
case 'C': // contratti case 'C': // contratti
DESTROY(F_L_COD); // settaggio dei campi da eliminare DESTROY(F_L_COD); // settaggio dei campi da eliminare
DESTROY(F_L_CATVEN); DESTROY(F_L_CATVEN);
DESTROY(F_L_LISTVALUTA); DESTROY(F_L_LISTVALUTA);
DESTROY(F_O_COD); DESTROY(F_O_COD);
if (!_codcon_codcf) { // disabilita condizionalmente i clienti/fornitori if (!_codcon_codcf) { // disabilita condizionalmente i clienti/fornitori
KILL(F_C_TIPOCF); KILL(F_C_TIPOCF);
KILL(F_C_CODCF); KILL(F_C_CODCF);
} }
break; break;
case 'O': // offerte case 'O': // offerte
DESTROY(F_L_COD); // settaggio dei campi da eliminare DESTROY(F_L_COD); // settaggio dei campi da eliminare
DESTROY(F_L_CATVEN); DESTROY(F_L_CATVEN);
DESTROY(F_L_LISTVALUTA); DESTROY(F_L_LISTVALUTA);
DESTROY(F_C_TIPOCF); DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF); DESTROY(F_C_CODCF);
DESTROY(F_C_COD); DESTROY(F_C_COD);
break; break;
} }
if (mask.run()== K_ENTER) { // lancia la maschera, se viene confermata vengono trovati gli estremi del cursore if (mask.run()== K_ENTER) { // lancia la maschera, se viene confermata vengono trovati gli estremi del cursore
_testastamp= FALSE; // azzera il flag di testa già stampata _testastamp= FALSE; // azzera il flag di testa già stampata
_listval= mask.get_bool(F_L_LISTVALUTA); // legge lo stato del checkbox di abilitazione dei listini in valuta _listval= mask.get_bool(F_L_LISTVALUTA); // legge lo stato del checkbox di abilitazione dei listini in valuta
_testacomp= mask.get_bool(F_TESTACOMP); // legge l'abilitazione della stampa completa della testata _testacomp= mask.get_bool(F_TESTACOMP); // legge l'abilitazione della stampa completa della testata
_righecomp= mask.get_bool(F_RIGHECOMP); // legge l'abilitazione della stampa completa delle righe _righecomp= mask.get_bool(F_RIGHECOMP); // legge l'abilitazione della stampa completa delle righe
TLocalisamfile &rcondv= _rel->lfile(); // prende il file principale TLocalisamfile &rcondv= _rel->lfile(); // prende il file principale
TRectype da(rcondv.curr()); // prepara il record di inizio regione TRectype da(rcondv.curr()); // prepara il record di inizio regione
da.zero(); da.zero();
da.put("TIPO", _condven); da.put("TIPO", _condven);
switch (_condven[0]) { // impostazione della chiave della testata switch (_condven[0]) { // impostazione della chiave della testata
case 'L': // listini case 'L': // listini
if (_codlis_catven) da.put("CATVEN", mask.get(F_L_CATVEN)); if (_codlis_catven) da.put("CATVEN", mask.get(F_L_CATVEN));
else da.blank("CATVEN"); // riempie il campo di blank se non è gestito else da.blank("CATVEN"); // riempie il campo di blank se non è gestito
da.blank("TIPOCF"); // i campi non gestiti vengono riempiti di blank da.blank("TIPOCF"); // i campi non gestiti vengono riempiti di blank
da.blank("CODCF"); da.blank("CODCF");
da.put("COD", mask.get(F_L_COD)); da.put("COD", mask.get(F_L_COD));
break; break;
case 'C': // contratti case 'C': // contratti
da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank
if (_codcon_codcf) { if (_codcon_codcf) {
da.put("TIPOCF", mask.get(F_C_TIPOCF)); da.put("TIPOCF", mask.get(F_C_TIPOCF));
da.put("CODCF", mask.get(F_C_CODCF)); da.put("CODCF", mask.get(F_C_CODCF));
} else { } else {
da.blank("TIPOCF"); // riempie i campi di blank se non sono gestiti da.blank("TIPOCF"); // riempie i campi di blank se non sono gestiti
da.blank("CODCF"); da.blank("CODCF");
} }
da.put("COD", mask.get(F_C_COD)); da.put("COD", mask.get(F_C_COD));
break; break;
case 'O': // offerte case 'O': // offerte
da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank
da.blank("TIPOCF"); da.blank("TIPOCF");
da.blank("CODCF"); da.blank("CODCF");
da.put("COD", mask.get(F_O_COD)); da.put("COD", mask.get(F_O_COD));
break; break;
} }
TRectype a(da); // prepara il record di fine regione TRectype a(da); // prepara il record di fine regione
if (!(mask.get_bool(F_TUTTERIGHE))) { // setta il filtro sulle righe solo se non è stato selezionato il flag di "tutte le righe" if (!(mask.get_bool(F_TUTTERIGHE))) { // setta il filtro sulle righe solo se non è stato selezionato il flag di "tutte le righe"
da.put("TIPORIGA", mask.get(F_TIPORIGHE)); da.put("TIPORIGA", mask.get(F_TIPORIGHE));
da.put("CODRIGA", mask.get(F_DARIGA_A)); da.put("CODRIGA", mask.get(F_DARIGA_A));
a.put("TIPORIGA", mask.get(F_TIPORIGHE)); a.put("TIPORIGA", mask.get(F_TIPORIGHE));
a.put("CODRIGA", mask.get(F_ARIGA_A)); a.put("CODRIGA", mask.get(F_ARIGA_A));
} }
current_cursor()->setregion(da, a); // setta la regione sul cursore current_cursor()->setregion(da, a); // setta la regione sul cursore
force_setpage(); // forza il lancio della set_page() ad ogni record del file da stampare force_setpage(); // forza il lancio della set_page() ad ogni record del file da stampare
disable_links(); // disabilita tutti i link ipertestuali disable_links(); // disabilita tutti i link ipertestuali
// _rcondv_link_id= enable_link("Collegamento a righe condizioni di vendita", 'g'); // abilita il collegamento // _rcondv_link_id= enable_link("Collegamento a righe condizioni di vendita", 'g'); // abilita il collegamento
return TRUE; return TRUE;
} else return FALSE; } else return FALSE;
@ -216,76 +216,90 @@ UO QOM QBASE CODARTOM PROMAGGIO
*/ */
void TStampa_condizioni_vendita::preprocess_header() { void TStampa_condizioni_vendita::preprocess_header() {
reset_header(); // l'header viene resettato reset_header(); // l'header viene resettato
int i= 1; // contatore delle linee int i= 1; // contatore delle linee
const long firm= get_firm(); // legge l'id della ditta corrente const long firm= get_firm(); // legge l'id della ditta corrente
TLocalisamfile ditte(LF_NDITTE); // apre il file ditte TLocalisamfile ditte(LF_NDITTE); // apre il file ditte
ditte.zero(); // vuota il record ditte.zero(); // vuota il record
ditte.put("CODDITTA", firm); // riempie la chiave ditte.put("CODDITTA", firm); // riempie la chiave
if (ditte.read()== NOERR) { // se il record della ditta viene trovato viene settato l'header 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 const TString &s= ditte.get("RAGSOC"); // legge la ragione sociale della ditta
set_header(i, "@1gDitta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header set_header(i, "@1gDitta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header
} }
TLocalisamfile &condv= current_cursor()->file(LF_CONDV); TLocalisamfile &condv= current_cursor()->file(LF_CONDV);
i+=2; // stampa breve della testata, occupa almeno due linee i+=2; // stampa breve della testata, occupa almeno due linee
set_header(i-1, "@14gCod @18gDescrizione @69gVal. dal @78gal @87gIL @90gUM @93gSC @96gSO @99gST @109gSeq"); // setta l'header del codice, della descrizione, della validità, dei booleani, ecc. set_header(i-1, "@14gCod @18gDescrizione @69gVal. dal @78gal @87gIL @90gUM @93gSC @96gSO @99gST @109gSeq"); // setta l'header del codice, della descrizione, della validità, dei booleani, ecc.
set_header(i, "@14g%3s @18g%s @69g%s @78g%s @87g%s @90g%s @93g%s @96g%s @99g%s @109g%s", set_header(i, "@14g%3s", (const char *) condv.get("COD"));
(const char *)(condv.sget("COD")), (const char *)(condv.sget("DESCR")), (const char *)(condv.sget("VALIN")), set_header(i, "@18g%s", (const char *) condv.get("DESCR"));
(const char *)(condv.sget("VALFIN")), (const char *)(condv.sget("IMPLORDI")), (const char *)(condv.sget("GESTUM")), set_header(i, "@69g%s", (const char *) condv.get("VALIN"));
(const char *)(condv.sget("GESTSCAGL")), (const char *)(condv.sget("GESTSCO")), (const char *)(condv.sget("SCONST")), set_header(i, "@78g%s", (const char *) condv.get("VALFIN"));
(const char *)(condv.sget("SEQRIC"))); // codice, descriz., validità e booleani set_header(i, "@87g%s", (const char *) condv.get("IMPLORDI"));
if ((_condven=="L") && _codlis_catven) { // siamo sui listini? set_header(i, "@93g%s", (const char *) condv.get("GESTUM"));
set_header(i-1, "@11gCV"); // setta l'header della categoria di vendita set_header(i, "@90g%s", (const char *) condv.get("GESTSCAGL"));
set_header(i, "@11g%s", (const char *)(condv.sget("CATVEN"))); // categoria di vendita set_header(i, "@96g%s", (const char *) condv.get("GESTSCO"));
set_header(i, "@99g%s", (const char *) condv.get("SCONST"));
set_header(i, "@109g%s",(const char *) condv.get("SEQRIC"));
if ((_condven=="L") && _codlis_catven)
{ // siamo sui listini?
set_header(i-1, "@11gCV"); // setta l'header della categoria di vendita
set_header(i, "@11g%s", (const char *)(condv.get("CATVEN"))); // categoria di vendita
} }
if (_condven=="C") { // siamo sui contratti? if (_condven=="C")
if (_codcon_codcf) { // è abilitato il codice cliente/fornitore? { // siamo sui contratti?
set_header(i-1, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori if (_codcon_codcf)
set_header(i, "@1g%s @4g%6s", (const char *)(condv.sget("TIPOCF")), (const char *)(condv.sget("CODCF"))); // cliente/fornitore { // è abilitato il codice cliente/fornitore?
} set_header(i-1, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori
set_header(i-1, "@102gOB"); // setta l'header di contratto obbligatorio set_header(i, "@1g%s", (const char *)condv.get("TIPOCF")); // cliente/fornitore
set_header(i, "@102g%s", (const char *)(condv.sget("OBBLIG"))); // booleano set_header(i, "@4g%6s", (const char *)condv.get("CODCF")); // cliente/fornitore
}
set_header(i-1, "@102gOB"); // setta l'header di contratto obbligatorio
set_header(i, "@102g%s", (const char *)(condv.get("OBBLIG"))); // booleano
} }
if (_condven=="L") { // siamo su listini? if (_condven=="L")
set_header(i-1, "@105gSuc"); // setta l'header per il codice di listino successivo { // siamo su listini?
set_header(i, "@105g%3s", (const char *)(condv.sget("CODLISSUCC"))); // codice successivo set_header(i-1, "@105gSuc"); // setta l'header per il codice di listino successivo
set_header(i, "@105g%3s", (const char *)(condv.get("CODLISSUCC"))); // codice successivo
} }
if (_gest_val) { // c'è la gestione della valuta? if (_gest_val)
i+=2; // occupa altre due linee { // c'è la gestione della valuta?
set_header(i-1, "@1gVal @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione i+=2; // occupa altre due linee
set_header(i, "@1g%s @5g%21s @27g%s", (const char *)condv.sget("CODVAL"), (const char *)condv.sget("CAMBIO"), (const char *)condv.sget("DATACAM")); // cambio e valuta set_header(i-1, "@1gVal @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione
} set_header(i, "@1g%s", (const char *)condv.get("CODVAL")); // cambio e valuta
set_header(++i, ""); // salta una riga set_header(i, "@5g%21s", (const char *)condv.get("CAMBIO")); // cambio e valuta
if (!_righecomp) { // impostazione dell'header delle righe se non c'è la stampa esaustiva set_header(i, "@27g%s", (const char *)condv.get("DATACAM")); // cambio e valuta
set_header(++i, "@1gT @3gCodice riga @27gS @29gQuantita' limite @51gPrezzo @73gSconto @99gA @101gIVA @106gProvvig."); // setta l'header della chiave, della quantità limite e del prezzo }
set_header(++i, ""); // salta una riga
if (!_righecomp)
{ // impostazione dell'header delle righe se non c'è la stampa esaustiva
set_header(++i, "@1gT @3gCodice riga @27gS @29gQuantita' limite @51gPrezzo @73gSconto @99gA @101gIVA @106gProvvig."); // setta l'header della chiave, della quantità limite e del prezzo
if ((_condven=="L") || (_condven=="O")) set_header(i, "@24gUM"); // setta l'header dell'unità di misura if ((_condven=="L") || (_condven=="O")) set_header(i, "@24gUM"); // setta l'header dell'unità di misura
set_header(++i, "@1gUMO @5gQuantita' omaggio @27gQuantita' base @49gCod. art. omagg. @70gPrezzo omaggio"); // setta l'header dello sconto/omaggio set_header(++i, "@1gUMO @5gQuantita' omaggio @27gQuantita' base @49gCod. art. omagg. @70gPrezzo omaggio"); // setta l'header dello sconto/omaggio
if ((_condven=="C") || (_condven=="O")) set_header(i, "@92gLotto"); // setta l'header del lotto if ((_condven=="C") || (_condven=="O")) set_header(i, "@92gLotto"); // setta l'header del lotto
if (_condven=="O") set_header(i, "@99gEsaur."); // setta l'header dell'articolo in esaurimento if (_condven=="O") set_header(i, "@99gEsaur."); // setta l'header dell'articolo in esaurimento
} }
set_header(++i, ""); // aggiunge due linee vuote set_header(++i, ""); // aggiunge due linee vuote
set_header(++i, ""); set_header(++i, "");
} }
void TStampa_condizioni_vendita::preprocess_footer() { void TStampa_condizioni_vendita::preprocess_footer() {
reset_footer(); reset_footer();
int i= 1; // indice di linea int i= 1; // indice di linea
set_footer(i, ""); // salta una linea set_footer(i, ""); // salta una linea
set_footer(++i, "@125gPag @#"); // l'unica linea del footer contiene il numero di pagina set_footer(++i, "@125gPag @#"); // l'unica linea del footer contiene il numero di pagina
} }
void TStampa_condizioni_vendita::set_page(int file, int) { void TStampa_condizioni_vendita::set_page(int file, int) {
if (file== LF_RCONDV) { // se il file in stampa non è il file principale non c'è nulla da fare if (file== LF_RCONDV) { // se il file in stampa non è il file principale non c'è nulla da fare
int i= 0; // indice di riga int i= 0; // indice di riga
if ((printer().getcurrentpage()==1) && _testacomp && (!_testastamp)) { // stampa della testata in forma completa if ((printer().getcurrentpage()==1) && _testacomp && (!_testastamp)) { // stampa della testata in forma completa
if ((_condven=="L") && _codlis_catven) set_row(++i, "Cat. di vendita: @2s @50s", FLD(LF_CONDV, "CATVEN"), FLD(-CVE, "S0")); if ((_condven=="L") && _codlis_catven) set_row(++i, "Cat. di vendita: @2s @50s", FLD(LF_CONDV, "CATVEN"), FLD(-CVE, "S0"));
if ((_condven=="C") && _codcon_codcf) set_row(++i, "Cliente/fornitore: @1s @6s @50s", FLD(LF_CONDV, "TIPOCF"), FLD(LF_CONDV, "CODCF"), FLD(LF_CLIFO, "RAGSOC")); if ((_condven=="C") && _codcon_codcf) set_row(++i, "Cliente/fornitore: @1s @6s @50s", FLD(LF_CONDV, "TIPOCF"), FLD(LF_CONDV, "CODCF"), FLD(LF_CLIFO, "RAGSOC"));
set_row(++i, "Codice: @3s @50s", FLD(LF_CONDV, "COD"), FLD(LF_CONDV, "DESCR")); set_row(++i, "Codice: @3s @50s", FLD(LF_CONDV, "COD"), FLD(LF_CONDV, "DESCR"));
if (_gest_val) { if (_gest_val) {
set_row(++i, "Valuta: @3s @50s", FLD(LF_CONDV, "CODVAL"), FLD(-VAL, "S0")); set_row(++i, "Valuta: @3s @50s", FLD(LF_CONDV, "CODVAL"), FLD(-VAL, "S0"));
set_row(++i, "Cambio: @15.5n (@d)", FLD(LF_CONDV, "CAMBIO"), FLD(LF_CONDV, "DATACAM")); set_row(++i, "Cambio: @15.5n (@d)", FLD(LF_CONDV, "CAMBIO"), FLD(LF_CONDV, "DATACAM"));
} }
set_row(++i, "Validità: dal @d al @d", FLD(LF_CONDV, "VALIN"), FLD(LF_CONDV, "VALFIN")); set_row(++i, "Validità: dal @d al @d", FLD(LF_CONDV, "VALIN"), FLD(LF_CONDV, "VALFIN"));
set_row(++i, "Importi lordi: @f", FLD(LF_CONDV, "IMPLORDI")); set_row(++i, "Importi lordi: @f", FLD(LF_CONDV, "IMPLORDI"));
set_row(++i, "Gestione unità di misura: @f", FLD(LF_CONDV, "GESTUM")); set_row(++i, "Gestione unità di misura: @f", FLD(LF_CONDV, "GESTUM"));
set_row(++i, "Gestione scaglioni: @f", FLD(LF_CONDV, "GESTSCAGL")); set_row(++i, "Gestione scaglioni: @f", FLD(LF_CONDV, "GESTSCAGL"));
@ -297,71 +311,71 @@ void TStampa_condizioni_vendita::set_page(int file, int) {
set_row(++i, ""); set_row(++i, "");
set_row(++i, ""); set_row(++i, "");
_testastamp= TRUE; _testastamp= TRUE;
} }
if (_righecomp) { // stampa della riga in forma completa if (_righecomp) { // stampa della riga in forma completa
TLocalisamfile &rcondv= current_cursor()->file(); TLocalisamfile &rcondv= current_cursor()->file();
TLocalisamfile &condv= current_cursor()->file(LF_CONDV); TLocalisamfile &condv= current_cursor()->file(LF_CONDV);
TString tiporiga= rcondv.get("TIPORIGA"); TString tiporiga= rcondv.get("TIPORIGA");
switch (tiporiga[0]) { switch (tiporiga[0]) {
case 'A': case 'A':
set_row(++i, "Riga: @1s @20s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); set_row(++i, "Riga: @1s @20s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Articolo: @50s", FLD(-ART1, "DESCR")); set_row(++i, "Articolo: @50s", FLD(-ART1, "DESCR"));
break; break;
case 'G': case 'G':
set_row(++i, "Riga: @1s @3s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); set_row(++i, "Riga: @1s @3s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Gruppo merceologico: @50s", FLD(-GMC1, "S0")); set_row(++i, "Gruppo merceologico: @50s", FLD(-GMC1, "S0"));
break; break;
case 'S': case 'S':
set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Sottogruppo merceologico: @50s", FLD(-GMC2, "S0")); set_row(++i, "Sottogruppo merceologico: @50s", FLD(-GMC2, "S0"));
break; break;
case 'R': case 'R':
set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA")); set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Raggruppamento fiscale: @50s", FLD(-RFA, "S0")); set_row(++i, "Raggruppamento fiscale: @50s", FLD(-RFA, "S0"));
break; break;
} }
if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura: @2s @50s", FLD(LF_RCONDV, "UM"), FLD(-UMS1, "S0")); if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura: @2s @50s", FLD(LF_RCONDV, "UM"), FLD(-UMS1, "S0"));
if (condv.get_bool("GESTSCAGL")) { if (condv.get_bool("GESTSCAGL")) {
set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL")); set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL"));
set_row(++i, "Quantità limite scaglione: @15.5n", FLD(LF_RCONDV, "QLIM")); set_row(++i, "Quantità limite scaglione: @15.5n", FLD(LF_RCONDV, "QLIM"));
} }
set_row(++i, "Prezzo: @18.2n", FLD(LF_RCONDV, "PREZZO")); set_row(++i, "Prezzo: @18.2n", FLD(LF_RCONDV, "PREZZO"));
set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO")); set_row(++i, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO"));
set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA")); set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA"));
set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA")); set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA"));
set_row(++i, "Percentuale di provvigione: @5.2n", FLD(LF_RCONDV, "PERCPROVV")); set_row(++i, "Percentuale di provvigione: @5.2n", FLD(LF_RCONDV, "PERCPROVV"));
if (condv.get_bool("GESTSCO")) { if (condv.get_bool("GESTSCO")) {
set_row(++i, "Quantità merce omaggio: @15.5n", FLD(LF_RCONDV, "QOM")); set_row(++i, "Quantità merce omaggio: @15.5n", FLD(LF_RCONDV, "QOM"));
set_row(++i, "Quantità base: @15.5n", FLD(LF_RCONDV, "QBASE")); set_row(++i, "Quantità base: @15.5n", FLD(LF_RCONDV, "QBASE"));
set_row(++i, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR")); set_row(++i, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR"));
set_row(++i, "Prezzo omaggio: @18.2n", FLD(LF_RCONDV, "PROMAGGIO")); set_row(++i, "Prezzo omaggio: @18.2n", FLD(LF_RCONDV, "PROMAGGIO"));
if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura quantità omaggio: @2s @50s", FLD(LF_RCONDV, "UMOM"), FLD(-UMS2, "S0")); if (condv.get_bool("GESTUM")) set_row(++i, "Unità di misura quantità omaggio: @2s @50s", FLD(LF_RCONDV, "UMOM"), FLD(-UMS2, "S0"));
} }
// if ((_condven=="C") || (_condven=="O")) set_row(++i, "Codice lotto: @6s", FLD(LF_RCONDV, "CODLOTTO")); // if ((_condven=="C") || (_condven=="O")) set_row(++i, "Codice lotto: @6s", FLD(LF_RCONDV, "CODLOTTO"));
if (_condven=="O") set_row(++i, "Articolo in esaurimento: @f", FLD(LF_RCONDV, "ARTES")); if (_condven=="O") set_row(++i, "Articolo in esaurimento: @f", FLD(LF_RCONDV, "ARTES"));
set_row(++i, ""); // salta una riga set_row(++i, ""); // salta una riga
} else { // stampa della riga in forma abbreviata } else { // stampa della riga in forma abbreviata
set_row(++i, "@1g@1s @3g@20s @27g@1s @29g@15.5n @51g@18.2n @73g@25s @99g@1s @101g@4s @106g@5.2n", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"), FLD(LF_RCONDV, "NSCAGL"), FLD(LF_RCONDV, "QLIM"), FLD(LF_RCONDV, "PREZZO"), set_row(++i, "@1g@1s @3g@20s @27g@1s @29g@15.5n @51g@18.2n @73g@25s @99g@1s @101g@4s @106g@5.2n", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"), FLD(LF_RCONDV, "NSCAGL"), FLD(LF_RCONDV, "QLIM"), FLD(LF_RCONDV, "PREZZO"),
FLD(LF_RCONDV, "SCONTO"), FLD(LF_RCONDV, "ADDIVA"), FLD(LF_RCONDV, "CODIVA"), FLD(LF_RCONDV, "PERCPROVV")); // codice, prezzo... FLD(LF_RCONDV, "SCONTO"), FLD(LF_RCONDV, "ADDIVA"), FLD(LF_RCONDV, "CODIVA"), FLD(LF_RCONDV, "PERCPROVV")); // codice, prezzo...
if ((_condven=="L") || (_condven=="O")) set_row(i, "@24g@2s", FLD(LF_RCONDV, "UM")); // unità di misura if ((_condven=="L") || (_condven=="O")) set_row(i, "@24g@2s", FLD(LF_RCONDV, "UM")); // unità di misura
set_row(++i, "@1g@2s @5g@15.5n @27g@15.5n @49g@20s @70g@18.2n", FLD(LF_RCONDV, "UMOM"), FLD(LF_RCONDV, "QOM"), FLD(LF_RCONDV, "QBASE"), FLD(LF_RCONDV, "CODARTOM"), FLD(LF_RCONDV, "PROMAGGIO")); // sconto/omaggio set_row(++i, "@1g@2s @5g@15.5n @27g@15.5n @49g@20s @70g@18.2n", FLD(LF_RCONDV, "UMOM"), FLD(LF_RCONDV, "QOM"), FLD(LF_RCONDV, "QBASE"), FLD(LF_RCONDV, "CODARTOM"), FLD(LF_RCONDV, "PROMAGGIO")); // sconto/omaggio
if ((_condven=="C") || (_condven=="O")) set_row(i, "@92g@6s", FLD(LF_RCONDV, "CODLOTTO")); // lotto if ((_condven=="C") || (_condven=="O")) set_row(i, "@92g@6s", FLD(LF_RCONDV, "CODLOTTO")); // lotto
if (_condven=="O") set_row(i, "@99g@1s", FLD(LF_RCONDV, "ARTES")); if (_condven=="O") set_row(i, "@99g@1s", FLD(LF_RCONDV, "ARTES"));
set_row(++i, ""); // salta una riga set_row(++i, ""); // salta una riga
} }
} }
} }
/* /*
void TStampa_condizioni_vendita::process_link(int id, const char *text) { void TStampa_condizioni_vendita::process_link(int id, const char *text) {
if (id== _rcondv_link_id) { if (id== _rcondv_link_id) {
TString body= "1|"; // istanzia la stringa per il corpo del messaggio e gli aggiunge il numero della chiave e il separatore 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 body << text; // aggiunge al corpo del messaggio il codice dell'articolo per riempire la chiave
TMessage msg(RCONDV_APP, MSG_LN, (const char *)body); // crea il messaggio per l'applicazione TMessage msg(RCONDV_APP, MSG_LN, (const char *)body); // crea il messaggio per l'applicazione
msg.send(); // invia il messaggio msg.send(); // invia il messaggio
TExternal_app ve2_2(RCONDV_APP); // crea l'applicazione esterna TExternal_app ve2_2(RCONDV_APP); // crea l'applicazione esterna
ve2_2.run(); // lancia l'applicazione esterna ve2_2.run(); // lancia l'applicazione esterna
} }
} }
*/ */

View File

@ -251,10 +251,10 @@ int TBatch_crea_doc::run_mask(TRectype& first, TRectype& last)
// first.put ("STATO", _stato_i_doc_i); // stato documento originale // first.put ("STATO", _stato_i_doc_i); // stato documento originale
// last.put ("STATO", _stato_i_doc_i); // last.put ("STATO", _stato_i_doc_i);
temps = _msk->get(F_CODICE_CLIENTE_DA); temps = _msk->get(F_CODICE_CLIFO_DA);
if (temps.not_empty()) if (temps.not_empty())
first.put ("CODCF", temps); // codice cliente (v. filterfunct) first.put ("CODCF", temps); // codice cliente (v. filterfunct)
temps = _msk->get(F_CODICE_CLIENTE_A); temps = _msk->get(F_CODICE_CLIFO_A);
if (temps.not_empty()) if (temps.not_empty())
last.put ("CODCF", temps); // codice cliente (v. filterfunct) last.put ("CODCF", temps); // codice cliente (v. filterfunct)

View File

@ -1,6 +1,6 @@
PAGE "Selezione parametri" 0 0 0 0 PAGE "Selezione parametri" 0 0 0 0
#include <ve6300.h> #include "ve6300.h"
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2
BEGIN BEGIN

View File

@ -1,6 +1,6 @@
PAGE "Selezione parametri" 0 0 0 0 PAGE "Selezione parametri" 0 0 0 0
#include <ve6300.h> #include "ve6300.h"
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2
BEGIN BEGIN