Da aggiungere al modulo di ricezione-trasferimento con AS400
ab2102.cpp  Esegue la parte di trasferimento: manca ancora tutta la parte
            riguardante il trasferimento di voci, relazione e sottorelazioni
git-svn-id: svn://10.65.10.50/trunk@5633 c028cbd2-c16b-5b4b-a496-9718f37d4682
			
			
This commit is contained in:
		
							parent
							
								
									0556a09bb9
								
							
						
					
					
						commit
						e1ca540385
					
				
							
								
								
									
										399
									
								
								ab/ab2102.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										399
									
								
								ab/ab2102.cpp
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,399 @@
 | 
				
			|||||||
 | 
					//AB2102.CPP Trasferimento tabelle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <utility.h>    //Definizione di fexit
 | 
				
			||||||
 | 
					#include "movdett.h"    //Contiene le definizioni di costanti relative ai nomi dei campi di LF_MOVDETT
 | 
				
			||||||
 | 
					#include "saldi.h"      //Contiene le definizioni di costanti relative ai nomi dei campi di LF_SALDI
 | 
				
			||||||
 | 
					#include "ab2100.h"   
 | 
				
			||||||
 | 
					#include "ab2100a.h"
 | 
				
			||||||
 | 
					#include <progind.h>
 | 
				
			||||||
 | 
					#include <assoc.h>
 | 
				
			||||||
 | 
					#include <varrec.h>
 | 
				
			||||||
 | 
					#define  FLAG_COGE      "CG"
 | 
				
			||||||
 | 
					#define  FLAG_DETT      "DT"
 | 
				
			||||||
 | 
					#define  FLAG_CLIENTE   "CL"
 | 
				
			||||||
 | 
					#define  FLAG_FORNITORE "FO"
 | 
				
			||||||
 | 
					#define  FLAG_MOVIMENTO "MO" // così i movs sono alla fine 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Classe derivata per il trasferimento
 | 
				
			||||||
 | 
					class TTrasferimento:public TRiceTras
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					    virtual bool menu(MENU_TAG);
 | 
				
			||||||
 | 
					    static bool inseriscipercorso(TMask_field& f, KEY k);
 | 
				
			||||||
 | 
					    //Esegue il ciclo di ricezione
 | 
				
			||||||
 | 
					    void converti(int);
 | 
				
			||||||
 | 
					    void trasferisci_albero(TRectype &,TRecord_text&, TAssoc_array&);
 | 
				
			||||||
 | 
					    bool cerca_padre(TLocalisamfile &, TRectype &);
 | 
				
			||||||
 | 
					    long my_num(TLocalisamfile&, TAssoc_array&);
 | 
				
			||||||
 | 
					    bool mov_da_scrivere(TRectype &);
 | 
				
			||||||
 | 
					    void formatta(TRecord_text&,TRectype&,int&);
 | 
				
			||||||
 | 
					    TTrasferimento() {}
 | 
				
			||||||
 | 
					    virtual ~TTrasferimento() {}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char* get_ordinamento(TVariable_rectype & rec)
 | 
				
			||||||
 | 
					{     
 | 
				
			||||||
 | 
					  if (rec.get(ABMD_TIPODETT) == FLAG_DETT || rec.get(ABMD_TIPODETT) == FLAG_COGE )
 | 
				
			||||||
 | 
					  { //E' un record di MOVI3
 | 
				
			||||||
 | 
					    return (MOVIMENTO3);
 | 
				
			||||||
 | 
					  }             
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (rec.get(ABMD_TIPODETT) == FLAG_CLIENTE)
 | 
				
			||||||
 | 
					  {//E' un record di MOVI4
 | 
				
			||||||
 | 
					     return (MOVIMENTO4);
 | 
				
			||||||
 | 
					  }                       
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (rec.get(ABMD_TIPODETT) == FLAG_FORNITORE)
 | 
				
			||||||
 | 
					  {//E' un record di MOVI5
 | 
				
			||||||
 | 
					    return (MOVIMENTO5);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (rec.get(ABMD_TIPODETT) == FLAG_MOVIMENTO)
 | 
				
			||||||
 | 
					  {//Può essere MOVI 1 2
 | 
				
			||||||
 | 
					    real r(rec.get(ABMD_IMPORTO)); 
 | 
				
			||||||
 | 
					    if (r > 0)
 | 
				
			||||||
 | 
					    //Se è un saldo il record va in MOVI1
 | 
				
			||||||
 | 
					      return (MOVIMENTO1);
 | 
				
			||||||
 | 
					    //Se è un progressivo o una riclassificazione va in MOVI2
 | 
				
			||||||
 | 
					    return (MOVIMENTO2);
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  //A questo punto la funzione non dovrebbe mai arrivare
 | 
				
			||||||
 | 
					  CHECK (FALSE,"La funzione get_ordinamento ritorna un valore non valido");
 | 
				
			||||||
 | 
					  return NULL;
 | 
				
			||||||
 | 
					}   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TTrasferimento::cerca_padre(TLocalisamfile & padre, TRectype &node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  padre.put(ABMD_CODDITTA,node.get(ABMD_CODDITTA));
 | 
				
			||||||
 | 
					  padre.put(ABMD_ANNO,node.get(ABMD_ANNO));
 | 
				
			||||||
 | 
					  padre.put(ABMD_CODPDB,node.get(ABMD_CODPDB));
 | 
				
			||||||
 | 
					  padre.put(ABMD_TIPOBIL,node.get(ABMD_TIPOBIL));
 | 
				
			||||||
 | 
					  padre.put(ABMD_CODCBL,node.get(ABMD_CODCBL));
 | 
				
			||||||
 | 
					  padre.put(ABMD_ID,node.get(ABMD_IDPADRE));
 | 
				
			||||||
 | 
					  if (padre.read() == NOERR)
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
 | 
					  return FALSE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					long TTrasferimento::my_num(TLocalisamfile& mov, TAssoc_array& progressivi)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  long ret = 1;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  TToken_string my_key;
 | 
				
			||||||
 | 
					  my_key.add(mov.get(ABMD_CODDITTA));
 | 
				
			||||||
 | 
					  my_key.add(mov.get(ABMD_ANNO));
 | 
				
			||||||
 | 
					  my_key.add(mov.get(ABMD_CODPDB));
 | 
				
			||||||
 | 
					  my_key.add(mov.get(ABMD_TIPOBIL));
 | 
				
			||||||
 | 
					  my_key.add(mov.get(ABMD_CODCBL));
 | 
				
			||||||
 | 
					  my_key.add(mov.get(ABMD_ID));
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (progressivi.is_key(my_key))
 | 
				
			||||||
 | 
					  { 
 | 
				
			||||||
 | 
					    ret = atol(*(TString*)progressivi.objptr(my_key));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  {                         
 | 
				
			||||||
 | 
					    long id_prec =mov.get_long(ABMD_IDPREC);
 | 
				
			||||||
 | 
					    if (id_prec != ID_NULLO)
 | 
				
			||||||
 | 
					    {                 
 | 
				
			||||||
 | 
					      mov.put(ABMD_ID,id_prec);
 | 
				
			||||||
 | 
					      if (mov.read()== NOERR)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        ret=my_num(mov,progressivi)+1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
 | 
				
			||||||
 | 
					    }       
 | 
				
			||||||
 | 
					    TString16 str_ret;
 | 
				
			||||||
 | 
					    str_ret << ret;
 | 
				
			||||||
 | 
					    progressivi.add(my_key,str_ret);
 | 
				
			||||||
 | 
					  }  
 | 
				
			||||||
 | 
					  return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					void TTrasferimento::trasferisci_albero(TRectype &node, TRecord_text &rec, TAssoc_array &progressivi)
 | 
				
			||||||
 | 
					{  
 | 
				
			||||||
 | 
					  TLocalisamfile mov(LF_MOVDETT);   
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //Se è un COGE scrivo il CODICE_COGE nel relativo campo
 | 
				
			||||||
 | 
					  if (node.get(ABMD_TIPODETT) == FLAG_COGE)
 | 
				
			||||||
 | 
					    rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  //Se è un movimento ...
 | 
				
			||||||
 | 
					  if (node.get(ABMD_TIPODETT)== FLAG_MOVIMENTO)
 | 
				
			||||||
 | 
					  { //... sono all'ultimo livello: trovo il padre
 | 
				
			||||||
 | 
					    if (cerca_padre(mov,node))
 | 
				
			||||||
 | 
					    {//Questo è il padre del movimento 
 | 
				
			||||||
 | 
					      if (mov.get(ABMD_TIPODETT) == FLAG_COGE) //Se il padre è un COGE scrivo il CONTO COGE nel relativo campo
 | 
				
			||||||
 | 
					        rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT);
 | 
				
			||||||
 | 
					        //altrimenti, se il padre è un dettaglio, non scrivo nessuna informazione aggiuntiva
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {//Non dovrebbe mai succedere: non esiste il padre del movimento
 | 
				
			||||||
 | 
					      CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
 | 
				
			||||||
 | 
					    }                         
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Questa parte esegue la "numerazione progressiva" dei movimenti: assegna il numero di riga
 | 
				
			||||||
 | 
					    TString16 num_riga;
 | 
				
			||||||
 | 
					    mov.curr()=node;
 | 
				
			||||||
 | 
					    num_riga << my_num(mov,progressivi);
 | 
				
			||||||
 | 
					    rec.add(num_riga,NUMERO_RIGA_MOVDETT);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //Trovo il padre se esiste      
 | 
				
			||||||
 | 
					    long id_padre = atol(node.get(ABMD_IDPADRE));
 | 
				
			||||||
 | 
					    real r(node.get(ABMD_CODDETT));
 | 
				
			||||||
 | 
					    if ((id_padre != ID_NULLO) && (r == 0)) //Se esiste il padre e non sono un COGE devo assegnarmi
 | 
				
			||||||
 | 
					                              //nel campo PROGRESSIVO_DETT il numero progressivo del padre
 | 
				
			||||||
 | 
					    {//Leggo il padre
 | 
				
			||||||
 | 
					      mov.curr()=node;
 | 
				
			||||||
 | 
					      mov.put(ABMD_ID,id_padre);
 | 
				
			||||||
 | 
					      if (mov.read()==NOERR)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        TString16 num_prog;
 | 
				
			||||||
 | 
					        num_prog << my_num(mov,progressivi);
 | 
				
			||||||
 | 
					        rec.add(num_prog,PROGRESSIVO_DETT_MOVDETT);  //Questo è un record di tipo MOVIMENTI
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }//Fine parte "ricostruzione" albero dei movimenti
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //Questa parte "ricostruisce" l'albero dei dettaglio
 | 
				
			||||||
 | 
					  if (node.get(ABMD_TIPODETT)== FLAG_DETT)
 | 
				
			||||||
 | 
					  {                   
 | 
				
			||||||
 | 
					    mov.curr()=node;       
 | 
				
			||||||
 | 
					    TString16 num; 
 | 
				
			||||||
 | 
					    num << my_num(mov,progressivi);
 | 
				
			||||||
 | 
					    rec.add(num,PROGRESSIVO_DETT_MOVDETT);  //Questo è un record di tipo DETTAGLI
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TTrasferimento::mov_da_scrivere(TRectype &node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TLocalisamfile dett(LF_MOVDETT);
 | 
				
			||||||
 | 
					  if (node.get_long(ABMD_IDPADRE) == ID_NULLO) //Sono al primo livello
 | 
				
			||||||
 | 
					    return TRUE;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  if (cerca_padre(dett,node))
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if (dett.get_long(ABMD_IDPADRE) == ID_NULLO) //Sono al secondo livello
 | 
				
			||||||
 | 
					      return TRUE;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (dett.get(ABMD_TIPODETT) == FLAG_COGE) //Sono al terzo livello, ma ammetto solo i COGE
 | 
				
			||||||
 | 
					        return TRUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return FALSE; //Tutti i livelli superiori a 2 e tutti i casi che non riesco a gestire
 | 
				
			||||||
 | 
					}   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TTrasferimento::formatta(TRecord_text &rec, TRectype &node, int &logic_num)
 | 
				
			||||||
 | 
					{                                           
 | 
				
			||||||
 | 
					  if (logic_num == LF_MOVDETT)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if ((rec.type() == MOVIMENTO1) || (rec.type() == MOVIMENTO2))
 | 
				
			||||||
 | 
					    {//Se c'è un valore significativo in IMPORTO significa che questo valore va
 | 
				
			||||||
 | 
					     //inserito nel campo IMPORTO del file di testo e settato il flag D/A 
 | 
				
			||||||
 | 
					     //Il tipo record (già settato) è MOVI1
 | 
				
			||||||
 | 
					      real r(node.get(ABMD_IMPORTO));
 | 
				
			||||||
 | 
					      if (r > 0)
 | 
				
			||||||
 | 
					      {               
 | 
				
			||||||
 | 
					        TString imp = node.get(ABMD_IMPORTO);
 | 
				
			||||||
 | 
					        rec.add(node.get(ABMD_FLDA),FLAG_DA_MOVDETT);
 | 
				
			||||||
 | 
					        rec.add(imp.rtrim(4),IMPORTO_MOVDETT);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {//Questi valori vanno inseriti in IMPORTO di MOVI2
 | 
				
			||||||
 | 
					        real rpd(node.get(ABMD_PDARE));
 | 
				
			||||||
 | 
					        real rpa(node.get(ABMD_PAVERE));
 | 
				
			||||||
 | 
					        real rrd(node.get(ABMD_RDARE));
 | 
				
			||||||
 | 
					        real rra(node.get(ABMD_RAVERE));
 | 
				
			||||||
 | 
					        if (rpd > 0)
 | 
				
			||||||
 | 
					        {                   
 | 
				
			||||||
 | 
					          TString imp =node.get(ABMD_PDARE);
 | 
				
			||||||
 | 
					          rec.add("D",FLAG_DA_MOVDETT);
 | 
				
			||||||
 | 
					          rec.add(imp.rtrim(4),IMPORTO_MOVDETT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (rpa > 0)  
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          TString imp = node.get(ABMD_PAVERE);
 | 
				
			||||||
 | 
					          rec.add("A",FLAG_DA_MOVDETT);
 | 
				
			||||||
 | 
					          rec.add(imp.rtrim(4),IMPORTO_MOVDETT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (rrd > 0)
 | 
				
			||||||
 | 
					        {            
 | 
				
			||||||
 | 
					          TString imp = node.get(ABMD_RDARE);
 | 
				
			||||||
 | 
					          rec.add("X",FLAG_RICLASSIFICAZIONE_MOVDETT);
 | 
				
			||||||
 | 
					          rec.add("D",FLAG_DA_MOVDETT);
 | 
				
			||||||
 | 
					          rec.add(imp.rtrim(4),IMPORTO_MOVDETT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (rra > 0)  
 | 
				
			||||||
 | 
					        {            
 | 
				
			||||||
 | 
					          TString imp = node.get(ABMD_RAVERE);
 | 
				
			||||||
 | 
					          rec.add("X",FLAG_RICLASSIFICAZIONE_MOVDETT);
 | 
				
			||||||
 | 
					          rec.add("A",FLAG_DA_MOVDETT);
 | 
				
			||||||
 | 
					          rec.add(imp.rtrim(4),IMPORTO_MOVDETT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {//Questi sono gli importi dei dettagli
 | 
				
			||||||
 | 
					      TString sld = rec.row(SALDO_INIZIO_ANNO_MOVDETT);
 | 
				
			||||||
 | 
					      rec.add(sld.rtrim(4),SALDO_INIZIO_ANNO_MOVDETT);
 | 
				
			||||||
 | 
					      TString pda = rec.row(PROGRESSIVO_DARE_MOVDETT);
 | 
				
			||||||
 | 
					      rec.add(pda.rtrim(4),PROGRESSIVO_DARE_MOVDETT);
 | 
				
			||||||
 | 
					      TString pav = rec.row(PROGRESSIVO_AVERE_MOVDETT);
 | 
				
			||||||
 | 
					      rec.add(pav.rtrim(4),PROGRESSIVO_AVERE_MOVDETT);
 | 
				
			||||||
 | 
					      TString rda = rec.row(RICLASSIFICAZIONE_DARE_MOVDETT);
 | 
				
			||||||
 | 
					      rec.add(rda.rtrim(4),RICLASSIFICAZIONE_DARE_MOVDETT);
 | 
				
			||||||
 | 
					      TString rav = rec.row(RICLASSIFICAZIONE_AVERE_MOVDETT);
 | 
				
			||||||
 | 
					      rec.add(rav.rtrim(4),RICLASSIFICAZIONE_AVERE_MOVDETT);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }// end if LF_MOVDETT
 | 
				
			||||||
 | 
					  if (logic_num == LF_ABSALDI)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TString sld = rec.row(SALDO_INIZIO_ANNO_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    rec.add(sld.rtrim(4),SALDO_INIZIO_ANNO_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    TString pda = rec.row(PROGRESSIVO_DARE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    rec.add(pda.rtrim(4),PROGRESSIVO_DARE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    TString pav = rec.row(PROGRESSIVO_AVERE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    rec.add(pav.rtrim(4),PROGRESSIVO_AVERE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    TString rda = rec.row(RICLASSIFICAZIONE_DARE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    rec.add(rda.rtrim(4),RICLASSIFICAZIONE_DARE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    TString rav = rec.row(RICLASSIFICAZIONE_AVERE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					    rec.add(rav.rtrim(4),RICLASSIFICAZIONE_AVERE_SLD_MOVDETT);
 | 
				
			||||||
 | 
					  }// end if LF_ABSALDI
 | 
				
			||||||
 | 
					  if (logic_num == LF_TABCOM && rec.type() == TIPO_TABELLA_PERIODI)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    rec.add(SIGLA_TABELLA_PERIODI,SIGLA_TAB_PER);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					void TTrasferimento::converti(int logic_num)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TRelation *tr_relation=_trasfile->t_rec(logic_num)->relation();
 | 
				
			||||||
 | 
					  TRecord_text rec(_trasfile->t_rec(logic_num)->type());         //Istanzio un tipo record_text
 | 
				
			||||||
 | 
					  TCursor *cur=NULL;
 | 
				
			||||||
 | 
					  TAssoc_array progressivi;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  if (logic_num == LF_MOVDETT)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TVariable_rectype *vrec_rmov= new TVariable_rectype(LF_MOVDETT);
 | 
				
			||||||
 | 
					    vrec_rmov->add_field(new TVariable_field (ABMD_TIPO_TRACCIATO,get_ordinamento,5));
 | 
				
			||||||
 | 
					    //Costruisco la chiave del TSorted_cursor
 | 
				
			||||||
 | 
					    TToken_string exp(ABMD_TIPO_TRACCIATO);
 | 
				
			||||||
 | 
					    exp.add(ABMD_CODDITTA);
 | 
				
			||||||
 | 
					    exp.add(ABMD_ANNO);
 | 
				
			||||||
 | 
					    exp.add(ABMD_CODPDB);
 | 
				
			||||||
 | 
					    exp.add(ABMD_TIPOBIL);
 | 
				
			||||||
 | 
					    exp.add(ABMD_CODCBL);
 | 
				
			||||||
 | 
					    exp.add(ABMD_ID);
 | 
				
			||||||
 | 
					    cur = new TSorted_cursor(tr_relation,exp);
 | 
				
			||||||
 | 
					    cur->file().set_curr(vrec_rmov);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    cur = new TCursor(tr_relation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //Leggo il numero di records da convertire
 | 
				
			||||||
 | 
					  long items =cur->items();
 | 
				
			||||||
 | 
					  //Barra scorrevole di attesa
 | 
				
			||||||
 | 
					  TProgind idle(items,"Attendere: conversione in corso ...",TRUE,TRUE,60);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  //Ciclo principale di conversione
 | 
				
			||||||
 | 
					  for (*cur=0;cur->pos()<items;++*cur)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    idle.addstatus(1);
 | 
				
			||||||
 | 
					    if (logic_num == LF_MOVDETT)
 | 
				
			||||||
 | 
					    {//In questo caso la conversione è un po' particolare
 | 
				
			||||||
 | 
					      rec.set_type(tr_relation->lfile().get(ABMD_TIPO_TRACCIATO));  
 | 
				
			||||||
 | 
					      _trasfile->autoload(rec,*cur,&rec.type());
 | 
				
			||||||
 | 
					      if (mov_da_scrivere(tr_relation->lfile().curr()))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        trasferisci_albero(tr_relation->lfile().curr(),rec,progressivi);
 | 
				
			||||||
 | 
					        formatta(rec,tr_relation->lfile().curr(),logic_num);
 | 
				
			||||||
 | 
					        _trasfile->write(rec);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {//in tutti gli altri casi la conversione è semplice
 | 
				
			||||||
 | 
					      _trasfile->autoload(rec,logic_num);
 | 
				
			||||||
 | 
					      if (logic_num == LF_ABSALDI || logic_num == LF_TABCOM)
 | 
				
			||||||
 | 
					        formatta(rec,tr_relation->lfile().curr(),logic_num);
 | 
				
			||||||
 | 
					      _trasfile->write(rec);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  delete cur;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Handler per l'inserimento del percorso completo
 | 
				
			||||||
 | 
					bool TTrasferimento::inseriscipercorso(TMask_field& f, KEY k)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TString percorso;
 | 
				
			||||||
 | 
					  percorso=f.get();       //Leggo il contenuto del campo
 | 
				
			||||||
 | 
					  return TRUE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Funzione membro che esegue la conversione di trasferimento
 | 
				
			||||||
 | 
					bool TTrasferimento::menu(MENU_TAG)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TString config_file;                  //Nome del file di configurazione
 | 
				
			||||||
 | 
					  TMask msk("AB2100A");                 //Maschera dove si chiede di immettere il percorso del file sorgente
 | 
				
			||||||
 | 
					  TFilename percorso;                   //Contiene il percorso completo del file sorgente
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  msk.set_handler(F_PERCORSO, inseriscipercorso); //Assegno un handler al campo F_PERCORSO
 | 
				
			||||||
 | 
					                                        //inseriscipercorso controlla che il percorso (e il file) esista e sia corretto
 | 
				
			||||||
 | 
					  msk.set_handler(F_PERCORSO_UTENTE, inseriscipercorso);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  msk.hide(F_TIPO_BILANCIO);  //nascondo questo campo poichè non mi serve
 | 
				
			||||||
 | 
					  msk.hide(F_TESTO_TIPOBIL);  //nascondo questo campo poichè non mi serve
 | 
				
			||||||
 | 
					  //A questo punto il percorso e' corretto
 | 
				
			||||||
 | 
					  if (msk.run()== K_ENTER)     //Eseguo la maschera
 | 
				
			||||||
 | 
					  {     
 | 
				
			||||||
 | 
					    percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
 | 
				
			||||||
 | 
					    set_config_name(config_file,msk, percorso);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    _trasfile = new TABfile_text(percorso, config_file);  //Leggo il file di configurazione
 | 
				
			||||||
 | 
					    _trasfile->open(percorso,'w');                      //Apro il file di testo in rettura
 | 
				
			||||||
 | 
					    if (msk.get_bool(F_PIANO_CONTI)==TRUE)                //Controllo se si è scelto di convertire il piano dei conti
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      converti(LF_ABPCON);                                //Conversione
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (msk.get_bool(F_PERIODI_BILANCI)==TRUE)          //Scelta di convertire la tabella periodi bilanci
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      converti(LF_TABCOM);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (msk.get_bool(F_ANALISI)==TRUE)                  //scelta di cnverite la tabella tipi analisi di bilancio
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      converti(LF_ANALISI);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (msk.get_bool(F_MOVIMENTI)==TRUE)                  //scelta di cnverite la tabella tipi analisi di bilancio
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      converti(LF_MOVDETT);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (msk.get_bool(F_SALDI)==TRUE)                  //scelta di cnverite la tabella tipi analisi di bilancio
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      converti(LF_ABSALDI);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    _trasfile->close();
 | 
				
			||||||
 | 
					    delete _trasfile;
 | 
				
			||||||
 | 
					    //messaggio finale
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  message_box(" ... aggiornamento delle tabelle effettuato");
 | 
				
			||||||
 | 
					  } //end if (msk.run())
 | 
				
			||||||
 | 
					  return FALSE;
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ab2102(int argc, char **argv)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TTrasferimento a;
 | 
				
			||||||
 | 
					  a.run(argc,argv,"Trasferimento su file di testo");
 | 
				
			||||||
 | 
					  return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user