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
					
				
							
								
								
									
										143
									
								
								ve/ve0300.cpp
									
									
									
									
									
								
							
							
						
						
									
										143
									
								
								ve/ve0300.cpp
									
									
									
									
									
								
							@ -73,7 +73,7 @@ public:
 | 
			
		||||
  void check( const int i );
 | 
			
		||||
 | 
			
		||||
  // 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
 | 
			
		||||
  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
 | 
			
		||||
  TMaschera( const TFilename outfile );
 | 
			
		||||
 | 
			
		||||
  // Vero se la pagina h aperta
 | 
			
		||||
  bool _pageopen;
 | 
			
		||||
  // Vero se ho gia' generato lo sheet
 | 
			
		||||
  bool _sheet_generated;
 | 
			
		||||
 | 
			
		||||
  // File .MSK di output
 | 
			
		||||
  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
 | 
			
		||||
class _TableItem : public TObject
 | 
			
		||||
{
 | 
			
		||||
@ -251,6 +256,7 @@ public:
 | 
			
		||||
 | 
			
		||||
  TMaschera& maschera( ){ return *_m; }
 | 
			
		||||
 | 
			
		||||
	void genera_sheet(int line = 5, bool show_list = true, bool genera_disp = true);
 | 
			
		||||
  // Attiva la generazione della maschera
 | 
			
		||||
  void genera( const TString& profilo);
 | 
			
		||||
 | 
			
		||||
@ -276,7 +282,7 @@ TMaschera::TMaschera( const TFilename outfile ) : _out( outfile )
 | 
			
		||||
{
 | 
			
		||||
  _curline = 1;
 | 
			
		||||
  _curpage = 1;
 | 
			
		||||
  _pageopen = FALSE;
 | 
			
		||||
	_sheet_generated = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
 | 
			
		||||
  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;
 | 
			
		||||
    if (cmp.type() == T_CORNICE || cmp.type() == T_MEMO  || cmp.type() == T_GOLEM )
 | 
			
		||||
@ -552,16 +558,23 @@ static void genera_gruppo( const TObject& gruppo )
 | 
			
		||||
  if (gruppo.class_id() == CLASS_STRING)
 | 
			
		||||
  {
 | 
			
		||||
		TFilename fname((TString &) gruppo);
 | 
			
		||||
    TMask_generator & g = *_mask_generator;
 | 
			
		||||
    TMaschera & m = g.maschera();
 | 
			
		||||
    int row = m.line( ) - 1;
 | 
			
		||||
 | 
			
		||||
    if (fname.starts_with("SHEET"))
 | 
			
		||||
		{
 | 
			
		||||
			g.genera_sheet(row, fname.find("LIST") > 0, fname.find("GIAC") > 0);
 | 
			
		||||
			g.intestazione_pagina();
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			if (fname.ext()[0] == '\0')
 | 
			
		||||
				fname.ext("msk");
 | 
			
		||||
			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();
 | 
			
		||||
	      
 | 
			
		||||
@ -579,7 +592,6 @@ static void genera_gruppo( const TObject& gruppo )
 | 
			
		||||
						// Passa alla pagina successiva
 | 
			
		||||
						m.end( );
 | 
			
		||||
						g.intestazione_pagina();
 | 
			
		||||
          row = MASK_FIRST_LINE;
 | 
			
		||||
					}       
 | 
			
		||||
					if (row_pos > 0)
 | 
			
		||||
					{
 | 
			
		||||
@ -599,6 +611,7 @@ static void genera_gruppo( const TObject& gruppo )
 | 
			
		||||
				m.line(row + 1);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    TGruppo & grp = (TGruppo &) gruppo;
 | 
			
		||||
@ -768,7 +781,7 @@ int TField::stato_reale()
 | 
			
		||||
  if (stato > stato_profilo )
 | 
			
		||||
    stato = stato_profilo;
 | 
			
		||||
 | 
			
		||||
  if (stato > S_NASCOSTO)
 | 
			
		||||
  if (stato > S_NON_VISIBILE)
 | 
			
		||||
  {
 | 
			
		||||
    const TString80 gruppo(fieldsini().get("GROUP", _nome));
 | 
			
		||||
    int stato_gruppo = S_OBBLIGATORIO;
 | 
			
		||||
@ -811,6 +824,12 @@ void TField::genera( )
 | 
			
		||||
  m.begin( );
 | 
			
		||||
  switch( _stato )
 | 
			
		||||
  {
 | 
			
		||||
  case S_NON_VISIBILE :
 | 
			
		||||
    m.prompt( 50, 50, _prompt );
 | 
			
		||||
    s = "D";
 | 
			
		||||
    s << _flag;
 | 
			
		||||
    m.flag( s ) ;
 | 
			
		||||
    break;
 | 
			
		||||
  case S_DISABILITATO :
 | 
			
		||||
    m.prompt( _x, _y + m.line( ), _prompt );
 | 
			
		||||
    s = "D";
 | 
			
		||||
@ -842,12 +861,8 @@ void TField::genera( )
 | 
			
		||||
  if ( !_warning.blank( ) ) m.warning( _warning );
 | 
			
		||||
  if ( !_special.blank( ) ) m.outline( _special );
 | 
			
		||||
  m.end( );
 | 
			
		||||
  if ( ( m.line( ) > MAX_LINES_PER_PAGE ) && ( m._pageopen == TRUE))
 | 
			
		||||
  {
 | 
			
		||||
  if ( ( m.line( ) > MAX_LINES_PER_PAGE ))
 | 
			
		||||
    m.end( );
 | 
			
		||||
    m._pageopen = FALSE;
 | 
			
		||||
    m.line( MASK_FIRST_LINE );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Definizione dei metodi di_generator
 | 
			
		||||
@ -1008,8 +1023,12 @@ void TMask_generator::genera_item_sheet( TToken_string _line )
 | 
			
		||||
 | 
			
		||||
void TMask_generator::intestazione_pagina( )
 | 
			
		||||
{                       
 | 
			
		||||
  _m->line( MASK_FIRST_LINE );
 | 
			
		||||
  _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->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 )
 | 
			
		||||
{
 | 
			
		||||
  if( profilo == "-all" || profilo[0] == '*')
 | 
			
		||||
@ -1268,7 +1332,9 @@ void TMask_generator::genera( const TString& profilo )
 | 
			
		||||
    do_events();
 | 
			
		||||
    // 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->begin( );
 | 
			
		||||
@ -1432,8 +1498,6 @@ void TMask_generator::genera( const TString& profilo )
 | 
			
		||||
    _m->end( );
 | 
			
		||||
    _m->line( MASK_FIRST_LINE );
 | 
			
		||||
  
 | 
			
		||||
    _m->_pageopen = TRUE;
 | 
			
		||||
  
 | 
			
		||||
    // Generazione
 | 
			
		||||
  
 | 
			
		||||
    // Scorro l'array dei gruppi, e ne creo una copia ordinata
 | 
			
		||||
@ -1463,50 +1527,18 @@ void TMask_generator::genera( const TString& profilo )
 | 
			
		||||
  
 | 
			
		||||
    TString80 message;
 | 
			
		||||
  
 | 
			
		||||
		_m->_sheet_generated = false;
 | 
			
		||||
    message.format("Generazione profilo : %s", (const char *)profilo);
 | 
			
		||||
    _bar = new TProgind(sortedgroups.items(), message, FALSE, TRUE);
 | 
			
		||||
    sortedgroups.for_each( genera_gruppo );
 | 
			
		||||
    delete _bar; _bar = NULL;
 | 
			
		||||
    if ( _m->_pageopen == TRUE )
 | 
			
		||||
    _m->end( );
 | 
			
		||||
		if (!_m->_sheet_generated)
 | 
			
		||||
		{
 | 
			
		||||
      _m->end( );
 | 
			
		||||
      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
 | 
			
		||||
    {
 | 
			
		||||
      TToken_string s(_pro->get("CAMPICALC", "MAIN"));
 | 
			
		||||
@ -1546,7 +1578,6 @@ void TMask_generator::genera( const TString& profilo )
 | 
			
		||||
            {
 | 
			
		||||
              _m->end( );
 | 
			
		||||
              intestazione_pagina( );
 | 
			
		||||
              _m->line( MASK_FIRST_LINE );
 | 
			
		||||
              nr = 1;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
@ -11,10 +11,11 @@
 | 
			
		||||
#define T_CURRENCY   11
 | 
			
		||||
 | 
			
		||||
#define S_NASCOSTO       0
 | 
			
		||||
#define S_DISABILITATO   1
 | 
			
		||||
#define S_NOCHECK        2
 | 
			
		||||
#define S_NORMALE        3
 | 
			
		||||
#define S_OBBLIGATORIO   4
 | 
			
		||||
#define S_NON_VISIBILE   1
 | 
			
		||||
#define S_DISABILITATO   2
 | 
			
		||||
#define S_NOCHECK        3
 | 
			
		||||
#define S_NORMALE        4
 | 
			
		||||
#define S_OBBLIGATORIO   5
 | 
			
		||||
 | 
			
		||||
// #define F_LBTIPORIGA 175
 | 
			
		||||
// #define NPIEDI        40 
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user