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

View File

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

View File

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

View File

@ -15,47 +15,51 @@ END
STRING F_UM 2
BEGIN
PROMPT 2 2 "Unita' di misura "
FIELD %UM->CODTAB
FIELD CODTAB
KEY 1
FLAG "U"
USE %UM
FLAG "U"
USE %UMS
INPUT CODTAB F_UM
DISPLAY "Codice " CODTAB
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_UM CODTAB
OUTPUT F_DESCR S0
OUTPUT F_UM CODTAB
OUTPUT F_DESCR S0
CHECKTYPE REQUIRED
END
STRING F_DESCR 50
BEGIN
PROMPT 2 4 "Descrizione "
FIELD %UM->S0
FIELD S0
KEY 2
USE %UM KEY 2
INPUT S0 F_DESCR
DISPLAY "Codice " CODTAB
USE %UMS KEY 2
INPUT S0 F_DESCR
DISPLAY "Descrizione@50" S0
OUTPUT F_UM CODTAB
OUTPUT F_DESCR S0
DISPLAY "Codice " CODTAB
COPY OUTPUT F_UM
CHECKTYPE REQUIRED
END
STRING F_UMR 2
BEGIN
PROMPT 2 8 "Unita' di riferimento "
FIELD %UM->S7
PROMPT 2 8 "Unita' di riferimento "
FIELD S7
FLAG "U"
USE %UMS
INPUT CODTAB F_UMR
COPY DISPLAY F_UM
OUTPUT F_UMR CODTAB
CHECKTYPE NORMAL
ADD NONE
END
NUMBER F_FC 15 5
BEGIN
PROMPT 2 10 "Fattore conv. al rif. "
FIELD %UM->R0
PROMPT 2 10 "F.Conversione al riferim. "
FIELD R10
VALIDATE REQIF_FUNC 1 F_UMR
WARNING "Fattore di conversione obbligatorio se specificata l'unita' di misura di riferimento"
END
ENDPAGE
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;
@ -198,7 +198,7 @@ bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
return TRUE;
}
void TCliForVendite::imposta_dati_comune( TMask_vendite& m )
void TCliForVendite::imposta_dati_comune( TVariable_mask& m )
{
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey( 1 );
@ -217,7 +217,7 @@ void TCliForVendite::imposta_dati_comune( TMask_vendite& m )
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;
if( occasionale( ) )
@ -276,7 +276,7 @@ void TCliForVendite::imposta_indirizzo_spedizione( TMask_vendite& m )
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 );
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 );

View File

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

View File

@ -9,7 +9,7 @@
int main( int argc, char** argv )
{
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)
{

View File

@ -242,7 +242,7 @@ bool TMotore_application::val_handler( TMask_field& f, KEY key )
// m.set( F_CAMBIO, "" );
// m.set( F_DATACAMBIO, "" );
app( ).clifo( ).imposta_valuta( ( TMask_vendite& ) m );
app( ).clifo( ).imposta_valuta( ( TVariable_mask& ) m );
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 )
{
if ( key == K_TAB && f.active( ) )
if ( key == K_TAB && f.active( ) )
{
TMask& m = f.mask( );
@ -400,7 +400,7 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
if ( f.focusdirty( ) )
{
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 ( 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->upper( );
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_DESNUM, query_mask( ).get( F_DESNUM ) );
_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 );
sheet( ).set_getmask( ss_getmask );
((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" );
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 ) );
const char tipocf = m.get( F_TIPOCF )[ 0 ];
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 );
TRectype r = rdoc.curr( );
TRectype& trec = get_relation( )->curr( );

View File

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

View File

@ -3,23 +3,33 @@
#include <relation.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
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
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
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
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("PROVV", "D"); // aggiorna il flag di tipo di numerazione
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
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
newrec_rdoc.put("NDOC", newndoc); // scrive il nuovo numero di documento
newrec_rdoc.put("PROVV", "D"); // aggiorna il flag di tipo di numerazione
}

View File

@ -33,17 +33,17 @@
class TDocVen_Form: public TForm {
TRelation &_firmrel; // relazione di gestione dei dati della ditta corrente
TString _module; // codice del modulo di carta associato a questo al form
TPiede_documento *_total_prog; // oggetto per i totalizzatori progressivi
TRiga *_riga; // oggetto per la gestione della singola riga del documento
TCliFor *_cliente; // oggetto per le informazioni sul cliente
bool _cli_loaded; // flag che indica se l'oggetto cliente è già stato caricato
TString _module; // codice del modulo di carta associato a questo al form
TPiede_documento *_total_prog; // oggetto per i totalizzatori progressivi
TRiga *_riga; // oggetto per la gestione della singola riga del documento
TCliFor *_cliente; // oggetto per le informazioni sul cliente
bool _cli_loaded; // flag che indica se l'oggetto cliente è già stato caricato
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 word set_body(word p, bool u); // derivata per la gestione del totalizzatore
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 &);
virtual ~TDocVen_Form();
};
@ -59,19 +59,19 @@ TDocVen_Form::TDocVen_Form(const char* name, TRelation &rel): TForm(), _firmrel(
}
TDocVen_Form::~TDocVen_Form() {
delete _total_prog;
delete _riga;
delete _cliente;
delete _total_prog;
delete _riga;
delete _cliente;
}
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
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
TRectype &recriga= rdoc.curr();
_riga->load(rdoc.curr());
_riga->somma(*_total_prog);
}
return TForm::set_body(p, u);
if (u) { // se si sta effettivamente generando il body viene fatto anche il calcolo del totalizzatore
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
TRectype &recriga= rdoc.curr();
_riga->load(rdoc.curr());
_riga->somma(*_total_prog);
}
return TForm::set_body(p, u);
}
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== "MIDDLE") cf.y()= fi.y()+ fi.effective_height()/2;
if (align== "BOTTOM") cf.y()= fi.y()+ fi.effective_height()-1;
if (align== "LEFT") cf.x()= fi.x();
if (align== "RIGHT") cf.x()= fi.x()+ fi.width();
if (align== "LEFT") cf.set_x(fi.x());
if (align== "RIGHT") cf.set_x(fi.x()+ fi.width());
i++;
}
return (TRUE);
@ -289,38 +289,38 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) {
} // fine _CIFRELETTERE
if (code.left(6) == "_TOTAL") {
// totalizzatori di testata/coda, riga e progressione
// sintassi: _TOTAL_{CODA|RIGA|PROGRES},<totalizzatore>[,<campo form>]
// 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
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
TForm_item *fi; // puntatore al campo della form in cui scrivere il valore del totalizzatore
if (s.items()==2) {
TString c= s.get(); // prende il codice del campo della form
if (c[0]== '#') c.ltrim(1);
fi= &(cf.find_field(c)); // prende il puntatore al campo specificato
} else fi= &cf; // prende il puntatore al campo corrente
if (code.mid(6) == "_CODA") {
TLocalisamfile &doc= (cursor())->file(LF_DOC);
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
if (pos>=0) fi->set(totcoda.get(pos+1)); // setta il campo della form
else fi->set(zero.string());
}
if (code.mid(6) == "_RIGA") {
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
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
if (pos>=0) fi->set(totriga.get(pos+1)); // setta il campo della form
else fi->set(zero.string());
}
if (code.mid(6) == "_PROGRES") {
TString16 tot16(tot);
fi->set(_total_prog->get(tot16).string());
}
return (TRUE);
} // fine _TOTAL_xxx
// totalizzatori di testata/coda, riga e progressione
// sintassi: _TOTAL_{CODA|RIGA|PROGRES},<totalizzatore>[,<campo form>]
// 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
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
TForm_item *fi; // puntatore al campo della form in cui scrivere il valore del totalizzatore
if (s.items()==2) {
TString c= s.get(); // prende il codice del campo della form
if (c[0]== '#') c.ltrim(1);
fi= &(cf.find_field(c)); // prende il puntatore al campo specificato
} else fi= &cf; // prende il puntatore al campo corrente
if (code.mid(6) == "_CODA") {
TLocalisamfile &doc= (cursor())->file(LF_DOC);
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
if (pos>=0) fi->set(totcoda.get(pos+1)); // setta il campo della form
else fi->set(zero.string());
}
if (code.mid(6) == "_RIGA") {
TLocalisamfile &rdoc= (cursor())->file(LF_RIGHEDOC);
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
if (pos>=0) fi->set(totriga.get(pos+1)); // setta il campo della form
else fi->set(zero.string());
}
if (code.mid(6) == "_PROGRES") {
TString16 tot16(tot);
fi->set(_total_prog->get(tot16).string());
}
return (TRUE);
} // fine _TOTAL_xxx
if (code== "_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
// + %COMUNI (113@) Comune di residenza
// + %COMUNI (213@) Comune di nascita
TLocalisamfile &doc= (cursor())->file(LF_DOC);
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
_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=STATONASC+COMNASC", 1, LF_CLIFO, 200+LF_COMUNI);
_cli_loaded= TRUE;
}
TLocalisamfile &doc= (cursor())->file(LF_DOC);
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
_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=STATONASC+COMNASC", 1, LF_CLIFO, 200+LF_COMUNI);
_cli_loaded= TRUE;
}
TString in(s.get()); // prende la macro o il fieldref
if (in[0]=='!') {
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=="COM") cf.set(_cliente->get(-(100+LF_COMUNI), "DENCOM"));
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=="PERS") cf.set(_cliente->get(LF_CLIFO, "TIPOPERS"));
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
if (code== "_RIEPILOGOIVA") {
// tabella riepilogo aliquote iva e relative imposte
// sintassi: _RIEPILOGOIVA,<macro>
// dove: <macro> è uno dei seguenti:
// !IMPONIB colonna degli imponibili
// !ALIQ colonna delle aliquote
// !IMPOSTE colonna delle imposte
// !DESCR colonna delle descrizioni
TString in= s.get(); // prende l'indicatore della colonna da creare
TLocalisamfile &doc= (cursor())->file(LF_DOC);
TToken_string totaliz(doc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string
// tabella riepilogo aliquote iva e relative imposte
// sintassi: _RIEPILOGOIVA,<macro>
// dove: <macro> è uno dei seguenti:
// !IMPONIB colonna degli imponibili
// !ALIQ colonna delle aliquote
// !IMPOSTE colonna delle imposte
// !DESCR colonna delle descrizioni
TString in= s.get(); // prende l'indicatore della colonna da creare
TLocalisamfile &doc= (cursor())->file(LF_DOC);
TToken_string totaliz(doc.get("G1")); // prende il campo memo con i totalizzatori sotto forma di token string
if (in[0]=='!') {
in.ltrim(1);
int w= cf.width(), num= totaliz.items();
TString out, curr, tot;
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
else tot= totaliz.get();
curr= totaliz.get(); // prende il valore del totalizzatore corrente
if (in=="IMPONIB") {
if (tot.match("IVAI_????")) curr.right_just(w);
}
if (in=="IMPOSTE") {
if (tot.match("IVAV_????")) curr.right_just(w);
}
if ((in=="ALIQ") || (in=="DESCR")) {
if (tot.match("IVAI_????")) {
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
iva.put("CODTAB", code);
if (iva.read()==NOERR) {
if (in=="ALIQ") {
curr= iva.get("R0"); // legge l'aliquota
curr.right_just(w);
}
if (in=="DESCR") {
if (iva.get("S1").not_empty()) { // il tipo di aliquota è diverso da "regime iva normale" ?
curr= iva.get("S0"); // legge la descrizione
curr.left_just(w);
}
}
} else curr.spaces(w);
}
}
if (out.not_empty()) out << "|"; // aggiunge il separatore di riga per le paragraph string preformattate
out << curr; // aggiunge la riga corrente alla colonna
}
cf.set(out); // scrive la colonna nel campo corrente
}
return (TRUE);
in.ltrim(1);
int w= cf.width(), num= totaliz.items();
TString out, curr, tot;
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
else tot= totaliz.get();
curr= totaliz.get(); // prende il valore del totalizzatore corrente
if (in=="IMPONIB") {
if (tot.match("IVAI_????")) curr.right_just(w);
}
if (in=="IMPOSTE") {
if (tot.match("IVAV_????")) curr.right_just(w);
}
if ((in=="ALIQ") || (in=="DESCR")) {
if (tot.match("IVAI_????")) {
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
iva.put("CODTAB", code);
if (iva.read()==NOERR) {
if (in=="ALIQ") {
curr= iva.get("R0"); // legge l'aliquota
curr.right_just(w);
}
if (in=="DESCR") {
if (iva.get("S1").not_empty()) { // il tipo di aliquota è diverso da "regime iva normale" ?
curr= iva.get("S0"); // legge la descrizione
curr.left_just(w);
}
}
} else curr.spaces(w);
}
}
if (out.not_empty()) out << "|"; // aggiunge il separatore di riga per le paragraph string preformattate
out << curr; // aggiunge la riga corrente alla colonna
}
cf.set(out); // scrive la colonna nel campo corrente
}
return (TRUE);
} // fine _RIEPILOGOIVA
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
_dalnum= atol(argv(5)); // il quarto è il numero di documento di partenza
_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;
print();
} 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) {
if (!_interattivo) return skip; // se siamo in interattivo il documento viene saltato...
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);
behaviour ret;
switch (risp) {
case K_YES:
modulo_prec= modulo; // aggiorna l'inseguitore dei moduli
ret= go; // la stampa può continuare
break;
case K_NO:
ret= skip; // il documento viene saltato
break;
case K_ESC:
ret= cancel; // la stampa viene interrotta
break;
}
return ret;
}
if (!_interattivo) return skip; // se siamo in interattivo il documento viene saltato...
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);
behaviour ret;
switch (risp) {
case K_YES:
modulo_prec= modulo; // aggiorna l'inseguitore dei moduli
ret= go; // la stampa può continuare
break;
case K_NO:
ret= skip; // il documento viene saltato
break;
case K_ESC:
ret= cancel; // la stampa viene interrotta
break;
}
return ret;
}
}
bool TStampa_Doc_Vendita::query_final_print() {

View File

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

View File

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

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

View File

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

View File

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

View File

@ -4,6 +4,7 @@
#include <msksheet.h>
#include <assoc.h>
#include <checks.h>
#include <defmask.h>
#include "ve2400.h"
@ -27,10 +28,12 @@ class TAnagrafica_magazzino: public TRelation_application {
virtual void init_insert_mode(TMask &);
virtual int read(TMask& m);
virtual bool remove();
virtual int write(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 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_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
@ -42,9 +45,11 @@ public:
bool TAnagrafica_magazzino::user_create() {
_msk= new TMask("VE2400");
bool TAnagrafica_magazzino::user_create()
{
_msk= new TMask("ve2400");
_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_SHEET2, handle_sheet2);
@ -63,7 +68,8 @@ bool TAnagrafica_magazzino::user_create() {
return TRUE;
}
bool TAnagrafica_magazzino::user_destroy() {
bool TAnagrafica_magazzino::user_destroy()
{
delete _linee_rec2;
delete _linee_rec1;
delete _linee_rec0;
@ -75,56 +81,68 @@ bool TAnagrafica_magazzino::user_destroy() {
return TRUE;
}
int TAnagrafica_magazzino::read(TMask& m) {
int err= TRelation_application::read(m);
if (err == NOERR) {
int TAnagrafica_magazzino::read(TMask& m)
{
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
f0.destroy(); // cancella lo sheet
rum.zero();
rum.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
_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
int last= _linee_rec0->last_row();
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
TToken_string &row= f0.row(i-1);
row= rec.get("UM"); // imposta la riga dello sheet con i campi del record della riga corrente
if (i != 1) row.add(rec.get("FC"));
else row.add("1"); // forza a 1 il secondo campo della prima riga (il fattore di conversione della prima U.M. deve essere 1)
}
} else {
TToken_string &row= f0.row(-1); // aggiunge una riga allo sheet
row.add("");
row.add("1"); // setta il secondo campo della riga aggiunta a 1
}
const int lastum = _linee_rec0->last_row();
for (int i= 1; i <= lastum; i++)
{
TRectype &rec= _linee_rec0->row(i, TRUE); // prende il record della riga corrente dal record array
TToken_string &row= f0.row(i-1);
row = "";
row.add(rec.get("UM")); // imposta la riga dello sheet con i campi del record della riga corrente
row.add(rec.get("FC"));
}
if (f0.items() == 0)
((TToken_string &)f0.row(0)) = "|1"; // aggiunge una riga allo sheet
else
((TToken_string &)f0.row(0)).add("1",1); // forza la prima unita' di misura a 1
f0.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. è fisso a 1)
f0.force_update(0); // aggiorna lo stato della riga 0
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.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
_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
last= _linee_rec1->last_row();
for (int i= 1; i <= last; i++) {
const int lastdes= _linee_rec1->last_row();
for (i = 1; i <= lastdes; i++)
{
TRectype &rec= _linee_rec1->row(i, TRUE); // prende il record della riga corrente dal record array
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"));
}
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.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
_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
last= _linee_rec2->last_row();
for (i= 1; i <= last; i++) {
const int lastcod = _linee_rec2->last_row();
for (i= 1; i <= lastcod; i++)
{
TRectype &rec= _linee_rec2->row(i, TRUE); // prende il record della riga corrente dal record array
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.add(rec.get("TIPO"));
}
@ -132,208 +150,280 @@ int TAnagrafica_magazzino::read(TMask& m) {
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);
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) {
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
_linee_rec2->destroy_rows();
if (err != NOERR)
return err;
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++) {
TToken_string &row= f2.row(i);
const TString80 codartalt(row.get(0));
const TString16 tipo(row.get());
codlin.rtrim();
if (codartalt.not_empty()) {
TRectype &reccor= _linee_rec2->row(i+1, TRUE);
reccor.put("CODARTALT", codartalt);
reccor.put("TIPO", tipo);
}
}
err= _linee_rec2->write();
if (codlin.not_empty())
{
TRectype &rec= _linee_rec1->row(i+1, TRUE);
rec.put("CODLIN", codlin);
rec.put("DESCR", row.get());
}
}
err= _linee_rec1->write();
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;
}
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);
_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();
}
int TAnagrafica_magazzino::rewrite(const TMask& m)
{
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
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));
_linee_rec0->destroy_rows();
if (m.insert_mode()) _linee_rec0->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->rewrite();
}
for (int i= 0; i < f0.items(); i++)
{
TToken_string & row = f0.row(i);
TString16 um(row.get(0));
um.rtrim();
if (um.not_empty())
{
TRectype &rec= _linee_rec0->row(i+1, TRUE);
rec.put("UM", um);
rec.put("FC", row.get());
}
}
int err = _linee_rec0->rewrite();
if (err == NOERR) {
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
_linee_rec2->destroy_rows();
if (err != NOERR)
return err;
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));
for (int i= 0; i < f2.items(); i++) {
TToken_string &row= f2.row(i);
const TString80 codartalt(row.get(0));
const TString80 tipo(row.get());
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));
codlin.rtrim();
if (codlin.not_empty())
{
TRectype &rec= _linee_rec1->row(i+1, TRUE);
if (codartalt.not_empty()) {
TRectype &reccor= _linee_rec2->row(i+1, TRUE);
reccor.put("CODARTALT", codartalt);
reccor.put("TIPO", tipo);
}
}
err= _linee_rec2->write();
rec.put("CODLIN", codlin);
rec.put("DESCR", row.get());
}
}
err = _linee_rec1->rewrite();
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;
}
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);
if (f.items()==0) {
TToken_string &row= f.row(-1); // aggiunge una riga allo sheet
row.add("");
row.add("1"); // setta il secondo campo della riga aggiunta a 1
if (f.items()==0)
{
((TToken_string &)f.row(0)) = "|1"; // aggiunge una riga allo sheet
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
}
}
bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k) {
if (k==K_ENTER) {
bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k)
{
if (k == K_ENTER)
{
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
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<f.items(); i++) {
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
error_box("Le unità di misura devono essere diverse tra loro");
break;
}
real x(f.cell(i,1));
if (x.is_zero()) { // controlla che il fattore di conversione (secondo elemento) non sia 0
error_box("I fattori di conversione delle unità di misura non possono valere 0");
break;
}
for (int i= 0; i<items; i++)
{
const TString16 um(f.cell(i,0));
if (um.empty())
return error_box("Le unita' di misura non possono essere vuote");
if (v.add(um))
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à
}
return (i==f.items());
} else return TRUE;
} else return TRUE;
}
}
return TRUE;
}
bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k) {
if (k==K_ENTER) {
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
if (f.items()>1) {
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
for (int i= 0; i<f.items(); i++) {
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
error_box("I codici di lingua devono essere diversi tra loro");
break;
}
}
return (i==f.items());
} else return TRUE;
} else return TRUE;
bool TAnagrafica_magazzino::notify_sheet0(TSheet_field &s, int r, KEY k)
{
if (k == K_TAB)
s.sheet_mask().enable(DLG_DELREC, r > 0);
return TRUE;
}
bool TAnagrafica_magazzino::handle_sheet2(TMask_field &fld, KEY k) {
if (k==K_ENTER) {
bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k)
{
if (k == K_ENTER)
{
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
if (f.items()>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
TAssoc_array v; // istanzia l'hash table per il controllo di univocità
v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
for (int i= 0; i<f.items(); i++) {
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista già
error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo");
break;
}
for (int i= 0; i< items; i++)
{
const TString80 codart(f.cell(i,0));
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) {
if (k==K_TAB) {
TMask &m= fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
TString16 me(fld.get()); // prende il contenuto del campo corrente (unità di misura corrente)
if (me.not_empty()) { // se il codice dell'unità di misura è vuoto non viene fatto alcun calcolo
bool TAnagrafica_magazzino::handle_sheet0_um(TMask_field &fld, KEY k)
{
if (fld.focusdirty() && k == K_TAB)
{
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
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
//
@ -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!? :-)
TTable t("%UMS");
real x(0.0); // fattore di conversione dell'unità di misura corrente
const TString16 you(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
real x; // fattore di conversione dell'unità di misura corrente
const TString16 first_um(f->row(0).get(0)); // prende l'unità di misura di rapporto (dalla prima linea dello sheet)
t.zero();
t.put("CODTAB", me);
if (t.read() == NOERR) {
TString16 my(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
real my_fc(t.get_real("R0")); // prende il suo fattore di conversione
t.zero();
t.put("CODTAB", you);
if (t.read() == NOERR) {
TString16 your(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura di rapporto
real your_fc(t.get_real("R0")); // prende il suo fattore di conversione
if (your==my) {
x= my_fc/your_fc; // calcola il rapporto tra i fattori di conversione
x.round(5); // arrotonda il risultato a 5 decimali
}
}
t.put("CODTAB", curr_um);
if (t.read() == NOERR)
{
const TString16 rif_um(t.get("S7")); // prende l'unità di misura di riferimento dell'unità di misura corrente
x = t.get_real("R10"); // prende il suo fattore di conversione
if (rif_um != first_um)
{
t.zero();
t.put("CODTAB", first_um);
if (t.read() == NOERR)
{
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;
}
int ve2400(int argc, char* argv[]) {
int ve2400(int argc, char* argv[])
{
TAnagrafica_magazzino a;
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
PAGE "Pagina 1" 8 5 65 14
STRING FS_CODUM 2
BEGIN
PROMPT 3 3 "U.M. "
FIELD LF_UMART->UM
FLAG "U"
USE %UMS
INPUT CODTAB FS_CODUM
DISPLAY "U.M. " CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FS_CODUM CODTAB
END
NUMBER FS_FCUM 15 5
BEGIN
PROMPT 3 7 "Fattore conv. "
FIELD LF_UMART->FC
END
BUTTON 1 9 2
BEGIN
PROMPT 15 12 ""
END
BUTTON 2 9 2
BEGIN
PROMPT 38 12 ""
END
ENDPAGE
ENDMASK

// SHEET 0 (unita' di misura) DI VE2400
PAGE "Pagina 1" 8 5 65 11
STRING FS_CODUM 2
BEGIN
PROMPT 3 2 "Unita' di misura "
FIELD LF_UMART->UM
FLAG "U"
USE %UMS
INPUT CODTAB FS_CODUM
DISPLAY "U.M. " CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FS_CODUM CODTAB
CHECKTYPE REQUIRED
WARNING "Unita' di misura errata"
END
NUMBER FS_FCUM 15 5
BEGIN
PROMPT 3 4 "Fattore di conversione "
FIELD LF_UMART->FC
CHECKTYPE REQUIRED
WARNING "Fattore di conversione obbligatorio"
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
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
PAGE "Pagina 1" 8 5 65 14
STRING FS_CODLIN 1
PAGE "Pagina 1" 8 5 65 11
STRING FS_CODLIN 1
BEGIN
PROMPT 3 3 "Codice lingua "
PROMPT 3 2 "Codice lingua "
FIELD LF_DESLIN->CODLIN
USE %LNG
INPUT CODTAB FS_CODLIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@30" S0
OUTPUT FS_CODLIN CODTAB
// OUTPUT FS_CODLIN1 S0
END
STRING FS_DESCR 50
BEGIN
PROMPT 1 7 "Descrizione "
FIELD LF_DESLIN->DESCR
VALIDATE REQIF_FUNC 1 FS_CODLIN
DISPLAY "Descrizione@30" S0
OUTPUT FS_CODLIN CODTAB
CHECKTYPE REQUIRED
WARNING "Codice lingua errato"
END
/*
STRING FS_CODLIN1 30
STRING FS_DESCR 50
BEGIN
PROMPT 1 5 ""
FLAG "D"
PROMPT 3 4 "Descrizione "
FIELD LF_DESLIN->DESCR
END
*/
BUTTON 1 9 2
BUTTON DLG_OK 9 2
BEGIN
PROMPT 15 12 ""
PROMPT -13 -1 ""
END
BUTTON 2 9 2
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT 38 12 ""
PROMPT -23 -1 ""
END
BUTTON DLG_DELREC 9 2
BEGIN
PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END
ENDPAGE
ENDMASK

View File

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

View File

@ -29,7 +29,7 @@
class TStampa_condizioni_vendita: public TPrint_application {
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 _codcon_codcf; // booleano di abilitazione del codice cliente/fornitore nella chiave dei contratti
bool _listval; // booleano di abilitazione della stampa dei listini in valuta
@ -50,65 +50,65 @@ protected:
bool TStampa_condizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
int indice; // indice delle variabili di configurazione per le abilitazioni
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else {
TMask choose("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
}
_condven.upper(); // rende la stringa upper-case
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_condven[0]) {
case 'L': // 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
else {
_codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita
gotcha= TRUE;
}
break;
case 'C': // 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
else {
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione delle categoria di vendita
gotcha= TRUE;
}
break;
case 'O': // 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
else gotcha= TRUE;
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_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_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
_rel= new TRelation(LF_RCONDV); // crea la relazione principale
_rel->add(LF_ANAGR, "CODART==CODRIGA", 1, LF_RCONDV, ART1);
_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[4,5]==CODRIGA", 1, LF_RCONDV, GMC2);
_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("%CVE", "CODTAB==CATVEN", 1, LF_CONDV, CVE);
_rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF", 1, LF_CONDV);
_rel->add("%VAL", "CODTAB==CODVAL", 1, LF_CONDV, VAL);
_rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1);
_rel->add("%UMS", "CODTAB==UMOM", 1, LF_RCONDV, UMS2);
add_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa
add_file(LF_RCONDV); // notifica il file delle righe alla stampa
enable_print_menu(); // abilita il menù di stampa
enable_setprint_menu(); // abilita il menù di settaggio della stampa
}
return (gotcha);
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
int indice; // indice delle variabili di configurazione per le abilitazioni
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else {
TMask choose("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
}
_condven.upper(); // rende la stringa upper-case
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_condven[0]) {
case 'L': // 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
else {
_codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita
gotcha= TRUE;
}
break;
case 'C': // 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
else {
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione delle categoria di vendita
gotcha= TRUE;
}
break;
case 'O': // 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
else gotcha= TRUE;
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_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_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
_rel= new TRelation(LF_RCONDV); // crea la relazione principale
_rel->add(LF_ANAGR, "CODART==CODRIGA", 1, LF_RCONDV, ART1);
_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[4,5]==CODRIGA", 1, LF_RCONDV, GMC2);
_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("%CVE", "CODTAB==CATVEN", 1, LF_CONDV, CVE);
_rel->add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF", 1, LF_CONDV);
_rel->add("%VAL", "CODTAB==CODVAL", 1, LF_CONDV, VAL);
_rel->add("%UMS", "CODTAB==UM", 1, LF_RCONDV, UMS1);
_rel->add("%UMS", "CODTAB==UMOM", 1, LF_RCONDV, UMS2);
add_cursor(new TCursor(_rel)); // costruisce il cursore sulla relazione e lo passa alla stampa
add_file(LF_RCONDV); // notifica il file delle righe alla stampa
enable_print_menu(); // abilita il menù di stampa
enable_setprint_menu(); // abilita il menù di settaggio della stampa
}
return (gotcha);
}
bool TStampa_condizioni_vendita::user_destroy() {
@ -117,81 +117,81 @@ bool TStampa_condizioni_vendita::user_destroy() {
}
bool TStampa_condizioni_vendita::set_print(int) {
TMask mask("ve3200x");
mask.set(F_TIPO, _condven); // settaggio del campo di tipo archivio
switch (_condven[0]) {
case 'L': // listini
DESTROY(F_C_COD); // eliminazione campi di altri archivi
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_O_COD);
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
break;
case 'C': // contratti
DESTROY(F_L_COD); // settaggio dei campi da eliminare
DESTROY(F_L_CATVEN);
DESTROY(F_L_LISTVALUTA);
DESTROY(F_O_COD);
if (!_codcon_codcf) { // disabilita condizionalmente i clienti/fornitori
KILL(F_C_TIPOCF);
KILL(F_C_CODCF);
}
break;
case 'O': // offerte
DESTROY(F_L_COD); // settaggio dei campi da eliminare
DESTROY(F_L_CATVEN);
DESTROY(F_L_LISTVALUTA);
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_COD);
break;
}
TMask mask("ve3200x");
mask.set(F_TIPO, _condven); // settaggio del campo di tipo archivio
switch (_condven[0]) {
case 'L': // listini
DESTROY(F_C_COD); // eliminazione campi di altri archivi
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_O_COD);
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
break;
case 'C': // contratti
DESTROY(F_L_COD); // settaggio dei campi da eliminare
DESTROY(F_L_CATVEN);
DESTROY(F_L_LISTVALUTA);
DESTROY(F_O_COD);
if (!_codcon_codcf) { // disabilita condizionalmente i clienti/fornitori
KILL(F_C_TIPOCF);
KILL(F_C_CODCF);
}
break;
case 'O': // offerte
DESTROY(F_L_COD); // settaggio dei campi da eliminare
DESTROY(F_L_CATVEN);
DESTROY(F_L_LISTVALUTA);
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_COD);
break;
}
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
_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
_righecomp= mask.get_bool(F_RIGHECOMP); // legge l'abilitazione della stampa completa delle righe
TLocalisamfile &rcondv= _rel->lfile(); // prende il file principale
TRectype da(rcondv.curr()); // prepara il record di inizio regione
da.zero();
da.put("TIPO", _condven);
_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
_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
TLocalisamfile &rcondv= _rel->lfile(); // prende il file principale
TRectype da(rcondv.curr()); // prepara il record di inizio regione
da.zero();
da.put("TIPO", _condven);
switch (_condven[0]) { // impostazione della chiave della testata
case 'L': // listini
if (_codlis_catven) da.put("CATVEN", mask.get(F_L_CATVEN));
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("CODCF");
da.put("COD", mask.get(F_L_COD));
break;
case 'C': // contratti
da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank
if (_codcon_codcf) {
da.put("TIPOCF", mask.get(F_C_TIPOCF));
da.put("CODCF", mask.get(F_C_CODCF));
} else {
da.blank("TIPOCF"); // riempie i campi di blank se non sono gestiti
da.blank("CODCF");
}
da.put("COD", mask.get(F_C_COD));
break;
case 'O': // offerte
da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank
da.blank("TIPOCF");
da.blank("CODCF");
da.put("COD", mask.get(F_O_COD));
break;
case 'L': // listini
if (_codlis_catven) da.put("CATVEN", mask.get(F_L_CATVEN));
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("CODCF");
da.put("COD", mask.get(F_L_COD));
break;
case 'C': // contratti
da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank
if (_codcon_codcf) {
da.put("TIPOCF", mask.get(F_C_TIPOCF));
da.put("CODCF", mask.get(F_C_CODCF));
} else {
da.blank("TIPOCF"); // riempie i campi di blank se non sono gestiti
da.blank("CODCF");
}
da.put("COD", mask.get(F_C_COD));
break;
case 'O': // offerte
da.blank("CATVEN"); // i campi non gestiti vengono riempiti di blank
da.blank("TIPOCF");
da.blank("CODCF");
da.put("COD", mask.get(F_O_COD));
break;
}
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"
da.put("TIPORIGA", mask.get(F_TIPORIGHE));
da.put("CODRIGA", mask.get(F_DARIGA_A));
a.put("TIPORIGA", mask.get(F_TIPORIGHE));
a.put("CODRIGA", mask.get(F_ARIGA_A));
}
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
disable_links(); // disabilita tutti i link ipertestuali
da.put("TIPORIGA", mask.get(F_TIPORIGHE));
da.put("CODRIGA", mask.get(F_DARIGA_A));
a.put("TIPORIGA", mask.get(F_TIPORIGHE));
a.put("CODRIGA", mask.get(F_ARIGA_A));
}
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
disable_links(); // disabilita tutti i link ipertestuali
// _rcondv_link_id= enable_link("Collegamento a righe condizioni di vendita", 'g'); // abilita il collegamento
return TRUE;
} else return FALSE;
@ -216,76 +216,90 @@ UO QOM QBASE CODARTOM PROMAGGIO
*/
void TStampa_condizioni_vendita::preprocess_header() {
reset_header(); // l'header viene resettato
reset_header(); // l'header viene resettato
int i= 1; // contatore delle linee
const long firm= get_firm(); // legge l'id della ditta corrente
TLocalisamfile ditte(LF_NDITTE); // apre il file ditte
ditte.zero(); // vuota il record
ditte.put("CODDITTA", firm); // riempie la chiave
if (ditte.read()== NOERR) { // se il record della ditta viene trovato viene settato l'header
const TString &s= ditte.get("RAGSOC"); // legge la ragione sociale della ditta
set_header(i, "@1gDitta %ld %s", firm, (const char *)s); // setta il nome e l'id della ditta della prima linea dell'header
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
}
TLocalisamfile &condv= current_cursor()->file(LF_CONDV);
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, "@14g%3s @18g%s @69g%s @78g%s @87g%s @90g%s @93g%s @96g%s @99g%s @109g%s",
(const char *)(condv.sget("COD")), (const char *)(condv.sget("DESCR")), (const char *)(condv.sget("VALIN")),
(const char *)(condv.sget("VALFIN")), (const char *)(condv.sget("IMPLORDI")), (const char *)(condv.sget("GESTUM")),
(const char *)(condv.sget("GESTSCAGL")), (const char *)(condv.sget("GESTSCO")), (const char *)(condv.sget("SCONST")),
(const char *)(condv.sget("SEQRIC"))); // codice, descriz., validità e booleani
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.sget("CATVEN"))); // categoria di vendita
set_header(i, "@14g%3s", (const char *) condv.get("COD"));
set_header(i, "@18g%s", (const char *) condv.get("DESCR"));
set_header(i, "@69g%s", (const char *) condv.get("VALIN"));
set_header(i, "@78g%s", (const char *) condv.get("VALFIN"));
set_header(i, "@87g%s", (const char *) condv.get("IMPLORDI"));
set_header(i, "@93g%s", (const char *) condv.get("GESTUM"));
set_header(i, "@90g%s", (const char *) condv.get("GESTSCAGL"));
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 (_codcon_codcf) { // è abilitato il codice cliente/fornitore?
set_header(i-1, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori
set_header(i, "@1g%s @4g%6s", (const char *)(condv.sget("TIPOCF")), (const char *)(condv.sget("CODCF"))); // cliente/fornitore
}
set_header(i-1, "@102gOB"); // setta l'header di contratto obbligatorio
set_header(i, "@102g%s", (const char *)(condv.sget("OBBLIG"))); // booleano
if (_condven=="C")
{ // siamo sui contratti?
if (_codcon_codcf)
{ // è abilitato il codice cliente/fornitore?
set_header(i-1, "@1gCF @4gCod.CF"); // setta l'header di clienti/fornitori
set_header(i, "@1g%s", (const char *)condv.get("TIPOCF")); // cliente/fornitore
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?
set_header(i-1, "@105gSuc"); // setta l'header per il codice di listino successivo
set_header(i, "@105g%3s", (const char *)(condv.sget("CODLISSUCC"))); // codice successivo
if (_condven=="L")
{ // siamo su listini?
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?
i+=2; // occupa altre due linee
set_header(i-1, "@1gVal @5gCambio @27gData cambio"); // setta l'header del codice e della descrizione
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, ""); // 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 (_gest_val)
{ // c'è la gestione della valuta?
i+=2; // occupa altre due linee
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, "@5g%21s", (const char *)condv.get("CAMBIO")); // cambio e valuta
set_header(i, "@27g%s", (const char *)condv.get("DATACAM")); // cambio e valuta
}
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
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=="O") set_header(i, "@99gEsaur."); // setta l'header dell'articolo in esaurimento
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=="O") set_header(i, "@99gEsaur."); // setta l'header dell'articolo in esaurimento
}
set_header(++i, ""); // aggiunge due linee vuote
set_header(++i, "");
}
void TStampa_condizioni_vendita::preprocess_footer() {
reset_footer();
int i= 1; // indice di linea
set_footer(i, ""); // salta una linea
reset_footer();
int i= 1; // indice di linea
set_footer(i, ""); // salta una linea
set_footer(++i, "@125gPag @#"); // l'unica linea del footer contiene il numero di pagina
}
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
int i= 0; // indice di riga
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=="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"));
if (_gest_val) {
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, "Validità: dal @d al @d", FLD(LF_CONDV, "VALIN"), FLD(LF_CONDV, "VALFIN"));
if (file== LF_RCONDV) { // se il file in stampa non è il file principale non c'è nulla da fare
int i= 0; // indice di riga
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=="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"));
if (_gest_val) {
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, "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, "Gestione unità di misura: @f", FLD(LF_CONDV, "GESTUM"));
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, "");
_testastamp= TRUE;
}
if (_righecomp) { // stampa della riga in forma completa
}
if (_righecomp) { // stampa della riga in forma completa
TLocalisamfile &rcondv= current_cursor()->file();
TLocalisamfile &condv= current_cursor()->file(LF_CONDV);
TString tiporiga= rcondv.get("TIPORIGA");
switch (tiporiga[0]) {
case 'A':
set_row(++i, "Riga: @1s @20s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Articolo: @50s", FLD(-ART1, "DESCR"));
break;
case 'G':
set_row(++i, "Riga: @1s @3s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Gruppo merceologico: @50s", FLD(-GMC1, "S0"));
break;
case 'S':
set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Sottogruppo merceologico: @50s", FLD(-GMC2, "S0"));
break;
case 'R':
set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Raggruppamento fiscale: @50s", FLD(-RFA, "S0"));
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("GESTSCAGL")) {
set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL"));
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, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO"));
set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA"));
set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA"));
set_row(++i, "Percentuale di provvigione: @5.2n", FLD(LF_RCONDV, "PERCPROVV"));
if (condv.get_bool("GESTSCO")) {
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, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR"));
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 ((_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"));
set_row(++i, ""); // salta una riga
} 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"),
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
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=="O") set_row(i, "@99g@1s", FLD(LF_RCONDV, "ARTES"));
set_row(++i, ""); // salta una riga
}
}
switch (tiporiga[0]) {
case 'A':
set_row(++i, "Riga: @1s @20s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Articolo: @50s", FLD(-ART1, "DESCR"));
break;
case 'G':
set_row(++i, "Riga: @1s @3s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Gruppo merceologico: @50s", FLD(-GMC1, "S0"));
break;
case 'S':
set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Sottogruppo merceologico: @50s", FLD(-GMC2, "S0"));
break;
case 'R':
set_row(++i, "Riga: @1s @2s", FLD(LF_RCONDV, "TIPORIGA"), FLD(LF_RCONDV, "CODRIGA"));
set_row(++i, "Raggruppamento fiscale: @50s", FLD(-RFA, "S0"));
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("GESTSCAGL")) {
set_row(++i, "Scaglione: @1s", FLD(LF_RCONDV, "NSCAGL"));
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, "Sconto: @25s", FLD(LF_RCONDV, "SCONTO"));
set_row(++i, "Addebito IVA: @f", FLD(LF_RCONDV, "ADDIVA"));
set_row(++i, "Codice IVA: @4s", FLD(LF_RCONDV, "CODIVA"));
set_row(++i, "Percentuale di provvigione: @5.2n", FLD(LF_RCONDV, "PERCPROVV"));
if (condv.get_bool("GESTSCO")) {
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, "Articolo omaggio: @20s @50s", FLD(LF_RCONDV, "CODARTOM"), FLD(-ART2, "DESCR"));
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 ((_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"));
set_row(++i, ""); // salta una riga
} 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"),
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
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=="O") set_row(i, "@99g@1s", FLD(LF_RCONDV, "ARTES"));
set_row(++i, ""); // salta una riga
}
}
}
/*
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
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
msg.send(); // invia il messaggio
TExternal_app ve2_2(RCONDV_APP); // crea 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.
#include <sheet.h>
#include <application.h>
#include <stdtypes.h>
#include <mask.h>
#include <relation.h>
#include <strings.h>
#include <isam.h>
#include <real.h>
#include <maskfld.h>
#include <urldefid.h>
#include <config.h>
#include <utility.h>
#include <tabutil.h>
#include "ve6retv.h"
#include "ve6300.h"
#include "ve6gen.h"
class TInterattivo_crea_doc : public TBatch_crea_doc
{
private:
virtual bool menu (MENU_TAG);
virtual bool create ();
virtual bool destroy();
// int set_vars(); // setta le variabili della classe
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 filterfunct(const TRelation*); // funzione per filtrare i documenti originali
int _rdoc; // numero di righe nel documento finale
public:
TInterattivo_crea_doc(void) {}
~TInterattivo_crea_doc() {}
};
inline TInterattivo_crea_doc& app() { return (TInterattivo_crea_doc&) main_app(); }
bool TInterattivo_crea_doc::create()
{
_interattivo = TRUE;
// _stesso_anno_fiscale = FALSE;
int cargc = argc();
const char **vargv = argv();
if (cargc>=2)
{
if (cargc<5) fatal_box ("Numero di parametri insufficiente: chiave incompleta!");
if (cargc>=5)
{
_codnum = vargv[2];
_anno = vargv[3];
_provv = vargv[4];
_ndoc = vargv[5];
}
if (cargc==7) _crea_doc = TRUE;
else _crea_doc = FALSE;
if (cargc>7) message_box ("Sono presenti piu' di 6 argomenti sulla linea di comando: possibile errore");
}
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
bool TInterattivo_crea_doc::destroy()
{
return TRUE;
}
bool TInterattivo_crea_doc::menu(MENU_TAG)
{
// if (errore_fatale (set_vars())) return FALSE;
if (errore_fatale (componi_doc_finale())) return FALSE;
return TRUE;
}
/*
TInterattivo_crea_doc::set_vars()
{
TMask m("ve6300.uml");
m.set_handler (F_TIPODOCDES, tipo_doc_handler);
if (m.run()==K_ESC) return ESC_PRESSED;
_datadoc = m.get(F_DATADOC); // data da assegnare al documento da creare
_first_codcf = _last_codcf = m.get_long(F_CODCF); // codice cliente
_tipo_doc_des = m.get(F_TIPODOCDES); // tipo del documento da creare
_codnum = m.get(F_CODNUM); // codice numerazione per il 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
// cerca il record di ELD che corrisponde a _tipo_doc_des
// TRelation rel("ELD");
// TString16 filter ("S8==\"");
// filter << _tipo_doc_des << '"';
// TCursor curs(&rel, filter);
// if (curs.items()==0)
// {
// fatal_box (TString("Nessuna elaborazione genera documenti del tipo ") << _tipo_doc_des);
// return NO_ELABS;
// }
// 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);
//
// return 0;
}
*/
// handler per il tipo documento di destinazione
bool TInterattivo_crea_doc::tipo_doc_handler (TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
TFixed_string tdd(field.get(),4); // tipo del documento destinazione selezionato
tdd.trim();
TTable t("%TIP");
t.zero();
t.put ("CODTAB", tdd); // cerca tipo del documento destinazione
t.read (_isgteq);
/* 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);
return READ_ERROR;
}
*/
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);
return DOC_TYPE_NOT_FOUND;
}
TFilename profilo(t.get ("S4")); // nome del profilo documento (nome del .ini associato al tipo documento originale)
profilo.ext("ini");
TConfig profilo_doc(profilo); // file di configurazione (ini) del documento
TString tipocf = (profilo_doc.get("TIPOCF", "MAIN"));
tipocf.cut(1);
field.mask().set(F_TIPOCF, tipocf);
}
}
TMask& mask = field.mask();
TFixed_string s(mask.get(F_TIPIDOC), 40);
if (key==K_ENTER || key==K_TAB)
return (s.find(field.get()) % 4) == 0; // per evitare che trovi "0010" in "00010002"
return TRUE;
}
int TInterattivo_crea_doc::componi_doc_finale()
{
int err; // errori ritornati dalle funzioni
// long n; // numero della fattura nella numerazione corrente
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
TLocalisamfile f(LF_DOC); // per gestire la testata dei documenti
TLocalisamfile rdoc(LF_RIGHEDOC); // per gestire le righe dei documenti
int current = 0; // chiave corrente
TRectype pilota (LF_DOC); // record per il documento pilota
TTable t("NUM"); // tabella numerazioni
TRectype tempr(LF_DOC); // record del documento originale che si sta elaborando
TRectype temprdoc (LF_RIGHEDOC); // record per trovare le righe dei documenti originale
// int nrdoc; // numero di righe scritte nella fattura
// bool end = FALSE; // true non ci sono piu' documenti originali da elaborare
bool altri; // TRUE se ci sono altri documenti da includere nella fattura
// se _crea_doc, il documento destinazione (testata) deve essere inizializzato
// con i valori del primo documento originale selezionato
bool primo_pilota = _crea_doc;
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 ("PROVV", _provv); // imposta provv./def. del documento
f.put ("NDOC", _ndoc); // imposta il numero del documento
err = f.read(_isgteq); // cerca il documento
if (err) // guarda se si è verificato un errore
{
error_box ("Errore di lettura %d in doc, cercando il documento", err);
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 {
// 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()
_tipo_doc_des = f.get ("TIPODOC"); // imposta il tipo di documento
_stato_f_doc_f = f.get ("STATO"); // stato della fattura appena creata
TRelation rel (LF_DOC);
TString tdfilter(1024);
tdfilter =""; // non so se e' necessaria
#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
tdfilter = td_ELD_to_filter(_tipo_doc_des);
#endif
TSorted_cursor curs (&rel, "NDOC", tdfilter); // lista i documenti ordinati per numero
curs.set_filterfunction (filterfunct);
// non dovrebbe servire : _raggruppa = TRUE;
_per_articolo = TRUE;
// Cursore per selezionare le testate dei documenti
if (curs.items() == 0) // se non ci sono bolle allo stato richiesto, indica errore
{
error_box ("Nessun documento da elaborare.");
return NO_ORG_DOCS;
}
curs.freeze(); // non perdere tempo a riaggiornarti
// curs=0; // comincia dal primo documento della lista
// scandaglia tutto curs e setta _processed tutti i doc. originali che non sono selezionati
TString80 Titolo("Documenti elaborabili che possono diventare ");
Titolo << _tipo_doc_des;
TCursor_sheet docs_sheet(&curs,
" |NDOC|TIPODOC|DATADOC|TIPOCF|CODCF|OCFPI",
Titolo,
"@1|Numero@7|Tipo@4|Data@10|C/F|Cod. cliente|CF o P.IVA@16");
docs_sheet.enable_check();
if (docs_sheet.run()==K_ESC) return ESC_PRESSED;
for (int i=0; i<docs_sheet.items(); i++)
if (!docs_sheet.checked(i))_processed.set(i);
else no_select = FALSE;
if (no_select)
{
error_box ("Nessun documento selezionato.");
return NO_ORG_DOCS;
}
// scandaglia tutto curs e torna con errore se un doc. originale non hanno la ELD
for (int l=0; l<curs.items();l++)
if (!_processed[l])
{
if ((err = esiste_ELD(curs,l,DONT_SET_PROCESSED))==ELAB_NOT_FOUND) return err;
TRectype &curr = curs.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
if (!statovalido(curr))
{
error_box("Documento selezionato (tipo %s,numero %s) non e' in uno stato adatto all'elaborazione",
curr.get("TIPODOC"), curr.get("NDOC"));
return ERR_STATO_NON_VALIDO;
}
}
while (next_pilota(curs,pilota)) // ciclo di generazione fattura
// locka automaticamente il documento (pilota) che sta elaborando
{
// get_info(pilota);
//*****************************************************
//* questa sezione serve a CREARE il documento finale *
//*****************************************************
// imposta il numero per la fattura da creare
// inserisce il record di testata della fattura che va a creare
tempr = pilota; // il primo documento org. da elaborare è quello pilota
// qui inizia il ciclo per la creazione della fattura
// N.B.: appende ogni documento originale nella 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
r.zero();
r.put ("CODNUM", _codnum);
r.put ("ANNO", _anno);
r.put ("PROVV", _provv);
r.put ("NDOC", _ndoc);
doc_destinazione.read(r);
// doc_destinazione.set_key(&r);
// legge tutte le fatture
do
{
// appende il documento originale al documento di destinazione
get_info(tempr);
bool raggr_parz = get_raggr_parz(tempr,err);
TString met = metodo(tempr);
// elab_righe restituisce TRUE solo se tutte le righe del documento originale
// sono state elaborate, quando cioe' il doc_destinazione deve cambiare stato
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).setkey(1);
if (err = curs.file(LF_DOC).rewrite())
{
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
return RECORD_WRITE_ERROR;
}
}
if (primo_pilota)
{
primo_pilota = FALSE;
f = tempr;
f.put ("CODNUM", _codnum);
f.put ("ANNO", _anno);
f.put ("PROVV", _provv);
f.put ("NDOC", _ndoc);
f.put ("TIPODOC", _tipo_doc_des); // reimposta il tipo di documento
f.put ("STATO", _stato_f_doc_f); // stato della fattura appena creata
// curs.file(LF_DOC).setkey(1);
if (err = f.rewrite())
{
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
return RECORD_WRITE_ERROR;
}
}
// unlocka il record del documento processato
curs.file(LF_DOC).setkey(2);
curs.unlock();
// indica che il documento e' stato processato
_processed.set(curs.pos());
// 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
altri = search(pilota, tempr, curs);
}
while (altri); // fine del ciclo che raggruppa le bolle dentro una fattura
// 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
raggruppa_righe (doc_destinazione);
// salva la fattura creata
if (err = doc_destinazione.write())
{
error_box ("Errore nella scrittura del doc. destinazione. err = %d", err);
return RECORD_WRITE_ERROR;
}
no_elab = FALSE; // ha elaborato almeno un documento
// cerca il prossimo documeto pilota
}; // finche' i documenti non finiscono
if (no_elab) // se non ci sono bolle allo stato richiesto, indica errore
{
error_box ("Nessun documento elaborato.");
return NO_ORG_DOCS;
}
return 0;
}
int ve6300 (int argc, char** argv)
{
TInterattivo_crea_doc a;
a.run (argc, argv, "Composizione documenti");
return 0;
}
/*
TPerson p ("MATTEO LIGABUE");
p.send_message(
"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
di composizione interattiva.");
p.bye();
- il prg per ora fa:
a) runna una maschera in cui chiede:
a1) il codice di numerazione del doc da comporre (+PROVV)
a2) il tipo di documento da comporre
a3) la data (AUTOMAGIC)
a4) TIPOCF/CODCF del doc da comporre (e degli originali da selezionare)
a5) tipo di documento originale (da TOGLIERE !!!)
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)
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)
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
il programma deve ancora:
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
settare rispettivamente a FALSE e TRUE, alla propria entrata) delle singole righe....
aggiornare la qtaevase dei singoli sorgenti...
lo stato del documento varia solo con la completa evasione delle righe !!!
... da continuare ...
- 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 trova il record di ELD relativo al documento destinazione specificato
e setta le rimanenti variabili private
-*chiama una funzione che trova i documenti (testate) validi. Usare un TSorted_cursor od un
TRecord_array
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
se l'utente vuole inserire un documento dalla lista allora
mostra la lista
per ogni documento selezionato
se il flag "raggruppa unito" e' true, allora // caso doc. orig = BOLLE
fagli vedere le righe
attendi che prema un button
se preme ok aggiungi le righe al documento finale
end se ru=TRUE
altrimenti // caso doc. orig = ORDINI
fagli vedere le righe
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
settare a TRUE tutto il TBit_array; ??????????
se doubleclicka una riga
chiedigli la quantita' da evadere (puo' essere inferiore alla quantita' ordinata su quella riga)
scrivi nel documento originale la quantita' evasa
setta il TBit_array per indicare che nella bolla deve essere scritta la quantita' evasa
end se dblclk riga
//
...preferisco usare un TArray delle quantita' evase
end altrimenti (ru=FALSE)
end per ogni documento selezionato
end se seleziona dei documenti
altrimenti // vuole aggiungere delle righe
leggi i campi della riga (settando automaticamente codnum, ecc.)
metti la riga letta nel documento finale
end altrimenti (inserimento righe)
end
scrivi NDOC nella testata del documento
scrivi la testata del documento
salva il documento destinazione
end
*/
// ve6300.cpp. Composizione interattiva dei documenti.
#include <sheet.h>
#include <application.h>
#include <stdtypes.h>
#include <mask.h>
#include <relation.h>
#include <strings.h>
#include <isam.h>
#include <real.h>
#include <maskfld.h>
#include <urldefid.h>
#include <config.h>
#include <utility.h>
#include <tabutil.h>
#include "ve6retv.h"
#include "ve6300.h"
#include "ve6gen.h"
class TInterattivo_crea_doc : public TBatch_crea_doc
{
private:
virtual bool menu (MENU_TAG);
virtual bool create ();
virtual bool destroy();
// int set_vars(); // setta le variabili della classe
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 filterfunct(const TRelation*); // funzione per filtrare i documenti originali
int _rdoc; // numero di righe nel documento finale
public:
TInterattivo_crea_doc(void) {}
~TInterattivo_crea_doc() {}
};
inline TInterattivo_crea_doc& app() { return (TInterattivo_crea_doc&) main_app(); }
bool TInterattivo_crea_doc::create()
{
_interattivo = TRUE;
// _stesso_anno_fiscale = FALSE;
int cargc = argc();
const char **vargv = argv();
if (cargc>=2)
{
if (cargc<5) fatal_box ("Numero di parametri insufficiente: chiave incompleta!");
if (cargc>=5)
{
_codnum = vargv[2];
_anno = vargv[3];
_provv = vargv[4];
_ndoc = vargv[5];
}
if (cargc==7) _crea_doc = TRUE;
else _crea_doc = FALSE;
if (cargc>7) message_box ("Sono presenti piu' di 6 argomenti sulla linea di comando: possibile errore");
}
dispatch_e_menu(BAR_ITEM(1));
return TRUE;
}
bool TInterattivo_crea_doc::destroy()
{
return TRUE;
}
bool TInterattivo_crea_doc::menu(MENU_TAG)
{
// if (errore_fatale (set_vars())) return FALSE;
if (errore_fatale (componi_doc_finale())) return FALSE;
return TRUE;
}
/*
TInterattivo_crea_doc::set_vars()
{
TMask m("ve6300.uml");
m.set_handler (F_TIPODOCDES, tipo_doc_handler);
if (m.run()==K_ESC) return ESC_PRESSED;
_datadoc = m.get(F_DATADOC); // data da assegnare al documento da creare
_first_codcf = _last_codcf = m.get_long(F_CODCF); // codice cliente
_tipo_doc_des = m.get(F_TIPODOCDES); // tipo del documento da creare
_codnum = m.get(F_CODNUM); // codice numerazione per il 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
// cerca il record di ELD che corrisponde a _tipo_doc_des
// TRelation rel("ELD");
// TString16 filter ("S8==\"");
// filter << _tipo_doc_des << '"';
// TCursor curs(&rel, filter);
// if (curs.items()==0)
// {
// fatal_box (TString("Nessuna elaborazione genera documenti del tipo ") << _tipo_doc_des);
// return NO_ELABS;
// }
// 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);
//
// return 0;
}
*/
// handler per il tipo documento di destinazione
bool TInterattivo_crea_doc::tipo_doc_handler (TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
TFixed_string tdd(field.get(),4); // tipo del documento destinazione selezionato
tdd.trim();
TTable t("%TIP");
t.zero();
t.put ("CODTAB", tdd); // cerca tipo del documento destinazione
t.read (_isgteq);
/* 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);
return READ_ERROR;
}
*/
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);
return DOC_TYPE_NOT_FOUND;
}
TFilename profilo(t.get ("S4")); // nome del profilo documento (nome del .ini associato al tipo documento originale)
profilo.ext("ini");
TConfig profilo_doc(profilo); // file di configurazione (ini) del documento
TString tipocf = (profilo_doc.get("TIPOCF", "MAIN"));
tipocf.cut(1);
field.mask().set(F_TIPOCF, tipocf);
}
}
TMask& mask = field.mask();
TFixed_string s(mask.get(F_TIPIDOC), 40);
if (key==K_ENTER || key==K_TAB)
return (s.find(field.get()) % 4) == 0; // per evitare che trovi "0010" in "00010002"
return TRUE;
}
int TInterattivo_crea_doc::componi_doc_finale()
{
int err; // errori ritornati dalle funzioni
// long n; // numero della fattura nella numerazione corrente
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
TLocalisamfile f(LF_DOC); // per gestire la testata dei documenti
TLocalisamfile rdoc(LF_RIGHEDOC); // per gestire le righe dei documenti
int current = 0; // chiave corrente
TRectype pilota (LF_DOC); // record per il documento pilota
TTable t("NUM"); // tabella numerazioni
TRectype tempr(LF_DOC); // record del documento originale che si sta elaborando
TRectype temprdoc (LF_RIGHEDOC); // record per trovare le righe dei documenti originale
// int nrdoc; // numero di righe scritte nella fattura
// bool end = FALSE; // true non ci sono piu' documenti originali da elaborare
bool altri; // TRUE se ci sono altri documenti da includere nella fattura
// se _crea_doc, il documento destinazione (testata) deve essere inizializzato
// con i valori del primo documento originale selezionato
bool primo_pilota = _crea_doc;
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 ("PROVV", _provv); // imposta provv./def. del documento
f.put ("NDOC", _ndoc); // imposta il numero del documento
err = f.read(_isgteq); // cerca il documento
if (err) // guarda se si è verificato un errore
{
error_box ("Errore di lettura %d in doc, cercando il documento", err);
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 {
// 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()
_tipo_doc_des = f.get ("TIPODOC"); // imposta il tipo di documento
_stato_f_doc_f = f.get ("STATO"); // stato della fattura appena creata
TRelation rel (LF_DOC);
TString tdfilter(1024);
tdfilter =""; // non so se e' necessaria
#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
tdfilter = td_ELD_to_filter(_tipo_doc_des);
#endif
TSorted_cursor curs (&rel, "NDOC", tdfilter); // lista i documenti ordinati per numero
curs.set_filterfunction (filterfunct);
// non dovrebbe servire : _raggruppa = TRUE;
_per_articolo = TRUE;
// Cursore per selezionare le testate dei documenti
if (curs.items() == 0) // se non ci sono bolle allo stato richiesto, indica errore
{
error_box ("Nessun documento da elaborare.");
return NO_ORG_DOCS;
}
curs.freeze(); // non perdere tempo a riaggiornarti
// curs=0; // comincia dal primo documento della lista
// scandaglia tutto curs e setta _processed tutti i doc. originali che non sono selezionati
TString80 Titolo("Documenti elaborabili che possono diventare ");
Titolo << _tipo_doc_des;
TCursor_sheet docs_sheet(&curs,
" |NDOC|TIPODOC|DATADOC|TIPOCF|CODCF|OCFPI",
Titolo,
"@1|Numero@7|Tipo@4|Data@10|C/F|Cod. cliente|CF o P.IVA@16");
docs_sheet.enable_check();
if (docs_sheet.run()==K_ESC) return ESC_PRESSED;
for (int i=0; i<docs_sheet.items(); i++)
if (!docs_sheet.checked(i))_processed.set(i);
else no_select = FALSE;
if (no_select)
{
error_box ("Nessun documento selezionato.");
return NO_ORG_DOCS;
}
// scandaglia tutto curs e torna con errore se un doc. originale non hanno la ELD
for (int l=0; l<curs.items();l++)
if (!_processed[l])
{
if ((err = esiste_ELD(curs,l,DONT_SET_PROCESSED))==ELAB_NOT_FOUND) return err;
TRectype &curr = curs.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
if (!statovalido(curr))
{
error_box("Documento selezionato (tipo %s,numero %s) non e' in uno stato adatto all'elaborazione",
curr.get("TIPODOC"), curr.get("NDOC"));
return ERR_STATO_NON_VALIDO;
}
}
while (next_pilota(curs,pilota)) // ciclo di generazione fattura
// locka automaticamente il documento (pilota) che sta elaborando
{
// get_info(pilota);
//*****************************************************
//* questa sezione serve a CREARE il documento finale *
//*****************************************************
// imposta il numero per la fattura da creare
// inserisce il record di testata della fattura che va a creare
tempr = pilota; // il primo documento org. da elaborare è quello pilota
// qui inizia il ciclo per la creazione della fattura
// N.B.: appende ogni documento originale nella 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
r.zero();
r.put ("CODNUM", _codnum);
r.put ("ANNO", _anno);
r.put ("PROVV", _provv);
r.put ("NDOC", _ndoc);
doc_destinazione.read(r);
// doc_destinazione.set_key(&r);
// legge tutte le fatture
do
{
// appende il documento originale al documento di destinazione
get_info(tempr);
bool raggr_parz = get_raggr_parz(tempr,err);
TString met = metodo(tempr);
// elab_righe restituisce TRUE solo se tutte le righe del documento originale
// sono state elaborate, quando cioe' il doc_destinazione deve cambiare stato
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).setkey(1);
if (err = curs.file(LF_DOC).rewrite())
{
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
return RECORD_WRITE_ERROR;
}
}
if (primo_pilota)
{
primo_pilota = FALSE;
f = tempr;
f.put ("CODNUM", _codnum);
f.put ("ANNO", _anno);
f.put ("PROVV", _provv);
f.put ("NDOC", _ndoc);
f.put ("TIPODOC", _tipo_doc_des); // reimposta il tipo di documento
f.put ("STATO", _stato_f_doc_f); // stato della fattura appena creata
// curs.file(LF_DOC).setkey(1);
if (err = f.rewrite())
{
error_box ("ve6200: Errore fatale: %d scrivendo sul file DOC", err);
return RECORD_WRITE_ERROR;
}
}
// unlocka il record del documento processato
curs.file(LF_DOC).setkey(2);
curs.unlock();
// indica che il documento e' stato processato
_processed.set(curs.pos());
// 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
altri = search(pilota, tempr, curs);
}
while (altri); // fine del ciclo che raggruppa le bolle dentro una fattura
// 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
raggruppa_righe (doc_destinazione);
// salva la fattura creata
if (err = doc_destinazione.write())
{
error_box ("Errore nella scrittura del doc. destinazione. err = %d", err);
return RECORD_WRITE_ERROR;
}
no_elab = FALSE; // ha elaborato almeno un documento
// cerca il prossimo documeto pilota
}; // finche' i documenti non finiscono
if (no_elab) // se non ci sono bolle allo stato richiesto, indica errore
{
error_box ("Nessun documento elaborato.");
return NO_ORG_DOCS;
}
return 0;
}
int ve6300 (int argc, char** argv)
{
TInterattivo_crea_doc a;
a.run (argc, argv, "Composizione documenti");
return 0;
}
/*
TPerson p ("MATTEO LIGABUE");
p.send_message(
"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
di composizione interattiva.");
p.bye();
- il prg per ora fa:
a) runna una maschera in cui chiede:
a1) il codice di numerazione del doc da comporre (+PROVV)
a2) il tipo di documento da comporre
a3) la data (AUTOMAGIC)
a4) TIPOCF/CODCF del doc da comporre (e degli originali da selezionare)
a5) tipo di documento originale (da TOGLIERE !!!)
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)
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)
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
il programma deve ancora:
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
settare rispettivamente a FALSE e TRUE, alla propria entrata) delle singole righe....
aggiornare la qtaevase dei singoli sorgenti...
lo stato del documento varia solo con la completa evasione delle righe !!!
... da continuare ...
- 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 trova il record di ELD relativo al documento destinazione specificato
e setta le rimanenti variabili private
-*chiama una funzione che trova i documenti (testate) validi. Usare un TSorted_cursor od un
TRecord_array
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
se l'utente vuole inserire un documento dalla lista allora
mostra la lista
per ogni documento selezionato
se il flag "raggruppa unito" e' true, allora // caso doc. orig = BOLLE
fagli vedere le righe
attendi che prema un button
se preme ok aggiungi le righe al documento finale
end se ru=TRUE
altrimenti // caso doc. orig = ORDINI
fagli vedere le righe
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
settare a TRUE tutto il TBit_array; ??????????
se doubleclicka una riga
chiedigli la quantita' da evadere (puo' essere inferiore alla quantita' ordinata su quella riga)
scrivi nel documento originale la quantita' evasa
setta il TBit_array per indicare che nella bolla deve essere scritta la quantita' evasa
end se dblclk riga
//
...preferisco usare un TArray delle quantita' evase
end altrimenti (ru=FALSE)
end per ogni documento selezionato
end se seleziona dei documenti
altrimenti // vuole aggiungere delle righe
leggi i campi della riga (settando automaticamente codnum, ecc.)
metti la riga letta nel documento finale
end altrimenti (inserimento righe)
end
scrivi NDOC nella testata del documento
scrivi la testata del documento
salva il documento destinazione
end
*/

View File

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

View File

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

View File

@ -1,22 +1,22 @@
PAGE "Selezione parametri" 0 0 0 0
#include <ve6300.h>
BUTTON DLG_OK 9 2
BEGIN
PROMPT 20 19 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT 40 19 ""
END
SPREADSHEET F_SHEET 70 15
BEGIN
PROMPT 5 4 ""
END
END
ENDMASK
PAGE "Selezione parametri" 0 0 0 0
#include "ve6300.h"
BUTTON DLG_OK 9 2
BEGIN
PROMPT 20 19 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT 40 19 ""
END
SPREADSHEET F_SHEET 70 15
BEGIN
PROMPT 5 4 ""
END
END
ENDMASK

View File

@ -1,128 +1,128 @@
// Dichiarazione della classe generale.
#ifndef _TELABORAZIONI_DECL
#define _TELABORAZIONI_DECL
#include <sheet.h>
#include <application.h>
#include <stdtypes.h>
#include <mask.h>
#include <relation.h>
#include <strings.h>
#include <isam.h>
#include <real.h>
#include <maskfld.h>
#include <urldefid.h>
#include <config.h>
#include <utility.h>
#include "ve6retv.h"
#include "ve6300.h"
#include "ve6gen.h"
#include <applicat.h>
//#include <strings.h>
#include "ve6.h"
#include <array.h>
#define _TDD_IN_FILTER
#define STATO_PPT '*'
#define SET_PROCESSED TRUE
#define DONT_SET_PROCESSED FALSE
class TElaborazioni : public TApplication
{
protected:
// i data members sono protected in modo che gli oggetti generatori
// possano accedervi senza la necessità di funzioni specifiche
TString16 _codnum; // (stringa di 4)
TString16 _anno; // int _anno;
TString16 _provv; // char _provv;
TString16 _ndoc; // int _ndoc;
bool _crea_doc; // deve creare il documento di destinazione ?
int _ordinamento; // indica il tipo di ordinamento
bool _raggruppa; // indica se si deve raggruppare 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
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_des; // tipo documento finale
TString80 _stati_validi_doc_i;// lista stati documenti originali prima dell'elaborazione
TString _stato_f_doc_i; // dopo l'elaborazione
TString _stato_f_doc_f; // stato documento finale al termine dell'operazione
// TString _codnum; // codice per la numerazione del documento di destinazione
bool _sosp_imposta; // T/F sospensione imposta
bool _cod_sconto; // T/F codice sconto
bool _stesso_anno; // T/F STESSOANNOFISCALE in [RAGGR.] del .ini del doc pilota
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
public:
TElaborazioni() : _provv(1) { _chiave = 2; }
~TElaborazioni () {}
};
// TCursor_sheet con la on_key() customizzata per l'inserimento del campo QTAEVASA nelle righe
class TInterattivo_sheet : public TCursor_sheet
{
protected:
virtual bool on_key(KEY);
public:
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)
: TCursor_sheet(cursor, fields, title, head, buttons)
{};
virtual ~TInterattivo_sheet() {};
};
class TBatch_crea_doc : public TElaborazioni
{
protected:
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
TString _descr_tipodocorg; // descrizione del tipo documento originale (solo come titolo del TSheet_array)
virtual bool menu (MENU_TAG);
virtual bool create ();
virtual bool destroy();
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 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 getflag (TRectype&, int); // ritorna i valori di due flag
static bool filterfunct(const TRelation*); // funzione di filtro per i campi non alfanumerici
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
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);
// elabora le righe (di doc_originale), mettendole in doc_destinazione
// usando il metodo metodo, tramite il record temprdoc gia' inizializzato
bool next_pilota(TSorted_cursor &curs,TRectype &pilota);
// 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);
// 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
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
TString metodo(TRectype &rec);
// restituisce la stringa metodo di trasf. dal record ELD per rec->_tipo_destinazione
int statovalido(TRectype& rec);
// 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);
// trova il .ini di rec e lo restituisce
TString getini(TRectype& rec, int &err);
// prende RAGGRPARZ della sezione [RAGGRUPPA]
bool get_raggr_parz(TRectype& rec, int& err);
// ritorna TRUE se _stesso_anno_fiscale o STESSOANNOFISCALE del .ini di rec
bool stesso_anno_fiscale(TRectype& rec);
// setta le informazioni sugli stati del doc e le mette nelle relative variabili globali
int get_info(TRectype &doc);
// guarda se i documenti pil e pil2 sono compatibili per essere uniti nello stesso documento finale
bool doc_i_compatibili(TRectype &pil,TRectype &pil2);
public:
TBatch_crea_doc () {} // costruttore
~TBatch_crea_doc () {}
};
#endif // _TELABORAZIONI_DECL //
// Dichiarazione della classe generale.
#ifndef _TELABORAZIONI_DECL
#define _TELABORAZIONI_DECL
#include <sheet.h>
#include <application.h>
#include <stdtypes.h>
#include <mask.h>
#include <relation.h>
#include <strings.h>
#include <isam.h>
#include <real.h>
#include <maskfld.h>
#include <urldefid.h>
#include <config.h>
#include <utility.h>
#include "ve6retv.h"
#include "ve6300.h"
#include "ve6gen.h"
#include <applicat.h>
//#include <strings.h>
#include "ve6.h"
#include <array.h>
#define _TDD_IN_FILTER
#define STATO_PPT '*'
#define SET_PROCESSED TRUE
#define DONT_SET_PROCESSED FALSE
class TElaborazioni : public TApplication
{
protected:
// i data members sono protected in modo che gli oggetti generatori
// possano accedervi senza la necessità di funzioni specifiche
TString16 _codnum; // (stringa di 4)
TString16 _anno; // int _anno;
TString16 _provv; // char _provv;
TString16 _ndoc; // int _ndoc;
bool _crea_doc; // deve creare il documento di destinazione ?
int _ordinamento; // indica il tipo di ordinamento
bool _raggruppa; // indica se si deve raggruppare 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
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_des; // tipo documento finale
TString80 _stati_validi_doc_i;// lista stati documenti originali prima dell'elaborazione
TString _stato_f_doc_i; // dopo l'elaborazione
TString _stato_f_doc_f; // stato documento finale al termine dell'operazione
// TString _codnum; // codice per la numerazione del documento di destinazione
bool _sosp_imposta; // T/F sospensione imposta
bool _cod_sconto; // T/F codice sconto
bool _stesso_anno; // T/F STESSOANNOFISCALE in [RAGGR.] del .ini del doc pilota
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
public:
TElaborazioni() : _provv(1) { _chiave = 2; }
~TElaborazioni () {}
};
// TCursor_sheet con la on_key() customizzata per l'inserimento del campo QTAEVASA nelle righe
class TInterattivo_sheet : public TCursor_sheet
{
protected:
virtual bool on_key(KEY);
public:
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)
: TCursor_sheet(cursor, fields, title, head, buttons)
{};
virtual ~TInterattivo_sheet() {};
};
class TBatch_crea_doc : public TElaborazioni
{
protected:
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
TString _descr_tipodocorg; // descrizione del tipo documento originale (solo come titolo del TSheet_array)
virtual bool menu (MENU_TAG);
virtual bool create ();
virtual bool destroy();
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 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 getflag (TRectype&, int); // ritorna i valori di due flag
static bool filterfunct(const TRelation*); // funzione di filtro per i campi non alfanumerici
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
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);
// elabora le righe (di doc_originale), mettendole in doc_destinazione
// usando il metodo metodo, tramite il record temprdoc gia' inizializzato
bool next_pilota(TSorted_cursor &curs,TRectype &pilota);
// 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);
// 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
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
TString metodo(TRectype &rec);
// restituisce la stringa metodo di trasf. dal record ELD per rec->_tipo_destinazione
int statovalido(TRectype& rec);
// 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);
// trova il .ini di rec e lo restituisce
TString getini(TRectype& rec, int &err);
// prende RAGGRPARZ della sezione [RAGGRUPPA]
bool get_raggr_parz(TRectype& rec, int& err);
// ritorna TRUE se _stesso_anno_fiscale o STESSOANNOFISCALE del .ini di rec
bool stesso_anno_fiscale(TRectype& rec);
// setta le informazioni sugli stati del doc e le mette nelle relative variabili globali
int get_info(TRectype &doc);
// guarda se i documenti pil e pil2 sono compatibili per essere uniti nello stesso documento finale
bool doc_i_compatibili(TRectype &pil,TRectype &pil2);
public:
TBatch_crea_doc () {} // costruttore
~TBatch_crea_doc () {}
};
#endif // _TELABORAZIONI_DECL //