Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 2.1 308 git-svn-id: svn://10.65.10.50/trunk@13141 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1712 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1712 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <mask.h>
 | |
| #include <printapp.h>
 | |
| #include <recarray.h>
 | |
| #include <tabutil.h>
 | |
| #include <utility.h>
 | |
| #include <sort.h>
 | |
| 
 | |
| #include <comuni.h>
 | |
| #include <nditte.h>
 | |
| #include <unloc.h>
 | |
| #include <clifo.h>
 | |
| #include <pconti.h>
 | |
| #include <anagr.h>
 | |
| 
 | |
| #include "ba3.h"
 | |
| #include "ba3800.h"
 | |
| 
 | |
| class BA3800_application : public TPrintapp
 | |
| {                              
 | |
|   TTable*           _tabivd;
 | |
|   const char*       _buff;
 | |
|   TSort*            _sort; 
 | |
|   
 | |
|   TDate   _datastampa;
 | |
|   bool    _diffprod_fatto,_risimp_fatto;
 | |
|   TString _numr_tot,_num_tot,_numr,_numr_da_stamp,_num_da_stamp,_numr_stamp,_num_stamp, _cont_num, _num;
 | |
|   char    _sez_da_stamp,_let_da_stamp,_sez_stamp,_let_stamp,_sez_tot,_let_tot,_let,_sez;
 | |
|   int     _cont_let,_cont_numr,_cont_gcs,_i;
 | |
|   bool    _reset_righe_stampa,_statopatr_no_stamp,_sbilancio_ordine; 
 | |
|   bool    _totale_attivita_gia_stampato,_totale_passivita_gia_stampato, _vaccata;    
 | |
|   bool    _sbilancio_patr_gia_stampato,_attivo_o_passivo;
 | |
|   TString _causale_ap, _causale_chi, _totale;
 | |
|   char _liv;
 | |
|   TString tmp;  
 | |
| 
 | |
| public:
 | |
| 
 | |
|   bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; }
 | |
|   virtual bool user_create() ;
 | |
|   virtual bool user_destroy() { delete _tabivd; return true;}
 | |
|   virtual bool set_print(int);
 | |
|   
 | |
|   virtual bool preprocess_page  (int,int);
 | |
|   virtual print_action postprocess_page (int,int);
 | |
|   virtual void postclose_print ();
 | |
|   
 | |
|   virtual void set_page(int,int);
 | |
| 
 | |
|   void intestazione_ditta();
 | |
|   void intestazione_studio();
 | |
|   void stampa_totali_studio();
 | |
|   void stampa_totali_ditta();  
 | |
|   bool preprocess_ditta(int);  
 | |
|   bool preprocess_studio(int);
 | |
|   
 | |
|   void setta_righe_studio(const char*); 
 | |
|   void setta_righe_ditta(const char*);  
 | |
|   void totale_numero_arabo();
 | |
|   void totale_numero_romano();
 | |
|   void totale_lettera();   
 | |
|   void init_sort();    
 | |
|   void crea_sort_tabella();
 | |
|   void crea_sort_piano_conti();
 | |
|   void scrivi_record(const TString&,const TString&,const TString&, const TString &,int,int,long);
 | |
|   void riempi_record(const TString&,const TString&,const TString&, const TString &,int,int,long);
 | |
|   void set_bil_key(TString & key, char sezione, char lettera,
 | |
|                    const char* numero_romano, const char * numero,
 | |
|                    bool conti_ordine = true, int conto = 0,
 | |
|                    int gruppo = 0, long sottoconto = 0L);
 | |
|   const char* descrizione_lettera(char, char);
 | |
|   const char* descrizione_numeroromano(char, char, int);
 | |
|   const char* descrizione_numero(char, char, int, const TString &);
 | |
|   const char* descrizione_sottoconto(int, int, long);  
 | |
|   void setta_righe_descr(const char *, const char *);
 | |
|   
 | |
|   BA3800_application(char livello) : _liv(toupper(livello)) {}
 | |
| };
 | |
| 
 | |
| const char * num2str(const TString & s)
 | |
| {
 | |
| 	TString & str = get_tmp_string(20);
 | |
| 
 | |
| 	str = s;
 | |
| 	str.trim();
 | |
| 	if (str.len() > 2)
 | |
| 	{
 | |
| 		str = s.left(2);
 | |
| 		const int sub = atoi(s.mid(2));
 | |
| 		switch (sub)
 | |
| 		{
 | |
| 			case 0:
 | |
| 			case 1:
 | |
| 				break;
 | |
| 			case 2:
 | |
| 				str << " bis";
 | |
| 				break;
 | |
| 			case 3:
 | |
| 				str << " ter";
 | |
| 				break;
 | |
| 			case 4:
 | |
| 				str << " quater";
 | |
| 				break;
 | |
| 			case 5:
 | |
| 				str << " quinquies";
 | |
| 				break;
 | |
| 			case 6:
 | |
| 				str << " sexies";
 | |
| 				break;
 | |
| 			default:
 | |
| 				break;
 | |
| 		}
 | |
| 	}
 | |
| 	return (const char *) str;
 | |
| }
 | |
| 
 | |
| void BA3800_application::postclose_print()
 | |
| { 
 | |
|   if (_liv == 'D')
 | |
|     delete _sort;
 | |
| }
 | |
| 
 | |
| void BA3800_application::set_bil_key(TString & key, char sezione, char lettera,
 | |
|                                      const char* numero_romano, const char * numero,
 | |
|                                      bool conti_ordine, int gruppo, int conto,
 | |
|                                      long sottoconto)
 | |
| 
 | |
| {
 | |
|   //Se esiste solamente la sezione,significa che e' un conto d'ordine
 | |
|   //Forzo la lettera della classe a Z, per ottenere, grazie
 | |
|   //all'ordinamento del sort, i record dei conti d'ordine per ultimi
 | |
| 	if (sezione == '\0')
 | |
| 		sezione = ' ';
 | |
| 	if (lettera == '\0')
 | |
| 		lettera = ' ';
 | |
| 
 | |
| 	key.format("%1c%1c%-4s%-4s", sezione, ((conti_ordine && lettera == '\0' && sezione < '3') ? 'Z' : lettera), numero_romano, numero);
 | |
| 
 | |
|   if (gruppo < 0)
 | |
|     key << "ZZZZZZZZZZZZ";
 | |
|   else
 | |
|     key << format("%03d%03d%06ld", gruppo, conto, sottoconto);
 | |
| }
 | |
| 
 | |
| void BA3800_application::scrivi_record(const TString& sez,
 | |
|                                        const TString& let,  const TString& numerorom, const TString & numero,
 | |
|                                        int g,int c,long s)
 | |
| {
 | |
|   
 | |
|   //Se esiste solamente la sezione,significa che e' un conto d'ordine
 | |
|   //Forzo la lettera della classe a Z, per ottenere, grazie
 | |
|   //all'ordinamento del sort, i record dei conti d'ordine per ultimi
 | |
| 	TString key;
 | |
| 
 | |
|   set_bil_key(key, sez[0], let[0], numerorom, numero, true, g, c, s);
 | |
|   _sort->sort ((const char*) key);
 | |
| }
 | |
| 
 | |
| void BA3800_application::riempi_record(const TString& sez,
 | |
|                                        const TString& let,  const TString& numerorom, const TString & numero,
 | |
|                                        int g,int c,long s)
 | |
| {
 | |
| 	TString key;
 | |
| 
 | |
|   set_bil_key(key, sez[0], let[0], numerorom, numero, false, g, c, s);
 | |
|   _sort->sort ((const char*) key);
 | |
| }
 | |
| 
 | |
| void BA3800_application::crea_sort_tabella()
 | |
| {
 | |
|   TTable tabivd(TAB_IVD);
 | |
|   
 | |
|   // Compilo tanti record quante sono le classi IV direttiva trovate sulla
 | |
|   // tabella %IVD, usando dei gruppi, conti e sottoconti fittizi. Successivamente
 | |
|   // nel caso di stampa completa verranno stampati anche questi record; nel caso
 | |
|   // di stampa non completa non verranno stampati.
 | |
|   
 | |
|   for (int err = tabivd.first(); err == NOERR; err = tabivd.next())
 | |
|   {
 | |
| 		const TString & codtab = tabivd.get("CODTAB");
 | |
|     const char sez = codtab[0];
 | |
|     const char let = codtab[1];
 | |
|     const TString16 nrom(codtab.mid(2, 4));
 | |
|     const TString16 nu(codtab.mid(6));
 | |
| 		TString key;
 | |
|     
 | |
|     set_bil_key(key, sez, let,(const char*)nrom, nu, false,-1);
 | |
|     _sort->sort ((const char*) key);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Passo al sort tutti i record presenti su piano dei conti, aventi la classe
 | |
| // IV direttiva CEE.
 | |
| 
 | |
| void BA3800_application::crea_sort_piano_conti()
 | |
| {
 | |
|   TLocalisamfile pconti(LF_PCON);
 | |
|   TString sez,let,numerorom, num_conto;
 | |
|   TString sez_conto,let_conto,numr_conto, numero;
 | |
|   int     indbil;
 | |
|   char    sezione,lettera,tmcf;
 | |
|   int     g,c;
 | |
|   long    s;
 | |
|   bool    classe_conto          = false;
 | |
|   bool    conto_dettagliato     = false;
 | |
|   bool    stsottbil;
 | |
| 
 | |
|   for (int err = pconti.first(); err == NOERR; err = pconti.next())
 | |
|   {
 | |
|     //    _prog->addstatus(1);
 | |
|     g         = pconti.get_int (PCN_GRUPPO);
 | |
|     c         = pconti.get_int (PCN_CONTO);
 | |
|     s         = pconti.get_long(PCN_SOTTOCONTO);
 | |
|     sez       = pconti.get(PCN_SEZIVD);
 | |
|     let       = pconti.get(PCN_LETTIVD);
 | |
|     sezione   = sez[0];
 | |
|     lettera   = let[0];
 | |
|     numerorom = pconti.get(PCN_NUMRIVD);
 | |
|     numero    = pconti.get(PCN_NUMIVD);
 | |
| 		if (atoi(numero) != 0 && numero.len() == 1)
 | |
| 			numero.insert("0");  // pacco per fare andare anche i record vecchi cosa si deve fare!!!!
 | |
|     
 | |
|     // Se si tratta di un conto e contiene la classe, allora lo passo al sort.
 | |
|     // Gli eventuali sottoconti avranno la stessa classe.
 | |
|     
 | |
|     if ((g != 0) && (c != 0) && (s == 0))
 | |
|     {
 | |
|       stsottbil   = pconti.get_bool(PCN_STSOTTBIL);
 | |
|       tmcf        = pconti.get     (PCN_TMCF)[0];
 | |
|       indbil      = pconti.get_int (PCN_INDBIL);
 | |
| 
 | |
|       //Se sono nello stesso gruppo, ma ho un conto diverso da quello precedentemente
 | |
|       //analizzato, e se questi contiene la classe IV dir. CEE,
 | |
|       //allore devo controllare se va dettagliato (se STSOTTBIL e' true il conto non
 | |
|       //va dettagliato, se false va dettagliato)
 | |
| 
 | |
|       if (sez != "0")
 | |
|       {
 | |
|         if (stsottbil || tmcf == 'C' || tmcf == 'F')
 | |
|           conto_dettagliato = false;
 | |
|         else
 | |
|           conto_dettagliato = true;
 | |
| 
 | |
|         sez_conto  = sez;
 | |
|         
 | |
|         if (let != "")
 | |
|           let_conto  = let;
 | |
|         else
 | |
|           if ((sez == "1")||(sez == "2"))
 | |
|             let_conto  = "Z";
 | |
|           else
 | |
|             let_conto = let;
 | |
|         
 | |
|         numr_conto   = numerorom;
 | |
|         num_conto    = numero;  
 | |
|         
 | |
|         riempi_record(sez_conto,let_conto,numr_conto,num_conto,g,c,0);
 | |
|         
 | |
|         classe_conto = true;
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         classe_conto      = false; // Metto conto dettagliato = true perche' potrebbero esserci dei sottoconti
 | |
|         conto_dettagliato = true;  // di questo conto che hanno la classe e quindi vanno stampati.
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     // Se si tratta di un sottoconto e contiene la classe, allora lo passo al sort.
 | |
| 
 | |
|     if ((g != 0) && (c != 0) && (s != 0))
 | |
|     {       
 | |
|       // classe_conto indica se il conto precedentemente letto conteneva
 | |
|       // la classe. In caso affermativo anche questo sottoconto appena
 | |
|       // letto avra' la stessa classe del conto.
 | |
|       
 | |
|       if (classe_conto)
 | |
|       {
 | |
|         if (conto_dettagliato) 
 | |
|           riempi_record(sez_conto,let_conto,numr_conto,num_conto,g,c,s);
 | |
|       }
 | |
|       else
 | |
|         if (sez != "0")
 | |
|           riempi_record(sez,let,numerorom,numero,g,c,s);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool BA3800_application::set_print(int)
 | |
| {       
 | |
|   TMask msk("ba3800a");
 | |
| 
 | |
|   const KEY tasto= msk.run(); 
 | |
| 
 | |
|   if (tasto == K_ENTER) 
 | |
|   {  
 | |
|     _datastampa = msk.get(F_DATASTAMPA);    
 | |
| 
 | |
|     _cont_let  = 0;
 | |
|     _cont_numr = 0;
 | |
|     _cont_num  = "";
 | |
|     _cont_gcs  = 0;
 | |
|     
 | |
|     _totale = "XXXXXXXXXXX";
 | |
|     
 | |
|     _sez_stamp  = ' ';
 | |
|     _let_stamp  = ' ';
 | |
|     _numr_stamp = "";
 | |
|     _num_stamp  = "";
 | |
|     _sez_tot    = ' ';
 | |
|     _let_tot    = ' ';
 | |
|     _numr_tot   = "";
 | |
|     _num_tot    = ""; 
 | |
|     
 | |
|     _statopatr_no_stamp            = true;   
 | |
|     _diffprod_fatto                = false;            
 | |
|     _risimp_fatto                  = false;
 | |
|     _totale_attivita_gia_stampato  = false;
 | |
|     _totale_passivita_gia_stampato = false;
 | |
|     _sbilancio_ordine              = false; 
 | |
|     _sbilancio_patr_gia_stampato   = false;
 | |
|     _attivo_o_passivo              = false;
 | |
| 		_vaccata									  	 = false;
 | |
|     
 | |
|     printer().footerlen(5);
 | |
|     
 | |
|     if (_liv == 'S')
 | |
|       intestazione_studio();
 | |
|     else
 | |
|       if (_liv == 'D')
 | |
|       { 
 | |
|         init_sort();
 | |
|         crea_sort_tabella();
 | |
|         crea_sort_piano_conti();
 | |
|         _sort->endsort();
 | |
|         intestazione_ditta();
 | |
|       }
 | |
|     
 | |
|     return true;
 | |
|   }
 | |
|   return false;
 | |
| }    
 | |
| 
 | |
| void BA3800_application::totale_numero_arabo()
 | |
| {
 | |
|   if (_cont_gcs != 0)//(_cont_gcs >= 2)
 | |
|   {
 | |
|     //Fai il totale del numero arabo e stampalo 
 | |
|     if (_num.not_empty())
 | |
|     {
 | |
|       set_row (_i,FR("@18gTotale@25g%s)"), num2str(_num));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void BA3800_application::totale_numero_romano()
 | |
| {
 | |
|   if (_cont_num.not_empty())//(_cont_num >= 2)
 | |
|   {
 | |
|     //Fai il totale del numero romano e stampalo
 | |
|     int numeror = atoi(_numr);
 | |
|     TString numrom  = itor(numeror); 
 | |
|     if (numrom != "")
 | |
|     {
 | |
|       set_row (_i, FR("@14gTotale@21g%s"), (const char*) numrom);
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|   }
 | |
| }  
 | |
| 
 | |
| void BA3800_application::totale_lettera()
 | |
| {
 | |
|   if (_cont_numr != 0)//(_cont_numr >= 2)
 | |
|   {
 | |
|     //Fai il totale della lettera e stampalo 
 | |
|     if (_let != ' ')
 | |
|     {
 | |
|       set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void BA3800_application::stampa_totali_studio()
 | |
| {
 | |
|   const TString16 diff_prod("9B");
 | |
|   const TString16 ris_imp  ("9E        21");
 | |
|   
 | |
|   _num  = _num_tot;
 | |
|   _numr = _numr_tot;
 | |
|   _let  = _let_tot;
 | |
| 
 | |
|   if (_tabivd->eof()) 
 | |
|   {
 | |
|     _num_tot  = "";
 | |
|     _numr_tot = "";
 | |
|     _let_tot  = ' ';
 | |
|     _sez_tot  = ' ';
 | |
|   }    
 | |
| 
 | |
|   if (_num_da_stamp != _num_tot)
 | |
|   {       
 | |
|     totale_numero_arabo();
 | |
|     
 | |
|     if (_sez_stamp == '9')
 | |
|     {
 | |
|       TString16 classe;
 | |
|       
 | |
|       classe.format("%c%c%8s%-4s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
 | |
| 			classe.rtrim();
 | |
|       
 | |
|       if (classe > ris_imp && !_risimp_fatto)
 | |
|       { 
 | |
|         if (_num_tot == "20" || _num_tot == "21")
 | |
|         {
 | |
|           set_row (_i, FR("@4gTotale delle partite straordinarie"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           set_row (_i,FR("@4gRisultato prima delle imposte"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           _risimp_fatto = true;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     _cont_gcs = 0;
 | |
|   }
 | |
|   if (_numr_da_stamp != _numr_tot)
 | |
|   {
 | |
|     totale_numero_arabo();
 | |
|     totale_numero_romano();
 | |
|     _cont_gcs = 0;
 | |
|     _cont_num = "";
 | |
|   }   
 | |
|   if (_let_da_stamp!=_let_tot)
 | |
|   { 
 | |
|     if (_sez_stamp == '9')
 | |
|     {
 | |
|       TString16 classe;
 | |
|       
 | |
|       classe.format("%c%c%8s%-4s",_sez_stamp,_let_stamp,(const char*)_numr_stamp,(const char*)_num_stamp);
 | |
| 			classe.rtrim();
 | |
|       
 | |
|       totale_numero_arabo();
 | |
|       totale_numero_romano();
 | |
|       
 | |
|       if (_cont_numr != 0)//(_cont_numr >= 2)
 | |
|       {
 | |
|         //Fai il totale della lettera e stampalo  
 | |
|         if (_let_stamp == 'D')
 | |
|           set_row (_i,FR("@4gTotale delle rettifiche"));
 | |
|         else          
 | |
|           if (_let != ' ')
 | |
|             if (_sez_stamp == '9' && _let_stamp != 'E')
 | |
|               set_row (_i, FR("@3gTotale@10g%c@12g)"), _let);
 | |
|             else  
 | |
|               if (_sez_stamp != '9')
 | |
|                 set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|         if (_let != ' ')
 | |
|         {
 | |
|           if (_sez_stamp == '9' && _let_stamp != 'E')  
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           else
 | |
|             if (_sez_stamp != '9')                    
 | |
|               set_row (_i++,"@86g%s", (const char*) _totale);    
 | |
|         }
 | |
|       }
 | |
|       
 | |
|       if (classe > diff_prod && !_diffprod_fatto)
 | |
|       { 
 | |
|         if (_let_tot == 'A' || _let_tot == 'B') //Solo se esiste una delle due lettere
 | |
|         {               
 | |
|           set_row (_i++,FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*) _totale);
 | |
|           _diffprod_fatto = true;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       totale_numero_arabo();
 | |
|       totale_numero_romano();
 | |
|       totale_lettera();
 | |
|     }   
 | |
|     
 | |
|     _cont_gcs = 0;
 | |
|     _cont_num = 0;
 | |
|     _cont_numr = 0;
 | |
|   }     
 | |
|   if (_sez_da_stamp != _sez_tot)
 | |
|   {
 | |
|     totale_numero_arabo();
 | |
|     totale_numero_romano();
 | |
|     
 | |
|     if (_cont_numr != 0)//(_cont_numr >= 2)
 | |
|     {
 | |
|       //Fai il totale della lettera e stampalo
 | |
|       if (_let != ' ')
 | |
|       {   
 | |
|         if (_sez_stamp == '9' && _let_stamp != 'E')
 | |
|         {
 | |
|           set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         }
 | |
|         else
 | |
|           if (_sez_stamp != '9')
 | |
|           {
 | |
|             set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           }
 | |
|       }
 | |
|     }
 | |
|     if (_sez_stamp == '1')
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|       set_row (_i, FR("@0gTOTALE ATTIVO"));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|     
 | |
|     if (_sez_stamp == '2') //&& (_let_stamp != 'Z'))
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|       set_row (_i, FR("@0gTOTALE PASSIVO"));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }  
 | |
|     
 | |
|     if (_sez_stamp == '2')
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|       set_row (_i++, FR("@0gSALDO STATO PATRIMONIALE"));
 | |
|       set_row (_i, FR("@0gSBILANCIO (ATTIVO - PASSIVO)"));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
| 
 | |
|     if (_sez_stamp == '9')
 | |
|     { 
 | |
|       if (_tabivd->eof()) 
 | |
|       {  
 | |
|         if ((_let_stamp == 'A' || _let_stamp == 'B') && !_diffprod_fatto)//Solo se esiste una delle due lettere
 | |
|         {               
 | |
|           set_row (_i++, FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*) _totale);
 | |
|           _diffprod_fatto = true;
 | |
|         }
 | |
|         if (!_risimp_fatto)  
 | |
|         {  
 | |
|           set_row (_i, FR("@4gRisultato prima delle imposte"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         }
 | |
|       }  
 | |
|       
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|       set_row (_i,FR("@0gRISULTATO CONTO ECONOMICO"));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|     _cont_gcs = 0;
 | |
|     _cont_num = 0;
 | |
|     _cont_numr = 0;
 | |
|     _cont_let = 0;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void BA3800_application::stampa_totali_ditta()
 | |
| {
 | |
|   bool gia_stampato_conto_ord = false;
 | |
|   const TString16 diff_prod("9B");
 | |
|   const TString16 ris_imp  ("9E        21");
 | |
|   
 | |
|   _num  = _num_tot;
 | |
|   _numr = _numr_tot;
 | |
|   _let  = _let_tot;
 | |
| 
 | |
|   if (_buff == NULL) 
 | |
|   {
 | |
|     _num_tot  = "";
 | |
|     _numr_tot = "";
 | |
|     _let_tot  = ' ';
 | |
|     _sez_tot  = ' ';
 | |
|   }  
 | |
|   
 | |
|   if ((_sez_stamp == '1' || _sez_stamp == '2') && _let_stamp != 'Z')  
 | |
|     _attivo_o_passivo = true;
 | |
| 
 | |
|   if (_num_da_stamp != _num_tot)
 | |
|   {       
 | |
|     if (_let_stamp != 'Z')
 | |
|     {
 | |
|       if (_sez_stamp != '5')
 | |
|         if (_cont_gcs != 0)//(_cont_gcs >= 2)
 | |
|         {
 | |
|           //Fai il totale del numero arabo e stampalo 
 | |
|           if (_num.not_empty())
 | |
|           {
 | |
|             set_row (_i, FR("@18gTotale@25g%s)"), num2str(_num));
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           }
 | |
|         }
 | |
|     }
 | |
|     if (_sez_stamp == '9')
 | |
|     {
 | |
|       TString16 classe;
 | |
|       
 | |
|       classe.format("%c%c%8s%-4s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
 | |
| 			classe.rtrim();
 | |
|       
 | |
|       if (classe > ris_imp && !_risimp_fatto)
 | |
|       { 
 | |
|         if (_num_tot == "20" || _num_tot == "21")
 | |
|         {
 | |
|           set_row (_i, FR("@4gTotale delle partite straordinarie"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           set_row (_i, FR("@4gRisultato prima delle imposte"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           _risimp_fatto = true;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     _cont_gcs = 0;
 | |
|   }
 | |
|   if (_numr_da_stamp != _numr_tot)
 | |
|   {
 | |
|     if (_let_stamp != 'Z')
 | |
|     {
 | |
|       if (_sez_stamp != '5')
 | |
|       {
 | |
|         if (_cont_gcs != 0)//(_cont_gcs >= 2)
 | |
|         {
 | |
|           //Fai il totale del numero arabo e stampalo 
 | |
|           if (_num.not_empty())
 | |
|           {
 | |
|             set_row (_i, FR("@18gTotale@25g%s)"), num2str(_num));
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           }
 | |
|         }
 | |
|         if (_cont_num.not_empty())//(_cont_num >= 2)
 | |
|         {
 | |
|           //Fai il totale del numero romano e stampalo
 | |
|           int numeror = atoi(_numr);
 | |
|           TString numrom  = itor(numeror); 
 | |
|           if (numrom != "")
 | |
|           {
 | |
|             set_row (_i,FR("@14gTotale@21g%s"), (const char*) numrom);
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     _cont_gcs = 0;
 | |
|     _cont_num = 0;
 | |
|   }   
 | |
|   if (_let_da_stamp!=_let_tot)
 | |
|   { 
 | |
|     if (_sez_stamp == '9')
 | |
|     {
 | |
|       TString16 classe;
 | |
|       
 | |
|       classe.format("%c%c%8s%-4s",_sez_stamp,_let_stamp,(const char*)_numr_stamp,(const char*)_num_stamp);
 | |
| 			classe.ltrim();
 | |
|       
 | |
|       if (_cont_gcs != 0)//(_cont_gcs >= 2)
 | |
|       {
 | |
|         //Fai il totale del numero arabo e stampalo
 | |
|         if (_num.not_empty())
 | |
|         {
 | |
|           set_row (_i,FR("@18gTotale@25g%s)"), num2str(_num));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         }
 | |
|       }
 | |
|       if (_cont_num.not_empty())//(_cont_num >= 2)
 | |
|       {
 | |
|         //Fai il totale del numero romano e stampalo  
 | |
|         int numeror = atoi(_numr);
 | |
|         TString numrom  = itor(numeror);
 | |
|         if (numrom != "")
 | |
|         {
 | |
|           set_row (_i, FR("@14gTotale@21g%s"), (const char*) numrom);
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         }
 | |
|       }
 | |
|       if (_cont_numr != 0)//(_cont_numr >= 2)
 | |
|       {
 | |
|         //Fai il totale della lettera e stampalo  
 | |
|         if (_let_stamp == 'D')
 | |
|           set_row (_i, FR("@4gTotale delle rettifiche"));
 | |
|         else          
 | |
|           if (_let != ' ')
 | |
|             if (_sez_stamp == '9' && _let_stamp != 'E')
 | |
|               set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|             else  
 | |
|               if (_sez_stamp != '9')
 | |
|                 set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|         if (_let != ' ')
 | |
|         {
 | |
|           if (_sez_stamp == '9' && _let_stamp != 'E')  
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           else
 | |
|             if (_sez_stamp != '9')                    
 | |
|               set_row (_i++,"@86g%s", (const char*) _totale);    
 | |
|         }
 | |
|       }
 | |
|       
 | |
|       if (classe > diff_prod && _diffprod_fatto)
 | |
|       { 
 | |
|         if (_let_tot == 'A' || _let_tot == 'B') //Solo se esiste una delle due lettere
 | |
|         {               
 | |
|           set_row (_i++, FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*)_totale);
 | |
|           _diffprod_fatto = false;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       if (_let_stamp != 'Z')
 | |
|       {
 | |
|         if (_sez_stamp != '5')
 | |
|         {
 | |
|           if (_cont_gcs != 0)//(_cont_gcs >= 2)
 | |
|           {
 | |
|             //Fai il totale del numero arabo e stampalo 
 | |
|             if (_num.not_empty())
 | |
|             {
 | |
|               set_row (_i,FR("@18gTotale@25g%s)"), num2str(_num));
 | |
|               set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|             }
 | |
|           }
 | |
|           if (_cont_num.not_empty())//(_cont_num >= 2)
 | |
|           {
 | |
|             //Fai il totale del numero romano e stampalo
 | |
|             int numeror = atoi(_numr);
 | |
|             TString numrom  = itor(numeror); 
 | |
|             if (numrom != "")
 | |
|             {
 | |
|               set_row (_i,FR("@14gTotale@21g%s"), (const char*) numrom);
 | |
|               set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|             }
 | |
|           }
 | |
|           if (_cont_numr != 0)//(_cont_numr >= 2)
 | |
|           {
 | |
|             //Fai il totale della lettera e stampalo 
 | |
|             if (_let != ' ')
 | |
|             {
 | |
|               set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|               set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|             }
 | |
|           }
 | |
|         }   
 | |
|       }
 | |
|       
 | |
|       if ((_sez_stamp == '1')&&(_let_da_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i,FR("@0gTOTALE ATTIVO"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         _totale_attivita_gia_stampato = true;
 | |
|       }
 | |
|       
 | |
|       if ((_sez_stamp == '2')&&(_let_da_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i,FR("@0gTOTALE PASSIVO"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         _totale_passivita_gia_stampato = true;
 | |
|       }
 | |
|       
 | |
|       if ((_sez_stamp == '1')&&(_let_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i, FR("@0gTOTALE CONTI D' ORDINE ATTIVI"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         gia_stampato_conto_ord = true;
 | |
|       }
 | |
|       
 | |
|       if ((_sez_stamp == '2')&&(_let_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i, FR("@0gTOTALE CONTI D' ORDINE PASSIVI"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         _i++;                                            
 | |
|         gia_stampato_conto_ord = true;
 | |
|         if (!_attivo_o_passivo) 
 | |
|         {
 | |
|           set_row (_i++,FR("@0gSALDO CONTI D' ORDINE"));
 | |
|           set_row (_i,FR("@0gSBILANCIO"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           _sbilancio_ordine = true;  
 | |
|           _sbilancio_patr_gia_stampato = true;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     _cont_gcs  = 0;
 | |
|     _cont_num  = 0;
 | |
|     _cont_numr = 0;
 | |
|   }     
 | |
|   if (_sez_da_stamp != _sez_tot)
 | |
|   {
 | |
|     if (_let_stamp != 'Z')
 | |
|     {
 | |
|       if (_sez_stamp != '5')
 | |
|       {
 | |
|         if (_cont_gcs != 0)//(_cont_gcs >= 2)
 | |
|         {
 | |
|           //Fai il totale del numero arabo e stampalo
 | |
|           if (_num .not_empty())
 | |
|           {
 | |
|             set_row (_i,FR("@18gTotale@25g%s)"), num2str(_num));
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           }
 | |
|         }
 | |
|         if (_cont_num .not_empty())//(_cont_num >= 2)
 | |
|         {
 | |
|           //Fai il totale del numero romano e stampalo
 | |
|           int numeror = atoi(_numr);
 | |
|           TString numrom  = itor(numeror);
 | |
|           if (numrom != "")
 | |
|           {
 | |
|             set_row (_i, FR("@14gTotale@21g%s"), (const char*) numrom);
 | |
|             set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           }
 | |
|         }
 | |
|         if (_cont_numr != 0)//(_cont_numr >= 2)
 | |
|         {
 | |
|           //Fai il totale della lettera e stampalo
 | |
|           if (_let != ' ')
 | |
|           {   
 | |
|             if (_sez_stamp == '9' && _let_stamp != 'E')
 | |
|             {
 | |
|               set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|               set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|             }
 | |
|             else
 | |
|               if (_sez_stamp != '9')
 | |
|               {
 | |
|                 set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
 | |
|                 set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|               }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (!_totale_attivita_gia_stampato)
 | |
|       if ((_sez_stamp == '1') && (_let_stamp != 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i,FR("@0gTOTALE ATTIVO"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|       }
 | |
|     
 | |
|     if (!_totale_passivita_gia_stampato)
 | |
|       if ((_sez_stamp == '2') && (_let_stamp != 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i,FR("@0gTOTALE PASSIVO"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|       }  
 | |
|     
 | |
|     if (!gia_stampato_conto_ord)
 | |
|     {                                                
 | |
|       if (_sez_stamp == '2')
 | |
|       {           
 | |
|         if (!_sbilancio_patr_gia_stampato)
 | |
|         {  
 | |
|           char app = ' ';
 | |
|           set_row (_i++,"@0g%c", app);
 | |
|           set_row (_i++, FR("@0gSALDO STATO PATRIMONIALE"));
 | |
|           set_row (_i, FR("@0gSBILANCIO (ATTIVO - PASSIVO)"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|           _sbilancio_patr_gia_stampato = true;
 | |
|         }
 | |
|       }
 | |
|       if ((_sez_stamp == '1')&&(_let_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i, FR("@0gTOTALE CONTI D' ORDINE ATTIVI"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|       }
 | |
|       
 | |
|       if ((_sez_stamp == '2')&&(_let_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i,FR("@0gTOTALE CONTI D' ORDINE PASSIVI"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);  
 | |
|         _i++;                
 | |
|         if (!_sbilancio_ordine)
 | |
|         {
 | |
|           set_row (_i++,"@0g%c", app);
 | |
|           set_row (_i++, FR("@0gSALDO CONTI D' ORDINE"));
 | |
|           set_row (_i, FR("@0gSBILANCIO"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);   
 | |
|           _sbilancio_ordine = true;  
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (_sez_stamp == '2')
 | |
|     {
 | |
|       char app = ' ';
 | |
|       if (!_sbilancio_patr_gia_stampato)
 | |
|       {
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i++, FR("@0gSALDO STATO PATRIMONIALE"));
 | |
|         set_row (_i, FR("@0gSBILANCIO (ATTIVO - PASSIVO)"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|       }
 | |
|       if (!_sbilancio_ordine)
 | |
|       {   
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         set_row (_i++, FR("@0gSALDO CONTI D' ORDINE"));
 | |
|         set_row (_i, FR("@0gSBILANCIO"));
 | |
|         set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|       }          
 | |
|     }
 | |
|     if (_sez_stamp == '5')
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|       set_row (_i, FR("@0gTOTALE CONTI D' ORDINE"));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|     if (_sez_stamp == '9')
 | |
|     { 
 | |
|       if (_tabivd->eof()) 
 | |
|       {  
 | |
|         if ((_let_stamp == 'A' || _let_stamp == 'B') && _diffprod_fatto)//Solo se esiste una delle due lettere
 | |
|         {               
 | |
|           set_row (_i++,FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*) _totale);
 | |
|           _diffprod_fatto = false;
 | |
|         }
 | |
|         if (!_risimp_fatto)  
 | |
|         {  
 | |
|           set_row (_i, FR("@4gRisultato prima delle imposte"));
 | |
|           set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|         }
 | |
|       }  
 | |
|       
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);  
 | |
|       set_row (_i,FR("@0gRISULTATO CONTO ECONOMICO"));
 | |
|       set_row (_i++,"@86g%s", (const char*) _totale);
 | |
|     }
 | |
|     _cont_gcs = 0;
 | |
|     _cont_num = "";
 | |
|     _cont_numr = 0;
 | |
|     _cont_let = 0;
 | |
|   }
 | |
| }
 | |
| 
 | |
| print_action BA3800_application::postprocess_page(int file, int counter)
 | |
| {                       
 | |
|   if (_liv == 'S')
 | |
|   {
 | |
|     if (_sez_da_stamp != _sez_stamp)
 | |
|     {
 | |
|       if (_sez_da_stamp == '9')
 | |
|       {                      
 | |
|         reset_print();
 | |
|         _i = 1;
 | |
|         setta_righe_studio(TR("CONTO ECONOMICO"));
 | |
|         _reset_righe_stampa = false; 
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     set_auto_ff(false);   
 | |
|     
 | |
|     if (_tabivd->eof()) 
 | |
|       return NEXT_PAGE;
 | |
|   } 
 | |
|   else
 | |
|     if (_liv == 'D')
 | |
|     {  
 | |
|       struct bil_ivd* bil = (struct bil_ivd*) _buff;                              
 | |
| 
 | |
|       bil = (struct bil_ivd*) _buff;     
 | |
|       
 | |
|       if (_sez_da_stamp != _sez_stamp)
 | |
|       {
 | |
|         if (_sez_da_stamp == '5')
 | |
|         { 
 | |
|           reset_print();
 | |
|           _i = 1;
 | |
|           setta_righe_ditta(TR("CONTI D' ORDINE"));
 | |
|           _reset_righe_stampa = false;
 | |
|         }
 | |
|         if (_sez_da_stamp == '9')
 | |
|         {                      
 | |
|           reset_print();
 | |
|           _i = 1;
 | |
|           setta_righe_ditta(TR("CONTO ECONOMICO"));
 | |
|           _reset_righe_stampa = false; 
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       set_auto_ff(false); 
 | |
|       
 | |
|       if (_buff == NULL)
 | |
|         return NEXT_PAGE;
 | |
|     }
 | |
| 
 | |
|   return REPEAT_PAGE;
 | |
| }
 | |
| 
 | |
| bool BA3800_application::preprocess_page(int file, int counter)
 | |
| {      
 | |
|   if (_liv == 'S')
 | |
|   {
 | |
|     if (preprocess_studio(counter))
 | |
|       return true;
 | |
|     else 
 | |
|       return false;
 | |
|   }
 | |
|   else if (_liv == 'D')
 | |
|   {
 | |
|     if (preprocess_ditta(counter))
 | |
|       return true;
 | |
|     else 
 | |
|       return false;
 | |
|   }
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| bool BA3800_application::preprocess_studio(int counter)
 | |
| { 
 | |
|   TString saldostr,saldo_rafstr;    
 | |
|   
 | |
|   if (counter == 0)
 | |
|   {          
 | |
|     _tabivd->setkey(1);
 | |
|     _tabivd->zero();
 | |
|     _tabivd->first();  
 | |
|     reset_print();
 | |
|     _i = 1;
 | |
|   }                    
 | |
|   else
 | |
|     _tabivd->next();
 | |
|   
 | |
|   if (_reset_righe_stampa)
 | |
|   {
 | |
|     reset_print();
 | |
|     _i = 1;
 | |
|   }
 | |
|   else
 | |
|     _reset_righe_stampa = true;                 
 | |
|   
 | |
|   if (counter)
 | |
|   {
 | |
|     _sez_stamp  = _sez_da_stamp;
 | |
|     _let_stamp  = _let_da_stamp;
 | |
|     _numr_stamp = _numr_da_stamp;
 | |
|     _num_stamp  = _num_da_stamp;
 | |
|     _sez_tot    = _sez_da_stamp;
 | |
|     _let_tot    = _let_da_stamp;
 | |
|     _numr_tot   = _numr_da_stamp;
 | |
|     _num_tot    = _num_da_stamp;
 | |
|   }
 | |
| 
 | |
| 
 | |
|   if (!_tabivd->eof())
 | |
|   { 
 | |
|     TString16 codtab;
 | |
| 
 | |
|     codtab = _tabivd->get("CODTAB");
 | |
|     _sez_da_stamp  = codtab[0];
 | |
|     _let_da_stamp  = codtab[1];
 | |
|     _numr_da_stamp = codtab.mid(2, 4);
 | |
|     _numr_da_stamp.ltrim();
 | |
|     _num_da_stamp  = codtab.mid(6, 4);
 | |
|     _num_da_stamp.ltrim();
 | |
| 
 | |
|     if (counter)
 | |
|       stampa_totali_studio(); 
 | |
|   }
 | |
|   else
 | |
| 	{
 | |
| 		stampa_totali_studio(); 
 | |
| 		_sez_da_stamp = ' ';
 | |
| 		_sez_stamp    = ' ';
 | |
| 	}      
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| bool BA3800_application::preprocess_ditta(int counter)
 | |
| {
 | |
|   TString  key((const char*)_buff);
 | |
|   int     g,c;
 | |
|   long    s;
 | |
|   
 | |
|   if (!counter)
 | |
|   {
 | |
|     reset_print();
 | |
|     _i = 1;
 | |
|   }
 | |
| 
 | |
|   if (_reset_righe_stampa)
 | |
|   {
 | |
|     reset_print();
 | |
|     _i = 1;
 | |
|   }
 | |
|   else
 | |
|     _reset_righe_stampa = true;
 | |
|   
 | |
|   if (counter)
 | |
|   {
 | |
|     _sez_stamp = key[0];
 | |
|     _let_stamp = key[1];
 | |
|     _numr_stamp = key.mid(2, 4);
 | |
|     _numr_stamp.ltrim();
 | |
|     _num_stamp = key.mid(6, 4);
 | |
|     _num_stamp.ltrim();
 | |
|     _sez_tot = _sez_stamp;
 | |
|     _let_tot = _let_stamp;
 | |
|     _numr_tot = _numr_stamp;
 | |
|     _num_tot = _num_stamp;
 | |
|   }
 | |
| 
 | |
|   _buff = _sort->retrieve();
 | |
| 
 | |
|   if (_buff != NULL)
 | |
|   {
 | |
| 		key = (const char *) _buff;
 | |
|     _sez_da_stamp  = key[0];
 | |
|     _let_da_stamp  = key[1];
 | |
|     _numr_da_stamp = key.mid(2, 4);
 | |
|     _numr_da_stamp.ltrim();
 | |
|     _num_da_stamp  = key.mid(6, 4);
 | |
|     _num_da_stamp.ltrim();
 | |
|     g = atoi(key.mid(10, 3));
 | |
|     c = atoi(key.mid(13, 3));
 | |
|     s = atol(key.mid(16));      
 | |
| 
 | |
|     if (counter)
 | |
|       stampa_totali_ditta(); 
 | |
|   }
 | |
|   else
 | |
|   {
 | |
|     stampa_totali_ditta(); 
 | |
|     _sez_da_stamp = ' ';
 | |
|     _sez_stamp    = ' ';
 | |
| 	}
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| void BA3800_application::set_page(int file, int counter)
 | |
| { 
 | |
|   if (_liv == 'S')
 | |
|   {
 | |
|     if (_sez_da_stamp != _sez_stamp)
 | |
|     {
 | |
|       if ((_sez_da_stamp=='1')||((_sez_da_stamp=='2')&&(_statopatr_no_stamp)))
 | |
|       {
 | |
|         setta_righe_studio(TR("STATO PATRIMONIALE"));
 | |
|         _statopatr_no_stamp = false;
 | |
|       }
 | |
|       if (_sez_da_stamp == '2')
 | |
|         setta_righe_studio("");
 | |
|       if (_sez_da_stamp == '9')
 | |
|         set_auto_ff(true);
 | |
|     }
 | |
|     else 
 | |
|     {
 | |
|       if (!_tabivd->eof())
 | |
|         setta_righe_studio("");
 | |
|     }
 | |
|   } 
 | |
|   else if (_liv == 'D')
 | |
|   {
 | |
|     if (_sez_da_stamp != _sez_stamp)
 | |
|     {
 | |
|       if ((_sez_da_stamp=='1')||((_sez_da_stamp=='2')&&(_statopatr_no_stamp)))
 | |
|       {
 | |
|         setta_righe_ditta (TR("STATO PATRIMONIALE"));
 | |
|         _statopatr_no_stamp = false;
 | |
|       }
 | |
|       if (_sez_da_stamp == '2')
 | |
|         setta_righe_ditta("");
 | |
|       if ((_sez_da_stamp == '5') || (_sez_da_stamp == '9'))
 | |
|         set_auto_ff(true);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       if (_buff != NULL)
 | |
|         setta_righe_ditta("");
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void BA3800_application::setta_righe_studio(const char * titolo)
 | |
| {
 | |
|   int numeror;
 | |
|   TString numrom, numero;
 | |
|   bool stampa_classe = true; 
 | |
|   numeror = atoi(_numr_da_stamp);
 | |
|   numrom  = itor(numeror);
 | |
|   numero  = _num_da_stamp;  
 | |
| 	numero.ltrim();
 | |
| 
 | |
|   //Se la classe prelevata dal record corrente del sort e' diversa dalla classe
 | |
|   //prelevata dal record precedente, allora stampo la nuova classe con i relativi
 | |
|   //sottoconti. In caso contrario continuo a stampare solo i sottoconti.
 | |
| 
 | |
|   if (_sez_da_stamp != _sez_stamp)
 | |
|   {
 | |
|     set_row (_i++,"@0g%s", titolo);
 | |
|     char app = ' ';
 | |
|     set_row(_i++,"@0g%c", app);
 | |
|     
 | |
|     if (_sez_da_stamp == '1')
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);   
 | |
|       set_row (_i++, FR("@0gATTIVO"));
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|     }
 | |
|     else
 | |
|       if (_sez_da_stamp == '2')
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row(_i++,"@0g%c", app); 
 | |
|         set_row (_i++, FR("@0gPASSIVO"));
 | |
|         set_row(_i++,"@0g%c", app); 
 | |
|       }
 | |
|     
 | |
|     if (stampa_classe)
 | |
|     {
 | |
|       if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp== '9'))
 | |
|       { 
 | |
|         _cont_let  = 1;
 | |
|         _cont_numr = 1;
 | |
|         _cont_num  = "1";
 | |
|         _cont_gcs  = 1;
 | |
| 
 | |
|         if (_let_da_stamp != ' ')
 | |
|         {                                                 
 | |
|           set_row(_i,"@0g%c)", _let_da_stamp);  
 | |
| 					const TString & descr = descrizione_lettera(_sez_da_stamp,_let_da_stamp);
 | |
|           setta_righe_descr(descr, "@3g%s");
 | |
|         }
 | |
|         if (numrom != "")
 | |
|         {                    
 | |
|           set_row(_i,"@3g%8s -", (const char*) numrom);
 | |
| 					const TString & descr = descrizione_numeroromano(_sez_da_stamp,_let_da_stamp,numeror);
 | |
|           setta_righe_descr(descr, "@14g%s");
 | |
|         }
 | |
|         if (numero.not_empty())
 | |
|         {  
 | |
|           set_row(_i,"@13g%s)", num2str(_num_da_stamp));
 | |
| 				  const TString & descr = descrizione_numero(_sez_da_stamp,_let_da_stamp,numeror,numero);
 | |
|           setta_righe_descr(descr,"@27g%s");
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   else
 | |
|     if ((_let_da_stamp != _let_stamp) && (_sez_da_stamp == _sez_stamp))
 | |
|     {
 | |
|       if (stampa_classe)
 | |
|       {
 | |
|         if ((_sez_da_stamp=='1') ||
 | |
| 					  (_sez_da_stamp=='2') || 
 | |
| 						(_sez_da_stamp=='9'))
 | |
|         {                                                        
 | |
|           _cont_numr = 1;
 | |
|           _cont_num  = "1";
 | |
|           _cont_gcs  = 1;
 | |
|           if (_let_da_stamp != ' ')
 | |
|           {                                                 
 | |
|             set_row(_i,"@0g%c)", _let_da_stamp);
 | |
| 						const TString & descr = descrizione_lettera(_sez_da_stamp,_let_da_stamp);
 | |
|             setta_righe_descr(descr, "@3g%s");
 | |
|           }
 | |
|           if (numrom != "")
 | |
|           {                               
 | |
|             set_row(_i,"@3g%8s -", (const char*) numrom);
 | |
| 						const TString & descr = descrizione_numeroromano(_sez_da_stamp,_let_da_stamp,numeror);
 | |
|             setta_righe_descr(descr, "@14g%s");
 | |
|           }
 | |
|           if (numero.not_empty())
 | |
|           {  
 | |
|             set_row(_i,"@13g%s)", num2str(_num_da_stamp));
 | |
| 					  const TString & descr = descrizione_numero(_sez_da_stamp,_let_da_stamp,numeror,numero);
 | |
|             setta_righe_descr(descr, "@27g%s");
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     else
 | |
|       if ((_numr_da_stamp != _numr_stamp) &&
 | |
| 				  (_sez_da_stamp == _sez_stamp) &&
 | |
| 					(_let_da_stamp == _let_stamp))
 | |
|       {
 | |
|         if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
 | |
|         { 
 | |
|           _cont_num  = "1";
 | |
|           _cont_gcs  = 1;
 | |
|           if (numrom != "")
 | |
|           {                               
 | |
|             set_row(_i,"@3g%8s -", (const char*) numrom);
 | |
| 						const TString & descr = descrizione_numeroromano(_sez_da_stamp,_let_da_stamp,numeror);
 | |
|             setta_righe_descr(descr, "@14g%s");
 | |
|           }
 | |
|           if (numero.not_empty())
 | |
|           {   
 | |
|             set_row(_i,"@13g%s)", num2str(_num_da_stamp));
 | |
| 					  const TString & descr = descrizione_numero(_sez_da_stamp,_let_da_stamp,numeror,numero);
 | |
|             setta_righe_descr(descr, "@27g%s");
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|       else
 | |
|         if ((_num_da_stamp != _num_stamp) && 
 | |
| 					  (_sez_da_stamp == _sez_stamp) &&
 | |
| 						(_let_da_stamp == _let_stamp) &&
 | |
| 						(_numr_da_stamp==_numr_stamp))
 | |
|         {
 | |
|           if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
 | |
|           {   
 | |
|             set_row(_i,"@13g%s)", num2str(_num_da_stamp));
 | |
| 					  const TString & descr = descrizione_numero(_sez_da_stamp,_let_da_stamp,numeror,numero);
 | |
|             setta_righe_descr(descr, "@27g%s");
 | |
|             _cont_gcs = 1;
 | |
|           }
 | |
|         }
 | |
| }
 | |
| 
 | |
| void BA3800_application::setta_righe_ditta(const char* titolo)
 | |
| {
 | |
|   TString key((const char *) _buff);
 | |
|   int gruppo, conto;
 | |
|   char sezione,lettera;
 | |
|   long sottoc;
 | |
|   TString numrom, numero, numr;
 | |
|   bool stampa_classe = true;    
 | |
|   
 | |
|   sezione = key[0];
 | |
|   lettera = key[1];
 | |
|   numr = key.mid(2, 4);
 | |
|   numr.ltrim();
 | |
| 	numrom = itor(atoi(numr));
 | |
|   numero =  key.mid(6, 4);
 | |
|   numero.ltrim();
 | |
|   gruppo = atoi(key.mid(10, 3));
 | |
|   conto = atoi(key.mid(13, 3));
 | |
|   sottoc  = atol(key.mid(16));      
 | |
| 
 | |
|   //Se la classe prelevata dal record corrente del sort e' diversa dalla classe
 | |
|   //prelevata dal record precedente, allora stampo la nuova classe con i relativi
 | |
|   //sottoconti. In caso contrario continuo a stampare solo i sottoconti.
 | |
| 
 | |
|   if (sezione == '1' && lettera == 'A' && !_vaccata)
 | |
| 	{
 | |
|     set_row (_i, FR("@3gTotale  )"));
 | |
|     set_row (_i++,"@86g%s", (const char*) _totale);
 | |
| 		_vaccata = true;
 | |
| 	}
 | |
| 
 | |
|   if (_sez_da_stamp != _sez_stamp)
 | |
|   {
 | |
|     set_row (_i++,"@0g%s", titolo);
 | |
|     char app = ' ';
 | |
|     set_row(_i++,"@0g%c", app);
 | |
|     
 | |
|     if ((_sez_da_stamp == '1')&&(_let_da_stamp == 'Z'))
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row (_i++,"@0g%c", app);   
 | |
|       set_row (_i++,FR("@0gCONTI D' ORDINE ATTIVI"));
 | |
|       set_row (_i++,"@0g%c", app);
 | |
|       stampa_classe = false;
 | |
|     } 
 | |
|     else
 | |
|       if ((_sez_da_stamp == '1')&&(_let_da_stamp != 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);   
 | |
|         set_row (_i++,FR("@0gATTIVO"));
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|       }
 | |
|     
 | |
|     if ((_sez_da_stamp == '2')&&(_let_da_stamp == 'Z'))
 | |
|     {
 | |
|       char app = ' ';
 | |
|       set_row(_i++,"@0g%c", app); 
 | |
|       set_row (_i++, FR("@0gCONTI D' ORDINE PASSIVI"));
 | |
|       set_row(_i++,"@0g%c", app); 
 | |
|       stampa_classe = false;
 | |
|     } 
 | |
|     else
 | |
|       if ((_sez_da_stamp == '2')&&(_let_da_stamp != 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row(_i++,"@0g%c", app); 
 | |
|         set_row (_i++, FR("@0gPASSIVO"));
 | |
|         set_row(_i++,"@0g%c", app); 
 | |
|       }
 | |
|     
 | |
|     if (stampa_classe)
 | |
|     {
 | |
|       if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp== '9'))
 | |
|       { 
 | |
|         _cont_let  = 1;
 | |
|         _cont_numr = 1;
 | |
|         _cont_num  = "1";
 | |
|         _cont_gcs  = 1;
 | |
| 
 | |
|         if (lettera != ' ')
 | |
|         {
 | |
| 					const TString descr(descrizione_lettera(sezione, lettera));
 | |
| 
 | |
|           set_row(_i,"@0g%c)", lettera); 
 | |
|           setta_righe_descr(descr, "@3g%s");
 | |
|         }
 | |
|         if (numrom != "")
 | |
|         {
 | |
|           set_row(_i,"@3g%8s -", (const char*) numrom);
 | |
| 				  const TString & descr = descrizione_numeroromano(sezione, lettera, atoi(numr));
 | |
|           setta_righe_descr(descr, "@14g%s");
 | |
|  
 | |
|         }
 | |
|         if (numero.not_empty())
 | |
|         {
 | |
|           set_row(_i,"@13g%s)", num2str(numero));
 | |
| 				  const TString & descr = descrizione_numero(sezione, lettera, atoi(numr), numero);
 | |
|           setta_righe_descr(descr, "@27g%s");
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   else
 | |
|     if ((_let_da_stamp != _let_stamp) &&
 | |
| 			  (_sez_da_stamp == _sez_stamp))
 | |
|     {
 | |
|       if ((_sez_da_stamp == '1') &&
 | |
| 				  (_let_da_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row (_i++,"@0g%c", app);   
 | |
|         set_row (_i++,FR("@0gCONTI D' ORDINE ATTIVI"));
 | |
|         set_row (_i++,"@0g%c", app);
 | |
|         stampa_classe = false;
 | |
|       }
 | |
|       if ((_sez_da_stamp == '2')&&(_let_da_stamp == 'Z'))
 | |
|       {
 | |
|         char app = ' ';
 | |
|         set_row(_i++,"@0g%c", app); 
 | |
|         set_row (_i++,FR("@0gCONTI D' ORDINE PASSIVI"));
 | |
|         set_row(_i++,"@0g%c", app); 
 | |
|         stampa_classe = false;
 | |
|       }
 | |
|       if (stampa_classe)
 | |
|       {
 | |
|         if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
 | |
|         {
 | |
|           set_row(_i,"@0g%c)", lettera);  
 | |
| 					const TString descr(descrizione_lettera(sezione, lettera));
 | |
|           setta_righe_descr(descr, "@3g%s");
 | |
|           _cont_numr = 1;
 | |
|           _cont_num  = "1";
 | |
|           _cont_gcs  = 1;
 | |
|           
 | |
|           if (numrom != "")
 | |
|           {
 | |
|             set_row(_i,"@3g%8s -", (const char*) numrom);
 | |
| 					  const TString & descr = descrizione_numeroromano(sezione, lettera, atoi(numr));
 | |
|             setta_righe_descr(descr, "@14g%s");
 | |
|           }
 | |
|           if (numero.not_empty())
 | |
|           {
 | |
|             set_row(_i,"@13g%s)", num2str(numero));
 | |
| 						const TString & descr = descrizione_numero(sezione, lettera, atoi(numr), numero);
 | |
|             setta_righe_descr(descr, "@27g%s");
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     else
 | |
|       if ((_numr_da_stamp != _numr_stamp) &&
 | |
| 				  (_sez_da_stamp == _sez_stamp) &&
 | |
| 					(_let_da_stamp==_let_stamp))
 | |
|       {
 | |
|         if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
 | |
|         {
 | |
|           set_row(_i,"@3g%8s -", (const char*) numrom);
 | |
| 				  const TString & descr = descrizione_numeroromano(sezione, lettera, atoi(numr));
 | |
|           setta_righe_descr(descr, "@14g%s");
 | |
|           _cont_num  = "1";
 | |
|           _cont_gcs  = 1;
 | |
|           
 | |
|           if (numero.not_empty())
 | |
|           {
 | |
|             set_row(_i,"@13g%s)", num2str(numero));
 | |
| 						const TString & descr = descrizione_numero(sezione, lettera, atoi(numr), numero);
 | |
|             setta_righe_descr(descr, "@27g%s");
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|       else
 | |
|         if ((_num_da_stamp != _num_stamp) &&
 | |
| 					  (_sez_da_stamp == _sez_stamp) &&
 | |
| 						(_let_da_stamp == _let_stamp) &&
 | |
| 						(_numr_da_stamp == _numr_stamp))
 | |
|         {
 | |
|           if ((_sez_da_stamp == '1') ||
 | |
| 						  (_sez_da_stamp == '2') ||
 | |
| 							(_sez_da_stamp == '9'))
 | |
|           {
 | |
|             set_row(_i,"@13g%s)", num2str(numero));
 | |
| 						const TString & descr = descrizione_numero(sezione, lettera, atoi(numr), numero);
 | |
|             setta_righe_descr(descr, "@27g%s");
 | |
|             _cont_gcs = 1;
 | |
|           }
 | |
|         }
 | |
|   if (gruppo != 0)
 | |
|   {
 | |
|     _cont_gcs += 1;
 | |
|     set_row (_i,"@20g%d", gruppo);
 | |
|     set_row (_i,"@24g%d", conto);
 | |
|     if (sottoc != 0L) // Omette la stampa dello 0
 | |
|       set_row (_i,"@28g%ld", sottoc);
 | |
| 	  const TString & descr = descrizione_sottoconto(gruppo, conto, sottoc);
 | |
|     set_row (_i,"@35g%s", (const char*) descr);
 | |
|     set_row (_i,"@88g%s", (const char*) _totale);
 | |
|     _i++;
 | |
|   }  
 | |
| }
 | |
| 
 | |
| void BA3800_application::setta_righe_descr(const char * str, const char * formato)
 | |
| {
 | |
| 	TParagraph_string s(str, 40);
 | |
|   const char * r;
 | |
| 
 | |
|   while ((r = s.get()) != NULL)
 | |
| 		set_row (_i++, formato, r);
 | |
| }
 | |
| 
 | |
| void BA3800_application::intestazione_ditta()
 | |
| {
 | |
|   TString datastampastr;
 | |
|   TString sep(132),sep1(147);
 | |
| 
 | |
|   TString app(8);
 | |
|   TLocalisamfile nditte (LF_NDITTE);
 | |
|   TLocalisamfile comuni (LF_COMUNI);
 | |
|   TLocalisamfile unloc (LF_UNLOC);
 | |
|   TLocalisamfile anag (LF_ANAG);
 | |
|   TString codice_ditta,ragsoc,indulc,civulc,capulc,com,prov,comulc;
 | |
|   TString cofi,paiv,tipoa,codanagr;  
 | |
| 
 | |
|   reset_header();
 | |
|   
 | |
|   nditte.setkey(1);
 | |
|   codice_ditta << get_firm();
 | |
|   nditte.zero();
 | |
|   nditte.put(NDT_CODDITTA,codice_ditta);
 | |
|   nditte.read();
 | |
|   app      = nditte.get(NDT_CODDITTA);
 | |
|   ragsoc   = nditte.get(NDT_RAGSOC);
 | |
|   tipoa    = nditte.get(NDT_TIPOA);
 | |
|   codanagr = nditte.get(NDT_CODANAGR);
 | |
|   
 | |
|   unloc.setkey(1);
 | |
|   unloc.zero();
 | |
|   unloc.put(ULC_CODDITTA,app);
 | |
|   unloc.put(ULC_CODULC,"1");
 | |
|   unloc.read();
 | |
|   indulc = unloc.get(ULC_INDULC);
 | |
|   civulc = unloc.get(ULC_CIVULC);
 | |
|   capulc = unloc.get(ULC_CAPULC);
 | |
|   comulc = unloc.get(ULC_COMULC);
 | |
|   
 | |
|   comuni.setkey(1);
 | |
|   comuni.zero();
 | |
|   comuni.put(COM_COM,comulc);
 | |
|   comuni.read();
 | |
|   com  = comuni.get(COM_DENCOM);
 | |
|   prov = comuni.get(COM_PROVCOM);
 | |
| 
 | |
|   anag.setkey(1); 
 | |
|   anag.zero();
 | |
|   anag.put(ANA_TIPOA,tipoa);
 | |
|   anag.put(ANA_CODANAGR,codanagr);
 | |
|   anag.read();
 | |
|   cofi = anag.curr().get(ANA_COFI);
 | |
|   paiv = anag.curr().get(ANA_PAIV);
 | |
| 
 | |
|   set_header (1, FR("@0gDITTA@6g%-5s"), (const char*) codice_ditta);
 | |
|   set_header (1, "@12g%-45s", (const char*) ragsoc);
 | |
|   set_header (1, "@59g%-25s", (const char*) indulc);
 | |
|   set_header (1, "@86g%-9s", (const char*) civulc);
 | |
|   set_header (1, "@97g%-5s", (const char*) capulc);
 | |
|   set_header (1, "@103g%-25s", (const char*) com);
 | |
|   set_header (1, "@129g%-3s", (const char*) prov);
 | |
| 
 | |
|   sep << FR("Pag. @#");
 | |
|   sep.right_just(132); 
 | |
|   set_header(2,(const char*) sep);
 | |
|   
 | |
|   datastampastr = _datastampa.string();
 | |
| 
 | |
|   set_header (2,FR("@0gPartita iva@12g%-11s"), (const char*) paiv);
 | |
|   set_header (2,FR("@30gCodice fiscale@45g%-16s"), (const char*) cofi);
 | |
|   set_header (2,FR("@105gData@110g%s"),(const char*) datastampastr);
 | |
|   set_header (3,FR("@0gSTAMPA TABELLA IV DIRETTIVA"));
 | |
|   
 | |
|   sep.fill('-');                            //Stampa 132 - (sep(132))       
 | |
|   set_header (4, (const char *) sep);
 | |
| }                                                 
 | |
| 
 | |
| void BA3800_application::intestazione_studio()
 | |
| { 
 | |
|   TString sep(132);
 | |
|   TString datastampastr;
 | |
|   
 | |
|   reset_header();
 | |
|   
 | |
|   sep << FR("Pag. @#");
 | |
|   sep.right_just(132); 
 | |
|   set_header(1,(const char*) sep);
 | |
|   
 | |
|   set_header (1,FR("@0gStudio"));
 | |
|   
 | |
|   datastampastr = _datastampa.string();
 | |
| 
 | |
|   set_header (1,FR("@105gData@110g%s"),(const char*) datastampastr);
 | |
|   set_header (2,FR("@0gSTAMPA TABELLA IV DIRETTIVA"));              
 | |
|   
 | |
|   sep.fill('-');                            //Stampa 132 - (sep(132))       
 | |
|   set_header (3, (const char *) sep);
 | |
| }
 | |
| 
 | |
| const char* BA3800_application::descrizione_lettera(char sezione, char lettera)
 | |
| {
 | |
|   TString16 key;
 | |
| 
 | |
|   key.format("%1c%1c", sezione, lettera);
 | |
| 	
 | |
|   return cache().get(TAB_IVD, key, "S0");
 | |
| }
 | |
| 
 | |
| const char* BA3800_application::descrizione_numeroromano(char sezione, char lettera, int numr)
 | |
| {
 | |
|   TString16 key;
 | |
| 
 | |
|   if (numr > 0)
 | |
|     key.format("%1c%1c%04d", sezione, lettera, numr);
 | |
|   else
 | |
|     key.format("%c%c    ", sezione, lettera);
 | |
| 	
 | |
|   return cache().get(TAB_IVD, key, "S0");
 | |
| }
 | |
| 
 | |
| const char* BA3800_application::descrizione_numero(char sezione, char lettera, int numr, const TString &  numero)
 | |
| {
 | |
|   TString16 key;
 | |
| 
 | |
|   if (numr > 0)
 | |
|     key.format("%1c%1c%04d%-4s",sezione, lettera, numr, (const char *) numero);
 | |
|   else
 | |
|     key.format("%1c%1c    %-4s",sezione,lettera, (const char *) numero);
 | |
| 
 | |
|   return cache().get(TAB_IVD, key, "S0");
 | |
| }     
 | |
| 
 | |
| const char* BA3800_application::descrizione_sottoconto(int gruppo, int conto, long sottoc)
 | |
| {
 | |
|   TString16 key;
 | |
| 
 | |
|   key << gruppo;
 | |
|   if (conto != 0)
 | |
|     key << '|' << conto;
 | |
|   if (sottoc != 0)
 | |
| 		key << '|' <<  sottoc;
 | |
|   return cache().get(LF_PCON, key, PCN_DESCR);
 | |
| }
 | |
| 
 | |
| void BA3800_application::init_sort()
 | |
| {
 | |
|   _sort = new TSort(23);
 | |
|   
 | |
|   _sort -> addsortkey(0,22);
 | |
|   _sort->init();
 | |
| }
 | |
| 
 | |
| bool BA3800_application::user_create()
 | |
| {
 | |
| 	open_files(LF_TAB, LF_TABCOM, LF_NDITTE, LF_COMUNI, LF_UNLOC, LF_ANAG, LF_PCON, LF_CLIFO, 0);
 | |
| 	_tabivd = new TTable(TAB_IVD);
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| int ba3800 (int argc, char* argv[])
 | |
| {
 | |
|   if (argc > 3)
 | |
|   {
 | |
|     BA3800_application a(*argv[2]);
 | |
|     a.run(argc, argv, TR("Stampa Tabella IV Direttiva CEE"));
 | |
|   }
 | |
|     else
 | |
|       error_box("Usage: BA3 -7 {D|S}");
 | |
|   return 0;
 | |
| }
 |