#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ba3.h" #include "ba3800.h" TString256 tmp; class BA3800_application : public TPrintapp { struct bil_ivd { char sez; char let; char numr[5]; char num[4]; char gruppo[4]; char conto[4]; char sottoc[8]; }; bil_ivd* _bil; TTable* _tabivd; TLocalisamfile* _nditte; TLocalisamfile* _comuni; TLocalisamfile* _unloc; TLocalisamfile* _anag; TLocalisamfile* _pconti; TLocalisamfile* _clifo; TParagraph_string _descr; const char* _buff; TSort* _sort; TDate _datastampa; bool _diffprod_fatto,_risimp_fatto; TString _numr_tot,_num_tot,_numr,_numr_da_stamp,_num_da_stamp,_numr_stamp,_num_stamp;; char _sez_da_stamp,_let_da_stamp,_sez_stamp,_let_stamp,_sez_tot,_let_tot,_let,_sez; int _cont_let,_cont_numr,_cont_num,_cont_gcs,_num,_i; bool _reset_righe_stampa,_statopatr_no_stamp,_sbilancio_ordine; bool _totale_attivita_gia_stampato,_totale_passivita_gia_stampato; bool _sbilancio_patr_gia_stampato,_attivo_o_passivo; TString _causale_ap, _causale_chi, _totale; char _liv; public: bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; } virtual bool user_create() ; virtual bool user_destroy(); virtual bool set_print(int); virtual bool preprocess_page (int,int); virtual print_action postprocess_page (int,int); virtual void postclose_print (); virtual void set_page(int,int); void intestazione_ditta(); void intestazione_studio(); void stampa_totali_studio(); void stampa_totali_ditta(); bool preprocess_ditta(int); bool preprocess_studio(int); void setta_righe_studio(const char*); void setta_righe_ditta(const char*); void totale_numero_arabo(); void totale_numero_romano(); void totale_lettera(); void init_sort(); void crea_sort_tabella(); void crea_sort_piano_conti(); void scrivi_record(const TString&,const TString&,const TString&,int,int,int,long); void riempi_record(const TString&,const TString&,const TString&,int,int,int,long); void set_bil_key(bil_ivd* b, char sezione, char lettera, const char* numero_romano, int numero, bool conti_ordine = TRUE, int conto = 0, int gruppo = 0, long sottoconto = 0L); const char* descrizione_lettera(char, char); const char* descrizione_numeroromano(char, char, int); const char* descrizione_numero(char, char, int, int); const char* descrizione_sottoconto(int, int, long); void setta_righe_descr(TParagraph_string&,const TString&,const TString&); BA3800_application(char livello) : _liv(toupper(livello)), _descr("", 40) {} }; void BA3800_application::postclose_print() { if (_liv == 'D') delete _sort; } void BA3800_application::set_bil_key(bil_ivd* b, char sezione, char lettera, const char* numero_romano, int numero, bool conti_ordine, int gruppo, int conto, long sottoconto) { b->sez = sezione; //Se esiste solamente la sezione,significa che e' un conto d'ordine //Forzo la lettera della classe a Z, per ottenere, grazie //all'ordinamento del sort, i record dei conti d'ordine per ultimi b->let = (conti_ordine && lettera == '\0' && sezione < '3') ? 'Z' : lettera; strcpy(b->numr, numero_romano); sprintf(b->num , "%2d", numero); if (gruppo < 0) { strcpy(b->gruppo, "ZZZ"); strcpy(b->conto, "ZZZ"); strcpy(b->sottoc, "ZZZZZZ"); } else if (gruppo == 0) { strcpy(b->gruppo, " "); strcpy(b->conto, " "); strcpy(b->sottoc, " "); } else { sprintf(b->gruppo , "%3d", gruppo); sprintf(b->conto , "%3d", conto); sprintf(b->sottoc , "%6ld", sottoconto); } } void BA3800_application::scrivi_record(const TString& sez, const TString& let, const TString& numerorom,int numero, int g,int c,long s) { //Se esiste solamente la sezione,significa che e' un conto d'ordine //Forzo la lettera della classe a Z, per ottenere, grazie //all'ordinamento del sort, i record dei conti d'ordine per ultimi set_bil_key(_bil, sez[0], let[0], numerorom, numero, TRUE, g, c, s); _sort->sort ((const char*) _bil); } void BA3800_application::riempi_record(const TString& sez, const TString& let, const TString& numerorom,int numero, int g,int c,long s) { set_bil_key(_bil, sez[0], let[0], numerorom, numero, FALSE, g, c, s); _sort->sort ((const char*) _bil); } void BA3800_application::crea_sort_tabella() { TRecnotype recno_prec=0l, recno_curr=0l; TString codtab_prec; TTable tabivd(TAB_IVD); TRecfield codtab_curr(tabivd.curr(),"CODTAB"); TRecfield sezione (tabivd.curr(),"CODTAB",0,0); TRecfield lettera (tabivd.curr(),"CODTAB",1,1); TRecfield numerorom (tabivd.curr(),"CODTAB",2,5); TRecfield numero (tabivd.curr(),"CODTAB",6,7); int preclen; bool FINITO=FALSE; tabivd.first(); codtab_prec = tabivd.get("CODTAB"); // Compilo tanti record quante sono le classi IV direttiva trovate sulla // tabella %IVD, usando dei gruppi, conti e sottoconti fittizi. Successivamente // nel caso di stampa completa verranno stampati anche questi record; nel caso // di stampa non completa non verranno stampati. do { recno_prec = tabivd.recno(); tabivd.next(); if (tabivd.eof()) { tabivd.zero(); FINITO=TRUE; } recno_curr = tabivd.recno(); preclen = codtab_prec.len(); if (!strncmp(codtab_curr,codtab_prec,preclen)) codtab_prec = (const char *)codtab_curr; else { tabivd.readat(recno_prec); const char sez = *((const char*) sezione); const char let = *((const char*) lettera); TString16 nrom((const char*)numerorom); const int nu = (int) numero; set_bil_key(_bil, sez, let,(const char*)nrom, nu, FALSE,-1); _sort->sort ((const char*) _bil); tabivd.readat(recno_curr); codtab_prec = (const char *)codtab_curr; } } while (!FINITO); } // Passo al sort tutti i record presenti su piano dei conti, aventi la classe // IV direttiva CEE. void BA3800_application::crea_sort_piano_conti() { TLocalisamfile pconti(LF_PCON); TString sez,let,numerorom; TString sez_conto,let_conto,numr_conto; int num_conto, indbil; char sezione,lettera,tmcf; int numero,g,c; long s; bool classe_conto = FALSE; bool conto_dettagliato = FALSE; bool stsottbil; c = 0; num_conto = 0; tmcf = ' '; indbil = 0; for (pconti.first(); !pconti.eof(); pconti.next()) { // _prog->addstatus(1); g = pconti.get_int (PCN_GRUPPO); c = pconti.get_int (PCN_CONTO); s = pconti.get_long(PCN_SOTTOCONTO); sez = pconti.get(PCN_SEZIVD); let = pconti.get(PCN_LETTIVD); sezione = sez[0]; lettera = let[0]; numerorom = pconti.get(PCN_NUMRIVD); numero = pconti.get_int (PCN_NUMIVD); // Se si tratta di un conto e contiene la classe, allora lo passo al sort. // Gli eventuali sottoconti avranno la stessa classe. if ((g != 0) && (c != 0) && (s == 0)) { stsottbil = pconti.get_bool(PCN_STSOTTBIL); tmcf = pconti.get (PCN_TMCF)[0]; indbil = pconti.get_int (PCN_INDBIL); //Se sono nello stesso gruppo, ma ho un conto diverso da quello precedentemente //analizzato, e se questi contiene la classe IV dir. CEE, //allore devo controllare se va dettagliato (STSOTTBIL) if (sez != "0") { if (!stsottbil || tmcf == 'C' || tmcf == 'F') conto_dettagliato = FALSE; else conto_dettagliato = TRUE; sez_conto = sez; if (let != "") let_conto = let; else if ((sez == "1")||(sez == "2")) let_conto = "Z"; else let_conto = let; numr_conto = numerorom; num_conto = numero; riempi_record(sez_conto,let_conto,numr_conto,num_conto,g,c,0); classe_conto = TRUE; } else { classe_conto = FALSE; // Metto conto dettagliato = TRUE perche' potrebbero esserci dei sottoconti conto_dettagliato = TRUE; // di questo conto che hanno la classe e quindi vanno stampati. } } // Se si tratta di un sottoconto e contiene la classe, allora lo passo al sort. if ((g != 0) && (c != 0) && (s != 0)) { // classe_conto indica se il conto precedentemente letto conteneva // la classe. In caso affermativo anche questo sottoconto appena // letto avra' la stessa classe del conto. if (classe_conto) { if (conto_dettagliato) riempi_record(sez_conto,let_conto,numr_conto,num_conto,g,c,s); } else if (sez != "0") riempi_record(sez,let,numerorom,numero,g,c,s); } } } bool BA3800_application::set_print(int) { TMask msk("ba3800a"); const KEY tasto= msk.run(); if (tasto == K_ENTER) { _datastampa = msk.get(F_DATASTAMPA); _cont_let = 0; _cont_numr = 0; _cont_num = 0; _cont_gcs = 0; _totale = "XXXXXXXXXXX"; _sez_stamp = ' '; _let_stamp = ' '; _numr_stamp = ""; _num_stamp = ""; _sez_tot = ' '; _let_tot = ' '; _numr_tot = ""; _num_tot = ""; _statopatr_no_stamp = TRUE; _diffprod_fatto = TRUE; _risimp_fatto = TRUE; _totale_attivita_gia_stampato = FALSE; _totale_passivita_gia_stampato = FALSE; _sbilancio_ordine = FALSE; _sbilancio_patr_gia_stampato = FALSE; _attivo_o_passivo = FALSE; if (_liv == 'S') intestazione_studio(); else if (_liv == 'D') { init_sort(); crea_sort_tabella(); crea_sort_piano_conti(); _sort->endsort(); intestazione_ditta(); delete _bil; } return TRUE; } return FALSE; } void BA3800_application::totale_numero_arabo() { if (_cont_gcs != 0)//(_cont_gcs >= 2) { //Fai il totale del numero arabo e stampalo if (_num != 0) { set_row (_i,"@18gTotale@25g%2d@27g)", _num); set_row (_i++,"@86g%s", (const char*) _totale); } } } void BA3800_application::totale_numero_romano() { if (_cont_num != 0)//(_cont_num >= 2) { //Fai il totale del numero romano e stampalo int numeror = atoi(_numr); TString numrom = itor(numeror); if (numrom != "") { set_row (_i,"@14gTotale@21g%s", (const char*) numrom); set_row (_i++,"@86g%s", (const char*) _totale); } } } void BA3800_application::totale_lettera() { if (_cont_numr != 0)//(_cont_numr >= 2) { //Fai il totale della lettera e stampalo if (_let != ' ') { set_row (_i,"@3gTotale@10g%c@12g)", _let); set_row (_i++,"@86g%s", (const char*) _totale); } } } void BA3800_application::stampa_totali_studio() { bool gia_stampato_conto_ord = FALSE; TString16 diff_prod; TString16 ris_imp; diff_prod.format("%c%c",'9','B'); ris_imp.format ("%c%c%8s%2s",'9','E',"","21"); _num = atoi(_num_tot); _numr = _numr_tot; _let = _let_tot; if (_tabivd->eof()) { _num_tot = ""; _numr_tot = ""; _let_tot = ' '; _sez_tot = ' '; } if (_num_da_stamp!=_num_tot) { totale_numero_arabo(); if (_sez_stamp == '9') { TString16 classe; classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp); if (classe > ris_imp && _risimp_fatto) { if (_num_tot == "20" || _num_tot == "21") { set_row (_i,"@4gTotale delle partite straordinarie"); set_row (_i++,"@86g%s", (const char*) _totale); set_row (_i,"@4gRisultato prima delle imposte"); set_row (_i++,"@86g%s", (const char*) _totale); _risimp_fatto = FALSE; } } } _cont_gcs = 0; } if (_numr_da_stamp!=_numr_tot) { totale_numero_arabo(); totale_numero_romano(); _cont_gcs = 0; _cont_num = 0; } if (_let_da_stamp!=_let_tot) { if (_sez_stamp == '9') { TString16 classe; classe.format("%c%c%8s%2s",_sez_stamp,_let_stamp,(const char*)_numr_stamp,(const char*)_num_stamp); totale_numero_arabo(); totale_numero_romano(); if (_cont_numr != 0)//(_cont_numr >= 2) { //Fai il totale della lettera e stampalo if (_let_stamp == 'D') set_row (_i,"@4gTotale delle rettifiche"); else if (_let != ' ') if (_sez_stamp == '9' && _let_stamp != 'E') set_row (_i,"@3gTotale@10g%c@12g)", _let); else if (_sez_stamp != '9') set_row (_i,"@3gTotale@10g%c@12g)", _let); if (_let != ' ') { if (_sez_stamp == '9' && _let_stamp != 'E') set_row (_i++,"@86g%s", (const char*) _totale); else if (_sez_stamp != '9') set_row (_i++,"@86g%s", (const char*) _totale); } } if (classe > diff_prod && _diffprod_fatto) { if (_let_tot == 'A' || _let_tot == 'B') //Solo se esiste una delle due lettere { set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%s", (const char*) _totale); _diffprod_fatto = FALSE; } } } else { totale_numero_arabo(); totale_numero_romano(); totale_lettera(); } _cont_gcs = 0; _cont_num = 0; _cont_numr = 0; } if (_sez_da_stamp != _sez_tot) { totale_numero_arabo(); totale_numero_romano(); if (_cont_numr != 0)//(_cont_numr >= 2) { //Fai il totale della lettera e stampalo if (_let != ' ') { if (_sez_stamp == '9' && _let_stamp != 'E') { set_row (_i,"@3gTotale@10g%c@12g)", _let); set_row (_i++,"@86g%s", (const char*) _totale); } else if (_sez_stamp != '9') { set_row (_i,"@3gTotale@10g%c@12g)", _let); set_row (_i++,"@86g%s", (const char*) _totale); } } } if (_sez_stamp == '1') { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE ATTIVO"); set_row (_i++,"@86g%s", (const char*) _totale); } if (_sez_stamp == '2') //&& (_let_stamp != 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE PASSIVO"); set_row (_i++,"@86g%s", (const char*) _totale); } if (_sez_stamp == '2') { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i++,"@0gSALDO STATO PATRIMONIALE"); set_row (_i,"@0gSBILANCIO (ATTIVO - PASSIVO)"); set_row (_i++,"@86g%s", (const char*) _totale); } if (_sez_stamp == '9') { if (_tabivd->eof()) { if ((_let_stamp == 'A' || _let_stamp == 'B') && _diffprod_fatto)//Solo se esiste una delle due lettere { set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%s", (const char*) _totale); _diffprod_fatto = FALSE; } if (_risimp_fatto) { set_row (_i,"@4gRisultato prima delle imposte"); set_row (_i++,"@86g%s", (const char*) _totale); } } char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gRISULTATO CONTO ECONOMICO"); set_row (_i++,"@86g%s", (const char*) _totale); } _cont_gcs = 0; _cont_num = 0; _cont_numr = 0; _cont_let = 0; } } void BA3800_application::stampa_totali_ditta() { bool gia_stampato_conto_ord = FALSE; TString16 diff_prod; TString16 ris_imp; diff_prod.format("%c%c",'9','B'); ris_imp.format ("%c%c%8s%2s",'9','E',"","21"); _num = atoi(_num_tot); _numr = _numr_tot; _let = _let_tot; if (_buff == NULL) { _num_tot = ""; _numr_tot = ""; _let_tot = ' '; _sez_tot = ' '; } if ((_sez_stamp == '1' || _sez_stamp == '2') && _let_stamp != 'Z') _attivo_o_passivo = TRUE; if (_num_da_stamp!=_num_tot) { if (_let_stamp != 'Z') { if (_sez_stamp != '5') if (_cont_gcs != 0)//(_cont_gcs >= 2) { //Fai il totale del numero arabo e stampalo if (_num != 0) { set_row (_i,"@18gTotale@25g%2d@27g)", _num); set_row (_i++,"@86g%s", (const char*) _totale); } } } if (_sez_stamp == '9') { TString16 classe; classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp); if (classe > ris_imp && _risimp_fatto) { if (_num_tot == "20" || _num_tot == "21") { set_row (_i,"@4gTotale delle partite straordinarie"); set_row (_i++,"@86g%s", (const char*) _totale); set_row (_i,"@4gRisultato prima delle imposte"); set_row (_i++,"@86g%s", (const char*) _totale); _risimp_fatto = FALSE; } } } _cont_gcs = 0; } if (_numr_da_stamp!=_numr_tot) { if (_let_stamp != 'Z') { if (_sez_stamp != '5') { if (_cont_gcs != 0)//(_cont_gcs >= 2) { //Fai il totale del numero arabo e stampalo if (_num != 0) { set_row (_i,"@18gTotale@25g%2d@27g)", _num); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_num != 0)//(_cont_num >= 2) { //Fai il totale del numero romano e stampalo int numeror = atoi(_numr); TString numrom = itor(numeror); if (numrom != "") { set_row (_i,"@14gTotale@21g%s", (const char*) numrom); set_row (_i++,"@86g%s", (const char*) _totale); } } } } _cont_gcs = 0; _cont_num = 0; } if (_let_da_stamp!=_let_tot) { if (_sez_stamp == '9') { TString16 classe; classe.format("%c%c%8s%2s",_sez_stamp,_let_stamp,(const char*)_numr_stamp,(const char*)_num_stamp); if (_cont_gcs != 0)//(_cont_gcs >= 2) { //Fai il totale del numero arabo e stampalo if (_num != 0) { set_row (_i,"@18gTotale@25g%2d@27g)", _num); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_num != 0)//(_cont_num >= 2) { //Fai il totale del numero romano e stampalo int numeror = atoi(_numr); TString numrom = itor(numeror); if (numrom != "") { set_row (_i,"@14gTotale@21g%s", (const char*) numrom); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_numr != 0)//(_cont_numr >= 2) { //Fai il totale della lettera e stampalo if (_let_stamp == 'D') set_row (_i,"@4gTotale delle rettifiche"); else if (_let != ' ') if (_sez_stamp == '9' && _let_stamp != 'E') set_row (_i,"@3gTotale@10g%c@12g)", _let); else if (_sez_stamp != '9') set_row (_i,"@3gTotale@10g%c@12g)", _let); if (_let != ' ') { if (_sez_stamp == '9' && _let_stamp != 'E') set_row (_i++,"@86g%s", (const char*) _totale); else if (_sez_stamp != '9') set_row (_i++,"@86g%s", (const char*) _totale); } } if (classe > diff_prod && _diffprod_fatto) { if (_let_tot == 'A' || _let_tot == 'B') //Solo se esiste una delle due lettere { set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%s", (const char*)_totale); _diffprod_fatto = FALSE; } } } else { if (_let_stamp != 'Z') { if (_sez_stamp != '5') { if (_cont_gcs != 0)//(_cont_gcs >= 2) { //Fai il totale del numero arabo e stampalo if (_num != 0) { set_row (_i,"@18gTotale@25g%2d@27g)", _num); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_num != 0)//(_cont_num >= 2) { //Fai il totale del numero romano e stampalo int numeror = atoi(_numr); TString numrom = itor(numeror); if (numrom != "") { set_row (_i,"@14gTotale@21g%s", (const char*) numrom); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_numr != 0)//(_cont_numr >= 2) { //Fai il totale della lettera e stampalo if (_let != ' ') { set_row (_i,"@3gTotale@10g%c@12g)", _let); set_row (_i++,"@86g%s", (const char*) _totale); } } } } if ((_sez_stamp == '1')&&(_let_da_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE ATTIVO"); set_row (_i++,"@86g%s", (const char*) _totale); _totale_attivita_gia_stampato = TRUE; } if ((_sez_stamp == '2')&&(_let_da_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE PASSIVO"); set_row (_i++,"@86g%s", (const char*) _totale); _totale_passivita_gia_stampato = TRUE; } if ((_sez_stamp == '1')&&(_let_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE CONTI D' ORDINE ATTIVI"); set_row (_i++,"@86g%s", (const char*) _totale); gia_stampato_conto_ord = TRUE; } if ((_sez_stamp == '2')&&(_let_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE CONTI D' ORDINE PASSIVI"); set_row (_i++,"@86g%s", (const char*) _totale); _i++; gia_stampato_conto_ord = TRUE; if (!_attivo_o_passivo) { set_row (_i++,"@0gSALDO CONTI D' ORDINE"); set_row (_i,"@0gSBILANCIO"); set_row (_i++,"@86g%s", (const char*) _totale); _sbilancio_ordine = TRUE; _sbilancio_patr_gia_stampato = TRUE; } } } _cont_gcs = 0; _cont_num = 0; _cont_numr = 0; } if (_sez_da_stamp != _sez_tot) { if (_let_stamp != 'Z') { if (_sez_stamp != '5') { if (_cont_gcs != 0)//(_cont_gcs >= 2) { //Fai il totale del numero arabo e stampalo if (_num != 0) { set_row (_i,"@18gTotale@25g%2d@27g)", _num); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_num != 0)//(_cont_num >= 2) { //Fai il totale del numero romano e stampalo int numeror = atoi(_numr); TString numrom = itor(numeror); if (numrom != "") { set_row (_i,"@14gTotale@21g%s", (const char*) numrom); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_cont_numr != 0)//(_cont_numr >= 2) { //Fai il totale della lettera e stampalo if (_let != ' ') { if (_sez_stamp == '9' && _let_stamp != 'E') { set_row (_i,"@3gTotale@10g%c@12g)", _let); set_row (_i++,"@86g%s", (const char*) _totale); } else if (_sez_stamp != '9') { set_row (_i,"@3gTotale@10g%c@12g)", _let); set_row (_i++,"@86g%s", (const char*) _totale); } } } } } if (!_totale_attivita_gia_stampato) if ((_sez_stamp == '1') && (_let_stamp != 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE ATTIVO"); set_row (_i++,"@86g%s", (const char*) _totale); } if (!_totale_passivita_gia_stampato) if ((_sez_stamp == '2') && (_let_stamp != 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE PASSIVO"); set_row (_i++,"@86g%s", (const char*) _totale); } if (!gia_stampato_conto_ord) { if (_sez_stamp == '2') { if (!_sbilancio_patr_gia_stampato) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i++,"@0gSALDO STATO PATRIMONIALE"); set_row (_i,"@0gSBILANCIO (ATTIVO - PASSIVO)"); set_row (_i++,"@86g%s", (const char*) _totale); _sbilancio_patr_gia_stampato = TRUE; } } if ((_sez_stamp == '1')&&(_let_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE CONTI D' ORDINE ATTIVI"); set_row (_i++,"@86g%s", (const char*) _totale); } if ((_sez_stamp == '2')&&(_let_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE CONTI D' ORDINE PASSIVI"); set_row (_i++,"@86g%s", (const char*) _totale); _i++; if (!_sbilancio_ordine) { set_row (_i++,"@0g%c", app); set_row (_i++,"@0gSALDO CONTI D' ORDINE"); set_row (_i,"@0gSBILANCIO"); set_row (_i++,"@86g%s", (const char*) _totale); _sbilancio_ordine = TRUE; } } } if (_sez_stamp == '2') { char app = ' '; if (!_sbilancio_patr_gia_stampato) { set_row (_i++,"@0g%c", app); set_row (_i++,"@0gSALDO STATO PATRIMONIALE"); set_row (_i,"@0gSBILANCIO (ATTIVO - PASSIVO)"); set_row (_i++,"@86g%s", (const char*) _totale); } if (!_sbilancio_ordine) { set_row (_i++,"@0g%c", app); set_row (_i++,"@0gSALDO CONTI D' ORDINE"); set_row (_i,"@0gSBILANCIO"); set_row (_i++,"@86g%s", (const char*) _totale); } } if (_sez_stamp == '5') { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gTOTALE CONTI D' ORDINE"); set_row (_i++,"@86g%s", (const char*) _totale); } if (_sez_stamp == '9') { if (_tabivd->eof()) { if ((_let_stamp == 'A' || _let_stamp == 'B') && _diffprod_fatto)//Solo se esiste una delle due lettere { set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%s", (const char*) _totale); _diffprod_fatto = FALSE; } if (_risimp_fatto) { set_row (_i,"@4gRisultato prima delle imposte"); set_row (_i++,"@86g%s", (const char*) _totale); } } char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i,"@0gRISULTATO CONTO ECONOMICO"); set_row (_i++,"@86g%s", (const char*) _totale); } _cont_gcs = 0; _cont_num = 0; _cont_numr = 0; _cont_let = 0; } } print_action BA3800_application::postprocess_page(int file, int counter) { if (_liv == 'S') { if (_sez_da_stamp != _sez_stamp) { if (_sez_da_stamp == '9') { reset_print(); _i = 1; setta_righe_studio("CONTO ECONOMICO"); _reset_righe_stampa = FALSE; } } set_auto_ff(FALSE); if (_tabivd->eof()) return NEXT_PAGE; } else if (_liv == 'D') { struct bil_ivd* bil = (struct bil_ivd*) _buff; bil = (struct bil_ivd*) _buff; if (_sez_da_stamp != _sez_stamp) { if (_sez_da_stamp == '5') { reset_print(); _i = 1; setta_righe_ditta("CONTI D' ORDINE"); _reset_righe_stampa = FALSE; } if (_sez_da_stamp == '9') { reset_print(); _i = 1; setta_righe_ditta("CONTO ECONOMICO"); _reset_righe_stampa = FALSE; } } set_auto_ff(FALSE); if (_buff == NULL) return NEXT_PAGE; } return REPEAT_PAGE; } bool BA3800_application::preprocess_page(int file, int counter) { if (_liv == 'S') { if (preprocess_studio(counter)) return TRUE; else return FALSE; } else if (_liv == 'D') { if (preprocess_ditta(counter)) return TRUE; else return FALSE; } return TRUE; } bool BA3800_application::preprocess_studio(int counter) { bool fai = TRUE; TString saldostr,saldo_rafstr; bool conto_dettagliato = TRUE; if (counter == 0) { _tabivd->setkey(1); _tabivd->zero(); _tabivd->first(); reset_print(); _i = 1; } else _tabivd->next(); if (_reset_righe_stampa) { reset_print(); _i = 1; } else _reset_righe_stampa = TRUE; if (counter) { _sez_stamp = _sez_da_stamp; _let_stamp = _let_da_stamp; _numr_stamp = _numr_da_stamp; _num_stamp = _num_da_stamp; _sez_tot = _sez_da_stamp; _let_tot = _let_da_stamp; _numr_tot = _numr_da_stamp; _num_tot = _num_da_stamp; } if (_tabivd->eof()) { stampa_totali_studio(); _sez_da_stamp = ' '; _sez_stamp = ' '; return TRUE; } if (!_tabivd->eof()) { TString16 codtab; // _classe_da_stampare = format ("%1c%1c%8s%2d",bil->sez,bil->let,(const char*) bil->numr,bil->num); codtab = _tabivd->get("CODTAB"); _sez_da_stamp = codtab[0]; _let_da_stamp = codtab[1]; _numr_da_stamp = codtab.mid(2,4); _numr_da_stamp.ltrim(); _num_da_stamp = codtab.mid(6,2); _num_da_stamp.ltrim(); if (counter) stampa_totali_studio(); return TRUE; } else return FALSE; } bool BA3800_application::preprocess_ditta(int counter) { struct bil_ivd* bil = (struct bil_ivd*) _buff; int g,c; long s; bool conto_dettagliato = TRUE; if (!counter) { reset_print(); _i = 1; } if (_reset_righe_stampa) { reset_print(); _i = 1; } else _reset_righe_stampa = TRUE; if (counter) { _sez_stamp = bil->sez; _let_stamp = bil->let; _numr_stamp = bil->numr; _numr_stamp.ltrim(); _num_stamp = bil->num; _num_stamp.ltrim(); _sez_tot = bil->sez; _let_tot = bil->let; _numr_tot = bil->numr; _numr_tot.ltrim(); _num_tot = bil->num; _num_tot.ltrim(); } _buff = _sort->retrieve(); if (_buff == NULL) { stampa_totali_ditta(); _sez_da_stamp = ' '; _sez_stamp = ' '; return TRUE; } if (_buff != NULL) { bil = (struct bil_ivd*) _buff; _sez_da_stamp = bil->sez; _let_da_stamp = bil->let; _numr_da_stamp = bil->numr; _numr_da_stamp.ltrim(); _num_da_stamp = bil->num; _num_da_stamp.ltrim(); g = atoi(bil->gruppo); c = atoi(bil->conto); s = atol(bil->sottoc); if (counter) stampa_totali_ditta(); return TRUE; } else return FALSE; } void BA3800_application::set_page(int file, int counter) { if (_liv == 'S') { if (_sez_da_stamp != _sez_stamp) { if ((_sez_da_stamp=='1')||((_sez_da_stamp=='2')&&(_statopatr_no_stamp))) { setta_righe_studio ("STATO PATRIMONIALE"); _statopatr_no_stamp = FALSE; } if (_sez_da_stamp == '2') setta_righe_studio(""); if (_sez_da_stamp == '9') set_auto_ff(TRUE); } else { if (!_tabivd->eof()) setta_righe_studio(""); } } else if (_liv == 'D') { if (_sez_da_stamp != _sez_stamp) { if ((_sez_da_stamp=='1')||((_sez_da_stamp=='2')&&(_statopatr_no_stamp))) { setta_righe_ditta ("STATO PATRIMONIALE"); _statopatr_no_stamp = FALSE; } if (_sez_da_stamp == '2') setta_righe_ditta(""); if ((_sez_da_stamp == '5') || (_sez_da_stamp == '9')) set_auto_ff(TRUE); } else { if (_buff != NULL) setta_righe_ditta(""); } } } void BA3800_application::setta_righe_studio(const char * titolo) { int numeror, numero; TString numrom; TString descr_let,descr_numr,descr_num; bool stampa_classe = TRUE; TString lettera = "@1g)@3g%s"; TString lettera2 = "@3g%s"; TString numr = "@12g-@14g%s"; TString numr2 = "@14g%s"; TString num = "@15g)@18g%s"; TString num2 = "@18g%s"; numeror = atoi(_numr_da_stamp); numrom = itor(numeror); numero = atoi(_num_da_stamp); descr_let = descrizione_lettera(_sez_da_stamp,_let_da_stamp); descr_numr = descrizione_numeroromano(_sez_da_stamp,_let_da_stamp,numeror); descr_num = descrizione_numero(_sez_da_stamp,_let_da_stamp,numeror,numero); //Se la classe prelevata dal record corrente del sort e' diversa dalla classe //prelevata dal record precedente, allora stampo la nuova classe con i relativi //sottoconti. In caso contrario continuo a stampare solo i sottoconti. if (_sez_da_stamp != _sez_stamp) { set_row (_i++,"@0g%s", titolo); char app = ' '; set_row(_i++,"@0g%c", app); if (_sez_da_stamp == '1') { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i++,"@0gATTIVO"); set_row (_i++,"@0g%c", app); } else if (_sez_da_stamp == '2') { char app = ' '; set_row(_i++,"@0g%c", app); set_row (_i++,"@0gPASSIVO"); set_row(_i++,"@0g%c", app); } if (stampa_classe) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp== '9')) { _cont_let = 1; _cont_numr = 1; _cont_num = 1; _cont_gcs = 1; if (_let_da_stamp != ' ') { set_row(_i,"@0g%c", _let_da_stamp); _descr = (const char*) descr_let; setta_righe_descr(_descr,lettera,lettera2); // set_row(_i++,"@1g)@3g%s", (const char*) descr_let); } if (numrom != "") { set_row(_i,"@3g%8s", (const char*) numrom); _descr = (const char*) descr_numr; setta_righe_descr(_descr,numr,numr2); // set_row(_i++,"@12g-@14g%s", (const char*) descr_numr); } if (numero != 0) { set_row(_i,"@13g%s", (const char*) _num_da_stamp); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); // set_row(_i++,"@15g)@18g%s", (const char*) descr_num); } } } } else if ((_let_da_stamp!=_let_stamp)&&(_sez_da_stamp==_sez_stamp)) { if (stampa_classe) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9')) { _cont_numr = 1; _cont_num = 1; _cont_gcs = 1; if (_let_da_stamp != ' ') { set_row(_i,"@0g%c", _let_da_stamp); _descr = (const char*) descr_let; setta_righe_descr(_descr,lettera,lettera2); // set_row(_i++,"@1g)@3g%s", (const char*) descr_let); } if (numrom != "") { set_row(_i,"@3g%8s", (const char*) numrom); _descr = (const char*) descr_numr; setta_righe_descr(_descr,numr,numr2); //set_row(_i++,"@12g-@14g%s", (const char*) descr_numr); } if (numero != 0) { set_row(_i,"@13g%s", (const char*) _num_da_stamp); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); } } } } else if ((_numr_da_stamp!=_numr_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp)) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9')) { _cont_num = 1; _cont_gcs = 1; if (numrom != "") { set_row(_i,"@3g%8s", (const char*) numrom); _descr = (const char*) descr_numr; setta_righe_descr(_descr,numr,numr2); //set_row(_i++,"@12g-@14g%s", (const char*) descr_numr); } if (numero != 0) { set_row(_i,"@13g%s", (const char*) _num_da_stamp); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); } } } else if ((_num_da_stamp!=_num_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp)&&(_numr_da_stamp==_numr_stamp)) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9')) { set_row(_i,"@13g%s", (const char*) _num_da_stamp); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); _cont_gcs = 1; } } } void BA3800_application::setta_righe_ditta(const char* titolo) { struct bil_ivd* bil = (struct bil_ivd*) _buff; int numeror, numero, gruppo, conto; char sezione,lettera; long sottoc; TString numrom,numr; TString descr_let,descr_numr,descr_num,descr_sottoc,descr_classe; bool stampa_classe = TRUE; TString lettera1 = "@1g)@3g%s"; TString lettera2 = "@3g%s"; TString numr1 = "@12g-@14g%s"; TString numr2 = "@14g%s"; TString num = "@15g)@18g%s"; TString num2 = "@18g%s"; sezione = bil->sez; lettera = bil->let; numr = bil->numr; // numr.ltrim(); numeror = atoi(bil->numr); numrom = itor(numeror); numero = atoi(bil->num); // num = bil->num; gruppo = atoi(bil->gruppo); conto = atoi(bil->conto); sottoc = atoi(bil->sottoc); descr_let = descrizione_lettera(sezione,lettera); descr_numr = descrizione_numeroromano(sezione,lettera,numeror); descr_num = descrizione_numero(sezione,lettera,numeror,numero); descr_sottoc = descrizione_sottoconto(gruppo,conto,sottoc); //Se la classe prelevata dal record corrente del sort e' diversa dalla classe //prelevata dal record precedente, allora stampo la nuova classe con i relativi //sottoconti. In caso contrario continuo a stampare solo i sottoconti. if (_sez_da_stamp != _sez_stamp) { set_row (_i++,"@0g%s", titolo); char app = ' '; set_row(_i++,"@0g%c", app); if ((_sez_da_stamp == '1')&&(_let_da_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i++,"@0gCONTI D' ORDINE ATTIVI"); set_row (_i++,"@0g%c", app); stampa_classe = FALSE; } else if ((_sez_da_stamp == '1')&&(_let_da_stamp != 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i++,"@0gATTIVO"); set_row (_i++,"@0g%c", app); } if ((_sez_da_stamp == '2')&&(_let_da_stamp == 'Z')) { char app = ' '; set_row(_i++,"@0g%c", app); set_row (_i++,"@0gCONTI D' ORDINE PASSIVI"); set_row(_i++,"@0g%c", app); stampa_classe = FALSE; } else if ((_sez_da_stamp == '2')&&(_let_da_stamp != 'Z')) { char app = ' '; set_row(_i++,"@0g%c", app); set_row (_i++,"@0gPASSIVO"); set_row(_i++,"@0g%c", app); } if (stampa_classe) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp== '9')) { //set_row(_i++,"@0g%s", (const char*) _descr_sez); _cont_let = 1; _cont_numr = 1; _cont_num = 1; _cont_gcs = 1; if (lettera != ' ') { set_row(_i,"@0g%c", bil->let); _descr = (const char*) descr_let; setta_righe_descr(_descr,lettera1,lettera2); //set_row(_i++,"@1g)@3g%s", (const char*) descr_let); } if (numrom != "") { set_row(_i,"@3g%8s", (const char*) numrom); _descr = (const char*) descr_numr; setta_righe_descr(_descr,numr1,numr2); //set_row(_i++,"@12g-@14g%s", (const char*) descr_numr); } if (numero != 0) { set_row(_i,"@13g%s", bil->num); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); } } } } else if ((_let_da_stamp!=_let_stamp)&&(_sez_da_stamp==_sez_stamp)) { if ((_sez_da_stamp == '1')&&(_let_da_stamp == 'Z')) { char app = ' '; set_row (_i++,"@0g%c", app); set_row (_i++,"@0gCONTI D' ORDINE ATTIVI"); set_row (_i++,"@0g%c", app); stampa_classe = FALSE; } if ((_sez_da_stamp == '2')&&(_let_da_stamp == 'Z')) { char app = ' '; set_row(_i++,"@0g%c", app); set_row (_i++,"@0gCONTI D' ORDINE PASSIVI"); set_row(_i++,"@0g%c", app); stampa_classe = FALSE; } if (stampa_classe) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9')) { set_row(_i,"@0g%c", bil->let); _descr = (const char*) descr_let; setta_righe_descr(_descr,lettera1,lettera2); //set_row(_i++,"@1g)@3g%s", (const char*) descr_let); //_cont_let += 1; _cont_numr = 1; _cont_num = 1; _cont_gcs = 1; if (numrom != "") { set_row(_i,"@3g%8s", (const char*) numrom); _descr = (const char*) descr_numr; setta_righe_descr(_descr,numr1,numr2); //set_row(_i++,"@12g-@14g%s", (const char*) descr_numr); } if (numero != 0) { set_row(_i,"@13g%s", bil->num); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); } } } } else if ((_numr_da_stamp!=_numr_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp)) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9')) { set_row(_i,"@3g%8s", (const char*) numrom); _descr = (const char*) descr_numr; setta_righe_descr(_descr,numr1,numr2); //set_row(_i++,"@12g-@14g%s", (const char*) descr_numr); //_cont_numr += 1; //_cont_numr = 1; _cont_num = 1; _cont_gcs = 1; if (numero != 0) { set_row(_i,"@13g%s", bil->num); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); } } } else if ((_num_da_stamp!=_num_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp)&&(_numr_da_stamp==_numr_stamp)) { if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9')) { set_row(_i,"@13g%s", bil->num); _descr = (const char*) descr_num; setta_righe_descr(_descr,num,num2); //set_row(_i++,"@15g)@18g%s", (const char*) descr_num); //_cont_num += 1; _cont_gcs = 1; } } if (bil->gruppo[0] != 'Z') { _cont_gcs += 1; set_row (_i,"@18g%s", bil->gruppo); set_row (_i,"@22g%s", bil->conto); set_row (_i,"@26g%s", bil->sottoc); set_row (_i,"@33g%s", (const char*) descr_sottoc); set_row (_i,"@86g%s", (const char*) _totale); _i++; } } void BA3800_application::setta_righe_descr(TParagraph_string& str,const TString& formato,const TString& formato2) { const char* r; int i = 1; while ((r = str.get()) != NULL) { if (i == 1) set_row (_i,formato, r); else if (i > 1) set_row (_i,formato2,r); _i++; i++; } } void BA3800_application::intestazione_ditta() { TString datastampastr; TString sep(132),sep1(147); TString app(8); TLocalisamfile nditte (LF_NDITTE); TLocalisamfile comuni (LF_COMUNI); TLocalisamfile unloc (LF_UNLOC); TLocalisamfile anag (LF_ANAG); TString codice_ditta,ragsoc,indulc,civulc,capulc,com,prov,comulc; TString cofi,paiv,tipoa,codanagr; reset_header(); nditte.setkey(1); codice_ditta << get_firm(); nditte.zero(); nditte.put(NDT_CODDITTA,codice_ditta); nditte.read(); app = nditte.get(NDT_CODDITTA); ragsoc = nditte.get(NDT_RAGSOC); tipoa = nditte.get(NDT_TIPOA); codanagr = nditte.get(NDT_CODANAGR); unloc.setkey(1); unloc.zero(); unloc.put(ULC_CODDITTA,app); unloc.put(ULC_CODULC,"1"); unloc.read(); indulc = unloc.get(ULC_INDULC); civulc = unloc.get(ULC_CIVULC); capulc = unloc.get(ULC_CAPULC); comulc = unloc.get(ULC_COMULC); comuni.setkey(1); comuni.zero(); comuni.put(COM_COM,comulc); comuni.read(); com = comuni.get(COM_DENCOM); prov = comuni.get(COM_PROVCOM); anag.setkey(1); anag.zero(); anag.put(ANA_TIPOA,tipoa); anag.put(ANA_CODANAGR,codanagr); anag.read(); cofi = anag.curr().get(ANA_COFI); paiv = anag.curr().get(ANA_PAIV); set_header (1, "@0gDITTA@6g%-5s", (const char*) codice_ditta); set_header (1, "@12g%-45s", (const char*) ragsoc); set_header (1, "@59g%-25s", (const char*) indulc); set_header (1, "@86g%-9s", (const char*) civulc); set_header (1, "@97g%-5s", (const char*) capulc); set_header (1, "@103g%-25s", (const char*) com); set_header (1, "@129g%-3s", (const char*) prov); sep << "Pag. @#"; sep.right_just(132); set_header(2,(const char*) sep); datastampastr = _datastampa.string(); set_header (2,"@0gPartita iva@12g%-11s", (const char*) paiv); set_header (2,"@30gCodice fiscale@45g%-16s", (const char*) cofi); set_header (2,"@105gData@110g%s",(const char*) datastampastr); set_header (3,"@0gSTAMPA TABELLA IV DIRETTIVA"); sep.fill('-'); //Stampa 132 - (sep(132)) set_header (4, (const char *) sep); } void BA3800_application::intestazione_studio() { TString sep(132); TString datastampastr; reset_header(); sep << "Pag. @#"; sep.right_just(132); set_header(1,(const char*) sep); set_header (1,"@0gStudio"); //set_header (1,"Nome dello studio"); datastampastr = _datastampa.string(); set_header (1,"@105gData@110g%s",(const char*) datastampastr); set_header (2,"@0gSTAMPA TABELLA IV DIRETTIVA"); sep.fill('-'); //Stampa 132 - (sep(132)) set_header (3, (const char *) sep); } const char* BA3800_application::descrizione_lettera(char sezione, char lettera) { TTable tabivd(TAB_IVD); TString dep, dep2; tabivd.zero(); dep = format("%1c%1c", sezione, lettera); tabivd.put("CODTAB", dep); tabivd.read(); dep2 = tabivd.get("CODTAB"); if (dep == dep2) tmp = tabivd.get("S0"); else tmp = ""; return tmp; } const char* BA3800_application::descrizione_numeroromano(char sezione, char lettera, int numr) { TTable tabivd(TAB_IVD); TString dep, dep2; tabivd.zero(); if (numr != 0) dep = format("%1c%1c%04d", sezione, lettera, numr); else dep = format("%c%c ", sezione, lettera); tabivd.put("CODTAB", dep); tabivd.read(); dep2 = tabivd.get("CODTAB"); if (dep == dep2) tmp = tabivd.get("S0"); else tmp = ""; return tmp; } const char* BA3800_application::descrizione_numero(char sezione, char lettera, int numr, int numero) { TTable tabivd(TAB_IVD); TString dep,dep2; tabivd.zero(); if (numr != 0) dep = format("%1c%1c%04d%02d",sezione, lettera, numr, numero); else dep = format("%c%c %02d",sezione,lettera,numero); tabivd.put("CODTAB", dep); tabivd.read(); dep2 = tabivd.get("CODTAB"); if (dep == dep2) tmp = tabivd.get("S0"); else tmp = ""; return tmp; } const char* BA3800_application::descrizione_sottoconto(int gruppo, int conto, long sottoc) { TLocalisamfile pconti (LF_PCON); pconti.zero(); pconti.put(PCN_GRUPPO , gruppo); if (conto != 0) pconti.put(PCN_CONTO , conto ); if (sottoc != 0) pconti.put(PCN_SOTTOCONTO, sottoc); pconti.read(); if (pconti.bad()) pconti.zero(); tmp = pconti.get(PCN_DESCR); return tmp; } void BA3800_application::init_sort() { _bil = new bil_ivd; _sort = new TSort (sizeof(bil_ivd)); _sort -> addsortkey ((char*)&(_bil->sez) - (char*)&(_bil->sez),1); _sort -> addsortkey ((char*)&(_bil->let) - (char*)&(_bil->sez),1); _sort -> addsortkey ((char*)&(_bil->numr) - (char*)&(_bil->sez),4); _sort -> addsortkey ((char*)&(_bil->num) - (char*)&(_bil->sez),2); _sort -> addsortkey ((char*)&(_bil->gruppo) - (char*)&(_bil->sez),3); _sort -> addsortkey ((char*)&(_bil->conto) - (char*)&(_bil->sez),3); _sort -> addsortkey ((char*)&(_bil->sottoc) - (char*)&(_bil->sez),6); _sort->init(); } bool BA3800_application::user_create() { _nditte = new TLocalisamfile (LF_NDITTE); _comuni = new TLocalisamfile (LF_COMUNI); _unloc = new TLocalisamfile (LF_UNLOC); _anag = new TLocalisamfile (LF_ANAG); _pconti = new TLocalisamfile (LF_PCON); _clifo = new TLocalisamfile (LF_CLIFO); _tabivd = new TTable (TAB_IVD); return TRUE; } bool BA3800_application::user_destroy() { delete _tabivd; delete _nditte; delete _comuni; delete _unloc; delete _anag; delete _pconti; delete _clifo; return TRUE; } int ba3800 (int argc, char* argv[]) { BA3800_application a(*argv[2]); a.run(argc, argv, "Stampa Tabella IV Direttiva CEE"); return 0; }