Create le maschere e il programma per la configurazione delle vendite

git-svn-id: svn://10.65.10.50/trunk@1825 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
matteo 1995-09-14 13:59:52 +00:00
parent 416f1d589f
commit 2a2192541b
20 changed files with 5617 additions and 3509 deletions

View File

@ -1,182 +1,265 @@
#ifndef __TCLIFOR_H
#include "tclifor.h"
#endif
#ifndef __VEUML1_H
#include "veuml1.h"
#endif
#ifndef __VE1000O_H
#include "ve1000o.h"
#endif
const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field )
{
if( table != _tablename )
{
delete _table;
_table = new TTable( table );
_tablename = table;
}
if( codtab != _table->curr( ).get( "CODTAB" ) )
{
_table->zero( );
_table->put( "CODTAB", codtab );
_table->read( );
}
return _table->get( field );
};
void TData_picker::set( TMask& m, const int mskfield, const TString& value )
{
if( present( m, mskfield ) )
{
m.set( mskfield, value, TRUE );
m.field( mskfield ).check( );
}
};
const TString& TData_picker::get( const int file, const TString& fieldname )
{
return lfile( file ).get( fieldname );
}
int TData_picker::get_int( const int file, const TString& fieldname )
{
return lfile( file ).get_int( fieldname );
}
long TData_picker::get_long( const int file, const TString& fieldname )
{
return lfile( file ).get_long( fieldname );
}
bool TData_picker::get_bool( const int file, const TString& fieldname )
{
return lfile( file ).get_bool( fieldname );
}
int TCliFor::write_occas( )
{
if( !occasionale( ) )
return NOERR;
TRelation occas( LF_OCCAS );
occas_mask( ).autosave( &occas );
return occas.write( );
}
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" )
{
_occas_mask.set_handler( O_CODICE, occas_code_handler );
add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" );
}
void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
{
_tipocf = tipocf;
_codcf = codcf;
zero( );
curr( ).put( "TIPOCF", tipocf );
curr( ).put( "CODCF", codcf );
lfile( ).setkey( 1 );
if( read( ) != NOERR )
yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf );
_occas = curr().get_bool( "OCCAS" );
if ( occasionale( ) )
{
TRelation occrel( LF_OCCAS );
occrel.curr( ).zero( );
occrel.curr( ).put( "CFPI", ocfpi );
occrel.read( );
occas_mask( ).autoload( &occrel );
}
}
void TCliForVendite::update_mask( TMask& m, bool onload )
{
// Setta i campi che appartengono al file LF_CLIFO
bool occas = occasionale( );
show( m, F_OCFPI, occas );
show( m, F_OCCASEDIT, occas );
// In forse per l'Occasionale, sicuri per il Normale
m.show( F_COFI, !occas );
m.show( F_STATOPAIVA, !occas );
m.show( F_PAIVA, !occas );
set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" );
if( !onload )
{
set( m, F_CODVAL, LF_CLIFO, "CODVAL" );
set( m, F_CODLIN, LF_CLIFO, "CODLIN" );
set( m, F_CODPAG, LF_CLIFO, "CODPAG" );
// Questo nonb va qua, ma nella read
set( m, F_DATAINSC, m.get( F_DATADOC ) );
set( m, F_CODABIA, LF_CLIFO, "CODABI" );
set( m, F_CODCABA, LF_CLIFO, "CODCAB" );
// Setta i campi che appartengono al file LF_CFVEN
set( m, F_CODABIP, LF_CFVEN, "CODABIPR" );
set( m, F_CODCABP, LF_CFVEN, "CODCABPR" );
set( m, F_RAGGR, LF_CFVEN, "RAGGDOC" );
set( m, F_CODINDSP, LF_CFVEN, "CODINDSP" );
set( m, F_CODAG, LF_CFVEN, "CODAG" );
set( m, F_CODSPMEZZO, LF_CFVEN, "CODSPMEZZO" );
set( m, F_CODPORTO, LF_CFVEN, "CODPORTO" );
set( m, F_CODNOTESP1, LF_CFVEN, "CODNOTESP1" );
set( m, F_CODNOTESP2, LF_CFVEN, "CODNOTESP2" );
set( m, F_CODVETT1, LF_CFVEN, "CODVETT1" );
set( m, F_CODVETT2, LF_CFVEN, "CODVETT2" );
set( m, F_CODVETT3, LF_CFVEN, "CODVETT3" );
set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" );
set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" );
set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" );
}
if ( occasionale ( ) )
{
// set( m, F_COFI, "" );
// set( m, F_PAIVA, "" );
set( m, F_OCFPI, occas_mask( ).get( O_CODICE ) );
set( m, F_RAGSOC, occas_mask( ).get( O_RAGSOC ) );
set( m, F_INDCF, occas_mask( ).get( O_INDIRIZZO ) );
set( m, F_CIVCF, occas_mask( ).get( O_NUMERO ) );
set( m, F_CAPCF, occas_mask( ).get( O_CAP ) );
set( m, F_COMCF, occas_mask( ).get( O_COMUNE ) );
set( m, F_STATOCF, occas_mask( ).get( O_STATO ) );
}
else
{
set( m, F_COFI, LF_CLIFO, "COMCF" );
set( m, F_INDCF, LF_CLIFO, "INDCF" );
set( m, F_CIVCF, LF_CLIFO, "CIVCF" );
set( m, F_STATOPAIVA, LF_CLIFO, "STATOPAIV" );
set( m, F_PAIVA, LF_CLIFO, "PAIV" );
set( m, F_LOCALITACF, LF_CLIFO, "LOCALITACF" );
set( m, F_CAPCF, LF_CLIFO, "CAPCF" );
set( m, F_COMCF, LF_CLIFO, "COMCF" );
set( m, F_STATOCF, LF_CLIFO, "STATOCF" );
}
}
void TCliFor::edita_occasionale( )
{
CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" );
_occas_mask.run( );
};
bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
{
if (key == K_TAB)
{
const char* code = f.get();
if (*code)
{
TRelation occas(LF_OCCAS);
occas.lfile().put("CFPI", code);
if (occas.read(_isequal) == NOERR)
{
f.mask().autoload(&occas);
f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni
f.mask().send_key(K_TAB, O_COMUNENAS);
}
}
}
return TRUE;
}
#ifndef __TCLIFOR_H
#include "tclifor.h"
#endif
#ifndef __VEUML1_H
#include "veuml1.h"
#endif
#ifndef __VE1000O_H
#include "ve1000o.h"
#endif
const TString& TData_picker::get( const TString& table, const TString& codtab, const TString& field )
{
if( table != _tablename )
{
delete _table;
_table = new TTable( table );
_tablename = table;
}
if( codtab != _table->curr( ).get( "CODTAB" ) )
{
_table->zero( );
_table->put( "CODTAB", codtab );
_table->read( );
}
return _table->get( field );
};
const TString& TData_picker::get( const int file, const TString& fieldname )
{
return lfile( file ).get( fieldname );
}
int TData_picker::get_int( const int file, const TString& fieldname )
{
return lfile( file ).get_int( fieldname );
}
long TData_picker::get_long( const int file, const TString& fieldname )
{
return lfile( file ).get_long( fieldname );
}
bool TData_picker::get_bool( const int file, const TString& fieldname )
{
return lfile( file ).get_bool( fieldname );
}
int TCliFor::write_occas( )
{
if( !occasionale( ) )
return NOERR;
TRelation occas( LF_OCCAS );
occas_mask( ).autosave( &occas );
return occas.write( );
}
TCliFor::TCliFor( ) : TData_picker( LF_CLIFO ), _occas_mask( "ve1000o" )
{
_occas_mask.set_handler( O_CODICE, occas_code_handler );
add( LF_CFVEN, "TIPOCF=TIPOCF|CODCF=CODCF" );
}
void TCliFor::load( const char tipocf, const long codcf, const TString& ocfpi )
{
_tipocf = tipocf;
_codcf = codcf;
zero( );
curr( ).put( "TIPOCF", tipocf );
curr( ).put( "CODCF", codcf );
lfile( ).setkey( 1 );
if( read( ) != NOERR )
yesnofatal_box( "Il %s %d non è stato trovato!", tipocf == 'C'?"cliente":"fornitore", codcf );
_occas = curr().get_bool( "OCCAS" );
if ( occasionale( ) )
{
TRelation occrel( LF_OCCAS );
occrel.curr( ).zero( );
occrel.curr( ).put( "CFPI", ocfpi );
occrel.read( );
occas_mask( ).autoload( &occrel );
}
}
void TCliForVendite::update_mask( TMask_vendite& m, bool onload )
{
TString16 stato;
// Setta i campi che appartengono al file LF_CLIFO
bool occas = occasionale( );
m.show( F_OCFPI, occas );
m.show( F_OCCASEDIT, occas );
// In forse per l'Occasionale, sicuri per il Normale
m.show( F_COFI, !occas );
m.show( F_STATOPAIVA, !occas );
m.show( F_PAIVA, !occas );
set( m, F_RAGSOC, LF_CLIFO, "RAGSOC" );
if( !onload )
{
set( m, F_CODVAL, LF_CLIFO, "CODVAL" );
set( m, F_CODLIN, LF_CLIFO, "CODLIN" );
set( m, F_CODPAG, LF_CLIFO, "CODPAG" );
set( m, F_CODABIA, LF_CLIFO, "CODABI" );
set( m, F_CODCABA, LF_CLIFO, "CODCAB" );
// Setta i campi che appartengono al file LF_CFVEN
set( m, F_CODABIP, LF_CFVEN, "CODABIPR" );
set( m, F_CODCABP, LF_CFVEN, "CODCABPR" );
set( m, F_RAGGR, LF_CFVEN, "RAGGDOC" );
set( m, F_CODINDSP, LF_CFVEN, "CODINDSP" );
set( m, F_CODAG, LF_CFVEN, "CODAG" );
set( m, F_CODSPMEZZO, LF_CFVEN, "CODSPMEZZO" );
set( m, F_CODPORTO, LF_CFVEN, "CODPORTO" );
set( m, F_CODNOTESP1, LF_CFVEN, "CODNOTESP1" );
set( m, F_CODNOTESP2, LF_CFVEN, "CODNOTESP2" );
set( m, F_CODVETT1, LF_CFVEN, "CODVETT1" );
set( m, F_CODVETT2, LF_CFVEN, "CODVETT2" );
set( m, F_CODVETT3, LF_CFVEN, "CODVETT3" );
set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" );
set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" );
set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" );
}
if ( occasionale ( ) )
{
m.set( F_COFI, "" );
m.set( F_PAIVA, "" );
m.set( F_OCFPI, occas_mask( ).get( O_CODICE ) );
m.set( F_RAGSOC, occas_mask( ).get( O_RAGSOC ) );
m.set( F_INDCF, occas_mask( ).get( O_INDIRIZZO ) );
m.set( F_CIVCF, occas_mask( ).get( O_NUMERO ) );
m.set( F_CAPCF, occas_mask( ).get( O_CAP ) );
m.set( F_COMCF, occas_mask( ).get( O_COMUNE ) );
m.set( F_STATOCF, stato = occas_mask( ).get( O_STATO ) );
}
else
{
set( m, F_COFI, LF_CLIFO, "COFI" );
set( m, F_INDCF, LF_CLIFO, "INDCF" );
set( m, F_CIVCF, LF_CLIFO, "CIVCF" );
set( m, F_STATOPAIVA, LF_CLIFO, "STATOPAIV" );
set( m, F_PAIVA, LF_CLIFO, "PAIV" );
set( m, F_LOCALITACF, LF_CLIFO, "LOCALITACF" );
set( m, F_CAPCF, LF_CLIFO, "CAPCF" );
set( m, F_COMCF, LF_CLIFO, "COMCF" );
stato = get( LF_CLIFO, "STATOCF" );
m.set( F_STATOCF, stato );
}
if ( !stato.blank( ) )
m.set( F_DESSTATOCF, get( "%STA", stato, "S0" ) );
TString16 tmpstr( m.get( F_CODPAG ) );
if( !tmpstr.blank( ) )
{
m.field( F_CODPAG ).on_hit( );
m.field( F_CODPAG ).check( );
}
tmpstr = m.get( F_CODLIN );
if( !tmpstr.blank( ) )
m.field( F_CODLIN ).check( );
imposta_dati_comune( m );
imposta_indirizzo_spedizione( m );
}
void TCliFor::edita_occasionale( )
{
CHECK( occasionale( ), "Impossibile editare come occasionale un cliente non occasionale!" );
_occas_mask.run( );
};
bool TCliFor::occas_code_handler(TMask_field& f, KEY key)
{
if (key == K_TAB)
{
const char* code = f.get();
if (*code)
{
TRelation occas(LF_OCCAS);
occas.lfile().put("CFPI", code);
if (occas.read(_isequal) == NOERR)
{
f.mask().autoload(&occas);
f.mask().send_key(K_TAB, O_COMUNE); // Forza decodifica comuni
f.mask().send_key(K_TAB, O_COMUNENAS);
}
}
}
return TRUE;
}
void TCliForVendite::imposta_dati_comune( TMask_vendite& m )
{
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey( 1 );
if( occasionale( ) )
{
comuni.put( "COM", occas_mask( ).get( O_COMUNE ));
comuni.put( "STATO", occas_mask( ).get( O_STATO ) );
}
else
{
comuni.put( "COM", get( LF_CLIFO, "COMCF" ));
comuni.put( "STATO", get( LF_CLIFO, "STATOCF" ) );
}
comuni.read( );
m.set( F_DENCOM, comuni.get( "DENCOM" ) );
m.set( F_PROVCOM, comuni.get( "PROVCOM" ) );
}
void TCliForVendite::imposta_indirizzo_spedizione( TMask_vendite& m )
{
TString16 stato;
if( occasionale( ) )
{
m.set( F_CODINDSP, "" );
m.disable( F_CODINDSP );
m.set( F_RAGSOCSP, occas_mask( ).get( O_RAGSOC ) );
m.set( F_INDSP, occas_mask( ).get( O_INDIRIZZO ) );
m.set( F_CIVSP, occas_mask( ).get( O_NUMERO ) );
// Sugli occasionali non c'è la località
m.set( F_LOCALITASP, "" );
m.set( F_CAPSP, occas_mask( ).get( O_CAP ) );
m.set( F_COMSP, occas_mask( ).get( O_COMUNE ) );
m.set( F_STATOSP, stato = occas_mask( ).get( O_STATO ) );
}
else
{
TString16 codindsp( m.get( F_CODINDSP ) );
if( codindsp.blank( ) )
{
m.set( F_RAGSOCSP, "" );
m.set( F_INDSP, "" );
m.set( F_CIVSP, "" );
m.set( F_LOCALITASP, "" );
m.set( F_CAPSP, "" );
m.set( F_COMSP, "" );
m.set( F_STATOSP, "" );
return;
}
else
{
TLocalisamfile indsped( LF_INDSP );
indsped.setkey( 1 );
indsped.put( "TIPOCF", _tipocf );
indsped.put( "CODCF", _codcf );
indsped.put( "CODIND", atoi( codindsp ) );
if( indsped.read( ) != NOERR )
yesnofatal_box( "Indirizzo di spedizione non trovato!" );
m.set( F_RAGSOCSP, indsped.get( "RAGSOC" ) );
m.set( F_INDSP, indsped.get( "INDIR" ) );
m.set( F_CIVSP, indsped.get( "CIV" ) );
m.set( F_LOCALITASP, indsped.get( "LOCALITA" ) );
m.set( F_CAPSP, indsped.get( "CAP" ) );
m.set( F_COMSP, indsped.get( "COM" ) );
m.set( F_STATOSP, stato = indsped.get( "STATO" ) );
}
}
if ( !stato.blank( ) )
m.set( F_DESSTATOSP, get( "%STA", stato, "S0" ) );
TLocalisamfile comuni(LF_COMUNI);
comuni.setkey( 1 );
comuni.put( "COM", m.get( F_COMSP ) );
comuni.put( "STATO", m.get( F_STATOSP ) );
comuni.read( );
m.set( F_DENCOMSP, comuni.get( "DENCOM" ) );
m.set( F_PROVCOMSP, comuni.get( "PROVCOM" ) );
}

View File

@ -1,70 +1,72 @@
#ifndef __TCLIFOR_H
#define __TCLIFOR_H
#ifndef __CHECKS_H
#include <checks.h>
#endif
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
#ifndef __MASK_H
#include <mask.h>
#endif
class TData_picker : public TRelation
{
private:
TTable* _table;
TString16 _tablename;
public:
TData_picker( const int mainfile ) : TRelation ( mainfile ) { }
const TString& get( const TString& table, const TString& codtab, const TString& field );
const TString& get( const int file, const TString& fieldname );
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 );
bool present( TMask& m, const int mskfield ){ return ( m.id2pos( mskfield ) >= 0 ); }
void set( TMask& m, const int mskfield, const int file, const TString& filefield ){ set( m, mskfield, get( file, filefield ) ); };
void set( TMask& m, const int mskfield, const TString& value );
void show( TMask& m, const int mskfield, const bool show = TRUE ){ if( present( m, mskfield ) ) m.show( mskfield, show ); };
void hide( TMask& m, const int mskfield ){ show( m, mskfield, FALSE ); };
};
class TCliFor : public TData_picker
{
private:
char _tipocf;
long _codcf;
bool _occas;
TMask _occas_mask;
public:
TCliFor( );
void load( const char tipocf, const long codcf, const TString& ocfpi );
bool occasionale( ){ return get_bool( LF_CLIFO, "OCCAS" ); };
TMask& occas_mask( ){ return _occas_mask; };
static bool occas_code_handler(TMask_field& f, KEY key);
int write_occas( );
void edita_occasionale( );
};
class TCliForVendite : public TCliFor
{
public:
void update_mask( TMask& m, bool onload = FALSE );
};
#endif
#ifndef __TCLIFOR_H
#define __TCLIFOR_H
#ifndef __CHECKS_H
#include <checks.h>
#endif
#ifndef __RELATION_H
#include <relation.h>
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
#ifndef __TMASKVEN_H
#include "tmaskven.h"
#endif
class TData_picker : public TRelation
{
private:
TTable* _table;
TString16 _tablename;
public:
TData_picker( const int mainfile ) : TRelation ( mainfile ) { }
const TString& get( const TString& table, const TString& codtab, const TString& field );
const TString& get( const int file, const TString& fieldname );
int get_int( const int file, const TString& fieldname );
long get_long( const int file, const TString& fieldname );
bool get_bool( const int file, const TString& fieldname );
void set( TMask_vendite& m, const int mskfield, const int file, const TString& filefield ){ m.set( mskfield, get( file, filefield ) ); };
};
class TCliFor : public TData_picker
{
private:
bool _occas;
TMask _occas_mask;
protected:
char _tipocf;
long _codcf;
public:
TCliFor( );
void load( const char tipocf, const long codcf, const TString& ocfpi );
bool occasionale( ){ return get_bool( LF_CLIFO, "OCCAS" ); };
TMask& occas_mask( ){ return _occas_mask; };
static bool occas_code_handler(TMask_field& f, KEY key);
int write_occas( );
void edita_occasionale( );
};
class TCliForVendite : public TCliFor
{
public:
void update_mask( TMask_vendite& m, bool onload = FALSE );
void imposta_dati_comune( TMask_vendite& m );
void imposta_indirizzo_spedizione( TMask_vendite& m );
};
#endif

View File

@ -73,7 +73,7 @@ TIPOCF = 2
CODCF = 3
RAGSOC = 2
OCCAS = 0
OCFPI = 0
OCFPI = 1
COFI = 1
STATOPAIV = 1
PAIVA = 1
@ -177,6 +177,7 @@ DESUMPNETTO = 2
DESUMTARA = 2
DESCRMAG1 = 2
DESCRMAG2 = 2
OCCASEDIT = 2
[SHEET]
NCOLS=4
@ -208,6 +209,23 @@ NHANDLER=0
[PROFILOGRUPPO]
=
1000 = 0
2000 = 0
1400 = 0
2400 = 0
1800 = 0
2800 =
1100 = 0
2100 = 0
1500 = 0
2500 = 0
1900 = 0
2900 =
1200 = 0
2200 = 0
29 =
1600 = 0
2600 = 0
101 = 0
100 = 2
200 = 2
@ -215,24 +233,11 @@ NHANDLER=0
400 = 2
500 = 2
600 = 2
1300 = 0
700 = 2
2300 = 0
800 = 2
900 = 2
1000 = 2
1100 = 2
1200 = 2
1300 = 2
1400 = 2
1500 = 2
1600 = 2
1700 = 2
1800 = 2
1900 = 2
2000 = 2
2100 = 2
2200 = 2
2300 = 2
2400 = 2
2500 = 2
2600 = 2
1700 = 0
2700 =

File diff suppressed because it is too large Load Diff

View File

@ -14,4 +14,5 @@
#define NO_DOC_STATUS -2
#define F_SHEET 500
#define F_MEMORIGA 501
#define BASE_PIEDE 600

View File

@ -1,95 +1,125 @@
// Handler di marco sui campi delle maschere
#ifndef __CHECKS_H
#include <checks.h>
#endif
#ifndef __MASK_H
#include <mask.h>
#endif
#ifndef __MASKFLD_H
#include <maskfld.h>
#endif
#ifndef __KEYS_H
#include <keys.h>
#endif
#ifndef __STRINGS_H
#include <strings.h>
#endif
#ifndef __VEUML_H
#include "VeUML.h"
#endif
#ifndef __VEUML1_H
#include "VeUML1.h"
#endif
#ifndef __VE0100C_H
#include "ve0100c.h"
#endif
bool ora_hndl(TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
TFixed_string ora(field.get(),6);
ora.trim();
if (ora.not_empty() || field.required())
{
// bool changed = FALSE;
if (isdigit(ora[0]))
{
if (ora[2] != ':')
{
if (ora.len()>4) ora.overwrite(":",2);
else ora.insert(":", 2);
// changed = TRUE;
}
}
bool ok;
ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4])));
ok &= ((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60));
if (!ok)
{
error_box("Ora errata o formato non valido");
return FALSE;
}
else /* if (changed) */
{
field.set((ora));
// field.picture_data((ora),TRUE);
// field.picture_data((ora.strip(":")),FALSE);
}
}
}
}
return TRUE;
}
bool codcli_hndl(TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
field.send_key(K_TAB,F_CODVAL);
field.send_key(K_TAB,F_CODLIN);
field.send_key(K_TAB,F_CODPAG);
field.send_key(K_TAB,F_CODABIA);
field.send_key(K_TAB,F_CODCABA);
field.send_key(K_TAB,F_INDSP);
}
}
return TRUE;
}
bool dummy_hndl(TMask_field& field, KEY key)
{
warning_box("Al campo %d è arrivato un KEY %d",field.dlg(),key);
return TRUE;
}
// Handler di marco sui campi delle maschere
#ifndef __CHECKS_H
#include <checks.h>
#endif
#ifndef __MASK_H
#include <mask.h>
#endif
#ifndef __MASKFLD_H
#include <maskfld.h>
#endif
#ifndef __KEYS_H
#include <keys.h>
#endif
#ifndef __STRINGS_H
#include <strings.h>
#endif
#ifndef __VEUML_H
#include "VeUML.h"
#endif
#ifndef __VEUML1_H
#include "VeUML1.h"
#endif
#ifndef __VE0100C_H
#include "ve0100c.h"
#endif
#ifndef __PAGAMENT_H
#include "..\cg\pagament.h"
#endif
bool ora_hndl(TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
TFixed_string ora(field.get(),6);
ora.trim();
if (ora.not_empty() || field.required())
{
// bool changed = FALSE;
if (isdigit(ora[0]))
{
if (ora[2] != ':')
{
if (ora.len()>4) ora.overwrite(":",2);
else ora.insert(":", 2);
// changed = TRUE;
}
}
bool ok;
ok = ((isdigit(ora[0]))&&(isdigit(ora[1]))&&(isdigit(ora[3]))&&(isdigit(ora[4])));
ok &= ((atoi(&(ora[0]))<24)&&(atoi(&(ora[3]))<60));
if (!ok)
{
error_box("Ora errata o formato non valido");
return FALSE;
}
else /* if (changed) */
{
field.set((ora));
// field.picture_data((ora),TRUE);
// field.picture_data((ora.strip(":")),FALSE);
}
}
}
}
return TRUE;
}
bool codcli_hndl(TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
field.send_key(K_TAB,F_CODVAL);
field.send_key(K_TAB,F_CODLIN);
field.send_key(K_TAB,F_CODPAG);
field.send_key(K_TAB,F_CODABIA);
field.send_key(K_TAB,F_CODCABA);
field.send_key(K_TAB,F_INDSP);
}
}
return TRUE;
}
bool dummy_hndl(TMask_field& field, KEY key)
{
warning_box("Al campo %d è arrivato un KEY %d",field.dlg(),key);
return TRUE;
}
bool condpag_hndl(TMask_field& field, KEY key)
{
if (key == K_TAB)
{
if (field.to_check(key))
{
TMask& m = field.mask( );
TString16 condpag( m.get( F_CODPAG ) );
TString16 data( m.get( F_DATAINSC ) );
if ( condpag.blank( ) || data.blank( ) )
return TRUE;
TPagamento pag( condpag, data );
pag.set_total( 100, 10, 10 );
pag.set_rate_auto( );
int numrate = pag.n_rate( );
for( int i = 0; i < numrate; i ++ )
m.set( F_DATASCAD1 + i, pag.data_rata( i ).string( ) );
for( ; i < 5; i ++ )
m.hide( F_DATASCAD1 + i );
}
}
return TRUE;
}

View File

@ -1,7 +1,8 @@
#define __VE0100C_H
// Handlers per i campi delle bolle
extern bool ora_hndl(TMask_field& field, KEY key);
extern bool codcli_hndl(TMask_field& field, KEY key);
extern bool dummy_hndl(TMask_field& field, KEY key);
#define __VE0100C_H
// Handlers per i campi delle bolle
extern bool ora_hndl(TMask_field& field, KEY key);
extern bool codcli_hndl(TMask_field& field, KEY key);
extern bool dummy_hndl(TMask_field& field, KEY key);
extern bool condpag_hndl(TMask_field& field, KEY key);

View File

@ -1,67 +1,115 @@
#include <xvt.h>
#ifndef __CHECKS_H
#include <checks.h>
#endif
#ifndef __CONFAPP_H
#include <confapp.h>
#endif
#ifndef __EXECP_H
#include <execp.h>
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
// #include "ve5.h"
class Conf_vendite_app : public TConfig_application
{
public:
virtual bool preprocess_config (TMask& mask, TConfig& config);
virtual bool postprocess_config (TMask& mask, TConfig& config);
Conf_vendite_app() : TConfig_application(CONFIG_DITTA) {}
virtual ~Conf_vendite_app() {}
};
bool Conf_vendite_app::preprocess_config (TMask& mask, TConfig& config)
{
disable_menu_item(M_FILE_NEW);
disable_menu_item(M_FILE_REVERT);
return TRUE;
}
bool Conf_vendite_app::postprocess_config(TMask& mask, TConfig& config)
{ TExternal_app *cl;
TTable t("TIP");
t.first();
while( ! t.eof() )
{
TString s( "Eseguirò \"vegenmsk " );
s << t.get( "S1" );
s << "\"!";
message_box( s );
s = "vegenmsk ";
s << t.get( "S1" );
cl = new TExternal_app( s );
cl->run( );
delete cl;
t.next();
}
enable_menu_item(M_FILE_NEW);
enable_menu_item(M_FILE_REVERT);
return TRUE;
}
int ve0200(int argc, char** argv)
{
Conf_vendite_app appc;
appc.run(argc, argv, "Parametri gestione vendite");
return 0;
}
#include <xvt.h>
#ifndef __CHECKS_H
#include <checks.h>
#endif
#ifndef __CONFAPP_H
#include <confapp.h>
#endif
#ifndef __EXECP_H
#include <execp.h>
#endif
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
class TConf_vendite : public TConfig_application
{
private:
bool _changed;
public:
virtual bool preprocess_config (TMask& mask, TConfig& config);
virtual bool postprocess_config_changed (const char* par, const char* var,
const char* oldv, const char* newv);
virtual bool postprocess_config (TMask& mask, TConfig& config);
virtual bool user_create( );
virtual bool user_destroy( );
TConf_vendite() : TConfig_application( CONFIG_DITTA ){ }
virtual ~TConf_vendite( ){ }
};
bool TConf_vendite::preprocess_config (TMask& mask, TConfig& config)
{
disable_menu_item(M_FILE_NEW);
disable_menu_item(M_FILE_REVERT);
return TRUE;
}
bool TConf_vendite::postprocess_config (TMask& mask, TConfig& config)
{
_changed = FALSE;
enable_menu_item(M_FILE_NEW);
enable_menu_item(M_FILE_REVERT);
return TRUE;
}
bool TConf_vendite::postprocess_config_changed (const char* par, const char* var,
const char* oldv, const char* newv)
{
// Notifica al motore che la configurazione è cambiata: occorre rigenerare le maschere
_changed = TRUE;
return TRUE;
}
bool TConf_vendite::user_create( )
{
char msk = argv(2)[0];
// Devo usare un puntatore così deletandolo si registra
TConfig confditta( CONFIG_DITTA );
switch( msk )
{
case 'a':
case 'A':
confditta.set( "EdMask", "ve0200a" "ve" );
break;
case 'b':
case 'B':
confditta.set( "EdMask", "ve0200b" "ve" );
break;
case 'c':
case 'C':
confditta.set( "EdMask", "ve0200c" "ve" );
break;
case 'd':
case 'D':
confditta.set( "EdMask", "ve0200d" "ve" );
break;
case 'e':
case 'E':
confditta.set( "EdMask", "ve0200e" "ve" );
break;
default:
fatal_box( "Sintassi: VE0 -2 [a|b|c|d|e]" );
return FALSE;
break;
}
return TRUE;
}
bool TConf_vendite::user_destroy( )
{
if( _changed )
{
TConfig confditta( CONFIG_DITTA );
confditta.set( "EdMask", "", "ve" );
confditta.set( "CHANGED", "X", "ve" );
}
return TRUE;
}
int ve0200(int argc, char** argv)
{
TConf_vendite appc;
if( argc < 3 )
fatal_box( "Sintassi: VE0 -2 [a|b|c|d|e]" );
appc.run(argc, argv, "Parametri gestione vendite");
return 0;
}

270
ve/ve0200a.uml Executable file
View File

@ -0,0 +1,270 @@
/* toolbar */
#include "ve0200b.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 14
GROUPBOX DLG_NULL 78 15
BEGIN
PROMPT 0 0 "Gestione listini/contratti/campagne 1/2"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 2 "Cumula articolo/listino/listino"
FIELD CUMULAALC
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 3 "Gestione archivio listini"
MESSAGE FALSE DISABLE,1@
MESSAGE TRUE ENABLE,1@
FIELD GESLIS
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 4 "Gestione codice categoria vendite+codice listino"
FIELD GESLISCV
GROUP 1
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 5 "Gestione listini per unita di misura"
FIELD GESLISUM
GROUP 1
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Gestione listino a scaglioni"
FIELD GESLISSCA
GROUP 1
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 7 "Gestione sconti/omaggio articoli"
FIELD GESLISSO
GROUP 1
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 9 "Gestione archivio contratti"
MESSAGE FALSE DISABLE,2@
MESSAGE TRUE ENABLE,2@
FIELD GESCON
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 10 "Gestione codice contratto"
FIELD GESCONCC
GROUP 2
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 11 "Gestione contratti per unita di misura"
FIELD GESCONUM
GROUP 2
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 12 "Gestione contratto a scaglioni"
FIELD GESCONSCA
GROUP 2
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 13 "Gestione sconti/omaggio articoli"
FIELD GESCONSO
GROUP 2
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 14
GROUPBOX DLG_NULL 78 15
BEGIN
PROMPT 0 0 "Gestione listini/contratti/campagne 2/2"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 2 "Gestione archivio campagne"
MESSAGE TRUE ENABLE,3@
MESSAGE FALSE DISABLE,3@
FIELD GESCAM
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 3 "Gestione campagne per unita di misura"
FIELD GESCAMUM
GROUP 3
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 4 "Gestione campagne a scaglioni"
FIELD GESCAMSCA
GROUP 3
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 5 "Gestione sconti/omaggio articoli"
FIELD GESCAMSO
GROUP 3
END
LIST DLG_NULL 40
BEGIN
PROMPT 2 7 "Sequenza di ricerca righe"
ITEM "A|Codice articolo"
ITEM "L|Codice linea"
ITEM "C|Codice linea/categoria"
ITEM "R|Codice raggruppamento fiscale"
ITEM " | "
FIELD SEQRICRIGHE[ 1 ]
END
LIST DLG_NULL 40
BEGIN
PROMPT 2 8 " "
ITEM "A|Codice articolo"
ITEM "L|Codice linea"
ITEM "C|Codice linea/categoria"
ITEM "R|Codice raggruppamento fiscale"
ITEM " | "
FIELD SEQRICRIGHE[ 2 ]
END
LIST DLG_NULL 40
BEGIN
PROMPT 2 9 " "
ITEM "A|Codice articolo"
ITEM "L|Codice linea"
ITEM "C|Codice linea/categoria"
ITEM "R|Codice raggruppamento fiscale"
ITEM " | "
FIELD SEQRICRIGHE[ 3 ]
END
LIST DLG_NULL 40
BEGIN
PROMPT 2 10 " "
ITEM "A|Codice articolo"
ITEM "L|Codice linea"
ITEM "C|Codice linea/categoria"
ITEM "R|Codice raggruppamento fiscale"
ITEM " | "
FIELD SEQRICRIGHE[ 4 ]
END
ENDPAGE
PAGE "Tabella gestione sconti " 1 1 60 14
GROUPBOX DLG_NULL 78 10
BEGIN
PROMPT 0 0 "Gestione Sconti"
END
LIST DLG_NULL 36
BEGIN
PROMPT 2 1 "Tipo gestione sconti documenti "
ITEM "N|Non gestire"
ITEM "P|Percentuale su anagrafica "
ITEM "T|Gestione tabella sconti "
ITEM "A|Gestione archivio sconti "
FIELD GESSCO
END
LIST DLG_NULL 36
BEGIN
PROMPT 2 2 "Chiave archivio sconti "
ITEM "V|Tab. categorie vendite "
ITEM "C|Tab. sconti clienti "
ITEM "Z|Tab. zone "
ITEM "M|Tab. modalità di pagamento "
FIELD SCOKEY
END
LIST DLG_NULL 36
BEGIN
PROMPT 2 3 "Tipo calcolo sconti documento "
ITEM "R|Sconti sulle righe merci "
ITEM "G|Sconti sul valore globale merci "
FIELD SCOTIPCAL
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 4 "Gestione sconti ad importo "
FIELD GESSCOIMP
END
LIST DLG_NULL 36
BEGIN
PROMPT 2 5 "Tipo gestione sconti riga "
ITEM "N|Non gestire"
ITEM "L|Perc. su anagrafica/listini/contratti "
ITEM "A|Gest. arch. sconti "
ITEM "V|Gest. arch. con cat. vendita cliente "
ITEM "C|Perc. indicata su anagrafica cliente "
FIELD GESSCORIGA
END
LIST DLG_NULL 36
BEGIN
PROMPT 2 6 "Chiave archivio sconti di riga "
ITEM "A|Codice articolo "
ITEM "L|Codice linea "
ITEM "C|Codice linea/categoria "
ITEM "R|Codice raggruppamento fiscale "
FIELD
SCORIGAKEY
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 7 "Gestione archivio sconti a scaglioni "
GESSCOSCA
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 8 "Gestione archivio sconti unità di misura "
GESSCOUM
END
ENDPAGE
ENDMASK

12
ve/ve0200b.h Executable file
View File

@ -0,0 +1,12 @@
#define F_TIPOPERC 101
#define F_GESARCHPROV 102
#define F_ARCHPROV1 103
#define F_ARCHPROV2 104
#define F_ARCHPROV3 105
#define F_ARCHPROV4 106
#define F_TIPOLIQPROV 107
#define F_GESVAL 108
#define F_GESLIN 109
#define F_GESSOSPIMP 110
#define F_GESOCCAS 111
#define F_GESOCCHK 112

509
ve/ve0200b.uml Executable file
View File

@ -0,0 +1,509 @@
/* toolbar */
#include "ve0200b.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 14
GROUPBOX DLG_NULL 78 10
BEGIN
PROMPT 0 0 "Gestione degli agenti"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Gestione agenti "
MESSAGE FALSE DISABLE,8@
MESSAGE TRUE ENABLE,8@
FIELD GESAGE
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 2 "Gestione subagenti "
FIELD GESSUBAGE
GROUP 8
END
LIST F_TIPOPERC 33
BEGIN
FIELD AGETIPOPERC
PROMPT 2 3 "Tipo percentuale da proporre "
ITEM "V|Tab. categorie vendite agenti "
ITEM "A|Tab. agenti "
ITEM "C|Archivio clienti "
ITEM "L|Archivio listini o contratti "
ITEM "P|Provvigioni sulla tabella agenti "
GROUP 1
END
BOOLEAN F_GESARCHPROV
BEGIN
PROMPT 2 4 "Gestione archivio provvigioni "
FIELD AGEARCPROVV
GROUP 1
END
STRING F_ARCHPROV1 4
BEGIN
PROMPT 2 5 "Chiavi archivio provvigioni "
FIELD AGEKEYPROVV[1]
GROUP 1
END
STRING F_ARCHPROV2 4
BEGIN
PROMPT 2 6 " "
FIELD AGEKEYPROVV[2]
GROUP 1
END
STRING F_ARCHPROV3 4
BEGIN
PROMPT 2 7 " "
FIELD AGEKEYPROVV[3]
GROUP 1
END
STRING F_ARCHPROV4 4
BEGIN
PROMPT 2 8 " "
FIELD AGEKEYPROVV[4]
GROUP 1
END
LIST F_TIPOLIQPROV 41
BEGIN
PROMPT 2 9 "Tipo liquidazione provvigione "
ITEM "F|Liquidate sul valore del fatturato "
ITEM "M|Liq. sul valore fatt. e sul valore merce "
FIELD AGELIQPROVV
GROUP 1
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 14
GROUPBOX DLG_NULL 78 10
BEGIN
PROMPT 0 0 "Gestione dati generali"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 2 "Gestione documenti in valuta"
MESSAGE TRUE ENABLE,@7
MESSAGE FALSE DISABLE,@7
FIELD GESVAL
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 3 "Gestione archivio cambi "
FIELD GESVALAC
END
BOOLEAN F_GESLIN
BEGIN
PROMPT 2 4 "Gestione documenti in lingua"
FIELD GESLIN
END
BOOLEAN F_GESSOSPIMP
BEGIN
PROMPT 2 6 "Gestione documenti in sospensione di imposta"
FIELD GESSOSPIMP
END
BOOLEAN F_GESOCCAS
BEGIN
PROMPT 2 8 "Gestione archivio clienti occasionali"
FIELD GESOCCAS
MESSAGE FALSE DISABLE,F_GESOCCHK
END
BOOLEAN F_GESOCCHK
BEGIN
PROMPT 2 10 "Controllo p.iva/cod.fiscale cliente occasionale"
FIELD GESOCCCHK
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 2
GROUPBOX DLG_NULL 78 16
BEGIN
PROMPT 0 0 "Etichette totalizzatori piede documento 1/4"
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 2 " 1:"
FIELD PIEDE[ 1]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 3 " 2:"
FIELD PIEDE[ 2]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 4 " 3:"
FIELD PIEDE[ 3]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 5 " 4:"
FIELD PIEDE[ 4]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 6 " 5:"
FIELD PIEDE[ 5]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 7 " 6:"
FIELD PIEDE[ 6]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 8 " 7:"
FIELD PIEDE[ 7]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 9 " 8:"
FIELD PIEDE[ 8]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 10 " 9:"
FIELD PIEDE[ 9]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 11 "10:"
FIELD PIEDE[10]
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 2
GROUPBOX DLG_NULL 78 16
BEGIN
PROMPT 0 0 "Etichette totalizzatori piede documento 2/4"
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 2 "11:"
FIELD PIEDE[11]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 3 "12:"
FIELD PIEDE[12]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 4 "13:"
FIELD PIEDE[13]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 5 "14:"
FIELD PIEDE[14]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 6 "15:"
FIELD PIEDE[15]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 7 "16:"
FIELD PIEDE[16]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 8 "17:"
FIELD PIEDE[17]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 9 "18:"
FIELD PIEDE[18]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 10 "19:"
FIELD PIEDE[19]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 11 "20:"
FIELD PIEDE[20]
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 2
GROUPBOX DLG_NULL 78 16
BEGIN
PROMPT 0 0 "Etichette totalizzatori piede documento 3/4"
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 2 "21:"
FIELD PIEDE[21]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 3 "22:"
FIELD PIEDE[22]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 4 "23:"
FIELD PIEDE[23]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 5 "24:"
FIELD PIEDE[24]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 6 "25:"
FIELD PIEDE[25]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 7 "26:"
FIELD PIEDE[26]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 8 "27:"
FIELD PIEDE[27]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 9 "28:"
FIELD PIEDE[28]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 10 "29:"
FIELD PIEDE[29]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 11 "30:"
FIELD PIEDE[30]
END
ENDPAGE
PAGE "Tabelle di installazione" 1 1 60 2
GROUPBOX DLG_NULL 78 16
BEGIN
PROMPT 0 0 "Etichette totalizzatori piede documento 4/4"
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 2 "31:"
FIELD PIEDE[31]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 3 "32:"
FIELD PIEDE[32]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 4 "33:"
FIELD PIEDE[33]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 5 "34:"
FIELD PIEDE[34]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 6 "35:"
FIELD PIEDE[35]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 7 "36:"
FIELD PIEDE[36]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 8 "37:"
FIELD PIEDE[37]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 9 "38:"
FIELD PIEDE[38]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 10 "39:"
FIELD PIEDE[39]
END
STRING DLG_NULL 40
BEGIN
PROMPT 2 11 "40:"
FIELD PIEDE[40]
END
ENDPAGE
PAGE "Tabella arrotondamenti " 1 1 60 14
GROUPBOX DLG_NULL 78 9
BEGIN
PROMPT 0 0 "Dati anagrafici ditta "
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 1 "Arrot. prezzi: fino a lire "
FIELD ARRLIV[ 1 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 1 ""
FIELD ARRARG[ 1 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 2 ""
FIELD ARRLIV[ 2 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 2 ""
FIELD ARRARG[ 2 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 3 ""
FIELD ARRLIV[ 3 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 3 ""
FIELD ARRARG[ 3 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 4 ""
FIELD ARRLIV[ 4 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 4 ""
FIELD ARRARG[ 4 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 5 ""
FIELD ARRLIV[ 5 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 5 ""
FIELD ARRARG[ 5 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 6 ""
FIELD ARRLIV[ 6 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 6 ""
FIELD ARRARG[ 6 ]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 7 "oltre "
FIELD ARRARG[ 7 ]
END
ENDPAGE
ENDMASK

130
ve/ve0200c.uml Executable file
View File

@ -0,0 +1,130 @@
/* toolbar */
#include "ve0200b.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Tabella gestione sconto a percentuale " 1 1 60 14
GROUPBOX DLG_NULL 78 9
BEGIN
PROMPT 0 0 "Gestione spese/sconti "
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 1 "Codice tabella sconto cliente "
FIELD SCOPRCOD
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SCOPRCODCON[1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
FIELD SCOPRCODCON[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
FIELD SCOPRCODCON[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
FIELD SCOPRNPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
ENDPAGE
PAGE "Tabella gestione sconto ad importo " 1 1 60 14
GROUPBOX DLG_NULL 78 9
BEGIN
PROMPT 0 0 "Gestione sconto ad importo "
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 1 "Codice tabella sconto ad importo "
FIELD SCOIMCOD
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SCOIMCODCON[1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
FIELD SCOIMCODCON[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
FIELD SCOIMCODCON[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
FIELD SCOIMNPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
ENDPAGE
ENDMASK

630
ve/ve0200d.uml Executable file
View File

@ -0,0 +1,630 @@
/* toolbar */
#include "ve0200b.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Tabella gestione spese d'incasso " 1 1 60 14
GROUPBOX DLG_NULL 78 17
BEGIN
PROMPT 0 0 "Gestione spese d'incasso"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Addebito spese d'incasso "
FIELD SPINADD
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 2 "Codice tabelle spese "
FIELD SPINCODSP
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 4 "Cod. Iva "
FIELD SPINCODIVA
END
STRING DLG_NULL 26
BEGIN
PROMPT 29 4 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SPINCODCON[ 1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
FIELD SPINCODCON[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
FIELD SPINCODCON[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Incasso prima rata "
FIELD SPININCPR
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
FIELD SPINNPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 8 "Importo spese per rimesse dirette "
FIELD SPINIMRD
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 9 "Importo spese per tratte "
FIELD SPINIMTR
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 10 "Importo spese per ricevute bancarie "
FIELD SPINIMRB
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 11 "Importo spese per cessioni "
FIELD SPINIMCES
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 12 "Importo spese per pagherò "
FIELD SPINIMPAG
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 12 "Importo spese per lettere di credito "
FIELD SPINIMLET
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 13 "Importo spese per tratte accettate "
FIELD SPINIMTA
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 14 "Importo spese per R.I.D. "
FIELD SPINIMRID
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 15 "Importo spese per bonifici "
FIELD SPINIMBON
END
ENDPAGE
PAGE "Tabella gestione spese d'incasso " 1 1 60 14
GROUPBOX DLG_NULL 78 19
BEGIN
PROMPT 0 0 "Gestione spese bolli ricevute bancarie"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Addebito spese bolli ricevute bancarie "
FIELD SPBRBADD
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 2 "Codice tabelle spese "
FIELD SPBRBCODSP
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 4 "Cod. Iva "
FIELD SPBRBCODIVA
END
STRING DLG_NULL 26
BEGIN
PROMPT 29 4 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SPBRBCODCONT[1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
FIELD SPBRBCODCONT[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
FIELD SPBRBCODCONT[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Incasso prima rata "
FIELD SPBRBINCPR
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
FIELD SPBRBNPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 8 "Scaglione "
FIELD SPBRBSCA[1]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 8 "Importo "
FIELD SPBRBIMP[1]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 9 "Scaglione "
FIELD SPBRBSCA[2]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 9 "Importo "
FIELD SPBRBIMP[2]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 10 "Scaglione "
FIELD SPBRBSCA[3]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 10 "Importo "
FIELD SPBRBIMP[3]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 11 "Scaglione "
FIELD SPBRBSCA[4]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 11 "Importo "
FIELD SPBRBIMP[4]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 12 "Scaglione "
FIELD SPBRBSCA[5]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 12 "Importo "
FIELD SPBRBIMP[5]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 13 "Scaglione "
FIELD SPBRBSCA[6]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 13 "Importo "
FIELD SPBRBIMP[6]
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 2 14 "Scaglione "
FIELD SPBRBSCA[7]
END
NUMBER DLG_NULL 6
BEGIN
PROMPT 25 14 "Importo "
FIELD SPBRBIMP[7]
END
STRING DLG_NULL 5
BEGIN
PROMPT 2 15 "Importo minimo R.B./1000 "
FIELD SPBRBIMPMINRB
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 16 "Cod. pag. alternativo "
FIELD SPBRBCODPAGALT
END
STRING DLG_NULL 30
BEGIN
PROMPT 36 16 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 17 "Classif. pag. RB a richiesta "
FIELD SPBRBCLAPAGRB
END
STRING DLG_NULL 30
BEGIN
PROMPT 36 17 ""
END
ENDPAGE
PAGE "Tabella gestione spese d'incasso " 1 1 60 14
GROUPBOX DLG_NULL 78 11
BEGIN
PROMPT 0 0 "Gestione bolli fatture esenti"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Addebito bolli fatture esenti "
FIELD SPBFEADD
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 2 "Codice tabelle spese "
FIELD SPBFECODSP
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 4 "Cod. Iva "
FIELD SPBFECODIVA
END
STRING DLG_NULL 26
BEGIN
PROMPT 29 4 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SPBFECODCONT[1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
FIELD SPBFECODCONT[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
FIELD SPBFECODCONT[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Incasso prima rata "
FIELD SPBFEINCPR
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
FIELD SPBFENPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
STRING DLG_NULL 9
BEGIN
PROMPT 2 8 "Importo minimo fattura "
FIELD SPBFEIMPMINFAT
END
STRING DLG_NULL 6
BEGIN
PROMPT 2 9 "Importo bollo "
FIELD SPBFEIMPBOLLO
END
ENDPAGE
PAGE "Tabella gestione bolli tratte Italia " 1 1 60 14
GROUPBOX DLG_NULL 78 14
BEGIN
PROMPT 0 0 "Gestione bolli su tratte Italia"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Addebito bolli su tratte Italia "
FIELD SPTRADD
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 2 "Codice tabelle spese "
FIELD SPTRCODSP
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 4 "Cod. Iva "
FIELD SPTRCODIVA
END
STRING DLG_NULL 26
BEGIN
PROMPT 29 4 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SPTRCODCON[1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
FIELD SPTRCODCON[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
FIELD SPTRCODCON[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Incasso prima rata "
FIELD SPTRINCPR
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
FIELD SPTRNPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
NUMBER DLG_NULL 5 2
BEGIN
PROMPT 2 8 "Percentuale spese tratte "
FIELD SPTRPERCSPTR
END
STRING DLG_NULL 5
BEGIN
PROMPT 2 9 "Importo minimo bollo "
FIELD SPTRIMPMINBOL
END
STRING DLG_NULL 5
BEGIN
PROMPT 2 10 "Importo minimo tratte /1000 "
FIELD SPTRIMPMINTR
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 11 "Condizione pagam. alternativa "
FIELD SPTRCODPAGALT
END
STRING DLG_NULL 30
BEGIN
PROMPT 42 11 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 12 "Classif. pagamento TR a richiesta "
FIELD SPTRCLASPAG
END
STRING DLG_NULL 30
BEGIN
PROMPT 42 12 ""
END
ENDPAGE
PAGE "Tabella gestione bolli tratte estero " 1 1 60 14
GROUPBOX DLG_NULL 78 10
BEGIN
PROMPT 0 0 "Gestione spese tratta estera"
END
STRING DLG_NULL 3
BEGIN
PROMPT 2 1 "Codice tabella spesa tratta estera "
FIELD SPTECODSP
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 2 "Descrizione "
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 3 "Cod. Iva "
FIELD SPTECODIVA
END
STRING DLG_NULL 26
BEGIN
PROMPT 29 3 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 4 "Cod. contabilità "
FIELD SPTECODCON[1,2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 4 ""
FIELD SPTECODCON[3,4]
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 4 ""
FIELD SPTECODCON[5,10]
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 4 ""
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 5 "Incasso prima rata "
FIELD SPTEINCPR
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 6 "Num. campo piede documento "
FIELD SPTENPIEDE
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 6 ""
END
NUMBER DLG_NULL 5 2
BEGIN
PROMPT 2 7 "Percentuale spese tratte "
FIELD SPTEPERCSPTR
END
STRING DLG_NULL 5
BEGIN
PROMPT 2 8 "Importo minimo bollo "
FIELD SPTEIMPMINBOL
END
ENDPAGE
ENDMASK

305
ve/ve0200e.uml Executable file
View File

@ -0,0 +1,305 @@
/* toolbar */
#include "ve0200b.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Tabella descrizione codice articolo " 1 1 60 14
GROUPBOX DLG_NULL 78 18
BEGIN
PROMPT 0 0 "Personalizzazione procedura"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 1 "Descr. Cod. "
END
TEXT DLG_NULL
BEGIN
PROMPT 14 1 "Descrizione "
END
TEXT DLG_NULL
BEGIN
PROMPT 48 1 "Lungh. campi "
END
TEXT DLG_NULL
BEGIN
PROMPT 63 1 "Tipo campi "
END
TEXT DLG_NULL
BEGIN
PROMPT 2 2 "Cod. art. "
END
STRING DLG_NULL 30
BEGIN
PROMPT 14 2 ""
FIELD CODARTDES
END
STRING DLG_NULL 2
BEGIN
PROMPT 48 2 ""
FIELD CODARTLUN[1]
END
STRING DLG_NULL 2
BEGIN
PROMPT 52 2 ""
FIELD CODARTLUN[2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 56 2 ""
FIELD CODARTLUN[3]
END
STRING DLG_NULL 2
BEGIN
PROMPT 63 2 ""
FIELD CODARTPIC[1]
END
STRING DLG_NULL 2
BEGIN
PROMPT 67 2 ""
FIELD CODARTPIC[2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 71 2 ""
FIELD CODARTPIC[3]
END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "I° indice "
END
STRING DLG_NULL 30
BEGIN
PROMPT 14 3 ""
FIELD INDARTDES[1]
END
STRING DLG_NULL 2
BEGIN
PROMPT 48 3 ""
FIELD INDARTLUN[1]
END
STRING DLG_NULL 2
BEGIN
PROMPT 63 3 ""
FIELD INDARTPIC[1]
END
TEXT DLG_NULL
BEGIN
PROMPT 2 4 "II° indice "
END
STRING DLG_NULL 30
BEGIN
PROMPT 14 4 ""
FIELD INDARTDES[2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 48 4 ""
FIELD INDARTLUN[2]
END
STRING DLG_NULL 2
BEGIN
PROMPT 63 4 ""
FIELD INDARTPIC[2]
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Gestione articoli in lingua "
FIELD ARTGESLIN
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 7 "Codice lingua n.1 "
FIELD ARTCODLIN[1]
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 8 "Codice lingua n.2 "
FIELD ARTCODLIN[2]
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 9 "Codice lingua n.3 "
FIELD ARTCODLIN[3]
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 10 "Codice lingua n.4 "
FIELD ARTCODLIN[4]
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 11 "Gestione più magazzini "
FIELD ARTGESMAG
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 12 "Gestione depositi "
FIELD ARTGESDEP
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 13 "Gestione commesse "
FIELD ARTGESCOMM
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 14 "Gestione quantità in decimali "
FIELD ARTGESQDEC
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 15 "Gestione valuta "
FIELD ARTGESVAL
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 16 "Ripetizione primo indice "
FIELD ARTRIPIND
END
ENDPAGE
PAGE "Tabella personalizzazione anagrafico articoli " 1 1 60 14
GROUPBOX DLG_NULL 78 18
BEGIN
PROMPT 0 0 "Gestione archivio articoli"
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Gestione descrizioni estese "
FIELD ARTGESDESCEST
END
LIST DLG_NULL 35
BEGIN
PROMPT 2 2 "Gestione art. per lotti "
ITEM "N|Non gestire"
ITEM "D|Gestiti con lotto data "
ITEM "Q|Gestiti con lotto descr. qualità "
FIELD ARTGESLOTTI
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 3 "Gestione articoli per taglia "
FIELD ARTGESTAGLIA
END
STRING DLG_NULL 10
BEGIN
PROMPT 2 4 "Descrizione campi chiave "
FIELD ARTDESCHI[1]
END
STRING DLG_NULL 10
BEGIN
PROMPT 2 5 "Descrizione campi chiave "
FIELD ARTDESCHI[2]
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Gestione più unità di misura "
FIELD ARTGESUM
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 7 "Gestione secondo codice iva "
FIELD ARTGESCODIVA
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 8 "Gestione campi peso lordo/netto "
FIELD ARTGESPLN
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 9 "Gestione campo aspetto dei beni "
FIELD ARTGESASPBEN
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 10 "Gestione campo codice gruppo articolo "
FIELD ARTGESCODGR
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 11 "Gestione campo distinta base "
FIELD ARTGESDB
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 12 "Gestione campo categorie vendite "
FIELD ARTGESCATVEN
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 13 "Gestione campo categorie acquisti "
FIELD ARTGESCATACQ
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 14 "Gestione codice fornitore "
FIELD ARTGESCODFOR
END
ENDPAGE
ENDMASK

File diff suppressed because it is too large Load Diff

View File

@ -362,6 +362,7 @@ DISPLAY="Codice" CODTAB~"Descrizione@50" S0
OUTPUT=F_CODPAG CODTAB~F_DESCODPAG S0
WARNING=Codice tipo pagamento non trovato
HELP=Inserisci il codice del tipo di pagamento
SPECIAL=ADD RU BA3 -6
[DESCODPAG]
GROUP=400
@ -578,12 +579,12 @@ HELP=Inserisci il codice dell'indirizzo di spedizione
GROUP=900
X=24
Y=0
MSKID=F_RAGSOC
MSKID=F_RAGSOCSP
TYPE=T_STRINGA
SIZE=50
FLAG=U
USE=20 KE 2
INPUT=RAGSOC 301
INPUT=RAGSOC F_RAGSOCSP
DISPLAY="Ragione sociale@50" 20->RAGSOC~"Codice" 20->CODCF~"Indrizzo@35" 20->INDCF
SPECIAL=JO 17 TO 20 KE 1 INTO TIPOCF=TIPOCF CODCF=CODCF
WARNING=Ragione sociale non trovata

View File

@ -1,100 +1,100 @@
#include <relapp.h>
#include <config.h>
#include "ve2100.h"
class TTabelle_sconti: public TRelation_application {
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
char _sconti; // carattere che indica il tipo di tabella
short _sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
bool _sci_k_enabled[4]; // vettore di abilitazione dei campi chiave per la maschera degli sconti incondizionati
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 void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public:
TTabelle_sconti() {}
virtual ~TTabelle_sconti() {}
};
bool TTabelle_sconti::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_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
}
switch (_sconti) {
case 'D': { // sconti documento
_msk= new TMask("VE2100D"); // apre la maschera relativa
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
gotcha= TRUE;
break;
}
case 'I': { // sconti incondizionati
_msk= new TMask("VE2100I"); // apre la maschera relativa
set_search_field(F_I_RICERCA); // setta il campo di ricerca
TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta
_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 (int i=0; i<4; i++) {
if (prassid.get("K_SCONTI_INC", "ve", i).empty()) _sci_k_enabled[i]= FALSE; // se nel file di config. il campo non è abilitato, viene indicato nel vettore di abilitazione
else _sci_k_enabled[i]= gotcha= TRUE; // se c'è almeno un campo abilitato "gotcha" esce TRUE dal ciclo
}
if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
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() {
delete _rel;
delete _msk;
return TRUE;
}
void TTabelle_sconti::init_query_mode(TMask &m) {
for (int i=0; i<4; i++) {
if (_sci_k_enabled[i]) { // se il campo deve essere abilitato...
m.enable(_sci_k_id[i]); // ...lo abilita...
m.efield(_sci_k_id[i]).check_type(CHECK_REQUIRED); // ...e lo rende richiesto...
} else { // ...altrimenti...
m.disable(_sci_k_id[i]); // ...lo disabilita...
m.efield(_sci_k_id[i]).check_type(CHECK_NORMAL); // ...e lo rende non richiesto
}
}
}
int ve2100(int argc, char* argv[]) {
TTabelle_sconti a;
a.run(argc, argv, "Tabella sconti ");
return 0;
}
#include <relapp.h>
#include <config.h>
#include "ve2100.h"
class TTabelle_sconti: public TRelation_application {
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
char _sconti; // carattere che indica il tipo di tabella
short _sci_k_id[4]; // vettore degli identificatori dei campi chiave per la maschera degli sconti incondizionati
bool _sci_k_enabled[4]; // vettore di abilitazione dei campi chiave per la maschera degli sconti incondizionati
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 void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public:
TTabelle_sconti() {}
virtual ~TTabelle_sconti() {}
};
bool TTabelle_sconti::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_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
}
switch (_sconti) {
case 'D': { // sconti documento
_msk= new TMask("VE2100D"); // apre la maschera relativa
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
gotcha= TRUE;
break;
}
case 'I': { // sconti incondizionati
_msk= new TMask("VE2100I"); // apre la maschera relativa
set_search_field(F_I_RICERCA); // setta il campo di ricerca
TConfig prassid(CONFIG_DITTA); // apre il file di configurazione di ditta
_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 (int i=0; i<4; i++) {
if (prassid.get("K_SCONTI_INC", "ve", i).empty()) _sci_k_enabled[i]= FALSE; // se nel file di config. il campo non è abilitato, viene indicato nel vettore di abilitazione
else _sci_k_enabled[i]= gotcha= TRUE; // se c'è almeno un campo abilitato "gotcha" esce TRUE dal ciclo
}
if (!gotcha) error_box("Non ci sono campi chiave abilitati nella configurazione della ditta");
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() {
delete _rel;
delete _msk;
return TRUE;
}
void TTabelle_sconti::init_query_mode(TMask &m) {
for (int i=0; i<4; i++) {
if (_sci_k_enabled[i]) { // se il campo deve essere abilitato...
m.enable(_sci_k_id[i]); // ...lo abilita...
m.efield(_sci_k_id[i]).check_type(CHECK_REQUIRED); // ...e lo rende richiesto...
} else { // ...altrimenti...
m.disable(_sci_k_id[i]); // ...lo disabilita...
m.efield(_sci_k_id[i]).check_type(CHECK_NORMAL); // ...e lo rende non richiesto
}
}
}
int ve2100(int argc, char* argv[]) {
TTabelle_sconti a;
a.run(argc, argv, "Tabella sconti ");
return 0;
}

View File

@ -1,268 +1,268 @@
#include <relapp.h>
#include <config.h>
#include <tabutil.h>
#include <mailbox.h>
#include <execp.h>
#include <utility.h>
#include "ve2200.h"
#include "ve2300x.h" // include anche il file dei campi della maschera delle righe
#define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe
class TCondizioni_vendita: public TRelation_application {
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
bool _catven_on; // booleano di abilitazione del campo CATVEN
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_codlissucc(TMask_field &, KEY); // handler del campo CODLISSUCC (codice listino successivo)
static bool handle_seqric(TMask_field &, KEY); // handler del campo SEQRIC (sequenza di ricerca)
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public:
TCondizioni_vendita() {}
virtual ~TCondizioni_vendita() {}
};
TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
return (TCondizioni_vendita &)main_app();
}
bool TCondizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else {
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
}
_condven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2200X");
switch (_condven[0]) {
case 'L': { // listini
// settaggio dei campi da eliminare
_tohide.set(F_C_COD);
_tohide.set(F_O_COD);
_tohide.set(F_C_TIPOCF);
_tohide.set(F_C_CODCF);
_tohide.set(F_C_OBBLIG);
set_search_field(F_L_COD); // impostazione del campo di ricerca
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
_catven_on= (toupper(prassid.get("CATVEN_ON")[0])!='T'); // setta il booleano di abilitazione di CATVEN
_msk->set_handler(F_L_CODLISSUCC, handle_codlissucc); // setta l'handler per il campo di codice successivo
gotcha= TRUE;
break;
}
case 'C': // contratti
// settaggio dei campi da eliminare
_tohide.set(F_L_COD);
_tohide.set(F_O_COD);
_tohide.set(F_L_CATVEN);
_tohide.set(F_L_CODLISSUCC);
set_search_field(F_C_COD); // impostazione del campo di ricerca
gotcha= TRUE;
break;
case 'O': // offerte
// settaggio dei campi da eliminare
_tohide.set(F_L_COD);
_tohide.set(F_C_COD);
_tohide.set(F_L_CATVEN);
_tohide.set(F_C_TIPOCF);
_tohide.set(F_C_CODCF);
_tohide.set(F_C_OBBLIG);
_tohide.set(F_L_CODLISSUCC);
set_search_field(F_O_COD); // impostazione del campo di ricerca
gotcha= TRUE;
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
_msk->set_handler(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à
_msk->set_handler(F_SEQRIC, handle_seqric); // imposta l'handler per il campo di sequenza di ricerca
}
return (gotcha);
}
bool TCondizioni_vendita::user_destroy() {
delete _rel;
delete _msk;
return TRUE;
}
bool 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 &_catven_on= app()._catven_on; // 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 << "|"; // appende il separatore
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
body << F_R_L_CATVEN << "="; // appende il filtro sulla categoria di vendita...
if (_catven_on) body << m.get(F_L_CATVEN); // ...
body << "|"; // appende il separatore
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 << "|"; // appende il separatore
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF); // appende il filtro sul campo tipo cliente/fornitore
body << "|"; // appende il separatore
body << F_R_C_CODCF << "=" << m.get(F_C_CODCF); // appende il filtro sul campo codice cliente/fornitore
body << "|"; // appende il separatore
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 << "|"; // appende il separatore
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
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;
}
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;
} else return TRUE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
}
bool TCondizioni_vendita::handle_codlissucc(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString codlissucc(fld.get()); // prende il codice listino successivo dal campo corrente
if (codlissucc.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString cod(m.get(F_L_COD)); // prende il codice listino corrente dalla maschera
if (codlissucc == cod) {
error_box("Il codice del listino successivo deve essere diverso dal codice del listino corrente");
return FALSE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
}
bool TCondizioni_vendita::handle_seqric(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString &seqric= fld.get(); // prende la stringa contenenta la sequenza di ricerca dal campo corrente
if (seqric.not_empty()) {
bool gotcha= TRUE; // flag di validità della sequenza
for (int i=0; i<seqric.len(); i++) {
char c= toupper(seqric[i]); // prende la lettera corrente della sequenza
if ((c!='A') && (c!='G') && (c!='R')) gotcha= FALSE; // se la lettera non rientra tra quelle possibili abbassa il flag di validità
for (int j= i+1; j<seqric.len(); j++) if (c== toupper(seqric[j])) gotcha= FALSE; // se la lettera compare anche più avanti nella sequenza abbassa il flag di validitià
if (!gotcha) break; // se il flag di validità è basso esce anticipatamente
}
if (!gotcha) error_box("La sequenza di ricerca deve essere una combinazine di 'A' (Articoli), 'G' (Gruppi merceologici) e 'R' (Raggruppamenti fiscali), in cui ogni lettera compare al massimo una volta");
return (gotcha);
} else return TRUE;
} else return TRUE;
}
int TCondizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->write(); // invoca la scrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
int TCondizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->rewrite(); // invoca la riscrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
void TCondizioni_vendita::init_query_mode(TMask &m) {
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) {
if (_tohide[i]) {
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile
_msk->hide(i); // rende invisibile il campo
}
}
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
_msk->efield(F_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
_msk->disable(F_L_CATVEN); // ...e disabilitato
}
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
}
int ve2200(int argc, char* argv[]) {
TCondizioni_vendita a;
a.run(argc, argv, "Condizioni di vendita ");
return 0;
}
#include <relapp.h>
#include <config.h>
#include <tabutil.h>
#include <mailbox.h>
#include <execp.h>
#include <utility.h>
#include "ve2200.h"
#include "ve2300x.h" // include anche il file dei campi della maschera delle righe
#define RCONDVEN_APP "ve2 -2 " // nome dell'applicazione di gestione delle righe
class TCondizioni_vendita: public TRelation_application {
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
bool _catven_on; // booleano di abilitazione del campo CATVEN
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_codlissucc(TMask_field &, KEY); // handler del campo CODLISSUCC (codice listino successivo)
static bool handle_seqric(TMask_field &, KEY); // handler del campo SEQRIC (sequenza di ricerca)
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public:
TCondizioni_vendita() {}
virtual ~TCondizioni_vendita() {}
};
TCondizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
return (TCondizioni_vendita &)main_app();
}
bool TCondizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) _condven= argv(2); // se c'è, prende il tipo di archivio dalla linea di comando
else {
TMask choose("VE2200"); // istanzia la maschera di scelta del tipo di archivio
if (choose.run() == K_ENTER) _condven= choose.get(F_TIPOCV); // prende il tipo di archivio dalla maschera
}
_condven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2200X");
switch (_condven[0]) {
case 'L': { // listini
// settaggio dei campi da eliminare
_tohide.set(F_C_COD);
_tohide.set(F_O_COD);
_tohide.set(F_C_TIPOCF);
_tohide.set(F_C_CODCF);
_tohide.set(F_C_OBBLIG);
set_search_field(F_L_COD); // impostazione del campo di ricerca
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
_catven_on= (prassid.get_bool("CODLISCV")); // setta il booleano di abilitazione di CATVEN
_msk->set_handler(F_L_CODLISSUCC, handle_codlissucc); // setta l'handler per il campo di codice successivo
gotcha= TRUE;
break;
}
case 'C': // contratti
// settaggio dei campi da eliminare
_tohide.set(F_L_COD);
_tohide.set(F_O_COD);
_tohide.set(F_L_CATVEN);
_tohide.set(F_L_CODLISSUCC);
set_search_field(F_C_COD); // impostazione del campo di ricerca
gotcha= TRUE;
break;
case 'O': // offerte
// settaggio dei campi da eliminare
_tohide.set(F_L_COD);
_tohide.set(F_C_COD);
_tohide.set(F_L_CATVEN);
_tohide.set(F_C_TIPOCF);
_tohide.set(F_C_CODCF);
_tohide.set(F_C_OBBLIG);
_tohide.set(F_L_CODLISSUCC);
set_search_field(F_O_COD); // impostazione del campo di ricerca
gotcha= TRUE;
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_CONDV); // apre la relazione (un unico file)
_msk->set_handler(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à
_msk->set_handler(F_SEQRIC, handle_seqric); // imposta l'handler per il campo di sequenza di ricerca
}
return (gotcha);
}
bool TCondizioni_vendita::user_destroy() {
delete _rel;
delete _msk;
return TRUE;
}
bool 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 &_catven_on= app()._catven_on; // 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 << "|"; // appende il separatore
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
body << F_R_L_CATVEN << "="; // appende il filtro sulla categoria di vendita...
if (_catven_on) body << m.get(F_L_CATVEN); // ...
body << "|"; // appende il separatore
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 << "|"; // appende il separatore
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
body << F_R_C_TIPOCF << "=" << m.get(F_C_TIPOCF); // appende il filtro sul campo tipo cliente/fornitore
body << "|"; // appende il separatore
body << F_R_C_CODCF << "=" << m.get(F_C_CODCF); // appende il filtro sul campo codice cliente/fornitore
body << "|"; // appende il separatore
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 << "|"; // appende il separatore
body << F_R_TIPO << "=" << _condven; // appende il filtro sul tipo
body << "|"; // appende il separatore
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;
}
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;
} else return TRUE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
}
bool TCondizioni_vendita::handle_codlissucc(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString codlissucc(fld.get()); // prende il codice listino successivo dal campo corrente
if (codlissucc.not_empty()) {
TMask &m= fld.mask(); // prende la maschera principale
TString cod(m.get(F_L_COD)); // prende il codice listino corrente dalla maschera
if (codlissucc == cod) {
error_box("Il codice del listino successivo deve essere diverso dal codice del listino corrente");
return FALSE;
} else return TRUE;
} else return TRUE;
} else return TRUE;
}
bool TCondizioni_vendita::handle_seqric(TMask_field &fld, KEY k) {
if (k==K_TAB) {
TString &seqric= fld.get(); // prende la stringa contenenta la sequenza di ricerca dal campo corrente
if (seqric.not_empty()) {
bool gotcha= TRUE; // flag di validità della sequenza
for (int i=0; i<seqric.len(); i++) {
char c= toupper(seqric[i]); // prende la lettera corrente della sequenza
if ((c!='A') && (c!='G') && (c!='R')) gotcha= FALSE; // se la lettera non rientra tra quelle possibili abbassa il flag di validità
for (int j= i+1; j<seqric.len(); j++) if (c== toupper(seqric[j])) gotcha= FALSE; // se la lettera compare anche più avanti nella sequenza abbassa il flag di validitià
if (!gotcha) break; // se il flag di validità è basso esce anticipatamente
}
if (!gotcha) error_box("La sequenza di ricerca deve essere una combinazine di 'A' (Articoli), 'G' (Gruppi merceologici) e 'R' (Raggruppamenti fiscali), in cui ogni lettera compare al massimo una volta");
return (gotcha);
} else return TRUE;
} else return TRUE;
}
int TCondizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->write(); // invoca la scrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
int TCondizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_condven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->rewrite(); // invoca la riscrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
void TCondizioni_vendita::init_query_mode(TMask &m) {
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) {
if (_tohide[i]) {
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NORMAL); // disabilita il checking sul campo se è editabile
_msk->hide(i); // rende invisibile il campo
}
}
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
_msk->efield(F_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
_msk->disable(F_L_CATVEN); // ...e disabilitato
}
_msk->set(F_TIPO, _condven); // settaggio del campo di tipo archivio
}
int ve2200(int argc, char* argv[]) {
TCondizioni_vendita a;
a.run(argc, argv, "Condizioni di vendita ");
return 0;
}

View File

@ -1,253 +1,253 @@
#include <relapp.h>
#include <config.h>
#include "ve2300.h"
class TRighe_condizioni_vendita: public TRelation_application {
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
bool _catven_on; // booleano di abilitazione del campo CATVEN
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 void hide_and_show_codriga(TMask &); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
static bool handle_tiporiga(TMask_field &, KEY); // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
static bool handle_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public:
TString16 _rcondven; // stringa che indica il tipo di archivio
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
TRighe_condizioni_vendita() {}
virtual ~TRighe_condizioni_vendita() {}
};
TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
return (TRighe_condizioni_vendita &)main_app();
}
bool TRighe_condizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_rcondven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) { // se c'è, prende il tipo di archivio dalla linea di comando
TString temp(argv(2));
_rcondven= temp.left(1); // prende solo il primo carattere
} else {
TMask choose("VE2300"); // istanzia la maschera di scelta del tipo di archivio
if (choose.run() == K_ENTER) _rcondven= choose.get(F_TIPORCV); // prende il tipo di archivio dalla maschera
}
_rcondven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2300X");
_tohide.reset(); // resetta il vettore dei campi da eliminare
switch (_rcondven[0]) {
case 'L': { // listini
_tohide.set(F_R_C_TIPOCF); // settaggio dei campi da eliminare...
_tohide.set(F_R_C_CODCF);
_tohide.set(F_R_C_COD);
_tohide.set(F_R_O_COD);
_tohide.set(F_R_C_RICERCA);
_tohide.set(F_R_O_RICERCA);
_tohide.set(F_R_CO_CODLOTTO);
_tohide.set(F_R_O_ARTES);
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
_catven_on= (toupper(prassid.get("CATVEN_ON")[0])!='T'); // setta il booleano di abilitazione di CATVEN
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
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
_tohide.set(F_R_L_COD);
_tohide.set(F_R_O_COD);
_tohide.set(F_R_LO_UM);
_tohide.set(F_R_L_RICERCA);
_tohide.set(F_R_O_RICERCA);
_tohide.set(F_R_O_ARTES);
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
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
_tohide.set(F_R_C_TIPOCF);
_tohide.set(F_R_C_CODCF);
_tohide.set(F_R_L_COD);
_tohide.set(F_R_C_COD);
_tohide.set(F_R_L_RICERCA);
_tohide.set(F_R_C_RICERCA);
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;
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
_msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
hide_and_show_codriga(*_msk); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
}
return (gotcha);
}
bool TRighe_condizioni_vendita::user_destroy() {
delete _rel;
delete _msk;
return TRUE;
}
void TRighe_condizioni_vendita::hide_and_show_codriga(TMask &m) {
short id_campi[3]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
char tag_campo= m.get(F_R_TIPORIGA)[0]; // prende il tag in TIPORIGA del campo da abilitare
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio
TBit_array &_tohide= app()._tohide; // prende il riferimento all'array di campi da eliminare
for (int i=0; i<3; i++) { // ciclo sui tre campi CODRIGA
if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene...
m.efield(id_campi[i]).check_type(CHECK_REQUIRED); // ...abilitato al checking...
m.show(id_campi[i]); // ...mostrato...
_tohide.reset(id_campi[i]); // ...e rimosso dal vettore di eliminazione...
} else { // ...mentre gli altri vengono...
m.efield(id_campi[i]).check_type(CHECK_NONE); // ...disabilitati dal checking...
m.hide(id_campi[i]); // ...nascosti...
_tohide.set(id_campi[i]); // ...e aggiunti al vettore di eliminazione
}
}
if (_rcondven != "C") { // se non stiamo lavorando sui contratti...
if (tag_campo=='A') { // ...ed è stata selezionata una riga di articoli...
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // ...l'unità di misura viene attivata al checking...
m.enable(F_R_LO_UM); // ...e abilitata...
} else { // ...altrimenti, se è stata selezionata una riga non di articoli...
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // ...l'unità di misura viene rimossa dal checking...
m.disable(F_R_LO_UM); // ...e disabilitata
}
}
}
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
if (k==K_TAB) hide_and_show_codriga(fld.mask()); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
return TRUE;
}
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
if ((k==K_TAB) && fld.get().not_empty()) {
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
TMask &m= fld.mask(); // prende la maschera principale
TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita)
condv.put("TIPO", _rcondven); // riempie il campo "TIPO"
switch (_rcondven[0]) {
case 'L': // riempie il resto della chiave dei listini
condv.put("CATVEN", m.get(F_R_L_CATVEN));
condv.put("COD", m.get(F_R_L_COD));
break;
case 'C': // riempie il resto della chiave dei contratti
condv.put("TIPOCF", m.get(F_R_C_TIPOCF));
condv.put("CODCF", m.get(F_R_C_CODCF));
condv.put("COD", m.get(F_R_C_COD));
break;
case 'O': // riempie il resto della chiave delle offerte
condv.put("COD", m.get(F_R_O_COD));
break;
}
if (condv.read()==NOERR) { // se la lettura è andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata
if (!condv.get_bool("GESTUM")) {
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // disabilita il checking sul campo "unità di misura"
m.disable(F_R_LO_UM); // disabilita il campo "unità di misura"
} else {
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // abilita il checking sul campo "unità di misura"
m.enable(F_R_LO_UM); // abilita il campo "unità di misura"
}
if (!condv.get_bool("GESTSCAGL")) {
m.efield(F_R_NSCAGL).check_type(CHECK_NONE); // disabilita il checking sul campo "quantità limite scaglione"
m.disable(F_R_NSCAGL); // disabilita il campo "quantità limite scaglione"
m.disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
} else {
m.efield(F_R_NSCAGL).check_type(CHECK_REQUIRED); // abilita il checking sul campo "quantità limite scaglione"
m.enable(F_R_NSCAGL); // abilita il campo "quantità limite scaglione"
m.enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
}
if (!condv.get_bool("GESTSCO")) {
m.disable(F_R_SCONTO); // disabilita il campo "sconto"
m.disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
m.disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
m.disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
m.disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
m.disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
} else {
m.enable(F_R_SCONTO); // abilita il campo "sconto"
m.enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
m.enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
m.enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
m.enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
m.enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio"
}
return TRUE;
} else {
error_box("Non esiste una testata corrispondente alla chiave specificata");
return FALSE;
}
} else return TRUE;
}
int TRighe_condizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->write(); // invoca la scrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
int TRighe_condizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->rewrite(); // invoca la riscrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
void TRighe_condizioni_vendita::init_query_mode(TMask &m) {
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) { // ciclo sul vettore dei campi da eliminare
if (_tohide[i]) {
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NONE); // disabilita il checking sul campo se è editabile
_msk->hide(i); // rende invisibile il campo
}
}
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
_msk->efield(F_R_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
_msk->disable(F_R_L_CATVEN); // ...e disabilitato
}
_msk->set(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio
}
int ve2300(int argc, char* argv[]) {
TRighe_condizioni_vendita a;
a.run(argc, argv, "Righe condizioni vendita ");
return 0;
}
#include <relapp.h>
#include <config.h>
#include "ve2300.h"
class TRighe_condizioni_vendita: public TRelation_application {
TMask *_msk; // maschera principale
TRelation *_rel; // relazione principale
bool _catven_on; // booleano di abilitazione del campo CATVEN
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 void hide_and_show_codriga(TMask &); // procedura di abilitazione/disabilitazione dei tre campi CODRIGA (codice riga)
static bool handle_tiporiga(TMask_field &, KEY); // handler del campo TIPORIGA (articolo, gruppo merc., ragg. fiscale)
static bool handle_cod(TMask_field &, KEY); // handler del campo COD (codice listino, numero contratto, codice offerta)
virtual int write(const TMask &); // metodo usato per scrivere il record sul file
virtual int rewrite(const TMask &); // metodo usato per aggiornare il record sul file
virtual void init_query_mode(TMask &); // handler chiamato quando la maschera passa in modo ricerca
public:
TString16 _rcondven; // stringa che indica il tipo di archivio
TBit_array _tohide; // vettore degli identificatori di campi che devono essere nascosti
TRighe_condizioni_vendita() {}
virtual ~TRighe_condizioni_vendita() {}
};
TRighe_condizioni_vendita &app() { // funzione che ritorna il riferimento alla classe principale dell'applicazione
return (TRighe_condizioni_vendita &)main_app();
}
bool TRighe_condizioni_vendita::user_create() {
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_rcondven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc()>2) { // se c'è, prende il tipo di archivio dalla linea di comando
TString temp(argv(2));
_rcondven= temp.left(1); // prende solo il primo carattere
} else {
TMask choose("VE2300"); // istanzia la maschera di scelta del tipo di archivio
if (choose.run() == K_ENTER) _rcondven= choose.get(F_TIPORCV); // prende il tipo di archivio dalla maschera
}
_rcondven.upper(); // rende la stringa upper-case
_msk= new TMask("VE2300X");
_tohide.reset(); // resetta il vettore dei campi da eliminare
switch (_rcondven[0]) {
case 'L': { // listini
_tohide.set(F_R_C_TIPOCF); // settaggio dei campi da eliminare...
_tohide.set(F_R_C_CODCF);
_tohide.set(F_R_C_COD);
_tohide.set(F_R_O_COD);
_tohide.set(F_R_C_RICERCA);
_tohide.set(F_R_O_RICERCA);
_tohide.set(F_R_CO_CODLOTTO);
_tohide.set(F_R_O_ARTES);
TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
_catven_on= prassid.get_bool("GESLISCV"); // setta il booleano di abilitazione di CATVEN
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
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
_tohide.set(F_R_L_COD);
_tohide.set(F_R_O_COD);
_tohide.set(F_R_LO_UM);
_tohide.set(F_R_L_RICERCA);
_tohide.set(F_R_O_RICERCA);
_tohide.set(F_R_O_ARTES);
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
_tohide.set(F_R_L_CATVEN); // settaggio dei campi da eliminare...
_tohide.set(F_R_C_TIPOCF);
_tohide.set(F_R_C_CODCF);
_tohide.set(F_R_L_COD);
_tohide.set(F_R_C_COD);
_tohide.set(F_R_L_RICERCA);
_tohide.set(F_R_C_RICERCA);
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;
break;
default: // messaggio di errore se si indica un archivio non valido
error_box("Indicare l'archivio sulla linea di comando (L, C o O) oppure selezionarla dalla maschera di partenza");
break;
}
if (gotcha) { // se è stato selezionato correttamente un archivio completa l'inizializzazione
_rel= new TRelation(LF_RCONDV); // apre la relazione (un unico file)
_msk->set_handler(F_R_TIPORIGA, handle_tiporiga); // impostazione dell'handler sul campo di selezione del tipo della riga
hide_and_show_codriga(*_msk); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
}
return (gotcha);
}
bool TRighe_condizioni_vendita::user_destroy() {
delete _rel;
delete _msk;
return TRUE;
}
void TRighe_condizioni_vendita::hide_and_show_codriga(TMask &m) {
short id_campi[3]= { F_R_CODRIGA_A, F_R_CODRIGA_G, F_R_CODRIGA_R }; // vettore degli identificatori dei tre campi CODRIGA in mutua esclusione
char tag_campi[3]= { 'A', 'G', 'R' }; // vettore dei tag di TIPORIGA per i tre campi CODRIGA in mutua esclusione
char tag_campo= m.get(F_R_TIPORIGA)[0]; // prende il tag in TIPORIGA del campo da abilitare
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di tipo di archivio
TBit_array &_tohide= app()._tohide; // prende il riferimento all'array di campi da eliminare
for (int i=0; i<3; i++) { // ciclo sui tre campi CODRIGA
if (tag_campo == tag_campi[i]) { // il campo indicato con il tag viene...
m.efield(id_campi[i]).check_type(CHECK_REQUIRED); // ...abilitato al checking...
m.show(id_campi[i]); // ...mostrato...
_tohide.reset(id_campi[i]); // ...e rimosso dal vettore di eliminazione...
} else { // ...mentre gli altri vengono...
m.efield(id_campi[i]).check_type(CHECK_NONE); // ...disabilitati dal checking...
m.hide(id_campi[i]); // ...nascosti...
_tohide.set(id_campi[i]); // ...e aggiunti al vettore di eliminazione
}
}
if (_rcondven != "C") { // se non stiamo lavorando sui contratti...
if (tag_campo=='A') { // ...ed è stata selezionata una riga di articoli...
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // ...l'unità di misura viene attivata al checking...
m.enable(F_R_LO_UM); // ...e abilitata...
} else { // ...altrimenti, se è stata selezionata una riga non di articoli...
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // ...l'unità di misura viene rimossa dal checking...
m.disable(F_R_LO_UM); // ...e disabilitata
}
}
}
bool TRighe_condizioni_vendita::handle_tiporiga(TMask_field &fld, KEY k) {
if (k==K_TAB) hide_and_show_codriga(fld.mask()); // invoca la procedura di controllo della mutua esclusione dei tre campi CODRIGA
return TRUE;
}
bool TRighe_condizioni_vendita::handle_cod(TMask_field &fld, KEY k) {
if ((k==K_TAB) && fld.get().not_empty()) {
TString &_rcondven= app()._rcondven; // prende il riferimento alla stringa di indicazione del tipo di archivio
TMask &m= fld.mask(); // prende la maschera principale
TLocalisamfile condv(LF_CONDV); // apre il file della testata (condizioni di vendita)
condv.put("TIPO", _rcondven); // riempie il campo "TIPO"
switch (_rcondven[0]) {
case 'L': // riempie il resto della chiave dei listini
condv.put("CATVEN", m.get(F_R_L_CATVEN));
condv.put("COD", m.get(F_R_L_COD));
break;
case 'C': // riempie il resto della chiave dei contratti
condv.put("TIPOCF", m.get(F_R_C_TIPOCF));
condv.put("CODCF", m.get(F_R_C_CODCF));
condv.put("COD", m.get(F_R_C_COD));
break;
case 'O': // riempie il resto della chiave delle offerte
condv.put("COD", m.get(F_R_O_COD));
break;
}
if (condv.read()==NOERR) { // se la lettura è andata a buon fine abilita/disabilita i campi della maschera in base ai booleani della testata
if (!condv.get_bool("GESTUM")) {
m.efield(F_R_LO_UM).check_type(CHECK_NONE); // disabilita il checking sul campo "unità di misura"
m.disable(F_R_LO_UM); // disabilita il campo "unità di misura"
} else {
m.efield(F_R_LO_UM).check_type(CHECK_REQUIRED); // abilita il checking sul campo "unità di misura"
m.enable(F_R_LO_UM); // abilita il campo "unità di misura"
}
if (!condv.get_bool("GESTSCAGL")) {
m.efield(F_R_NSCAGL).check_type(CHECK_NONE); // disabilita il checking sul campo "quantità limite scaglione"
m.disable(F_R_NSCAGL); // disabilita il campo "quantità limite scaglione"
m.disable(F_R_QLIM); // disabilita il campo "quantità limite scaglione"
} else {
m.efield(F_R_NSCAGL).check_type(CHECK_REQUIRED); // abilita il checking sul campo "quantità limite scaglione"
m.enable(F_R_NSCAGL); // abilita il campo "quantità limite scaglione"
m.enable(F_R_QLIM); // abilita il campo "quantità limite scaglione"
}
if (!condv.get_bool("GESTSCO")) {
m.disable(F_R_SCONTO); // disabilita il campo "sconto"
m.disable(F_R_QOM); // disabilita il campo "quantità art. omaggio"
m.disable(F_R_QBASE); // disabilita il campo "quantità base x sconto"
m.disable(F_R_CODARTOM); // disabilita il campo "codice articolo omaggio"
m.disable(F_R_PROMAGGIO); // disabilita il campo "prezzo omaggio"
m.disable(F_R_UMOM); // disabilita il campo "unità di misura art. omaggio"
} else {
m.enable(F_R_SCONTO); // abilita il campo "sconto"
m.enable(F_R_QOM); // abilita il campo "quantità art. omaggio"
m.enable(F_R_QBASE); // abilita il campo "quantità base x sconto"
m.enable(F_R_CODARTOM); // abilita il campo "codice articolo omaggio"
m.enable(F_R_PROMAGGIO); // abilita il campo "prezzo omaggio"
m.enable(F_R_UMOM); // abilita il campo "unità di misura art. omaggio"
}
return TRUE;
} else {
error_box("Non esiste una testata corrispondente alla chiave specificata");
return FALSE;
}
} else return TRUE;
}
int TRighe_condizioni_vendita::write(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->write(); // invoca la scrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
int TRighe_condizioni_vendita::rewrite(const TMask &m) {
m.autosave(_rel); // scrive il contenuto della maschera nel record della relazione
if (_rcondven != "C") { // se non si sta lavorando sui contratti il campo TIPOCF deve essere svuotato sul file
TLocalisamfile &f= _rel->lfile(); // prende il file principale della relazione
TRectype &r= f.curr(); // prende il record corrente del file principale
f.zero("TIPOCF"); // svuota il campo TIPOCF
}
_rel->rewrite(); // invoca la riscrittura della relazione
return (_rel->status()); // ritorna lo stato della relazione
}
void TRighe_condizioni_vendita::init_query_mode(TMask &m) {
for (short i=(short)_tohide.first_one(); i<=(short)_tohide.last_one(); i++) { // ciclo sul vettore dei campi da eliminare
if (_tohide[i]) {
if (_msk->field(i).is_edit()) _msk->efield(i).check_type(CHECK_NONE); // disabilita il checking sul campo se è editabile
_msk->hide(i); // rende invisibile il campo
}
}
if (!_catven_on) { // se il booleano di abil. di CATVEN è falso...
_msk->efield(F_R_L_CATVEN).check_type(CHECK_NONE); // ...viene rimosso dal checking...
_msk->disable(F_R_L_CATVEN); // ...e disabilitato
}
_msk->set(F_R_TIPO, _rcondven); // settaggio del campo di tipo archivio
}
int ve2300(int argc, char* argv[]) {
TRighe_condizioni_vendita a;
a.run(argc, argv, "Righe condizioni vendita ");
return 0;
}

View File

@ -1,62 +1,65 @@
#ifndef __VEUML1_H
#define __VEUML1_H
#ifndef __VEUML_H
#include "VEUML.H"
#endif
// gruppo dei vettori
#define GR_VETTORI 15
// campi della maschera totale
#define F_RAGSOC 301
#define F_INDCF 302
#define F_CIVCF 303
#define F_NOME_VAL 304
#define F_DESCODPAG 305
#define F_DATASCAD1 306
#define F_DATASCAD2 307
#define F_DATASCAD3 308
#define F_DATASCAD4 309
#define F_DATASCAD5 310
#define F_BANCA_APP 311
#define F_BANCA_PRE 312
#define F_INDSP 313
#define F_CIVSP 314
#define F_CAPSP 315
#define F_LOCALITASP 316
#define F_PORTO 317
#define F_DENCAUSTRASP 318
#define F_NOMEVETT1 319
#define F_NOMEVETT2 320
#define F_NOMEVETT3 321
#define F_DESCRBENI1 322
#define F_DESCRBENI2 323
#define F_DESUMTARA 324
#define F_DESUMPNETTO 325
#define F_DESCRMAG1 326
#define F_DESCRMAG2 327
#define F_COFI 328
#define F_STATOPAIVA 329
#define F_LOCALITACF 330
#define F_CAPCF 331
#define F_COMCF 332
#define F_PROVCOM 333
#define F_STATOCF 334
#define F_DATACAMBIO 335
#define F_DESBANAPP 336
#define F_DESLIN 337
#define F_DESBANPRE 338
#define F_NOMEVAL 339
#define F_PAIVA 340
#define F_DENCOM 341
#define F_DESSTATOCF 342
#define F_COMSP 343
#define F_DENCOMSP 344
#define F_PROVCOMSP 345
#define F_STATOSP 346
#define F_DESSTATOSP 347
#define F_DESLIST 348
#endif // __VEUML1_H
#ifndef __VEUML1_H
#define __VEUML1_H
#ifndef __VEUML_H
#include "VEUML.H"
#endif
// gruppo dei vettori
#define GR_VETTORI 15
// campi della maschera totale
#define F_RAGSOC 301
#define F_INDCF 302
#define F_CIVCF 303
#define F_NOME_VAL 304
#define F_DESCODPAG 305
// I prossimi 5 campi devono essere consecutivi come numerazione
// perchè faccio un ciclo per settarli
#define F_DATASCAD1 306
#define F_DATASCAD2 307
#define F_DATASCAD3 308
#define F_DATASCAD4 309
#define F_DATASCAD5 310
#define F_BANCA_APP 311
#define F_BANCA_PRE 312
#define F_INDSP 313
#define F_CIVSP 314
#define F_CAPSP 315
#define F_LOCALITASP 316
#define F_PORTO 317
#define F_DENCAUSTRASP 318
#define F_NOMEVETT1 319
#define F_NOMEVETT2 320
#define F_NOMEVETT3 321
#define F_DESCRBENI1 322
#define F_DESCRBENI2 323
#define F_DESUMTARA 324
#define F_DESUMPNETTO 325
#define F_DESCRMAG1 326
#define F_DESCRMAG2 327
#define F_COFI 328
#define F_STATOPAIVA 329
#define F_LOCALITACF 330
#define F_CAPCF 331
#define F_COMCF 332
#define F_PROVCOM 333
#define F_STATOCF 334
#define F_DATACAMBIO 335
#define F_DESBANAPP 336
#define F_DESLIN 337
#define F_DESBANPRE 338
#define F_NOMEVAL 339
#define F_PAIVA 340
#define F_DENCOM 341
#define F_DESSTATOCF 342
#define F_COMSP 343
#define F_DENCOMSP 344
#define F_PROVCOMSP 345
#define F_STATOSP 346
#define F_DESSTATOSP 347
#define F_DESLIST 348
#define F_RAGSOCSP 349
#endif // __VEUML1_H