// cglib04.h #include #include #include #include #include #include #include #include #include #include #include #include #include #define TEMP_MOV "tmov" #define TEMP_RMOV "trmov" #define TEMP_RMOVIVA "triva" #define SIZE 256 // Tracciato del record di controllo HIDDEN int pos[15] = {0,15,25,29,32,38,47,234,235,236,237,238,239,240,241}; const char* converti(TString& data); int fremove(const char* path); bool look_causale(const char* codcaus); bool format_if_zero(TString&, int); class TMappa_trc : public TAssoc_array { public : void leggi_modulo(); int from (const char* key); int to (const char* key); int logicnum (const char* key); const char* field_name (const char* key); int flag (const char* key); TMappa_trc() {}; }; class TTransfer_file { FILE* _trasfer; TArray _index; // TAssoc_array _fis_index; TMappa_trc _trc; TString _curfile; TString256 _control_rec; // Buffer per il record di controllo TString256 _record; // Buffer per il record corrente long _curpos; long _tot_rec; // Numero totale di record nel transfer int _nultras; // Numero ultimo trasferimento int _last_tab,_last_mov; TString16 _dataultras; TString16 _sigle_file; TString _nrec_file; TString _ult_file; TString _key; private: // Inizializza l'indice leggendo il record di controllo void fill_index(TString&,TString&); // Funzioni utilizzate da fcopytemp() void scrivi_nprog_testata(long numreg, long nprog_iva, TIsamtempfile& mov); void look_mov(long nr, const char* data74, long cf, TIsamtempfile& mov); void write_tmp_mov(TIsamtempfile& mov, TIsamtempfile& rmov, const TString& rec, const int nprog_mov); int dataes(const TDate&, int*, TDate&); void write_tmp_rmoviva(TIsamtempfile& rmov_iva, TIsamtempfile& mov, const TString& rec, const int nprog_iva); ///////////////////////////////////////////////////////////////////////////// public: const char* path (long codditta = 0); bool open (const char* path, bool create=FALSE); void close (); bool exist() const { return _trasfer != NULL; } long get_pos(const char* key); // Funzioni che agiscono sul record di controllo del file trasfer. bool read_control_rec(); // Legge il record bool write_control_rec(const char* str, const int size); // Scrive una stringa di lunghezza size int nultras () const { return _nultras; } // Ritorna il numero ultimo trasferimento const char* dataultras() const { return (const char*) _dataultras; } // Ritorna la data ultimo trasferimento const char* sigle_file() const { return (const char*) _sigle_file; } // Ritorna una stringa contenente le sigle dei file da ricevere const char* nrec_file () const { return (const char*) _nrec_file; } // Ritorna una stringa con il numero totale di record corrispondenti ad ogni sigla dei file da ricevere char flg_agg(); // Ritorna i flag tipo aggiornamento relativi alle tabelle bool numprot_att(); // Ritorna il flag riattribuzione numero protocollo su fatture attive bool numprot_pas(); // Ritorna il flag riattribuzione numero protocollo su fatture passive char flg_agg_IV(); // Ritorna il flag tipo aggiornamento classi piano dei conti const char* ult_file () const { return (const char*) _ult_file; } // Ritorna l'ultima sigla file elaborato const char* key () const { return (const char*) _key; } // Ritorna la chiave ultimo record elaborato const char* record () const { return (const char*) _control_rec; } // Ritorna il record di controllo del trasfer // Funzioni per il posizionamento e la gestione dei record del trasfer (escluso il record di controllo) // Legge il record del trasfer specificato da numrec int read_rec_trasfer(long numrec, int size=256); const char* read_rec () const { return (const char*) _record; } // Ritorna un record del trasfer // Scrive una stringa di lunghezza size nel campo specificato da fieldnum void writeat(const char* str,int size,int fieldnum,const char* file); void writeat(const char* str,int size,int fieldnum, const char* file, const long numrec); int write(long numrec, int size=SIZE); // Permette di posizionarsi all'interno del record sul campo specificato // da fieldnum sfruttando la Mappa precaricata int go2field(int fieldnum, const char* file=NULL, const long nrec=-1L, bool seek=TRUE); void go2rec (const long numrec); void readat(long recnum); // Si posiziona all'inizio del record specificato da numrec sfruttando l'array indice void put(const char* val, const char* file, int fieldnum,long recnum=-1L); int controllo_ripartenza(); // Funzioni per la gestione dell'array indice int last_tab() const { return _last_tab; } // Ritorna la posizione dell'ultima sigla relativa alle tabelle presente nella schiera delle sigle file int last_mov() const { return _last_mov; } // Ritorna la posizione dell'ultima sigla relativa ai movimenti presente nella schiera delle sigle file int num(char sigla); const char* name(int i); // Ritorna la sigla di quel file long nrec(int i); // Ritorna il numero di record di quel file int lenrec(int i); // Ritorna la lunghezza del record del trasfer corrispondente a quel file int lenrec(char sigla); // Ritorna la stessa cosa ma con la sigla invece del numero long start(int i); // Inizio del file numero i long start(char sigla); // Inizio del file sigla long end(int i); // Ritorna la posizione in byte corrispondente alla fine di quel file all'interno del trasfer long rec(int i); long tot_rec() const { return _tot_rec; } void annulla_classi(int g, int c,bool conto); // Copia il file trasfer creando tre isam_temp_file per i mov. di prima nota bool fcopytemp (const char*, const char*, bool); TMappa_trc& mappa() {return _trc; } TTransfer_file(); ~TTransfer_file(); };