Lavoro all'11/08/96

git-svn-id: svn://10.65.10.50/trunk@3371 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-08-12 08:32:28 +00:00
parent 8b38f61b7a
commit 6ef2350eb9
19 changed files with 1179 additions and 976 deletions

View File

@ -38,69 +38,73 @@ HIDDEN bool codart_handler( TMask_field& f, KEY key )
// Se qualcuno cerca di modificare la maschera
if ( key == K_TAB && f.focusdirty())
{
TMask& row_mask = f.mask( );
TMask& row_mask = f.mask();
TMask & mask = app().edit_mask();
TCond_vendita condv(app().clifo(), &mask, &row_mask);
TCond_vendita & condv = app().condv();
condv.set_testa(&mask);
condv.set_riga(&row_mask);
condv.calcola();
row_mask.set(FR_SCONTO, condv.get_sconto());
row_mask.set(FR_PREZZO, condv.get_prezzo());
const TString16 lingua = mask.get(F_CODLIN);
TLocalisamfile & anamag = ((TEdit_field &) f).browse()->cursor()->file();
TLocalisamfile & umart = ((TEdit_field &) row_mask.field(FR_UMQTA)).browse()->cursor()->file();
if (anamag.bad() || (anamag.get("CODART") != f.get()))
{
anamag.zero();
anamag.put("CODART", f.get());
if (anamag.read() != NOERR)
anamag.zero();
}
if (anamag.curr().empty())
condv.set_anamag(anamag);
condv.set_umart(umart);
TString80 codart(f.get());
anamag.setkey(1);
anamag.put("CODART", codart);
if (anamag.read() != NOERR)
{
TLocalisamfile codalt(LF_CODCORR);
codalt.setkey(2);
codalt.put("CODARTALT", f.get());
codalt.put("CODARTALT", codart);
if (codalt.read() == NOERR)
{
const TString80 codart(codalt.get("CODART"));
codart = codalt.get("CODART");
anamag.zero();
anamag.put("CODART", codart);
if (anamag.read() == NOERR)
f.set(codart);
else
anamag.zero();
}
}
TString desc(anamag.get("DESCR"));
if (lingua.not_empty())
}
if (anamag.good())
{
TLocalisamfile deslin(LF_DESLIN);
const TString16 lingua = mask.get(F_CODLIN);
const TString codart(row_mask.get(FR_CODART));
TString desc(anamag.get("DESCR"));
deslin.setkey(2);
deslin.put("CODART", row_mask.get(FR_CODART));
deslin.put("CODLIN", lingua);
if (deslin.read() == NOERR)
desc = deslin.get("DESCR");
}
row_mask.set(FR_DESCR, desc);
TLocalisamfile umart(LF_UMART);
umart.zero();
umart.put("CODART", row_mask.get(FR_CODART));
TRectype cmp_rec(umart.curr());
curr_um.cut(0);
curr_fc = 1.0;
if (umart.read(_isgteq) == NOERR && umart.curr() == cmp_rec)
{
curr_um = umart.get("UM");
curr_fc = umart.get_real("FC");
if (lingua.not_empty())
{
TLocalisamfile deslin(LF_DESLIN);
deslin.setkey(2);
deslin.put("CODART", codart);
deslin.put("CODLIN", lingua);
if (deslin.read() == NOERR)
desc = deslin.get("DESCR");
}
row_mask.set(FR_DESCR, desc);
umart.setkey(1);
umart.zero();
umart.put("CODART", codart);
if (umart.read(_isgteq) == NOERR && codart == umart.get("CODART"))
{
curr_um = umart.get("UM");
curr_fc = umart.get_real("FC");
}
else
{
curr_um.cut(0);
curr_fc = 1.0;
}
row_mask.set(FR_UMQTA, curr_um);
}
}
condv.ricerca();
}
return TRUE;
}
@ -111,20 +115,22 @@ HIDDEN bool umart_handler( TMask_field& f, KEY key )
if ( key == K_TAB && f.focusdirty())
{
TMask& row_mask = f.mask( );
TCond_vendita condv(app().clifo(), &app().edit_mask(), &row_mask);
if (condv.gestum())
{
condv.calcola();
row_mask.set(FR_SCONTO, condv.get_sconto());
row_mask.set(FR_PREZZO, condv.get_prezzo());
}
TMask & mask = app().edit_mask();
TLocalisamfile & anamag = ((TEdit_field &) row_mask.field(FR_CODART)).browse()->cursor()->file();
TLocalisamfile & umart = ((TEdit_field &) f).browse()->cursor()->file();
TCond_vendita & condv = app().condv();
condv.set_testa(&mask);
condv.set_riga(&row_mask);
condv.set_anamag(anamag);
condv.set_umart(umart);
condv.ricerca(FALSE);
const TString16 um(f.get());
real fc(1.0);
if (um.not_empty() && curr_um.not_empty() && um != curr_um)
{
TLocalisamfile umart(LF_UMART);
umart.setkey(2);
umart.put("CODART", row_mask.get(FR_CODART));
umart.put("UM", um);
@ -167,6 +173,27 @@ HIDDEN bool descr_handler( TMask_field& f, KEY key )
return TRUE;
}
HIDDEN bool qta_handler( TMask_field& f, KEY key )
{
// Se qualcuno cerca di modificare la maschera
if ( key == K_TAB && f.focusdirty())
{
TMask& row_mask = f.mask( );
TMask & mask = app().edit_mask();
TLocalisamfile & anamag = ((TEdit_field &) row_mask.field(FR_CODART)).browse()->cursor()->file();
TLocalisamfile & umart = ((TEdit_field &) f).browse()->cursor()->file();
TCond_vendita & condv = app().condv();
condv.set_testa(&mask);
condv.set_riga(&row_mask);
condv.set_anamag(anamag);
condv.set_umart(umart);
condv.ricerca(FALSE);
}
return TRUE;
}
void TRiga::load(TSheet_field & f, TToken_string& row, TRectype * r)
{
if (r)
@ -354,12 +381,12 @@ void TRiga::sottrai( TPiede_documento& piede )
piede.sottrai( temp_piede );
}
TMask * TRiga::getmask( )
TVariable_mask * TRiga::getmask( )
{
TString16 msk("verig");
msk << _data.get("TIPORIGA");
TMask * mask = new TMask( msk );
TVariable_mask * mask = new TVariable_mask( msk );
int numhandler = _pro->get_int( "NHANDLER", "HANDLERS" );
for( int i = 1; i <= numhandler; i ++ )
{
@ -384,7 +411,8 @@ TMask * TRiga::getmask( )
{
mask->set_handler( FR_CODART, codart_handler );
mask->set_handler( FR_UMQTA, umart_handler );
mask->set_handler( FR_DESCR, descr_handler );
mask->set_handler( FR_DESCR, descr_handler );
mask->set_handler( FR_QTA, qta_handler );
}
}
}

View File

@ -29,6 +29,10 @@
#include "msksheet.h"
#endif
#ifndef __VARMASK_H
#include "varmask.h"
#endif
class TPiede_documento : public TAssoc_array
{
public:
@ -86,7 +90,7 @@ class TRiga : public TObject
// documento indicato. Va chiamata negli handler degli sheet
void edit_keys( const KEY key, TPiede_documento& nuovo );
// Costruisce e Ritorna la maschera della riga per la editazione
TMask * getmask();
TVariable_mask * getmask();
// Costruttorino standard
TRiga( ) : _data( LF_RIGHEDOC ), _pro( NULL ) { }

View File

@ -22,225 +22,311 @@
#include "veconf.h"
#endif
#define A_ANAMAG 0
#ifndef __TABUTIL_H
#include <tabutil.h>
#endif
// #define A_ANAMAG 0
HIDDEN const real CENTO(100.0);
void TCond_vendita::set_sconto( const char * exp, bool signal )
bool TCond_vendita::set_sconto( const char * exp, bool signal )
{
TString work( exp );
TString goodexp;
TString num;
TString80 goodexp;
bool valid = TRUE;
// Elimina gli spazi molesti
work.strip_spaces( );
if (work.empty())
// work.strip_spaces( );
if (exp && *exp)
{
_sconto = "";
return;
}
// Per ora nessun errore
_errorpos = -1;
int i = 0;
_part = 1.0;
const int wlen = work.len( );
// Flag che indica se sono nella parte decimale di un numero
bool dec = FALSE;
// Flag che indica se si attende l'inizio di un numero
bool startnum = TRUE;
// Flag che indica se siamo all'inizio di un numero
while ( i < wlen && _errorpos < 0 )
{
char c = work[ i++ ];
switch( c )
{
case '+':
case '-':
// Se ero in in numero ...
if( !startnum )
TString80 num;
bool dec = FALSE; // Flag che indica se si attende l'inizio di un numero
bool startnum = TRUE; // Flag che indica se siamo all'inizio di un numero
int errorchar = ' ';
_molt_sconto = 1.0;
// Flag che indica se sono nella parte decimale di un numero
for (const char * s = exp; *s && errorchar == ' '; s++)
{
const char c = *s;
switch(c)
{
// Aggiunge il numero alla sequenza
real newval( num );
_part = _part * ( CENTO + newval ) / CENTO;
if( newval >= 0 )
goodexp << '+';
goodexp << num;
}
// Inizia il nuovo numero
num = ( c == '-' )?"-":"";
startnum = TRUE;
dec = FALSE;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
num << c;
startnum = FALSE;
break;
case '.':
case ',':
// Se siamo gi` nella parte decimale ...
if( dec )
{
// Segnala un errore
_errorpos = i;
case '+':
case '-':
// Se ero in in numero ...
if( !startnum )
{
// Aggiunge il numero alla sequenza
real newval( num );
_molt_sconto *= ( CENTO + newval ) / CENTO;
goodexp << num;
}
// Inizia il nuovo numero
num = (c == '-') ? "-" : "+";
startnum = TRUE;
dec = FALSE;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
num << c;
startnum = FALSE;
break;
case '.':
case ',':
if(!dec)
{
if( startnum )
num << '0'; // Se occorreva un numero ci metto lo 0
num << '.'; // Interpreto la virgola come punto
dec = TRUE;
startnum = TRUE;
}
else
errorchar = c; // Se siamo gi` nella parte decimale segnala un errore
break;
case ' ':
break;
default:
errorchar = c;
break;
}
// Se occorreva un numero ci metto lo 0
if( startnum )
num << '0';
// Interpreto la virgola come punto
num << '.';
dec = TRUE;
startnum = TRUE;
break;
default:
_errorpos = i;
break;
}
// Controlla la validita`
valid = errorchar == ' ';
if (valid)
{
// Aggiunge l'ultimo numero preso
real lastval( num );
_molt_sconto *= ( CENTO + lastval ) / CENTO;
goodexp << num; // Assegna la nuova espressione formattata bene
}
else
{
if (signal) // Se richiesto segnala l'errore
warning_box( "Espressione di sconto non valida. Errore sul carattere %c.", errorchar);
_molt_sconto = 1.0; // Azzera la sequenza di percentuali
goodexp = "";
}
}
// Controlla la validit`
_valid = ( _errorpos < 0 );
// Se richiesto segnala l'errore
if( !_valid && signal )
warning_box( "Espressione di sconto non valida. Errore sul carattere %d.", _errorpos + 1 );
if( _valid )
{
// Aggiunge l'ultimo numero preso
real lastval( num );
_part = _part * ( CENTO + lastval ) / CENTO;
if( lastval >= 0 )
goodexp << '+';
goodexp << num;
// Assegna la nuova espressione formattata bene
_sconto = goodexp;
}
else
{
// Azzera la sequenza di percentuali
_part = 1.0;
}
_sconto = goodexp;
if (_riga && _riga->id2pos(FR_SCONTO) >= 0 && _riga->field(FR_SCONTO).active())
_riga->set(FR_SCONTO, _sconto);
return valid;
}
real TCond_vendita::sconto_val( )
{
CHECK(is_valid( ),"Tentativo di usare uno sconto non valido!" );
return ( ( _part * CENTO ) - CENTO );
void TCond_vendita::set_prezzo(const real & prezzo, const char * val_rif)
{
_prezzo = prezzo;
if (_prezzo != ZERO)
{
TString16 valuta(_testa->get(F_CODVAL));
TString16 valuta_rif(val_rif);
if (valuta == "LIT") valuta.cut(0);
if (valuta_rif == "LIT") valuta_rif.cut(0);
if (valuta != valuta_rif)
{
if (valuta_rif.not_empty())
_prezzo *= _condv.get_real("CAMBIO");
real cambio(_testa->get(F_CAMBIO));
if (cambio == ZERO)
cambio = 1.0;
_prezzo /= cambio;
_prezzo.round(cambio == 1.0 ? 0 : 3);
}
}
if (_riga && _riga->id2pos(FR_PREZZO) >= 0 && _riga->field(FR_PREZZO).active())
_riga->set(FR_PREZZO, _prezzo);
}
void TCond_vendita::set_provv(const real & provv)
{
_provv = provv;
if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
_riga->set(FR_PERCPROV, _provv);
}
void TCond_vendita::set_iva(const TString & codiva)
{
_codiva = codiva;
if (_riga && _riga->id2pos(FR_CODIVA) >= 0 && _riga->field(FR_CODIVA).active())
_riga->set(FR_CODIVA, _codiva);
}
bool TCond_vendita::cerca( int tiporicerca )
{
TString codart = _anamag.get( "CODART" );
TString codriga = riga( ).get( FR_CODART );
if( codriga != codart )
{
_anamag.setkey( 1 );
_anamag.zero( );
_anamag.put( "CODART", codriga );
if (_anamag.read( ) != NOERR)
_anamag.zero();
}
if( tiporicerca == A_ANAMAG )
// Se ricercavo per anagrafica, ho gi` finito
return !_anamag.curr().empty();
if( _ditta.get_bool( "GES", "ve", tiporicerca ) )
if( config_ditta().get_bool( "GES", "ve", tiporicerca ) )
{
// Se h attiva la gestione contratti ...
_condv.setkey( 1 );
_condv.zero( );
switch( tiporicerca )
{
case A_CONTRATTI:
_condv.put( "TIPO", "C" );
if( _ditta.get_bool( "GESSCONCC", "ve" ) )
case A_CONTRATTI:
{
const TString16 codcont(testa().get(F_CODCONT));
if (codcont.empty())
return FALSE;
_condv.put("TIPO", "C");
if(config_ditta().get_bool("GESSCONCC", "ve"))
{
// Se in ditta h abilitata la gestione del cliente in chiave
// al contratto, lo carico con gioia
_condv.put( "TIPOCF", clifo( ).tipocf( ) );
_condv.put( "CODCF", clifo( ).codcf( ) );
}
_condv.put( "COD", testa( ).get( F_CODCONT ) );
break;
case A_LISTINI:
_condv.put( "TIPO", "L" );
if( _ditta.get_bool( "GESLISCV", "ve" ) )
_condv.put("TIPOCF", clifo().tipocf());
_condv.put("CODCF", clifo().codcf());
}
else
_condv.put("TIPOCF", "C");
_condv.put("COD", codcont);
}
break;
case A_LISTINI:
{
// Se in ditta h abilitata la gestione del cliente in chiave
// al contratto, lo carico con gioia
_condv.put( "TIPOCF", clifo( ).tipocf( ) );
_condv.put( "CODCF", clifo( ).codcf( ) );
const TString16 codlist(testa().get(F_CODLIST));
if (codlist.empty())
return FALSE;
_condv.put("TIPO", "L");
// Se in ditta h abilitata la gestione della categoria di vendita in chiave
// al listino, la carico con gioia
if( config_ditta().get_bool("GESLISCV", "ve"))
_condv.put("CATVEN", testa().get(F_CATVEN));
_condv.put("COD", codlist);
}
_condv.put( "COD", testa( ).get( F_CODLIST ) );
break;
case A_OFFERTE:
_condv.put( "TIPO", "O" );
_condv.put( "COD", testa( ).get( F_CODCAMP ) );
{
const TString16 codcamp(testa().get(F_CODCAMP));
if (codcamp.empty())
return FALSE;
_condv.put("TIPO", "O");
_condv.put("COD", codcamp);
}
break;
}
if( _condv.read( ) == NOERR )
{
_rcondv.setkey( 2 );
_rcondv.zero( );
_rcondv.put( "TIPO", _condv.get( "TIPO" ) );
_rcondv.put( "CATVEN", _condv.get( "CATVEN" ) );
_rcondv.put( "TIPOCF", _condv.get( "TIPOCF" ) );
_rcondv.put( "CODCF", _condv.get( "CODCF" ) );
_rcondv.put( "TIPO", _condv.get( "TIPO"));
_rcondv.put( "CATVEN", _condv.get( "CATVEN"));
_rcondv.put( "TIPOCF", _condv.get( "TIPOCF"));
_rcondv.put( "CODCF", _condv.get( "CODCF"));
_rcondv.put("COD", _condv.get("COD"));
if( _condv.get_bool( "GESTUM" ) )
_rcondv.put( "UM", riga( ).get( FR_UMQTA ) );
if( _condv.get_bool( "GESTSCAGL" ) )
_rcondv.put( "QLIM", riga( ).get( FR_QTA ) );
_rcondv.put( "UM", riga().get(FR_UMQTA));
const bool gest_scagl = _condv.get_bool("GESTSCAGL");
const TString16 seqricrighe( _condv.get( "SEQRIC" ) );
bool found = FALSE;
if (gest_scagl)
_rcondv.put("NSCAGL", 1);
for( int i = 0; i < seqricrighe.len( ); i ++ )
for( int i = 0; !found && i < seqricrighe.len( ); i ++ )
{
char ricerca = seqricrighe[ i ];
_rcondv.put( "TIPORIGA", ricerca );
switch( ricerca )
{
case 'A':
_rcondv.put( "CODRIGA", codriga);
if( _rcondv.read( ) == NOERR ) return TRUE;
if( _rcondv.prev() == NOERR && _rcondv.get("TIPORIGA")[0] == 'A')
case 'A':
{
const TString cod_found(_rcondv.get("CODRIGA"));
return cod_found.compare(codriga, cod_found.len()) == 0;
const TString codriga = riga().get(FR_CODART);
_rcondv.put( "CODRIGA", codriga);
if (_rcondv.read() != NOERR &&
_rcondv.prev() == NOERR &&
_rcondv.get("TIPORIGA")[0] == 'A')
{
const TString cod_found(_rcondv.get("CODRIGA"));
return cod_found.compare(codriga, cod_found.len()) == 0;
}
}
break;
case 'R':
_rcondv.put( "CODRIGA", _anamag.get( "RAGGFIS" ) );
if( _rcondv.read( ) == NOERR ) return TRUE;
_rcondv.put("CODRIGA", anamag().get( "RAGGFIS"));
_rcondv.read();
break;
case 'G':
case 'C':
{
const TRectype rec_to_found(_rcondv.curr());
const TRectype rec_to_found(_rcondv.curr());
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC1" ) );
if( _rcondv.read( ) == NOERR ) return TRUE;
_rcondv.curr() = rec_to_found;
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC2" ) );
if( _rcondv.read( ) == NOERR ) return TRUE;
_rcondv.curr() = rec_to_found;
_rcondv.put( "CODRIGA", _anamag.get( "GRMERC3" ) );
if( _rcondv.read( ) == NOERR ) return TRUE;
_rcondv.put( "CODRIGA", anamag().get( "GRMERC1" ) );
if (_rcondv.read( ) != NOERR )
{
_rcondv.curr() = rec_to_found;
_rcondv.put( "CODRIGA", anamag().get( "GRMERC2" ) );
if (_rcondv.read( ) != NOERR )
{
_rcondv.curr() = rec_to_found;
_rcondv.put( "CODRIGA", anamag().get( "GRMERC3" ) );
_rcondv.read( );
}
}
}
break;
case 'L':
{
const TRectype rec_to_found(_rcondv.curr());
_rcondv.put( "CODRIGA", anamag().get("GRMERC1").left(3) );
if (_rcondv.read( ) != NOERR )
{
_rcondv.curr() = rec_to_found;
_rcondv.put( "CODRIGA", anamag().get("GRMERC2").left(3) );
if (_rcondv.read( ) != NOERR )
{
_rcondv.curr() = rec_to_found;
_rcondv.put( "CODRIGA", anamag().get("GRMERC3").left(3) );
_rcondv.read( );
}
}
}
break;
default:
error_box("Tipo di ricerca righe %c non valido", ricerca );
break;
}
}
found = _rcondv.good();
}
if (found && gest_scagl)
{
TRectype rec(_rcondv.curr());
int last_scagl = 0;
int scagl = _rcondv.get_int("NSCAGL");
const real qta(_riga->get_real(FR_QTA));
real qta_lim(_rcondv.get_real("QLIM"));
while (_rcondv.good() && scagl > last_scagl && qta_lim > ZERO && qta > qta_lim)
{
if (_rcondv.next() == NOERR)
{
last_scagl = scagl;
scagl = _rcondv.get_int("NSCAGL");
qta_lim =_rcondv.get_real("QLIM");
rec = _rcondv.curr();
}
}
_rcondv.read(rec);
}
return found;
}
}
// Ricerca fallita
@ -248,52 +334,223 @@ bool TCond_vendita::cerca( int tiporicerca )
}
// Probabilmente dovrebbe lavorare sulla maschera, ma per ora la lasciamo cosl
void TCond_vendita::calcola( )
void TCond_vendita::ricerca(bool full_load)
{
const char gestione = _ditta.get_char( "GESSCORIGA", "ve" );
set_sconto("");
const bool condv_found = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
set_prezzo(condv_found ? _rcondv.get_real( "PREZZO") : ZERO);
switch( gestione )
TString codart = anamag().get( "CODART" );
const TString codriga = riga().get( FR_CODART );
if(anamag().bad() || codriga != codart )
{
case 'N':
// Sconti di riga non gestiti
break;
case 'L':
// Percentuale su contratti/offerte/listini/anagrafica
if (condv_found)
set_sconto( _rcondv.get( "SCONTO" ) );
else
if(cerca( A_ANAMAG ))
set_sconto( _anamag.get("SCONTO"));
break;
case 'A':
// Posiziono l'anagrafica
_sconti.setkey( 1 );
_sconti.put( "TIPO", "R" );
_sconti.put( "CODART", riga().get(FR_CODART));
if( _ditta.get_bool( "GESSCORIGACV", "ve" ) )
_sconti.put( "CODCAT", clifo( ).get( LF_CFVEN, "SCONTO" ) );
if( _ditta.get_bool( "GESSCORIGAUM", "ve" ) )
_sconti.put( "UM", riga( ).get( FR_UMQTA ) );
if( _sconti.read( ) == NOERR )
set_sconto( _sconti.get("SCONTO") );
break;
case 'C':
set_sconto(clifo( ).get(LF_CFVEN, "SCONTO"));
break;
default:
error_box( FALSE, "Tipo di gestione sconti %c non valido!", gestione );
break;
anamag().setkey(1);
anamag().put("CODART", codriga);
if (anamag().read() != NOERR)
{
if (full_load)
{
set_prezzo(ZERO);
set_sconto("");
set_iva("");
set_provv(ZERO);
}
return;
}
}
codart = umart().get( "CODART" );
const TString16 umriga(riga().get(FR_UMQTA));
const TString16 um(umart().get("UM"));
if (umart().bad() || codart != codriga || um != umriga)
{
umart().setkey(2);
umart().put("CODART", codriga);
umart().put("UM", um);
if (umart().read != NOERR)
umart().zero();
}
const bool found_condv = cerca(A_CONTRATTI) || cerca(A_OFFERTE) || cerca(A_LISTINI);
if (found_condv)
set_prezzo(_rcondv.get_real("PREZZO"), _condv.get("CODVAL"));
else
if (full_load)
set_prezzo(umart().get_real("PREZZO"));
if (full_load)
{
if (_ivarid)
set_iva(anamag().get("CODIVAR"));
else
set_iva(anamag().get("CODIVA"));
}
const char gestione = config_ditta().get_char( "GESSCORIGA", "ve" );
if (!full_load)
{
if (gestione == 'L' && found_condv)
set_sconto(_rcondv.get("SCONTO"));
}
else
{
switch (gestione)
{
case 'N':
// Sconti di riga non gestiti
set_sconto("");
break;
case 'L':
// Percentuale su contratti/offerte/listini/anagrafica
if (found_condv)
set_sconto(_rcondv.get("SCONTO"));
else
set_sconto(anamag().get("SCONTO"));
break;
case 'A':
{
// Posiziono l'anagrafica
const char rigakey = config_ditta().get_char( "SCORIGAKEY", "ve" );
_sconti.setkey(1);
_sconti.put("TIPO", "R");
if( config_ditta().get_bool("GESSCORIGACV", "ve"))
_sconti.put("CODCAT", clifo().get(LF_CFVEN, "CATVEN"));
if( config_ditta().get_bool("GESSCORIGAUM", "ve"))
_sconti.put("UM", riga().get( FR_UMQTA));
_sconti.put("TIPORIGA", rigakey);
switch (rigakey)
{
case 'A':
_sconti.put("CODART", codriga);
_sconti.read();
break;
case 'R':
_sconti.put("CODART", anamag().get("RAGGFIS"));
_sconti.read();
break;
case 'C':
{
const TRectype rec_to_found(_sconti.curr());
_sconti.put( "CODART", anamag().get( "GRMERC1" ) );
if (_sconti.read() != NOERR )
{
_sconti.curr() = rec_to_found;
_sconti.put( "CODART", anamag().get( "GRMERC2" ) );
if (_sconti.read() != NOERR )
{
_sconti.curr() = rec_to_found;
_sconti.put( "CODART", anamag().get( "GRMERC3" ) );
_sconti.read( );
}
}
}
break;
case 'L':
{
const TRectype rec_to_found(_sconti.curr());
_sconti.put("CODART", anamag().get("GRMERC1").left(3));
if (_sconti.read() != NOERR )
{
_sconti.curr() = rec_to_found;
_sconti.put("CODART", anamag().get("GRMERC2").left(3));
if (_sconti.read() != NOERR )
{
_sconti.curr() = rec_to_found;
_sconti.put("CODART", anamag().get("GRMERC3").left(3));
_sconti.read();
}
}
}
break;
default:
error_box("Tipo di chiave righe sconti '%c' non valida!", rigakey);
break;
}
if (_sconti.bad())
_sconti.zero();
set_sconto(_sconti.get("SCONTO"));
}
break;
case 'C':
set_sconto(clifo().get(LF_CFVEN, "SCONTO"));
break;
default:
error_box("Tipo di gestione sconti '%c' non valido!", gestione );
break;
}
}
if (_riga && _riga->id2pos(FR_PERCPROV) >= 0 && _riga->field(FR_PERCPROV).active())
{
const TString16 codage(_testa->get(F_CODAG));
if (codage.not_empty())
{
TTable age("AGE");
age.put("CODTAB", codage);
if (age.read() == NOERR)
{
char tipoprovv = age.get("S6")[0];
if (tipoprovv <= ' ')
tipoprovv = config_ditta().get_char( "AGETIPOPERC", "ve" );
if (!full_load)
{
if (tipoprovv == 'L' && found_condv)
set_provv(_rcondv.get_real("PERCPROVV"));
}
else
{
switch (tipoprovv)
{
case 'A':
set_provv(age.get_real("R0"));
break;
case 'C':
set_provv(real(clifo().get(LF_CFVEN, "PERCPROVV")));
break;
case 'L':
if (found_condv)
set_provv(_rcondv.get_real("PERCPROVV"));
else
set_provv(anamag().get_real("PERCPROVV"));
break;
case 'V':
{
TString16 catven(testa().get(F_CATVEN));
if (catven.empty())
catven = clifo().get(LF_CFVEN, "CATVEN");
if (catven.not_empty())
{
TTable cve("%CVE");
cve.put("CODART", codage);
if (cve.read() == NOERR)
set_provv(cve.get_real("R0"));
}
}
break;
default:
error_box("Tipo di gestione provvigioni '%c' non valido!", tipoprovv );
break;
}
}
}
}
}
}
TCond_vendita::TCond_vendita( TCliFor& clifo, TMask * testa, TMask * riga ) : _condv( LF_CONDV ), _rcondv( LF_RCONDV ), _anamag( LF_ANAMAG ), _sconti( LF_SCONTI ), _ditta( CONFIG_DITTA )
TCond_vendita::TCond_vendita(TCliFor& clifo, TConfig * ditta, TMask * testa, TMask * riga,
TLocalisamfile * anamag, TLocalisamfile * umart)
: _clifo(&clifo), _testa(testa), _riga(riga),
_condv( LF_CONDV ), _rcondv( LF_RCONDV ), _sconti( LF_SCONTI ),
_anamag(anamag), _umart(umart), _config_ditta(ditta), _ivarid(FALSE)
{
_clifo = &clifo;
_testa = testa;
_riga = riga;
}

View File

@ -19,44 +19,54 @@
class TCond_vendita : public TObject
{
TString _sconto;
TString80 _sconto;
TString16 _codiva;
bool _ivarid;
real _prezzo;
bool _valid;
int _errorpos;
real _part;
TCliFor* _clifo;
// TRelation _condv;
// Invece che la relazione uso i due files, poichè mi interessa sempre
// solo una delle righe
real _provv;
real _molt_sconto;
TCliFor * _clifo;
TLocalisamfile _condv;
TLocalisamfile _rcondv;
TLocalisamfile _anamag;
TLocalisamfile * _anamag;
TLocalisamfile _sconti;
TConfig _ditta;
TMask* _testa;
TMask* _riga;
TLocalisamfile * _umart;
TConfig * _config_ditta;
TMask * _testa;
TMask * _riga;
bool cerca( int tiporicerca );
bool cerca(int tiporicerca);
protected:
void set_prezzo(const real & prezzo,const char * val_rif = "");
void set_provv(const real & provv);
void set_iva(const TString & codiva);
TCliFor & clifo() const { CHECK(_clifo, "Cliente/fornitore non inizializzato"); return * _clifo; }
TConfig & config_ditta() const { CHECK(_clifo, "Configurazione ditta non inizializzata"); return * _config_ditta; }
TMask & testa() const { CHECK(_testa, "Maschera testata non inizializzata"); return * _testa; }
TMask & riga() const { CHECK(_testa, "Maschera testata non inizializzata"); return * _riga; }
TLocalisamfile & anamag() const { CHECK(_anamag, "Anagrafica di magazzino non inizializzata") ; return *_anamag; }
TLocalisamfile & umart() const { CHECK(_umart, "Anagrafica di unita' di misura magazzino non inizializzata") ; return *_umart; }
public:
bool set_sconto( const char * exp, bool signal = FALSE );
const TString& get_sconto() const { return _sconto; }
real sconto_val() const { return _molt_sconto;}
real get_prezzo() const { return _prezzo; }
real get_provv() const { return _provv; }
const TString & get_iva() const { return _codiva; }
TString& get_sconto( void ) { return _sconto; }
void set_sconto( const char * exp, bool signal = FALSE );
real get_prezzo() { return _prezzo; }
void set_prezzo(const real & prezzo) { _prezzo = prezzo; }
bool is_valid( ){ return _valid; }
real sconto_val( );
const char * sconto_str( int len = 0, int dec = UNDEFINED, char pad = ' ' ){ real p(sconto_val()); return p.stringa( len, dec, pad ); }
void set_config( TConfig * ditta){ _config_ditta = ditta; }
void set_testa( TMask * testa ){ _testa = testa; }
void set_riga( TMask * riga ){ _riga = riga; }
void set_anamag(TLocalisamfile & anamag) { _anamag = &anamag; }
void set_umart(TLocalisamfile & umart) { _umart = &umart; }
void ricerca(bool full_load = TRUE);
bool gestum() const { return _condv.get_bool("GESTUM"); }
TCliFor& clifo( ){ return *_clifo; }
void set_testa( TMask& testa ){ _testa = &testa; }
TMask& testa( ){ return *_testa; }
void set_riga( TMask& riga ){ _riga = &riga; }
TMask& riga( ){ return *_riga; }
void calcola( );
bool gestum() { return _condv.get_bool("GESTUM"); }
TCond_vendita( TCliFor& clifo, TMask * testa = NULL, TMask * riga = NULL );
TCond_vendita(TCliFor & clifo, TConfig * _ditta = NULL, TMask * testa = NULL, TMask * riga = NULL,
TLocalisamfile * anamag = NULL, TLocalisamfile * umart = NULL);
~TCond_vendita() {}
};

View File

@ -137,6 +137,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
set( m, F_SPESEINC, LF_CFVEN, "ADDSPINC" );
set( m, F_ADDBRB, LF_CFVEN, "ADDBOLLIRB" );
set( m, F_ADDBTR, LF_CFVEN, "ADDBOLLITR" );
set(m, F_CATVEN, LF_CFVEN, "CATVEN");
}
if ( occasionale ( ) )
{
@ -168,7 +169,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
const TString16 newcodval(m.get(F_CODVAL));
const TString16 newdatacambio(m.get(F_DATACAMBIO));
if (newcodval.empty() || newdatacambio.empty())
if ((m.id2pos(F_CAMBIO) >= 0) && (newcodval.empty() || newdatacambio.empty()))
m.reset(F_CAMBIO);
m.check_field(F_CODVAL);
if (codval != newcodval || datacambio != newdatacambio)
@ -190,6 +191,7 @@ void TCliForVendite::update_mask( TMask& m, bool onload )
m.check_field( F_CODVETT1 );
m.check_field( F_CODVETT2 );
m.check_field( F_CODVETT3 );
m.check_field( F_CATVEN );
// imposta_dati_comune( m );
imposta_indirizzo_spedizione( m );
imposta_sconto_testa( m );

View File

@ -6,37 +6,39 @@ TMotore_application& app( ) { return ( TMotore_application& ) main_app( ); }
void TMotore_application::init_query_mode( TMask& m )
{
_msk->set( F_CODNUM, _codnum);
_msk->set( F_CODNUM, _doc->numerazione());
_msk->field(F_CODNUM).set_focusdirty(TRUE);
_msk->field(F_CODNUM).on_key(K_TAB);
_msk->field(F_CODNUM).set_dirty(FALSE);
_msk->set( F_PROFILO, _profilo, TRUE);
_msk->set( F_TIPODOC, _tipodoc, TRUE);
_msk->set( F_TIPODOC, _doc->tipodoc(), TRUE);
}
void TMotore_application::init_insert_mode( TMask& m )
{
TString tipocf( "A" );
tipocf[ 0 ] = app().tipocf();
m.reset();
m.set(F_PROFILO, _profilo);
m.set(F_CODNUM, _codnum);
const TString16 codnum(m.get(F_CODNUM));
const int anno = m.get_int(F_ANNO);
const char provv = m.get(F_PROVV)[0];
const long numdoc = m.get_long(F_NDOC);
_doc->read(provv, anno, codnum, numdoc);
_doc->head().put("TIPODOC", m.get(F_TIPODOC));
m.field(F_CODNUM).set_focusdirty(TRUE);
m.field(F_CODNUM).on_key(K_TAB);
m.set(F_TIPODOC, _tipodoc);
m.field(F_TIPODOC).set_focusdirty(TRUE);
m.field(F_TIPODOC).on_key(K_TAB);
m.set(F_ANNO, _anno);
m.set(F_PROVV, _tiponum);
m.set(F_NDOC, _numdoc);
m.set(F_STATO, _statodoc);
m.set(F_STATO, _doc->head().get("STATO"));
const TString16 data_doc(m.get( F_DATADOC));
m.set(F_DATAINSC,data_doc);
m.set( F_DATACAMBIO, data_doc);
clifo( ).occas_mask( ).reset( );
// m.set( F_TIPOCF, tipocf , TRUE);
int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof
const int ndefaults = pro( ).get_int( "NDEFAULTS", "DEFAULT" ); // prof
TMask & emask = edit_mask();
for( int i = 1; i <= ndefaults; i++ )
{
TString16 chiave;
@ -44,10 +46,24 @@ void TMotore_application::init_insert_mode( TMask& m )
TToken_string valore( pro( ).get( chiave, "DEFAULT" ) );
int campo( valore.get_int( 0 ) );
TString default_val( valore.get( 1 ) );
edit_mask( ).set( campo, default_val, TRUE );
emask.set( campo, default_val, TRUE );
}
}
void TMotore_application::update_profile()
{
TFilename fn(_doc->tipo().profile_name());
fn.ext("ini");
if (_pro && _pro->name() != fn)
{
delete _pro;
_pro = NULL;
}
if (_pro == NULL)
_pro = new TConfig( fn );
}
int TMotore_application::user_function( int index )
{
switch( index )
@ -88,7 +104,7 @@ TMask *TMotore_application::ss_getmask( int numriga, TMask& fullmask, bool destr
r->load(ss, riga);
}
TAssoc_array & row_masks = app()._row_masks;
TMask * row_mask = (TMask *) row_masks.objptr(tipo);
TVariable_mask * row_mask = (TVariable_mask *) row_masks.objptr(tipo);
if (row_mask == NULL)
{
row_mask = r->getmask();
@ -296,28 +312,6 @@ bool TMotore_application::tip_handler( TMask_field& f, KEY key )
return TRUE;
}
/* bool TMotore_application::ndoc_handler( TMask_field& f, KEY key )
{
TMask& m = f.mask( );
if ( key == K_TAB && m.is_running( ) )
{
TLocalisamfile& doc = app( ).rel( ).lfile( );
doc.zero( );
doc.put( "CODNUM", m.get( F_CODNUM ) );
doc.put( "PROVV", m.get( F_PROVV ) );
doc.put( "ANNO", m.get( F_ANNO ) );
doc.put( "NDOC", f.get( ) );
if ( doc.read( ) == NOERR )
{
m.set( F_TIPODOC, doc.get( "TIPODOC" ) );
m.send_key(K_TAB, F_TIPODOC);
m.set( F_STATO, doc.get( "STATO" ) );
m.stop_run( K_AUTO_ENTER );
}
}
return TRUE;
}
*/
bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
{
@ -330,11 +324,6 @@ bool TMotore_application::clifo_handler( TMask_field& f, KEY key )
TLocalisamfile& clifo = ((TEdit_field&)f).browse()->cursor()->file();
const long codcf = atol(f.get());
/* clifo.setkey( 1 );
clifo.put( "TIPOCF", cf );
clifo.put( "CODCF", codcf );
if (clifo.read( ) != NOERR)
clifo.zero(); */
if ( clifo.get_bool("SOSPESO") )
return f.error_box( "Il codice '%ld' e' sospeso e non puo' essere utilizzato", codcf );
if (app().clifo().load( cf, codcf, ""))
@ -425,8 +414,7 @@ void TMotore_application::configura_sheet( TSheet_field& sheet, TConfig& config
const int sconto_col = sheet.cid2index(FR_SCONTO);
if (to_delete[sconto_col] == FALSE)
{
TConfig ditta(CONFIG_DITTA);
const bool del = (ditta.get("GESSCORIGA") == "N");
const bool del = (_config_ditta->get("GESSCORIGA") == "N");
to_delete.set(sconto_col, del);
}
@ -439,99 +427,74 @@ void TMotore_application::configura_sheet( TSheet_field& sheet, TConfig& config
}
}
void TMotore_application::get_edit_mask( const char * profilo )
{
TFilename fn( profilo );
// query_mask( ).enable( DLG_NEWREC );
fn.ext( "ini" );
if ( _pro )
{
if ( ( *_proname ) == fn )
return;
delete _pro;
}
_pro = new TConfig( fn );
_proname = new TFilename( fn );
_proname->upper( );
TVariable_mask * _msk1 = (TVariable_mask *) _doc_masks.objptr(_tipodoc);
const bool newmask = _msk1 == NULL;
if (newmask)
{
_msk1 = new TVariable_mask( pro( ).get( "MSKFILE", "MAIN" ) ); // prof
_doc_masks.add(_tipodoc, _msk1);
}
_sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET );
sheet( ).set_notify( ss_handler );
sheet().set_append(FALSE);
TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof
app( ).tipocf( tipocf[ 0 ] );
if (newmask)
{
TList_field& listbox = ( TList_field& ) _msk1->field( F_LBTIPORIGA );
const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); //prof
TTable tabtr( "%TRI" );
TToken_string keys( "" ), descrs( "" );
for ( int i = 1; i <= numtr; i ++ )
{
TString chiave;
TToken_string item;
chiave.format( "%d", i );
tabtr.zero( );
TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); // pro
tabtr.put( "CODTAB", tiporiga );
if ( tabtr.read( ) == NOERR )
{
keys.add( tabtr.get( "CODTAB" ) );
descrs.add( tabtr.get( "S0" ) );
}
else
error_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga );
}
listbox.replace_items( keys, descrs );
configura_sheet( *_sheet, *_pro );
((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask );
if (_msk1->id2pos( F_OCCASEDIT ) > 0 )
_msk1->set_handler( F_OCCASEDIT, occas_handler );
_msk1->set_handler( F_CODCF, clifo_handler );
_msk1->set_handler( F_CODPAG, condpag_hndl );
_msk1->set_handler( F_DATAINSC, condpag_hndl );
// _msk1->set_handler( 99, elabora_handler );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof
for ( i = 1; i <= numhandler; i ++ )
{
TString chiave;
chiave.format( "%d", i );
TToken_string riga = pro( ).get( chiave, "HANDLERS" );
user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) );
}
}
// _msk1->set( F_MEMORIGA, "Riga1" );
}
TMask* TMotore_application::get_mask( int mode )
{
{
switch ( mode )
{
case MODE_INS:
case MODE_MOD:
{
_profilo = _msk->get( F_PROFILO );
_codnum = _msk->get( F_CODNUM );
_tipodoc = _msk->get( F_TIPODOC );
_anno = _msk->get_int(F_ANNO);
_tiponum = _msk->get(F_PROVV);
_numdoc = _msk->get_long(F_NDOC);
_statodoc = _msk->get_int(F_STATO);
get_edit_mask( _profilo );
TMask & emask = edit_mask();
return( &emask );
{
const TString16 tipodoc(_msk->get(F_TIPODOC));
_doc->head().put("TIPODOC", tipodoc);
TVariable_mask * msk1 = (TVariable_mask *) _doc_masks.objptr(tipodoc);
update_profile();
TString tipocf( app( ).pro( ).get( "TIPOCF", "MAIN" ) ); //prof
app( ).tipocf( tipocf[ 0 ] );
if (msk1 == NULL)
{
msk1 = new TVariable_mask(_doc->tipo().mask_name()); // prof
_doc_masks.add(tipodoc, msk1);
_sheet = &( TSheet_field& )msk1->field( F_SHEET );
sheet( ).set_notify( ss_handler );
sheet().set_append(FALSE);
TList_field& listbox = ( TList_field& ) msk1->field( F_LBTIPORIGA );
const int numtr = app( ).pro( ).get_int( "NTIPIRIGA", "RIGHE" ); //prof
TTable tabtr( "%TRI" );
TToken_string keys( "" ), descrs( "" );
for ( int i = 1; i <= numtr; i ++ )
{
TString chiave;
TToken_string item;
chiave.format( "%d", i );
tabtr.zero( );
TString tiporiga( app( ).pro( ).get( chiave, "RIGHE" ) ); // pro
tabtr.put( "CODTAB", tiporiga );
if ( tabtr.read( ) == NOERR )
{
keys.add( tabtr.get( "CODTAB" ) );
descrs.add( tabtr.get( "S0" ) );
}
else
error_box( "Inserito un tipo di riga non valido ( %s )", ( const char * )tiporiga );
}
listbox.replace_items( keys, descrs );
configura_sheet( *_sheet, *_pro );
((TVariable_sheet_field&)sheet()).set_getmask( ss_getmask );
if (msk1->id2pos( F_OCCASEDIT ) > 0 )
msk1->set_handler( F_OCCASEDIT, occas_handler );
msk1->set_handler( F_CODCF, clifo_handler );
msk1->set_handler( F_CODPAG, condpag_hndl );
msk1->set_handler( F_DATAINSC, condpag_hndl );
// _msk1->set_handler( 99, elabora_handler );
int numhandler = pro( ).get_int( "NHANDLER", "HANDLERS" ); // prof
for ( i = 1; i <= numhandler; i ++ )
{
TString chiave;
chiave.format( "%d", i );
TToken_string riga = pro( ).get( chiave, "HANDLERS" );
user_set_handler( riga.get_int( 0 ), riga.get_int( 1 ) );
}
}
else
_sheet = &( TSheet_field& )edit_mask( ).field( F_SHEET );
return msk1;
}
break;
}
default:
if( _msk == NULL)
_msk = new TMask( "ve1000a" );
return _msk;
break;
}
@ -555,75 +518,63 @@ const char* TMotore_application::get_next_key( )
{
TToken_string key;
TMask& m = curr_mask( );
const TString value = m.get( F_CODNUM );
if (value.empty())
return NULL;
TTable tabnum( "NUM" );
tabnum.zero( );
tabnum.put( "CODTAB", value );
if ( tabnum.read( ) == NOERR )
if (value.not_empty())
{
// Se per questa numerazione h abilitata le numerazione automatica
if ( tabnum.get_bool ( "B1" ) )
TTable tabnum( "NUM" );
tabnum.zero( );
tabnum.put( "CODTAB", value );
if ( tabnum.read( ) == NOERR && tabnum.get_bool ( "B1" ))
// Se per questa numerazione h abilitata le numerazione automatica
{
TLocalisamfile doc( LF_DOC );
doc.zero( );
doc.put( "CODNUM", value );
doc.put( "ANNO", m.get( F_ANNO ) );
TLocalisamfile doc(LF_DOC);
doc.zero();
doc.put("CODNUM", value);
doc.put("ANNO", m.get(F_ANNO));
doc.put("PROVV", m.get(F_PROVV));
TRectype cmp_rec(doc.curr()); // record campione
doc.put( "NDOC", 9999999L );
// Se per questa numerazione h abilitata le numerazione provvisoria
if ( tabnum.get_bool ( "B0" ) )
{
doc.put( "PROVV", "P" );
}
else // Altrimenti ...
{
doc.put( "PROVV", "D" );
}
if ( doc.read( _isgteq ) == NOERR )
{
doc.prev( );
}
long num = ( value == doc.get( "CODNUM" ) ) ? doc.get_long( "NDOC" ) : 0;
key.format( "%d|%d", F_NDOC, num + 1 );
return key;
if (doc.read(_isgteq) == NOERR)
doc.prev();
const long num = ((doc.curr() == cmp_rec) ? doc.get_long( "NDOC" ) : 0) + 1;
key.format( "%d|%d", F_NDOC, num);
}
}
return NULL;
return key;
}
int TMotore_application::read( TMask& m )
{
azzera_piedi( );
int err = TRelation_application::read( m );
azzera_piedi( );
TRectype & curr = _rel->lfile().curr();
const int err = _doc->read(curr);
if ( err == NOERR )
{
const char tipocf = m.get( F_TIPOCF )[ 0 ];
clifo( ).load( tipocf, m.get_int( F_CODCF ), rel( ).curr( ).get( "OCFPI" ) );
clifo( ).update_mask( ( TVariable_mask& ) m, TRUE );
// TLocalisamfile& rdoc = rel( ).lfile( LF_RIGHEDOC );
_statodoc = m.get_int(F_STATO);
TRectype r(_rdoc->curr( ));
r.zero( );
/*
r.put( "CODNUM", _codnum);
r.put( "PROVV", _tiponum);
r.put( "ANNO", _anno);
r.put( "NDOC", _numdoc);
*/
r.put( "CODNUM", m.get(F_CODNUM));
r.put( "PROVV", m.get(F_PROVV));
r.put( "ANNO", m.get(F_ANNO));
r.put( "NDOC", m.get(F_NDOC));
_righe_rec->read( r );
{
curr = _doc->head();
m.autoload(*_rel);
const char tipocf = _doc->head().get("TIPOCF")[0];
const long codcf = _doc->head().get_long("CODCF");
const TString occas_cod(_doc->head().get("OCFPI"));
clifo().load( tipocf, codcf, occas_cod);
clifo().update_mask( ( TVariable_mask& ) m, TRUE );
TSheet_field& f = ( TSheet_field& ) m.field( F_SHEET );
f.destroy( );
int last = _righe_rec->last_row( );
for ( int i = 1; i <= last; i ++ )
const int rows = _doc->rows();
for (int i = 1; i <= rows; i++)
{
TToken_string& srow = f.row( i - 1 );
TRectype& rec = _righe_rec->row( i, FALSE );
TRectype& rec = (*_doc)[i];
TRiga currentrow;
currentrow.load( rec );
@ -636,14 +587,6 @@ int TMotore_application::read( TMask& m )
return err;
}
bool TMotore_application::check_key( TLocalisamfile& rdoc, TString16 codnum, bool provv, TString16 anno, TString16 ndoc )
{
return ( ( rdoc.get( "CODNUM" ) == codnum ) &&
( rdoc.get( "NDOC" ) == ndoc ) &&
( rdoc.get( "ANNO" ) == anno ) &&
( rdoc.get_bool( "PROVV" ) == provv ) );
}
int TMotore_application::write( const TMask& m ) // C 90
{
int err = esegui_procedura(OP_NUOVO);
@ -655,32 +598,25 @@ int TMotore_application::write( const TMask& m ) // C 90
err = app().clifo().write_occas();
if ( err == NOERR )
{
err = TRelation_application::write( m );
if ( err == NOERR )
{
TSheet_field& f = ss( );
_righe_rec->destroy_rows( );
((TRectype &)_righe_rec->key()).zero();
/*
_righe_rec->renum_key("CODNUM", _codnum);
_righe_rec->renum_key("PROVV", _tiponum);
_righe_rec->renum_key("ANNO", _anno);
_righe_rec->renum_key("NDOC", _numdoc);
*/
_righe_rec->renum_key( "CODNUM", m.get(F_CODNUM));
_righe_rec->renum_key( "PROVV", m.get(F_PROVV));
_righe_rec->renum_key( "ANNO", m.get(F_ANNO));
_righe_rec->renum_key( "NDOC", m.get(F_NDOC));
for ( int i = 0; i < f.items( ); i ++ )
{
TToken_string& t = f.row( i );
TRectype& rec = _righe_rec->row( i + 1, TRUE );
store_riga( f, i, rec );
}
err = _righe_rec->write( );
}
m.autosave(*_rel);
_doc->head() = _rel->lfile().curr();
TSheet_field& f = ss( );
_doc->destroy_rows();
for ( int i = 0; i < f.items( ); i ++ )
{
TToken_string& t = f.row( i );
TRectype& rec = _doc->add_row();
store_riga( f, i, rec );
}
err = _doc->write( );
}
if (err == NOERR)
{
_rel->curr() = _doc->head();
_rel->read(); // per posizionare correttamente la relazione
}
}
return err;
}
@ -696,62 +632,30 @@ int TMotore_application::rewrite( const TMask& m ) // C 90
err = app( ).clifo( ).write_occas( );
if ( err == NOERR )
{
err = TRelation_application::rewrite( m );
if ( err == NOERR )
{
TSheet_field& f = ss( );
_righe_rec->destroy_rows( );
for ( int i = 0; i < f.items( ); i ++ )
{
TToken_string& t = f.row( i );
TRectype& rec = _righe_rec->row( i + 1, TRUE );
store_riga( f, i, rec );
}
err = _righe_rec->rewrite( );
}
m.autosave(*_rel);
_doc->head() = _rel->lfile().curr();
TSheet_field& f = ss( );
_doc->destroy_rows( );
for ( int i = 0; i < f.items( ); i ++ )
{
TToken_string& t = f.row( i );
TRectype& rec = _doc->add_row();
store_riga( f, i, rec );
}
err = _doc->rewrite( );
}
}
return err;
}
// La funzione si trova in ve0100b
long TMotore_application::prossimo_numero( bool provv )
{
long ret;
TTable tabnum( "NUM" );
tabnum.read( );
if ( provv )
ret = tabnum.get_long( "I0" ) + 1;
else
ret = tabnum.get_long( "I1" ) + 1;
return ( ret );
}
int TMotore_application::avanza_numero( bool provv )
{
TTable tabnum( "NUM" );
int err = tabnum.read( );
if ( err == NOERR )
{
if ( provv )
tabnum.put( "I0", tabnum.get_long( "I0" ) + 1 );
else
tabnum.put( "I1", tabnum.get_long( "I1" ) + 1 );
err = tabnum.rewrite( );
}
return err;
}
bool TMotore_application::remove( void ) // C 80
{
if ( ! valida_operazione( OP_CANCELLA ) )
return FALSE;
int err = esegui_procedura(OP_CANCELLA);
return TRelation_application::remove() && ( _righe_rec->remove() == NOERR );
return _doc->remove() == NOERR;
}
void TMotore_application::load_riga( TSheet_field& f, int numrig, TRectype& r )
@ -802,16 +706,38 @@ void TMotore_application::store_riga( TSheet_field& f, int numrig, TRectype& r )
TToken_string& rigastr = f.row( numrig );
TRiga riga;
riga.load(f, rigastr, &r);
// riga.set_numero( numrig + 1 );
riga.save( r );
}
void TMotore_application::open_files(int logicnum, ...)
{
va_list marker;
va_start(marker, logicnum);
while (logicnum > 0)
{
CHECKD(_file.objptr(logicnum) == NULL, "File gia' aperto: ", logicnum);
_file.add(new TLocalisamfile(logicnum), logicnum);
logicnum = va_arg(marker, int);
}
}
void TMotore_application::on_firm_change()
{
if (_config_ditta != NULL)
delete _config_ditta;
_config_ditta = new TConfig(CONFIG_DITTA);
condv().set_config(_config_ditta);
_doc_masks.destroy();
_row_masks.destroy();
TApplication::on_firm_change();
}
bool TMotore_application::user_create( )
{
TConfig ditta( CONFIG_DITTA );
_config_ditta = new TConfig(CONFIG_DITTA);
// Controllo se sono cambiate le impostazioni delle vendite.
if (ditta.get_bool( "CHANGED", "ve" ))
if (_config_ditta->get_bool( "CHANGED", "ve" ))
{ // Se sono cambiate, rigenero tutte le maschere
if (yesno_box( CHANGE_MESSAGE ) )
{
@ -825,22 +751,19 @@ bool TMotore_application::user_create( )
// Metto in relazione testata e righe
_rel = new TRelation( LF_DOC );
_rdoc = new TLocalisamfile(LF_RIGHEDOC);
// rel( ).add( LF_RIGHEDOC,"CODNUM=CODNUM|ANNO=ANNO|PROVV=PROVV|NDOC=NDOC" );
// Inizializzo il Record_array
_righe_rec = new TRecord_array( LF_RIGHEDOC, "NRIGA", 1 );
open_files(LF_RIGHEDOC, LF_CONDV, LF_RCONDV, LF_ANAMAG, LF_SCONTI, LF_UMART, 0);
_doc = new TDocumento;
_clifor = new TCliForVendite( );
_condv = new TCond_vendita(*_clifor, _config_ditta);
azzera_piedi( );
_msk = new TMask( "ve1000a" );
// query_mask( ).set_handler( F_NDOC, ndoc_handler );
_msk = new TMask( "ve0100a" );
query_mask( ).set_handler( F_CODNUM, num_handler );
query_mask( ).set_handler( F_TIPODOC, tip_handler );
TConfig utente( CONFIG_USER );
_codnum = utente.get( "CODNUM", "ve" );
if (!_codnum.blank( ))
_tipodoc = utente.get( "TIPODOC", "ve" );
_doc->head().put("CODNUM", utente.get("CODNUM"));
_doc->head().put("TIPODOC", utente.get("TIPODOC"));
// La maschera di inserimento/modifica per ora non la so!
// Viene letta dal profilo non appena trovato il record
@ -851,19 +774,19 @@ bool TMotore_application::user_destroy( )
{
// Registro l'ultimo tipo documento e l'ultima numerazione
TConfig utente( CONFIG_USER );
utente.set( "CODNUM", _codnum, "ve" );
utente.set( "TIPODOC", _tipodoc, "ve" );
utente.set( "CODNUM", _doc->numerazione(), "ve" );
utente.set( "TIPODOC", _doc->tipodoc(), "ve" );
if (_config_ditta != NULL)
delete _config_ditta;
// Distruggo la maschera di modifica
if ( _msk != NULL )
delete _msk;
// Distruggo la relazione
delete _doc;
delete _rel;
delete _rdoc;
// Distruggo il Record_array
delete _righe_rec;
delete _condv;
return TRUE;
}
@ -935,26 +858,9 @@ bool TMotore_application::stato_valido( int stato, int operazione )
return ( ret.get_pos( p ) != -1 );
}
/*void TMotore_application::setta_stato_corrente( int nuovostato )
{
// warning_box( "Settaggio stati validi!\nStato corrente %s.\nStati validi %s.\nStato finale %s.", stato_corrente( ), stati_validi( operazione ), stato_finale( operazione ) );
TString p;
p.format( "%d", nuovostato );
TLocalisamfile& doc = rel( ).lfile( LF_DOC );
p[ 0 ] += ( char ) nuovostato;
doc.put( "STATO", p );
doc.rewrite( );
query_mask( ).set( F_STATO, p );
// warning_box( "Settaggio stati validi!\nStato corrente %s.\nStati validi %s.\nStato finale %s.", stato_corrente( ), stati_validi( operazione ), stato_finale( operazione ) );
} */
int TMotore_application::stato_corrente( )
{
// int i = query_mask( ).get_int( F_STATO );
// return ( i == 0 ? NO_DOC_STATUS : i );
return _statodoc;
return _doc->head().get_int("STATO");
}
void TMotore_application::segnala_stato_non_valido( int operazione )

View File

@ -131,44 +131,41 @@
// Definizione della classe dell'applicazione motore
class TMotore_application : public TRelation_application
{
TArray _file; // Tutti i fiels da usare
// Array di totalizzatori
TPiede_documento _piede;
// Record array per la gestione delle righe
TRecord_array* _righe_rec;
// Puntatore al profilo del documento caricato
TConfig* _pro;
// Puntatore al nome, per evitare di ricrearlo se h uguale
TFilename* _proname;
// Puntatore alla maschera di ricerca
TMask* _msk;
TDocumento * _doc;
// Puntatore al profilo del documento caricato
TConfig * _pro;
TConfig * _config_ditta;
// Puntatore alla maschera di ricerca
TMask * _msk;
// Puntatore alla maschera di modifica/inserimento ( dipende dal profilo )
// TVariable_mask* _msk1;
// puntatore alla relazione
TRelation* _rel;
TLocalisamfile * _rdoc;
TRelation * _rel;
// Puntatore allo sheet delle righe documento
TSheet_field * _sheet;
// Oggetto cliente per il motore
TCliForVendite* _clifor;
TCliForVendite * _clifor;
TCond_vendita * _condv;
// Indica se il documento ha come soggetto un <C>liente o un <F>ornitore
char _tipocf;
TString16 _profilo;
TString16 _codnum;
TString16 _tipodoc;
int _anno;
TString16 _tiponum;
long _numdoc;
int _statodoc;
// TString16 _profilo;
// TString16 _codnum;
// TString16 _tipodoc;
// int _anno;
// TString16 _tiponum;
// long _numdoc;
// int _statodoc;
// Array di maschere documento
@ -201,9 +198,6 @@ class TMotore_application : public TRelation_application
void user_set_handler( int fieldid, int index, TMask* m = NULL );
long prossimo_numero( bool provv );
int avanza_numero( bool provv );
void get_edit_mask( const char * profilo );
void azzera_piedi( );
void carica_piedi( );
void somma_piedi( );
@ -214,8 +208,14 @@ class TMotore_application : public TRelation_application
protected:
void open_files(int logicnum, ...);
void close_files() { _file.destroy(); }
virtual void on_firm_change();
// Procedure e funzioni per la gestione della maschera e dei files
void read_rdoc( TMask& m );
void read_rdoc( TMask& m );
void update_profile();
// formato dipendente dallo sheet ( sono le varie colonne )
void load_riga( TSheet_field& f, int numrig, TRectype& r );
@ -224,7 +224,6 @@ protected:
void save( TRelation* r ) const;
void set_descr ( int numrig, const char* descr );
void carica_righe_libere( int from = -1 );
bool check_key( TLocalisamfile& rdoc, TString16 codnum, bool provv, TString16 _anno, TString16 _ndoc );
// Procedure e funzioni per la gestione degli stati
// void setta_stato_corrente( int nuovostato );
@ -262,15 +261,15 @@ public:
// Funzioni di accesso alle variabili private
TRecord_array& righe_rec( ) { CHECK( _righe_rec, "Record array delle righe nullo!" ); return * _righe_rec; }
TConfig& pro( ) { CHECK( _pro, "Profilo del documento nullo!" ); return *_pro; }
TFilename& proname( ) { CHECK( _proname, "Nome del profilo nullo!" ); return *_proname; }
TMask& query_mask( ) { CHECK( _msk, "Maschera di ricerca nulla!" ); return *_msk; }
TMask& edit_mask( ) { return (TMask &) _doc_masks[_tipodoc]; }
TRelation& rel( ) { CHECK( _rel, "Relazione nulla!" ); return *_rel; }
TSheet_field& sheet( ) { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; }
TCliForVendite& clifo( ) { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; }
TPiede_documento& piede( ){ return _piede; }
TConfig & pro() { CHECK( _pro, "Profilo del documento nullo!" ); return *_pro; }
const TFilename & proname() { return _pro->name(); }
TMask & query_mask() { CHECK( _msk, "Maschera di ricerca nulla!" ); return *_msk; }
TMask & edit_mask() { return (TMask &) _doc_masks[_doc->tipodoc()]; }
TRelation & rel() { CHECK( _rel, "Relazione nulla!" ); return *_rel; }
TSheet_field & sheet() { CHECK( _sheet, "Sheet nullo!" ); return *_sheet; }
TCliForVendite & clifo() { CHECK( _clifor, "Oggetto cliente nullo!" ); return *_clifor; }
TPiede_documento & piede() { return _piede; }
TCond_vendita & condv() { return *_condv; }
// Operazione

View File

@ -104,17 +104,3 @@ bool condpag_hndl( TMask_field& field, KEY key )
return TRUE;
}
// handler per la validazione di una stringa/sconto
bool sconto_hndl( TMask_field& field, KEY key )
{
if (field.to_check(key, TRUE))
{
TCond_vendita s(app().clifo());
s.set_sconto( field.get( ), TRUE );
const bool ok = s.is_valid();
if( ok )
field.set( s.get_sconto( ) );
return ok;
}
return TRUE;
}

View File

@ -8,7 +8,7 @@ BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
@ -117,7 +117,7 @@ BOOLEAN 111
BEGIN
PROMPT 2 2 "Gestione archivio campagne"
MESSAGE TRUE ENABLE,3@
MESSAGE FALSE DISABLE,3@
MESSAGE FALSE DISABLE,3@
FIELD GES[A_CAMPAGNE]
END
@ -189,7 +189,7 @@ END
ENDPAGE
PAGE "Tab. gestione sconti " 1 1 60 14
PAGE "Tab. gestione sconti " 1 1 60 14
GROUPBOX DLG_NULL 78 10
BEGIN
@ -204,7 +204,7 @@ ITEM "P|Percentuale su anagrafica "
ITEM "T|Gestione tabella sconti "
ITEM "A|Gestione archivio sconti "
FIELD GESSCO
END
END
BOOLEAN 120
BEGIN
@ -291,7 +291,7 @@ ITEM "L|Codice linea "
ITEM "C|Codice linea/categoria "
ITEM "R|Codice raggruppamento fiscale "
FIELD SCORIGAKEY
END
END
BOOLEAN 129
BEGIN
@ -301,7 +301,7 @@ END
BOOLEAN 130
BEGIN
PROMPT 2 13 "Gestione archivio sconti unità di misura "
PROMPT 2 13 "Gestione archivio sconti unita' di misura "
FIELD GESSCOUM
END

View File

@ -8,7 +8,7 @@ BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
@ -37,19 +37,18 @@ FIELD GESSUBAGE
GROUP 8
END
LIST F_TIPOPERC 33
LIST F_TIPOPERC 25
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 "
ITEM "V|Categoria vendita"
ITEM "A|Agenti "
ITEM "C|Clienti "
ITEM "L|Condizioni di vendita"
GROUP 1
END
END
BOOLEAN F_GESARCHPROV
BOOLEAN F_GESARCHPROV
BEGIN
PROMPT 2 4 "Gestione archivio provvigioni "
FIELD AGEARCPROVV
@ -61,28 +60,28 @@ BEGIN
PROMPT 2 5 "Chiavi archivio provvigioni "
FIELD AGEKEYPROVV[1]
GROUP 1
END
END
STRING F_ARCHPROV2 4
BEGIN
PROMPT 2 6 " "
FIELD AGEKEYPROVV[2]
GROUP 1
END
END
STRING F_ARCHPROV3 4
BEGIN
PROMPT 2 7 " "
FIELD AGEKEYPROVV[3]
GROUP 1
END
END
STRING F_ARCHPROV4 4
BEGIN
PROMPT 2 8 " "
FIELD AGEKEYPROVV[4]
GROUP 1
END
END
LIST F_TIPOLIQPROV 41
BEGIN
@ -419,7 +418,7 @@ END
ENDPAGE
PAGE "Tabella arrotondamenti " 1 1 60 14
PAGE "Tabella arrotondamenti " 1 1 60 14
GROUPBOX DLG_NULL 78 9
BEGIN
@ -430,79 +429,79 @@ NUMBER DLG_NULL 9
BEGIN
PROMPT 2 1 "Arrot. prezzi: fino a lire "
FIELD ARRLIV[ 1 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 1 ""
FIELD ARRARG[ 1 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 2 ""
FIELD ARRLIV[ 2 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 2 ""
FIELD ARRARG[ 2 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 3 ""
FIELD ARRLIV[ 3 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 3 ""
FIELD ARRARG[ 3 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 4 ""
FIELD ARRLIV[ 4 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 4 ""
FIELD ARRARG[ 4 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 5 ""
FIELD ARRLIV[ 5 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 5 ""
FIELD ARRARG[ 5 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 6 ""
FIELD ARRLIV[ 6 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 42 6 ""
FIELD ARRARG[ 6 ]
END
END
NUMBER DLG_NULL 9
BEGIN
PROMPT 29 7 "oltre "
FIELD ARRARG[ 7 ]
END
END
ENDPAGE

View File

@ -8,7 +8,7 @@ BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
@ -27,50 +27,50 @@ STRING DLG_NULL 3
BEGIN
PROMPT 2 1 "Codice tabella sconto cliente "
FIELD SCOPRCOD
END
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SCOPRCODCON[1,2]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
PROMPT 29 5 ""
FIELD SCOPRCODCON[3,4]
END
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
PROMPT 35 5 ""
FIELD SCOPRCODCON[5,10]
END
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
PROMPT 47 5 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
PROMPT 2 7 "Num. campo piede documento "
FIELD SCOPRNPIEDE
END
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
PROMPT 34 7 ""
END
ENDPAGE
PAGE "Tabella gestione sconto ad importo " 1 1 60 14
PAGE "Tabella gestione sconto ad importo " 1 1 60 14
GROUPBOX DLG_NULL 78 9
BEGIN
@ -81,46 +81,46 @@ STRING DLG_NULL 3
BEGIN
PROMPT 2 1 "Codice tabella sconto ad importo "
FIELD SCOIMCOD
END
END
STRING DLG_NULL 30
BEGIN
PROMPT 2 3 "Descrizione "
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 5 "Cod. contabilità "
FIELD SCOIMCODCON[1,2]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 29 5 ""
PROMPT 29 5 ""
FIELD SCOIMCODCON[3,4]
END
END
STRING DLG_NULL 6
BEGIN
PROMPT 35 5 ""
PROMPT 35 5 ""
FIELD SCOIMCODCON[5,10]
END
END
STRING DLG_NULL 26
BEGIN
PROMPT 47 5 ""
END
PROMPT 47 5 ""
END
STRING DLG_NULL 2
BEGIN
PROMPT 2 7 "Num. campo piede documento "
PROMPT 2 7 "Num. campo piede documento "
FIELD SCOIMNPIEDE
END
END
STRING DLG_NULL 26
BEGIN
PROMPT 34 7 ""
END
PROMPT 34 7 ""
END
ENDPAGE

View File

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

View File

@ -8,14 +8,14 @@ BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Tabella descrizione codice articolo " 1 1 60 14
PAGE "Tabella descrizione codice articolo " 1 1 60 14
GROUPBOX DLG_NULL 78 18
BEGIN
@ -25,185 +25,185 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 2 1 "Descr. Cod. "
END
END
TEXT DLG_NULL
BEGIN
PROMPT 14 1 "Descrizione "
END
END
TEXT DLG_NULL
BEGIN
PROMPT 48 1 "Lungh. campi "
END
END
TEXT DLG_NULL
BEGIN
PROMPT 63 1 "Tipo campi "
END
END
TEXT DLG_NULL
BEGIN
PROMPT 2 2 "Cod. art. "
END
END
STRING DLG_NULL 30
BEGIN
PROMPT 14 2 ""
FIELD CODARTDES
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 48 2 ""
FIELD CODARTLUN[1]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 52 2 ""
FIELD CODARTLUN[2]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 56 2 ""
FIELD CODARTLUN[3]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 63 2 ""
FIELD CODARTPIC[1]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 67 2 ""
FIELD CODARTPIC[2]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 71 2 ""
FIELD CODARTPIC[3]
END
END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "I° indice "
END
END
STRING DLG_NULL 30
BEGIN
PROMPT 14 3 ""
FIELD INDARTDES[1]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 48 3 ""
FIELD INDARTLUN[1]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 63 3 ""
FIELD INDARTPIC[1]
END
END
TEXT DLG_NULL
BEGIN
PROMPT 2 4 "II° indice "
END
END
STRING DLG_NULL 30
BEGIN
PROMPT 14 4 ""
FIELD INDARTDES[2]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 48 4 ""
FIELD INDARTLUN[2]
END
END
STRING DLG_NULL 2
BEGIN
PROMPT 63 4 ""
FIELD INDARTPIC[2]
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Gestione articoli in lingua "
PROMPT 2 6 "Gestione articoli in lingua "
FIELD ARTGESLIN
END
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 7 "Codice lingua n.1 "
PROMPT 5 7 "Codice lingua n.1 "
FIELD ARTCODLIN[1]
END
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 8 "Codice lingua n.2 "
PROMPT 5 8 "Codice lingua n.2 "
FIELD ARTCODLIN[2]
END
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 9 "Codice lingua n.3 "
PROMPT 5 9 "Codice lingua n.3 "
FIELD ARTCODLIN[3]
END
END
NUMBER DLG_NULL 1
BEGIN
PROMPT 5 10 "Codice lingua n.4 "
PROMPT 5 10 "Codice lingua n.4 "
FIELD ARTCODLIN[4]
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 11 "Gestione più magazzini "
PROMPT 2 11 "Gestione più magazzini "
FIELD ARTGESMAG
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 12 "Gestione depositi "
PROMPT 2 12 "Gestione depositi "
FIELD ARTGESDEP
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 13 "Gestione commesse "
PROMPT 2 13 "Gestione commesse "
FIELD ARTGESCOMM
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 14 "Gestione quantità in decimali "
PROMPT 2 14 "Gestione quantita' in decimali "
FIELD ARTGESQDEC
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 15 "Gestione valuta "
PROMPT 2 15 "Gestione valuta "
FIELD ARTGESVAL
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 16 "Ripetizione primo indice "
PROMPT 2 16 "Ripetizione primo indice "
FIELD ARTRIPIND
END
END
ENDPAGE
PAGE "Tabella personalizzazione anagrafico articoli " 1 1 60 14
PAGE "Tabella personalizzazione anagrafico articoli " 1 1 60 14
GROUPBOX DLG_NULL 78 18
BEGIN
@ -214,7 +214,7 @@ BOOLEAN DLG_NULL
BEGIN
PROMPT 2 1 "Gestione descrizioni estese "
FIELD ARTGESDESCEST
END
END
LIST DLG_NULL 35
BEGIN
@ -229,77 +229,73 @@ BOOLEAN DLG_NULL
BEGIN
PROMPT 2 3 "Gestione articoli per taglia "
FIELD ARTGESTAGLIA
END
END
STRING DLG_NULL 10
BEGIN
PROMPT 2 4 "Descrizione campi chiave "
FIELD ARTDESCHI[1]
END
END
STRING DLG_NULL 10
BEGIN
PROMPT 2 5 "Descrizione campi chiave "
FIELD ARTDESCHI[2]
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 6 "Gestione più unità di misura "
PROMPT 2 6 "Gestione piu' unita' di misura "
FIELD ARTGESUM
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 7 "Gestione secondo codice iva "
FIELD ARTGESCODIVA
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 8 "Gestione campi peso lordo/netto "
FIELD ARTGESPLN
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 9 "Gestione campo aspetto dei beni "
FIELD ARTGESASPBEN
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 10 "Gestione campo codice gruppo articolo "
FIELD ARTGESCODGR
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 11 "Gestione campo distinta base "
FIELD ARTGESDB
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 12 "Gestione campo categorie vendite "
FIELD ARTGESCATVEN
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 13 "Gestione campo categorie acquisti "
FIELD ARTGESCATACQ
END
END
BOOLEAN DLG_NULL
BEGIN
PROMPT 2 14 "Gestione codice fornitore "
FIELD ARTGESCODFOR
END
END
ENDPAGE
ENDMASK

View File

@ -525,7 +525,7 @@ FLAG=Z
USE=%BAN SE CODTAB?="?????"
INPUT=CODTAB[1,5] F_CODABIA
DISPLAY="Cod. Istit." CODTAB[1,5]~"Cod. Fil." CODTAB[6,10]~"Denominazione@50" S0
OUTPUT=F_CODABIA CODTAB[1,5]~F_CODCABA CODTAB[6,10]~F_DESBANAPP S0
OUTPUT=F_CODABIA CODTAB[1,5]~F_DESBANAPP S0
[CODCABA]
GROUP=600
@ -540,7 +540,7 @@ FLAG=Z
USE=%BAN SE CODTAB?="??????????"
INPUT=CODTAB[1,5] F_CODABIA~CODTAB[6,10] F_CODCABA
DISPLAY=@F_CODABIA
OUTPUT=@F_CODABIA
OUTPUT=F_CODABIA CODTAB[1,5]~F_CODCABA CODTAB[6,10]~F_DESBANAPP S0
[DESBANAPP]
GROUP=600
@ -568,7 +568,7 @@ FLAG=Z
USE=@F_CODABIA
INPUT=CODTAB[1,5] F_CODABIP
DISPLAY="Cod. Istit." CODTAB[1,5]~"Cod. Fil." CODTAB[6,10]~"Denominazione@50" S0
OUTPUT=F_CODABIP CODTAB[1,5]~F_CODCABP CODTAB[6,10]~F_DESBANPRE S0
OUTPUT=F_CODABIP CODTAB[1,5]~F_DESBANPRE S0
[CODCABP]
GROUP=700
@ -583,7 +583,7 @@ FLAG=Z
USE=@F_CODCABA
INPUT=CODTAB[1,5] F_CODABIP~CODTAB[6,10] F_CODCABP
DISPLAY=@F_CODABIP
OUTPUT=@F_CODABIP
OUTPUT=F_CODABIP CODTAB[1,5]~F_CODCABP CODTAB[6,10]~F_DESBANPRE S0
[DESBANPRE]
GROUP=700
@ -903,7 +903,7 @@ TYPE=T_STRINGA
PROMPT="Agente "
SIZE=5
FLAG=U
USE=%AGE
USE=AGE
INPUT=CODTAB F_CODAG
DISPLAY="Codice" CODTAB~"Descrizione@50" S0
OUTPUT=F_CODAG CODTAB~F_DESAG S0
@ -918,7 +918,7 @@ MSKID=F_DESAG
TYPE=T_STRINGA
PROMPT=""
SIZE=50
USE=%AGE KEY 2
USE=AGE KEY 2
INPUT=S0 F_DESAG
DISPLAY="Descrizione@50" S0~"Codice" CODTAB
OUTPUT=F_CODAG CODTAB~F_DESAG S0
@ -934,7 +934,7 @@ TYPE=T_STRINGA
PROMPT="Agente da vis. "
SIZE=5
FLAG=U
USE=%AGE
USE=AGE
INPUT=CODTAB F_CODAGVIS
DISPLAY="Codice" CODTAB~"Descrizione@50" S0
OUTPUT=F_CODAGVIS CODTAB~F_DESAGVIS S0
@ -949,7 +949,7 @@ MSKID=F_DESAGVIS
TYPE=T_STRINGA
PROMPT=""
SIZE=50
USE=%AGE KEY 2
USE=AGE KEY 2
INPUT=S0 F_DESAGVIS
DISPLAY="Descrizione@50" S0~"Codice" CODTAB
OUTPUT=F_CODAGVIS CODTAB~F_DESAGVIS S0

View File

@ -461,7 +461,7 @@ BEGIN
PROMPT 2 4 "Raggrupp. fiscale "
FIELD LF_ANAMAG->RAGGFIS
USE %RFA
JOIN %ASF ALIAS 200 INTO CODTAB=S8
JOIN %ASF ALIAS 200 INTO CODTAB=S8
INPUT CODTAB F_RAGGFIS
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione@40" S0
@ -519,7 +519,7 @@ END
NUMBER F_PROVV 5 2
BEGIN
FIELD LF_ANAMAG->PROVV
FIELD LF_ANAMAG->PERCPROVV
PROMPT 2 7 "Provvigione "
NUM_EXPR (#F_PROVV>=0)&&(#F_PROVV<=100)
WARNING "La percentuale di provvigione deve essere compresa tra 0 e 100"
@ -552,4 +552,4 @@ ENDMASK
#include "ve2400a.uml"
#include "ve2400b.uml"
#include "ve2400c.uml"

View File

@ -116,17 +116,17 @@ int TDocumento::read(const TRectype& rec)
{
_head = rec; // Inizializza i campi chiave in ogni caso
TRectype* key = new TRectype(LF_RIGHEDOC);
key->put("CODNUM", _head.get("CODNUM"));
key->put("ANNO", _head.get("ANNO"));
key->put("PROVV", _head.get("PROVV"));
key->put("NDOC", _head.get("NDOC"));
TLocalisamfile doc(LF_DOC);
int err = _head.read(doc);
TRectype* key = new TRectype(LF_RIGHEDOC);
key->put("CODNUM", doc.get("CODNUM"));
key->put("ANNO", doc.get("ANNO"));
key->put("PROVV", doc.get("PROVV"));
key->put("NUMDOC", doc.get("NUMDOC"));
if (err == NOERR)
err = _rows.read(key);
_rows.read(key);
else
{
_head = rec;
@ -146,7 +146,7 @@ int TDocumento::read(char provv, int anno, const char* codnum, long numdoc)
rec.put("CODNUM", codnum);
rec.put("ANNO", anno);
rec.put("PROVV", provv);
rec.put("NUMDOC", numdoc);
rec.put("NDOC", numdoc);
return read(rec);
}
@ -154,28 +154,43 @@ int TDocumento::read(char provv, int anno, const char* codnum, long numdoc)
int TDocumento::write(bool re) const
{
TLocalisamfile doc(LF_DOC);
int err = re ? _head.rewrite(doc) : _head.write(doc);
if (err != NOERR)
err = re ? _head.write(doc) : _head.rewrite(doc);
if (err == NOERR)
err = _rows.write(re);
int err = NOERR;
if (re)
{
err = _rows.write(re);
if (err == NOERR)
{
err = _head.rewrite(doc);
if (err != NOERR)
err = _head.write(doc);
}
}
else
{
err = _head.write(doc);
if (err != NOERR)
err = _head.rewrite(doc);
if (err == NOERR)
err = _rows.write(re);
}
return err;
}
int TDocumento::remove() const
{
TLocalisamfile doc(LF_DOC);
int err = _head.remove(doc);
int err = _rows.remove();
if (err == NOERR)
err = _rows.remove();
err = _head.remove(doc);
return err;
}
const TTipo_documento& TDocumento::tipo() const
{
const char* tipodoc = _head.get("TIPODOC");
const TString16 tipodoc(_head.get("TIPODOC"));
CHECK(*tipodoc, "Tipo documento nullo");
TTipo_documento* o = (TTipo_documento*)_tipi.objptr(tipodoc);
TTipo_documento * o = (TTipo_documento*)_tipi.objptr(tipodoc);
if (o == NULL)
{
o = new TTipo_documento(tipodoc);

View File

@ -21,7 +21,7 @@ protected:
int read(const char* tipodoc);
public:
TObject* dup() const { return new TTipo_documento(tipodoc()); }
TObject* dup() const { return new TTipo_documento(codice()); }
public:
enum TCondizione_uguaglianza
@ -69,9 +69,9 @@ public:
const TTipo_documento & tipo() const;
const TString & tipodoc() { return _head.get("TIPODOC"); }
const TDate & data() const { return _head.get_date("DATADOC"); }
const TString & numerazione() { return _head.get("CODNUM"); }
const TString & numerazione() const { return _head.get("CODNUM"); }
int anno() const { return _head.get_int("ANNO"); }
char tipo_numerazione() { return _head.get_int("PROVV"); }
char tipo_numerazione() const { return _head.get_int("PROVV"); }
long numero() const { return _head.get_long("NDOC"); }
TDocumento ();

View File

@ -165,6 +165,7 @@ ENDIF
IFDEF(FL_CODART)
FLAGS FL_CODART
ENDIF
ADD RUN ve2 -3
END
ENDIF
@ -256,6 +257,7 @@ ENDIF
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
OUTPUT FR_DESCR DESCR
ADD RUN ve2 -3
END
ENDIF

View File

@ -72,7 +72,6 @@
#define F_G2 168
#define F_DATAAGG 169 // GESTITO DAL MOTORE
#define F_UTENTE 170 // GESTITO DAL MOTORE
#define F_PROFILO 171 // GESTITO DAL MOTORE
#define F_TIPODOC 172 // GESTITO DAL MOTORE
#define F_DESNUM 173 // GESTITO DAL MOTORE
#define F_TIPIDOCS 174 // GESTITO DAL MOTORE