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,11 +1,11 @@
// campi della tabella di gestione delle elaborazioni differite // campi della tabella di gestione delle elaborazioni differite
#define F_CODICE 101 #define F_CODICE 101
#define F_DESCR 102 #define F_DESCR 102
#define F_TIPODOC 103 #define F_TIPODOC 103
#define F_STATO_I_DOC_I 104 #define F_STATO_I_DOC_I 104
#define F_STATO_F_DOC_I 106 #define F_STATO_F_DOC_I 106
#define F_TIPODOCDES 105 #define F_TIPODOCDES 105
#define F_STATO_F_DOC_F 107 #define F_STATO_F_DOC_F 107
#define F_PROGRAMMA 108 #define F_PROGRAMMA 108
#define F_CODNUM 109 #define F_CODNUM 109
#define F_AVVIA 110 // button per lanciare l'elaborazione selezionata #define F_AVVIA 110 // button per lanciare l'elaborazione selezionata

View File

@ -1,122 +1,122 @@
#include "batbeld.h" #include "batbeld.h"
TOOLBAR "" 0 20 0 2 TOOLBAR "" 0 20 0 2
#include <toolbar.h> #include <toolbar.h>
ENDPAGE ENDPAGE
PAGE "Tabella elaborazioni differite" 0 0 0 0 PAGE "Tabella elaborazioni differite" 0 0 0 0
STRING F_CODICE 8 // campo della maschera: stringa, id = F_CODICE, 8 caratteri STRING F_CODICE 8 // campo della maschera: stringa, id = F_CODICE, 8 caratteri
BEGIN BEGIN
PROMPT 1 2 "Codice " // scrivi nella maschera alle coord. (x,y) = (1,2) il prompt "Codice" PROMPT 1 2 "Codice " // scrivi nella maschera alle coord. (x,y) = (1,2) il prompt "Codice"
FLAG "U" FLAG "U"
FIELD CODTAB // campo del database tabelle (tab) in cui salvare il valore immesso dall'utente FIELD CODTAB // campo del database tabelle (tab) in cui salvare il valore immesso dall'utente
CHECKTYPE REQUIRED // indica che il campo deve essere compilato per poter salvare CHECKTYPE REQUIRED // indica che il campo deve essere compilato per poter salvare
WARNING "E' necessario specificare un valore" WARNING "E' necessario specificare un valore"
USE ELD // indica quale tabella utilizzare per le ricerche USE ELD // indica quale tabella utilizzare per le ricerche
INPUT CODTAB F_CODICE // cerca nel dbase la prima occorrenza di F_CODICE cercando nel campo CODTAB INPUT CODTAB F_CODICE // cerca nel dbase la prima occorrenza di F_CODICE cercando nel campo CODTAB
DISPLAY "Codice@10" CODTAB // visualizza i codici trovati (CODTAB) DISPLAY "Codice@10" CODTAB // visualizza i codici trovati (CODTAB)
DISPLAY "Descrizione@50" S0 // visualizza la descrizione (campo S0 in uno spazio di 50 caratteri) DISPLAY "Descrizione@50" S0 // visualizza la descrizione (campo S0 in uno spazio di 50 caratteri)
OUTPUT F_CODICE CODTAB // metti F_CODICE nel campo codtab OUTPUT F_CODICE CODTAB // metti F_CODICE nel campo codtab
OUTPUT F_DESCR S0 // metti F_DESCR nel campo S0 OUTPUT F_DESCR S0 // metti F_DESCR nel campo S0
KEY 1 KEY 1
HELP "Codice dell'elaborazione differita da eseguire" HELP "Codice dell'elaborazione differita da eseguire"
MESSAGE ENABLE, F_PROGRAMMA MESSAGE ENABLE, F_PROGRAMMA
END END
STRING F_DESCR 50 STRING F_DESCR 50
BEGIN BEGIN
PROMPT 1 3 "Descrizione " PROMPT 1 3 "Descrizione "
FIELD S0 FIELD S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "E' necessario specificare un valore" WARNING "E' necessario specificare un valore"
USE ELD KEY 2 USE ELD KEY 2
INPUT S0 F_DESCR INPUT S0 F_DESCR
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODICE // usa il segmento di codice per OUTPUT F_CODICE COPY OUTPUT F_CODICE // usa il segmento di codice per OUTPUT F_CODICE
KEY 2 KEY 2
END END
STRING F_TIPODOC 4 STRING F_TIPODOC 4
BEGIN BEGIN
PROMPT 1 4 "Tipo documento originale " PROMPT 1 4 "Tipo documento originale "
FIELD S6 // usa il campo S6 del database tab FIELD S6 // usa il campo S6 del database tab
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "E' necessario specificare un valore" WARNING "E' necessario specificare un valore"
USE %TIP USE %TIP
INPUT CODTAB F_TIPODOC INPUT CODTAB F_TIPODOC
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Tipo documento@50" S0 DISPLAY "Tipo documento@50" S0
OUTPUT F_TIPODOC CODTAB OUTPUT F_TIPODOC CODTAB
END END
// STRING F_STATO_I_DOC_I 1 // STRING F_STATO_I_DOC_I 1
// BEGIN // BEGIN
// PROMPT 1 5 "Stato del documento originale " // PROMPT 1 5 "Stato del documento originale "
// FIELD S7 // FIELD S7
// CHECKTYPE REQUIRED // CHECKTYPE REQUIRED
// WARNING "E' necessario specificare un valore" // WARNING "E' necessario specificare un valore"
// END // END
// STRING F_STATO_F_DOC_I 1 // STRING F_STATO_F_DOC_I 1
// BEGIN // BEGIN
// PROMPT 1 6 "Stato finale del documento originale " // PROMPT 1 6 "Stato finale del documento originale "
// FIELD S4 // FIELD S4
// CHECKTYPE REQUIRED // CHECKTYPE REQUIRED
// WARNING "E' necessario specificare un valore" // WARNING "E' necessario specificare un valore"
// END // END
STRING F_TIPODOCDES 4 STRING F_TIPODOCDES 4
BEGIN BEGIN
PROMPT 1 7 "Tipo documento di destinazione " PROMPT 1 7 "Tipo documento di destinazione "
FIELD S8 FIELD S8
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "E' necessario specificare un valore" WARNING "E' necessario specificare un valore"
USE %TIP USE %TIP
INPUT CODTAB F_TIPODOCDES INPUT CODTAB F_TIPODOCDES
COPY DISPLAY F_TIPODOC COPY DISPLAY F_TIPODOC
OUTPUT F_TIPODOCDES CODTAB OUTPUT F_TIPODOCDES CODTAB
END END
// STRING F_STATO_F_DOC_F 1 // STRING F_STATO_F_DOC_F 1
// BEGIN // BEGIN
// PROMPT 1 8 "Stato finale del documento finale " // PROMPT 1 8 "Stato finale del documento finale "
// FIELD S9 // FIELD S9
// CHECKTYPE REQUIRED // CHECKTYPE REQUIRED
// WARNING "E' necessario specificare un valore" // WARNING "E' necessario specificare un valore"
// END // END
STRING F_CODNUM 4 STRING F_CODNUM 4
BEGIN BEGIN
PROMPT 1 9 "Codice numerazione per il documento di destinazione: " PROMPT 1 9 "Codice numerazione per il documento di destinazione: "
FIELD S5 FIELD S5
USE NUM USE NUM
INPUT CODTAB F_CODNUM INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM CODTAB OUTPUT F_CODNUM CODTAB
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "E' necessario specificare un valore" WARNING "E' necessario specificare un valore"
END END
STRING F_PROGRAMMA 50 STRING F_PROGRAMMA 50
BEGIN BEGIN
// PROMPT 1 10 "Programma (nome + parametri): " // PROMPT 1 10 "Programma (nome + parametri): "
PROMPT 1 10 "Metodo di elaborazione " PROMPT 1 10 "Metodo di elaborazione "
FLAGS "G" FLAGS "G"
FIELD S1 FIELD S1
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
BUTTON F_AVVIA 21 2 BUTTON F_AVVIA 21 2
BEGIN BEGIN
PROMPT 1 11 "Lancia elaborazione" PROMPT 1 11 "Lancia elaborazione"
MESSAGE RUN,#F_PROGRAMMA MESSAGE RUN,#F_PROGRAMMA
FL "D" FL "D"
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

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;
} }
@ -361,7 +361,7 @@ bool TMotore_application::ndoc_handler( TMask_field& f, KEY key )
bool TMotore_application::clifo_handler( TMask_field& f, KEY key ) bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
{ {
if ( key == K_TAB && f.active( ) ) if ( key == K_TAB && f.active( ) )
{ {
TMask& m = f.mask( ); TMask& m = f.mask( );
@ -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

@ -1,39 +1,39 @@
// campi comuni a tutti gli archivi // campi comuni a tutti gli archivi
#define F_TIPO 111 #define F_TIPO 111
#define F_COD 112 #define F_COD 112
#define F_DESCR 113 #define F_DESCR 113
#define F_CODVAL 114 #define F_CODVAL 114
#define F_CAMBIO 115 #define F_CAMBIO 115
#define F_DATACAM 116 #define F_DATACAM 116
#define F_VALIN 117 #define F_VALIN 117
#define F_VALFIN 118 #define F_VALFIN 118
#define F_IMPLORDI 119 #define F_IMPLORDI 119
#define F_GESTUM 120 #define F_GESTUM 120
#define F_GESTSCAGL 121 #define F_GESTSCAGL 121
#define F_GESTSCO 122 #define F_GESTSCO 122
#define F_SCONST 123 #define F_SCONST 123
#define F_SEQRIC_1 124 #define F_SEQRIC_1 124
#define F_SEQRIC_2 125 #define F_SEQRIC_2 125
#define F_SEQRIC_3 126 #define F_SEQRIC_3 126
#define F_SEQRIC_4 127 #define F_SEQRIC_4 127
// campi riservati ai listini // campi riservati ai listini
#define F_L_CATVEN 131 #define F_L_CATVEN 131
#define F_L_COD 132 #define F_L_COD 132
#define F_L_CODSUCC 133 #define F_L_CODSUCC 133
#define F_L_DESVEN 134 #define F_L_DESVEN 134
#define F_L_DESSUCC 135 #define F_L_DESSUCC 135
// campi riservati ai contratti // campi riservati ai contratti
#define F_C_TIPOCF 141 #define F_C_TIPOCF 141
#define F_C_CODCF 142 #define F_C_CODCF 142
#define F_C_COD 143 #define F_C_COD 143
#define F_C_OBBLIG 144 #define F_C_OBBLIG 144
#define F_C_DESCF 145 #define F_C_DESCF 145
// campi riservati alle offerte // campi riservati alle offerte
#define F_O_COD 151 #define F_O_COD 151
// pulsante di lancio dell'edit delle righe // pulsante di lancio dell'edit delle righe
#define BTN_RIGHE 161 #define BTN_RIGHE 161

View File

@ -1,311 +1,310 @@
#include <lffiles.h> #include <lffiles.h>
#include "ve2200x.h" #include "ve2200x.h"
TOOLBAR "" 0 20 60 2 TOOLBAR "" 0 20 60 2
#include <toolbar.h> #include <toolbar.h>
ENDPAGE ENDPAGE
PAGE "Archivio condizioni di vendita " 0 0 70 20 PAGE "Archivio condizioni di vendita " 0 0 70 20
STRING F_TIPO 1 STRING F_TIPO 1
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FIELD LF_CONDV->TIPO FIELD LF_CONDV->TIPO
FLAG "DUP" FLAG "DUP"
KEY 1 KEY 1
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
// campo riservato ai listini // campo riservato ai listini
STRING F_L_CATVEN 2 STRING F_L_CATVEN 2
BEGIN BEGIN
PROMPT 2 2 "Cat. vendita " PROMPT 2 2 "Cat. vendita "
FIELD LF_CONDV->CATVEN FIELD LF_CONDV->CATVEN
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE %CVE USE %CVE
INPUT CODTAB F_L_CATVEN INPUT CODTAB F_L_CATVEN
DISPLAY "Cat." CODTAB DISPLAY "Cat." CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_L_CATVEN CODTAB OUTPUT F_L_CATVEN CODTAB
OUTPUT F_L_DESVEN S0 OUTPUT F_L_DESVEN S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
// campo riservato ai listini // campo riservato ai listini
STRING F_L_DESVEN 50 STRING F_L_DESVEN 50
BEGIN BEGIN
PROMPT 22 2 "" PROMPT 22 2 ""
FLAG "D" FLAG "D"
END END
// campo riservato ai contratti // campo riservato ai contratti
LIST F_C_TIPOCF 7 LIST F_C_TIPOCF 7
BEGIN BEGIN
PROMPT 2 2 "Tipo " PROMPT 2 2 "Tipo "
FIELD LF_CONDV->TIPOCF FIELD LF_CONDV->TIPOCF
KEY 1 KEY 1
ITEM "C|Cliente" ITEM "C|Cliente"
ITEM "F|Fornit." ITEM "F|Fornit."
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
// campo riservato ai contratti // campo riservato ai contratti
STRING F_C_CODCF 6 STRING F_C_CODCF 6
BEGIN BEGIN
PROMPT 2 3 "Codice " PROMPT 2 3 "Codice "
FIELD LF_CONDV->CODCF FIELD LF_CONDV->CODCF
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF F_C_TIPOCF INPUT TIPOCF F_C_TIPOCF
INPUT CODCF F_C_CODCF INPUT CODCF F_C_CODCF
DISPLAY "C/F" TIPOCF DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_C_TIPOCF TIPOCF OUTPUT F_C_TIPOCF TIPOCF
OUTPUT F_C_CODCF CODCF OUTPUT F_C_CODCF CODCF
OUTPUT F_C_DESCF RAGSOC OUTPUT F_C_DESCF RAGSOC
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
// campo riservato ai contratti // campo riservato ai contratti
STRING F_C_DESCF 50 STRING F_C_DESCF 50
BEGIN BEGIN
PROMPT 22 3 "" PROMPT 22 3 ""
FLAG "D" FLAG "D"
END END
// campo riservato ai listini // campo riservato ai listini
STRING F_L_COD 3 STRING F_L_COD 3
BEGIN BEGIN
PROMPT 2 4 "Cod. listino " PROMPT 2 4 "Cod. listino "
FIELD LF_CONDV->COD FIELD LF_CONDV->COD
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_TIPO SELECT INPUT TIPO F_TIPO SELECT
INPUT CATVEN F_L_CATVEN SELECT INPUT CATVEN F_L_CATVEN SELECT
INPUT COD F_L_COD INPUT COD F_L_COD
DISPLAY "C.V." CATVEN DISPLAY "C.V." CATVEN
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO OUTPUT F_TIPO TIPO
OUTPUT F_L_CATVEN CATVEN OUTPUT F_L_CATVEN CATVEN
OUTPUT F_L_COD COD OUTPUT F_L_COD COD
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
// campo riservato ai contratti // campo riservato ai contratti
NUMBER F_C_COD 3 NUMBER F_C_COD 3
BEGIN BEGIN
PROMPT 2 4 "Contratto N. " PROMPT 2 4 "Contratto N. "
FIELD LF_CONDV->COD FIELD LF_CONDV->COD
KEY 1 KEY 1
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_TIPO SELECT INPUT TIPO F_TIPO SELECT
INPUT TIPOCF F_C_TIPOCF INPUT TIPOCF F_C_TIPOCF
INPUT CODCF F_C_CODCF INPUT CODCF F_C_CODCF
INPUT COD F_C_COD INPUT COD F_C_COD
DISPLAY "C/F" TIPOCF DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Numero" COD DISPLAY "Numero" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO OUTPUT F_TIPO TIPO
OUTPUT F_C_TIPOCF TIPOCF OUTPUT F_C_TIPOCF TIPOCF
OUTPUT F_C_CODCF CODCF OUTPUT F_C_CODCF CODCF
OUTPUT F_C_COD COD OUTPUT F_C_COD COD
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
// campo riservato alle offerte // campo riservato alle offerte
STRING F_O_COD 3 STRING F_O_COD 3
BEGIN BEGIN
PROMPT 2 3 "Cod. offerta " PROMPT 2 3 "Cod. offerta "
FIELD LF_CONDV->COD FIELD LF_CONDV->COD
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_TIPO SELECT INPUT TIPO F_TIPO SELECT
INPUT COD F_O_COD INPUT COD F_O_COD
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_TIPO TIPO OUTPUT F_TIPO TIPO
OUTPUT F_O_COD COD OUTPUT F_O_COD COD
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
GROUPBOX DLG_NULL 75 8 GROUPBOX DLG_NULL 75 8
BEGIN BEGIN
PROMPT 0 0 "" PROMPT 0 0 ""
FLAG "R" FLAG "R"
END END
STRING F_DESCR 50 STRING F_DESCR 50
BEGIN BEGIN
PROMPT 2 5 "Descrizione " PROMPT 2 5 "Descrizione "
FIELD LF_CONDV->DESCR FIELD LF_CONDV->DESCR
END END
STRING F_CODVAL 5 STRING F_CODVAL 5
BEGIN BEGIN
PROMPT 2 8 "Valuta " PROMPT 2 8 "Valuta "
FIELD LF_CONDV->CODVAL FIELD LF_CONDV->CODVAL
FLAG "U" FLAG "U"
USE %VAL USE %VAL
INPUT CODTAB F_CODVAL INPUT CODTAB F_CODVAL
DISPLAY "Valuta" CODTAB DISPLAY "Valuta" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CODVAL CODTAB OUTPUT F_CODVAL CODTAB
MESSAGE ENABLE,F_CAMBIO|ENABLE,F_DATACAM|DISABLE,F_IMPLORDI MESSAGE ENABLE,F_CAMBIO|ENABLE,F_DATACAM|DISABLE,F_IMPLORDI
MESSAGE EMPTY "1",F_CAMBIO|DISABLE,F_CAMBIO|CLEAR,F_DATACAM|DISABLE,F_DATACAM|ENABLE,F_IMPLORDI MESSAGE EMPTY "1",F_CAMBIO|DISABLE,F_CAMBIO|CLEAR,F_DATACAM|DISABLE,F_DATACAM|ENABLE,F_IMPLORDI
END END
NUMBER F_CAMBIO 15 5 NUMBER F_CAMBIO 15 5
BEGIN BEGIN
PROMPT 21 8 "Cambio " PROMPT 21 8 "Cambio "
FIELD LF_CONDV->CAMBIO FIELD LF_CONDV->CAMBIO
END END
DATA F_DATACAM DATA F_DATACAM
BEGIN BEGIN
PROMPT 49 8 "Data " PROMPT 49 8 "Data "
FIELD LF_CONDV->DATACAM FIELD LF_CONDV->DATACAM
END END
DATA F_VALIN DATA F_VALIN
BEGIN BEGIN
PROMPT 2 10 "Inizio validita` " PROMPT 2 10 "Inizio validita` "
FIELD LF_CONDV->VALIN FIELD LF_CONDV->VALIN
END END
DATA F_VALFIN DATA F_VALFIN
BEGIN BEGIN
PROMPT 39 10 "Fine validita` " PROMPT 39 10 "Fine validita` "
FIELD LF_CONDV->VALFIN FIELD LF_CONDV->VALFIN
END END
BOOLEAN F_IMPLORDI BOOLEAN F_IMPLORDI
BEGIN BEGIN
PROMPT 2 12 "Importi lordi" PROMPT 2 12 "Importi lordi"
FIELD LF_CONDV->IMPLORDI FIELD LF_CONDV->IMPLORDI
END END
BOOLEAN F_GESTUM BOOLEAN F_GESTUM
BEGIN BEGIN
PROMPT 34 12 "Gestione unita` di misura" PROMPT 34 12 "Gestione unita` di misura"
FIELD LF_CONDV->GESTUM FIELD LF_CONDV->GESTUM
END END
BOOLEAN F_GESTSCAGL BOOLEAN F_GESTSCAGL
BEGIN BEGIN
PROMPT 2 13 "Gestione scaglioni" PROMPT 2 13 "Gestione scaglioni"
FIELD LF_CONDV->GESTSCAGL FIELD LF_CONDV->GESTSCAGL
END END
BOOLEAN F_GESTSCO BOOLEAN F_GESTSCO
BEGIN BEGIN
PROMPT 34 13 "Gestione sconti/omaggi" PROMPT 34 13 "Gestione sconti/omaggi"
FIELD LF_CONDV->GESTSCO FIELD LF_CONDV->GESTSCO
END END
BOOLEAN F_SCONST BOOLEAN F_SCONST
BEGIN BEGIN
PROMPT 2 14 "Gestione sconti standard" PROMPT 2 14 "Gestione sconti standard"
FIELD LF_CONDV->SCONST FIELD LF_CONDV->SCONST
END END
// campo riservato ai contratti // campo riservato ai contratti
BOOLEAN F_C_OBBLIG BOOLEAN F_C_OBBLIG
BEGIN BEGIN
PROMPT 34 14 "Contratto obbligatorio" PROMPT 34 14 "Contratto obbligatorio"
FIELD LF_CONDV->OBBLIG FIELD LF_CONDV->OBBLIG
END END
LIST F_SEQRIC_1 10 LIST F_SEQRIC_1 10
BEGIN BEGIN
PROMPT 2 15 "Sequenza ricerca " PROMPT 2 15 "Sequenza ricerca "
FIELD LF_CONDV->SEQRIC[1,1] FIELD LF_CONDV->SEQRIC[1,1]
ITEM "A|Articoli" ITEM "A|Articoli"
ITEM "G|Gruppo M." ITEM "G|Gruppo M."
ITEM "S|Sottogr.M." ITEM "S|Sottogr.M."
ITEM "R|Ragg.fisc." ITEM "R|Ragg.fisc."
END END
LIST F_SEQRIC_2 10 LIST F_SEQRIC_2 10
BEGIN BEGIN
PROMPT 34 15 "" PROMPT 34 15 ""
FIELD LF_CONDV->SEQRIC[2,2] FIELD LF_CONDV->SEQRIC[2,2]
ITEM "-|Nessuno" ITEM "-|Nessuno"
ITEM "A|Articoli" ITEM "A|Articoli"
ITEM "G|Gruppo M." ITEM "G|Gruppo M."
ITEM "S|Sottogr.M." ITEM "S|Sottogr.M."
ITEM "R|Ragg.fisc." ITEM "R|Ragg.fisc."
STR_EXPR (#THIS_FIELD=="-")||(#THIS_FIELD!=#F_SEQRIC_1) STR_EXPR (#THIS_FIELD=="-")||(#THIS_FIELD!=#F_SEQRIC_1)
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe" WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
END END
LIST F_SEQRIC_3 10 LIST F_SEQRIC_3 10
BEGIN BEGIN
PROMPT 49 15 "" PROMPT 49 15 ""
FIELD LF_CONDV->SEQRIC[3,3] FIELD LF_CONDV->SEQRIC[3,3]
ITEM "-|Nessuno" ITEM "-|Nessuno"
ITEM "A|Articoli" ITEM "A|Articoli"
ITEM "G|Gruppo M." ITEM "G|Gruppo M."
ITEM "S|Sottogr.M." ITEM "S|Sottogr.M."
ITEM "R|Ragg.fisc." ITEM "R|Ragg.fisc."
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC_1)&&(#THIS_FIELD!=#F_SEQRIC_2)) STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC_1)&&(#THIS_FIELD!=#F_SEQRIC_2))
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe" WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
END END
LIST F_SEQRIC_4 10 LIST F_SEQRIC_4 10
BEGIN BEGIN
PROMPT 64 15 "" PROMPT 64 15 ""
FIELD LF_CONDV->SEQRIC[4,4] FIELD LF_CONDV->SEQRIC[4,4]
ITEM "-|Nessuno" ITEM "-|Nessuno"
ITEM "A|Articoli" ITEM "A|Articoli"
ITEM "G|Gruppo M." ITEM "G|Gruppo M."
ITEM "S|Sottogr.M." ITEM "S|Sottogr.M."
ITEM "R|Ragg.fisc." ITEM "R|Ragg.fisc."
STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC_1)&&(#THIS_FIELD!=#F_SEQRIC_2)&&(#THIS_FIELD!=#F_SEQRIC_3)) STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#F_SEQRIC_1)&&(#THIS_FIELD!=#F_SEQRIC_2)&&(#THIS_FIELD!=#F_SEQRIC_3))
WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe" WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe"
END END
// campo riservato ai listini // campo riservato ai listini
STRING F_L_CODSUCC 3 STRING F_L_CODSUCC 3
BEGIN BEGIN
PROMPT 2 16 "Listino succ. " PROMPT 2 16 "Listino succ. "
FIELD LF_CONDV->CODLISSUCC FIELD LF_CONDV->CODLISSUCC
FLAG "U" FLAG "U"
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_TIPO SELECT INPUT TIPO F_TIPO SELECT
INPUT CATVEN F_L_CATVEN SELECT INPUT CATVEN F_L_CATVEN SELECT
//INPUT TIPOCF F_C_TIPOCF SELECT //INPUT TIPOCF F_C_TIPOCF SELECT
//INPUT CODCF F_C_CODCF SELECT //INPUT CODCF F_C_CODCF SELECT
INPUT COD F_L_CODSUCC INPUT COD F_L_CODSUCC
DISPLAY "C.V." CATVEN DISPLAY "C.V." CATVEN
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_L_CODSUCC COD OUTPUT F_L_CODSUCC COD
OUTPUT F_L_DESSUCC DESCR OUTPUT F_L_DESSUCC DESCR
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
// campo riservato ai listini // campo riservato ai listini
STRING F_L_DESSUCC 50 STRING F_L_DESSUCC 50
BEGIN BEGIN
PROMPT 24 16 "" PROMPT 24 16 ""
FLAG "D" FLAG "D"
END END
// bottone di lancio dell'applicazione delle righe // bottone di lancio dell'applicazione delle righe
BUTTON BTN_RIGHE 63 1 BUTTON BTN_RIGHE 63 1
BEGIN BEGIN
PROMPT 0 -1 "Righe di questa testata" PROMPT 0 -1 "Righe di questa testata"
MESSAGE K_F5 MESSAGE K_F5
END END
ENDPAGE ENDPAGE


View File

@ -1,45 +1,45 @@
// campi comuni a tutti gli archivi // campi comuni a tutti gli archivi
#define F_R_TIPO 111 #define F_R_TIPO 111
#define F_R_TIPORIGA 112 #define F_R_TIPORIGA 112
#define F_R_CODRIGA_A 113 #define F_R_CODRIGA_A 113
#define F_R_DESRIGA_A 114 #define F_R_DESRIGA_A 114
#define F_R_CODRIGA_G 115 #define F_R_CODRIGA_G 115
#define F_R_DESRIGA_G 116 #define F_R_DESRIGA_G 116
#define F_R_CODRIGA_R 117 #define F_R_CODRIGA_R 117
#define F_R_DESRIGA_R 118 #define F_R_DESRIGA_R 118
#define F_R_CODRIGA_S 119 #define F_R_CODRIGA_S 119
#define F_R_DESRIGA_S 120 #define F_R_DESRIGA_S 120
#define F_R_UM 121 #define F_R_UM 121
#define F_R_NSCAGL 122 #define F_R_NSCAGL 122
#define F_R_QLIM 123 #define F_R_QLIM 123
#define F_R_PREZZO 124 #define F_R_PREZZO 124
#define F_R_SCONTO 125 #define F_R_SCONTO 125
#define F_R_ADDIVA 126 #define F_R_ADDIVA 126
#define F_R_CODIVA 127 #define F_R_CODIVA 127
#define F_R_PERCPROVV 128 #define F_R_PERCPROVV 128
#define F_R_QOM 129 #define F_R_QOM 129
#define F_R_QBASE 130 #define F_R_QBASE 130
#define F_R_CODARTOM 131 #define F_R_CODARTOM 131
#define F_R_PROMAGGIO 132 #define F_R_PROMAGGIO 132
#define F_R_UMOM 133 #define F_R_UMOM 133
// campi riservati ai listini // campi riservati ai listini
#define F_R_L_CATVEN 141 #define F_R_L_CATVEN 141
#define F_R_L_COD 142 #define F_R_L_COD 142
#define F_R_L_RICERCA 143 #define F_R_L_RICERCA 143
#define F_R_L_DESVEN 144 #define F_R_L_DESVEN 144
#define F_R_L_DES 145 #define F_R_L_DES 145
// campi riservati ai contratti // campi riservati ai contratti
#define F_R_C_TIPOCF 151 #define F_R_C_TIPOCF 151
#define F_R_C_CODCF 152 #define F_R_C_CODCF 152
#define F_R_C_COD 153 #define F_R_C_COD 153
#define F_R_C_RICERCA 154 #define F_R_C_RICERCA 154
#define F_R_C_DESCF 155 #define F_R_C_DESCF 155
#define F_R_C_DES 156 #define F_R_C_DES 156
// campi riservati alle offerte // campi riservati alle offerte
#define F_R_O_COD 161 #define F_R_O_COD 161
#define F_R_O_RICERCA 162 #define F_R_O_RICERCA 162
#define F_R_O_ARTES 163 #define F_R_O_ARTES 163
#define F_R_O_DES 164 #define F_R_O_DES 164

View File

@ -1,462 +1,462 @@
#include <lffiles.h> #include <lffiles.h>
#include "ve2300x.h" #include "ve2300x.h"
TOOLBAR "" 0 20 60 2 TOOLBAR "" 0 20 60 2
#include <toolbar.h> #include <toolbar.h>
ENDPAGE ENDPAGE
PAGE "Archivio righe condiz. di vendita " 0 0 70 20 PAGE "Archivio righe condiz. di vendita " 0 0 70 20
STRING F_R_TIPO 1 STRING F_R_TIPO 1
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FIELD LF_RCONDV->TIPO FIELD LF_RCONDV->TIPO
FLAG "DUP" FLAG "DUP"
KEY 1 KEY 1
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_L_CATVEN 2 // campo riservato ai listini STRING F_R_L_CATVEN 2 // campo riservato ai listini
BEGIN BEGIN
PROMPT 2 2 "Cat. vendita " PROMPT 2 2 "Cat. vendita "
FIELD LF_RCONDV->CATVEN FIELD LF_RCONDV->CATVEN
FLAG "UP" FLAG "UP"
KEY 1 KEY 1
USE %CVE USE %CVE
INPUT CODTAB F_R_L_CATVEN INPUT CODTAB F_R_L_CATVEN
DISPLAY "Cat." CODTAB DISPLAY "Cat." CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_R_L_CATVEN CODTAB OUTPUT F_R_L_CATVEN CODTAB
OUTPUT F_R_L_DESVEN S0 OUTPUT F_R_L_DESVEN S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_L_DESVEN 50 // campo riservato ai listini STRING F_R_L_DESVEN 50 // campo riservato ai listini
BEGIN BEGIN
PROMPT 25 2 "" PROMPT 25 2 ""
FLAG "D" FLAG "D"
END END
LIST F_R_C_TIPOCF 7 // campo riservato ai contratti LIST F_R_C_TIPOCF 7 // campo riservato ai contratti
BEGIN BEGIN
PROMPT 2 1 "Tipo C/F " PROMPT 2 1 "Tipo C/F "
FIELD LF_RCONDV->TIPOCF FIELD LF_RCONDV->TIPOCF
FLAG "P" FLAG "P"
KEY 1 KEY 1
ITEM "C|Cliente" ITEM "C|Cliente"
ITEM "F|Fornit." ITEM "F|Fornit."
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_C_CODCF 6 // campo riservato ai contratti STRING F_R_C_CODCF 6 // campo riservato ai contratti
BEGIN BEGIN
PROMPT 2 2 "Cod. C/F " PROMPT 2 2 "Cod. C/F "
FIELD LF_RCONDV->CODCF FIELD LF_RCONDV->CODCF
FLAG "UP" FLAG "UP"
KEY 1 KEY 1
USE LF_CLIFO USE LF_CLIFO
INPUT TIPOCF F_R_C_TIPOCF INPUT TIPOCF F_R_C_TIPOCF
INPUT CODCF F_R_C_CODCF INPUT CODCF F_R_C_CODCF
DISPLAY "C/F" TIPOCF DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_R_C_TIPOCF TIPOCF OUTPUT F_R_C_TIPOCF TIPOCF
OUTPUT F_R_C_CODCF CODCF OUTPUT F_R_C_CODCF CODCF
OUTPUT F_R_C_DESCF RAGSOC OUTPUT F_R_C_DESCF RAGSOC
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_C_DESCF 50 // campo riservato ai contratti STRING F_R_C_DESCF 50 // campo riservato ai contratti
BEGIN BEGIN
PROMPT 25 2 "" PROMPT 25 2 ""
FLAG "D" FLAG "D"
END END
STRING F_R_L_COD 3 // campo riservato ai listini STRING F_R_L_COD 3 // campo riservato ai listini
BEGIN BEGIN
PROMPT 2 3 "Listino " PROMPT 2 3 "Listino "
FIELD LF_RCONDV->COD FIELD LF_RCONDV->COD
FLAG "UPG" FLAG "UPG"
KEY 1 KEY 1
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_R_TIPO SELECT INPUT TIPO F_R_TIPO SELECT
INPUT CATVEN F_R_L_CATVEN INPUT CATVEN F_R_L_CATVEN
INPUT COD F_R_L_COD INPUT COD F_R_L_COD
DISPLAY "C.V." CATVEN DISPLAY "C.V." CATVEN
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_TIPO TIPO OUTPUT F_R_TIPO TIPO
OUTPUT F_R_L_CATVEN CATVEN OUTPUT F_R_L_CATVEN CATVEN
OUTPUT F_R_L_COD COD OUTPUT F_R_L_COD COD
OUTPUT F_R_L_DES DESCR OUTPUT F_R_L_DES DESCR
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_L_DES 50 // campo riservato ai contratti STRING F_R_L_DES 50 // campo riservato ai contratti
BEGIN BEGIN
PROMPT 25 3 "" PROMPT 25 3 ""
FLAG "D" FLAG "D"
END END
NUMBER F_R_C_COD 3 // campo riservato ai contratti NUMBER F_R_C_COD 3 // campo riservato ai contratti
BEGIN BEGIN
PROMPT 2 3 "Contratto N. " PROMPT 2 3 "Contratto N. "
FIELD LF_RCONDV->COD FIELD LF_RCONDV->COD
FLAG "PG" FLAG "PG"
KEY 1 KEY 1
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_R_TIPO SELECT INPUT TIPO F_R_TIPO SELECT
INPUT TIPOCF F_R_C_TIPOCF INPUT TIPOCF F_R_C_TIPOCF
INPUT CODCF F_R_C_CODCF INPUT CODCF F_R_C_CODCF
INPUT COD F_R_C_COD INPUT COD F_R_C_COD
DISPLAY "C/F" TIPOCF DISPLAY "C/F" TIPOCF
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Numero" COD DISPLAY "Numero" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_TIPO TIPO OUTPUT F_R_TIPO TIPO
OUTPUT F_R_C_TIPOCF TIPOCF OUTPUT F_R_C_TIPOCF TIPOCF
OUTPUT F_R_C_CODCF CODCF OUTPUT F_R_C_CODCF CODCF
OUTPUT F_R_C_COD COD OUTPUT F_R_C_COD COD
OUTPUT F_R_C_DES DESCR OUTPUT F_R_C_DES DESCR
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_C_DES 50 // campo riservato ai listini STRING F_R_C_DES 50 // campo riservato ai listini
BEGIN BEGIN
PROMPT 25 3 "" PROMPT 25 3 ""
FLAG "D" FLAG "D"
END END
STRING F_R_O_COD 3 // campo riservato alle offerte STRING F_R_O_COD 3 // campo riservato alle offerte
BEGIN BEGIN
PROMPT 2 2 "Codice offerta " PROMPT 2 2 "Codice offerta "
FIELD LF_RCONDV->COD FIELD LF_RCONDV->COD
FLAG "UPG" FLAG "UPG"
KEY 1 KEY 1
USE LF_CONDV USE LF_CONDV
INPUT TIPO F_R_TIPO SELECT INPUT TIPO F_R_TIPO SELECT
INPUT COD F_R_O_COD INPUT COD F_R_O_COD
DISPLAY "Codice" COD DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_TIPO TIPO OUTPUT F_R_TIPO TIPO
OUTPUT F_R_O_COD COD OUTPUT F_R_O_COD COD
OUTPUT F_R_O_DES DESCR OUTPUT F_R_O_DES DESCR
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_O_DES 50 // campo riservato alle offerte STRING F_R_O_DES 50 // campo riservato alle offerte
BEGIN BEGIN
PROMPT 2 3 "Descr. offerta " PROMPT 2 3 "Descr. offerta "
FLAG "D" FLAG "D"
END END
LIST F_R_TIPORIGA 14 LIST F_R_TIPORIGA 14
BEGIN BEGIN
PROMPT 2 4 "Tipo riga " PROMPT 2 4 "Tipo riga "
FIELD LF_RCONDV->TIPORIGA FIELD LF_RCONDV->TIPORIGA
FLAG "P" FLAG "P"
KEY 1 KEY 1
ITEM "A|Articolo" ITEM "A|Articolo"
ITEM "G|Gruppo merc." ITEM "G|Gruppo merc."
ITEM "S|Sottogr. merc." ITEM "S|Sottogr. merc."
ITEM "R|Ragg. fiscale" ITEM "R|Ragg. fiscale"
END END
STRING F_R_CODRIGA_A 20 STRING F_R_CODRIGA_A 20
BEGIN BEGIN
PROMPT 37 4 "Codice articolo " PROMPT 37 4 "Codice articolo "
FIELD LF_RCONDV->CODRIGA FIELD LF_RCONDV->CODRIGA
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE LF_ANAGR USE LF_ANAGR
INPUT CODART F_R_CODRIGA_A INPUT CODART F_R_CODRIGA_A
DISPLAY "Articolo@20" CODART DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_CODRIGA_A CODART OUTPUT F_R_CODRIGA_A CODART
OUTPUT F_R_DESRIGA_A DESCR OUTPUT F_R_DESRIGA_A DESCR
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_DESRIGA_A 50 STRING F_R_DESRIGA_A 50
BEGIN BEGIN
PROMPT 2 5 "Descrizione articolo " PROMPT 2 5 "Descrizione articolo "
FLAG "D" FLAG "D"
END END
STRING F_R_CODRIGA_G 3 STRING F_R_CODRIGA_G 3
BEGIN BEGIN
PROMPT 2 5 "Gruppo merc. " PROMPT 2 5 "Gruppo merc. "
FIELD LF_RCONDV->CODRIGA[1,3] FIELD LF_RCONDV->CODRIGA[1,3]
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE GMC SELECT CODTAB[4,5] == "" USE GMC SELECT CODTAB[4,5] == ""
INPUT CODTAB[1,3] F_R_CODRIGA_G INPUT CODTAB[1,3] F_R_CODRIGA_G
DISPLAY "Gr. merc." CODTAB[1,3] DISPLAY "Gr. merc." CODTAB[1,3]
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_G CODTAB[1,3] OUTPUT F_R_CODRIGA_G CODTAB[1,3]
OUTPUT F_R_DESRIGA_G S0 OUTPUT F_R_DESRIGA_G S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,F_R_CODRIGA_A MESSAGE COPY,F_R_CODRIGA_A
END END
STRING F_R_DESRIGA_G 50 STRING F_R_DESRIGA_G 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 25 5 ""
FLAG "D" FLAG "D"
END END
STRING F_R_CODRIGA_S 5 STRING F_R_CODRIGA_S 5
BEGIN BEGIN
PROMPT 2 5 "Sottogr.mer. " PROMPT 2 5 "Sottogr.mer. "
FIELD LF_RCONDV->CODRIGA[1,5] FIELD LF_RCONDV->CODRIGA[1,5]
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE GMC SELECT CODTAB[4,5] != "" USE GMC SELECT CODTAB[4,5] != ""
INPUT CODTAB F_R_CODRIGA_S INPUT CODTAB F_R_CODRIGA_S
DISPLAY "Gruppo merc." CODTAB[1,3] DISPLAY "Gruppo merc." CODTAB[1,3]
DISPLAY "Sottogr. merc." CODTAB[4,5] DISPLAY "Sottogr. merc." CODTAB[4,5]
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_S CODTAB OUTPUT F_R_CODRIGA_S CODTAB
OUTPUT F_R_DESRIGA_S S0 OUTPUT F_R_DESRIGA_S S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,F_R_CODRIGA_A MESSAGE COPY,F_R_CODRIGA_A
END END
STRING F_R_DESRIGA_S 50 STRING F_R_DESRIGA_S 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 25 5 ""
FLAG "D" FLAG "D"
END END
STRING F_R_CODRIGA_R 5 STRING F_R_CODRIGA_R 5
BEGIN BEGIN
PROMPT 2 5 "Ragg.fiscale " PROMPT 2 5 "Ragg.fiscale "
FIELD LF_RCONDV->CODRIGA[1,5] FIELD LF_RCONDV->CODRIGA[1,5]
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE RFA USE RFA
INPUT CODTAB F_R_CODRIGA_R INPUT CODTAB F_R_CODRIGA_R
DISPLAY "Ragg. fisc." CODTAB DISPLAY "Ragg. fisc." CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODRIGA_R CODTAB OUTPUT F_R_CODRIGA_R CODTAB
OUTPUT F_R_DESRIGA_R S0 OUTPUT F_R_DESRIGA_R S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,F_R_CODRIGA_A MESSAGE COPY,F_R_CODRIGA_A
END END
STRING F_R_DESRIGA_R 50 STRING F_R_DESRIGA_R 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 25 5 ""
FLAG "D" FLAG "D"
END END
STRING F_R_NSCAGL 1 STRING F_R_NSCAGL 1
BEGIN BEGIN
PROMPT 2 7 "N.ro scaglione " PROMPT 2 7 "N.ro scaglione "
FIELD LF_RCONDV->NSCAGL FIELD LF_RCONDV->NSCAGL
KEY 1 KEY 1
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_UM 2 STRING F_R_UM 2
BEGIN BEGIN
PROMPT 28 7 "U.M. " PROMPT 28 7 "U.M. "
FIELD LF_RCONDV->UM FIELD LF_RCONDV->UM
FLAG "U" FLAG "U"
KEY 1 KEY 1
USE LF_UMART KEY 2 USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM JOIN %UMS INTO CODTAB=UM
INPUT CODART F_R_CODRIGA_A SELECT INPUT CODART F_R_CODRIGA_A SELECT
INPUT UM F_R_UM INPUT UM F_R_UM
DISPLAY "U.M." UM DISPLAY "U.M." UM
DISPLAY "Desccrizione@50" %UMS->S0 DISPLAY "Desccrizione@50" %UMS->S0
OUTPUT F_R_UM UM OUTPUT F_R_UM UM
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_R_L_RICERCA 1 // campo di aggancio per la ricerca sui listini, nascosto STRING F_R_L_RICERCA 1 // campo di aggancio per la ricerca sui listini, nascosto
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FLAG "D" FLAG "D"
USE LF_RCONDV SELECT (TIPO==#F_R_TIPO)&&(CATVEN==#F_R_L_CATVEN)&&(COD==#F_R_L_COD) USE LF_RCONDV SELECT (TIPO==#F_R_TIPO)&&(CATVEN==#F_R_L_CATVEN)&&(COD==#F_R_L_COD)
//INPUT TIPO F_R_TIPO SELECT //INPUT TIPO F_R_TIPO SELECT
//INPUT CATVEN F_R_L_CATVEN //INPUT CATVEN F_R_L_CATVEN
//INPUT COD F_R_L_COD //INPUT COD F_R_L_COD
INPUT TIPORIGA F_R_TIPORIGA INPUT TIPORIGA F_R_TIPORIGA
INPUT CODRIGA F_R_CODRIGA_A INPUT CODRIGA F_R_CODRIGA_A
INPUT UM F_R_UM INPUT UM F_R_UM
INPUT NSCAGL F_R_NSCAGL INPUT NSCAGL F_R_NSCAGL
DISPLAY "Tipo" TIPORIGA DISPLAY "Tipo" TIPORIGA
DISPLAY "Codice@20" CODRIGA DISPLAY "Codice@20" CODRIGA
DISPLAY "U.M." UM DISPLAY "U.M." UM
DISPLAY "N.S." NSCAGL DISPLAY "N.S." NSCAGL
OUTPUT F_R_TIPORIGA TIPORIGA OUTPUT F_R_TIPORIGA TIPORIGA
OUTPUT F_R_CODRIGA_R CODRIGA[1,5] OUTPUT F_R_CODRIGA_R CODRIGA[1,5]
OUTPUT F_R_CODRIGA_S CODRIGA[1,5] OUTPUT F_R_CODRIGA_S CODRIGA[1,5]
OUTPUT F_R_CODRIGA_G CODRIGA[1,3] OUTPUT F_R_CODRIGA_G CODRIGA[1,3]
OUTPUT F_R_CODRIGA_A CODRIGA OUTPUT F_R_CODRIGA_A CODRIGA
OUTPUT F_R_UM UM OUTPUT F_R_UM UM
OUTPUT F_R_NSCAGL NSCAGL OUTPUT F_R_NSCAGL NSCAGL
END END
STRING F_R_C_RICERCA 1 // campo di aggancio per la ricerca sui contratti, nascosto STRING F_R_C_RICERCA 1 // campo di aggancio per la ricerca sui contratti, nascosto
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FLAG "D" FLAG "D"
USE LF_RCONDV SELECT (TIPO==#F_R_TIPO)&&(TIPOCF==#F_R_C_TIPOCF)&&(CODCF==#F_R_C_CODCF)&&(COD==#F_R_L_COD) USE LF_RCONDV SELECT (TIPO==#F_R_TIPO)&&(TIPOCF==#F_R_C_TIPOCF)&&(CODCF==#F_R_C_CODCF)&&(COD==#F_R_L_COD)
//INPUT TIPO F_R_TIPO SELECT //INPUT TIPO F_R_TIPO SELECT
//INPUT TIPOCF F_R_C_TIPOCF //INPUT TIPOCF F_R_C_TIPOCF
//INPUT CODCF F_R_C_CODCF //INPUT CODCF F_R_C_CODCF
//INPUT COD F_R_C_COD //INPUT COD F_R_C_COD
INPUT TIPORIGA F_R_TIPORIGA INPUT TIPORIGA F_R_TIPORIGA
INPUT CODRIGA F_R_CODRIGA_A INPUT CODRIGA F_R_CODRIGA_A
INPUT NSCAGL F_R_NSCAGL INPUT NSCAGL F_R_NSCAGL
DISPLAY "Tipo" TIPORIGA DISPLAY "Tipo" TIPORIGA
DISPLAY "Codice@20" CODRIGA DISPLAY "Codice@20" CODRIGA
DISPLAY "N.S." NSCAGL DISPLAY "N.S." NSCAGL
OUTPUT F_R_TIPORIGA TIPORIGA OUTPUT F_R_TIPORIGA TIPORIGA
OUTPUT F_R_CODRIGA_R CODRIGA[1,5] OUTPUT F_R_CODRIGA_R CODRIGA[1,5]
OUTPUT F_R_CODRIGA_S CODRIGA[1,5] OUTPUT F_R_CODRIGA_S CODRIGA[1,5]
OUTPUT F_R_CODRIGA_G CODRIGA[1,3] OUTPUT F_R_CODRIGA_G CODRIGA[1,3]
OUTPUT F_R_CODRIGA_A CODRIGA OUTPUT F_R_CODRIGA_A CODRIGA
OUTPUT F_R_NSCAGL NSCAGL OUTPUT F_R_NSCAGL NSCAGL
END END
STRING F_R_O_RICERCA 1 // campo di aggancio per la ricerca sulle offerte, nascosto STRING F_R_O_RICERCA 1 // campo di aggancio per la ricerca sulle offerte, nascosto
BEGIN BEGIN
PROMPT 100 100 "" PROMPT 100 100 ""
FLAG "D" FLAG "D"
USE LF_RCONDV SELECT (TIPO==#F_R_TIPO)&&(COD==#F_R_L_COD) USE LF_RCONDV SELECT (TIPO==#F_R_TIPO)&&(COD==#F_R_L_COD)
//INPUT TIPO F_R_TIPO SELECT //INPUT TIPO F_R_TIPO SELECT
//INPUT COD F_R_O_COD //INPUT COD F_R_O_COD
INPUT TIPORIGA F_R_TIPORIGA INPUT TIPORIGA F_R_TIPORIGA
INPUT CODRIGA F_R_CODRIGA_A INPUT CODRIGA F_R_CODRIGA_A
INPUT UM F_R_UM INPUT UM F_R_UM
INPUT NSCAGL F_R_NSCAGL INPUT NSCAGL F_R_NSCAGL
DISPLAY "Tipo" TIPORIGA DISPLAY "Tipo" TIPORIGA
DISPLAY "Codice@20" CODRIGA DISPLAY "Codice@20" CODRIGA
DISPLAY "U.M." UM DISPLAY "U.M." UM
DISPLAY "N.S." NSCAGL DISPLAY "N.S." NSCAGL
OUTPUT F_R_TIPORIGA TIPORIGA OUTPUT F_R_TIPORIGA TIPORIGA
OUTPUT F_R_CODRIGA_R CODRIGA[1,5] OUTPUT F_R_CODRIGA_R CODRIGA[1,5]
OUTPUT F_R_CODRIGA_S CODRIGA[1,5] OUTPUT F_R_CODRIGA_S CODRIGA[1,5]
OUTPUT F_R_CODRIGA_G CODRIGA[1,3] OUTPUT F_R_CODRIGA_G CODRIGA[1,3]
OUTPUT F_R_CODRIGA_A CODRIGA OUTPUT F_R_CODRIGA_A CODRIGA
OUTPUT F_R_UM UM OUTPUT F_R_UM UM
OUTPUT F_R_NSCAGL NSCAGL OUTPUT F_R_NSCAGL NSCAGL
END END
GROUPBOX DLG_NULL 78 9 // fine della chiave GROUPBOX DLG_NULL 78 9 // fine della chiave
BEGIN BEGIN
PROMPT 0 0 "" PROMPT 0 0 ""
FLAG "R" FLAG "R"
END END
NUMBER F_R_QLIM 15 5 NUMBER F_R_QLIM 15 5
BEGIN BEGIN
PROMPT 2 9 "Q.ta' limite scagl. " PROMPT 2 9 "Q.ta' limite scagl. "
FIELD LF_RCONDV->QLIM FIELD LF_RCONDV->QLIM
END END
NUMBER F_R_PREZZO 18 2 NUMBER F_R_PREZZO 18 2
BEGIN BEGIN
PROMPT 2 10 "Prezzo " PROMPT 2 10 "Prezzo "
FIELD LF_RCONDV->PREZZO FIELD LF_RCONDV->PREZZO
END END
STRING F_R_SCONTO 25 STRING F_R_SCONTO 25
BEGIN BEGIN
PROMPT 35 10 "Sconto " PROMPT 35 10 "Sconto "
FIELD LF_RCONDV->SCONTO FIELD LF_RCONDV->SCONTO
FLAG "U" FLAG "U"
END END
BOOLEAN F_R_ADDIVA BOOLEAN F_R_ADDIVA
BEGIN BEGIN
PROMPT 2 11 "Addebito IVA" PROMPT 2 11 "Addebito IVA"
FIELD LF_RCONDV->ADDIVA FIELD LF_RCONDV->ADDIVA
END END
STRING F_R_CODIVA 4 STRING F_R_CODIVA 4
BEGIN BEGIN
PROMPT 31 11 "Codice IVA " PROMPT 31 11 "Codice IVA "
FIELD LF_RCONDV->CODIVA FIELD LF_RCONDV->CODIVA
FLAG "U" FLAG "U"
USE %IVA USE %IVA
INPUT CODTAB F_R_CODIVA INPUT CODTAB F_R_CODIVA
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODIVA CODTAB OUTPUT F_R_CODIVA CODTAB
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
NUMBER F_R_PERCPROVV 5 2 NUMBER F_R_PERCPROVV 5 2
BEGIN BEGIN
PROMPT 2 12 "Provvigione % " PROMPT 2 12 "Provvigione % "
FIELD LF_RCONDV->PERCPROVV FIELD LF_RCONDV->PERCPROVV
NUM_EXPR (#F_R_PERCPROVV>=0)&&(#F_R_PERCPROVV<=100) NUM_EXPR (#F_R_PERCPROVV>=0)&&(#F_R_PERCPROVV<=100)
WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100" WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100"
END END
NUMBER F_R_QOM 15 5 NUMBER F_R_QOM 15 5
BEGIN BEGIN
PROMPT 2 13 "Q.ta' sconto/omaggio " PROMPT 2 13 "Q.ta' sconto/omaggio "
FIELD LF_RCONDV->QOM FIELD LF_RCONDV->QOM
END END
STRING F_R_UMOM 2 STRING F_R_UMOM 2
BEGIN BEGIN
PROMPT 47 13 "U.M. q.ta' omaggio " PROMPT 47 13 "U.M. q.ta' omaggio "
FIELD LF_RCONDV->UMOM FIELD LF_RCONDV->UMOM
FLAG "U" FLAG "U"
USE LF_UMART KEY 2 USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM JOIN %UMS INTO CODTAB=UM
INPUT CODART F_R_CODARTOM SELECT INPUT CODART F_R_CODARTOM SELECT
INPUT UM F_R_UMOM INPUT UM F_R_UMOM
DISPLAY "U.M." UM DISPLAY "U.M." UM
DISPLAY "Desccrizione@50" %UMS->S0 DISPLAY "Desccrizione@50" %UMS->S0
OUTPUT F_R_UMOM UM OUTPUT F_R_UMOM UM
END END
NUMBER F_R_QBASE 15 5 NUMBER F_R_QBASE 15 5
BEGIN BEGIN
PROMPT 2 14 "Q.ta' base sconto " PROMPT 2 14 "Q.ta' base sconto "
FIELD LF_RCONDV->QBASE FIELD LF_RCONDV->QBASE
END END
STRING F_R_CODARTOM 20 STRING F_R_CODARTOM 20
BEGIN BEGIN
PROMPT 2 15 "Codice art. omaggio " PROMPT 2 15 "Codice art. omaggio "
FIELD LF_RCONDV->CODARTOM FIELD LF_RCONDV->CODARTOM
FLAG "U" FLAG "U"
USE LF_ANAGR USE LF_ANAGR
INPUT CODART F_R_CODARTOM INPUT CODART F_R_CODARTOM
DISPLAY "Articolo@20" CODART DISPLAY "Articolo@20" CODART
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_CODARTOM CODART OUTPUT F_R_CODARTOM CODART
CHECKTYPE NORMAL CHECKTYPE NORMAL
END END
NUMBER F_R_PROMAGGIO 18 2 NUMBER F_R_PROMAGGIO 18 2
BEGIN BEGIN
PROMPT 2 16 "Prezzo omaggio " PROMPT 2 16 "Prezzo omaggio "
FIELD LF_RCONDV->PROMAGGIO FIELD LF_RCONDV->PROMAGGIO
END END
//STRINF F_R_CO_CODLOTTO 6 //STRINF F_R_CO_CODLOTTO 6
//BEGIN //BEGIN
//PROMPT 2 17 "Codice lotto " //PROMPT 2 17 "Codice lotto "
//FIELD LF_RCONDV->CODLOTTO //FIELD LF_RCONDV->CODLOTTO
//FLAG "U" //FLAG "U"
//END //END
BOOLEAN F_R_O_ARTES BOOLEAN F_R_O_ARTES
BEGIN BEGIN
PROMPT 47 17 "Art. in esaurimento" PROMPT 47 17 "Art. in esaurimento"
FIELD LF_RCONDV->ARTES FIELD LF_RCONDV->ARTES
END END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

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) }
} if (f0.items() == 0)
} else { ((TToken_string &)f0.row(0)) = "|1"; // aggiunge una riga allo sheet
TToken_string &row= f0.row(-1); // aggiunge una riga allo sheet else
row.add(""); ((TToken_string &)f0.row(0)).add("1",1); // forza la prima unita' di misura a 1
row.add("1"); // setta il secondo campo della riga aggiunta 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));
for (int i= 0; i < f0.items(); i++) {
TToken_string &row= f0.row(i);
const TString16 um(row.get(0));
const real fc(row.get());
if (um.not_empty() && (!fc.is_zero())) {
TRectype &rec= _linee_rec0->row(i+1, TRUE);
rec.put("UM", um);
rec.put("FC", fc);
}
}
err= _linee_rec0->write();
}
if (err == NOERR) {
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));
for (int i= 0; i < f1.items(); i++) {
TToken_string &row= f1.row(i);
const TString16 codlin(row.get(0));
const TString80 descr(row.get());
if (codlin.not_empty() && descr.not_empty()) {
TRectype &rec= _linee_rec1->row(i+1, TRUE);
rec.put("CODLIN", codlin);
rec.put("DESCR", descr);
}
}
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();
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));
for (int i= 0; i < f0.items(); i++)
{
TToken_string &row= f0.row(i);
TString16 um(row.get(0));
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART)); 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();
if (err != NOERR)
return err;
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));
for (i = 0; i < f1.items(); i++)
{
TToken_string &row= f1.row(i);
TString16 codlin(row.get(0));
for (int i= 0; i < f2.items(); i++) { codlin.rtrim();
TToken_string &row= f2.row(i);
const TString80 codartalt(row.get(0));
const TString16 tipo(row.get());
if (codartalt.not_empty()) { if (codlin.not_empty())
TRectype &reccor= _linee_rec2->row(i+1, TRUE); {
reccor.put("CODARTALT", codartalt); TRectype &rec= _linee_rec1->row(i+1, TRUE);
reccor.put("TIPO", tipo);
} rec.put("CODLIN", codlin);
} rec.put("DESCR", row.get());
err= _linee_rec2->write(); }
} }
err= _linee_rec1->write();
if (err != NOERR)
return err;
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
_linee_rec2->destroy_rows();
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART));
for (i= 0; i < f2.items(); i++)
{
TToken_string &row= f2.row(i);
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();
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));
for (int i= 0; i < f0.items(); i++) {
TToken_string & row = f0.row(i);
const TString16 um(row.get(0));
const real fc(row.get());
if (um.not_empty() && (!fc.is_zero())) {
TRectype &rec= _linee_rec0->row(i+1, TRUE);
rec.put("UM", um);
rec.put("FC", fc);
}
}
err= _linee_rec0->rewrite();
}
if (err == NOERR) { _linee_rec0->destroy_rows();
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1); if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART));
_linee_rec1->destroy_rows();
if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART));
for (int i= 0; i < f1.items(); i++) { for (int i= 0; i < f0.items(); i++)
TToken_string & row = f1.row(i); {
const TString16 codlin(row.get(0)); TToken_string & row = f0.row(i);
const TString80 descr(row.get()); TString16 um(row.get(0));
if (codlin.not_empty() && descr.not_empty()) { um.rtrim();
TRectype &rec= _linee_rec1->row(i+1, TRUE); if (um.not_empty())
rec.put("CODLIN", codlin); {
rec.put("DESCR", descr); TRectype &rec= _linee_rec0->row(i+1, TRUE);
}
} rec.put("UM", um);
err= _linee_rec1->rewrite(); rec.put("FC", row.get());
} }
}
int err = _linee_rec0->rewrite();
if (err == NOERR) { if (err != NOERR)
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2); return err;
_linee_rec2->destroy_rows();
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1);
_linee_rec1->destroy_rows();
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART)); if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART));
for (int i= 0; i < f2.items(); i++) { for (i= 0; i < f1.items(); i++)
TToken_string &row= f2.row(i); {
const TString80 codartalt(row.get(0)); TToken_string & row = f1.row(i);
const TString80 tipo(row.get()); TString16 codlin(row.get(0));
codlin.rtrim();
if (codlin.not_empty())
{
TRectype &rec= _linee_rec1->row(i+1, TRUE);
if (codartalt.not_empty()) { rec.put("CODLIN", codlin);
TRectype &reccor= _linee_rec2->row(i+1, TRUE); rec.put("DESCR", row.get());
reccor.put("CODARTALT", codartalt); }
reccor.put("TIPO", tipo); }
} err = _linee_rec1->rewrite();
}
err= _linee_rec2->write(); if (err != NOERR)
return err;
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
_linee_rec2->destroy_rows();
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART));
for (i = 0; i < f2.items(); i++)
{
TToken_string &row= f2.row(i);
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->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 ");

File diff suppressed because it is too large Load Diff

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
END CHECKTYPE REQUIRED
WARNING "Unita' di misura errata"
NUMBER FS_FCUM 15 5 END
BEGIN
PROMPT 3 7 "Fattore conv. " NUMBER FS_FCUM 15 5
FIELD LF_UMART->FC BEGIN
END PROMPT 3 4 "Fattore di conversione "
FIELD LF_UMART->FC
BUTTON 1 9 2 CHECKTYPE REQUIRED
BEGIN WARNING "Fattore di conversione obbligatorio"
PROMPT 15 12 "" END
END
BUTTON DLG_OK 9 2
BUTTON 2 9 2 BEGIN
BEGIN PROMPT -13 -1 ""
PROMPT 38 12 "" END
END
BUTTON DLG_CANCEL 9 2
ENDPAGE BEGIN
PROMPT -23 -1 ""
ENDMASK END

BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END
ENDPAGE
ENDMASK

View File

@ -1,46 +1,43 @@
// 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"
STRING FS_DESCR 50
BEGIN
PROMPT 1 7 "Descrizione "
FIELD LF_DESLIN->DESCR
VALIDATE REQIF_FUNC 1 FS_CODLIN
END END
/* STRING FS_DESCR 50
STRING FS_CODLIN1 30
BEGIN BEGIN
PROMPT 1 5 "" PROMPT 3 4 "Descrizione "
FLAG "D" FIELD LF_DESLIN->DESCR
END END
*/ BUTTON DLG_OK 9 2
BUTTON 1 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 END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -1,40 +1,41 @@
// 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 "
ITEM "3|3/9 " ITEM "3|3/9 "
ITEM "C|Codabar" ITEM "C|Codabar"
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 END
*/
BUTTON 1 9 2 BUTTON DLG_CANCEL 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

@ -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
} }
} }
*/ */

File diff suppressed because it is too large Load Diff

View File

@ -1,432 +1,432 @@
// ve6300.cpp. Composizione interattiva dei documenti. // ve6300.cpp. Composizione interattiva dei documenti.
#include <sheet.h> #include <sheet.h>
#include <application.h> #include <application.h>
#include <stdtypes.h> #include <stdtypes.h>
#include <mask.h> #include <mask.h>
#include <relation.h> #include <relation.h>
#include <strings.h> #include <strings.h>
#include <isam.h> #include <isam.h>
#include <real.h> #include <real.h>
#include <maskfld.h> #include <maskfld.h>
#include <urldefid.h> #include <urldefid.h>
#include <config.h> #include <config.h>
#include <utility.h> #include <utility.h>
#include <tabutil.h> #include <tabutil.h>
#include "ve6retv.h" #include "ve6retv.h"
#include "ve6300.h" #include "ve6300.h"
#include "ve6gen.h" #include "ve6gen.h"
class TInterattivo_crea_doc : public TBatch_crea_doc class TInterattivo_crea_doc : public TBatch_crea_doc
{ {
private: private:
virtual bool menu (MENU_TAG); virtual bool menu (MENU_TAG);
virtual bool create (); virtual bool create ();
virtual bool destroy(); virtual bool destroy();
// int set_vars(); // setta le variabili della classe // int set_vars(); // setta le variabili della classe
int componi_doc_finale(); // corpo del programma int componi_doc_finale(); // corpo del programma
static bool tipo_doc_handler (TMask_field&, KEY); // handler per il campo tipo doc. destinaz. della maschera static bool tipo_doc_handler (TMask_field&, KEY); // handler per il campo tipo doc. destinaz. della maschera
// static bool filterfunct(const TRelation*); // funzione per filtrare i documenti originali // static bool filterfunct(const TRelation*); // funzione per filtrare i documenti originali
int _rdoc; // numero di righe nel documento finale int _rdoc; // numero di righe nel documento finale
public: public:
TInterattivo_crea_doc(void) {} TInterattivo_crea_doc(void) {}
~TInterattivo_crea_doc() {} ~TInterattivo_crea_doc() {}
}; };
inline TInterattivo_crea_doc& app() { return (TInterattivo_crea_doc&) main_app(); } inline TInterattivo_crea_doc& app() { return (TInterattivo_crea_doc&) main_app(); }
bool TInterattivo_crea_doc::create() bool TInterattivo_crea_doc::create()
{ {
_interattivo = TRUE; _interattivo = TRUE;
// _stesso_anno_fiscale = FALSE; // _stesso_anno_fiscale = FALSE;
int cargc = argc(); int cargc = argc();
const char **vargv = argv(); const char **vargv = argv();
if (cargc>=2) if (cargc>=2)
{ {
if (cargc<5) fatal_box ("Numero di parametri insufficiente: chiave incompleta!"); if (cargc<5) fatal_box ("Numero di parametri insufficiente: chiave incompleta!");
if (cargc>=5) if (cargc>=5)
{ {
_codnum = vargv[2]; _codnum = vargv[2];
_anno = vargv[3]; _anno = vargv[3];
_provv = vargv[4]; _provv = vargv[4];
_ndoc = vargv[5]; _ndoc = vargv[5];
} }
if (cargc==7) _crea_doc = TRUE; if (cargc==7) _crea_doc = TRUE;
else _crea_doc = FALSE; else _crea_doc = FALSE;
if (cargc>7) message_box ("Sono presenti piu' di 6 argomenti sulla linea di comando: possibile errore"); if (cargc>7) message_box ("Sono presenti piu' di 6 argomenti sulla linea di comando: possibile errore");
} }
dispatch_e_menu(BAR_ITEM(1)); dispatch_e_menu(BAR_ITEM(1));
return TRUE; return TRUE;
} }
bool TInterattivo_crea_doc::destroy() bool TInterattivo_crea_doc::destroy()
{ {
return TRUE; return TRUE;
} }
bool TInterattivo_crea_doc::menu(MENU_TAG) bool TInterattivo_crea_doc::menu(MENU_TAG)
{ {
// if (errore_fatale (set_vars())) return FALSE; // if (errore_fatale (set_vars())) return FALSE;
if (errore_fatale (componi_doc_finale())) return FALSE; if (errore_fatale (componi_doc_finale())) return FALSE;
return TRUE; return TRUE;
} }
/* /*
TInterattivo_crea_doc::set_vars() TInterattivo_crea_doc::set_vars()
{ {
TMask m("ve6300.uml"); TMask m("ve6300.uml");
m.set_handler (F_TIPODOCDES, tipo_doc_handler); m.set_handler (F_TIPODOCDES, tipo_doc_handler);
if (m.run()==K_ESC) return ESC_PRESSED; if (m.run()==K_ESC) return ESC_PRESSED;
_datadoc = m.get(F_DATADOC); // data da assegnare al documento da creare _datadoc = m.get(F_DATADOC); // data da assegnare al documento da creare
_first_codcf = _last_codcf = m.get_long(F_CODCF); // codice cliente _first_codcf = _last_codcf = m.get_long(F_CODCF); // codice cliente
_tipo_doc_des = m.get(F_TIPODOCDES); // tipo del documento da creare _tipo_doc_des = m.get(F_TIPODOCDES); // tipo del documento da creare
_codnum = m.get(F_CODNUM); // codice numerazione per il documento da creare _codnum = m.get(F_CODNUM); // codice numerazione per il documento da creare
_anno << _datadoc.year(); // anno fiscale del documento da creare _anno << _datadoc.year(); // anno fiscale del documento da creare
_provv = m.get(F_PROVV); // indica se il la numerazione _codnum e' provvisoria o definitiva _provv = m.get(F_PROVV); // indica se il la numerazione _codnum e' provvisoria o definitiva
// cerca il record di ELD che corrisponde a _tipo_doc_des // cerca il record di ELD che corrisponde a _tipo_doc_des
// TRelation rel("ELD"); // TRelation rel("ELD");
// TString16 filter ("S8==\""); // TString16 filter ("S8==\"");
// filter << _tipo_doc_des << '"'; // filter << _tipo_doc_des << '"';
// TCursor curs(&rel, filter); // TCursor curs(&rel, filter);
// if (curs.items()==0) // if (curs.items()==0)
// { // {
// fatal_box (TString("Nessuna elaborazione genera documenti del tipo ") << _tipo_doc_des); // fatal_box (TString("Nessuna elaborazione genera documenti del tipo ") << _tipo_doc_des);
// return NO_ELABS; // return NO_ELABS;
// } // }
// else if (curs.items()>1) // else if (curs.items()>1)
// warning_box ("Trovate %d elaborazioni per la generazione dei documenti di tipo %s", curs.items(), (const char*)_tipo_doc_des); // warning_box ("Trovate %d elaborazioni per la generazione dei documenti di tipo %s", curs.items(), (const char*)_tipo_doc_des);
// //
// return 0; // return 0;
} }
*/ */
// handler per il tipo documento di destinazione // handler per il tipo documento di destinazione
bool TInterattivo_crea_doc::tipo_doc_handler (TMask_field& field, KEY key) bool TInterattivo_crea_doc::tipo_doc_handler (TMask_field& field, KEY key)
{ {
if (key == K_TAB) if (key == K_TAB)
{ {
if (field.to_check(key)) if (field.to_check(key))
{ {
TFixed_string tdd(field.get(),4); // tipo del documento destinazione selezionato TFixed_string tdd(field.get(),4); // tipo del documento destinazione selezionato
tdd.trim(); tdd.trim();
TTable t("%TIP"); TTable t("%TIP");
t.zero(); t.zero();
t.put ("CODTAB", tdd); // cerca tipo del documento destinazione t.put ("CODTAB", tdd); // cerca tipo del documento destinazione
t.read (_isgteq); t.read (_isgteq);
/* if (err = t.read (_isgteq)) // si posiziona sul record relativo al documento del tipo specificato /* if (err = t.read (_isgteq)) // si posiziona sul record relativo al documento del tipo specificato
{ {
error_box ("TElaborazioni::run_mask() : errore di lettura %d da tab(TIP)", err); error_box ("TElaborazioni::run_mask() : errore di lettura %d da tab(TIP)", err);
return READ_ERROR; return READ_ERROR;
} }
*/ */
if (t.get ("CODTAB") != tdd) // verifica che il tipo di documento trovato sia quello richiesto if (t.get ("CODTAB") != tdd) // verifica che il tipo di documento trovato sia quello richiesto
{ {
error_box ("TElaborazioni::run_mask() : non esiste il tipo documento %s in tab(TIP)", (const char *)tdd); error_box ("TElaborazioni::run_mask() : non esiste il tipo documento %s in tab(TIP)", (const char *)tdd);
return DOC_TYPE_NOT_FOUND; return DOC_TYPE_NOT_FOUND;
} }
TFilename profilo(t.get ("S4")); // nome del profilo documento (nome del .ini associato al tipo documento originale) TFilename profilo(t.get ("S4")); // nome del profilo documento (nome del .ini associato al tipo documento originale)
profilo.ext("ini"); profilo.ext("ini");
TConfig profilo_doc(profilo); // file di configurazione (ini) del documento TConfig profilo_doc(profilo); // file di configurazione (ini) del documento
TString tipocf = (profilo_doc.get("TIPOCF", "MAIN")); TString tipocf = (profilo_doc.get("TIPOCF", "MAIN"));
tipocf.cut(1); tipocf.cut(1);
field.mask().set(F_TIPOCF, tipocf); field.mask().set(F_TIPOCF, tipocf);
} }
} }
TMask& mask = field.mask(); TMask& mask = field.mask();
TFixed_string s(mask.get(F_TIPIDOC), 40); TFixed_string s(mask.get(F_TIPIDOC), 40);
if (key==K_ENTER || key==K_TAB) if (key==K_ENTER || key==K_TAB)
return (s.find(field.get()) % 4) == 0; // per evitare che trovi "0010" in "00010002" return (s.find(field.get()) % 4) == 0; // per evitare che trovi "0010" in "00010002"
return TRUE; return TRUE;
} }
int TInterattivo_crea_doc::componi_doc_finale() int TInterattivo_crea_doc::componi_doc_finale()
{ {
int err; // errori ritornati dalle funzioni int err; // errori ritornati dalle funzioni
// long n; // numero della fattura nella numerazione corrente // long n; // numero della fattura nella numerazione corrente
bool no_select = TRUE; // TRUE se non sono stati selezionati documenti dallo sheet bool no_select = TRUE; // TRUE se non sono stati selezionati documenti dallo sheet
bool no_elab = TRUE; // TRUE se non ha ancora elaborato nessun documento bool no_elab = TRUE; // TRUE se non ha ancora elaborato nessun documento
TLocalisamfile f(LF_DOC); // per gestire la testata dei documenti TLocalisamfile f(LF_DOC); // per gestire la testata dei documenti
TLocalisamfile rdoc(LF_RIGHEDOC); // per gestire le righe dei documenti TLocalisamfile rdoc(LF_RIGHEDOC); // per gestire le righe dei documenti
int current = 0; // chiave corrente int current = 0; // chiave corrente
TRectype pilota (LF_DOC); // record per il documento pilota TRectype pilota (LF_DOC); // record per il documento pilota
TTable t("NUM"); // tabella numerazioni TTable t("NUM"); // tabella numerazioni
TRectype tempr(LF_DOC); // record del documento originale che si sta elaborando TRectype tempr(LF_DOC); // record del documento originale che si sta elaborando
TRectype temprdoc (LF_RIGHEDOC); // record per trovare le righe dei documenti originale TRectype temprdoc (LF_RIGHEDOC); // record per trovare le righe dei documenti originale
// int nrdoc; // numero di righe scritte nella fattura // int nrdoc; // numero di righe scritte nella fattura
// bool end = FALSE; // true non ci sono piu' documenti originali da elaborare // bool end = FALSE; // true non ci sono piu' documenti originali da elaborare
bool altri; // TRUE se ci sono altri documenti da includere nella fattura bool altri; // TRUE se ci sono altri documenti da includere nella fattura
// se _crea_doc, il documento destinazione (testata) deve essere inizializzato // se _crea_doc, il documento destinazione (testata) deve essere inizializzato
// con i valori del primo documento originale selezionato // con i valori del primo documento originale selezionato
bool primo_pilota = _crea_doc; bool primo_pilota = _crea_doc;
f.put ("CODNUM", _codnum); // la fattura va numerata in base alla codnum specificata in ELD f.put ("CODNUM", _codnum); // la fattura va numerata in base alla codnum specificata in ELD
f.put ("ANNO", _anno); // imposta l'anno del documento f.put ("ANNO", _anno); // imposta l'anno del documento
f.put ("PROVV", _provv); // imposta provv./def. del documento f.put ("PROVV", _provv); // imposta provv./def. del documento
f.put ("NDOC", _ndoc); // imposta il numero del documento f.put ("NDOC", _ndoc); // imposta il numero del documento
err = f.read(_isgteq); // cerca il documento err = f.read(_isgteq); // cerca il documento
if (err) // guarda se si è verificato un errore if (err) // guarda se si è verificato un errore
{ {
error_box ("Errore di lettura %d in doc, cercando il documento", err); error_box ("Errore di lettura %d in doc, cercando il documento", err);
return READ_ERROR; return READ_ERROR;
} }
/* else if (_crea_doc) f.curr() = pilota; // tutti i campi della fattura sono uguali al documento pilota, tranne alcuni (impostati più sotto) /* else if (_crea_doc) f.curr() = pilota; // tutti i campi della fattura sono uguali al documento pilota, tranne alcuni (impostati più sotto)
else { else {
// confronta f.curr() e pilota (se pilota ha dei campi diversi, segnalalo e chiedi conferma // confronta f.curr() e pilota (se pilota ha dei campi diversi, segnalalo e chiedi conferma
} }
*/ */
// } // }
_first_codcf = _last_codcf = f.get_long("CODCF"); // valori del campo CODCF dei records first e last, per potervi accedere dalla filterfunct() _first_codcf = _last_codcf = f.get_long("CODCF"); // valori del campo CODCF dei records first e last, per potervi accedere dalla filterfunct()
_tipo_doc_des = f.get ("TIPODOC"); // imposta il tipo di documento _tipo_doc_des = f.get ("TIPODOC"); // imposta il tipo di documento
_stato_f_doc_f = f.get ("STATO"); // stato della fattura appena creata _stato_f_doc_f = f.get ("STATO"); // stato della fattura appena creata
TRelation rel (LF_DOC); TRelation rel (LF_DOC);
TString tdfilter(1024); TString tdfilter(1024);
tdfilter =""; // non so se e' necessaria tdfilter =""; // non so se e' necessaria
#ifdef _TDD_IN_FILTER #ifdef _TDD_IN_FILTER
// filtro costruito in base a tutti i tipi di doc. che hanno un ELD che li trasforma in _tipo_doc_des // filtro costruito in base a tutti i tipi di doc. che hanno un ELD che li trasforma in _tipo_doc_des
tdfilter = td_ELD_to_filter(_tipo_doc_des); tdfilter = td_ELD_to_filter(_tipo_doc_des);
#endif #endif
TSorted_cursor curs (&rel, "NDOC", tdfilter); // lista i documenti ordinati per numero TSorted_cursor curs (&rel, "NDOC", tdfilter); // lista i documenti ordinati per numero
curs.set_filterfunction (filterfunct); curs.set_filterfunction (filterfunct);
// non dovrebbe servire : _raggruppa = TRUE; // non dovrebbe servire : _raggruppa = TRUE;
_per_articolo = TRUE; _per_articolo = TRUE;
// Cursore per selezionare le testate dei documenti // Cursore per selezionare le testate dei documenti
if (curs.items() == 0) // se non ci sono bolle allo stato richiesto, indica errore if (curs.items() == 0) // se non ci sono bolle allo stato richiesto, indica errore
{ {
error_box ("Nessun documento da elaborare."); error_box ("Nessun documento da elaborare.");
return NO_ORG_DOCS; return NO_ORG_DOCS;
} }
curs.freeze(); // non perdere tempo a riaggiornarti curs.freeze(); // non perdere tempo a riaggiornarti
// curs=0; // comincia dal primo documento della lista // curs=0; // comincia dal primo documento della lista
// scandaglia tutto curs e setta _processed tutti i doc. originali che non sono selezionati // scandaglia tutto curs e setta _processed tutti i doc. originali che non sono selezionati
TString80 Titolo("Documenti elaborabili che possono diventare "); TString80 Titolo("Documenti elaborabili che possono diventare ");
Titolo << _tipo_doc_des; Titolo << _tipo_doc_des;
TCursor_sheet docs_sheet(&curs, TCursor_sheet docs_sheet(&curs,
" |NDOC|TIPODOC|DATADOC|TIPOCF|CODCF|OCFPI", " |NDOC|TIPODOC|DATADOC|TIPOCF|CODCF|OCFPI",
Titolo, Titolo,
"@1|Numero@7|Tipo@4|Data@10|C/F|Cod. cliente|CF o P.IVA@16"); "@1|Numero@7|Tipo@4|Data@10|C/F|Cod. cliente|CF o P.IVA@16");
docs_sheet.enable_check(); docs_sheet.enable_check();
if (docs_sheet.run()==K_ESC) return ESC_PRESSED; if (docs_sheet.run()==K_ESC) return ESC_PRESSED;
for (int i=0; i<docs_sheet.items(); i++) for (int i=0; i<docs_sheet.items(); i++)
if (!docs_sheet.checked(i))_processed.set(i); if (!docs_sheet.checked(i))_processed.set(i);
else no_select = FALSE; else no_select = FALSE;
if (no_select) if (no_select)
{ {
error_box ("Nessun documento selezionato."); error_box ("Nessun documento selezionato.");
return NO_ORG_DOCS; return NO_ORG_DOCS;
} }
// scandaglia tutto curs e torna con errore se un doc. originale non hanno la ELD // scandaglia tutto curs e torna con errore se un doc. originale non hanno la ELD
for (int l=0; l<curs.items();l++) for (int l=0; l<curs.items();l++)
if (!_processed[l]) if (!_processed[l])
{ {
if ((err = esiste_ELD(curs,l,DONT_SET_PROCESSED))==ELAB_NOT_FOUND) return err; if ((err = esiste_ELD(curs,l,DONT_SET_PROCESSED))==ELAB_NOT_FOUND) return err;
TRectype &curr = curs.curr(); TRectype &curr = curs.curr();
TConfig doc_config (getini(curr,err), "RAGGRUPPA"); // prende il .ini di curr TConfig doc_config (getini(curr,err), "RAGGRUPPA"); // prende il .ini di curr
_stati_validi_doc_i = doc_config.get ("STATIVALIDI"); // stato iniziale del documento originale _stati_validi_doc_i = doc_config.get ("STATIVALIDI"); // stato iniziale del documento originale
if (!statovalido(curr)) if (!statovalido(curr))
{ {
error_box("Documento selezionato (tipo %s,numero %s) non e' in uno stato adatto all'elaborazione", error_box("Documento selezionato (tipo %s,numero %s) non e' in uno stato adatto all'elaborazione",
curr.get("TIPODOC"), curr.get("NDOC")); curr.get("TIPODOC"), curr.get("NDOC"));
return ERR_STATO_NON_VALIDO; return ERR_STATO_NON_VALIDO;
} }
} }
while (next_pilota(curs,pilota)) // ciclo di generazione fattura while (next_pilota(curs,pilota)) // ciclo di generazione fattura
// locka automaticamente il documento (pilota) che sta elaborando // locka automaticamente il documento (pilota) che sta elaborando
{ {
// get_info(pilota); // get_info(pilota);
//***************************************************** //*****************************************************
//* questa sezione serve a CREARE il documento finale * //* questa sezione serve a CREARE il documento finale *
//***************************************************** //*****************************************************
// imposta il numero per la fattura da creare // imposta il numero per la fattura da creare
// inserisce il record di testata della fattura che va a creare // inserisce il record di testata della fattura che va a creare
tempr = pilota; // il primo documento org. da elaborare è quello pilota tempr = pilota; // il primo documento org. da elaborare è quello pilota
// qui inizia il ciclo per la creazione della fattura // qui inizia il ciclo per la creazione della fattura
// N.B.: appende ogni documento originale nella fattura // N.B.: appende ogni documento originale nella fattura
TRecord_array doc_destinazione (LF_RIGHEDOC, "NRIGA"); // array contenente le righe della fattura TRecord_array doc_destinazione (LF_RIGHEDOC, "NRIGA"); // array contenente le righe della fattura
TRectype r (LF_RIGHEDOC); // costruisce ed imposta la chiave per doc_destinazione TRectype r (LF_RIGHEDOC); // costruisce ed imposta la chiave per doc_destinazione
r.zero(); r.zero();
r.put ("CODNUM", _codnum); r.put ("CODNUM", _codnum);
r.put ("ANNO", _anno); r.put ("ANNO", _anno);
r.put ("PROVV", _provv); r.put ("PROVV", _provv);
r.put ("NDOC", _ndoc); r.put ("NDOC", _ndoc);
doc_destinazione.read(r); doc_destinazione.read(r);
// doc_destinazione.set_key(&r); // doc_destinazione.set_key(&r);
// legge tutte le fatture // legge tutte le fatture
do do
{ {
// appende il documento originale al documento di destinazione // appende il documento originale al documento di destinazione
get_info(tempr); get_info(tempr);
bool raggr_parz = get_raggr_parz(tempr,err); bool raggr_parz = get_raggr_parz(tempr,err);
TString met = metodo(tempr); TString met = metodo(tempr);
// elab_righe restituisce TRUE solo se tutte le righe del documento originale // elab_righe restituisce TRUE solo se tutte le righe del documento originale
// sono state elaborate, quando cioe' il doc_destinazione deve cambiare stato // sono state elaborate, quando cioe' il doc_destinazione deve cambiare stato
if (elab_righe(met,raggr_parz,tempr,doc_destinazione,temprdoc)) if (elab_righe(met,raggr_parz,tempr,doc_destinazione,temprdoc))
{ {
curs.file(LF_DOC).put ("STATO", _stato_f_doc_i); // aggiorna lo stato del documento originale curs.file(LF_DOC).put ("STATO", _stato_f_doc_i); // aggiorna lo stato del documento originale
curs.file(LF_DOC).setkey(1); curs.file(LF_DOC).setkey(1);
if (err = curs.file(LF_DOC).rewrite()) if (err = curs.file(LF_DOC).rewrite())
{ {
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err); error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
return RECORD_WRITE_ERROR; return RECORD_WRITE_ERROR;
} }
} }
if (primo_pilota) if (primo_pilota)
{ {
primo_pilota = FALSE; primo_pilota = FALSE;
f = tempr; f = tempr;
f.put ("CODNUM", _codnum); f.put ("CODNUM", _codnum);
f.put ("ANNO", _anno); f.put ("ANNO", _anno);
f.put ("PROVV", _provv); f.put ("PROVV", _provv);
f.put ("NDOC", _ndoc); f.put ("NDOC", _ndoc);
f.put ("TIPODOC", _tipo_doc_des); // reimposta il tipo di documento f.put ("TIPODOC", _tipo_doc_des); // reimposta il tipo di documento
f.put ("STATO", _stato_f_doc_f); // stato della fattura appena creata f.put ("STATO", _stato_f_doc_f); // stato della fattura appena creata
// curs.file(LF_DOC).setkey(1); // curs.file(LF_DOC).setkey(1);
if (err = f.rewrite()) if (err = f.rewrite())
{ {
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err); error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
return RECORD_WRITE_ERROR; return RECORD_WRITE_ERROR;
} }
} }
// unlocka il record del documento processato // unlocka il record del documento processato
curs.file(LF_DOC).setkey(2); curs.file(LF_DOC).setkey(2);
curs.unlock(); curs.unlock();
// indica che il documento e' stato processato // indica che il documento e' stato processato
_processed.set(curs.pos()); _processed.set(curs.pos());
// cerca il prossimo doc. org. da inserire. Se non ce ne sono piu', termina la generazione fattura // cerca il prossimo doc. org. da inserire. Se non ce ne sono piu', termina la generazione fattura
// se ce ne sono ancora, mette in tempr il record di doc del prossimo documento da agguungere // se ce ne sono ancora, mette in tempr il record di doc del prossimo documento da agguungere
altri = search(pilota, tempr, curs); altri = search(pilota, tempr, curs);
} }
while (altri); // fine del ciclo che raggruppa le bolle dentro una fattura while (altri); // fine del ciclo che raggruppa le bolle dentro una fattura
// controlla se deve raggruppare le righe per codice articolo // controlla se deve raggruppare le righe per codice articolo
if (_per_articolo && (doc_destinazione.rows() > 1)) // se deve raggr. e ci sono almeno 2 righe if (_per_articolo && (doc_destinazione.rows() > 1)) // se deve raggr. e ci sono almeno 2 righe
raggruppa_righe (doc_destinazione); raggruppa_righe (doc_destinazione);
// salva la fattura creata // salva la fattura creata
if (err = doc_destinazione.write()) if (err = doc_destinazione.write())
{ {
error_box ("Errore nella scrittura del doc. destinazione. err = %d", err); error_box ("Errore nella scrittura del doc. destinazione. err = %d", err);
return RECORD_WRITE_ERROR; return RECORD_WRITE_ERROR;
} }
no_elab = FALSE; // ha elaborato almeno un documento no_elab = FALSE; // ha elaborato almeno un documento
// cerca il prossimo documeto pilota // cerca il prossimo documeto pilota
}; // finche' i documenti non finiscono }; // finche' i documenti non finiscono
if (no_elab) // se non ci sono bolle allo stato richiesto, indica errore if (no_elab) // se non ci sono bolle allo stato richiesto, indica errore
{ {
error_box ("Nessun documento elaborato."); error_box ("Nessun documento elaborato.");
return NO_ORG_DOCS; return NO_ORG_DOCS;
} }
return 0; return 0;
} }
int ve6300 (int argc, char** argv) int ve6300 (int argc, char** argv)
{ {
TInterattivo_crea_doc a; TInterattivo_crea_doc a;
a.run (argc, argv, "Composizione documenti"); a.run (argc, argv, "Composizione documenti");
return 0; return 0;
} }
/* /*
TPerson p ("MATTEO LIGABUE"); TPerson p ("MATTEO LIGABUE");
p.send_message( p.send_message(
"DISCLAIMER: se leggerai questo pseudocodice e lo troverai childish, sappi che dopo la prima "DISCLAIMER: se leggerai questo pseudocodice e lo troverai childish, sappi che dopo la prima
stesura non l'ho piu' modificato, quindi questa e' l'idea che inizialmente avevo del programma stesura non l'ho piu' modificato, quindi questa e' l'idea che inizialmente avevo del programma
di composizione interattiva."); di composizione interattiva.");
p.bye(); p.bye();
- il prg per ora fa: - il prg per ora fa:
a) runna una maschera in cui chiede: a) runna una maschera in cui chiede:
a1) il codice di numerazione del doc da comporre (+PROVV) a1) il codice di numerazione del doc da comporre (+PROVV)
a2) il tipo di documento da comporre a2) il tipo di documento da comporre
a3) la data (AUTOMAGIC) a3) la data (AUTOMAGIC)
a4) TIPOCF/CODCF del doc da comporre (e degli originali da selezionare) a4) TIPOCF/CODCF del doc da comporre (e degli originali da selezionare)
a5) tipo di documento originale (da TOGLIERE !!!) a5) tipo di documento originale (da TOGLIERE !!!)
b) runna un TCursor_Sheet con i documenti individuati da scegliere ed elaborare b) runna un TCursor_Sheet con i documenti individuati da scegliere ed elaborare
c) runna un TInterattivo_sheet (TCursor_Sheet) con le singole righe da elaborare (selezionabili) c) runna un TInterattivo_sheet (TCursor_Sheet) con le singole righe da elaborare (selezionabili)
d) se la relativa tabella ELD permette l'evasione di parti di riga, d) se la relativa tabella ELD permette l'evasione di parti di riga,
a1) mostrare il TCursor_sheet o TSpreadsheet (TSheet_field con maschera ve6301.uml) a1) mostrare il TCursor_sheet o TSpreadsheet (TSheet_field con maschera ve6301.uml)
a2) che possa trattare l'evasione parziale (TCursor_sheet -> con un campo number staccato dallo sheet) a2) che possa trattare l'evasione parziale (TCursor_sheet -> con un campo number staccato dallo sheet)
a3) oppure il TSpreadsheet (TSheet_field) con tutte le colonne disabilitate, tranne la QTA_DA_EVADERE a3) oppure il TSpreadsheet (TSheet_field) con tutte le colonne disabilitate, tranne la QTA_DA_EVADERE
il programma deve ancora: il programma deve ancora:
a) passare la trasformazione al ve6200, che nella sua parte centrale (elaborazione del singolo doc.) a) passare la trasformazione al ve6200, che nella sua parte centrale (elaborazione del singolo doc.)
deve avere la eventuale selezione (da richiedersi in base ad un flag che ve6200 e ve6300 devono deve avere la eventuale selezione (da richiedersi in base ad un flag che ve6200 e ve6300 devono
settare rispettivamente a FALSE e TRUE, alla propria entrata) delle singole righe.... settare rispettivamente a FALSE e TRUE, alla propria entrata) delle singole righe....
aggiornare la qtaevase dei singoli sorgenti... aggiornare la qtaevase dei singoli sorgenti...
lo stato del documento varia solo con la completa evasione delle righe !!! lo stato del documento varia solo con la completa evasione delle righe !!!
... da continuare ... ... da continuare ...
- controllare lo stato dei documenti originali - controllare lo stato dei documenti originali
-*chiama una funzione che runna la maschera e copia i nomi dei campi in variabili private -*chiama una funzione che runna la maschera e copia i nomi dei campi in variabili private
-*chiama una funzione che trova il record di ELD relativo al documento destinazione specificato -*chiama una funzione che trova il record di ELD relativo al documento destinazione specificato
e setta le rimanenti variabili private e setta le rimanenti variabili private
-*chiama una funzione che trova i documenti (testate) validi. Usare un TSorted_cursor od un -*chiama una funzione che trova i documenti (testate) validi. Usare un TSorted_cursor od un
TRecord_array TRecord_array
componi la testata del documento originale con le variabili private (non metterci NDOC) componi la testata del documento originale con le variabili private (non metterci NDOC)
while l'utente non preme il button "Salva" per salvare il documento composto while l'utente non preme il button "Salva" per salvare il documento composto
se l'utente vuole inserire un documento dalla lista allora se l'utente vuole inserire un documento dalla lista allora
mostra la lista mostra la lista
per ogni documento selezionato per ogni documento selezionato
se il flag "raggruppa unito" e' true, allora // caso doc. orig = BOLLE se il flag "raggruppa unito" e' true, allora // caso doc. orig = BOLLE
fagli vedere le righe fagli vedere le righe
attendi che prema un button attendi che prema un button
se preme ok aggiungi le righe al documento finale se preme ok aggiungi le righe al documento finale
end se ru=TRUE end se ru=TRUE
altrimenti // caso doc. orig = ORDINI altrimenti // caso doc. orig = ORDINI
fagli vedere le righe fagli vedere le righe
attendi che selezioni le righe (possibilita' di selezionarle tutte) attendi che selezioni le righe (possibilita' di selezionarle tutte)
// //
usare un TBit_array per indicare se una riga va evasa tutta oppure se ne e' stata specificata una parte usare un TBit_array per indicare se una riga va evasa tutta oppure se ne e' stata specificata una parte
settare a TRUE tutto il TBit_array; ?????????? settare a TRUE tutto il TBit_array; ??????????
se doubleclicka una riga se doubleclicka una riga
chiedigli la quantita' da evadere (puo' essere inferiore alla quantita' ordinata su quella riga) chiedigli la quantita' da evadere (puo' essere inferiore alla quantita' ordinata su quella riga)
scrivi nel documento originale la quantita' evasa scrivi nel documento originale la quantita' evasa
setta il TBit_array per indicare che nella bolla deve essere scritta la quantita' evasa setta il TBit_array per indicare che nella bolla deve essere scritta la quantita' evasa
end se dblclk riga end se dblclk riga
// //
...preferisco usare un TArray delle quantita' evase ...preferisco usare un TArray delle quantita' evase
end altrimenti (ru=FALSE) end altrimenti (ru=FALSE)
end per ogni documento selezionato end per ogni documento selezionato
end se seleziona dei documenti end se seleziona dei documenti
altrimenti // vuole aggiungere delle righe altrimenti // vuole aggiungere delle righe
leggi i campi della riga (settando automaticamente codnum, ecc.) leggi i campi della riga (settando automaticamente codnum, ecc.)
metti la riga letta nel documento finale metti la riga letta nel documento finale
end altrimenti (inserimento righe) end altrimenti (inserimento righe)
end end
scrivi NDOC nella testata del documento scrivi NDOC nella testata del documento
scrivi la testata del documento scrivi la testata del documento
salva il documento destinazione salva il documento destinazione
end end
*/ */

View File

@ -1,14 +1,14 @@
// Include file per ve6300.uml // Include file per ve6300.uml
#define F_CODNUM 101 #define F_CODNUM 101
#define F_TIPIDOC 102 #define F_TIPIDOC 102
#define F_PROVV 103 #define F_PROVV 103
#define F_TIPODOCDES 104 #define F_TIPODOCDES 104
#define F_DESCR_TIPODOCDES 105 #define F_DESCR_TIPODOCDES 105
#define F_DATADOC 106 #define F_DATADOC 106
#define F_TIPOCF 107 #define F_TIPOCF 107
#define F_CODCF 108 #define F_CODCF 108
#define F_RAGSOC 109 #define F_RAGSOC 109
#define F_TIPODOCORG 110 #define F_TIPODOCORG 110
#define F_DESCR_TIPODOCORG 111 #define F_DESCR_TIPODOCORG 111
#define F_INIDOCORG 112 #define F_INIDOCORG 112

View File

@ -1,118 +1,118 @@
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
PROMPT 20 19 "" PROMPT 20 19 ""
END END
BUTTON DLG_CANCEL 9 2 BUTTON DLG_CANCEL 9 2
BEGIN BEGIN
PROMPT 40 19 "" PROMPT 40 19 ""
END END
STRING F_CODNUM 4 STRING F_CODNUM 4
BEGIN BEGIN
PROMPT 1 1 "Codice numerazione: " PROMPT 1 1 "Codice numerazione: "
FLAG "U" FLAG "U"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
USE NUM KEY 1 USE NUM KEY 1
INPUT CODTAB F_CODNUM INPUT CODTAB F_CODNUM
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_CODNUM CODTAB OUTPUT F_CODNUM CODTAB
OUTPUT F_TIPIDOC S2 OUTPUT F_TIPIDOC S2
OUTPUT F_PROVV S8 OUTPUT F_PROVV S8
HELP "Codice numerazione per il documento da creare" HELP "Codice numerazione per il documento da creare"
END END
STRING F_TIPIDOC 40 STRING F_TIPIDOC 40
BEGIN BEGIN
PROMPT 28 1 "Tipi documenti" PROMPT 28 1 "Tipi documenti"
FLAG "" FLAG ""
END END
STRING F_PROVV 1 STRING F_PROVV 1
BEGIN BEGIN
PROMPT 84 1 "Provv" PROMPT 84 1 "Provv"
FLAG "" FLAG ""
HELP "Indica se la numerazione e' provvisoria (P) o definitiva (D)" HELP "Indica se la numerazione e' provvisoria (P) o definitiva (D)"
WARNING "I tipi di numerazione ammessi sono provvisoria (P) e definitiva (D)" WARNING "I tipi di numerazione ammessi sono provvisoria (P) e definitiva (D)"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_TIPODOCDES 4 STRING F_TIPODOCDES 4
BEGIN BEGIN
PROMPT 1 2 "Tipo documento: " PROMPT 1 2 "Tipo documento: "
FLAG "U" FLAG "U"
USE %TIP KEY 1 USE %TIP KEY 1
INPUT CODTAB F_TIPODOCDES INPUT CODTAB F_TIPODOCDES
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
OUTPUT F_TIPODOCDES CODTAB OUTPUT F_TIPODOCDES CODTAB
OUTPUT F_DESCR_TIPODOCDES S0 OUTPUT F_DESCR_TIPODOCDES S0
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
HELP "Tipo del documento da creare" HELP "Tipo del documento da creare"
END END
STRING F_DESCR_TIPODOCDES 50 STRING F_DESCR_TIPODOCDES 50
BEGIN BEGIN
PROMPT 28 2 "Descrizione: " PROMPT 28 2 "Descrizione: "
USE %TIP KEY 1 USE %TIP KEY 1
INPUT F_DESCR_TIPODOCDES S0 INPUT F_DESCR_TIPODOCDES S0
DISPLAY "Descrizione@50" S0 DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
COPY OUTPUT F_TIPODOCDES COPY OUTPUT F_TIPODOCDES
END END
DATE F_DATADOC DATE F_DATADOC
BEGIN BEGIN
PROMPT 1 3 "Data: " PROMPT 1 3 "Data: "
FLAG "A" FLAG "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
HELP "Data da assegnare al documento" HELP "Data da assegnare al documento"
END END
STRING F_TIPOCF 1 STRING F_TIPOCF 1
BEGIN BEGIN
PROMPT 1 5 "Tipo Cliente/Fornitore " PROMPT 1 5 "Tipo Cliente/Fornitore "
FLAG "D" FLAG "D"
// FLAG "U" // FLAG "U"
// HELP "Indica C se cliente, F se fornitore" // HELP "Indica C se cliente, F se fornitore"
// WARNING "Ho detto: C se cliente, F se fornitore (obbligatorio)" // WARNING "Ho detto: C se cliente, F se fornitore (obbligatorio)"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
NUMBER F_CODCF 6 NUMBER F_CODCF 6
BEGIN BEGIN
PROMPT 1 6 "Codice cliente: " PROMPT 1 6 "Codice cliente: "
FLAG "UR" FLAG "UR"
USE LF_CLIFO KEY 1 USE LF_CLIFO KEY 1
INPUT TIPOCF F_TIPOCF INPUT TIPOCF F_TIPOCF
INPUT CODCF F_CODCF INPUT CODCF F_CODCF
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
DISPLAY "Descrizione@50" RAGSOC DISPLAY "Descrizione@50" RAGSOC
OUTPUT F_CODCF CODCF OUTPUT F_CODCF CODCF
OUTPUT F_RAGSOC RAGSOC OUTPUT F_RAGSOC RAGSOC
HELP "Inserisci il codice del cliente/fornitore" HELP "Inserisci il codice del cliente/fornitore"
WARNING "Codice cliente/fornitore non trovato" WARNING "Codice cliente/fornitore non trovato"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
STRING F_RAGSOC 50 STRING F_RAGSOC 50
BEGIN BEGIN
PROMPT 27 6 "Ragione sociale " PROMPT 27 6 "Ragione sociale "
FLAG "U" FLAG "U"
USE LF_CLIFO KEY 2 USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF INPUT TIPOCF F_TIPOCF
INPUT RAGSOC F_RAGSOC INPUT RAGSOC F_RAGSOC
DISPLAY "Descrizione@50" RAGSOC DISPLAY "Descrizione@50" RAGSOC
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
COPY OUTPUT F_CODCF COPY OUTPUT F_CODCF
HELP "Inserisci la ragione sociale del cliente" HELP "Inserisci la ragione sociale del cliente"
WARNING "Ragione sociale non trovata nell'elenco clienti/fornitori" WARNING "Ragione sociale non trovata nell'elenco clienti/fornitori"
END END
END END
ENDMASK ENDMASK

View File

@ -1,22 +1,22 @@
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
PROMPT 20 19 "" PROMPT 20 19 ""
END END
BUTTON DLG_CANCEL 9 2 BUTTON DLG_CANCEL 9 2
BEGIN BEGIN
PROMPT 40 19 "" PROMPT 40 19 ""
END END
SPREADSHEET F_SHEET 70 15 SPREADSHEET F_SHEET 70 15
BEGIN BEGIN
PROMPT 5 4 "" PROMPT 5 4 ""
END END
END END
ENDMASK ENDMASK

View File

@ -1,128 +1,128 @@
// Dichiarazione della classe generale. // Dichiarazione della classe generale.
#ifndef _TELABORAZIONI_DECL #ifndef _TELABORAZIONI_DECL
#define _TELABORAZIONI_DECL #define _TELABORAZIONI_DECL
#include <sheet.h> #include <sheet.h>
#include <application.h> #include <application.h>
#include <stdtypes.h> #include <stdtypes.h>
#include <mask.h> #include <mask.h>
#include <relation.h> #include <relation.h>
#include <strings.h> #include <strings.h>
#include <isam.h> #include <isam.h>
#include <real.h> #include <real.h>
#include <maskfld.h> #include <maskfld.h>
#include <urldefid.h> #include <urldefid.h>
#include <config.h> #include <config.h>
#include <utility.h> #include <utility.h>
#include "ve6retv.h" #include "ve6retv.h"
#include "ve6300.h" #include "ve6300.h"
#include "ve6gen.h" #include "ve6gen.h"
#include <applicat.h> #include <applicat.h>
//#include <strings.h> //#include <strings.h>
#include "ve6.h" #include "ve6.h"
#include <array.h> #include <array.h>
#define _TDD_IN_FILTER #define _TDD_IN_FILTER
#define STATO_PPT '*' #define STATO_PPT '*'
#define SET_PROCESSED TRUE #define SET_PROCESSED TRUE
#define DONT_SET_PROCESSED FALSE #define DONT_SET_PROCESSED FALSE
class TElaborazioni : public TApplication class TElaborazioni : public TApplication
{ {
protected: protected:
// i data members sono protected in modo che gli oggetti generatori // i data members sono protected in modo che gli oggetti generatori
// possano accedervi senza la necessità di funzioni specifiche // possano accedervi senza la necessità di funzioni specifiche
TString16 _codnum; // (stringa di 4) TString16 _codnum; // (stringa di 4)
TString16 _anno; // int _anno; TString16 _anno; // int _anno;
TString16 _provv; // char _provv; TString16 _provv; // char _provv;
TString16 _ndoc; // int _ndoc; TString16 _ndoc; // int _ndoc;
bool _crea_doc; // deve creare il documento di destinazione ? bool _crea_doc; // deve creare il documento di destinazione ?
int _ordinamento; // indica il tipo di ordinamento int _ordinamento; // indica il tipo di ordinamento
bool _raggruppa; // indica se si deve raggruppare o no bool _raggruppa; // indica se si deve raggruppare o no
bool _per_articolo; // indica se raggruppare le righe per codice articolo o no bool _per_articolo; // indica se raggruppare le righe per codice articolo o no
int _chiave; // chiave di doc usata per selezionare i doc. originali int _chiave; // chiave di doc usata per selezionare i doc. originali
TBit_array _processed; // array in cui è indicato se un documento di _chiavi è stato processato o no TBit_array _processed; // array in cui è indicato se un documento di _chiavi è stato processato o no
TString _tipo_doc_org; // tipo documento originale TString _tipo_doc_org; // tipo documento originale
TString _tipo_doc_des; // tipo documento finale TString _tipo_doc_des; // tipo documento finale
TString80 _stati_validi_doc_i;// lista stati documenti originali prima dell'elaborazione TString80 _stati_validi_doc_i;// lista stati documenti originali prima dell'elaborazione
TString _stato_f_doc_i; // dopo l'elaborazione TString _stato_f_doc_i; // dopo l'elaborazione
TString _stato_f_doc_f; // stato documento finale al termine dell'operazione TString _stato_f_doc_f; // stato documento finale al termine dell'operazione
// TString _codnum; // codice per la numerazione del documento di destinazione // TString _codnum; // codice per la numerazione del documento di destinazione
bool _sosp_imposta; // T/F sospensione imposta bool _sosp_imposta; // T/F sospensione imposta
bool _cod_sconto; // T/F codice sconto bool _cod_sconto; // T/F codice sconto
bool _stesso_anno; // T/F STESSOANNOFISCALE in [RAGGR.] del .ini del doc pilota bool _stesso_anno; // T/F STESSOANNOFISCALE in [RAGGR.] del .ini del doc pilota
TDate _datadoc; // data dei documenti che si vanno a creare TDate _datadoc; // data dei documenti che si vanno a creare
bool errore_fatale(int); // ritorna true se l'errore passato come argomento è nella lista degli errori fatali bool errore_fatale(int); // ritorna true se l'errore passato come argomento è nella lista degli errori fatali
public: public:
TElaborazioni() : _provv(1) { _chiave = 2; } TElaborazioni() : _provv(1) { _chiave = 2; }
~TElaborazioni () {} ~TElaborazioni () {}
}; };
// TCursor_sheet con la on_key() customizzata per l'inserimento del campo QTAEVASA nelle righe // TCursor_sheet con la on_key() customizzata per l'inserimento del campo QTAEVASA nelle righe
class TInterattivo_sheet : public TCursor_sheet class TInterattivo_sheet : public TCursor_sheet
{ {
protected: protected:
virtual bool on_key(KEY); virtual bool on_key(KEY);
public: public:
virtual void page_build(long first, byte rows); // modificata per fare apparire anche le qta' da evadere virtual void page_build(long first, byte rows); // modificata per fare apparire anche le qta' da evadere
TInterattivo_sheet(TCursor* cursor, const char* fields, const char* title, const char* head, byte buttons = 0) TInterattivo_sheet(TCursor* cursor, const char* fields, const char* title, const char* head, byte buttons = 0)
: TCursor_sheet(cursor, fields, title, head, buttons) : TCursor_sheet(cursor, fields, title, head, buttons)
{}; {};
virtual ~TInterattivo_sheet() {}; virtual ~TInterattivo_sheet() {};
}; };
class TBatch_crea_doc : public TElaborazioni class TBatch_crea_doc : public TElaborazioni
{ {
protected: protected:
bool _interattivo; // TRUE se e' stata attivata l'elaborazione interattiva; bool _interattivo; // TRUE se e' stata attivata l'elaborazione interattiva;
// bool _stesso_anno_fiscale; // TRUE se i documenti originali debbono avere lo stesso anno fiscale del documento da creare // bool _stesso_anno_fiscale; // TRUE se i documenti originali debbono avere lo stesso anno fiscale del documento da creare
TString _descr_tipodocorg; // descrizione del tipo documento originale (solo come titolo del TSheet_array) TString _descr_tipodocorg; // descrizione del tipo documento originale (solo come titolo del TSheet_array)
virtual bool menu (MENU_TAG); virtual bool menu (MENU_TAG);
virtual bool create (); virtual bool create ();
virtual bool destroy(); virtual bool destroy();
int run_mask (TRectype&, TRectype&); // lancia la maschera e scandisce i records int run_mask (TRectype&, TRectype&); // lancia la maschera e scandisce i records
int per_cliente(TRectype&, TRectype&, const char*); // crea fatture ordinate tramite la elab_princ int per_cliente(TRectype&, TRectype&, const char*); // crea fatture ordinate tramite la elab_princ
int elab_princ(TSorted_cursor&); // elabora tutti i documenti del cursore che hanno un record ELD int elab_princ(TSorted_cursor&); // elabora tutti i documenti del cursore che hanno un record ELD
bool search (TRectype&, TRectype&, TSorted_cursor&); // cerca il prossimo record da includere nel doc. destinazione bool search (TRectype&, TRectype&, TSorted_cursor&); // cerca il prossimo record da includere nel doc. destinazione
bool getflag (TRectype&, int); // ritorna i valori di due flag bool getflag (TRectype&, int); // ritorna i valori di due flag
static bool filterfunct(const TRelation*); // funzione di filtro per i campi non alfanumerici static bool filterfunct(const TRelation*); // funzione di filtro per i campi non alfanumerici
void raggruppa_righe (TRecord_array&); // raggruppa le righe per codice articolo void raggruppa_righe (TRecord_array&); // raggruppa le righe per codice articolo
bool prox_riga (int&, TRecord_array&, TBit_array&, TRectype&); // cerca la prossima riga da raggruppare bool prox_riga (int&, TRecord_array&, TBit_array&, TRectype&); // cerca la prossima riga da raggruppare
long _first_codcf, _last_codcf; // valori del campo CODCF dei records first e last, per potervi accedere dalla filterfunct() long _first_codcf, _last_codcf; // valori del campo CODCF dei records first e last, per potervi accedere dalla filterfunct()
bool elab_righe(TString metodo,bool raggr_parz,TRectype &tempr,TRecord_array &doc_destinazione,TRectype &temprdoc); bool elab_righe(TString metodo,bool raggr_parz,TRectype &tempr,TRecord_array &doc_destinazione,TRectype &temprdoc);
// elabora le righe (di doc_originale), mettendole in doc_destinazione // elabora le righe (di doc_originale), mettendole in doc_destinazione
// usando il metodo metodo, tramite il record temprdoc gia' inizializzato // usando il metodo metodo, tramite il record temprdoc gia' inizializzato
bool next_pilota(TSorted_cursor &curs,TRectype &pilota); bool next_pilota(TSorted_cursor &curs,TRectype &pilota);
// cerca il prossimo documeto pilota in cursor tenendo conto di processed // cerca il prossimo documeto pilota in cursor tenendo conto di processed
int esiste_ELD(TSorted_cursor &curs,int i,bool set_proc = DONT_SET_PROCESSED); int esiste_ELD(TSorted_cursor &curs,int i,bool set_proc = DONT_SET_PROCESSED);
// ritorna ELAB_FOUND se esiste una ELD che passa dal tipo documento di pilota a _tipo_dest // ritorna ELAB_FOUND se esiste una ELD che passa dal tipo documento di pilota a _tipo_dest
// (o _tipo_doc_dest, se _tipo_dest non viene specificato) e riempie eventualmente dest con la prima ELD // (o _tipo_doc_dest, se _tipo_dest non viene specificato) e riempie eventualmente dest con la prima ELD
int leggi_da_ELD(TRectype &dest,TString _tipo_pilota,TString _tipo_dest = ""); int leggi_da_ELD(TRectype &dest,TString _tipo_pilota,TString _tipo_dest = "");
// legge dalla tabella ELD il record _tipo_pilota->_tipo_destinazione, lo mette in dest e ritorna l'errore // legge dalla tabella ELD il record _tipo_pilota->_tipo_destinazione, lo mette in dest e ritorna l'errore
TString metodo(TRectype &rec); TString metodo(TRectype &rec);
// restituisce la stringa metodo di trasf. dal record ELD per rec->_tipo_destinazione // restituisce la stringa metodo di trasf. dal record ELD per rec->_tipo_destinazione
int statovalido(TRectype& rec); int statovalido(TRectype& rec);
// controlla che il documento rec sia in uno degli stati validi indicati nella sezione [RAGGRUPPA] del suo .ini // controlla che il documento rec sia in uno degli stati validi indicati nella sezione [RAGGRUPPA] del suo .ini
const char *td_ELD_to_filter(TString &_tipo_doc_des); const char *td_ELD_to_filter(TString &_tipo_doc_des);
// trova il .ini di rec e lo restituisce // trova il .ini di rec e lo restituisce
TString getini(TRectype& rec, int &err); TString getini(TRectype& rec, int &err);
// prende RAGGRPARZ della sezione [RAGGRUPPA] // prende RAGGRPARZ della sezione [RAGGRUPPA]
bool get_raggr_parz(TRectype& rec, int& err); bool get_raggr_parz(TRectype& rec, int& err);
// ritorna TRUE se _stesso_anno_fiscale o STESSOANNOFISCALE del .ini di rec // ritorna TRUE se _stesso_anno_fiscale o STESSOANNOFISCALE del .ini di rec
bool stesso_anno_fiscale(TRectype& rec); bool stesso_anno_fiscale(TRectype& rec);
// setta le informazioni sugli stati del doc e le mette nelle relative variabili globali // setta le informazioni sugli stati del doc e le mette nelle relative variabili globali
int get_info(TRectype &doc); int get_info(TRectype &doc);
// guarda se i documenti pil e pil2 sono compatibili per essere uniti nello stesso documento finale // guarda se i documenti pil e pil2 sono compatibili per essere uniti nello stesso documento finale
bool doc_i_compatibili(TRectype &pil,TRectype &pil2); bool doc_i_compatibili(TRectype &pil,TRectype &pil2);
public: public:
TBatch_crea_doc () {} // costruttore TBatch_crea_doc () {} // costruttore
~TBatch_crea_doc () {} ~TBatch_crea_doc () {}
}; };
#endif // _TELABORAZIONI_DECL // #endif // _TELABORAZIONI_DECL //