Corretta contropartita fantasma della prima riga git-svn-id: svn://10.65.10.50/trunk@1281 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			2100 lines
		
	
	
		
			63 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			2100 lines
		
	
	
		
			63 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
// Invio contabilita'
 | 
						|
 | 
						|
#include <math.h>  
 | 
						|
 | 
						|
#include <applicat.h>
 | 
						|
#include <mask.h>
 | 
						|
#include <relation.h>
 | 
						|
#include <tabutil.h>
 | 
						|
#include <utility.h>
 | 
						|
#include <config.h>
 | 
						|
#include <urldefid.h> 
 | 
						|
#include <prefix.h>
 | 
						|
#include <lffiles.h>  
 | 
						|
#include <progind.h>
 | 
						|
#include <nditte.h>  
 | 
						|
#include <mov.h>
 | 
						|
#include <rmov.h>
 | 
						|
#include <rmoviva.h> 
 | 
						|
#include <causali.h>
 | 
						|
#include <rcausali.h>
 | 
						|
#include <clifo.h>
 | 
						|
#include <pconti.h>
 | 
						|
#include <comuni.h>
 | 
						|
#include <occas.h>
 | 
						|
 | 
						|
#include "cg2900.h"   
 | 
						|
#include "cglib04.h"
 | 
						|
 | 
						|
HIDDEN      TString80 TEMP;
 | 
						|
 | 
						|
HIDDEN int date2esc(const TDate& d, int* prevesc = NULL);
 | 
						|
 | 
						|
class TInv_cont : public TApplication
 | 
						|
{ 
 | 
						|
  enum { BUFSIZE = 4096 };
 | 
						|
  
 | 
						|
  TTransfer_file _tras_file;
 | 
						|
  TProgind*      _prog;
 | 
						|
  
 | 
						|
  TString     _control_rec, _trasf, _std, _stato, _marker, _nome_simbolico;
 | 
						|
  TString     _files, _codcaus, _numdoc, _reg, _codpag, _tipodoc, _codcausm;
 | 
						|
  TString     _ocfpi, _ragsococc, _indocc, _capocc, _localocc, _provocc, _codvali;
 | 
						|
  bool        _esiste_ditta, _esiste_record;
 | 
						|
  long        _ditta, _protiva, _uprotiva, _codcf, _numrec, _tot_rec;           
 | 
						|
  long        _dim_tot, _dim_disk;
 | 
						|
  int         _num;                             
 | 
						|
  TDate       _data, _datadoc, _data74ter;
 | 
						|
  real        _corrlire, _cambioi, _corrval;
 | 
						|
 | 
						|
public:        
 | 
						|
  virtual bool create();
 | 
						|
  virtual bool destroy();
 | 
						|
  virtual bool menu(MENU_TAG m);         
 | 
						|
  
 | 
						|
  bool    main_loop();
 | 
						|
  
 | 
						|
  bool    esiste_tabella_studio();
 | 
						|
  bool    record_controllo();  
 | 
						|
  bool    esegui_controlli();
 | 
						|
  bool    leggi_trasfer();
 | 
						|
  bool    controlli();
 | 
						|
  bool    sub_controlli();
 | 
						|
  bool    tabella_ditta();
 | 
						|
  bool    controlla_stato_invio();
 | 
						|
  bool    numero_data();
 | 
						|
  void    leggi_record_controllo();          
 | 
						|
  void    codifica_ditta (TMask& m);
 | 
						|
  bool    testata_mov_PN (long numreg);
 | 
						|
  bool    testata_mov_IVA(long numreg);
 | 
						|
  void    cerca_occasionale();
 | 
						|
  void    cerca_comune_occas(const TString& com);
 | 
						|
 | 
						|
  void    crea_marker(TMask& m);
 | 
						|
  void    setta_parametri_record(TMask& m,const TString& flag);
 | 
						|
  void    setta_tabella_studio(TMask& m, bool flag_ditta = TRUE);
 | 
						|
  void    setta_tabella_ditta(TMask& m, const char* flag, bool comp = TRUE);
 | 
						|
  void    crea_record_controllo(TMask& m);
 | 
						|
  
 | 
						|
  bool    invio_contabilita(TMask& m);
 | 
						|
  bool    invio_tab_cau(TString& key,TMask& m);
 | 
						|
  bool    invio_clifo  (TString& key,TMask& m);
 | 
						|
  bool    invio_pcon   (TString& key,TMask& m);
 | 
						|
  bool    invio_mov_PN (TString& key,TMask& m);
 | 
						|
  bool    invio_mov_IVA(TString& key,TMask& m);    
 | 
						|
 | 
						|
  void    aggiorna_marker(TString& token, int pos);
 | 
						|
  void    calcola_totale_record();
 | 
						|
  
 | 
						|
  const char* converti (TString& data_AS400);
 | 
						|
  const char* riconverti (TString& data_PC);
 | 
						|
  const char* cerca_provincia(const TString& comcf); 
 | 
						|
  
 | 
						|
  static bool setta_maschera_hnd(TMask_field& f, KEY k);
 | 
						|
 | 
						|
  int   calcola_numero_dischi(TMask& m);
 | 
						|
  FILE* chiedi_disco(const char* name, int disk, char floppy, bool lettura);
 | 
						|
  long  determina_dimensione(FILE* f);                          
 | 
						|
  bool  scrivi_disco(char floppy, int disk, const char* work, FILE* i, TProgind& w);
 | 
						|
  
 | 
						|
  TInv_cont() {};
 | 
						|
};                                      
 | 
						|
 | 
						|
HIDDEN TInv_cont& app() { return (TInv_cont &) main_app(); }
 | 
						|
 | 
						|
FILE* TInv_cont::chiedi_disco(const char* name, int disk, char floppy, bool lettura) 
 | 
						|
{ 
 | 
						|
  message_box("Inserire il disco %d nel drive %c:", disk, floppy);
 | 
						|
 | 
						|
  //  name.ext(format("%03d", disk));
 | 
						|
  
 | 
						|
  FILE* f = NULL;                                                           
 | 
						|
  bool retry = TRUE;
 | 
						|
  while (retry)
 | 
						|
  {               
 | 
						|
    f = fopen(name, lettura ? "rb" : "wb");
 | 
						|
    if (f == NULL) 
 | 
						|
      retry = yesno_box("Il file %s non e' accessibile: riprovare?", (const char*)name);
 | 
						|
    else
 | 
						|
    {
 | 
						|
      retry = FALSE; 
 | 
						|
      fclose(f);
 | 
						|
    }
 | 
						|
  }  
 | 
						|
 | 
						|
  return f;
 | 
						|
} 
 | 
						|
 | 
						|
long TInv_cont::determina_dimensione(FILE* f) 
 | 
						|
{     
 | 
						|
  CHECK(f, "Can't measure NULL file");
 | 
						|
  fseek(f, 0, SEEK_END);
 | 
						|
  const long s = ftell(f);
 | 
						|
  fseek(f, 0, SEEK_SET);
 | 
						|
  return s;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::scrivi_disco(char floppy, int disk, const char* work, 
 | 
						|
                             FILE* i, TProgind& w) 
 | 
						|
{               
 | 
						|
  //  const TFilename from(filename);          // File da splittare
 | 
						|
 | 
						|
  //  TFilename work;
 | 
						|
  //  work << floppy << ":/" << from.name();   // File su dischetto
 | 
						|
 | 
						|
  chiedi_disco(work, disk, floppy, FALSE);                                   
 | 
						|
  
 | 
						|
  TString str;
 | 
						|
  str.format("%02d", disk);
 | 
						|
  aggiorna_marker(str,31);                 // Aggiorna il num. progr. disco su marker
 | 
						|
  
 | 
						|
  TString path_m;
 | 
						|
  path_m << floppy << ":\\marker";           
 | 
						|
 | 
						|
  TString path_t;
 | 
						|
  path_t << floppy << ":\\trasfer";
 | 
						|
  
 | 
						|
  fcopy(_marker,path_m);                    // Copia il marker su disco
 | 
						|
 | 
						|
  //FILE* i = fopen(from, "rb");
 | 
						|
  FILE* o = fopen(path_t, "wb");
 | 
						|
  
 | 
						|
  //if (i == NULL) return error_box("Impossibile aprire il file '%s'", from);
 | 
						|
  
 | 
						|
  //TProgind w(_dim_disk, "Trasferimento su dischetti in corso... Prego attendere", TRUE, TRUE, 40);
 | 
						|
  
 | 
						|
  TString buffer(BUFSIZE);
 | 
						|
  
 | 
						|
  long tot_scritti = BUFSIZE;
 | 
						|
  
 | 
						|
  while (tot_scritti <= _dim_disk)
 | 
						|
  {
 | 
						|
    const word letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i);
 | 
						|
    
 | 
						|
    long scritti = fwrite((char*)(const char*)buffer, letti, 1, o);
 | 
						|
    
 | 
						|
    tot_scritti += letti;
 | 
						|
    
 | 
						|
    if (letti < BUFSIZE) break;
 | 
						|
    
 | 
						|
    w.addstatus(letti);
 | 
						|
  }
 | 
						|
  
 | 
						|
  //fclose(i);
 | 
						|
  fclose(o);
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::main_loop()
 | 
						|
{                     
 | 
						|
  TString str;
 | 
						|
  bool ripartenza = FALSE;
 | 
						|
  
 | 
						|
  if (!esiste_tabella_studio()) return FALSE;
 | 
						|
  
 | 
						|
  if (!esegui_controlli()) return FALSE;
 | 
						|
  
 | 
						|
  TMask msk ("cg2900a");
 | 
						|
  KEY tasto;
 | 
						|
  
 | 
						|
  if (_ditta != 0)       
 | 
						|
  {
 | 
						|
    msk.set(F_DITTAINV, _ditta);
 | 
						|
    msk.disable(F_DITTAINV);
 | 
						|
    codifica_ditta(msk);
 | 
						|
    msk.set(F_NUMULINV, _num);
 | 
						|
    msk.set(F_DATAULIN, _data.string());
 | 
						|
    msk.set(F_STATO,    _stato);
 | 
						|
    
 | 
						|
    TString uselab = _tras_file.ult_file();
 | 
						|
    TString chiave = _tras_file.key();
 | 
						|
    msk.set(F_USELAB,   uselab);
 | 
						|
    msk.set(F_CHIAVE,   chiave);
 | 
						|
    msk.set(F_DATALIM,  _data.string());
 | 
						|
    msk.disable(F_DATALIM);
 | 
						|
    
 | 
						|
    ripartenza = TRUE;
 | 
						|
  }
 | 
						|
  
 | 
						|
  msk.disable(F_NUMULINV);
 | 
						|
  msk.disable(F_DATAULIN);
 | 
						|
  msk.disable(F_STATO);
 | 
						|
  msk.disable(F_USELAB);
 | 
						|
  msk.disable(F_CHIAVE);
 | 
						|
 | 
						|
  if (!ripartenza)
 | 
						|
    msk.set_handler(F_DITTAINV, setta_maschera_hnd);
 | 
						|
  
 | 
						|
  tasto = msk.run();
 | 
						|
  
 | 
						|
  if (tasto != K_ENTER) return FALSE;
 | 
						|
  
 | 
						|
  if (!ripartenza)
 | 
						|
  {                                
 | 
						|
    crea_marker(msk);                 //Crea il record con le informazioni sul marker                 
 | 
						|
    setta_parametri_record(msk,"F");  //Aggiorna parametri contabili ditta           
 | 
						|
    setta_tabella_studio(msk);        //Aggiorna la tabella studio per invio
 | 
						|
    setta_tabella_ditta(msk,"F");     //Aggiorna la tabella ditta per invio
 | 
						|
    crea_record_controllo(msk);       //Crea il record di controllo sul file trasfer
 | 
						|
  }
 | 
						|
  
 | 
						|
  if (!invio_contabilita(msk))
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  calcola_totale_record();
 | 
						|
  str.format("%06ld", _tot_rec);
 | 
						|
  aggiorna_marker(str,23);
 | 
						|
  
 | 
						|
  TMask mask ("cg2900b");
 | 
						|
  KEY k;
 | 
						|
  
 | 
						|
  k = mask.run();
 | 
						|
  
 | 
						|
  if (k == K_ENTER)
 | 
						|
  {
 | 
						|
    int  num_disk = calcola_numero_dischi(mask);
 | 
						|
    char floppy   = mask.get(F_FLOPPY)[0];
 | 
						|
    
 | 
						|
    str.format("%02d", num_disk);
 | 
						|
    aggiorna_marker(str,29);
 | 
						|
 | 
						|
    const TFilename from(_trasf);          // File da splittare
 | 
						|
 | 
						|
    TFilename work;
 | 
						|
    work << floppy << ":/" << from.name();   // File su dischetto
 | 
						|
    
 | 
						|
    FILE* i = fopen(from, "rb");                                             
 | 
						|
    
 | 
						|
    if (i == NULL) return error_box("Impossibile aprire il file '%s'", from);
 | 
						|
    
 | 
						|
    TProgind w(_dim_tot, "Trasferimento su dischetti in corso... Prego attendere", TRUE, TRUE, 60);
 | 
						|
    
 | 
						|
    for (int j = 0; j < num_disk; j++)
 | 
						|
    {
 | 
						|
      scrivi_disco(floppy,j+1,work,i,w);
 | 
						|
    }
 | 
						|
    fclose(i);
 | 
						|
 | 
						|
    setta_tabella_studio(msk,FALSE);    //Aggiorna la tabella studio per invio
 | 
						|
    setta_tabella_ditta(msk," ",FALSE); //Aggiorna la tabella ditta per invio
 | 
						|
    setta_parametri_record(msk," ");    //Aggiorna parametri contabili ditta           
 | 
						|
    
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
    leggi_record_controllo();
 | 
						|
    TString record(256);  
 | 
						|
    record.format("%-256s",(const char*) record);
 | 
						|
    _control_rec.overwrite(record,0);
 | 
						|
    _tras_file.write_control_rec(_control_rec,256);
 | 
						|
    
 | 
						|
    fremove(_marker);
 | 
						|
    fremove(_trasf);
 | 
						|
  }
 | 
						|
  
 | 
						|
  return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
int TInv_cont::calcola_numero_dischi(TMask& msk)
 | 
						|
{        
 | 
						|
  int numdisc = 0;
 | 
						|
  
 | 
						|
  FILE* t = fopen(_trasf, "rb");
 | 
						|
  if (t == NULL) return error_box("Impossibile aprire il file '%s'", _trasf);
 | 
						|
  
 | 
						|
  long dim_t = determina_dimensione(t);  //Determina la dimensione del trasfer
 | 
						|
  fclose(t);
 | 
						|
  
 | 
						|
  FILE* m = fopen(_marker, "rb");
 | 
						|
  if (m == NULL) return error_box("Impossibile aprire il file '%s'", _marker);
 | 
						|
  
 | 
						|
  long dim_m = determina_dimensione(m);  // Determina la dimensione del marker
 | 
						|
  fclose(m);
 | 
						|
  
 | 
						|
  _dim_tot = dim_t + dim_m;         // Determina la dimensione totale           
 | 
						|
  
 | 
						|
  int  item = msk.get_int(F_DIM);       
 | 
						|
  
 | 
						|
  switch (item)
 | 
						|
  {
 | 
						|
  case 1 :
 | 
						|
    _dim_disk = 1400000L;
 | 
						|
    break;
 | 
						|
  case 2 :
 | 
						|
    _dim_disk = 1200000L;
 | 
						|
    break;
 | 
						|
  case 3 :
 | 
						|
    _dim_disk = 720000L;
 | 
						|
    break;
 | 
						|
  case 4 :
 | 
						|
    _dim_disk = 360000L;
 | 
						|
    break;            
 | 
						|
    default :
 | 
						|
    break;  
 | 
						|
  };
 | 
						|
  
 | 
						|
  if (_dim_tot < _dim_disk)
 | 
						|
    numdisc = 1;
 | 
						|
  else
 | 
						|
  {  
 | 
						|
    //double dischi = _dim_tot / _dim_disk;
 | 
						|
    //numdisc = (int)ceil(dischi);
 | 
						|
    numdisc = int(_dim_tot / _dim_disk);
 | 
						|
    if ( (_dim_tot % _dim_disk) != 0)
 | 
						|
      numdisc += 1;
 | 
						|
  }
 | 
						|
  
 | 
						|
  return numdisc;
 | 
						|
}
 | 
						|
 | 
						|
HIDDEN int date2esc(const TDate& d, int* prevesc)
 | 
						|
{                   
 | 
						|
  if (prevesc) *prevesc = 0;
 | 
						|
  TTable esc("ESC");
 | 
						|
  for (int err = esc.first(); err == NOERR; err = esc.next())
 | 
						|
  {
 | 
						|
    const TDate ia(esc.get("D0"));   // Data inizio esercizio
 | 
						|
    const TDate fa(esc.get("D1"));   // Data fine esercizio
 | 
						|
    const anno = esc.get_int("CODTAB");  
 | 
						|
    if (d >= ia && d <= fa)
 | 
						|
      return anno;
 | 
						|
    if (prevesc) *prevesc = anno; 
 | 
						|
  } 
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::create()
 | 
						|
{
 | 
						|
  TApplication::create();
 | 
						|
 | 
						|
  dispatch_e_menu (BAR_ITEM(1));
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::destroy()
 | 
						|
{ 
 | 
						|
  return TApplication::destroy();
 | 
						|
}                                
 | 
						|
 | 
						|
void TInv_cont::leggi_record_controllo()
 | 
						|
{
 | 
						|
  _tras_file.read_control_rec();
 | 
						|
  _control_rec = _tras_file.record();
 | 
						|
}
 | 
						|
 | 
						|
const char* TInv_cont::converti (TString& data_AS400)
 | 
						|
{
 | 
						|
  TEMP = data_AS400.mid(4,2);
 | 
						|
  TEMP << "-" <<data_AS400.mid(2,2);
 | 
						|
  TEMP << "-" <<data_AS400.mid(0,2);
 | 
						|
  return TEMP;
 | 
						|
}
 | 
						|
 | 
						|
const char* TInv_cont::riconverti (TString& data_PC)
 | 
						|
{
 | 
						|
  TEMP = data_PC.mid(8,2);
 | 
						|
  TEMP << data_PC.mid(3,2);
 | 
						|
  TEMP << data_PC.mid(0,2);
 | 
						|
  return TEMP;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::esiste_tabella_studio()
 | 
						|
{
 | 
						|
  TTable ins ("%INS");
 | 
						|
  
 | 
						|
  ins.zero();        
 | 
						|
  
 | 
						|
  if (ins.first() == NOERR)
 | 
						|
  {
 | 
						|
    if (ins.empty())
 | 
						|
      return error_box("Codice STUDIO NON ATTIVATO in tabella invii");
 | 
						|
    else
 | 
						|
    { 
 | 
						|
      _nome_simbolico = ins.get("CODTAB");
 | 
						|
      long ditta = ins.get_long("I0");
 | 
						|
      if (ditta != 0)
 | 
						|
      {
 | 
						|
        _esiste_ditta = TRUE;
 | 
						|
        _ditta = ditta;
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {             
 | 
						|
        _esiste_ditta = FALSE;
 | 
						|
        _ditta = 0;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  else
 | 
						|
    return error_box("Codice STUDIO NON ATTIVATO in tabella invii");  
 | 
						|
  
 | 
						|
  return TRUE;  
 | 
						|
}  
 | 
						|
 | 
						|
bool TInv_cont::leggi_trasfer()
 | 
						|
{ 
 | 
						|
  _trasf = ""; 
 | 
						|
  _trasf = firm2dir(0);
 | 
						|
  _trasf << "\\trasfer";
 | 
						|
  
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  
 | 
						|
  if (_tras_file.exist())
 | 
						|
  {  
 | 
						|
    if (_tras_file.read_control_rec())
 | 
						|
    {
 | 
						|
      _control_rec = _tras_file.record();
 | 
						|
      if (!record_controllo())
 | 
						|
        return FALSE;
 | 
						|
    }
 | 
						|
    else
 | 
						|
      return FALSE;
 | 
						|
  } 
 | 
						|
  else
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  return TRUE; 
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::record_controllo()
 | 
						|
{
 | 
						|
  TString tiporecord = _control_rec.sub(0,2);
 | 
						|
  
 | 
						|
  if (tiporecord != " 1")
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::esegui_controlli()
 | 
						|
{  
 | 
						|
  _esiste_record = leggi_trasfer();
 | 
						|
  
 | 
						|
  if (!controlli()) return FALSE;
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::setta_parametri_record(TMask& m,const TString& flag)
 | 
						|
{ 
 | 
						|
  long ditta = m.get_long(F_DITTAINV);
 | 
						|
  set_firm(ditta);
 | 
						|
  
 | 
						|
  TConfig conf (CONFIG_DITTA);
 | 
						|
  conf.set("FlStInv", flag);
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::controlli()
 | 
						|
{ 
 | 
						|
  if (!_esiste_ditta && !_esiste_record) return TRUE; //Mi trovo in una condizione normale
 | 
						|
  
 | 
						|
  if (_esiste_ditta && !_esiste_record)
 | 
						|
    return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto");
 | 
						|
  
 | 
						|
  if (!_esiste_ditta && _esiste_record)
 | 
						|
    return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto");
 | 
						|
  
 | 
						|
  if (_esiste_ditta && _esiste_record)
 | 
						|
  {
 | 
						|
    if (!sub_controlli())
 | 
						|
      return error_box("Rilevato stato di ripartenza con dati contradditori: programma interrotto");
 | 
						|
  }
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}   
 | 
						|
 | 
						|
bool TInv_cont::sub_controlli()
 | 
						|
{
 | 
						|
  long ditta_trasfer = atol(_control_rec.sub(25,29));
 | 
						|
  
 | 
						|
  if (_ditta == ditta_trasfer)
 | 
						|
  {
 | 
						|
    if (!prefix().exist(_ditta))
 | 
						|
      return FALSE;
 | 
						|
    
 | 
						|
    if (!tabella_ditta())
 | 
						|
      return FALSE;
 | 
						|
  }          
 | 
						|
  else
 | 
						|
    return FALSE;
 | 
						|
 | 
						|
  if (!controlla_stato_invio())  
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  if (!numero_data())
 | 
						|
    return FALSE;    
 | 
						|
  
 | 
						|
  return TRUE;  
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::tabella_ditta()
 | 
						|
{
 | 
						|
  TTable ind ("%IND");
 | 
						|
  TString dep;
 | 
						|
  
 | 
						|
  dep.format("%05d", _ditta);
 | 
						|
  
 | 
						|
  ind.zero();
 | 
						|
  ind.put("CODTAB", dep);
 | 
						|
  if (ind.read() == NOERR) 
 | 
						|
  {
 | 
						|
    _stato = ind.get("S6");
 | 
						|
    _num   = ind.get_int("I0");
 | 
						|
    _data  = ind.get_date("D0");
 | 
						|
    
 | 
						|
    _files = "";
 | 
						|
    if (ind.get_bool("B0"))
 | 
						|
      _files << "W";
 | 
						|
    
 | 
						|
    if (ind.get_bool("B1"))
 | 
						|
      _files << "A";
 | 
						|
    
 | 
						|
    if (ind.get_bool("B2"))
 | 
						|
      _files << "P";        
 | 
						|
    
 | 
						|
    if (ind.get_bool("B3"))
 | 
						|
      _files << "Z";
 | 
						|
    
 | 
						|
    if (ind.get_bool("B4"))
 | 
						|
      _files << "U";
 | 
						|
    
 | 
						|
    if (ind.get_bool("B5"))
 | 
						|
      _files << "B";
 | 
						|
    
 | 
						|
    return TRUE;
 | 
						|
  }  
 | 
						|
  
 | 
						|
  return FALSE;  
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::controlla_stato_invio()
 | 
						|
{ 
 | 
						|
  set_firm(_ditta);
 | 
						|
  
 | 
						|
  TConfig conf(CONFIG_DITTA);           
 | 
						|
  _std = conf.get("FlStInv");
 | 
						|
  
 | 
						|
  if (_stato != _std)
 | 
						|
    return FALSE;
 | 
						|
  else
 | 
						|
  {                  
 | 
						|
    TString uselab = _tras_file.ult_file();
 | 
						|
    
 | 
						|
    if (_stato == "D" && uselab != " ")
 | 
						|
      return FALSE;
 | 
						|
  }                
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::numero_data()
 | 
						|
{                                        
 | 
						|
  int     num  = _tras_file.nultras();
 | 
						|
  TString str  = _tras_file.dataultras();
 | 
						|
  TDate data (str);
 | 
						|
  
 | 
						|
  if (_num != num || data != _data)
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::codifica_ditta(TMask& m)
 | 
						|
{
 | 
						|
  TLocalisamfile ditte (LF_NDITTE);
 | 
						|
  
 | 
						|
  long ditta = m.get_long(F_DITTAINV);
 | 
						|
  
 | 
						|
  ditte.setkey(1);
 | 
						|
  ditte.zero();
 | 
						|
  ditte.put(NDT_CODDITTA, ditta);
 | 
						|
  if (ditte.read() == NOERR)
 | 
						|
  {
 | 
						|
    TString ragsoc = ditte.get(NDT_RAGSOC);
 | 
						|
    m.set(F_RAGSOC, ragsoc);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::setta_maschera_hnd(TMask_field& f, KEY k)
 | 
						|
{
 | 
						|
  if ( (k == K_TAB || k == K_ENTER) && f.mask().is_running())
 | 
						|
  {            
 | 
						|
    app()._ditta = f.mask().get_long(F_DITTAINV);
 | 
						|
    if (!app().tabella_ditta())
 | 
						|
      return error_box("La ditta indicata non e' presente sulla tabella ditta per invio");
 | 
						|
    
 | 
						|
    if (!prefix().exist(app()._ditta))
 | 
						|
      return error_box("La ditta indicata non e' abilitata alla contabilita'");
 | 
						|
 | 
						|
    if (app()._stato != "")
 | 
						|
      return error_box("Lo stato ultimo trasferimento non puo' essere significativo");
 | 
						|
    
 | 
						|
    f.mask().set(F_DITTAINV, app()._ditta);
 | 
						|
    app().codifica_ditta(f.mask());
 | 
						|
    f.mask().set(F_NUMULINV, app()._num);
 | 
						|
    f.mask().set(F_DATAULIN, app()._data.string());
 | 
						|
    f.mask().set(F_STATO,    app()._stato);    
 | 
						|
  }
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::crea_marker(TMask& m)
 | 
						|
{   
 | 
						|
  TString str;
 | 
						|
  
 | 
						|
  _marker = ""; 
 | 
						|
  _marker = firm2dir(0);
 | 
						|
  _marker << "\\marker";
 | 
						|
  
 | 
						|
  FILE* i;
 | 
						|
 | 
						|
  const word size = 64;
 | 
						|
  TString buffer(size); 
 | 
						|
  buffer.spaces();
 | 
						|
  
 | 
						|
  if ( (i = fopen(_marker,"w+t")) != NULL)
 | 
						|
  { 
 | 
						|
    str = format("%-10s", (const char*) _nome_simbolico);
 | 
						|
    buffer.overwrite(str,0);
 | 
						|
    long ditta = m.get_long(F_DITTAINV);
 | 
						|
    str = format("%04d", ditta);
 | 
						|
    buffer.overwrite(str,10);
 | 
						|
    int num = m.get_int(F_NUMULINV);
 | 
						|
    num++;
 | 
						|
    str = format("%03d", num);
 | 
						|
    buffer.overwrite(str,14);
 | 
						|
    TString data (m.get(F_DATALIM));
 | 
						|
    str = riconverti(data);
 | 
						|
    buffer.overwrite(str,17);               
 | 
						|
    
 | 
						|
    const word scritti = fwrite((char*)(const char*)buffer,sizeof(char),size,i);
 | 
						|
    
 | 
						|
    fclose(i);
 | 
						|
  }    
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::aggiorna_marker(TString& token, int pos)
 | 
						|
{   
 | 
						|
  TString str;
 | 
						|
  
 | 
						|
  _marker = ""; 
 | 
						|
  _marker = firm2dir(0);
 | 
						|
  _marker << "\\marker";
 | 
						|
  
 | 
						|
  FILE* i;
 | 
						|
 | 
						|
  const word size = 64;
 | 
						|
  TString buffer(size); 
 | 
						|
  //buffer.spaces();
 | 
						|
  
 | 
						|
  if ( (i = fopen(_marker,"r+t")) != NULL)
 | 
						|
  { 
 | 
						|
    const word letti = fread((char*)(const char*)buffer,sizeof(char),size,i);
 | 
						|
    buffer.overwrite(token,pos);
 | 
						|
    fseek(i, 0L, SEEK_SET);
 | 
						|
    const word scritti = fwrite((char*)(const char*)buffer,sizeof(char),size,i);
 | 
						|
    
 | 
						|
    fclose(i);
 | 
						|
  }    
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::calcola_totale_record()
 | 
						|
{
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  
 | 
						|
  TString sigle = _control_rec.sub(38,47);
 | 
						|
  sigle.trim();
 | 
						|
  
 | 
						|
  _tot_rec = 0;
 | 
						|
  
 | 
						|
  for (int i = 0; i < sigle.len(); i++)
 | 
						|
  {
 | 
						|
    long tot_rec = atol(_control_rec.mid((i * 6) + 47,6));
 | 
						|
    _tot_rec += tot_rec;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::setta_tabella_studio(TMask& m,bool flag_ditta)
 | 
						|
{
 | 
						|
  TTable ins ("%INS");
 | 
						|
  TString dep;
 | 
						|
  long ditta;
 | 
						|
  
 | 
						|
  if (flag_ditta)
 | 
						|
    ditta = m.get_long(F_DITTAINV);
 | 
						|
  else
 | 
						|
    ditta = 0;
 | 
						|
  
 | 
						|
  dep.format("%-10s", (const char*) _nome_simbolico);
 | 
						|
  
 | 
						|
  ins.zero();
 | 
						|
  ins.put("CODTAB", dep);
 | 
						|
  if (ins.read() == NOERR)
 | 
						|
  {
 | 
						|
    ins.put("I0", ditta);
 | 
						|
    ins.rewrite();
 | 
						|
  }
 | 
						|
  else
 | 
						|
    warning_box("Tabella studio per invio NON AGGIORNATA");
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::setta_tabella_ditta(TMask& m,const char* flag, bool comp)
 | 
						|
{
 | 
						|
  TTable ind ("%IND");
 | 
						|
  TString dep;
 | 
						|
  
 | 
						|
  long ditta = m.get_long(F_DITTAINV);
 | 
						|
  
 | 
						|
  dep.format("%05d", ditta);
 | 
						|
  
 | 
						|
  ind.zero();
 | 
						|
  ind.put("CODTAB", dep);
 | 
						|
  if (ind.read() == NOERR) 
 | 
						|
  {                    
 | 
						|
    int num = m.get_int(F_NUMULINV);
 | 
						|
    num++;
 | 
						|
    TDate data (m.get(F_DATALIM)); 
 | 
						|
    
 | 
						|
    ind.put("S6", flag);                                
 | 
						|
    if (comp)
 | 
						|
    {
 | 
						|
      ind.put("I0", (long)num);
 | 
						|
      ind.put("D0", data);
 | 
						|
    }
 | 
						|
    ind.rewrite();
 | 
						|
  }  
 | 
						|
  else
 | 
						|
    warning_box("Tabella ditta per invio NON AGGIORNATA");  
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::crea_record_controllo(TMask& m)
 | 
						|
{            
 | 
						|
  int size = 256;
 | 
						|
  TString buffer(256);
 | 
						|
  TString str;
 | 
						|
  
 | 
						|
  if (_tras_file.exist())
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
  else 
 | 
						|
  {
 | 
						|
    _tras_file.open(_trasf,TRUE);   //Metto il parametro TRUE (che di default e' FALSE), perche' voglio creare un file che non e' ancore esistente
 | 
						|
    
 | 
						|
    buffer.spaces();   
 | 
						|
    buffer.overwrite(" 1",0);                             //Tipo record
 | 
						|
    
 | 
						|
    str = format("%-10s", (const char*) _nome_simbolico);
 | 
						|
    buffer.overwrite(str,15);                             //Nome studio
 | 
						|
    
 | 
						|
    long ditta = m.get_long(F_DITTAINV);
 | 
						|
    str = format("%04d", ditta);
 | 
						|
    buffer.overwrite(str,25);                             //Ditta inviante
 | 
						|
    
 | 
						|
    int num = m.get_int(F_NUMULINV);
 | 
						|
    num++;
 | 
						|
    str = format("%03d", num);
 | 
						|
    buffer.overwrite(str,29);                             //Numero progr. invio
 | 
						|
    
 | 
						|
    TString data (m.get(F_DATALIM));
 | 
						|
    str = riconverti(data);
 | 
						|
    buffer.overwrite(str,32);                             //Data limite invio
 | 
						|
    
 | 
						|
    str = format("%-9s", (const char*) _files);
 | 
						|
    buffer.overwrite(str,38);
 | 
						|
    
 | 
						|
    str = _files.sub(0,1);
 | 
						|
    buffer.overwrite(str,240);
 | 
						|
    
 | 
						|
    if (!_tras_file.write_control_rec(buffer, size))   
 | 
						|
      warning_box("Il record di controllo del file trasfer non e' stato aggiornato correttamente");
 | 
						|
  }  
 | 
						|
  _tras_file.close();  
 | 
						|
} 
 | 
						|
 | 
						|
const char* TInv_cont::cerca_provincia(const TString& comcf)
 | 
						|
{
 | 
						|
  TLocalisamfile comuni(LF_COMUNI);
 | 
						|
  
 | 
						|
  comuni.setkey(1);
 | 
						|
  comuni.zero();
 | 
						|
  comuni.put(COM_COM, comcf);
 | 
						|
  if (comuni.read() == NOERR)
 | 
						|
    TEMP = comuni.get(COM_PROVCOM);
 | 
						|
  else
 | 
						|
    TEMP = "";
 | 
						|
 | 
						|
  return TEMP;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::invio_contabilita(TMask& m)
 | 
						|
{
 | 
						|
  char    uselab;
 | 
						|
  TString record(256),key,nrec;
 | 
						|
  int     posiz,i;
 | 
						|
  char    sigla;               
 | 
						|
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  
 | 
						|
  leggi_record_controllo();
 | 
						|
  
 | 
						|
  uselab = (_tras_file.ult_file())[0];
 | 
						|
  
 | 
						|
  if (uselab == ' ')            //Significa che sono in caso di ripartenza ma ho
 | 
						|
    return TRUE;                //gia' trasferito tutti gli archivi e devo solo fare la copia su dischi
 | 
						|
  
 | 
						|
  posiz  = _files.find(uselab); //Ritorna la posizione della sigla all'interno della schiera
 | 
						|
  key    = _tras_file.key(); 
 | 
						|
  key.trim();                 
 | 
						|
  nrec   = _control_rec.sub(47,101);
 | 
						|
  
 | 
						|
  for (i = posiz; i < _files.len();i++)
 | 
						|
  {                 
 | 
						|
    sigla    = _files[i];
 | 
						|
    _numrec  = atol(nrec.mid(i * 6,6));
 | 
						|
    
 | 
						|
    switch (sigla)        
 | 
						|
    {
 | 
						|
    case 'W': 
 | 
						|
      if (!invio_tab_cau(key,m))
 | 
						|
        return FALSE;
 | 
						|
      break;
 | 
						|
      
 | 
						|
    case 'A':
 | 
						|
      if (!invio_clifo(key,m))
 | 
						|
        return FALSE;
 | 
						|
      break;
 | 
						|
      
 | 
						|
    case 'P':
 | 
						|
      if (!invio_pcon(key,m))
 | 
						|
        return FALSE;
 | 
						|
      break;
 | 
						|
      
 | 
						|
    case 'Z':
 | 
						|
      if (!invio_mov_PN(key,m))
 | 
						|
        return FALSE;
 | 
						|
      break;
 | 
						|
      
 | 
						|
    case 'U':
 | 
						|
      if (!invio_mov_IVA(key,m))
 | 
						|
        return FALSE;
 | 
						|
      break;
 | 
						|
      
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
    };             
 | 
						|
    key = "";
 | 
						|
  }                    
 | 
						|
 | 
						|
  // Finito di trasferire tutti gli archivi pulisco la sigla ultimo file da elaborare  
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  _control_rec.overwrite(" ",240);
 | 
						|
  _tras_file.write_control_rec(_control_rec,256);
 | 
						|
  _tras_file.close();
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::invio_tab_cau(TString& key,TMask& m)
 | 
						|
{                      
 | 
						|
  int size = 256;
 | 
						|
  TString record(size);
 | 
						|
  TString cod;
 | 
						|
  TLocalisamfile cau (LF_CAUSALI);
 | 
						|
 | 
						|
  long cicli = cau.items();
 | 
						|
  cicli -= _numrec;
 | 
						|
  _prog = new TProgind(cicli,"Invio tabella causali in corso... Prego attendere.",FALSE);
 | 
						|
  
 | 
						|
  if (key == "")                  
 | 
						|
    cau.first();
 | 
						|
  else           
 | 
						|
  {
 | 
						|
    cod = key.mid(2,3);
 | 
						|
    cau.setkey(1);
 | 
						|
    cau.zero();
 | 
						|
    cau.put(CAU_CODCAUS, cod);
 | 
						|
    cau.read();
 | 
						|
  }
 | 
						|
  
 | 
						|
  for (; !cau.eof(); cau.next())
 | 
						|
  { 
 | 
						|
    TString str;
 | 
						|
    
 | 
						|
    _prog->addstatus(1);
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
    
 | 
						|
    record.spaces();                                                     
 | 
						|
    
 | 
						|
    // Se trovo un codice causale alfanumerico l'invio deve essere interrotto
 | 
						|
    const char* codcau = cau.get(CAU_CODCAUS);
 | 
						|
    if (!real::is_natural(codcau))
 | 
						|
      return error_box("Rilevato un codice causale alfanumerico nella causale %03s: impossibile proseguire",codcau);
 | 
						|
    str.format("%03s", codcau);
 | 
						|
    record.overwrite("W1",0);                    //Tipo record
 | 
						|
    record.overwrite(str,2);                     //Codice causale
 | 
						|
    
 | 
						|
    
 | 
						|
    //Salvataggio della sigla e della chiave sul record di controllo del file trasfer
 | 
						|
    leggi_record_controllo();
 | 
						|
    TString chiave,app;
 | 
						|
    chiave.format("%2s%03s", (const char*) "W1", codcau);
 | 
						|
    app.format("%-15s", (const char*) chiave);
 | 
						|
    _control_rec.overwrite("W",240);
 | 
						|
    _control_rec.overwrite(app,241);
 | 
						|
    //_tras_file.write_control_rec(_control_rec,size);
 | 
						|
    //_tras_file.close();
 | 
						|
    
 | 
						|
    TString descr = cau.get(CAU_DESCR);
 | 
						|
    descr.format("%-.20s", (const char*) descr); 
 | 
						|
    record.overwrite(descr,15);                  //Descrizione
 | 
						|
    
 | 
						|
    TString tipodoc = cau.get(CAU_TIPODOC);
 | 
						|
    record.overwrite(tipodoc,35);                //Tipo documento
 | 
						|
    
 | 
						|
    //Se trovo un registro IVA con lunghezza maggiore di 1 l'invio deve essere interrotto
 | 
						|
    TString reg = cau.get(CAU_REG);
 | 
						|
    if (reg.len() > 1)
 | 
						|
      return error_box("Rilevato un registro IVA con lunghezza superiore a 1 nella causale %03s: impossibile proseguire", codcau);
 | 
						|
    record.overwrite(reg,37);                    //Registro IVA
 | 
						|
    
 | 
						|
    bool alleg = cau.get_bool(CAU_ALLEG);
 | 
						|
    if (alleg)
 | 
						|
      record.overwrite("X",38);
 | 
						|
    else                                         //Flag esclusione tipo documento da allegato
 | 
						|
      record.overwrite(" ",38);
 | 
						|
    
 | 
						|
    int m770 = atoi(cau.get(CAU_M770));
 | 
						|
    str = format("%1d", m770);  
 | 
						|
    record.overwrite(str,39);                    //Collegamento modello 770
 | 
						|
    
 | 
						|
    TString cespiti = cau.get(CAU_COLLCESP);
 | 
						|
    record.overwrite(cespiti,40);                //Collegamento cespiti
 | 
						|
    
 | 
						|
    bool numdoc = cau.get_bool(CAU_NUMDOC);
 | 
						|
    if (numdoc)
 | 
						|
      record.overwrite("1",206);
 | 
						|
    else                                         //Flag immissione numero documento
 | 
						|
      record.overwrite("0",206);
 | 
						|
    
 | 
						|
    bool datadoc = cau.get_bool(CAU_DATADOC);
 | 
						|
    if (datadoc)
 | 
						|
      record.overwrite("1",207);
 | 
						|
    else                                         //Flag immissione data documento
 | 
						|
      record.overwrite("0",207);                                                 
 | 
						|
    
 | 
						|
    const char* codcausim = cau.get(CAU_CODCAUSIM);
 | 
						|
    if (!real::is_natural(codcausim))
 | 
						|
      return error_box("Rilevato un codice causale per incasso immediato alfanumerico nella causale %03s: impossibile proseguire",codcau);
 | 
						|
    str.format("%03s", codcausim);
 | 
						|
    record.overwrite(str,209);             //Codice causale per incasso immediato
 | 
						|
    
 | 
						|
    bool intracom = cau.get_bool(CAU_INTRACOM);
 | 
						|
    if (intracom)
 | 
						|
      record.overwrite("X",246);
 | 
						|
    else                                         //Flag per operazioni intracomunitarie
 | 
						|
      record.overwrite(" ",246);                                                       
 | 
						|
    
 | 
						|
    bool valintra = cau.get_bool(CAU_VALINTRA);
 | 
						|
    if (valintra)
 | 
						|
      record.overwrite("X",247);
 | 
						|
    else                                         //Gestione valuta per oper. intracomunitarie
 | 
						|
      record.overwrite(" ",247);                                                             
 | 
						|
    
 | 
						|
    bool ritfatt = cau.get_bool(CAU_RITFATT);
 | 
						|
    if (ritfatt)
 | 
						|
      record.overwrite("X",248);
 | 
						|
    else                                         //Flag causale per fattura ricevuta in ritardo
 | 
						|
      record.overwrite(" ",248);                                                               
 | 
						|
    
 | 
						|
    bool autofatt = cau.get_bool(CAU_AUTOFATT);
 | 
						|
    if (autofatt)
 | 
						|
      record.overwrite("X",249);
 | 
						|
    else                                         //Autofattura art.34
 | 
						|
      record.overwrite(" ",249);  
 | 
						|
    
 | 
						|
    int num = 0;    
 | 
						|
    int pos_gcs = 41;
 | 
						|
    int pos_sez = 191;
 | 
						|
    _codcaus = cau.get(CAU_CODCAUS);
 | 
						|
    
 | 
						|
    TLocalisamfile rcau (LF_RCAUSALI);        
 | 
						|
    
 | 
						|
    do
 | 
						|
    {
 | 
						|
      num++;
 | 
						|
      
 | 
						|
      rcau.setkey(1);
 | 
						|
      rcau.zero();
 | 
						|
      rcau.put(RCA_CODCAUS, _codcaus);
 | 
						|
      rcau.put(RCA_NRIGA,   num);
 | 
						|
 | 
						|
      if (rcau.read() == NOERR)
 | 
						|
      {
 | 
						|
        int     g   = rcau.get_int (RCA_GRUPPO);
 | 
						|
        int     c   = rcau.get_int (RCA_CONTO);  
 | 
						|
        
 | 
						|
        if (g > 99)
 | 
						|
          return error_box("Rilevato un gruppo composto da 3 cifre nella causale %03s riga %d: impossibile proseguire",codcau,num);
 | 
						|
        
 | 
						|
        if (c > 99)
 | 
						|
          return error_box("Rilevato un conto composto da 3 cifre nella causale %03s riga %d: impossibile proseguire",codcau,num);
 | 
						|
        
 | 
						|
        long    s   = rcau.get_long(RCA_SOTTOCONTO);
 | 
						|
        TString sez = rcau.get     (RCA_SEZIONE);
 | 
						|
 | 
						|
        str = format("%02d", g);
 | 
						|
        record.overwrite(str,pos_gcs);      //Gruppo
 | 
						|
        pos_gcs += 2;
 | 
						|
        str = format("%02d", c);
 | 
						|
        record.overwrite(str,pos_gcs);      //Conto
 | 
						|
        pos_gcs += 2;
 | 
						|
        str = format("%06ld", s);
 | 
						|
        record.overwrite(str,pos_gcs);      //Sottoconto
 | 
						|
        pos_gcs += 6;
 | 
						|
        
 | 
						|
        record.overwrite(sez,pos_sez);      //Sezione
 | 
						|
        pos_sez++;
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        int     g   = 0;
 | 
						|
        int     c   = 0;
 | 
						|
        long    s   = 0;
 | 
						|
        TString sez = " ";
 | 
						|
 | 
						|
        str = format("%02d", g);
 | 
						|
        record.overwrite(str,pos_gcs);      //Gruppo
 | 
						|
        pos_gcs += 2;
 | 
						|
        str = format("%02d", c);
 | 
						|
        record.overwrite(str,pos_gcs);      //Conto
 | 
						|
        pos_gcs += 2;
 | 
						|
        str = format("%06ld", s);
 | 
						|
        record.overwrite(str,pos_gcs);      //Sottoconto
 | 
						|
        pos_gcs += 6;
 | 
						|
        
 | 
						|
        record.overwrite(sez,pos_sez);      //Sezione
 | 
						|
        pos_sez++;        
 | 
						|
      }           
 | 
						|
      
 | 
						|
      if (num == 15)
 | 
						|
      {   
 | 
						|
        TString cau_app;
 | 
						|
        
 | 
						|
        rcau.next(); 
 | 
						|
        if (!rcau.eof())
 | 
						|
          cau_app = rcau.get(RCA_CODCAUS);
 | 
						|
        else
 | 
						|
          cau_app = "";
 | 
						|
        
 | 
						|
        if (_codcaus == cau_app)
 | 
						|
          return error_box("Rilevata una causale con piu' di 15 righe: impossibile proseguire");
 | 
						|
      }
 | 
						|
    }
 | 
						|
    while (num < 15);
 | 
						|
    
 | 
						|
    _numrec++;            
 | 
						|
    TString stringa;
 | 
						|
    stringa.format("%06ld", _numrec);
 | 
						|
    int posiz = _files.find("W");
 | 
						|
    _control_rec.overwrite(stringa,((posiz * 6) + 47));
 | 
						|
    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    _tras_file.close();
 | 
						|
 | 
						|
    _tras_file.open(_trasf,TRUE);
 | 
						|
    _tras_file.write_control_rec(record,size);
 | 
						|
    _tras_file.close();
 | 
						|
  } 
 | 
						|
  delete _prog;
 | 
						|
  
 | 
						|
  //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare
 | 
						|
  //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di 
 | 
						|
  //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche'
 | 
						|
  //la chiave e' compilata con i dati del file precedente.
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  TString chiave,app,sigla;
 | 
						|
  app.format("%-15s", (const char*) chiave);
 | 
						|
  char sigla_p = _tras_file.ult_file()[0];
 | 
						|
  int posiz    = _files.find(sigla_p);
 | 
						|
  TString nuova_sigla = " ";
 | 
						|
  if (posiz < _files.len())
 | 
						|
    nuova_sigla = _files.mid(posiz+1,1);
 | 
						|
  
 | 
						|
  _control_rec.overwrite(nuova_sigla,240);
 | 
						|
  _control_rec.overwrite(app,241);
 | 
						|
  _tras_file.write_control_rec(_control_rec,size);
 | 
						|
  _tras_file.close();
 | 
						|
  
 | 
						|
  setta_tabella_ditta(m,"D",FALSE);
 | 
						|
  setta_parametri_record(m,"D");
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::invio_clifo(TString& key,TMask& m)
 | 
						|
{
 | 
						|
  int size = 256;
 | 
						|
  TString record(size);
 | 
						|
  char tipocf;
 | 
						|
  long codcf;
 | 
						|
  TLocalisamfile clifo (LF_CLIFO);
 | 
						|
 | 
						|
  long cicli = clifo.items();
 | 
						|
  cicli -= _numrec;
 | 
						|
  _prog = new TProgind(cicli,"Invio anagrafica Clienti / Fornitori in corso... Prego attendere.",FALSE);
 | 
						|
  
 | 
						|
  if (key == "")                  
 | 
						|
    clifo.first();
 | 
						|
  else           
 | 
						|
  { 
 | 
						|
    tipocf = (key.mid(2,1))[0];
 | 
						|
    codcf  = atol(key.mid(3,6));
 | 
						|
    clifo.setkey(1);
 | 
						|
    clifo.zero();
 | 
						|
    clifo.put(CLI_TIPOCF, tipocf);
 | 
						|
    clifo.put(CLI_CODCF,  codcf);
 | 
						|
    clifo.read();
 | 
						|
  }
 | 
						|
  
 | 
						|
  for (; !clifo.eof(); clifo.next())
 | 
						|
  { 
 | 
						|
    TString str;
 | 
						|
    
 | 
						|
    _prog->addstatus(1);
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
    
 | 
						|
    record.spaces();                                                     
 | 
						|
    
 | 
						|
    // Il tipocf su PC e'      C = cliente  F = fornitore.
 | 
						|
    // Il tipocf su AS400 e'   1 = cliente  2 = fornitore.
 | 
						|
    TString  tipo_cod;
 | 
						|
    
 | 
						|
    char tipo = clifo.get_char(CLI_TIPOCF);
 | 
						|
    if (tipo == 'C')
 | 
						|
      tipo_cod = "1";
 | 
						|
    else             
 | 
						|
      if (tipo == 'F')
 | 
						|
        tipo_cod = "2";
 | 
						|
 | 
						|
    record.overwrite("A1",0);                    //Tipo record
 | 
						|
    record.overwrite(tipo_cod,2);                //Tipo cliente/fornitore
 | 
						|
    
 | 
						|
    long codice = clifo.get_long(CLI_CODCF);
 | 
						|
    str.format("%06ld", codice);
 | 
						|
    record.overwrite(str,3);                     //Codice cliente/fornitore
 | 
						|
    
 | 
						|
    //Salvataggio della chiave sul record di controllo del file trasfer
 | 
						|
    leggi_record_controllo();
 | 
						|
    TString chiave,app;
 | 
						|
    chiave.format("%2s%s%06ld", (const char*) "A1", (const char*) tipo_cod, codice);
 | 
						|
    app.format("%-15s", (const char*) chiave);
 | 
						|
    _control_rec.overwrite("A",240);
 | 
						|
    _control_rec.overwrite(app,241);
 | 
						|
    //    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    //    _tras_file.close();
 | 
						|
    
 | 
						|
    //Il tipo persona su PC e'     F = fisica     G = giuridica
 | 
						|
    //Il tipo persona su AS400 e'  0 = giuridica  1 = fisica
 | 
						|
    char tipop = clifo.get_char(CLI_TIPOPERS);
 | 
						|
    TString tipopers;
 | 
						|
    
 | 
						|
    if (tipop == 'F')
 | 
						|
      tipopers = "1";
 | 
						|
    else
 | 
						|
      if (tipop == 'G')
 | 
						|
        tipopers = "0";
 | 
						|
    
 | 
						|
    record.overwrite(tipopers,15);               //Tipo persona
 | 
						|
    
 | 
						|
    TString ragsoc = clifo.get(CLI_RAGSOC);
 | 
						|
    TString cognome = ragsoc.mid(0,30);
 | 
						|
    TString nome    = ragsoc.mid(30,20);
 | 
						|
    str.format("%-30s", (const char*) cognome);  //Cognome o I ragione sociale
 | 
						|
    record.overwrite(str,16);
 | 
						|
    str.format("%-20s", (const char*) nome);
 | 
						|
    record.overwrite(str,46);                    //Nome o II ragione sociale
 | 
						|
    
 | 
						|
    //Se la partita IVA e' maggiore di 11 il programma di invio viene fermato
 | 
						|
    TString paiv = clifo.get(CLI_PAIV);
 | 
						|
    if (paiv.len() > 11)
 | 
						|
      return error_box("Rilevata partita IVA con piu' di 11 caratteri in codice %c%d: impossibile proseguire",tipo,codice);
 | 
						|
    str.format("%-11s", (const char*) paiv);
 | 
						|
    record.overwrite(str,66);                    //Partita IVA
 | 
						|
    
 | 
						|
    TString cofi = clifo.get(CLI_COFI);
 | 
						|
    str.format("%-16s", (const char*) cofi);
 | 
						|
    record.overwrite(str,77);                    //Codice fiscale
 | 
						|
    
 | 
						|
    TString indcf = clifo.get(CLI_INDCF);
 | 
						|
    str.format("%-35s", (const char*) indcf);
 | 
						|
    record.overwrite(str,93);                    //Indirizzo
 | 
						|
    
 | 
						|
    TString capcf = clifo.get(CLI_CAPCF);
 | 
						|
    record.overwrite(capcf,128);                 //Codice di avviamento postale
 | 
						|
    
 | 
						|
    TString localita = clifo.get(CLI_LOCCF);
 | 
						|
    str.format("%-.20s", (const char*) localita);
 | 
						|
    record.overwrite(str,133);                   //Localita'
 | 
						|
    
 | 
						|
    TString comcf = clifo.get(CLI_COMCF);
 | 
						|
    TString provincia = cerca_provincia(comcf);  
 | 
						|
    str.format("%-2s", (const char*) provincia);
 | 
						|
    record.overwrite(str,153);                   //Provincia
 | 
						|
    
 | 
						|
    TString ptel = clifo.get(CLI_PTEL);
 | 
						|
    TString tel  = clifo.get(CLI_TEL);
 | 
						|
    TString appoggio;
 | 
						|
    appoggio << ptel << " " << tel;   
 | 
						|
    if (appoggio.len() > 12)
 | 
						|
      warning_box("Rilevato numero telefonico troppo lungo in codice %c%d: impossibile inviare",tipo,codice);
 | 
						|
    else                                         //Numero telefono
 | 
						|
      record.overwrite(appoggio,155);
 | 
						|
    
 | 
						|
    TString alleg = clifo.get(CLI_ALLEG);
 | 
						|
    record.overwrite(alleg,167);                 //Flag gestione allegato
 | 
						|
    
 | 
						|
    int gruppo = clifo.get_int(CLI_GRUPPORIC);
 | 
						|
    int conto  = clifo.get_int(CLI_CONTORIC);
 | 
						|
    
 | 
						|
    if (gruppo > 99)
 | 
						|
      return error_box("Rilevato gruppo costo/ricavo composto da 3 cifre in codice %c%d: impossibile proseguire",tipo,codice);
 | 
						|
    
 | 
						|
    if (conto > 99)
 | 
						|
      return error_box("Rilevato conto costo/ricavo composto da 3 cifre in codice %c%d: impossibile proseguire",tipo,codice);
 | 
						|
    
 | 
						|
    long sottoc = clifo.get_long(CLI_SOTTOCRIC);
 | 
						|
    str.format("%02d", gruppo);
 | 
						|
    record.overwrite(str,168);                   //Gruppo di costo/ricavo
 | 
						|
    str.format("%02d", conto);
 | 
						|
    record.overwrite(str,170);                   //Conto di costo/ricavo
 | 
						|
    str.format("%06ld", sottoc);
 | 
						|
    record.overwrite(str,172);                   //sottoconto di costo/ricavo
 | 
						|
 | 
						|
    long codalleg = clifo.get_long(CLI_CODALLEG);
 | 
						|
    str.format("%06ld", codalleg);
 | 
						|
    record.overwrite(str,179);
 | 
						|
    
 | 
						|
    //Se il codice di pagamento e' superiore alle 2 cifre l'invio deve essere interrotto
 | 
						|
    TString codpag = clifo.get(CLI_CODPAG);
 | 
						|
    if (codpag.len() > 2)
 | 
						|
      return error_box("Rilevato un codice di pagamento composto da 3 o piu' cifre in codice %c%d: impossibile proseguire",tipo,codice);
 | 
						|
    
 | 
						|
    str.format("%-2s", (const char*) codpag);
 | 
						|
 | 
						|
    _numrec++;            
 | 
						|
    TString stringa;
 | 
						|
    stringa.format("%06ld", _numrec);
 | 
						|
    int posiz = _files.find("A");
 | 
						|
    _control_rec.overwrite(stringa,((posiz * 6) + 47));
 | 
						|
    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    _tras_file.close();
 | 
						|
    
 | 
						|
    _tras_file.open(_trasf,TRUE);
 | 
						|
    _tras_file.write_control_rec(record,size);
 | 
						|
    _tras_file.close();
 | 
						|
  } 
 | 
						|
  delete _prog;  
 | 
						|
 | 
						|
  //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare
 | 
						|
  //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di 
 | 
						|
  //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche'
 | 
						|
  //la chiave e' compilata con i dati del file precedente.
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  TString chiave,app,sigla;
 | 
						|
  app.format("%-15s", (const char*) chiave);
 | 
						|
  char sigla_p = _tras_file.ult_file()[0];
 | 
						|
  int posiz    = _files.find(sigla_p);
 | 
						|
  TString nuova_sigla = " ";
 | 
						|
  if (posiz < _files.len())
 | 
						|
    nuova_sigla = _files.mid(posiz+1,1);
 | 
						|
  
 | 
						|
  _control_rec.overwrite(nuova_sigla,240);
 | 
						|
  _control_rec.overwrite(app,241);
 | 
						|
  _tras_file.write_control_rec(_control_rec,size);
 | 
						|
  _tras_file.close();
 | 
						|
 | 
						|
  setta_tabella_ditta(m,"D",FALSE);
 | 
						|
  setta_parametri_record(m,"D");
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::invio_pcon(TString& key,TMask& m)
 | 
						|
{
 | 
						|
  int size = 256;
 | 
						|
  TString record(size);
 | 
						|
  int  gruppo,conto;
 | 
						|
  long sottoc;
 | 
						|
  TLocalisamfile pcon (LF_PCON);
 | 
						|
 | 
						|
  long cicli = pcon.items();
 | 
						|
  cicli -= _numrec;
 | 
						|
  _prog = new TProgind(cicli,"Invio anagrafica Piano dei Conti in corso... Prego attendere.",FALSE);
 | 
						|
  
 | 
						|
  if (key == "")                  
 | 
						|
    pcon.first();
 | 
						|
  else           
 | 
						|
  { 
 | 
						|
    gruppo = atoi(key.mid(2,2));
 | 
						|
    conto  = atoi(key.mid(4,2));
 | 
						|
    sottoc = atol(key.mid(6,6));
 | 
						|
    pcon.setkey(1);
 | 
						|
    pcon.zero();
 | 
						|
    pcon.put(PCN_GRUPPO,     gruppo);
 | 
						|
    pcon.put(PCN_CONTO,      conto);
 | 
						|
    pcon.put(PCN_SOTTOCONTO, sottoc);
 | 
						|
    pcon.read();
 | 
						|
  }
 | 
						|
  
 | 
						|
  for (; !pcon.eof(); pcon.next())
 | 
						|
  { 
 | 
						|
    TString str;
 | 
						|
    
 | 
						|
    _prog->addstatus(1);
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
    
 | 
						|
    record.spaces();                                                     
 | 
						|
    
 | 
						|
    int  g = pcon.get_int (PCN_GRUPPO); 
 | 
						|
    
 | 
						|
    if (g > 99)
 | 
						|
      return error_box("Rilevato un gruppo composto da 3 cifre in %03d: impossibile proseguire",g);
 | 
						|
    
 | 
						|
    int  c = pcon.get_int (PCN_CONTO);
 | 
						|
    
 | 
						|
    if (c > 99)
 | 
						|
      return error_box("Rilevato un conto composto da 3 cifre in %03d: impossibile proseguire",c);
 | 
						|
    
 | 
						|
    long s = pcon.get_long(PCN_SOTTOCONTO);
 | 
						|
 | 
						|
    // Se si tratta di un GRUPPO 
 | 
						|
 | 
						|
    if (g != 0 && c == 0 && s == 0)
 | 
						|
    {                                                
 | 
						|
      //Salvataggio della sigla e della chiave sul record di controllo del file trasfer
 | 
						|
      leggi_record_controllo();
 | 
						|
      TString chiave,app;
 | 
						|
      chiave.format("%2s%02d%02d%06ld", (const char*) "P1", g, c, s);
 | 
						|
      app.format("%-15s", (const char*) chiave);
 | 
						|
      _control_rec.overwrite("P",240);
 | 
						|
      _control_rec.overwrite(app,241);
 | 
						|
      //      _tras_file.write_control_rec(_control_rec,size);
 | 
						|
      //      _tras_file.close();
 | 
						|
      
 | 
						|
      record.overwrite("P1",0);                  //Tipo record
 | 
						|
      str.format("%02d", g);
 | 
						|
      record.overwrite(str,2);                   //Gruppo
 | 
						|
      
 | 
						|
      TString descr (pcon.get(PCN_DESCR));
 | 
						|
      str.format("%-.30s", (const char*) descr);
 | 
						|
      record.overwrite(str,15);                  //Descrizione gruppo
 | 
						|
    }
 | 
						|
    
 | 
						|
    // Se si tratta di un CONTO
 | 
						|
 | 
						|
    if (g != 0 && c != 0 && s == 0)
 | 
						|
    {
 | 
						|
      //Salvataggio della sigla e della chiave sul record di controllo del file trasfer
 | 
						|
      leggi_record_controllo();
 | 
						|
      TString chiave,app;
 | 
						|
      chiave.format("%2s%02d%02d%06ld", (const char*) "P2", g, c, s);
 | 
						|
      app.format("%-15s", (const char*) chiave);
 | 
						|
      _control_rec.overwrite("P",240);
 | 
						|
      _control_rec.overwrite(app,241);
 | 
						|
      //      _tras_file.write_control_rec(_control_rec,size);
 | 
						|
      //      _tras_file.close();
 | 
						|
      
 | 
						|
      record.overwrite("P2",0);                  //Tipo record
 | 
						|
      str.format("%02d", g);
 | 
						|
      record.overwrite(str,2);                   //Gruppo
 | 
						|
      
 | 
						|
      str.format("%02d", c);
 | 
						|
      record.overwrite(str,4);                   //Conto
 | 
						|
      
 | 
						|
      TString descr (pcon.get(PCN_DESCR));
 | 
						|
      str.format("%-.30s", (const char*) descr);
 | 
						|
      record.overwrite(str,15);                  //Descrizione conto
 | 
						|
      
 | 
						|
      int indbil = pcon.get_int(PCN_INDBIL);
 | 
						|
      str.format("%d", indbil);
 | 
						|
      record.overwrite(str,45);                  //Indicatore di bilancio
 | 
						|
      
 | 
						|
      TString tmcf = pcon.get(PCN_TMCF);
 | 
						|
      record.overwrite(tmcf,46);                 //Flag conto cliente/fornitore
 | 
						|
      
 | 
						|
      bool stsottbil = pcon.get_bool(PCN_STSOTTBIL);
 | 
						|
      if (stsottbil)
 | 
						|
        str = "0";
 | 
						|
      else
 | 
						|
        str = "1";
 | 
						|
      record.overwrite(str,47);                  //Flag stampa dettaglio sottoconti su bilancio
 | 
						|
 | 
						|
      // Classe IV direttiva CEE
 | 
						|
      
 | 
						|
      TString sez = pcon.get(PCN_SEZIVD);
 | 
						|
      if (sez == "0")
 | 
						|
        sez = " ";
 | 
						|
      record.overwrite(sez,48);                  //Sezione IV dir
 | 
						|
      
 | 
						|
      TString let = pcon.get(PCN_LETTIVD);
 | 
						|
      record.overwrite(let,49);                  //Lettera IV dir
 | 
						|
      
 | 
						|
      int numrom = atoi(pcon.get(PCN_NUMRIVD));
 | 
						|
      str.format("%03d", numrom);
 | 
						|
      record.overwrite(str,60);                  //Numero arabo corrispondente al numero romano
 | 
						|
      TString numr = itor(numrom);
 | 
						|
      str.format("%-8s", (const char*) numr);
 | 
						|
      record.overwrite(str,50);                  //Numero romano IV dir
 | 
						|
      
 | 
						|
      int num = pcon.get_int(PCN_NUMIVD);
 | 
						|
      str.format("%02d", num);
 | 
						|
      record.overwrite(str,58);                  //Numero arabo IV dir
 | 
						|
 | 
						|
      // Classe IV direttiva CEE di segno opposto
 | 
						|
      
 | 
						|
      TString sezop = pcon.get(PCN_SEZIVDOPP);
 | 
						|
      if (sezop == "0")
 | 
						|
        sezop = " ";
 | 
						|
      record.overwrite(sezop,63);                //Sezione IV dir
 | 
						|
      
 | 
						|
      TString letop = pcon.get(PCN_LETTIVDOPP);
 | 
						|
      record.overwrite(letop,64);                //Lettera IV dir
 | 
						|
      
 | 
						|
      int numromop = atoi(pcon.get(PCN_NUMRIVDOPP));
 | 
						|
      str.format("%03d", numromop);
 | 
						|
      record.overwrite(str,75);                  //Numero arabo corrispondente al numero romano
 | 
						|
      TString numrop = itor(numromop);
 | 
						|
      str.format("%-8s", (const char*) numrop);
 | 
						|
      record.overwrite(str,65);                  //Numero romano IV dir
 | 
						|
      
 | 
						|
      int numop = pcon.get_int(PCN_NUMIVDOPP);
 | 
						|
      str.format("%02d", numop);
 | 
						|
      record.overwrite(str,73);                  //Numero arabo IV dir      
 | 
						|
    }
 | 
						|
    
 | 
						|
    // Se si tratta di un SOTTOCONTO
 | 
						|
 | 
						|
    if (g != 0 && c != 0 && s != 0)
 | 
						|
    {
 | 
						|
      //Salvataggio della sigla e della chiave sul record di controllo del file trasfer
 | 
						|
      leggi_record_controllo();
 | 
						|
      TString chiave,app;
 | 
						|
      chiave.format("%2s%02d%02d%06ld", (const char*) "P3", g, c, s);
 | 
						|
      app.format("%-15s", (const char*) chiave);
 | 
						|
      _control_rec.overwrite("P",240);
 | 
						|
      _control_rec.overwrite(app,241);
 | 
						|
      //      _tras_file.write_control_rec(_control_rec,size);
 | 
						|
      //      _tras_file.close();
 | 
						|
      
 | 
						|
      record.overwrite("P3",0);                  //Tipo record
 | 
						|
      str.format("%02d", g);
 | 
						|
      record.overwrite(str,2);                   //Gruppo
 | 
						|
      
 | 
						|
      str.format("%02d", c);
 | 
						|
      record.overwrite(str,4);                   //Conto
 | 
						|
      
 | 
						|
      str.format("%06ld", s);
 | 
						|
      record.overwrite(str,6);
 | 
						|
      
 | 
						|
      TString descr (pcon.get(PCN_DESCR));
 | 
						|
      str.format("%-.30s", (const char*) descr);
 | 
						|
      record.overwrite(str,15);                  //Descrizione sottoconto
 | 
						|
      
 | 
						|
      int tipospric = pcon.get_int(PCN_TIPOSPRIC);
 | 
						|
      str.format("%d", tipospric);
 | 
						|
      record.overwrite(str,45);                  //Tipo costo/ricavo
 | 
						|
      
 | 
						|
      int ricser = pcon.get_int(PCN_RICSER);
 | 
						|
      if (ricser == 0)
 | 
						|
        str = " ";
 | 
						|
      else
 | 
						|
        str.format("%d", ricser);                      
 | 
						|
      record.overwrite(str,46);                  //Tipo attivita'
 | 
						|
 | 
						|
      // Classe IV direttiva CEE
 | 
						|
      
 | 
						|
      TString sez = pcon.get(PCN_SEZIVD);
 | 
						|
      if (sez == "0")
 | 
						|
        sez = " ";
 | 
						|
      record.overwrite(sez,47);                  //Sezione IV dir
 | 
						|
      
 | 
						|
      TString let = pcon.get(PCN_LETTIVD);
 | 
						|
      record.overwrite(let,48);                  //Lettera IV dir
 | 
						|
      
 | 
						|
      int numrom = atoi(pcon.get(PCN_NUMRIVD));
 | 
						|
      str.format("%03d", numrom);
 | 
						|
      record.overwrite(str,59);                  //Numero arabo corrispondente al numero romano
 | 
						|
      TString numr = itor(numrom);
 | 
						|
      str.format("%-8s", (const char*) numr);
 | 
						|
      record.overwrite(str,49);                  //Numero romano IV dir
 | 
						|
      
 | 
						|
      int num = pcon.get_int(PCN_NUMIVD);
 | 
						|
      str.format("%02d", num);
 | 
						|
      record.overwrite(str,57);                  //Numero arabo IV dir
 | 
						|
 | 
						|
      // Classe IV direttiva CEE di segno opposto
 | 
						|
      
 | 
						|
      TString sezop = pcon.get(PCN_SEZIVDOPP);
 | 
						|
      if (sezop == "0")
 | 
						|
        sezop = " ";
 | 
						|
      record.overwrite(sezop,62);                //Sezione IV dir
 | 
						|
      
 | 
						|
      TString letop = pcon.get(PCN_LETTIVDOPP);
 | 
						|
      record.overwrite(letop,63);                //Lettera IV dir
 | 
						|
      
 | 
						|
      int numromop = atoi(pcon.get(PCN_NUMRIVDOPP));
 | 
						|
      str.format("%03d", numromop);
 | 
						|
      record.overwrite(str,74);                  //Numero arabo corrispondente al numero romano
 | 
						|
      TString numrop = itor(numromop);
 | 
						|
      str.format("%-8s", (const char*) numrop);
 | 
						|
      record.overwrite(str,64);                  //Numero romano IV dir
 | 
						|
      
 | 
						|
      int numop = pcon.get_int(PCN_NUMIVDOPP);
 | 
						|
      str.format("%02d", numop);
 | 
						|
      record.overwrite(str,72);                  //Numero arabo IV dir      
 | 
						|
    }
 | 
						|
 | 
						|
    _numrec++;            
 | 
						|
    TString stringa;
 | 
						|
    stringa.format("%06ld", _numrec);
 | 
						|
    int posiz = _files.find("P");
 | 
						|
    _control_rec.overwrite(stringa,((posiz * 6) + 47));
 | 
						|
    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    _tras_file.close();
 | 
						|
    
 | 
						|
    _tras_file.open(_trasf,TRUE);
 | 
						|
    _tras_file.write_control_rec(record,size);
 | 
						|
    _tras_file.close();
 | 
						|
  } 
 | 
						|
  delete _prog;  
 | 
						|
 | 
						|
  //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare
 | 
						|
  //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di 
 | 
						|
  //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche'
 | 
						|
  //la chiave e' compilata con i dati del file precedente.
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  TString chiave,app,sigla;
 | 
						|
  app.format("%-15s", (const char*) chiave);
 | 
						|
  char sigla_p = _tras_file.ult_file()[0];
 | 
						|
  int posiz    = _files.find(sigla_p);
 | 
						|
  TString nuova_sigla = " ";
 | 
						|
  if (posiz < _files.len())
 | 
						|
    nuova_sigla = _files.mid(posiz+1,1);
 | 
						|
  
 | 
						|
  _control_rec.overwrite(nuova_sigla,240);
 | 
						|
  _control_rec.overwrite(app,241);
 | 
						|
  _tras_file.write_control_rec(_control_rec,size);
 | 
						|
  _tras_file.close();
 | 
						|
 | 
						|
  setta_tabella_ditta(m,"D",FALSE);  
 | 
						|
  setta_parametri_record(m,"D");
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::testata_mov_PN(long numreg)
 | 
						|
{
 | 
						|
  TLocalisamfile mov (LF_MOV);
 | 
						|
  
 | 
						|
  mov.setkey(1);
 | 
						|
  mov.zero();
 | 
						|
  mov.put(MOV_NUMREG, numreg);
 | 
						|
  if (mov.read() == NOERR)
 | 
						|
  {
 | 
						|
    _datadoc  = mov.get_date(MOV_DATADOC);
 | 
						|
    _numdoc   = mov.get     (MOV_NUMDOC);
 | 
						|
    _reg      = mov.get     (MOV_REG);
 | 
						|
    _codcausm = mov.get     (MOV_CODCAUS);
 | 
						|
    _codpag   = mov.get     (MOV_CODPAG);
 | 
						|
    _tipodoc  = mov.get     (MOV_TIPODOC);
 | 
						|
    _protiva  = mov.get_long(MOV_PROTIVA);
 | 
						|
    _uprotiva = mov.get_long(MOV_UPROTIVA);
 | 
						|
  }           
 | 
						|
  else
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::invio_mov_PN(TString& key,TMask& m)
 | 
						|
{
 | 
						|
  int size = 256;
 | 
						|
  TString record(size);
 | 
						|
  long numreg,nreg_p;
 | 
						|
  int  numrig;
 | 
						|
  TLocalisamfile rmov (LF_RMOV);
 | 
						|
  
 | 
						|
  nreg_p = -1;
 | 
						|
  
 | 
						|
  long cicli = rmov.items();
 | 
						|
  cicli -= _numrec;
 | 
						|
  _prog = new TProgind(cicli,"Invio Movimenti di primanota in corso... Prego attendere.",FALSE);
 | 
						|
  
 | 
						|
  if (key == "")                  
 | 
						|
    rmov.first();
 | 
						|
  else           
 | 
						|
  { 
 | 
						|
    numreg = atol(key.mid(2,6));
 | 
						|
    numrig = atoi(key.mid(8,2));
 | 
						|
    rmov.setkey(1);
 | 
						|
    rmov.zero();
 | 
						|
    rmov.put(RMV_NUMREG, numreg);
 | 
						|
    rmov.put(RMV_NUMRIG, numrig);
 | 
						|
    rmov.read();
 | 
						|
  }
 | 
						|
  
 | 
						|
  for (; !rmov.eof(); rmov.next())
 | 
						|
  { 
 | 
						|
    TString str;
 | 
						|
    
 | 
						|
    _prog->addstatus(1);
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
    
 | 
						|
    record.spaces();                                                     
 | 
						|
    
 | 
						|
    long nreg = rmov.get_long(RMV_NUMREG);
 | 
						|
    int  nrig = rmov.get_int (RMV_NUMRIG);
 | 
						|
    
 | 
						|
    //Salvataggio della chiave sul record di controllo del file trasfer
 | 
						|
    leggi_record_controllo();
 | 
						|
    TString chiave,app;
 | 
						|
    chiave.format("%2s%06ld%02d", (const char*) "Z1", nreg, nrig);
 | 
						|
    app.format("%-15s", (const char*) chiave);
 | 
						|
    _control_rec.overwrite("Z",240);
 | 
						|
    _control_rec.overwrite(app,241);
 | 
						|
    //    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    //    _tras_file.close();
 | 
						|
 | 
						|
    if (nreg > 999999)
 | 
						|
      return error_box("Rilevato un numero di registrazione composto da 7 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    
 | 
						|
    if (nrig > 99)
 | 
						|
      return error_box("Rilevato un numero di riga composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    
 | 
						|
    record.overwrite("Z1",0);                    //Tipo record
 | 
						|
    
 | 
						|
    str.format("%06ld", nreg);
 | 
						|
    record.overwrite(str,2);                     //Numero di registrazione
 | 
						|
    
 | 
						|
    str.format("%02d", nrig);
 | 
						|
    record.overwrite(str,8);                     //Numero di riga
 | 
						|
    
 | 
						|
    if (nreg != nreg_p)
 | 
						|
      if (!testata_mov_PN(nreg))
 | 
						|
        return error_box("Rilevata riga mancante di testata: impossibile proseguire");
 | 
						|
    
 | 
						|
    nreg_p = nreg;
 | 
						|
    
 | 
						|
    TDate datareg (rmov.get(RMV_DATAREG)); 
 | 
						|
    TString dataregstr = datareg.string();
 | 
						|
    str = riconverti(dataregstr);
 | 
						|
    record.overwrite(str,15);                    //Data di registrazione
 | 
						|
 | 
						|
    //Determino il segnalino della competenza
 | 
						|
    int segnalino;
 | 
						|
    
 | 
						|
    int annoes = rmov.get_int(RMV_ANNOES);
 | 
						|
    int anno   = date2esc(datareg);
 | 
						|
    if (annoes == anno)
 | 
						|
      segnalino = 0;
 | 
						|
    else
 | 
						|
      segnalino = 1;
 | 
						|
    str.format("%d", segnalino);
 | 
						|
    record.overwrite(str,21);                    //Segnalino della competenza
 | 
						|
    
 | 
						|
    TString datadocstr = _datadoc.string();                    
 | 
						|
    str = riconverti(datadocstr);
 | 
						|
    record.overwrite(str,22);                    //Data documento
 | 
						|
    
 | 
						|
    str.format("%-7s", (const char*) _numdoc);
 | 
						|
    record.overwrite(str,28);
 | 
						|
    
 | 
						|
    if (_reg.len() > 1)
 | 
						|
      return error_box("Rilevato un codice registro IVA composto da 2 o piu' cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    record.overwrite(_reg,35);                   //Codice registro IVA
 | 
						|
    
 | 
						|
    str.format("%05d", _protiva);
 | 
						|
    record.overwrite(str,36);                    //Numero protocollo IVA
 | 
						|
    
 | 
						|
    // Se trovo un codice causale alfanumerico l'invio deve essere interrotto
 | 
						|
    const char* cod_causm = (const char*)_codcausm;
 | 
						|
    if (_codcausm != "")
 | 
						|
      if (!real::is_natural(cod_causm))
 | 
						|
        return error_box("Rilevato un codice causale alfanumerico in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%03s", (const char*)_codcausm);
 | 
						|
    record.overwrite(str,41);                     //Codice causale
 | 
						|
    
 | 
						|
    TString descr = rmov.get(RMV_DESCR);
 | 
						|
    str.format("%-.30s", (const char*) descr);
 | 
						|
    record.overwrite(str,44);                     //Descrizione riga di movimento
 | 
						|
    
 | 
						|
    int gruppo = rmov.get_int(RMV_GRUPPO);
 | 
						|
    if (gruppo > 99)
 | 
						|
      return error_box("Rilevato un gruppo di partita composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%02d", gruppo);
 | 
						|
    record.overwrite(str,74);                     //Gruppo di partita
 | 
						|
    
 | 
						|
    int conto = rmov.get_int(RMV_CONTO);
 | 
						|
    if (conto > 99)
 | 
						|
      return error_box("Rilevato un conto di partita composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);  
 | 
						|
    str.format("%02d", conto);
 | 
						|
    record.overwrite(str,76);                     //Conto di partita
 | 
						|
    
 | 
						|
    long sottoc = rmov.get_long(RMV_SOTTOCONTO);
 | 
						|
    str.format("%06ld", sottoc);
 | 
						|
    record.overwrite(str,78);                     //Sottoconto di partita
 | 
						|
    
 | 
						|
    TString sez = rmov.get(RMV_SEZIONE);
 | 
						|
    str.format("%s", (const char*) sez);
 | 
						|
    record.overwrite(str,84);                     //Sezione importo
 | 
						|
    
 | 
						|
    int gruppoc = rmov.get_int(RMV_GRUPPOC);
 | 
						|
    if (gruppoc > 99)
 | 
						|
      return error_box("Rilevato un gruppo di contropartita composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%02d", gruppoc);
 | 
						|
    record.overwrite(str,85);                     //Gruppo di contropartita
 | 
						|
    
 | 
						|
    int contoc = rmov.get_int(RMV_CONTOC);
 | 
						|
    if (contoc > 99)
 | 
						|
      return error_box("Rilevato un conto di contropartita composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);    
 | 
						|
    str.format("%02d", contoc);
 | 
						|
    record.overwrite(str,87);                     //Conto di contropartita
 | 
						|
    
 | 
						|
    long sottocc = rmov.get_long(RMV_SOTTOCONTOC);
 | 
						|
    str.format("%06ld", sottocc);
 | 
						|
    record.overwrite(str,89);                     //Sottoconto di contropartita
 | 
						|
    
 | 
						|
    if (_codpag.len() > 2)
 | 
						|
      return error_box("Rilevato un codice di pagamento composto da 3 o piu' cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%-2s", (const char*) _codpag);
 | 
						|
    record.overwrite(str,95);                     //Codice di pagamento
 | 
						|
    
 | 
						|
    real importo (rmov.get_real(RMV_IMPORTO));
 | 
						|
    str.format("%011s", (const char*) importo.string());
 | 
						|
    record.overwrite(str,97);                     //Importo riga di movimento
 | 
						|
    
 | 
						|
    str.format("%05d", _uprotiva);
 | 
						|
    record.overwrite(str,108);                    //Ultimo numero di protocollo IVA
 | 
						|
    
 | 
						|
    TString tipoc = rmov.get(RMV_TIPOC);
 | 
						|
    record.overwrite(tipoc,219);                  //Flag cliente/fornitore
 | 
						|
    
 | 
						|
    record.overwrite(_tipodoc,220);               //Tipo documento
 | 
						|
 | 
						|
    _numrec++;            
 | 
						|
    TString stringa;
 | 
						|
    stringa.format("%06ld", _numrec);
 | 
						|
    int posiz = _files.find("Z");
 | 
						|
    _control_rec.overwrite(stringa,((posiz * 6) + 47));
 | 
						|
    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    _tras_file.close();
 | 
						|
    
 | 
						|
    _tras_file.open(_trasf,TRUE);
 | 
						|
    _tras_file.write_control_rec(record,size);
 | 
						|
    _tras_file.close();
 | 
						|
  } 
 | 
						|
  delete _prog;  
 | 
						|
 | 
						|
  //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare
 | 
						|
  //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di 
 | 
						|
  //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche'
 | 
						|
  //la chiave e' compilata con i dati del file precedente.
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  TString chiave,app,sigla;
 | 
						|
  app.format("%-15s", (const char*) chiave);
 | 
						|
  char sigla_p = _tras_file.ult_file()[0];
 | 
						|
  int posiz    = _files.find(sigla_p);
 | 
						|
  TString nuova_sigla = " ";
 | 
						|
  if (posiz < _files.len())
 | 
						|
    nuova_sigla = _files.mid(posiz+1,1);
 | 
						|
  
 | 
						|
  _control_rec.overwrite(nuova_sigla,240);
 | 
						|
  _control_rec.overwrite(app,241);
 | 
						|
  _tras_file.write_control_rec(_control_rec,size);
 | 
						|
  _tras_file.close();
 | 
						|
  
 | 
						|
  setta_tabella_ditta(m,"D",FALSE);
 | 
						|
  setta_parametri_record(m,"D");
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::testata_mov_IVA(long numreg)
 | 
						|
{
 | 
						|
  TLocalisamfile mov (LF_MOV);
 | 
						|
  
 | 
						|
  mov.setkey(1);
 | 
						|
  mov.zero();
 | 
						|
  mov.put(MOV_NUMREG, numreg);
 | 
						|
  if (mov.read() == NOERR)
 | 
						|
  {
 | 
						|
    _codcf     = mov.get_long(MOV_CODCF);
 | 
						|
    _data74ter = mov.get_date(MOV_DATA74TER);
 | 
						|
    _corrlire  = mov.get_real(MOV_CORRLIRE);
 | 
						|
    _codvali   = mov.get     (MOV_CODVALI);
 | 
						|
    _cambioi   = mov.get_real(MOV_CAMBIOI);
 | 
						|
    _corrval   = mov.get_real(MOV_CORRVALUTA);
 | 
						|
    _ocfpi     = mov.get     (MOV_OCFPI);
 | 
						|
    if (_ocfpi.not_empty())
 | 
						|
      cerca_occasionale();
 | 
						|
  }           
 | 
						|
  else
 | 
						|
    return FALSE;
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::cerca_occasionale()
 | 
						|
{
 | 
						|
  TLocalisamfile occas (LF_OCCAS);
 | 
						|
  
 | 
						|
  occas.setkey(1);
 | 
						|
  occas.zero();
 | 
						|
  occas.put(OCC_CFPI, _ocfpi);
 | 
						|
  if (occas.read() == NOERR)
 | 
						|
  {
 | 
						|
    _ragsococc  = occas.get(OCC_RAGSOC);
 | 
						|
    _indocc     = occas.get(OCC_INDIR);
 | 
						|
    _capocc     = occas.get(OCC_CAP);
 | 
						|
    TString com = occas.get(OCC_COM);
 | 
						|
    cerca_comune_occas(com);
 | 
						|
  }                         
 | 
						|
  else
 | 
						|
  {
 | 
						|
    _ragsococc = "";
 | 
						|
    _indocc    = "";
 | 
						|
    _capocc    = "";
 | 
						|
    _localocc  = "";
 | 
						|
    _provocc   = "";
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void TInv_cont::cerca_comune_occas(const TString& com)
 | 
						|
{
 | 
						|
  TLocalisamfile comuni (LF_COMUNI);
 | 
						|
  
 | 
						|
  comuni.setkey(1);
 | 
						|
  comuni.zero();
 | 
						|
  comuni.put(COM_COM, com);
 | 
						|
  if (comuni.read() == NOERR)
 | 
						|
  {
 | 
						|
    _localocc = comuni.get(COM_DENCOM);
 | 
						|
    _provocc  = comuni.get(COM_PROVCOM);
 | 
						|
  }
 | 
						|
}                                       
 | 
						|
 | 
						|
bool TInv_cont::invio_mov_IVA(TString& key,TMask& m)
 | 
						|
{
 | 
						|
  int size = 256;
 | 
						|
  TString record(size);
 | 
						|
  long numreg,nreg_p;
 | 
						|
  int  numrig;
 | 
						|
  int  numero_righe = 0;
 | 
						|
  TLocalisamfile rmoviva (LF_RMOVIVA);
 | 
						|
  
 | 
						|
  nreg_p = -1;
 | 
						|
  
 | 
						|
  long cicli = rmoviva.items();
 | 
						|
  cicli -= _numrec;
 | 
						|
  _prog = new TProgind(cicli,"Invio Movimenti iva in corso... Prego attendere.",FALSE);
 | 
						|
  
 | 
						|
  if (key == "")                  
 | 
						|
    rmoviva.first();
 | 
						|
  else           
 | 
						|
  { 
 | 
						|
    numreg = atol(key.mid(2,6));
 | 
						|
    numrig = atoi(key.mid(8,2));
 | 
						|
    rmoviva.setkey(1);
 | 
						|
    rmoviva.zero();
 | 
						|
    rmoviva.put(RMI_NUMREG, numreg);
 | 
						|
    rmoviva.put(RMI_NUMRIG, numrig);
 | 
						|
    rmoviva.read();
 | 
						|
  }
 | 
						|
  
 | 
						|
  for (; !rmoviva.eof(); rmoviva.next())
 | 
						|
  { 
 | 
						|
    TString str;
 | 
						|
    
 | 
						|
    _prog->addstatus(1);
 | 
						|
    _tras_file.open(_trasf);
 | 
						|
    
 | 
						|
    record.spaces();                                                     
 | 
						|
    
 | 
						|
    long nreg = rmoviva.get_long(RMI_NUMREG);
 | 
						|
    int  nrig = rmoviva.get_int (RMI_NUMRIG);
 | 
						|
    
 | 
						|
    //Salvataggio della chiave sul record di controllo del file trasfer
 | 
						|
    leggi_record_controllo();
 | 
						|
    TString chiave,app;
 | 
						|
    chiave.format("%2s%06ld%02d", (const char*) "U1", nreg, nrig);
 | 
						|
    app.format("%-15s", (const char*) chiave);
 | 
						|
    _control_rec.overwrite("U",240);
 | 
						|
    _control_rec.overwrite(app,241);
 | 
						|
    //    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    //    _tras_file.close();
 | 
						|
 | 
						|
    if (nreg > 999999)
 | 
						|
      return error_box("Rilevato un numero di registrazione composto da 7 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    
 | 
						|
    if (nrig > 99)
 | 
						|
      return error_box("Rilevato un numero di riga composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    
 | 
						|
    record.overwrite("U1",0);                    //Tipo record
 | 
						|
    
 | 
						|
    str.format("%06ld", nreg);
 | 
						|
    record.overwrite(str,2);                     //Numero di registrazione
 | 
						|
    
 | 
						|
    str.format("%02d", nrig);
 | 
						|
    record.overwrite(str,8);                     //Numero di riga
 | 
						|
    
 | 
						|
    if (nreg != nreg_p) 
 | 
						|
    { 
 | 
						|
      numero_righe = 0;
 | 
						|
      if (!testata_mov_IVA(nreg))
 | 
						|
        return error_box("Rilevata riga mancante di testata: impossibile proseguire");
 | 
						|
    }
 | 
						|
    
 | 
						|
    numero_righe++;
 | 
						|
    if (numero_righe > 9)
 | 
						|
      return error_box("Rilevata una registrazione IVA con piu' di 9 righe: impossibile proseguire");
 | 
						|
    
 | 
						|
    nreg_p = nreg;
 | 
						|
    
 | 
						|
    str.format("%06ld", _codcf);
 | 
						|
    record.overwrite(str,15);                    //Codice cliente/fornitore
 | 
						|
    
 | 
						|
    real imponibile (rmoviva.get_real(RMI_IMPONIBILE));
 | 
						|
    str.format("%011s", (const char*) imponibile.string());
 | 
						|
    record.overwrite(str,21);                    //Imponibile
 | 
						|
 | 
						|
    //Se trovo un codice iva composto da piu' di 2 cifre l'invio viene interrotto    
 | 
						|
    TString codiva (rmoviva.get(RMI_CODIVA));
 | 
						|
    if (codiva.len() > 2)
 | 
						|
      return error_box("Rilevato un codice IVA composto da 3 o piu' cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%02s", (const char*) codiva);
 | 
						|
    record.overwrite(str,32);                    //Codice iva
 | 
						|
    
 | 
						|
    real imposta (rmoviva.get_real(RMI_IMPOSTA));
 | 
						|
    str.format("%09s", (const char*) imposta.string());
 | 
						|
    record.overwrite(str,34);                    //Imposta
 | 
						|
    
 | 
						|
    int tipocr = rmoviva.get_int(RMI_TIPOCR);
 | 
						|
    str.format("%01d", tipocr);
 | 
						|
    record.overwrite(str,43);                    //Tipo costo/ricavo
 | 
						|
    
 | 
						|
    int tipodet = rmoviva.get_int(RMI_TIPODET);
 | 
						|
    str.format("%01d", tipodet);
 | 
						|
    record.overwrite(str,44);                    //Tipo detraibilita'
 | 
						|
    
 | 
						|
    int gruppo = rmoviva.get_int(RMI_GRUPPO);
 | 
						|
    if (gruppo > 99)
 | 
						|
      return error_box("Rilevato un gruppo composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%02d", gruppo);
 | 
						|
    record.overwrite(str,45);                    //Gruppo
 | 
						|
    
 | 
						|
    int conto = rmoviva.get_int(RMI_CONTO);
 | 
						|
    if (conto > 99)
 | 
						|
      return error_box("Rilevato un conto composto da 3 cifre in %07ld riga %03d: impossibile proseguire",nreg,nrig);
 | 
						|
    str.format("%02d", conto);
 | 
						|
    record.overwrite(str,47);                    //Conto
 | 
						|
    
 | 
						|
    long sottoc = rmoviva.get_long(RMI_SOTTOCONTO);
 | 
						|
    str.format("%06ld", sottoc);
 | 
						|
    record.overwrite(str,49);                    //Sottoconto
 | 
						|
    
 | 
						|
    TString data74terstr = _data74ter.string();
 | 
						|
    str = riconverti(data74terstr);
 | 
						|
    record.overwrite(str,55);                    //Data per registri 74 TER
 | 
						|
    
 | 
						|
    if (_ocfpi.not_empty())
 | 
						|
    {
 | 
						|
      str.format("%-.25s", (const char*) _ragsococc);
 | 
						|
      record.overwrite(str,61);                  //Ragione sociale cliente occasionale
 | 
						|
      
 | 
						|
      str.format("%-.22s", (const char*) _indocc);
 | 
						|
      record.overwrite(str,86);                  //indirizzo cliente occasionale
 | 
						|
      
 | 
						|
      str.format("%-.18s", (const char*) _localocc);
 | 
						|
      record.overwrite(str,108);                 //Localita cliente occasionale
 | 
						|
      
 | 
						|
      str.format("%-5s", (const char*) _capocc);
 | 
						|
      record.overwrite(str,126);                 //Codice avviamento postale cliente occasionale
 | 
						|
      
 | 
						|
      str.format("%-.2s", (const char*) _provocc);
 | 
						|
      record.overwrite(str,131);                 //Provincia cliente occasionale
 | 
						|
    }
 | 
						|
 | 
						|
    int tipoatt = rmoviva.get_int(RMI_TIPOATT);
 | 
						|
    str.format("%01d", tipoatt);
 | 
						|
    record.overwrite(str,133);                   //Tipo attivita'
 | 
						|
    
 | 
						|
    str.format("%011s", (const char*) _corrlire.string());
 | 
						|
    record.overwrite(str,135);                   //Corrispettivo in lire
 | 
						|
    
 | 
						|
    record.overwrite(_codvali,146);              //Codice valuta
 | 
						|
    
 | 
						|
    str.format("%011s", (const char*) _cambioi.string());
 | 
						|
    record.overwrite(str,149);                   //Cambio
 | 
						|
    
 | 
						|
    str.format("%014s", (const char*) _corrval.string());
 | 
						|
    record.overwrite(str,160);                   //Corrispettivo in valuta
 | 
						|
 | 
						|
    _numrec++;            
 | 
						|
    TString stringa;
 | 
						|
    stringa.format("%06ld", _numrec);
 | 
						|
    int posiz = _files.find("U");
 | 
						|
    _control_rec.overwrite(stringa,((posiz * 6) + 47));
 | 
						|
    _tras_file.write_control_rec(_control_rec,size);
 | 
						|
    _tras_file.close();
 | 
						|
    
 | 
						|
    _tras_file.open(_trasf,TRUE);
 | 
						|
    _tras_file.write_control_rec(record,size);
 | 
						|
    _tras_file.close();
 | 
						|
  } 
 | 
						|
  delete _prog;  
 | 
						|
 | 
						|
  //Inizializzo l'ultima sigla file elaborato su trasfer con la sigla del file successivo da inviare
 | 
						|
  //e inizializzo la chiave, altrimenti se si blocca l'invio subito dopo aver finito un file si rischia di 
 | 
						|
  //ritrasferire l'ultimo record quando si riparte; inoltre non si riesce a inviare il file successivo perche'
 | 
						|
  //la chiave e' compilata con i dati del file precedente.
 | 
						|
  _tras_file.open(_trasf);
 | 
						|
  leggi_record_controllo();
 | 
						|
  TString chiave,app,sigla;
 | 
						|
  app.format("%-15s", (const char*) chiave);
 | 
						|
  char sigla_p = _tras_file.ult_file()[0];
 | 
						|
  int posiz    = _files.find(sigla_p);
 | 
						|
  TString nuova_sigla = " ";
 | 
						|
  if (posiz < _files.len())
 | 
						|
    nuova_sigla = _files.mid(posiz+1,1);
 | 
						|
  
 | 
						|
  _control_rec.overwrite(nuova_sigla,240);
 | 
						|
  _control_rec.overwrite(app,241);
 | 
						|
  _tras_file.write_control_rec(_control_rec,size);
 | 
						|
  _tras_file.close();
 | 
						|
 | 
						|
  setta_tabella_ditta(m,"D",FALSE);
 | 
						|
  setta_parametri_record(m,"D");
 | 
						|
  
 | 
						|
  return TRUE;
 | 
						|
}
 | 
						|
 | 
						|
bool TInv_cont::menu(MENU_TAG m)
 | 
						|
{
 | 
						|
  if (m == BAR_ITEM(1))
 | 
						|
    return main_loop(); 
 | 
						|
  return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
int cg2900 (int argc, char* argv[])
 | 
						|
{                                
 | 
						|
  TInv_cont a;
 | 
						|
  
 | 
						|
  a.run(argc,argv, "Invio contabilita'");
 | 
						|
 | 
						|
  return TRUE;
 | 
						|
}
 |