Correzzioni

git-svn-id: svn://10.65.10.50/trunk@2779 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-05-03 17:11:39 +00:00
parent a116aa3201
commit 8bde27dae8
24 changed files with 1492 additions and 628 deletions

View File

@ -1,4 +1,4 @@
#include "BATBMAG.h"
#include "batbmag.h"
#include <comdcod.h>
#include <comdden.h>
@ -286,7 +286,7 @@ END
BOOLEAN F_GESTGIA
BEGIN
PROMPT 2 4 "Gestione giacenze in più depositi "
PROMPT 2 4 "Gestione giacenze in piu' depositi "
FIELD MAG->B0
END

View File

@ -201,8 +201,8 @@ BEGIN
PROMPT 38 8 ""
FIELD SPP->S4
USE LF_PCON
INPUT GRUPPO F_GRUPPO
INPUT CONTO F_CONTO
INPUT GRUPPO F_GRUPPO SELECT
INPUT CONTO F_CONTO SELECT
INPUT SOTTOCONTO F_SOTTO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO

View File

@ -38,10 +38,9 @@ END
USE %TIP KEY 2
CHECKTYPE REQUIRED
INPUT S0 F_DESNUM
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@40" S0
OUTPUT F_CODTAB CODTAB
OUTPUT F_DESNUM S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_CODTAB
KEY 2
END
@ -49,14 +48,14 @@ END
BEGIN
PROMPT 2 8 "Profilo documento "
FIELD S4
FLAG "U"
CHECKTYPE REQUIRED
END
STRING F_PSTAMPA 8
BEGIN
PROMPT 2 10 "Profilo stampa documento "
FIELD S5
FLAG "U"
CHECKTYPE REQUIRED
END
ENDPAGE

View File

@ -1,13 +1,9 @@
#include "batbtri.h"
TOOLBAR "" 0 20 60 2
#include "toolbar.h"
ENDPAGE
#define F_CODICE 101
#define F_DESCR 102
#define F_PROFILO 103
PAGE "Tipo di riga" -1 -1 60 14
GROUPBOX DLG_NULL 75 7
@ -15,7 +11,7 @@ PAGE "Tipo di riga" -1 -1 60 14
PROMPT 1 0 ""
FLAGS "R"
END
STRING F_CODICE 4
BEGIN
PROMPT 2 2 "Codice "
@ -43,7 +39,7 @@ PAGE "Tipo di riga" -1 -1 60 14
KEY 2
END
STRING f_PROFILO 8
STRING F_PROFILO 8
BEGIN
PROMPT 2 8 "Profilo "
CHECKTYPE REQUIRED

View File

@ -6,12 +6,12 @@
#include "ve0100.h"
#endif
#ifndef __VE0100C_H
#include "ve0100c.h"
#ifndef __VERIG_H
#include "verig.h"
#endif
#ifndef __VEUML2_H
#include "veuml2.h"
#ifndef __VE0100C_H
#include "ve0100c.h"
#endif
#ifndef __SCONTI_H
@ -55,9 +55,9 @@ static bool riga_art_handler( TMask_field& f, KEY key )
// Se qualcuno cerca di modificare la maschera
if ( key == K_TAB ) // && m.is_running( ) )
{
TSconto_riga r( app( ).clifo( ), &( app( ).edit_mask( ) ), &( f.mask( ) ) );
TSconto_riga r( app( ).clifo( ), &app( ).edit_mask( ), &m );
r.calcola( );
f.mask( ).set( FS_SCONTO, r.get( ) );
f.mask( ).set( FR_SCONTO, r.get( ) );
}
return TRUE;
}
@ -65,32 +65,26 @@ static bool riga_art_handler( TMask_field& f, KEY key )
void TRiga::load( TToken_string& row )
{
_data.put( "CODNUM", row.get( FS_CODNUM - 101 ) );
_data.put( "ANNO", row.get( FS_ANNO - 101 ) );
_data.put( "PROVV", row.get( FS_PROVV - 101 ) );
_data.put( "NDOC", row.get( FS_NDOC - 101 ) );
_data.put( "STATORIGA", row.get( FS_STATORIGA - 101 ) );
_data.put( "TIPORIGA", row.get( FS_TIPORIGA - 101 ) );
_data.put( "PROFRIGA", row.get( FS_PROFRIGA - 101 ) );
_data.put( "CODMAG", row.get( FS_CODMAG - 101 ) );
_data.put( "CODART", row.get( FS_CODART - 101 ) );
_data.put( "DESCR", row.get( FS_DESCR - 101 ) );
_data.put( "DESCLUNGA", row.get( FS_DESCLUNGA - 101 ) );
_data.put( "PREZZO", row.get( FS_PREZZO - 101 ) );
_data.put( "UMQTA", row.get( FS_UMQTA - 101 ) );
_data.put( "QTA", row.get( FS_QTA - 101 ) );
_data.put( "QTAEVASA", row.get( FS_QTAEVASA - 101 ) );
_data.put( "RIGAEVASA", row.get( FS_RIGAEVASA - 101 ) );
_data.put( "TARA", row.get( FS_TARA - 101 ) );
_data.put( "PNETTO", row.get( FS_PNETTO - 101 ) );
_data.put( "NCOLLI", row.get( FS_NCOLLI - 101 ) );
_data.put( "DAEVADERE", row.get( FS_DAEVADERE - 101 ) );
_data.put( "SCONTO", row.get( FS_SCONTO - 101 ) );
_data.put( "PERCPROV", row.get( FS_PERCPROV - 101 ) );
_data.put( "IMPFISSO", row.get( FS_IMPFISSO - 101 ) );
_data.put( "CODIVA", row.get( FS_CODIVA - 101 ) );
_data.put( "ADDIVA", row.get( FS_ADDIVA - 101 ) );
_data.put( "ASPBENI", row.get( FS_ASPBENI - 101 ) );
_data.put( "STATORIGA", row.get( FR_STATORIGA - 101 ) );
_data.put( "TIPORIGA", row.get( FR_TIPORIGA - 101 ) );
_data.put( "CODMAG", row.get( FR_CODMAG - 101 ) );
_data.put( "CODART", row.get( FR_CODART - 101 ) );
_data.put( "DESCR", row.get( FR_DESCR - 101 ) );
_data.put( "PREZZO", row.get( FR_PREZZO - 101 ) );
_data.put( "UMQTA", row.get( FR_UMQTA - 101 ) );
_data.put( "QTA", row.get( FR_QTA - 101 ) );
_data.put( "QTAEVASA", row.get( FR_QTAEVASA - 101 ) );
_data.put( "RIGAEVASA", row.get( FR_RIGAEVASA - 101 ) );
_data.put( "TARA", row.get( FR_TARA - 101 ) );
_data.put( "PNETTO", row.get( FR_PNETTO - 101 ) );
_data.put( "NCOLLI", row.get( FR_NCOLLI - 101 ) );
_data.put( "DAEVADERE", row.get( FR_DAEVADERE - 101 ) );
_data.put( "SCONTO", row.get( FR_SCONTO - 101 ) );
_data.put( "PERCPROV", row.get( FR_PERCPROV - 101 ) );
_data.put( "IMPFISSO", row.get( FR_IMPFISSO - 101 ) );
_data.put( "CODIVA", row.get( FR_CODIVA - 101 ) );
_data.put( "ADDIVA", row.get( FR_ADDIVA - 101 ) );
_data.put( "ASPBENI", row.get( FR_ASPBENI - 101 ) );
carica_profilo( );
_piede.destroy( );
somma( _piede );
@ -98,47 +92,27 @@ void TRiga::load( TToken_string& row )
void TRiga::save( TToken_string& row )
{
row.add( _data.get( "CODNUM" ), FS_CODNUM - 101 );
row.add( _data.get( "ANNO" ), FS_ANNO - 101 );
row.add( _data.get( "PROVV" ), FS_PROVV - 101 );
row.add( _data.get( "NDOC" ), FS_NDOC - 101 );
row.add( _data.get( "STATORIGA" ), FS_STATORIGA - 101 );
row.add( _data.get( "TIPORIGA" ), FS_TIPORIGA - 101 );
row.add( _data.get( "PROFRIGA" ), FS_PROFRIGA - 101 );
row.add( _data.get( "CODMAG" ), FS_CODMAG - 101 );
row.add( _data.get( "CODART" ), FS_CODART - 101 );
row.add( _data.get( "DESCR" ), FS_DESCR - 101 );
row.add( _data.get( "DESCLUNGA" ), FS_DESCLUNGA - 101 );
row.add( _data.get( "PREZZO" ), FS_PREZZO - 101 );
row.add( _data.get( "UMQTA" ), FS_UMQTA - 101 );
row.add( _data.get( "QTA" ), FS_QTA - 101 );
row.add( _data.get( "QTAEVASA" ), FS_QTAEVASA - 101 );
row.add( _data.get( "RIGAEVASA" ), FS_RIGAEVASA - 101 );
row.add( _data.get( "TARA" ), FS_TARA - 101 );
row.add( _data.get( "PNETTO" ), FS_PNETTO - 101 );
row.add( _data.get( "NCOLLI" ), FS_NCOLLI - 101 );
row.add( _data.get( "DAEVADERE" ), FS_DAEVADERE - 101 );
row.add( _data.get( "SCONTO" ), FS_SCONTO - 101 );
row.add( _data.get( "PERCPROV" ), FS_PERCPROV - 101 );
row.add( _data.get( "IMPFISSO" ), FS_IMPFISSO - 101 );
row.add( _data.get( "CODIVA" ), FS_CODIVA - 101 );
row.add( _data.get( "ADDIVA" ), FS_ADDIVA - 101 );
row.add( _data.get( "ASPBENI" ), FS_ASPBENI - 101 );
row.add( _piede.string( ), FS_G1 - 101 );
}
void TRiga::carica_maschera( )
{
_mask = new TMask( _pro->get( "MSK", "MAIN" ) );
int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" );
for( int i = 1; i <= numhandler; i ++ )
{
TString chiave;
chiave.format( "%d", i );
TToken_string riga = _pro->get( chiave, "HANDLERS" );
row_set_handler( *_mask, riga.get_int( 0 ), riga.get_int( 1 ) );
}
// _mask->set_handler( FS_CODART, riga_art_handler );
row.add( _data.get( "STATORIGA" ), FR_STATORIGA - 101 );
row.add( _data.get( "TIPORIGA" ), FR_TIPORIGA - 101 );
row.add( _data.get( "CODMAG" ), FR_CODMAG - 101 );
row.add( _data.get( "CODART" ), FR_CODART - 101 );
row.add( _data.get( "DESCR" ), FR_DESCR - 101 );
row.add( _data.get( "UMQTA" ), FR_UMQTA - 101 );
row.add( _data.get( "PREZZO" ), FR_PREZZO - 101 );
row.add( _data.get( "QTA" ), FR_QTA - 101 );
row.add( _data.get( "QTAEVASA" ), FR_QTAEVASA - 101 );
row.add( _data.get( "RIGAEVASA" ), FR_RIGAEVASA - 101 );
row.add( _data.get( "TARA" ), FR_TARA - 101 );
row.add( _data.get( "PNETTO" ), FR_PNETTO - 101 );
row.add( _data.get( "NCOLLI" ), FR_NCOLLI - 101 );
row.add( _data.get( "DAEVADERE" ), FR_DAEVADERE - 101 );
row.add( _data.get( "SCONTO" ), FR_SCONTO - 101 );
row.add( _data.get( "PERCPROV" ), FR_PERCPROV - 101 );
row.add( _data.get( "IMPFISSO" ), FR_IMPFISSO - 101 );
row.add( _data.get( "CODIVA" ), FR_CODIVA - 101 );
row.add( _data.get( "ADDIVA" ), FR_ADDIVA - 101 );
row.add( _data.get( "ASPBENI" ), FR_ASPBENI - 101 );
// row.add( _piede.string( ), FR_G1 - 101 ); rimettere
}
void TRiga::load( const TRectype& rec )
@ -150,14 +124,15 @@ void TRiga::load( const TRectype& rec )
void TRiga::save( TRectype& rec )
{
rec = _data;
rec.put( "G1", _piede.string( ) );
// rec.put( "G1", _piede.string( ) );
}
void TRiga::carica_profilo( )
{
if( _pro )
delete _pro;
TFilename proname( _data.get( "PROFRIGA" ) );
delete _pro;
TFilename proname("verig");
proname << _data.get("TIPORIGA");
proname.ext( "ini" );
_pro = new TConfig( proname );
}
@ -173,7 +148,7 @@ void TRiga::configura_sheet( TSheet_field& f, int numriga )
TString16 chiave;
chiave.format( "%d", i );
int coltoenable = _pro->get_int( chiave, "COLUMNS" );
f.enable_cell ( numriga, coltoenable - 1 );
f.enable_cell ( numriga, coltoenable);
}
}
@ -246,12 +221,22 @@ void TRiga::sottrai( TPiede_documento& piede )
piede.sottrai( temp_piede );
}
TMask& TRiga::getmask( )
{
if( !_mask)
carica_maschera( );
_mask->set_handler( FS_DESCR, riga_des_handler );
return *_mask;
TMask * TRiga::getmask( )
{
TString16 msk("verig");
msk << _data.get("TIPORIGA");
TMask * mask = new TMask( msk );
int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" );
for( int i = 1; i <= numhandler; i ++ )
{
TString chiave;
chiave.format( "%d", i );
TToken_string riga = _pro->get( chiave, "HANDLERS" );
row_set_handler( *mask, riga.get_int( 0 ), riga.get_int( 1 ) );
}
mask->set_handler( FR_DESCR, riga_des_handler );
return mask;
}
@ -287,8 +272,6 @@ TRiga::~TRiga( )
{
if( _pro )
delete _pro;
if( _mask )
delete _mask;
}
@ -352,8 +335,8 @@ real& TPiede_documento::get( TString16& piede )
if( is_key( piede ) )
{
return ( real& ) find( piede );
return ( real& ) find( piede );
}
else
return zero;
return zero;
}

View File

@ -1,8 +1,6 @@
#ifndef __RIGHEDOC_H
#define __RIGHEDOC_H
// Numero di colonne presenti sullo sheet totale
#define MAX_COLUMNS 27
#ifndef __ASSOC_H
#include "assoc.h"
#endif
@ -31,11 +29,6 @@
#include "msksheet.h"
#endif
#ifndef __VEUML2_H
#include "veuml2.h"
#endif
class TPiede_documento : public TAssoc_array
{
public:
@ -46,7 +39,7 @@ class TPiede_documento : public TAssoc_array
void sottrai( TPiede_documento& tosum ){ somma( tosum, FALSE ); };
void somma( TString16& piede, const real& importo );
void sottrai( TString16& piede, const real& importo ){ somma( piede, -importo ); };
real& get( TString16& piede );
real& get( TString16& piede );
};
class TRiga : public TObject
@ -60,7 +53,6 @@ class TRiga : public TObject
TConfig* _pro;
// Maschera per la riga
TMask* _mask;
TPiede_documento _piede;
@ -75,7 +67,7 @@ class TRiga : public TObject
// Setta il numero della riga
void set_numero( int r ) { _data.put( "NRIGA", r ); }
int numero( ) { return _data.get_int( "NRIGA" ); }
const TString& profilo( ) { return _data.get( "PROFRIGA" ); }
const TString & tipo( ) const { return _data.get( "TIPORIGA" ); }
// Carica la riga dalla riga dello sheet
void load( TToken_string& row );
// Registra la riga sullo sheet
@ -93,13 +85,11 @@ class TRiga : public TObject
// Gestisce la modifica/cancellazione della riga sul piede
// documento indicato. Va chiamata negli handler degli sheet
void edit_keys( const KEY key, TPiede_documento& nuovo );
// Ritorna la maschera della riga per la editazione
TMask& getmask( );
void carica_maschera( );
// Costruisce e Ritorna la maschera della riga per la editazione
TMask * getmask();
// Costruttorino standard
TRiga( ) : _data( LF_RIGHEDOC ), _pro( NULL ), _mask( NULL ) { }
TRiga( ) : _data( LF_RIGHEDOC ), _pro( NULL ) { }
virtual ~TRiga( );
};

View File

@ -6,8 +6,8 @@
#include "veuml.h"
#endif
#ifndef __VEUML2_H
#include "veuml2.h"
#ifndef __VERIG_H
#include "verig.h"
#endif
#ifndef __TCLIFOR_H
@ -142,12 +142,12 @@ TSconto_riga::TSconto_riga( TCliFor& clifo, TMask * testa, TMask * riga ) : _con
bool TSconto_riga::cerca_condv( int tiporicerca )
{
TString s1 = _anamag.get( "CODART" );
TString s2 = riga( ).get( FS_CODART );
TString s2 = riga( ).get( FR_CODART );
if( s1 != s2 )
{
_anamag.setkey( 1 );
_anamag.zero( );
_anamag.put( "CODART", riga( ).get( FS_CODART ) );
_anamag.put( "CODART", riga( ).get( FR_CODART ) );
int ret = _anamag.read( );
CHECK( ret == NOERR, "Articolo non trovato in anagrafica di magazzino!" );
}
@ -213,7 +213,7 @@ bool TSconto_riga::cerca_condv( int tiporicerca )
_rcondv.put( "CODCF", _condv.get( "CODCF" ) );
if( _condv.get_bool( "GESTUM" ) )
{
_rcondv.put( "UM", riga( ).get( FS_UMQTA ) );
_rcondv.put( "UM", riga( ).get( FR_UMQTA ) );
}
else
{
@ -221,7 +221,7 @@ bool TSconto_riga::cerca_condv( int tiporicerca )
}
if( _condv.get_bool( "GESTSCA" ) )
{
_rcondv.put( "QLIM", riga( ).get( FS_QTA ) );
_rcondv.put( "QLIM", riga( ).get( FR_QTA ) );
}
else
{
@ -305,7 +305,7 @@ void TSconto_riga::calcola( )
}
if( _ditta.get_bool( "GESSCORIGAUM", "ve" ) )
{
_sconti.put( "UM", riga( ).get( FS_UMQTA ) );
_sconti.put( "UM", riga( ).get( FR_UMQTA ) );
}
if( _sconti.read( ) == NOERR )
// Bravo, hai vinto una bambolina

View File

@ -56,7 +56,7 @@ int TCliFor::write_occas( )
if( !occasionale( ) )
return NOERR;
TRelation occas( LF_OCCAS );
occas_mask( ).autosave( &occas );
occas_mask( ).autosave( occas );
return occas.write( );
}
@ -83,11 +83,11 @@ void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
occrel.curr( ).zero( );
occrel.curr( ).put( "CFPI", ocfpi );
occrel.read( );
occas_mask( ).autoload( &occrel );
occas_mask( ).autoload( occrel );
}
}
void TCliForVendite::update_mask( TVariable_mask& m, bool onload )
void TCliForVendite::update_mask( TMask& m, bool onload )
{
TString16 stato;
@ -189,7 +189,7 @@ bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
occas.lfile().put("CFPI", code);
if (occas.read(_isequal) == NOERR)
{
f.mask().autoload(&occas);
f.mask().autoload(occas);
f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni
f.mask().send_key(K_TAB, O_COMUNENAS);
}
@ -198,7 +198,7 @@ bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
return TRUE;
}
void TCliForVendite::imposta_dati_comune( TVariable_mask& m )
void TCliForVendite::imposta_dati_comune( TMask& m )
{
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey( 1 );
@ -217,7 +217,7 @@ void TCliForVendite::imposta_dati_comune( TVariable_mask& m )
m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
}
void TCliForVendite::imposta_indirizzo_spedizione( TVariable_mask& m )
void TCliForVendite::imposta_indirizzo_spedizione( TMask& m )
{
TString16 stato;
if( occasionale( ) )
@ -276,7 +276,7 @@ void TCliForVendite::imposta_indirizzo_spedizione( TVariable_mask& m )
m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );
}
void TCliForVendite::imposta_sconto_testa( TVariable_mask& m )
void TCliForVendite::imposta_sconto_testa( TMask& m )
{
TConfig ditta( CONFIG_DITTA );
TString16 codsconto;
@ -349,7 +349,7 @@ void TCliForVendite::imposta_sconto_testa( TVariable_mask& m )
}
}
void TCliForVendite::imposta_valuta( TVariable_mask& m )
void TCliForVendite::imposta_valuta( TMask& m )
{
TConfig ditta( CONFIG_DITTA );

View File

@ -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( TVariable_mask& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); };
void set( TMask& 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( 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 );
void update_mask( TMask& m, bool onload = FALSE );
void imposta_dati_comune( TMask& m );
void imposta_valuta( TMask& m );
void imposta_indirizzo_spedizione( TMask& m );
void imposta_sconto_testa( TMask& m );
};

View File

@ -1,9 +1,44 @@
#ifndef __VE0100_H
#include "ve0100.h"
#endif
#endif
// babbalone #3-4 I can't show these, because they are in the mask
TTipo_documento::TTipo_documento(const char * tipodoc)
: _tipodoc(tipodoc), _mask(NULL)
{
TTable t("%TIP");
t.zero();
t.put("CODTAB", _tipodoc);
if (t.bad())
fatal_box("Non esiste il tipo documento %s", _tipodoc);
_profile = t.get("S4");
_profile_file = _profile;
_profile_file.ext("ini");
TConfig * p = create_profile();
_mask = new TVariable_mask( p->get( "MSKFILE", "MAIN" ) );
delete p;
}
TTipo_documento::~TTipo_documento()
{
if (_mask != NULL)
delete _mask;
}
TMotore_application& app( ) { return ( TMotore_application& ) main_app( ); }
void TMotore_application::init_query_mode( TMask& m )
{
_msk->set( F_CODNUM, _codnum );
_msk->check_field(F_CODNUM);
_msk->set( F_PROFILO, _profilo );
_msk->set( F_TIPODOC, _tipodoc );
}
void TMotore_application::init_insert_mode( TMask& m )
{
TString tipocf( "A" );
@ -12,7 +47,7 @@ void TMotore_application::init_insert_mode( TMask& m )
m.set( F_DATAINSC, m.get( F_DATADOC ) );
m.set( F_TIPOCF, tipocf );
clifo( ).occas_mask( ).reset( );
int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" );
int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof
for( int i = 1; i <= ndefaults; i++ )
{
TString16 chiave;
@ -43,7 +78,6 @@ int TMotore_application::user_function( int index )
TMask *TMotore_application::ss_getmask( int numriga, TMask& fullmask, bool destroy )
{
static TRiga* r = NULL;
static TMask* m = NULL;
if ( destroy )
{
@ -55,18 +89,24 @@ TMask *TMotore_application::ss_getmask( int numriga, TMask& fullmask, bool destr
{
TSheet_field* ss = fullmask.get_sheet( );
TToken_string& riga = ss->row( numriga );
TString16 profilo( riga.get( FS_PROFRIGA - 101 ) );
if ( profilo.blank( ) ) return &fullmask;
if( r && ( r->profilo( ) == profilo ) )
{
return( m );
}
const TString tipo(riga.get( FR_TIPORIGA - 101 ));
if ( tipo.blank() ) return &fullmask;
if ( !r )
r = new TRiga;
r->load( riga );
m = &(r->getmask( ));
m->set_sheet( ss );
return( m );
if(r->tipo() != tipo)
{
r->load( riga );
}
TAssoc_array & row_masks = app()._row_masks;
TMask * row_mask = (TMask *) row_masks.objptr(tipo);
if (row_mask == NULL)
{
row_mask = r->getmask();
row_mask->set_sheet( ss );
row_masks.add(tipo, row_mask);
}
return( row_mask );
}
}
@ -94,9 +134,10 @@ void TMotore_application::user_set_handler( int fieldid, int index, TMask* m )
}
bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key )
{
static TRiga* riga;
static TRiga * riga = NULL;
if ( key == K_SPACE ) // Inizio modifica
{
TPiede_documento& piede = app( ).piede( );
@ -104,9 +145,10 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key )
}
if ( key == K_TAB ) // Mi posiziono su di una riga nello sheet
{
if ( riga )
if ( riga )
delete riga;
riga = new TRiga;
riga->load( ss.row( r ) );
}
if ( key == K_CTRL + K_TAB ) // Lascio una riga nello sheet
@ -123,20 +165,28 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key )
// app( ).edit_mask( ).field( F_MEMORIGA ).autosave( &rdoc );
// rdoc.write( );
}
if ( key == K_INS ) // Inserimento
if ( key == K_INS ) // Inserimento
{
TTable tabtr( "%TRI" );
TMask & emask = app().edit_mask();
/*
TTable tabtr( "%TRI" );
tabtr.zero( );
tabtr.put( "CODTAB", app( ).edit_mask( ).get( F_LBTIPORIGA ) );
tabtr.read( );
*/
TToken_string& tsr = ss.row( r );
tsr.add( app( ).edit_mask( ).get( F_ANNO ), FS_ANNO - 101 );
tsr.add( app( ).edit_mask( ).get( F_PROVV ), FS_PROVV - 101 );
tsr.add( app( ).edit_mask( ).get( F_NDOC ), FS_NDOC - 101 );
tsr.add( app( ).edit_mask( ).get( F_CODNUM ), FS_CODNUM - 101 );
tsr.add( app( ).edit_mask( ).get( F_LBTIPORIGA ), FS_TIPORIGA - 101 );
// tsr.add( app( ).edit_mask( ).get( F_PROFILO ), FS_PROFRIGA - 101 );
tsr.add( tabtr.get( "S4" ), FS_PROFRIGA - 101 );
/*
tsr.add(emask.get( F_ANNO ), FR_ANNO - 101 );
tsr.add(emask.get( F_PROVV ), FR_PROVV - 101 );
tsr.add(emask.get( F_NDOC ), FR_NDOC - 101 );
tsr.add(emask.get( F_CODNUM ), FR_CODNUM - 101 );
*/
tsr.add(emask.get( F_LBTIPORIGA ), FR_TIPORIGA - 101 );
tsr.add("", FR_STATORIGA - 101 );
/*
tsr.add( tabtr.get( "S4" ), FR_PROFRIGA - 101 );
*/
if ( riga )
delete riga;
riga = new TRiga;
@ -146,6 +196,8 @@ bool TMotore_application::ss_handler( TSheet_field& ss, int r, KEY key )
if ( key == K_CTRL + K_INS ) // Dopo inserimento
{
riga->configura_sheet( ss, r );
ss.force_update();
ss.select(r);
app( ).curr_mask( ).send_key( K_ROWEDIT, F_SHEET );
return TRUE;
}
@ -242,7 +294,7 @@ bool TMotore_application::val_handler( TMask_field& f, KEY key )
// m.set( F_CAMBIO, "" );
// m.set( F_DATACAMBIO, "" );
app( ).clifo( ).imposta_valuta( ( TVariable_mask& ) m );
app( ).clifo( ).imposta_valuta( m );
return TRUE;
}
@ -286,15 +338,15 @@ bool TMotore_application::occas_handler( TMask_field& f, KEY key )
bool TMotore_application::tip_handler( TMask_field& f, KEY key )
{
TMask& m = f.mask( );
if ( key == K_TAB && m.is_running( ) )
if ( key == K_TAB && m.is_running( ) && m.get(F_TIPODOC).not_empty())
{
const TString16 value( m.get( F_TIPODOC ) );
if ( value.blank( ) )
{
// const TString16 value( m.get( F_TIPODOC ) );
// if (value.blank())
// {
// Pulisce il profilo
m.set( F_PROFILO, "" );
return TRUE;
}
// m.set( F_PROFILO, "" );
// return TRUE;
// }
TString tipi_consentiti( m.get( F_TIPIDOCS ) );
TString16 tipo( f.get( ) );
tipo.trim( );
@ -315,12 +367,6 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key )
f.set( "" );
return FALSE;
}
TTable tabtip( "%TIP" );
tabtip.zero( );
tabtip.put( "CODTAB", tipo );
tabtip.read( );
m.set( F_DESTIPODOC, tabtip.get( "S0" ) );
m.set( F_PROFILO, tabtip.get( "S4" ) );
}
if ( key == K_ENTER && m.is_running( ) )
{ TString tipo( f.get( ) );
@ -348,11 +394,12 @@ bool TMotore_application::ndoc_handler( TMask_field& f, KEY key )
if ( doc.read( ) == NOERR )
{
m.set( F_TIPODOC, doc.get( "TIPODOC" ) );
m.send_key(K_TAB, F_TIPODOC);
m.set( F_STATO, doc.get( "STATO" ) );
TTable tabtip( "%TIP" );
tabtip.put( "CODTAB", doc.get( "TIPODOC" ) );
tabtip.read( );
m.set( F_PROFILO, tabtip.get( "S4" ) );
// TTable tabtip( "%TIP" );
// tabtip.put( "CODTAB", doc.get( "TIPODOC" ) );
// tabtip.read( );
// m.set( F_PROFILO, tabtip.get( "S4" ) );
m.stop_run( K_AUTO_ENTER );
}
}
@ -400,7 +447,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( ( TVariable_mask& ) m );
app( ).clifo( ).update_mask( m );
if( f.mask( ).id2pos( F_OCCASEDIT ) > 0 )
{
if ( app( ).clifo( ).occasionale( ) && app( ).clifo( ).occas_mask( ).get( O_CODICE ).empty( ) )
@ -413,7 +460,7 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
void TMotore_application::carica_piedi( )
{
TToken_string s( pro( ).get( "PROGPIEDE", "MAIN" ) );
TToken_string s( pro( ).get( "PROGPIEDE", "MAIN" ) ); // prof
TString s1 = s.get( );
TTable ppd( "PPD" );
while( !s1.blank( ) )
@ -456,26 +503,30 @@ bool TMotore_application::changing_mask( int mode )
void TMotore_application::configura_sheet( TSheet_field& sheet, TConfig& config )
{
int marker[MAX_COLUMNS + 1];
TBit_array to_delete(MAX_COLUMNS);
to_delete.set();
int ncols = config.get_int( "NCOLS", "SHEET" );
for ( int i = 1; i <= MAX_COLUMNS; i ++ ) marker[ i ] = 0;
for ( i = 1; i <= ncols; i ++ )
for ( int i = 1; i <= ncols; i ++ )
{
TString col;
col.format( "%d", i );
TToken_string sheet_col( config.get( col, "SHEET" ) );
const TString descr( sheet_col.get( 1 ) );
if ( ! descr.blank( ) )
sheet.set_column_header( i, descr );
TString size( sheet_col.get( 2 ) );
if ( ! size.blank( ) )
sheet.set_column_width( i, sheet_col.get_int( 2 ) );
int coltomove = sheet_col.get_int( 0 ) - 1;
marker[coltomove] = 1;
// sheet.move_column( coltomove, i );
const int field_id = sheet_col.get_int(0);
const int coltomove = field_id - FIRST_FIELD;
to_delete.reset(coltomove);
const TString descr(sheet_col.get( 1 ));
if (descr.not_empty() )
sheet.set_column_header( field_id, descr);
const int size( sheet_col.get_int(2));
if (size != 0)
sheet.set_column_width( field_id, size);
}
for ( i = 1; i <= MAX_COLUMNS; i ++ )
if( !marker[ i ] ) sheet.delete_column( i );
for ( i = MAX_COLUMNS - 1; i >= 0; i-- )
if( to_delete[i] ) sheet.delete_column( i + FIRST_FIELD);
}
void TMotore_application::get_edit_mask( const char * profilo )
@ -484,7 +535,6 @@ void TMotore_application::get_edit_mask( const char * profilo )
// query_mask( ).enable( DLG_NEWREC );
fn.ext( "ini" );
fn.upper( );
if ( _pro )
{
if ( ( *_proname ) == fn )
@ -494,79 +544,84 @@ void TMotore_application::get_edit_mask( const char * profilo )
_pro = new TConfig( fn );
_proname = new TFilename( fn );
_proname->upper( );
if ( _msk1 ) delete _msk1;
_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 ) );
TVariable_mask * _msk1 = (TVariable_mask *) _doc_masks.objptr(_tipodoc);
const bool newmask = _msk1 == NULL;
if (newmask)
{
_msk1 = new TVariable_mask( pro( ).get( "MSKFILE", "MAIN" ) ); // prof
_doc_masks.add(_tipodoc, _msk1);
}
_sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET );
sheet( ).set_notify( ss_handler );
TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) );
TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof
app( ).tipocf( tipocf[ 0 ] );
configura_sheet( *_sheet, *_pro );
TList_field& listbox = ( TList_field& ) _msk1->field( F_LBTIPORIGA );
const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" );
TTable tabtr( "%TRI" );
TToken_string keys( "" ), descrs( "" );
for ( int i = 1; i <= numtr; i ++ )
{
TString chiave;
TToken_string item;
chiave.format( "%d", i );
tabtr.zero( );
TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) );
tabtr.put( "CODTAB", tiporiga );
if ( tabtr.read( ) == NOERR )
if (newmask)
{
TList_field& listbox = ( TList_field& ) _msk1->field( F_LBTIPORIGA );
const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); //prof
TTable tabtr( "%TRI" );
TToken_string keys( "" ), descrs( "" );
for ( int i = 1; i <= numtr; i ++ )
{
keys.add( tabtr.get( "CODTAB" ) );
descrs.add( tabtr.get( "S0" ) );
TString chiave;
TToken_string item;
chiave.format( "%d", i );
tabtr.zero( );
TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); // pro
tabtr.put( "CODTAB", tiporiga );
if ( tabtr.read( ) == NOERR )
{
keys.add( tabtr.get( "CODTAB" ) );
descrs.add( tabtr.get( "S0" ) );
}
else
yesnofatal_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga );
}
else
{
yesnofatal_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga );
listbox.replace_items( keys, descrs );
configura_sheet( *_sheet, *_pro );
((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof
for ( i = 1; i <= numhandler; i ++ )
{
TString chiave;
chiave.format( "%d", i );
TToken_string riga = pro( ).get( chiave, "HANDLERS" );
user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) );
}
}
listbox.replace_items( keys, descrs );
((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" );
for ( i = 1; i <= numhandler; i ++ )
{
TString chiave;
chiave.format( "%d", i );
TToken_string riga = pro( ).get( chiave, "HANDLERS" );
user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) );
}
// _msk1->set( F_MEMORIGA, "Riga1" );
}
TMask* TMotore_application::get_mask( int mode )
{
TString profilo( query_mask( ).get( F_PROFILO ) );
{
switch ( mode )
{
case MODE_INS:
case MODE_MOD:
if( !_msk )
delete _msk;
get_edit_mask( profilo );
if ( edit_mask( ).id2pos( F_OCCASEDIT ) > 0 )
edit_mask( ).set_handler( F_OCCASEDIT, occas_handler );
if ( edit_mask( ).id2pos( F_CODVAL ) > 0 )
edit_mask( ).set_handler( F_CODVAL, val_handler );
edit_mask( ).set_handler( F_CODCF, clifo_handler );
edit_mask( ).set_handler( F_CODPAG, condpag_hndl );
edit_mask( ).set_handler( F_DATAINSC, condpag_hndl );
{
_profilo = _msk->get( F_PROFILO );
_codnum = _msk->get( F_CODNUM );
_tipodoc = _msk->get( F_TIPODOC );
_anno = _msk->get_int(F_ANNO);
_tiponum = _msk->get(F_PROVV);
_numdoc = _msk->get_long(F_NDOC);
get_edit_mask( _profilo );
TMask & emask = edit_mask();
if (emask.id2pos( F_OCCASEDIT ) > 0 )
emask.set_handler( F_OCCASEDIT, occas_handler );
if ( emask.id2pos( F_CODVAL ) > 0 )
emask.set_handler( F_CODVAL, val_handler );
emask.set_handler( F_CODCF, clifo_handler );
emask.set_handler( F_CODPAG, condpag_hndl );
emask.set_handler( F_DATAINSC, condpag_hndl );
// edit_mask( ).set_handler( 99, elabora_handler );
return( _msk1 );
break;
return( &emask );
break;
}
default:
if( !_msk )
{
_msk = new TMask( "ve1000a" );
}
if( !_msk1 )
{
delete _msk1;
}
if( _msk == NULL)
_msk = new TMask( "ve1000a" );
return _msk;
break;
}
@ -591,8 +646,8 @@ const char* TMotore_application::get_next_key( )
TToken_string key;
TMask& m = curr_mask( );
TString value = m.get( F_CODNUM );
if ( value.blank( ) )
const TString value = m.get( F_CODNUM );
if (value.empty())
return NULL;
TTable tabnum( "NUM" );
tabnum.zero( );
@ -634,28 +689,28 @@ int TMotore_application::read( TMask& m )
int err = TRelation_application::read( m );
if ( err == NOERR )
{
edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) );
edit_mask( ).set( F_DESTIPODOC, query_mask( ).get( F_DESTIPODOC ) );
// edit_mask( ).set( F_DESNUM, query_mask( ).get( F_DESNUM ) );
// 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( ( TVariable_mask& ) m, TRUE );
TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC );
TRectype r = rdoc.curr( );
TRectype& trec = get_relation( )->curr( );
TRectype r(rdoc.curr( ));
r.zero( );
r.put( "CODNUM", trec.get( "CODNUM" ) );
r.put( "PROVV", trec.get( "PROVV" ) );
r.put( "ANNO", trec.get( "ANNO" ) );
r.put( "NDOC", trec.get_long( "NDOC" ) );
r.put( "CODNUM", _codnum);
r.put( "PROVV", _tiponum);
r.put( "ANNO", _anno);
r.put( "NDOC", _numdoc);
_righe_rec->read( r );
TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET );
f.destroy( );
int last = _righe_rec->last_row( );
TRiga currentrow;
for ( int i = 1; i <= last; i ++ )
{
TToken_string& srow = f.row( i - 1 );
TRectype& rec = _righe_rec->row( i, FALSE );
TRiga currentrow;
currentrow.load( rec );
currentrow.save( srow );
currentrow.configura_sheet( f, i - 1 );
@ -676,16 +731,12 @@ bool TMotore_application::check_key( TLocalisamfile& rdoc, TString16 codnum, boo
int TMotore_application::write( const TMask& m )
{
int err;
if ( esegui_procedura( OP_NUOVO ) != NOERR )
int err = NOERR;
if (esegui_procedura(OP_NUOVO) != NOERR )
return FALSE;
m.field( F_STATO ).set( _pro->get( "STATOFINALE", "INSERIMENTO" ) );
err = NOERR; // avanza_numero( m.get_bool( F_PROVV ) );
if ( err == NOERR )
{
if ( m.id2pos( F_OCCASEDIT) > 0 )
err = app( ).clifo( ).write_occas( );
}
m.field(F_STATO).set( _pro->get( "STATOFINALE", "INSERIMENTO" ) );
if ( m.id2pos( F_OCCASEDIT) > 0 )
err = app( ).clifo( ).write_occas( );
if ( err == NOERR )
{
err = TRelation_application::write( m );
@ -693,8 +744,13 @@ int TMotore_application::write( const TMask& m )
{
TSheet_field& f = ss( );
_righe_rec->destroy_rows( );
if ( m.insert_mode( ) )
_righe_rec->renum_key( "NRIGA", 1 );
TRectype * rec = new TRectype(_righe_rec->key());
TRelation * rel = get_relation();
rec->put("CODNUM", rel->lfile().get("CODNUM"));
rec->put("ANNO", rel->lfile().get("ANNO"));
rec->put("PROVV", rel->lfile().get("PROVV"));
rec->put("NDOC", rel->lfile().get("NDOC"));
_righe_rec->set_key(rec);
for ( int i = 0; i < f.items( ); i ++ )
{
TToken_string& t = f.row( i );
@ -712,10 +768,8 @@ int TMotore_application::rewrite( const TMask& m )
int err = NOERR;
if ( ! valida_operazione( OP_MODIFICA ) )
return FALSE;
if ( err == NOERR )
{
if ( m.id2pos( F_OCCASEDIT) > 0 )
err = app( ).clifo( ).write_occas( );
}
if ( err == NOERR )
{
err = TRelation_application::rewrite( m );
@ -723,8 +777,13 @@ int TMotore_application::rewrite( const TMask& m )
{
TSheet_field& f = ss( );
_righe_rec->destroy_rows( );
if ( m.insert_mode( ) )
_righe_rec->renum_key( "NRIGA", 1 );
TRectype * rec = new TRectype(_righe_rec->key());
TRelation * rel = get_relation();
rec->put("CODNUM", rel->lfile().get("CODNUM"));
rec->put("ANNO", rel->lfile().get("ANNO"));
rec->put("PROVV", rel->lfile().get("PROVV"));
rec->put("NDOC", rel->lfile().get("NDOC"));
_righe_rec->set_key(rec);
for ( int i = 0; i < f.items( ); i ++ )
{
TToken_string& t = f.row( i );
@ -830,6 +889,13 @@ void TMotore_application::store_riga( TSheet_field& f, int numrig, TRectype& r )
bool TMotore_application::user_create( )
{
// Metto in relazione testata e righe
_rel = new TRelation( LF_DOC ); // babbalone #5 creava file dopo maschera che la conteneva
rel( ).add( LF_RIGHEDOC,"CODNUM=CODNUM|ANNO=ANNO|PROVV=PROVV|NDOC=NDOC" );
// Inizializzo il Record_array
_righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 );
TConfig ditta( CONFIG_DITTA );
// Controllo se sono cambiate le impostazioni delle vendite.
@ -843,36 +909,17 @@ bool TMotore_application::user_create( )
}
_clifor = new TCliForVendite( );
azzera_piedi( );
_msk = new TMask( "VE1000A" );
_msk = new TMask( "ve1000a" );
query_mask( ).set_handler( F_NDOC, ndoc_handler );
query_mask( ).set_handler( F_CODNUM, num_handler );
query_mask( ).set_handler( F_TIPODOC, tip_handler );
TConfig utente( CONFIG_USER );
TString16 codnum( utente.get( "CODNUM", "ve" ) );
if ( !codnum.blank( ) )
{
query_mask( ).set( F_CODNUM, codnum );
query_mask( ).set( F_DESNUM, utente.get( "DESNUM", "ve" ) );
// }
// TString16 tipodoc( utente.get( "TIPODOC", "ve" ) );
// if ( !tipodoc.blank( ) )
// {
TString16 profilo( utente.get( "PROFILO", "ve" ) );
query_mask( ).set( F_TIPODOC, utente.get( "TIPODOC", "ve" ) );
query_mask( ).set( F_DESTIPODOC, utente.get( "DESTIPODOC", "ve" ) );
query_mask( ).set( F_PROFILO, profilo );
}
_codnum = utente.get( "CODNUM", "ve" );
if (!_codnum.blank( ))
_tipodoc = utente.get( "TIPODOC", "ve" );
// La maschera di inserimento/modifica per ora non la so!
// Viene letta dal profilo non appena trovato il record
_msk1 = NULL;
// Metto in relazione testata e righe
_rel = new TRelation( LF_DOC );
rel( ).add( LF_RIGHEDOC,"CODNUM=CODNUM|ANNO=ANNO|PROVV=PROVV|NDOC=NDOC" );
// Inizializzo il Record_array
_righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 );
return TRUE;
}
@ -880,16 +927,15 @@ bool TMotore_application::user_destroy( )
{
// Registro l'ultimo tipo documento e l'ultima numerazione
TConfig utente( CONFIG_USER );
utente.set( "CODNUM", query_mask( ).get( F_CODNUM ), "ve" );
utente.set( "TIPODOC", query_mask( ).get( F_TIPODOC ), "ve" );
utente.set( "DESNUM", query_mask( ).get( F_DESNUM ), "ve" );
utente.set( "DESTIPODOC", query_mask( ).get( F_DESTIPODOC ), "ve" );
utente.set( "PROFILO", query_mask( ).get( F_PROFILO ), "ve" );
// Se è ancora allocata, distruggo la maschera di modifica
if ( _msk1 ) delete _msk1;
utente.set( "CODNUM", _codnum, "ve" );
utente.set( "TIPODOC", _tipodoc, "ve" );
// utente.set( "DESNUM", query_mask( ).get( F_DESNUM ), "ve" );
// utente.set( "DESTIPODOC", query_mask( ).get( F_DESTIPODOC ), "ve" );
// utente.set( "PROFILO", _profilo, "ve" );
// Distruggo la maschera di modifica
delete _msk;
if ( _msk != NULL )
delete _msk;
// Distruggo la relazione
delete _rel;

View File

@ -76,8 +76,8 @@
#include "veuml1.h"
#endif
#ifndef __VEUML2_H
#include "veuml2.h"
#ifndef __VERIG_H
#include "verig.h"
#endif
#ifndef __SHEET_H
@ -124,6 +124,26 @@
#include "sconti.h"
#endif
class TTipo_documento : public TObject
{
TString16 _tipodoc;
TString16 _profile;
TFilename _profile_file;
TMask * _mask;
protected:
const char * profile_name() {return _profile; }
const char * profile_file() {return _profile_file; }
public:
const char * tipodoc() { return _tipodoc;}
TConfig * create_profile() { return new TConfig(_profile_file);}
TMask & mask() { return *_mask;}
TTipo_documento(const char * tipodoc);
virtual ~TTipo_documento();
};
// Definizione della classe dell'applicazione motore
class TMotore_application : public TRelation_application
{
@ -143,7 +163,7 @@ class TMotore_application : public TRelation_application
TMask* _msk;
// Puntatore alla maschera di modifica/inserimento ( dipende dal profilo )
TVariable_mask* _msk1;
// TVariable_mask* _msk1;
// puntatore alla relazione
TRelation* _rel;
@ -157,12 +177,28 @@ class TMotore_application : public TRelation_application
// Indica se il documento ha come soggetto un <C>liente o un <F>ornitore
char _tipocf;
TString16 _profilo;
TString16 _codnum;
TString16 _tipodoc;
int _anno;
TString16 _tiponum;
long _numdoc;
// Array di maschere documento
TAssoc_array _doc_masks;
// Array di maschere righe
TAssoc_array _row_masks;
// Ridefinizione dei metodi virtuali
virtual bool user_create( );
virtual bool user_destroy( );
virtual TMask* get_mask( int mode );
virtual bool changing_mask( int mode );
virtual TRelation* get_relation( ) const { return _rel;}
virtual void init_query_mode(TMask& m);
virtual void init_insert_mode( TMask& m );
virtual int read( TMask& m );
virtual bool remove( void );
@ -245,7 +281,7 @@ public:
TConfig& pro( ) { CHECK( _pro, "Profilo del documento nullo!" ); return *_pro; }
TFilename& proname( ) { CHECK( _proname, "Nome del profilo nullo!" ); return *_proname; }
TMask& query_mask( ) { CHECK( _msk, "Maschera di ricerca nulla!" ); return *_msk; }
TMask& edit_mask( ) { CHECK( _msk1, "Maschera di modifica nulla!" ); return *_msk1; }
TMask& edit_mask( ) { return (TMask &) _doc_masks[_tipodoc]; }
TRelation& rel( ) { CHECK( _rel, "Relazione nulla!" ); return *_rel; }
TSheet_field& sheet( ) { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; }
TCliForVendite& clifo( ) { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; }

View File

@ -1356,6 +1356,7 @@ void TMask_generator::genera( const TString& profilo )
// dal motore, nascondo e adatto le colonne.
// Generazione maschera dello sheet
/*
_m->_out << "PA \"Pagina 1\" 8 5 64 13\n";
id( 101 );
@ -1364,7 +1365,9 @@ void TMask_generator::genera( const TString& profilo )
_m->end( );
_m->end( );
_m->endmask( );
*/
delete _m;
fcopy("verig00.msk", _mskname, TRUE);
delete _pro;
}

View File

@ -4,18 +4,25 @@
#include "ve2100.h"
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
#define REVIVE(x) { _msk->field(x).set_key(1); _msk->enable(x); }
static void key_disable(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.disable(id);
}
static void key_enable(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.enable(id);
}
class TTabelle_sconti: public TRelation_application {
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
char _sconti; // carattere che indica il tipo di tabella
bool _catven; // abilitazione della gestione della categoria di vendita
TString _gessco; // indicatore di abilitazione degli sconti incondizionati
char _sconti; // carattere che indica il tipo di tabella
bool _catven; // abilitazione della gestione della categoria di vendita
TString _gessco; // indicatore di abilitazione degli sconti incondizionati
virtual bool user_create();
virtual bool user_destroy();
@ -31,56 +38,56 @@ public:
bool TTabelle_sconti::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
int i; // indice di ciclo
_sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella
if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando
else {
TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella
if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera
}
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta
switch (_sconti) {
case 'D': // sconti documento
_msk= new TMask("VE2100D"); // apre la maschera relativa
set_search_field(F_D_CODCAT); // setta il campo di ricerca
gotcha= TRUE;
break;
case 'R': // sconti di riga
_msk= new TMask("VE2100R"); // apre la maschera relativa
set_search_field(F_R_RICERCA); // setta il campo di ricerca
_catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita
if (!_catven) KILL(F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo
gotcha= TRUE;
break;
case 'I': // sconti incondizionati
_gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
short sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
int i; // indice di ciclo
_sconti= '*'; // inizializzazione dell'indicatore del tipo di tabella
if (argc()>2) _sconti= toupper((argv(2))[0]); // se c'è, prende il tipo di tabella dalla linea di comando
else {
TMask choose("VE2100"); // istanzia la maschera di scelta del tipo di tabella
if (choose.run() == K_ENTER) _sconti= toupper((choose.get(F_TIPOSC))[0]); // prende il tipo di tabella dalla maschera
}
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione di ditta
switch (_sconti) {
case 'D': // sconti documento
_msk= new TMask("VE2100D"); // apre la maschera relativa
set_search_field(F_D_CODCAT); // setta il campo di ricerca
gotcha= TRUE;
break;
case 'R': // sconti di riga
_msk= new TMask("VE2100R"); // apre la maschera relativa
set_search_field(F_R_RICERCA); // setta il campo di ricerca
_catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita
if (!_catven) key_disable(*_msk, F_R_CODCAT); // se non è abilitato, viene disabilitato anche il campo
gotcha= TRUE;
break;
case 'I': // sconti incondizionati
_gessco= prassid.get("GESSCO"); // legge lo stato del parametro di abilitazione degli sconti
if (_gessco=="A") {
_msk= new TMask("VE2100I"); // apre la maschera relativa
set_search_field(F_I_RICERCA); // setta il campo di ricerca
sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente
sci_k_id[1]= F_I_SCCLIENTI;
sci_k_id[2]= F_I_ZONE;
sci_k_id[3]= F_I_CONDPAG;
for (i=0; i<4; i++) {
if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato...
REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera...
gotcha= TRUE; // ...e viene settato il flag di ok
} else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera
}
_catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita
if (!_catven) KILL(sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo
if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
} else error_box("Gli sconti incondizionati non sono abilitati nella configurazione");
break;
default: // messaggio di errore se si indica una tabella non valida
error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file)
return (gotcha);
_msk= new TMask("VE2100I"); // apre la maschera relativa
set_search_field(F_I_RICERCA); // setta il campo di ricerca
sci_k_id[0]= F_I_CATVEN; // inizializza l'array dei campi da disabilitare condizionalmente
sci_k_id[1]= F_I_SCCLIENTI;
sci_k_id[2]= F_I_ZONE;
sci_k_id[3]= F_I_CONDPAG;
for (i=0; i<4; i++) {
if (prassid.get_bool("SCOKEY", NULL, i+1)) { // se nel file di config. il campo è abilitato...
key_enable(*_msk, sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera...
gotcha= TRUE; // ...e viene settato il flag di ok
} else key_disable(*_msk, sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera
}
_catven= prassid.get_bool("GESLISCV"); // legge il parametro di abilitazione delle categorie di vendita
if (!_catven) key_disable(*_msk, sci_k_id[1]); // se non è abilitato, viene disabilitato anche il campo
if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
} else error_box("Gli sconti incondizionati non sono abilitati nella configurazione");
break;
default: // messaggio di errore se si indica una tabella non valida
error_box("Indicare la tabella sulla linea di comando (D, R o I) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) _rel= new TRelation(LF_SCONTI); // se è stata selezionata una tabella, apre la relazione (un unico file)
return (gotcha);
}
bool TTabelle_sconti::user_destroy() {

View File

@ -7,6 +7,12 @@ ENDPAGE
PAGE "Archivio sconti di riga " 11 60 14
GROUPBOX DLG_NULL 75 10
BEGIN
PROMPT 0 0 ""
FLAG "R"
END
STRING F_R_RICERCA 1
BEGIN
PROMPT 100 100 ""
@ -27,18 +33,19 @@ BEGIN
OUTPUT F_R_SCONTO SCONTO
END
LISTA F_R_TIPO 1
LIST F_R_TIPO 1
BEGIN
PROMPT 100 100 ""
FIELD LF_SCONTI->TIPO
FLAG "H"
FIELD TIPO
FLAGS "D"
KEY 1
ITEM "R|Sconti di riga"
END
STRING F_R_CODCAT 2
BEGIN
PROMPT 2 2 "Cat. vendita "
FIELD LF_SCONTI->CODCAT
FIELD CODCAT
FLAG "U"
KEY 1
USE %CVE
@ -47,7 +54,8 @@ BEGIN
DISPLAY "Descrizione@50" S0
OUTPUT F_R_CODCAT CODTAB
OUTPUT F_R_DESCAT S0
VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART
CHECKTYPE REQUIRED
// VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART
END
STRING F_R_DESCAT 50
@ -59,7 +67,7 @@ END
STRING F_R_CODART 20
BEGIN
PROMPT 2 4 "Cod. articolo "
FIELD LF_SCONTI->CODART
FIELD CODART
FLAG "U"
KEY 1
USE LF_ANAGR
@ -68,13 +76,16 @@ BEGIN
DISPLAY "Descrizione@50" DESCR
OUTPUT F_R_CODART CODART
OUTPUT F_R_DESART DESCR
VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART
CHECKTYPE SEARCH
VALIDATE REQIF_FUNC 1 F_R_UM
WARNING "Il codice articolo e' necessario se si specifica l'unita' di misura"
// VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART
END
STRING F_R_UM 2
BEGIN
PROMPT 50 4 "U.M. "
FIELD LF_SCONTI->UM
FIELD UM
FLAG "U"
KEY 1
USE LF_UMART KEY 2
@ -84,7 +95,7 @@ BEGIN
DISPLAY "U.M." UM
DISPLAY "Desccrizione@50" %UMS->S0
OUTPUT F_R_UM UM
VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART
// VALIDATE AUTOEXIT_FUNC 2 F_R_CODCAT F_R_CODART
END
STRING F_R_DESART 50
@ -93,16 +104,11 @@ BEGIN
FLAG "D"
END
GROUPBOX DLG_NULL 75 10
BEGIN
PROMPT 0 0 ""
FLAG "R"
END
STRING F_R_SCONTO 25
BEGIN
PROMPT 2 12 "Sconto "
FIELD LF_SCONTI->SCONTO
FIELD SCONTO
END
ENDPAGE

View File

@ -11,39 +11,47 @@
#include "veconf.h"
#define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe
#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
static void key_hide(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.hide(id);
}
static void key_disable(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.disable(id);
}
class TCondizioni_vendita: public TRelation_application {
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
TString16 _condven; // stringa che indica il tipo di archivio
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
TString16 _condven; // stringa che indica il tipo di archivio
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
bool _codlis_catven; // booleano di abilitazione della categoria di vendita nella chiave dei listini
bool _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF
bool _codcon_codcf; // booleano di abilitazioni dei campi TIPOCF e CODCF
bool _gest_val, _gest_um, _gest_sca, _gest_so; // booleani per l'abilitazione di valute, unità di misura, scaglioni e sconti/omaggi
virtual bool user_create();
virtual bool user_destroy();
virtual TMask *get_mask(int) { return _msk; }
virtual bool changing_mask(int) { return FALSE; }
virtual TRelation *get_relation() const { return _rel; }
virtual bool user_create();
virtual bool user_destroy();
virtual TMask *get_mask(int) { return _msk; }
virtual bool changing_mask(int) { return FALSE; }
virtual TRelation *get_relation() const { return _rel; }
static bool handle_mask(TMask &, KEY); // handler custom della maschera (per il tasto di aggancio alle righe)
static bool handle_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio)
static bool handle_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo)
static bool handle_mask(TMask &, KEY); // handler custom della maschera (per il tasto di aggancio alle righe)
static bool handle_datacam(TMask_field &, KEY); // handler del campo DATACAM (data cambio)
static bool handle_valfin(TMask_field &, KEY); // handler del campo VALFIN (data fine validità)
static bool handle_codsucc(TMask_field &, KEY); // handler del campo CODSUCC (codice successivo)
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual bool remove(); // metodo usato per cancellare il record sul file
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual bool remove(); // metodo usato per cancellare il record sul file
public:
TCondizioni_vendita() {}
virtual ~TCondizioni_vendita() {}
TCondizioni_vendita() {}
virtual ~TCondizioni_vendita() {}
};
@ -55,103 +63,103 @@ TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe
bool TCondizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else {
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
}
_condven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2200X");
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_condven[0]) {
case 'L': { // listini
if (!(prassid.get_bool("GES", NULL, A_LISTINI))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// eliminazione campi di altri archivi
DESTROY(F_C_COD);
DESTROY(F_O_COD);
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_OBBLIG);
DESTROY(F_C_DESCF);
set_search_field(F_L_COD); // impostazione del campo di ricerca
_msk->set_handler(F_L_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
_codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita
if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita
_gest_um= prassid.get_bool("GESUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE;
}
break;
}
case 'C': // contratti
if (!(prassid.get_bool("GES", NULL, A_CONTRATTI))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// settaggio dei campi da eliminare
DESTROY(F_L_COD);
DESTROY(F_O_COD);
DESTROY(F_L_CATVEN);
DESTROY(F_L_DESVEN);
DESTROY(F_L_CODSUCC);
DESTROY(F_L_DESSUCC);
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF
if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config.
KILL(F_C_TIPOCF);
KILL(F_C_CODCF);
}
set_search_field(F_C_COD); // impostazione del campo di ricerca
_gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE;
}
break;
case 'O': // offerte
if (!(prassid.get_bool("GES", NULL, A_OFFERTE))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// settaggio dei campi da eliminare
DESTROY(F_L_COD);
DESTROY(F_C_COD);
DESTROY(F_L_CATVEN);
DESTROY(F_C_TIPOCF);
DESTROY(F_C_CODCF);
DESTROY(F_C_DESCF);
DESTROY(F_L_DESVEN);
DESTROY(F_C_OBBLIG);
DESTROY(F_L_CODSUCC);
DESTROY(F_L_DESSUCC);
set_search_field(F_O_COD); // impostazione del campo di ricerca
_gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE;
}
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
_msk->set_handler(handle_mask); // imposta l'handler generale della maschera
_msk->set_handler(F_DATACAM, handle_datacam); // imposta l'handler per il campo della data del cambio
_msk->set_handler(F_VALFIN, handle_valfin); // imposta l'handler per il campo di fine validità
if (!_gest_um) _msk->disable(F_GESTUM); // disabilita condizionalmente il booleano di gestione delle unità di misura
if (!_gest_sca) _msk->disable(F_GESTSCAGL); // disabilita condizionalmente il booleano di gestione degli scaglioni
if (!_gest_so) _msk->disable(F_GESTSCO); // disabilita condizionalmente il booleano di gestione degli sconti/omaggi
_gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione delle gastione delle valute
if (!_gest_val) { // se la gestione delle valute è disabilitata i campi di gestione vengono disabilitati
_msk->disable(F_CODVAL);
_msk->disable(F_CAMBIO);
_msk->disable(F_DATACAM);
}
}
return (gotcha);
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else {
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
}
_condven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2200X");
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_condven[0]) {
case 'L': { // listini
if (!(prassid.get_bool("GES", NULL, A_LISTINI))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// eliminazione campi di altri archivi
key_hide(*_msk, F_C_COD);
key_hide(*_msk, F_O_COD);
key_hide(*_msk, F_C_TIPOCF);
key_hide(*_msk, F_C_CODCF);
key_hide(*_msk, F_C_OBBLIG);
key_hide(*_msk, F_C_DESCF);
set_search_field(F_L_COD); // impostazione del campo di ricerca
_msk->set_handler(F_L_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
_codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione delle categoria di vendita
if (!_codlis_catven) key_disable(*_msk, F_L_CATVEN); // disabilita condizionalmente le categorie di vendita
_gest_um= prassid.get_bool("GESUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE;
}
break;
}
case 'C': // contratti
if (!(prassid.get_bool("GES", NULL, A_CONTRATTI))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// settaggio dei campi da eliminare
key_hide(*_msk, F_L_COD);
key_hide(*_msk, F_O_COD);
key_hide(*_msk, F_L_CATVEN);
key_hide(*_msk, F_L_DESVEN);
key_hide(*_msk, F_L_CODSUCC);
key_hide(*_msk, F_L_DESSUCC);
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF
if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config.
key_disable(*_msk, F_C_TIPOCF);
key_disable(*_msk, F_C_CODCF);
}
set_search_field(F_C_COD); // impostazione del campo di ricerca
_gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE;
}
break;
case 'O': // offerte
if (!(prassid.get_bool("GES", NULL, A_OFFERTE))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio listini sia abilitato
else {
// settaggio dei campi da eliminare
key_hide(*_msk, F_L_COD);
key_hide(*_msk, F_C_COD);
key_hide(*_msk, F_L_CATVEN);
key_hide(*_msk, F_C_TIPOCF);
key_hide(*_msk, F_C_CODCF);
key_hide(*_msk, F_C_DESCF);
key_hide(*_msk, F_L_DESVEN);
key_hide(*_msk, F_C_OBBLIG);
key_hide(*_msk, F_L_CODSUCC);
key_hide(*_msk, F_L_DESSUCC);
set_search_field(F_O_COD); // impostazione del campo di ricerca
_gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
gotcha= TRUE;
}
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
_msk->set_handler(handle_mask); // imposta l'handler generale della maschera
_msk->set_handler(F_DATACAM, handle_datacam); // imposta l'handler per il campo della data del cambio
_msk->set_handler(F_VALFIN, handle_valfin); // imposta l'handler per il campo di fine validità
if (!_gest_um) _msk->disable(F_GESTUM); // disabilita condizionalmente il booleano di gestione delle unità di misura
if (!_gest_sca) _msk->disable(F_GESTSCAGL); // disabilita condizionalmente il booleano di gestione degli scaglioni
if (!_gest_so) _msk->disable(F_GESTSCO); // disabilita condizionalmente il booleano di gestione degli sconti/omaggi
_gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione delle gastione delle valute
if (!_gest_val) { // se la gestione delle valute è disabilitata i campi di gestione vengono disabilitati
_msk->disable(F_CODVAL);
_msk->disable(F_CAMBIO);
_msk->disable(F_DATACAM);
}
}
return (gotcha);
}
bool TCondizioni_vendita::user_destroy() {
@ -161,111 +169,111 @@ bool TCondizioni_vendita::user_destroy() {
}
bool TCondizioni_vendita::handle_mask(TMask &m, KEY k) {
if (k==K_F5) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing
TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio
bool &_codlis_catven= app()._codlis_catven; // prende il booleano di attivazione del campo CATVEN
TString appname(RCONDVEN_APP); // istanzia e inizializza la stringa con il nome dell'applicazione da lanciare
TString body; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera)
switch (_condven[0]) {
case 'L': // listini
body << F_R_L_RICERCA << "|"; // appende l'id del campo di ricerca
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_L_CATVEN << "=" << ((_codlis_catven)?(m.get(F_L_CATVEN)):("")) << "|"; // appende il filtro sulla categoria di vendita
body << F_R_L_COD << "=" << m.get(F_L_COD); // appende il filtro sul campo codice
break;
case 'C': // contratti
body << F_R_C_RICERCA << "|"; // appende l'id del campo di ricerca
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF) << "|"; // appende il filtro sul campo tipo cliente/fornitore
body << F_R_C_CODCF << "=" << m.get(F_C_CODCF) << "|"; // appende il filtro sul campo codice cliente/fornitore
body << F_R_C_COD << "=" << m.get(F_C_COD); // appende il filtro sul campo codice
break;
case 'O': // offerte
body << F_R_O_RICERCA << "|"; // appende l'id del campo di ricerca
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice
break;
}
appname << _condven; // aggiunge al lancio dell'applicazione la selezione del tipo di archivio
TMessage msg(cmd2name(appname), MSG_FS, (const char *)body); // istanzia il messaggio per l'applicazione
msg.send(); // invia il messaggio all'applicazione
TExternal_app ve2_2(appname); // istanzia l'applicazione esterna...
ve2_2.run(); // ...la lancia e rimane in attesa del suo termine
}
return TRUE;
if (k==K_F5) { // se viene premuto F5 o selezionato il tasto "Righe" viene lanciata l'applicazione di editing
TString &_condven= app()._condven; // prende l'indicatore del tipo di archivio
bool &_codlis_catven= app()._codlis_catven; // prende il booleano di attivazione del campo CATVEN
TString appname(RCONDVEN_APP); // istanzia e inizializza la stringa con il nome dell'applicazione da lanciare
TString body; // istanzia la stringa contenente il corpo del messaggio (lista di inizializzazione dei campi della maschera)
switch (_condven[0]) {
case 'L': // listini
body << F_R_L_RICERCA << "|"; // appende l'id del campo di ricerca
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_L_CATVEN << "=" << ((_codlis_catven)?(m.get(F_L_CATVEN)):("")) << "|"; // appende il filtro sulla categoria di vendita
body << F_R_L_COD << "=" << m.get(F_L_COD); // appende il filtro sul campo codice
break;
case 'C': // contratti
body << F_R_C_RICERCA << "|"; // appende l'id del campo di ricerca
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF) << "|"; // appende il filtro sul campo tipo cliente/fornitore
body << F_R_C_CODCF << "=" << m.get(F_C_CODCF) << "|"; // appende il filtro sul campo codice cliente/fornitore
body << F_R_C_COD << "=" << m.get(F_C_COD); // appende il filtro sul campo codice
break;
case 'O': // offerte
body << F_R_O_RICERCA << "|"; // appende l'id del campo di ricerca
body << F_R_TIPO << "=" << _condven << "|"; // appende il filtro sul tipo
body << F_R_O_COD << "=" << m.get(F_O_COD); // appende il filtro sul campo codice
break;
}
appname << _condven; // aggiunge al lancio dell'applicazione la selezione del tipo di archivio
TMessage msg(cmd2name(appname), MSG_FS, (const char *)body); // istanzia il messaggio per l'applicazione
msg.send(); // invia il messaggio all'applicazione
TExternal_app ve2_2(appname); // istanzia l'applicazione esterna...
ve2_2.run(); // ...la lancia e rimane in attesa del suo termine
}
return TRUE;
}
bool TCondizioni_vendita::handle_datacam(TMask_field &fld, KEY k) {
if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
TString datacam(fld.get()); // legge la data di cambio nel campo corrente
if (datacam.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString codval(m.get(F_CODVAL)); // prende il codice della valuta
if (codval.not_empty()) {
TTable cam("CAM"); // apre la tabella cambi
cam.put("CODTAB", codval << datacam); // riempie la chiave
if (cam.read() == NOERR) m.set(F_CAMBIO, cam.get("R10")); // se la lettura riesce il valore del cambio viene posto nel campo CAMBIO della maschera
}
}
}
return TRUE;
if (k==K_TAB) { // ad ogni perdita di fuoco viene tentato un accoppiamento tra valuta e data per ottenere il cambio preciso
TString datacam(fld.get()); // legge la data di cambio nel campo corrente
if (datacam.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString codval(m.get(F_CODVAL)); // prende il codice della valuta
if (codval.not_empty()) {
TTable cam("CAM"); // apre la tabella cambi
cam.put("CODTAB", codval << datacam); // riempie la chiave
if (cam.read() == NOERR) m.set(F_CAMBIO, cam.get("R10")); // se la lettura riesce il valore del cambio viene posto nel campo CAMBIO della maschera
}
}
}
return TRUE;
}
bool TCondizioni_vendita::handle_valfin(TMask_field &fld, KEY k) {
if (k==K_TAB) {
if (fld.get().not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
if (m.get(F_VALIN).not_empty()) {
TDate valfin(fld.get()); // prende la data di fine validità
TDate valin(m.get(F_VALIN)); // prende la data di inizio validità
if (valfin<valin) {
error_box("La data di inizio validità deve essere minore della data di fine");
return FALSE;
}
}
}
}
return TRUE;
if (k==K_TAB) {
if (fld.get().not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
if (m.get(F_VALIN).not_empty()) {
TDate valfin(fld.get()); // prende la data di fine validità
TDate valin(m.get(F_VALIN)); // prende la data di inizio validità
if (valfin<valin) {
error_box("La data di inizio validità deve essere minore della data di fine");
return FALSE;
}
}
}
}
return TRUE;
}
bool TCondizioni_vendita::handle_codsucc(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString &_condven= app()._condven; // prende il tipo di archivio dall'applicazione principale
TString codsucc(fld.get()); // prende il codice successivo dal campo corrente
if (codsucc.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString cod; // istanzia la stringa per il codice corrente
switch (_condven[0]) {
case 'L': cod= m.get(F_L_COD); break; // prende il codice listino corrente dal campo della maschera
case 'C': cod= m.get(F_C_COD); break; // prende il codice contratto dal campo della maschera
}
if (codsucc == cod) {
error_box("Il codice successivo deve essere diverso dal codice corrente");
return FALSE;
}
}
}
return TRUE;
if (k==K_TAB) {
TString &_condven= app()._condven; // prende il tipo di archivio dall'applicazione principale
TString codsucc(fld.get()); // prende il codice successivo dal campo corrente
if (codsucc.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString cod; // istanzia la stringa per il codice corrente
switch (_condven[0]) {
case 'L': cod= m.get(F_L_COD); break; // prende il codice listino corrente dal campo della maschera
case 'C': cod= m.get(F_C_COD); break; // prende il codice contratto dal campo della maschera
}
if (codsucc == cod) {
error_box("Il codice successivo deve essere diverso dal codice corrente");
return FALSE;
}
}
}
return TRUE;
}
int TCondizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
_rel->write(); // invoca la scrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
int TCondizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
if (_condven != "C") f.zero("TIPOCF"); // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
_rel->rewrite(); // invoca la riscrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
bool TCondizioni_vendita::remove() {
TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale
TLocalisamfile &condv= _rel->lfile(); // prende il file della testata dalla relazione principale
TLocalisamfile rcondv(LF_RCONDV); // apre il file delle righe per ottenenre il record corrente
TRectype delrec(rcondv.curr()); // istanzia il record basato sul file delle righe, da usare come campione
delrec.zero(); // svuota il record campione
@ -273,9 +281,9 @@ bool TCondizioni_vendita::remove() {
delrec.put("COD", condv.get("COD")); // setta il codice della testata
if ((_condven=="L") && _codlis_catven) delrec.put("CATVEN", condv.get("CATVEN")); // setta la categoria di vendita se è abilitata e siamo nei listini
if (_condven=="C") {
delrec.put("TIPOCF", condv.get("TIPOCF")); // setta i dati del cliente/fornitore se siamo nei contratti
delrec.put("CODCF", condv.get("CODCF"));
}
delrec.put("TIPOCF", condv.get("TIPOCF")); // setta i dati del cliente/fornitore se siamo nei contratti
delrec.put("CODCF", condv.get("CODCF"));
}
TRelation delrel(LF_RCONDV); // istanzia una relazione sulle righe
TCursor delcur(&delrel, "", 1, &delrec, &delrec); // istanzia il cursore di cancellazione sulla relazione delle righe
long n= delcur.items(); // legge il numero di elementi del cursore
@ -284,10 +292,10 @@ bool TCondizioni_vendita::remove() {
if (n==1) proceed= yesno_box("Esiste una riga collegata a questa testata: verrà anch'essa cancellata. Procedo?"); // viene richiesta conferma alla cancellazione della riga...
if (n>1) proceed= yesno_box("Esistono %ld righe collegate a questa testata: verranno anch'esse cancellate. Procedo?", n); // ...o delle righe
if (proceed) { // se si conferma le righe vengono cancellate
TLocalisamfile &delfile= delcur.file(); // prende riferimento al file delle righe dal cursore
for (delcur=0; delcur.pos()<n; ++delcur) delfile.remove(); // ciclo sugli elementi del cursore, cancella i record del file delle righe
TLocalisamfile &delfile= delcur.file(); // prende riferimento al file delle righe dal cursore
for (delcur=0; delcur.pos()<n; ++delcur) delfile.remove(); // ciclo sugli elementi del cursore, cancella i record del file delle righe
} else return FALSE;
return (TRelation_application::remove()); // viene invocata la funzione standard di cancellazione del record corrente
return (TRelation_application::remove()); // viene invocata la funzione standard di cancellazione del record corrente
}

View File

@ -5,6 +5,31 @@
#include "ve2300.h"
#include "veconf.h"
static void key_hide(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.hide(id);
}
static void key_show(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.show(id);
}
static void key_disable(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.disable(id);
}
static void key_enable(TMask & m, short id, int key = 1)
{
((TEditable_field &)m.field(id)).reset_key(key);
m.enable(id);
}
#define DESTROY(x) { _msk->field(x).reset_key(1); _msk->hide(x); }
#define CREATE(x) { _msk->field(x).set_key(1); _msk->show(x); }
#define KILL(x) { _msk->field(x).reset_key(1); _msk->disable(x); }
@ -66,10 +91,10 @@ bool TRighe_condizioni_vendita::user_create() {
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
switch (_rcondven[0]) {
case 'L': // listini
DESTROY(F_R_C_TIPOCF); // settaggio dei campi da eliminare...
DESTROY(F_R_C_CODCF);
DESTROY(F_R_C_COD);
DESTROY(F_R_O_COD);
key_hide(*_msk, F_R_C_TIPOCF); // settaggio dei campi da eliminare...
key_hide(*_msk, F_R_C_CODCF);
key_hide(*_msk, F_R_C_COD);
key_hide(*_msk, F_R_O_COD);
_msk->hide(F_R_C_DESCF);
_msk->hide(F_R_C_DES);
_msk->hide(F_R_O_DES);
@ -78,18 +103,18 @@ bool TRighe_condizioni_vendita::user_create() {
// _msk->hide(F_R_CO_CODLOTTO);
_msk->hide(F_R_O_ARTES);
_codlis_catven= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione di CATVEN
if (!_codlis_catven) KILL(F_R_L_CATVEN); // disabilita condizionalmente le categorie di vendita
_gest_um= prassid.get_bool("GESUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
if (!_codlis_catven) key_disable(*_msk, F_R_L_CATVEN); // disabilita condizionalmente le categorie di vendita
_gest_um= prassid.get_bool("GESUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
set_search_field(F_R_L_RICERCA); // impostazione del campo di ricerca
_msk->set_handler(F_R_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
gotcha= TRUE;
break;
case 'C': // contratti
DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare...
DESTROY(F_R_L_COD);
DESTROY(F_R_O_COD);
key_hide(*_msk, F_R_L_CATVEN); // settaggio dei campi da eliminare...
key_hide(*_msk, F_R_L_COD);
key_hide(*_msk, F_R_O_COD);
_msk->hide(F_R_L_DESVEN);
_msk->hide(F_R_L_DES);
_msk->hide(F_R_O_DES);
@ -98,31 +123,31 @@ bool TRighe_condizioni_vendita::user_create() {
_msk->hide(F_R_O_ARTES);
_codcon_codcf= prassid.get_bool("GESCONCC"); // setta il booleano di abilitazione di TIPOCF e CODCF
if (!_codcon_codcf) { // disabilita i campi di gestione clienti/fornitori in base al flag. di config.
KILL(F_R_C_TIPOCF);
KILL(F_R_C_CODCF);
key_disable(*_msk, F_R_C_TIPOCF);
key_disable(*_msk, F_R_C_CODCF);
}
_gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
_gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
set_search_field(F_R_C_RICERCA); // impostazione del campo di ricerca
_msk->set_handler(F_R_C_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
gotcha= TRUE;
break;
case 'O': // offerte
DESTROY(F_R_L_CATVEN); // settaggio dei campi da eliminare...
DESTROY(F_R_C_TIPOCF);
DESTROY(F_R_C_CODCF);
DESTROY(F_R_L_COD);
DESTROY(F_R_C_COD);
key_hide(*_msk, F_R_L_CATVEN); // settaggio dei campi da eliminare...
key_hide(*_msk, F_R_C_TIPOCF);
key_hide(*_msk, F_R_C_CODCF);
key_hide(*_msk, F_R_L_COD);
key_hide(*_msk, F_R_C_COD);
_msk->hide(F_R_C_DESCF);
_msk->hide(F_R_L_DESVEN);
_msk->hide(F_R_L_DES);
_msk->hide(F_R_C_DES);
_msk->hide(F_R_L_RICERCA);
_msk->hide(F_R_C_RICERCA);
_gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
_gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
_gest_sca= prassid.get_bool("GESSCA", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
_gest_so= prassid.get_bool("GESSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
set_search_field(F_R_O_RICERCA); // impostazione del campo di ricerca
_msk->set_handler(F_R_O_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
gotcha= TRUE;
@ -135,7 +160,7 @@ bool TRighe_condizioni_vendita::user_create() {
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
_msk->set(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio
_msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
_um= _gest_um; // abilita le unità di misura in base alla configurazione
_um= _gest_um; // abilita le unità di misura in base alla configurazione
hide_and_show_codriga(); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
}
return (gotcha);
@ -158,15 +183,15 @@ void TRighe_condizioni_vendita::hide_and_show_codriga() {
char tag_campo= toupper(_msk->get(F_R_TIPORIGA)[0]); // prende il tag del campo da abilitare in TIPORIGA
for (int i=0; i<4; i++) { // ciclo sui quattro campi CODRIGA
if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene reso visibile
CREATE(id_campi_1[i]);
key_show(*_msk, id_campi_1[i]);
_msk->show(id_campi_2[i]);
} else { // i campi non corrispondenti al tag vengono resi invisibili
DESTROY(id_campi_1[i]);
key_hide(*_msk, id_campi_1[i]);
_msk->hide(id_campi_2[i]);
}
}
if (_um && (tag_campo=='A')) { REVIVE(F_R_UM); } // se la gest. delle u.m. è abilitata, il campo viene attivato se la riga è un articolo...
else { KILL(F_R_UM); } // ...altrimenti viene disattivato
if (_um && (tag_campo=='A')) { key_enable(*_msk, F_R_UM); } // se la gest. delle u.m. è abilitata, il campo viene attivato se la riga è un articolo...
else { key_disable(*_msk, F_R_UM); } // ...altrimenti viene disattivato
}
}
@ -203,14 +228,14 @@ bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
if (_gest_um) _um= condv.get_bool("GESTUM"); // legge lo stato di abilitazione della gestione delle unità di misura
hide_and_show_codriga(); // lancia la funzione che si occupa di abilitare/disabilitare il campo "unità di misura"
if (_gest_sca && condv.get_bool("GESTSCAGL")) {
REVIVE(F_R_NSCAGL); // abilita il campo "numero scaglione"
key_enable(*_msk, F_R_NSCAGL); // abilita il campo "numero scaglione"
_msk->enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
} else {
KILL(F_R_NSCAGL); // disabilita il campo "numero scaglione"
key_disable(*_msk, F_R_NSCAGL); // disabilita il campo "numero scaglione"
_msk->disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
}
if (condv.get_bool("SCONST") || (_gest_um && condv.get_bool("GESTSCO"))) _msk->enable(F_R_SCONTO); // abilita il campo "sconto"
else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto"
else _msk->disable(F_R_SCONTO); // disabilita il campo "sconto"
if (_gest_so && condv.get_bool("GESTSCO")) {
_msk->enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
_msk->enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
@ -233,7 +258,7 @@ bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
}
int TRighe_condizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
@ -244,7 +269,7 @@ int TRighe_condizioni_vendita::write(const TMask &m) {
}
int TRighe_condizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
m.autosave(*_rel); // scrive il contenuto della maschera nel record della relazione
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale

48
ve/verig.h Executable file
View File

@ -0,0 +1,48 @@
#ifndef __VERIG_H
#define __VERIG_H
#define FR_STATORIGA 101
#define FR_TIPORIGA 102
#define FR_CODMAG 103
#define FR_CODDEP 104
// CODART CODSPV CODSPQ CODSPP alternativi definirne uno solo
#define FR_CODART 105
#define FR_CODSPV 105
#define FR_CODSPQ 105
#define FR_CODSPP 105
// DESCR DESCRSPV DESCPSPQ DESCRSPP alternativi definirne uno solo
#define FR_DESCR 106
#define FR_DESCRSPV 106
#define FR_DESCRSPQ 106
#define FR_DESCRSPP 106
// UMQTA UMQTASP alternativi definirne uno solo
#define FR_UMQTA 107
#define FR_UMQTASP 107
// QTA PERCSP alternativi definirne uno solo
#define FR_QTA 108
#define FR_PERCSP 108
// PREZZO VALORE alternativi definirne uno solo
#define FR_PREZZO 109
#define FR_VALORE 109
#define FR_QTAEVASA 110
#define FR_RIGAEVASA 111
#define FR_TARA 112
#define FR_PNETTO 113
#define FR_NCOLLI 114
#define FR_DAEVADERE 115
#define FR_SCONTO 116
#define FR_PERCPROV 117
#define FR_IMPFISUN 118
#define FR_IMPFISSO 119
#define FR_CODIVA 120
#define FR_ADDIVA 121
#define FR_ASPBENI 122
#define FR_END 123
#define MAX_COLUMNS FR_END-FR_STATORIGA
#define FR_DESMAG 150
#define FR_DESDEP 151
#define FR_DESIVA 152
#define FR_DESASP 153
#endif

596
ve/verig.uml Executable file
View File

@ -0,0 +1,596 @@
#ifdef FULL_SCREEN
TOOLBAR "" 0 20 0 2
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
#endif
#ifndef MASK_WIDTH
#define MASK_WIDTH 74
#endif
#ifndef MASK_HEIGHT
#define MASK_HEIGHT 19
#endif
#ifndef MASK_TITLE1
#define MASK_TITLE1 ""
#endif
PAGE MASK_TITLE1 -1 -1 MASK_WIDTH MASK_HEIGHT
STRING FR_STATORIGA 2
BEGIN
PROMPT 0 0 ""
FLAGS "H"
END
STRING FR_TIPORIGA 2
BEGIN
PROMPT 0 0 ""
FLAGS "H"
END
IFDEF(F_CODMAG)
STRING FR_CODMAG 3
BEGIN
IFDEF(X_CODMAG)
PROMPT X_CODMAG Y_CODMAG PR_CODMAG
ELSEIF
PROMPT 2 3 "Magazzino "
ENDIF
USE MAG SELECT CODTAB ? "???"
INPUT CODTAB[1,3] FR_CODMAG
DISPLAY "Codice" CODTAB[1,3]
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODMAG CODTAB[1,3]
OUTPUT FR_DESMAG S0
IFDEF(CH_CODMAG)
CHECKTYPE CH_CODMAG
ELSEIF
CHECKTYPE NORMAL
ENDIF
FLAGS "U"
IFDEF(FL_CODMAG)
FLAGS FL_CODMAG
ENDIF
KEY 1
END
ENDIF
IFDEF(F_DESMAG)
STRING FR_DESMAG 50
BEGIN
IFDEF(X_DESMAG)
PROMPT X_DESMAG Y_DESMAG PR_DESMAG
ELSEIF
PROMPT 22 3 ""
ENDIF
IFDEF(FL_DESMAG)
FLAGS FL_DESMAG
ENDIF
FLAGS "D"
END
ENDIF
IFDEF(F_CODDEP)
STRING FR_CODDEP 2
BEGIN
IFDEF(X_DESMAG)
PROMPT X_DESMAG Y_DESMAG PR_DESMAG
ELSEIF
PROMPT 2 4 "Deposito "
ENDIF
USE MAG SELECT (CODTAB[1,3]==#FR_CODMAG) && (CODTAB ? "?????")
IN CODTAB[1,3] FR_CODMAG
IN CODTAB[4,5] FR_CODDEP
DISPLAY "Codice mag." CODTAB[1,3]
DISPLAY "Codice dep." CODTAB[4,5]
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODMAG CODTAB[1,3]
OUTPUT FR_CODDEP CODTAB[4,5]
OUTPUT FR_DESDEP S0
MESSAGE DIRTY,FR_CODMAG|K_TAB,FR_CODMAG
IFDEF(CH_CODDEP)
CHECKTYPE CH_CODDEP
ELSEIF
CHECKTYPE NORMAL
ENDIF
IFDEF(FL_CODDEP)
FLAGS FL_CODDEP
ENDIF
FLAGS "U"
KEY 1
END
ENDIF
IFDEF(F_DESDEP)
STRING FR_DESDEP 50
BEGIN
IFDEF(X_DESDEP)
PROMPT X_DESDEP Y_DESDEP PR_DESDEP
ELSEIF
PROMPT 22 4 ""
ENDIF
FLAGS "D"
END
ENDIF
IFDEF(F_CODART)
ST FR_CODART 20
BEGIN
IFDEF(X_CODART)
PROMPT X_CODART Y_CODART PR_CODART
ELSEIF
PROMPT 2 6 "Articolo "
ENDIF
USE LF_ANAMAG KEY 1
INPUT CODART FR_CODART
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT FR_CODART CODART
OUTPUT FR_DESCR DESCR
WARNING "Articolo assente"
IFDEF(CH_CODART)
CHECKTYPE CH_CODART
ELSEIF
CHECKTYPE REQUIRED
ENDIF
IFDEF(FL_CODART)
FLAGS FL_CODART
ENDIF
END
ENDIF
IFDEF(F_CODSPV)
STRING FR_CODSPV 3
BEGIN
IFDEF(X_CODSPV)
PROMPT X_CODSPV Y_CODSPV PR_CODSPV
ELSEIF
PROMPT 2 6 "Spesa "
ENDIF
USE SPP SELECT S6=="V"
INPUT CODTAB FR_CODSPV
DISPLAY "Codice spesa" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODSPV CODTAB
OUTPUT FR_DESCRSPV S0
OUTPUT FR_VALORE R0
OUTPUT FR_CODIVA S1[1,4]
IFDEF(CH_CODSPV)
CHECKTYPE CH_CODSPV
ELSEIF
CHECKTYPE REQUIRED
ENDIF
END
ENDIF
IFDEF(F_CODSPQ)
STRING FR_CODSPQ 3
BEGIN
IFDEF(X_CODSPQ)
PROMPT X_CODSPQ Y_CODSPQ PR_CODSPQ
ELSEIF
PROMPT 2 6 "Spesa "
ENDIF
USE SPP SELECT S6=="Q"
INPUT CODTAB FR_CODSPQ
DISPLAY "Codice spesa" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODSPQ CODTAB
OUTPUT FR_DESCRSPQ S0
OUTPUT FR_PREZZO R0
OUTPUT FR_CODIVA S1[1,4]
IFDEF(CH_CODSPQ)
CHECKTYPE CH_CODSPQ
ELSEIF
CHECKTYPE REQUIRED
ENDIF
END
ENDIF
IFDEF(F_CODSPP)
STRING FR_CODSPP 3
BEGIN
IFDEF(X_CODSPP)
PROMPT X_CODSPP Y_CODSPP PR_CODSPP
ELSEIF
PROMPT 2 6 "Spesa "
ENDIF
USE SPP SELECT S6=="P"
INPUT CODTAB FR_CODSPP
DISPLAY "Codice spesa" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODSPP CODTAB
OUTPUT FR_DESCRSPP S0
OUTPUT FR_PERCSP R0
OUTPUT FR_CODIVA S1[1,4]
IFDEF(CH_CODSPP)
CHECKTYPE CH_CODSPP
ELSEIF
CHECKTYPE REQUIRED
ENDIF
END
ENDIF
IFDEF(F_DESCR)
ZOOM FR_DESCR 50
BEGIN
IFDEF(X_DESCR)
PROMPT X_DESCR Y_DESCR PR_DESCR
ELSEIF
PROMPT 2 7 "Descrizione "
ENDIF
USE LF_ANAMAG KEY 2
INPUT DESCR FR_DESCR
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT FR_CODART CODART
OUTPUT FR_DESCR DESCR
END
ENDIF
IFDEF(F_DESCRSPV)
ZOOM FR_DESCRSPV 50
BEGIN
IFDEF(X_DESCRSPV)
PROMPT X_DESCRSPV Y_DESCRSPV PR_DESCRSPV
ELSEIF
PROMPT 2 7 "Descrizione "
ENDIF
USE SPP KEY 2 SELECT S6=="V"
INPUT S0 FR_DESCRSPV
DISPLAY "Descrizione@50" S0
DISPLAY "Codice spesa" CODTAB
COPY OUTPUT FR_CODSPV
END
ENDIF
IFDEF(F_DESCRSPQ)
ZOOM FR_DESCRSPQ 50
BEGIN
IFDEF(X_DESCRSPV)
PROMPT X_DESCRSPQ Y_DESCRSPQ PR_DESCRSPQ
ELSEIF
PROMPT 2 7 "Descrizione "
ENDIF
USE SPP KEY 2 SELECT S6=="Q"
INPUT S0 FR_DESCRSPQ
DISPLAY "Descrizione@50" S0
DISPLAY "Codice spesa" CODTAB
COPY OUTPUT FR_CODSPQ
END
ENDIF
IFDEF(F_DESCRSPP)
ZOOM FR_DESCRSPP 50
BEGIN
IFDEF(X_DESCRSPP)
PROMPT X_DESCRSPP Y_DESCRSP PR_DESCRSPP
ELSEIF
PROMPT 2 7 "Descrizione "
ENDIF
USE SPP KEY 2 SELECT S6=="P"
INPUT S0 FR_DESCRSPP
DISPLAY "Descrizione@50" S0
DISPLAY "Codice spesa" CODTAB
COPY OUTPUT FR_CODSPP
END
ENDIF
IFDEF(F_UMQTA)
STRING FR_UMQTA 2
BEGIN
IFDEF(X_UMQTA)
PROMPT X_UMQTA Y_UMQTA PR_UMQTA
ELSEIF
PROMPT 2 9 "U.M. "
ENDIF
USE LF_UMART KEY 2
JOIN %UMS INTO CODTAB=UM
INPUT CODART FR_CODART SE
INPUT UM FR_UMQTA
DISPLAY "Codice@20" UM
DISPLAY "Descrizione@50" %UMS->S0
OUTPUT FR_UMQTA UM
IFDEF(CH_UMQTA)
CHECKTYPE CH_UMQTA
ELSEIF
CHECKTYPE NORMAL
ENDIF
END
ENDIF
IFDEF(F_UMQTASP)
STRING FR_UMQTASP 2
BEGIN
IFDEF(X_UMQTASP)
PROMPT X_UMQTASP Y_UMQTASP PR_UMQTASP
ELSEIF
PROMPT 2 9 "U.M. "
ENDIF
USE %UMS
INPUT CODTAB FR_UMQTASP
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_UMQTASP CODTAB
IFDEF(CH_UMQTASP)
CHECKTYPE CH_UMQTASP
ELSEIF
CHECKTYPE NORMAL
ENDIF
END
ENDIF
IFDEF(F_QTA)
NUMBER FR_QTA 11 3
BEGIN
IFDEF(X_QTA)
PROMPT X_QTA Y_QTA PR_QTA
ELSEIF
PROMPT 22 9 "Qta' "
ENDIF
END
ENDIF
IFDEF(F_PERCSP)
NUMBER FR_QTA 6 2
BEGIN
IFDEF(X_PERCSP)
PROMPT X_PERCSP Y_PERCSP PR_PERCSP
ELSEIF
PROMPT 22 9 "%Spesa "
ENDIF
END
ENDIF
IFDEF(F_PREZZO)
NUMBER FR_PREZZO 15 3
BEGIN
IFDEF(X_PREZZO)
PROMPT X_PREZZO Y_PREZZO PR_PREZZO
ELSEIF
PROMPT 42 9 "Prezzo "
ENDIF
END
ENDIF
IFDEF(F_VALORE)
NUMBER FR_VALORE 15 3
BEGIN
IFDEF(X_VALORE)
PROMPT X_VALORE Y_VALORE PR_VALORE
ELSEIF
PROMPT 42 9 "Valore "
ENDIF
END
ENDIF
IFDEF(F_QTAEVASA)
NUMBER FR_QTAEVASA 11 3
BEGIN
IFDEF(X_QTAEVASA)
PROMPT X_QTAEVASA Y_QTAEVASA PR_QTAEVASA
ELSEIF
PROMPT 17 10 "Q.ta evasa "
ENDIF
END
ENDIF
IFDEF(F_RIGAEVASA)
BOOLEAN FR_RIGAEVASA
BEGIN
IFDEF(X_RIGAEVASA)
PROMPT X_RIGAEVASA Y_RIGAEVASA PR_RIGAEVASA
ELSEIF
PROMPT 42 10 "Saldata "
ENDIF
END
ENDIF
IFDEF(F_TARA)
NUMBER FR_TARA 15 2
BEGIN
IFDEF(X_TARA)
PROMPT X_TARA Y_TARA PR_TARA
ELSEIF
PROMPT 2 11 "Tara "
ENDIF
END
ENDIF
IFDEF(F_PNETTO)
NUMBER FR_PNETTO 15 2
BEGIN
IFDEF(X_PNETTO)
PROMPT X_PNETTO Y_PNETTO PR_PNETTO
ELSEIF
PROMPT 30 11 "Peso netto "
ENDIF
END
ENDIF
IFDEF(F_NCOLLI)
NUMBER FR_NCOLLI 7
BEGIN
IFDEF(X_NCOLLI)
PROMPT X_NCOLLI Y_NCOLLI PR_NCOLLI
ELSEIF
PROMPT 2 12 "N.Colli "
ENDIF
END
ENDIF
IFDEF(F_DAEVADERE)
BOOLEAN FR_DAEVADERE
BEGIN
IFDEF(X_DAEVADERE)
PROMPT X_DAEVADERE Y_DAEVADERE PR_DAEVADERE
ELSEIF
PROMPT 22 12 "Da evadere "
ENDIF
END
ENDIF
IFDEF(F_SCONTO)
STRING FR_SCONTO 25
BEGIN
IFDEF(X_SCONTO)
PROMPT X_SCONTO Y_SCONTO PR_SCONTO
ELSEIF
PROMPT 2 13 "Sconto "
ENDIF
END
ENDIF
IFDEF(F_PERCPROV)
NUMBER FR_PERCPROV 5 2
BEGIN
IFDEF(X_PERCPROV)
PROMPT X_PERCPROV Y_PERCPROV PR_PERCPROV
ELSEIF
PROMPT 42 13 "Perc.Provv. "
ENDIF
END
ENDIF
IFDEF(F_IMPFISUN)
BOOLEAN FR_IMPFISUN
BEGIN
IFDEF(X_IMPFISUN)
PROMPT X_IMPFISUN Y_IMPFISUN PR_IMPFISUN
ELSEIF
PROMPT 2 14 "Importo provv.unitario"
ENDIF
END
ENDIF
IFDEF(F_IMPFISSO)
NUMBER FR_IMPFISSO 18 2
BEGIN
IFDEF(X_IMPFISSO)
PROMPT X_IMPFISSO Y_IMPFISSO PR_IMPFISSO
ELSEIF
PROMPT 42 14 "Imp.Provv. "
ENDIF
END
ENDIF
IFDEF(F_CODIVA)
STRING FR_CODIVA 4
BEGIN
IFDEF(X_CODIVA)
PROMPT X_CODIVA Y_CODIVA PR_CODIVA
ELSEIF
PROMPT 2 15 "Cod. IVA "
ENDIF
USE %IVA
INPUT CODTAB FR_CODIVA
DISPLAY "Codice@20" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_CODIVA CODTAB
OUTPUT FR_DESIVA S0
FLAGS "U"
VALIDATE ZEROFILL_FUNC 2
IFDEF(CH_CODIVA)
CHECKTYPE CH_CODIVA
ELSEIF
CHECKTYPE NORMAL
ENDIF
END
ENDIF
IFDEF(F_DESIVA)
STRING FR_DESIVA 50
BEGIN
IFDEF(X_DESIVA)
PROMPT X_DESIVA Y_DESIVA PR_DESIVA
ELSEIF
PROMPT 22 15 ""
ENDIF
FLAGS "D"
END
ENDIF
IFDEF(F_ADDIVA)
BOOLEAN FR_ADDIVA
BEGIN
IFDEF(X_ADDIVA)
PROMPT X_ADDIVA Y_ADDIVA PR_ADDIVA
ELSEIF
PROMPT 2 16 "Addebito IVA"
ENDIF
END
ENDIF
IFDEF(F_ASPBENI)
STRING FR_ASPBENI 2
BEGIN
IFDEF(X_ASPBENI)
PROMPT X_ASPBENI Y_ASPBENI PR_ASPBENI
ELSEIF
PROMPT 2 17 "Aspetto Beni "
ENDIF
USE %ABE
INPUT CODTAB FR_ASPBENI
DISPLAY "Codice@20" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT FR_ASPBENI CODTAB
OUTPUT FR_DESASP S0
FLAGS "UZ"
IFDEF(CH_ASPBENI)
CHECKTYPE CH_ASPBENI
ELSEIF
CHECKTYPE NORMAL
ENDIF
END
ENDIF
IFDEF(F_DESASP)
STRING FR_DESASP 50
BEGIN
IFDEF(X_DESASP)
PROMPT X_DESASP Y_DESASP PR_DESASP
ELSEIF
PROMPT 22 17 ""
ENDIF
FLAGS "D"
END
ENDIF
#ifndef FULL_SCREEN
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
#endif
ENDPAGE
ENDMASK

29
ve/verig00.uml Executable file
View File

@ -0,0 +1,29 @@
#include "verigdef.h"
DEFINE_FIELD(CODMAG)
DEFINE_FIELD(DESMAG)
DEFINE_FIELD(CODDEP)
DEFINE_FIELD(DESDEP)
DEFINE_FIELD(CODART)
DEFINE_FIELD(DESCR)
DEFINE_FIELD(UMQTA)
DEFINE_FIELD(QTA)
DEFINE_FIELD(PREZZO)
DEFINE_FIELD(QTAEVASA)
DEFINE_FIELD(RIGAEVASA)
DEFINE_FIELD(TARA)
DEFINE_FIELD(PNETTO)
DEFINE_FIELD(NCOLLI)
DEFINE_FIELD(DAEVADERE)
DEFINE_FIELD(SCONTO)
DEFINE_FIELD(PERCPROV)
DEFINE_FIELD(IMPFISSO)
DEFINE_FIELD(IMPFISUN)
DEFINE_FIELD(CODIVA)
DEFINE_FIELD(DESIVA)
DEFINE_FIELD(ADDIVA)
DEFINE_FIELD(ASPBENI)
DEFINE_FIELD(DESASP)
#include "verig.uml"

29
ve/verig01.uml Executable file
View File

@ -0,0 +1,29 @@
#include "verigdef.h"
#define FULL_SCREEN
// else
// #define MASK_WIDTH 60
// #define MASK_HEIGHT 14
//
#define MASK_TITLE1 "Merce"
DEFINE_FIELD(CODMAG)
// F_POS(CODMAG, 2, 3, "Magazzino ")
// F_FLG(CODMAG, "U")
// F_CHK(CODMAG, REQUIRED)
DEFINE_FIELD(DESMAG)
DEFINE_FIELD(CODDEP)
DEFINE_FIELD(DESDEP)
DEFINE_FIELD(CODART)
DEFINE_FIELD(DESCR)
DEFINE_FIELD(UMQTA)
DEFINE_FIELD(QTA)
DEFINE_FIELD(PREZZO)
DEFINE_FIELD(SCONTO)
DEFINE_FIELD(PERCPROV)
DEFINE_FIELD(CODIVA)
DEFINE_FIELD(DESIVA)
#include "verig.uml"

15
ve/verig02.uml Executable file
View File

@ -0,0 +1,15 @@
#include "verigdef.h"
#define FULL_SCREEN
#define MASK_TITLE1 "Spese di tipo (Valore)"
DEFINE_FIELD(CODSPV)
DEFINE_FIELD(DESCRSPV)
DEFINE_FIELD(VALORE)
DEFINE_FIELD(SCONTO)
DEFINE_FIELD(CODIVA)
DEFINE_FIELD(DESIVA)
#include "verig.uml"

17
ve/verig03.uml Executable file
View File

@ -0,0 +1,17 @@
#include "verigdef.h"
#define FULL_SCREEN
#define MASK_TITLE1 "Spese di tipo (Quantita'/Prezzo)"
DEFINE_FIELD(CODSPQ)
DEFINE_FIELD(DESCRSPQ)
DEFINE_FIELD(UMQTASP)
DEFINE_FIELD(QTA)
DEFINE_FIELD(PREZZO)
DEFINE_FIELD(SCONTO)
DEFINE_FIELD(CODIVA)
DEFINE_FIELD(DESIVA)
#include "verig.uml"

14
ve/verig04.uml Executable file
View File

@ -0,0 +1,14 @@
#include "verigdef.h"
#define FULL_SCREEN
#define MASK_TITLE1 "Spese di tipo (Percentuale)"
DEFINE_FIELD(CODSPP)
DEFINE_FIELD(DESCRSPP)
DEFINE_FIELD(PERCSP)
DEFINE_FIELD(CODIVA)
DEFINE_FIELD(DESIVA)
#include "verig.uml"

17
ve/verigdef.h Executable file
View File

@ -0,0 +1,17 @@
#define INCLDEF(file) !include file
#define IFDEF(name) !ifdef name
#define IF(cond) !if cond
#define ENDIF !endif
#define ELSEIF !else
#define DEFINE_FIELD(name) !define F_##name ;
#define F_POS(name, row, col, prompt) !define X_##name row ;\
!define Y_##name col ;\
!define PR_##name prompt ;
#define F_FLG(name, flags) !define FL_##name flags ;
#define F_CHK(name, type) !define CH_##name type ;
INCLDEF("verig.h")