Patch level : 10.0 190
Files correlati : ve0.exe tutti i profili Ricompilazione Demo : [ ] Commento : Rivista la genrazione dei documenti di vendita per gestire lo sheet in pagine diverse dall'ultima e impostare il titolo di una pagina valorizzando la variabile Title(numero pagina) nel praragrafo MAIN del profilo. git-svn-id: svn://10.65.10.50/trunk@17880 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
ccf30a02e1
commit
a62302f623
235
ve/ve0300.cpp
235
ve/ve0300.cpp
@ -73,7 +73,7 @@ public:
|
|||||||
void check( const int i );
|
void check( const int i );
|
||||||
|
|
||||||
// PAGE
|
// PAGE
|
||||||
void pagina( const int i, const TString& title = "Pag." ){ _out << "PA \"" << title << " " << i << "\" 11 60 14\n"; };
|
void pagina( const int page, const TString& title = EMPTY_STRING );
|
||||||
|
|
||||||
// PROMPT
|
// PROMPT
|
||||||
void prompt( const int x, const int y, const TString& s = "" ){ _out << "PR " << x << " " << y << " \"" << s << "\"\n"; };
|
void prompt( const int x, const int y, const TString& s = "" ){ _out << "PR " << x << " " << y << " \"" << s << "\"\n"; };
|
||||||
@ -144,14 +144,19 @@ public:
|
|||||||
// Costruttore, vuole il nome del file .INI
|
// Costruttore, vuole il nome del file .INI
|
||||||
TMaschera( const TFilename outfile );
|
TMaschera( const TFilename outfile );
|
||||||
|
|
||||||
// Vero se la pagina h aperta
|
// Vero se ho gia' generato lo sheet
|
||||||
bool _pageopen;
|
bool _sheet_generated;
|
||||||
|
|
||||||
// File .MSK di output
|
// File .MSK di output
|
||||||
ofstream _out;
|
ofstream _out;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void TMaschera::pagina(const int page, const TString& title)
|
||||||
|
{
|
||||||
|
_out << "PA \"" << (title.blank() ? TString("Pag.") << " " << page : title) << "\" 11 60 14\n";
|
||||||
|
}
|
||||||
|
|
||||||
// Classe per memorizzare gli elementi di FRD
|
// Classe per memorizzare gli elementi di FRD
|
||||||
class _TableItem : public TObject
|
class _TableItem : public TObject
|
||||||
{
|
{
|
||||||
@ -251,6 +256,7 @@ public:
|
|||||||
|
|
||||||
TMaschera& maschera( ){ return *_m; }
|
TMaschera& maschera( ){ return *_m; }
|
||||||
|
|
||||||
|
void genera_sheet(int line = 5, bool show_list = true, bool genera_disp = true);
|
||||||
// Attiva la generazione della maschera
|
// Attiva la generazione della maschera
|
||||||
void genera( const TString& profilo);
|
void genera( const TString& profilo);
|
||||||
|
|
||||||
@ -276,7 +282,7 @@ TMaschera::TMaschera( const TFilename outfile ) : _out( outfile )
|
|||||||
{
|
{
|
||||||
_curline = 1;
|
_curline = 1;
|
||||||
_curpage = 1;
|
_curpage = 1;
|
||||||
_pageopen = FALSE;
|
_sheet_generated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMaschera::outline( const TString& s, const TString& prefix, const char sep )
|
void TMaschera::outline( const TString& s, const TString& prefix, const char sep )
|
||||||
@ -531,7 +537,7 @@ static void verifica_campo( const TObject& campo )
|
|||||||
TGruppo & gruppo = cmp.grp();
|
TGruppo & gruppo = cmp.grp();
|
||||||
|
|
||||||
cmp.stato(cmp.stato_reale());
|
cmp.stato(cmp.stato_reale());
|
||||||
if (cmp.stato() != S_NASCOSTO)
|
if (cmp.stato() != S_NASCOSTO && cmp.stato() != S_NON_VISIBILE)
|
||||||
{
|
{
|
||||||
int h = cmp.y() + 1;
|
int h = cmp.y() + 1;
|
||||||
if (cmp.type() == T_CORNICE || cmp.type() == T_MEMO || cmp.type() == T_GOLEM )
|
if (cmp.type() == T_CORNICE || cmp.type() == T_MEMO || cmp.type() == T_GOLEM )
|
||||||
@ -550,54 +556,61 @@ static void genera_gruppo( const TObject& gruppo )
|
|||||||
// Per evitare 3000 casts
|
// Per evitare 3000 casts
|
||||||
static TMask_generator * _mask_generator = NULL;
|
static TMask_generator * _mask_generator = NULL;
|
||||||
if (gruppo.class_id() == CLASS_STRING)
|
if (gruppo.class_id() == CLASS_STRING)
|
||||||
{
|
{
|
||||||
TFilename fname((TString &) gruppo);
|
TFilename fname((TString &) gruppo);
|
||||||
|
TMask_generator & g = *_mask_generator;
|
||||||
if (fname.ext()[0] == '\0')
|
TMaschera & m = g.maschera();
|
||||||
fname.ext("msk");
|
int row = m.line( ) - 1;
|
||||||
if (fexist(fname))
|
|
||||||
{
|
|
||||||
TScanner scanner(fname);
|
|
||||||
TString line(128);
|
|
||||||
TMask_generator & g = *_mask_generator;
|
|
||||||
TMaschera & m = g.maschera();
|
|
||||||
int row = m.line( ) - 1;
|
|
||||||
|
|
||||||
line = scanner.line();
|
if (fname.starts_with("SHEET"))
|
||||||
|
{
|
||||||
while (scanner.ok())
|
g.genera_sheet(row, fname.find("LIST") > 0, fname.find("GIAC") > 0);
|
||||||
{
|
g.intestazione_pagina();
|
||||||
int row_pos = line.find("%R");
|
}
|
||||||
const bool new_line = (row_pos > 0);
|
else
|
||||||
if (!new_line)
|
{
|
||||||
row_pos = line.find("%S");
|
if (fname.ext()[0] == '\0')
|
||||||
const bool field = line.left(2) == "%F";
|
fname.ext("msk");
|
||||||
|
if (fexist(fname))
|
||||||
|
{
|
||||||
if (field && row > MAX_LINES_PER_PAGE)
|
TScanner scanner(fname);
|
||||||
{
|
TString line(128);
|
||||||
// Passa alla pagina successiva
|
|
||||||
m.end( );
|
line = scanner.line();
|
||||||
g.intestazione_pagina();
|
|
||||||
row = MASK_FIRST_LINE;
|
while (scanner.ok())
|
||||||
}
|
{
|
||||||
if (row_pos > 0)
|
int row_pos = line.find("%R");
|
||||||
{
|
const bool new_line = (row_pos > 0);
|
||||||
if (new_line)
|
if (!new_line)
|
||||||
row++;
|
row_pos = line.find("%S");
|
||||||
|
const bool field = line.left(2) == "%F";
|
||||||
TString4 wrk; wrk.format("%02d", row);
|
|
||||||
line[row_pos++] = wrk[0];
|
|
||||||
line[row_pos] = wrk[1];
|
if (field && row > MAX_LINES_PER_PAGE)
|
||||||
}
|
{
|
||||||
if (field)
|
// Passa alla pagina successiva
|
||||||
m.output_row("");
|
m.end( );
|
||||||
else
|
g.intestazione_pagina();
|
||||||
m.output_row(line);
|
}
|
||||||
line = scanner.line();
|
if (row_pos > 0)
|
||||||
}
|
{
|
||||||
m.line(row + 1);
|
if (new_line)
|
||||||
}
|
row++;
|
||||||
|
|
||||||
|
TString4 wrk; wrk.format("%02d", row);
|
||||||
|
line[row_pos++] = wrk[0];
|
||||||
|
line[row_pos] = wrk[1];
|
||||||
|
}
|
||||||
|
if (field)
|
||||||
|
m.output_row("");
|
||||||
|
else
|
||||||
|
m.output_row(line);
|
||||||
|
line = scanner.line();
|
||||||
|
}
|
||||||
|
m.line(row + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -768,7 +781,7 @@ int TField::stato_reale()
|
|||||||
if (stato > stato_profilo )
|
if (stato > stato_profilo )
|
||||||
stato = stato_profilo;
|
stato = stato_profilo;
|
||||||
|
|
||||||
if (stato > S_NASCOSTO)
|
if (stato > S_NON_VISIBILE)
|
||||||
{
|
{
|
||||||
const TString80 gruppo(fieldsini().get("GROUP", _nome));
|
const TString80 gruppo(fieldsini().get("GROUP", _nome));
|
||||||
int stato_gruppo = S_OBBLIGATORIO;
|
int stato_gruppo = S_OBBLIGATORIO;
|
||||||
@ -811,6 +824,12 @@ void TField::genera( )
|
|||||||
m.begin( );
|
m.begin( );
|
||||||
switch( _stato )
|
switch( _stato )
|
||||||
{
|
{
|
||||||
|
case S_NON_VISIBILE :
|
||||||
|
m.prompt( 50, 50, _prompt );
|
||||||
|
s = "D";
|
||||||
|
s << _flag;
|
||||||
|
m.flag( s ) ;
|
||||||
|
break;
|
||||||
case S_DISABILITATO :
|
case S_DISABILITATO :
|
||||||
m.prompt( _x, _y + m.line( ), _prompt );
|
m.prompt( _x, _y + m.line( ), _prompt );
|
||||||
s = "D";
|
s = "D";
|
||||||
@ -842,12 +861,8 @@ void TField::genera( )
|
|||||||
if ( !_warning.blank( ) ) m.warning( _warning );
|
if ( !_warning.blank( ) ) m.warning( _warning );
|
||||||
if ( !_special.blank( ) ) m.outline( _special );
|
if ( !_special.blank( ) ) m.outline( _special );
|
||||||
m.end( );
|
m.end( );
|
||||||
if ( ( m.line( ) > MAX_LINES_PER_PAGE ) && ( m._pageopen == TRUE))
|
if ( ( m.line( ) > MAX_LINES_PER_PAGE ))
|
||||||
{
|
|
||||||
m.end( );
|
m.end( );
|
||||||
m._pageopen = FALSE;
|
|
||||||
m.line( MASK_FIRST_LINE );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Definizione dei metodi di_generator
|
// Definizione dei metodi di_generator
|
||||||
@ -1007,9 +1022,13 @@ void TMask_generator::genera_item_sheet( TToken_string _line )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TMask_generator::intestazione_pagina( )
|
void TMask_generator::intestazione_pagina( )
|
||||||
{
|
{
|
||||||
|
_m->line( MASK_FIRST_LINE );
|
||||||
_m->page( _m->page( ) + 1 );
|
_m->page( _m->page( ) + 1 );
|
||||||
_m->pagina( _m->page( ));
|
|
||||||
|
const TString80 title(profilo().get("Title", "MAIN", _m->page()));
|
||||||
|
|
||||||
|
_m->pagina( _m->page(), title);
|
||||||
|
|
||||||
_m->control( T_CORNICE, DLG_NULL, 7806 );
|
_m->control( T_CORNICE, DLG_NULL, 7806 );
|
||||||
_m->begin( );
|
_m->begin( );
|
||||||
@ -1151,6 +1170,51 @@ void TMask_generator::load_table()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TMask_generator::genera_sheet(int line, bool show_list, bool genera_disp)
|
||||||
|
{
|
||||||
|
line++;
|
||||||
|
if (genera_disp)
|
||||||
|
{
|
||||||
|
// Generazione del campo con la giacenza della riga corrente
|
||||||
|
_m->control ( T_NUMERO, F_CURGIAC, 15 );
|
||||||
|
_m->begin( );
|
||||||
|
_m->prompt( 2, line, "Riga corrente: Giacenza ");
|
||||||
|
_m->flag("D");
|
||||||
|
_m->picture(".5");
|
||||||
|
_m->end( );
|
||||||
|
|
||||||
|
// Generazione del campo con la disponibilita' della riga corrente
|
||||||
|
_m->control ( T_NUMERO, F_CURDISP, 15 );
|
||||||
|
_m->begin( );
|
||||||
|
_m->prompt( 44, line++, "Disponibilita' ");
|
||||||
|
_m->flag("D");
|
||||||
|
_m->picture(".5");
|
||||||
|
_m->end( );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generazione del listbox per i tipi di riga da aggiungere nello sheet
|
||||||
|
_m->control ( T_LISTA, F_LBTIPORIGA, 30 );
|
||||||
|
_m->begin( );
|
||||||
|
_m->prompt( 2, show_list ? line : -1, "Tipo riga da aggiungere " );
|
||||||
|
if (show_list)
|
||||||
|
line++;
|
||||||
|
else
|
||||||
|
_m->flag("H");
|
||||||
|
_m->end( );
|
||||||
|
|
||||||
|
// Generazione dello sheet : vedi il profilo
|
||||||
|
TScanner sheet_in( "ve0300b.dat" );
|
||||||
|
_m->_out << "SPREADSHEET " << F_SHEET << "\n";
|
||||||
|
_m->begin( );
|
||||||
|
_m->prompt( 2, line );
|
||||||
|
do_events();
|
||||||
|
for(int i = 0; i < _tab0300b.items( ); i ++ )
|
||||||
|
genera_item_sheet( _tab0300b.row( i ) );
|
||||||
|
_m->end( );
|
||||||
|
_m->end( );
|
||||||
|
_m->_sheet_generated = true;
|
||||||
|
}
|
||||||
|
|
||||||
void TMask_generator::genera( const TString& profilo )
|
void TMask_generator::genera( const TString& profilo )
|
||||||
{
|
{
|
||||||
if( profilo == "-all" || profilo[0] == '*')
|
if( profilo == "-all" || profilo[0] == '*')
|
||||||
@ -1268,7 +1332,9 @@ void TMask_generator::genera( const TString& profilo )
|
|||||||
do_events();
|
do_events();
|
||||||
// Header della prima pagina
|
// Header della prima pagina
|
||||||
|
|
||||||
_m->pagina( _m->page( ));
|
const TString80 title(_pro->get("Title", "MAIN", _m->page()));
|
||||||
|
|
||||||
|
_m->pagina( _m->page( ), title);
|
||||||
|
|
||||||
_m->control( T_CORNICE, DLG_NULL, 7806 );
|
_m->control( T_CORNICE, DLG_NULL, 7806 );
|
||||||
_m->begin( );
|
_m->begin( );
|
||||||
@ -1432,8 +1498,6 @@ void TMask_generator::genera( const TString& profilo )
|
|||||||
_m->end( );
|
_m->end( );
|
||||||
_m->line( MASK_FIRST_LINE );
|
_m->line( MASK_FIRST_LINE );
|
||||||
|
|
||||||
_m->_pageopen = TRUE;
|
|
||||||
|
|
||||||
// Generazione
|
// Generazione
|
||||||
|
|
||||||
// Scorro l'array dei gruppi, e ne creo una copia ordinata
|
// Scorro l'array dei gruppi, e ne creo una copia ordinata
|
||||||
@ -1463,49 +1527,17 @@ void TMask_generator::genera( const TString& profilo )
|
|||||||
|
|
||||||
TString80 message;
|
TString80 message;
|
||||||
|
|
||||||
|
_m->_sheet_generated = false;
|
||||||
message.format("Generazione profilo : %s", (const char *)profilo);
|
message.format("Generazione profilo : %s", (const char *)profilo);
|
||||||
_bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE);
|
_bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE);
|
||||||
sortedgroups.for_each( genera_gruppo );
|
sortedgroups.for_each( genera_gruppo );
|
||||||
delete _bar; _bar = NULL;
|
delete _bar; _bar = NULL;
|
||||||
if ( _m->_pageopen == TRUE )
|
_m->end( );
|
||||||
{
|
if (!_m->_sheet_generated)
|
||||||
_m->end( );
|
{
|
||||||
intestazione_pagina( );
|
intestazione_pagina( );
|
||||||
}
|
genera_sheet();
|
||||||
|
}
|
||||||
// Generazione del campo con la giacenza della riga corrente
|
|
||||||
_m->control ( T_NUMERO, F_CURGIAC, 15 );
|
|
||||||
_m->begin( );
|
|
||||||
_m->prompt( 2, 6, "Riga corrente: Giacenza ");
|
|
||||||
_m->flag("D");
|
|
||||||
_m->picture(".5");
|
|
||||||
_m->end( );
|
|
||||||
|
|
||||||
// Generazione del campo con la disponibilita' della riga corrente
|
|
||||||
_m->control ( T_NUMERO, F_CURDISP, 15 );
|
|
||||||
_m->begin( );
|
|
||||||
_m->prompt( 44, 6, "Disponibilita' ");
|
|
||||||
_m->flag("D");
|
|
||||||
_m->picture(".5");
|
|
||||||
_m->end( );
|
|
||||||
|
|
||||||
// Generazione del listbox per i tipi di riga da aggiungere nello sheet
|
|
||||||
_m->control ( T_LISTA, F_LBTIPORIGA, 30 );
|
|
||||||
_m->begin( );
|
|
||||||
_m->prompt( 2, 7, "Tipo riga da aggiungere " );
|
|
||||||
_m->end( );
|
|
||||||
|
|
||||||
// Generazione dello sheet : vedi il profilo
|
|
||||||
TScanner sheet_in( "ve0300b.dat" );
|
|
||||||
_m->_out << "SPREADSHEET " << F_SHEET << "\n";
|
|
||||||
_m->begin( );
|
|
||||||
_m->prompt( 2, 8 );
|
|
||||||
do_events();
|
|
||||||
for( i = 0; i < _tab0300b.items( ); i ++ )
|
|
||||||
genera_item_sheet( _tab0300b.row( i ) );
|
|
||||||
_m->end( );
|
|
||||||
|
|
||||||
_m->end( );
|
|
||||||
|
|
||||||
// Generazione pagina dei piedi
|
// Generazione pagina dei piedi
|
||||||
{
|
{
|
||||||
@ -1546,7 +1578,6 @@ void TMask_generator::genera( const TString& profilo )
|
|||||||
{
|
{
|
||||||
_m->end( );
|
_m->end( );
|
||||||
intestazione_pagina( );
|
intestazione_pagina( );
|
||||||
_m->line( MASK_FIRST_LINE );
|
|
||||||
nr = 1;
|
nr = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,10 +11,11 @@
|
|||||||
#define T_CURRENCY 11
|
#define T_CURRENCY 11
|
||||||
|
|
||||||
#define S_NASCOSTO 0
|
#define S_NASCOSTO 0
|
||||||
#define S_DISABILITATO 1
|
#define S_NON_VISIBILE 1
|
||||||
#define S_NOCHECK 2
|
#define S_DISABILITATO 2
|
||||||
#define S_NORMALE 3
|
#define S_NOCHECK 3
|
||||||
#define S_OBBLIGATORIO 4
|
#define S_NORMALE 4
|
||||||
|
#define S_OBBLIGATORIO 5
|
||||||
|
|
||||||
// #define F_LBTIPORIGA 175
|
// #define F_LBTIPORIGA 175
|
||||||
// #define NPIEDI 40
|
// #define NPIEDI 40
|
||||||
|
Loading…
x
Reference in New Issue
Block a user