//Versione dei mastrini aggiornata con le modifiche del periodo 18 Apr - 27 Apr 1995 //Le modifiche riguardano: // - Stampa due mastrini per pagina e conseguente numerazione. // - Stampa mastrini in continuo e relativa numerazione. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "cg3.h" #include "cg3200.h" #include "cglib.h" #include "cglib04.h" #include "cglib03.h" bool sottoc_handler_ini (TMask_field& f, KEY k); bool sottoc_handler_fine (TMask_field& f, KEY k); class TMastrini_application : public TPrintapp { static bool data_inizio (TMask_field& f, KEY k); static bool data_fine (TMask_field& f, KEY k); static bool gruppo_hnd (TMask_field& f, KEY k); static bool contoi_hnd (TMask_field& f, KEY k); static bool contof_hnd (TMask_field& f, KEY k); friend bool sottoc_handler_ini (TMask_field& f, KEY k); friend bool sottoc_handler_fine (TMask_field& f, KEY k); TDociva_array _b; TRelation* _rel; TMask* _msk; TTable* _tabivd, * _tabtpd, * _tabreg, * _tabesc; TLocalisamfile* _mov; TLocalisamfile* _nditte; TLocalisamfile* _unloc; TLocalisamfile* _comuni; TLocalisamfile* _clifo; TLocalisamfile* _caus; TSaldo* _sld; TParagraph_string* _d18,* _d23,* _d30; TArray _riga, _lista; TDate _data_ini,_data_fine,_data_finese,_data_finesesucc,_ultima_data_reg; TDate _datareg,_datadoc,_data_inizioese,_datareg_stampa,_inizioes; int _cur1,_gruppo,_conto,_numcarat,_stampanum,_numivd,_annoiva; int _numrig,_natdoc,_tipo,_tipostampa,_g_prec,_c_prec,_numrivd_int; real _progredare,_progreavere,_totprogre_dare_al,_totprogre_avere_al; real _totprogre_dare,_totprogre_avere,_importo; real _riporto_dare,_riporto_avere,_riporto_parziale_dare,_riporto_parziale_avere; real _totale_periodo_dare,_totale_periodo_avere,_totale_prima_dare,_totale_prima_avere; real _saldo_periodo,_saldo_progre,_saldo_progre_al,_saldo_progre_prec; real _saldo_movimenti,_saldo_progressivi,_totale_saldo; TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc; long _codice_ditta,_s_prec; TString _tipodoc,_codcaus,_descrcaus,_descrdociva,_regiva,_g_contr,_c_contr,_s_contr; char _sezivd,_lettivd; TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd,_descr; TString _dataregs, _datadocs; int _gruppocontr,_contocontr,_nummast,_pagina; long _sottocontocontr; bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov; bool _stampato; int _annomsk,_annoesmsk,_annoes,_annomsksucc,_tipo_mask,_anno_ghost; int _anno_corrente,_anno_precedente,_indbil,_numero_pag; long _sottoc,_numreg,_numgio,_protiva; bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare; bool _cambia_mastrino,_gia_stampata_intestazione; char _tmcf,_tipo_contr; TDate _dataregrmov; int _gruppof,_contof; long _sottocf; TString _dataregrmovstring,_importo_str,_saldo_movimenti_str,_saldo_progressivi_str; int _rw, _conta_mastrini, _indice_array, _item, _item_lista, _indice_lista; int _ddociva_len; protected: virtual bool user_create() ; virtual bool user_destroy(); virtual bool set_print(int m); virtual bool preprocess_print(int file, int counter); virtual bool preprocess_page (int,int); virtual print_action postprocess_page (int,int); virtual print_action postprocess_print(int,int); virtual void preprocess_header(); virtual void set_page(int,int); virtual void process_link(int id, const char* txt); public: TDate _inizioEs,_fineEs; void ricerca_clifo(); void ricerca_gruppo(); int ricerca_clifo(int riga); int ricerca_gruppo(int riga); void calcola_progressivi(); void calcola_progressivi_al(); void stampa_progressivi(); int stampa_progressivi(int start_riga); void stampa_progre_riporto(); int stampa_progre_riporto(int start_riga); void documenti_iva(); void ricerca_regiva(); void descrizione_causale(); void saldi_zero(); int crea_intestazione(int riga); void crea_intestazione(); void fai_stampa132(); void fai_stampa198(); void stampa_totali132(); void stampa_totali198(); void stampa_totali132_II(); void stampa_totali198_II(); void carica_array_totali132(); void carica_array_totali198(); void stampa_totaliiva(); void ricerca_classe_IV(bool scelta); void data_fine_esercizio(int); const char* descrizione_gruppo(); const char* descrizione_conto(); const char* descrizione_sottoconto(); const char* descrizione_classe(char,char,int,int); bool almeno_un_record(); void ricerca_dati_ditta(); void conto(int,int,bool); bool check_ordine(TMask_field& f, KEY k); void setta_riga (int r, TString riga); int righe_rimaste_da_stampare(); TMastrini_application() {} }; HIDDEN TMastrini_application& app() { return (TMastrini_application&) main_app(); } int TMastrini_application::righe_rimaste_da_stampare() { int righe_rimaste = 0; if (_nummast == 2) { if (printer().rows_left() != 0) { if ( (_conta_mastrini % 2) != 0) { if ( (printer().formlen() % 2) != 0) righe_rimaste = printer().rows_left() - (printer().formlen() / 2) + 1; //- 33; else righe_rimaste = printer().rows_left() - (printer().formlen() / 2); } else righe_rimaste = printer().rows_left(); } else { if ( (_conta_mastrini % 2) != 0) righe_rimaste = printer().formlen() / 2; //32; else { if ( (printer().formlen() % 2) != 0) righe_rimaste = (printer().formlen() / 2) + 1; //33; else righe_rimaste = printer().formlen / 2; } } } return righe_rimaste; } void TMastrini_application::process_link(int id, const char* txt) { const char* const app = "cg2 -0"; TToken_string ss(10); ss.add("1"); ss.add(txt); TMessage fs(cmd2name(app), MSG_LN, ss); fs.send(); TExternal_app pn(app); pn.run(); } bool sottoc_handler_ini(TMask_field& f, KEY key) { const short id = f.dlg(); TString ds; TString80 rs; bool warning; TLocalisamfile pconti (LF_PCON); int conto; const int gruppo = f.mask().get_int(F_GRUPPOINI); if (id == F_SOTTOCINI_CONTO) conto = f.mask().get_int(F_CONTOINI_CONTO); else if (id == F_SOTTOCINI_CLIENTE) conto = f.mask().get_int(F_CONTOINI_CLIENTE); else if (id == F_SOTTOCINI_FORN) conto = f.mask().get_int(F_CONTOINI_FORN); const long sottoconto = f.mask().get_long(id); if ( key == K_ENTER ) { if (sottoconto != 0 && conto == 0) return f.warning_box("Manca il CONTO"); if (conto != 0 && gruppo == 0) return f.warning_box("Manca il GRUPPO"); } if ( key == K_TAB && f.mask().is_running()) { if (id == F_SOTTOCINI_CONTO) { pconti.zero(); pconti.put(PCN_GRUPPO, gruppo) ; pconti.put(PCN_CONTO, conto); pconti.put(PCN_SOTTOCONTO, sottoconto); pconti.setkey(1); pconti.read(_isequal, _nolock); if (pconti.good()) { ds = pconti.get(PCN_DESCR); warning = FALSE; } else { ds = ""; warning = TRUE; } f.mask().set(F_DESCRINI_CONTO, ds); f.mask().set(F_DESCRINI_CLIENTE, ds); f.mask().set(F_DESCRINI_FORN, ds); if (warning) return f.warning_box("Sottoconto inesistente"); } else if (id == F_SOTTOCINI_CLIENTE || id == F_SOTTOCINI_FORN) { char tipo = id == F_SOTTOCINI_CLIENTE ? 'C' : 'F'; TLocalisamfile clifo (LF_CLIFO); if (sottoconto != 0) { clifo.zero(); clifo.put(CLI_TIPOCF,tipo); clifo.put(CLI_CODCF, sottoconto) ; clifo.setkey(1); if (clifo.read(_isequal, _nolock) == NOERR) { rs = clifo.get(CLI_RAGSOC); warning = FALSE; } else { rs = ""; warning = TRUE; } f.mask().set(F_DESCRINI_CLIENTE, rs); f.mask().set(F_DESCRINI_FORN, rs); if (warning) return f.warning_box("Anagrafica inesistente"); } } } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // Inizio modifica del 02-05-95 riguardo controlli di validita' su gruppo, // // conto e sottoconto iniziale e finale. // ///////////////////////////////////////////////////////////////////////////// bool sottoc_handler_fine(TMask_field& f, KEY key) { const short id = f.dlg(); int conto; TString ds; TString80 rs; bool warning; TLocalisamfile pconti (LF_PCON); const int gruppo = f.mask().get_int(F_GRUPPOFINE); if (id == F_SOTTOCFINE_CONTO) conto = f.mask().get_int(F_CONTOFINE_CONTO); else if (id == F_SOTTOCFINE_CLIENTE) conto = f.mask().get_int(F_CONTOFINE_CLIENTE); else if (id == F_SOTTOCFINE_FORN) conto = f.mask().get_int(F_CONTOFINE_FORN); const long sottoconto = f.mask().get_long(id); if ( key == K_ENTER ) { if (sottoconto != 0 && conto == 0) return f.warning_box("Manca il CONTO"); if (conto != 0 && gruppo == 0) return f.warning_box("Manca il GRUPPO"); if (!app().check_ordine(f,key)) return FALSE; } if ( key == K_TAB && f.mask().is_running()) { if (id == F_SOTTOCFINE_CONTO) { pconti.zero(); pconti.put(PCN_GRUPPO, gruppo) ; pconti.put(PCN_CONTO, conto); pconti.put(PCN_SOTTOCONTO, sottoconto); pconti.setkey(1); pconti.read(_isequal, _nolock); if (pconti.good()) { ds = pconti.get(PCN_DESCR); warning = FALSE; } else { ds = ""; warning = TRUE; } f.mask().set(F_DESCRFINE_CONTO, ds); f.mask().set(F_DESCRFINE_CLIENTE, ds); f.mask().set(F_DESCRFINE_FORN, ds); if (warning) return f.warning_box("Sottoconto inesistente"); } else if (id == F_SOTTOCFINE_CLIENTE || id == F_SOTTOCFINE_FORN) { char tipo = id == F_SOTTOCFINE_CLIENTE ? 'C' : 'F'; TLocalisamfile clifo (LF_CLIFO); if (sottoconto != 0) { clifo.zero(); clifo.put(CLI_TIPOCF,tipo); clifo.put(CLI_CODCF, sottoconto) ; clifo.setkey(1); if (clifo.read(_isequal, _nolock) == NOERR) { rs = clifo.get(CLI_RAGSOC); warning = FALSE; } else { rs = ""; warning = TRUE; } f.mask().set(F_DESCRFINE_CLIENTE, rs); f.mask().set(F_DESCRFINE_FORN, rs); if (warning) return f.warning_box("Anagrafica inesistente"); } } } return TRUE; } bool TMastrini_application::gruppo_hnd (TMask_field& f, KEY k) { if (k == K_ENTER) { int gruppof = f.mask().get_int(F_GRUPPOFINE); if (gruppof == 0) return TRUE; int gruppoi = f.mask().get_int(F_GRUPPOINI); if (gruppoi > gruppof) return f.error_box("Il gruppo di partenza deve essere inferiore o uguale al gruppo di arrivo"); } return TRUE; } bool TMastrini_application::contoi_hnd (TMask_field& f, KEY k) { TLocalisamfile pconti (LF_PCON); TString ds; const short id = f.dlg(); if (k == K_TAB && f.mask().is_running()) { int gruppo = f.mask().get_int(F_GRUPPOINI); int conto = f.mask().get_int(id); if (gruppo != 0 && conto != 0) { bool warning; char tipomsk = f.mask().get(F_TIPOCF_INI)[0]; pconti.zero(); pconti.put(PCN_GRUPPO, gruppo) ; pconti.put(PCN_CONTO, conto); pconti.setkey(1); pconti.read(_isequal, _nolock); if (pconti.good()) { char tipo = pconti.get_char(PCN_TMCF); if (tipomsk != tipo) return f.warning_box("Conto inesistente"); ds = pconti.get(PCN_DESCR); warning = FALSE; } else { ds = ""; warning = TRUE; } f.mask().set(F_DESCRINI_CLIENTE, ds); f.mask().set(F_DESCRINI_FORN, ds); f.mask().set(F_DESCRINI_CONTO, ds); if (warning) return f.warning_box("Conto inesistente"); } else { ds = ""; f.mask().set(F_DESCRINI_CLIENTE, ds); f.mask().set(F_DESCRINI_FORN, ds); f.mask().set(F_DESCRINI_CONTO, ds); } } return TRUE; } bool TMastrini_application::contof_hnd (TMask_field& f, KEY k) { TLocalisamfile pconti (LF_PCON); TString ds; const short id = f.dlg(); if (k == K_ENTER) { int gruppof = f.mask().get_int(F_GRUPPOFINE); if (gruppof == 0) return TRUE; int gruppoi = f.mask().get_int(F_GRUPPOINI); if (gruppoi < gruppof) return TRUE; int contof = f.mask().get_int(id); int contoi; char tipo = f.mask().get(F_TIPOCF_INI)[0]; if (tipo == '\0') contoi = f.mask().get_int(F_CONTOINI_CONTO); else if (tipo == 'C') contoi = f.mask().get_int(F_CONTOINI_CLIENTE); else if (tipo == 'F') contoi = f.mask().get_int(F_CONTOINI_FORN); if (contoi > contof) return f.error_box("Il conto di partenza deve essere inferiore o uguale al conto di arrivo"); } if (k == K_TAB && f.mask().is_running()) { int gruppo = f.mask().get_int(F_GRUPPOFINE); int conto = f.mask().get_int(id); if (gruppo != 0 && conto != 0) { bool warning; char tipomsk = f.mask().get(F_TIPOCF_FINE)[0]; pconti.zero(); pconti.put(PCN_GRUPPO, gruppo) ; pconti.put(PCN_CONTO, conto); pconti.setkey(1); pconti.read(_isequal, _nolock); if (pconti.good()) { char tipo = pconti.get_char(PCN_TMCF); if (tipomsk != tipo) return f.warning_box("Conto inesistente"); ds = pconti.get(PCN_DESCR); warning = FALSE; } else { ds = ""; warning = TRUE; } f.mask().set(F_DESCRFINE_CLIENTE, ds); f.mask().set(F_DESCRFINE_FORN, ds); f.mask().set(F_DESCRFINE_CONTO, ds); if (warning) return f.warning_box("Conto inesistente"); } else { ds = ""; f.mask().set(F_DESCRFINE_CLIENTE, ds); f.mask().set(F_DESCRFINE_FORN, ds); f.mask().set(F_DESCRFINE_CONTO, ds); } } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // FINE MODIFICA DEL 02-05-95 // ///////////////////////////////////////////////////////////////////////////// bool TMastrini_application::check_ordine(TMask_field& f, KEY k) { int gruppof = f.mask().get_int(F_GRUPPOFINE); if (gruppof == 0) return TRUE; int gruppoi = f.mask().get_int(F_GRUPPOINI); if (gruppoi < gruppof) return TRUE; int contof = f.mask().get_int(F_CONTOFINE_CONTO); int contoi = f.mask().get_int(F_CONTOINI_CONTO); if (contoi < contof) return TRUE; long sottocf = f.mask().get_long(F_SOTTOCFINE_CONTO); long sottoci = f.mask().get_long(F_SOTTOCINI_CONTO); if (sottoci > sottocf) return f.error_box("Il sottoconto di partenza deve essere inferiore o uguale al sottoconto di arrivo"); return TRUE; } //Questa funzione restituisce vero se il record su piano dei conti ha almeno un //record figlio (e che soddisfa la condizione riguardante la data di registr.). //Viene successivamente utilizzata per stampare l'intestazione (e i totali) //oppure no bool TMastrini_application::almeno_un_record() { bool trovato=FALSE; long record,sottoc; int gruppo,conto; TDate datareg, datacomp; TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); if (current_cursor()->is_first_match(LF_RMOV)) { record = rmov.recno(); rmov.zero(); rmov.put(RMV_GRUPPO, _gruppo); rmov.put(RMV_CONTO, _conto); rmov.put(RMV_SOTTOCONTO, _sottoc); for (rmov.read(); !rmov.eof() ;rmov.next()) { int annoes = rmov.get_int (RMV_ANNOES); long numreg = rmov.get_long(RMV_NUMREG); _mov->setkey(1); _mov->curr().zero(); _mov->curr().put(MOV_NUMREG,numreg); _mov->read(); if (_mov->bad()) _mov->zero(); datacomp = (_mov->curr().get(MOV_DATACOMP)); if (_annomsk == 0) datareg = rmov.get_date(RMV_DATAREG); else if (_annomsk != 0) datareg = datacomp; gruppo = rmov.get_int(RMV_GRUPPO); conto = rmov.get_int(RMV_CONTO); sottoc = rmov.get_long(RMV_SOTTOCONTO); if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) break; else if (((annoes==_annomsk)||(_annomsk==0))&&((datareg>=_data_ini)&&(datareg<=_data_fine))) { trovato = TRUE; break; } } rmov.readat(record); } return trovato; } bool TMastrini_application::data_inizio(TMask_field& f, KEY k) { int anno; TDate data; anno = f.mask().get_int(F_ANNO); data = f.mask().get (F_DATAINI); app()._annomsk = anno; if (k == K_ENTER) { if (anno != 0) { app().data_fine_esercizio(anno); if (data == botime) app()._data_ini = app()._data_inizioese; else if (data < app()._data_inizioese || data > app()._data_finese) { f.error_box("La data non appartiene all'esercizio indicato"); return FALSE; } else app()._data_ini = data; } else if (anno == 0) { if (data == botime) { f.error_box("La data deve essere obbligatoriamente indicata"); return FALSE; } else app()._data_ini = data; } } return TRUE; } bool TMastrini_application::data_fine(TMask_field& f, KEY k) { int annoes; TDate data, data_ini; annoes = f.mask().get_int(F_ANNO); data = f.mask().get (F_DATAFINE); data_ini = f.mask().get (F_DATAINI); app()._annomsk = annoes; if (k == K_ENTER) { if (annoes != 0) { app().data_fine_esercizio(annoes); if (data == botime) app()._data_fine = app()._data_finese; else if (data < app()._data_inizioese || data > app()._data_finese) { f.error_box("La data non appartiene all'esercizio indicato"); return FALSE; } else app()._data_fine = data; } else if (annoes == 0) { if (data == botime) { f.error_box("La data deve essere obbligatoriamente indicata"); return FALSE; } app()._anno_ghost = date2esc(data_ini); app()._inizioes = app()._inizioEs; if (data < app()._inizioEs || data > app()._fineEs) { f.error_box("La data non appartiene all'esercizio indicato"); return FALSE; } else app()._data_fine = data; } if (data < data_ini) { f.error_box("La data finale non puo' essere inferiore alla data di partenza"); return FALSE; } } return TRUE; } void TMastrini_application::saldi_zero() { TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); real saldo_dare, saldo_avere; long record; saldo_dare = saldo_avere = 0; if (current_cursor()->is_first_match(LF_RMOV)) { record = rmov.recno(); while (!rmov.eof()) { //rmov.read(); char sezione = rmov.curr().get(RMV_SEZIONE)[0]; real importo = rmov.curr().get_real(RMV_IMPORTO); int gruppo = atoi(rmov.get(RMV_GRUPPO)); int conto = atoi(rmov.get(RMV_CONTO)); long sottoc = atol(rmov.get(RMV_SOTTOCONTO)); if ((gruppo == _gruppo)&&(conto == _conto)&&(sottoc == _sottoc)) { if (sezione == 'D') saldo_dare += importo; else if (sezione == 'A') saldo_avere += importo; } else break; rmov.next(); } rmov.readat(record); } _totale_saldo = saldo_dare - saldo_avere; } void TMastrini_application::fai_stampa132() { if (_nummast == 1 || _nummast == 3) _rw = 1; else if (_nummast == 2) { int riga; if ( (_conta_mastrini % 2) != 0 ) riga = (printer().formlen() / 2); //-1 else riga = printer().formlen(); //-1; int app1 = printer().formlen(); int app2 = printer().rows_left(); int cur_row = (app1 - app2); if (cur_row == riga) { //_rw += 2; _rw = crea_intestazione(_rw); _rw = stampa_progre_riporto(_rw); for (int i = _indice_array; i < _item; i++) { TString& data = (TString&)_riga[i]; int g1 = data.find("g",1); int c1 = data.find("@",g1); int g2 = data.find("g",c1); TString fmt1 = ""; TString fmt2 = ""; TString str1,str2; if (g1 != -1) { fmt1 = data.sub(0,g1+1); fmt1 << "%s"; str1 = data.sub(g1+1,c1); } if (c1 != -1) { fmt2 = data.sub(c1,g2+1); fmt2 << "%s"; str2 = data.sub(g2+1); } if (fmt1 != "") set_row (_rw,fmt1,(const char*) str1); if (fmt2 != "") set_row (_rw,fmt2,(const char*) str2); _rw++; } } else _rw = 1; _riga.destroy(); } set_row (_rw,"@0g#t", &_dataregs); if (_stampanum == 1) set_row (_rw,"@11g$[r]#7d$[n]", &_numreg); else if (_stampanum == 2) { set_row (_rw,"@11g#7d", &_numgio); } set_row (_rw,"@19g#t", &_datadocs); set_row (_rw,"@30g#7t", &_numdoc); set_row (_rw,"@38g#3t", &_codcaus); set_row (_rw,"@117g#3t", &_g_contr); set_row (_rw,"@120g#3t", &_c_contr); set_row (_rw,"@123g#6t", &_s_contr); } void TMastrini_application::fai_stampa198() { if (_nummast == 1 || _nummast == 3) _rw = 1; else if (_nummast == 2) { int riga; if ( (_conta_mastrini % 2) != 0 ) riga = (printer().formlen() / 2); //-1 else riga = printer().formlen(); //-1; int app1 = printer().formlen(); int app2 = printer().rows_left(); int cur_row = (app1 - app2); if (cur_row == riga) { //_rw += 2; _rw = crea_intestazione(_rw); _rw = stampa_progre_riporto(_rw); for (int i = _indice_array; i < _item; i++) { TString& data = (TString&)_riga[i]; int g1 = data.find("g",1); int c1 = data.find("@",g1); int g2 = data.find("g",c1); TString fmt1 = ""; TString fmt2 = ""; TString str1,str2; if (g1 != -1) { fmt1 = data.sub(0,g1+1); fmt1 << "%s"; str1 = data.sub(g1+1,c1); } if (c1 != -1) { fmt2 = data.sub(c1,g2+1); fmt2 << "%s"; str2 = data.sub(g2+1); } if (fmt1 != "") set_row (_rw,fmt1,(const char*) str1); if (fmt2 != "") set_row (_rw,fmt2,(const char*) str2); _rw++; } } else _rw = 1; _riga.destroy(); } set_row (_rw,"@0g#t", &_dataregs); if (_stampanum == 1) { set_row (_rw,"@11g$[r]#7d$[n]", &_numreg); set_row (_rw,"@18g/#3d", &_numrig); } else if (_stampanum == 2) set_row (_rw,"@11g#7d", &_numgio); set_row (_rw,"@23g#t", &_datadocs); set_row (_rw,"@34g#7t", &_numdoc); set_row (_rw,"@42g#3t", &_codcaus); // Stampa saldo movimenti set_row (_rw,"@149g#t", &_saldo_movimenti_str); set_row (_rw,"@165g#3t", &_g_contr); set_row (_rw,"@169g#3t", &_c_contr); set_row (_rw,"@173g#6t", &_s_contr); } void TMastrini_application::stampa_totali132() { TString sep(132); if (_nummast == 1 || _nummast == 3) _rw = 2; sep.fill('-'); //Stampa 132 - (sep(132)) set_row(_rw++,"@0g%s", (const char *) sep); _totprogre_dare=_progredare+_totale_periodo_dare; _totprogre_avere=_progreavere+_totale_periodo_avere; _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; _saldo_progre = _totprogre_dare - _totprogre_avere; _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; TString string = _saldo_periodo.string("###.###.###.###"); set_row (_rw,"@32gTOTALI PERIODO@69g%15s", (const char*)string); string = _totale_periodo_dare.string("###.###.###.###"); set_row (_rw,"@85g%15s", (const char*)string); string = _totale_periodo_avere.string("###.###.###.###"); set_row (_rw++,"@101g%15s", (const char*)string); string = _saldo_progre.string("###.###.###.###"); set_row (_rw,"@32gTOTALI PROGRESSIVI@69g%15s", (const char*)string); string = _totprogre_dare.string("###.###.###.###"); set_row (_rw,"@85g%15s", (const char*)string); string = _totprogre_avere.string("###.###.###.###"); set_row (_rw++,"@101g%15s", (const char*)string); if (_stampaprogre) //Progressivi attuali { TString str = _saldo_progre_al.string("###.###.###.###"); set_row (_rw,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); set_row (_rw,"@69g%15s", (const char*)str); str = _totprogre_dare_al.string("###.###.###.###"); set_row (_rw,"@85g%15s", (const char*)str); str = _totprogre_avere_al.string("###.###.###.###"); set_row (_rw,"@101g%15s", (const char*)str); } } void TMastrini_application::carica_array_totali132() { TString sep(132); TToken_string r(255); if (_nummast == 2) _rw = 1; _totprogre_dare=_progredare+_totale_periodo_dare; _totprogre_avere=_progreavere+_totale_periodo_avere; _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; _saldo_progre = _totprogre_dare - _totprogre_avere; _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; sep.fill(' '); r.add("@0g%s"); r.add(sep); _lista.add(r); r = ""; sep.fill('-'); //Stampa 132 - (sep(132)) r.add("@0g%s"); r.add(sep); _lista.add(r); r = ""; r.add("@32gTOTALI PERIODO@69g%15s@85g%15s@101g%15s"); r.add(_saldo_periodo.string("###.###.###.###")); r.add(_totale_periodo_dare.string("###.###.###.###")); r.add(_totale_periodo_avere.string("###.###.###.###")); _lista.add(r); r = ""; r.add("@32gTOTALI PROGRESSIVI@69g%15s@85g%15s@101g%15s"); r.add(_saldo_progre.string("###.###.###.###")); r.add(_totprogre_dare.string("###.###.###.###")); r.add(_totprogre_avere.string("###.###.###.###")); _lista.add(r); r = ""; if (_stampaprogre) //Progressivi attuali { r.add("@32gTOTALI PROGRESSIVI AL@55g%s@69g%15s@85g%15s@101g%15s"); r.add(_ultima_data_reg.string()); r.add(_saldo_progre_al.string("###.###.###.###")); r.add(_totprogre_dare_al.string("###.###.###.###")); r.add(_totprogre_avere_al.string("###.###.###.###")); _lista.add(r); r = ""; } if (_stampatotiva) { real totale; sep.fill(' '); r.add("@0g%s"); r.add(sep); _lista.add(r); r = ""; TString fmt ("@0g%s"); TString fmt1(format("@%dg", _ddociva_len)); fmt << fmt1 << "%15s"; for (int j = 0; j < _b.items(); j++) { TDociva& riga = (TDociva&)_b[j]; r.add(fmt); r.add(riga._descrdoc); totale = riga._totdociva; r.add(totale.string("###.###.###.###")); _lista.add(r); r = ""; } _b.destroy(); } _indice_lista = 0; } void TMastrini_application::stampa_totali132_II() { int riga,cur_row,diff; int lim = 0; _item_lista = _lista.items(); if ( (_conta_mastrini % 2) != 0 ) { riga = (printer().formlen() / 2); //- 1; cur_row = printer().formlen() - printer().rows_left(); diff = riga - cur_row; } else { riga = printer().formlen(); //- 1; cur_row = printer().formlen() - printer().rows_left(); diff = riga - cur_row; } if (_indice_lista == 0 && diff != 0) { if (_item_lista > diff) lim = diff; else lim = _item_lista; } else { lim = _item_lista; _rw = 1; _rw = crea_intestazione(_rw); _rw = stampa_progre_riporto(_rw); if ( (_conta_mastrini % 2) != 0 ) { riga = (printer().formlen() / 2); //- 1; cur_row = _rw; diff = riga - cur_row; } else { riga = printer().formlen(); //- 1; cur_row = _rw + (printer().formlen() / 2); //32; diff = riga - cur_row; } } for (int i = _indice_lista; i < lim; i++) { TToken_string& data = (TToken_string&)_lista[i]; TString fmt (data.get(0)); TString arg1 (data.get(1)); TString arg2 (data.get(2)); TString arg3 (data.get(3)); TString arg4 (data.get(4)); set_row(_rw++,fmt, (const char*) arg1, (const char*) arg2, (const char*) arg3, (const char*) arg4); _indice_lista++; } if (_item_lista <= diff) _lista.destroy(); } void TMastrini_application::stampa_totali198() { TString sep(198); if (_nummast == 1 || _nummast == 3) _rw = 1; sep.fill('-'); //Stampa 198 - (sep(198)) set_row(_rw++,"@0g%s", (const char *) sep); _totprogre_dare=_progredare+_totale_periodo_dare; _totprogre_avere=_progreavere+_totale_periodo_avere; TString string = _totale_periodo_dare.string("###.###.###.###"); set_row (_rw,"@32gTOTALI PERIODO@101g%15s", (const char*)string); string = _totale_periodo_avere.string("###.###.###.###"); set_row (_rw,"@117g%15s", (const char*)string); string = _saldo_movimenti.string("###.###.###.###"); set_row (_rw++,"@149g%15s", (const char*)string); string = _totprogre_dare.string("###.###.###.###"); set_row (_rw,"@32gTOTALI PROGRESSIVI@101g%15s",(const char*)string); string = _totprogre_avere.string("###.###.###.###"); set_row (_rw,"@117g%15s", (const char*)string); string = _saldo_progressivi.string("###.###.###.###"); set_row (_rw++,"@133g%15s", (const char*)string); if (_stampaprogre) //Progressivi attuali { set_row(_rw,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); TString str = _totprogre_dare_al.string("###.###.###.###"); set_row (_rw,"@101g%15s", (const char*)str); str = _totprogre_avere_al.string("###.###.###.###"); set_row (_rw,"@117g%15s", (const char*)str); str = _saldo_progressivi.string("###.###.###.###"); set_row (_rw,"@133g%15s", (const char*)str); } } void TMastrini_application::carica_array_totali198() { TString sep(198); TToken_string r(255); if (_nummast == 2) _rw = 1; sep.fill(' '); //Stampa 132 - (sep(132)) r.add("@0g%s"); r.add(sep); _lista.add(r); r = ""; sep.fill('-'); //Stampa 132 - (sep(132)) r.add("@0g%s"); r.add(sep); _lista.add(r); r = ""; _totprogre_dare=_progredare+_totale_periodo_dare; _totprogre_avere=_progreavere+_totale_periodo_avere; r.add("@32gTOTALI PERIODO@101g%15s@117g%15s@149g%15s"); r.add(_totale_periodo_dare.string("###.###.###.###")); r.add(_totale_periodo_avere.string("###.###.###.###")); r.add(_saldo_movimenti.string("###.###.###.###")); _lista.add(r); r = ""; r.add("@32gTOTALI PROGRESSIVI@101g%15s@117g%15s@133g%15s"); r.add(_totprogre_dare.string("###.###.###.###")); r.add(_totprogre_avere.string("###.###.###.###")); r.add(_saldo_progressivi.string("###.###.###.###")); _lista.add(r); r = ""; if (_stampaprogre) //Progressivi attuali { r.add("@32gTOTALI PROGRESSIVI AL@55g%s@101g%15s@117g%15s@133g%15s"); r.add(_ultima_data_reg.string()); r.add(_totprogre_dare_al.string("###.###.###.###")); r.add(_totprogre_avere_al.string("###.###.###.###")); r.add(_saldo_progressivi.string("###.###.###.###")); _lista.add(r); r = ""; } if (_stampatotiva) { real totale; sep.fill(' '); r.add("@0g%s"); r.add(sep); _lista.add(r); r = ""; TString fmt ("@0g%s"); TString fmt1(format("@%dg", _ddociva_len)); fmt << fmt1 << "%15s"; for (int j = 0; j < _b.items(); j++) { TDociva& riga = (TDociva&)_b[j]; r.add(fmt); r.add(riga._descrdoc); totale = riga._totdociva; r.add(totale.string("###.###.###.###")); _lista.add(r); r = ""; } _b.destroy(); } _indice_lista = 0; } void TMastrini_application::stampa_totali198_II() { int riga,cur_row,diff; int lim = 0; _item_lista = _lista.items(); if ( (_conta_mastrini % 2) != 0 ) { riga = (printer().formlen() / 2); //- 1; cur_row = printer().formlen() - printer().rows_left(); diff = riga - cur_row; } else { riga = printer().formlen(); //- 1; cur_row = printer().formlen() - printer().rows_left(); diff = riga - cur_row; } if (_indice_lista == 0 && diff != 0) { if (_item_lista > diff) lim = diff; else lim = _item_lista; } else { lim = _item_lista; _rw = 1; _rw = crea_intestazione(_rw); _rw = stampa_progre_riporto(_rw); if ( (_conta_mastrini % 2) != 0 ) { riga = (printer().formlen() / 2); //- 1; cur_row = _rw; diff = riga - cur_row; } else { riga = printer().formlen(); //- 1; cur_row = _rw + (printer().formlen() / 2); //32; diff = riga - cur_row; } } for (int i = _indice_lista; i < lim; i++) { TToken_string& data = (TToken_string&)_lista[i]; TString fmt (data.get(0)); TString arg1 (data.get(1)); TString arg2 (data.get(2)); TString arg3 (data.get(3)); TString arg4 (data.get(4)); set_row(_rw++,fmt, (const char*) arg1, (const char*) arg2, (const char*) arg3, (const char*) arg4); _indice_lista++; } if (_item_lista <= diff) _lista.destroy(); } void TMastrini_application::setta_riga (int r, TString riga) { TString *p = (TString*)_riga.objptr(r); if (!p) { p = new TString; _riga.add (p); } *p << riga; } bool TMastrini_application::preprocess_page(int file, int counter) { TLocalisamfile & rmov = current_cursor()->file(LF_RMOV); long rec; TDate datasucc; TString datasuccstring,dataregrmovstring; int gruppof,contof; long sottocf; TString provvis = ""; int annoes; if (counter) return TRUE; switch (file) { case LF_SALDI: // Usati in crea_intestazione() if (_nummast == 3 || _nummast == 2) { _rw = 0; _rw++; } _gruppo = atoi(current_cursor()->curr(LF_SALDI).get(SLD_GRUPPO)); _conto = atoi(current_cursor()->curr(LF_SALDI).get(SLD_CONTO)); _sottoc = atol(current_cursor()->curr(LF_SALDI).get(SLD_SOTTOCONTO)); _cambia_mastrino = TRUE; annoes = atoi(current_cursor()->curr(LF_SALDI).get(SLD_ANNOES)); conto(_gruppo,_conto,TRUE); if (annoes != _anno_corrente && annoes != _anno_precedente) return FALSE; if (_g_prec == _gruppo && _c_prec == _conto && _s_prec == _sottoc) return FALSE; _g_prec = _gruppo; _c_prec = _conto; _s_prec = _sottoc; _saldo_periodo = ZERO; _totale_periodo_dare = ZERO; _totale_periodo_avere = ZERO; _saldo_progre = ZERO; _totprogre_dare = ZERO; _totprogre_avere = ZERO; _saldo_progre_al = ZERO; _totprogre_dare_al = ZERO; _totprogre_avere_al = ZERO; _progredare = ZERO; _progreavere = ZERO; _totale_prima_dare = ZERO; _totale_prima_avere = ZERO; _saldo_movimenti = ZERO; _saldo_progressivi = ZERO; _saldo_progre_prec = ZERO; if (_tipostampa == 2) saldi_zero(); else _totale_saldo = 1; if ((_tipostampa == 1) || (_tipostampa == 2)) { if ((almeno_un_record()) && (_totale_saldo != 0)) { _puoi_stampare = TRUE; if (_nummast == 3 || _nummast == 2) { int cur_row = printer().formlen() - printer().rows_left(); int diff = printer().formlen() - cur_row; if (diff <= 13 && diff != 0) printer().formfeed(); _rw = crea_intestazione(_rw); calcola_progressivi(); _saldo_progressivi += _saldo_progre_prec; _rw = stampa_progre_riporto(_rw); } } else { _puoi_stampare = FALSE; return FALSE; } } else if (_tipostampa == 3) { if (_nummast == 2 || _nummast == 3) calcola_progressivi(); if (_progredare == ZERO && _progreavere == ZERO && !almeno_un_record()) { _puoi_stampare = FALSE; return FALSE; } else { _puoi_stampare = TRUE; if (_nummast == 3 || _nummast == 2) { int cur_row = printer().formlen() - printer().rows_left(); int diff = printer().formlen() - cur_row; if (diff <= 13 && diff != 0) printer().formfeed(); _rw = crea_intestazione(_rw); _saldo_progressivi += _saldo_progre_prec; _rw = stampa_progre_riporto(_rw); } } } break; case LF_RMOV: { //Il flag _gia_stampata_intestazione serve nella stampa in continuo, xche' //sono costretto a richiamare l'intestazione sia nella preprocess_page (per //i mastrini con intestazione a meta' pagina), sia nella preprocess_header //per i mastrini che si trovano a cavallo fra una pagina e quella successiva. //In quest'ultimo caso infatti quando vado a pagina nuova devo stampare l'intestazione //ma senza il flag rischio di stamparla due volte. if (_nummast == 3) _gia_stampata_intestazione = FALSE; if (_nummast == 1 || _nummast == 3) _rw = 1; // Ricerca la contropartita di quel movimento TLocalisamfile& rmov = current_cursor()->file(LF_RMOV); _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); _numrig = atoi (current_cursor()->curr(LF_RMOV).get(RMV_NUMRIG)); _gruppocontr = rmov.get_int (RMV_GRUPPOC); _contocontr = rmov.get_int (RMV_CONTOC); _sottocontocontr = rmov.get_long(RMV_SOTTOCONTOC); _g_contr = rmov.get(RMV_GRUPPOC); _c_contr = rmov.get(RMV_CONTOC); _s_contr = rmov.get(RMV_SOTTOCONTOC); // Stampa solo quelli che hanno anno esercizio uguale a quello specificato // nella maschera. Se non viene specificato li stampa tutti _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); _importo_str = _importo.string("###.###.###.###"); _mov->setkey(1); _mov->curr().zero(); _mov->curr().put(MOV_NUMREG,_numreg); _mov->read(); if (_mov->bad()) _mov->zero(); _annoes = _mov->get_int(MOV_ANNOES); _regiva = _mov->curr().get(MOV_REG); _annoiva = _mov->curr().get_int(MOV_ANNOIVA); // Controlla se saldo e' diverso da 0 if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) { _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); if (_annomsk == 0) { _datareg = (_mov->curr().get(MOV_DATAREG)); _datareg_stampa = _datareg; } else if (_annomsk != 0) { _datareg = _mov->curr().get(MOV_DATACOMP); _datareg_stampa = _mov->curr().get(MOV_DATAREG); } provvis = _mov->curr().get(MOV_PROVVIS); _dataregs = _datareg_stampa.string(); if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) { if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) { // Determino l' anno di competenza dell' operazione in esame int anno = date2esc(_datareg_stampa); if (anno != _annoes) if (_numcarat == 1) set_row (_rw, "@131g*"); else if (_numcarat == 2) set_row (_rw, "@197g*"); if (_stampa_mov_prov && provvis.trim().not_empty()) if (_numcarat == 1) set_row(_rw, "@129gP"); else if (_numcarat == 2) set_row(_rw, "@195gP"); _codcaus = _mov->curr().get(MOV_CODCAUS); _tipodoc = _mov->curr().get(MOV_TIPODOC); if (_stampatotiva && (_tmcf == 'C' || _tmcf == 'F')) { if (_tipodoc != "") { documenti_iva(); _b.add_riga(_descrdociva,_importo, _natdoc); if (_descrdociva.len() > _ddociva_len) _ddociva_len = _descrdociva.len(); } } _datadoc = (_mov->curr().get(MOV_DATADOC)); _datadocs = _datadoc.string(); _numdoc = _mov->curr().get(MOV_NUMDOC); descrizione_causale(); _descrizionemov = _mov->curr().get(MOV_DESCR); _numgio = atol(_mov->curr().get(MOV_NUMGIO)); _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); if (_nummast == 1 || _nummast == 3) { if (_numcarat == 1) // Stampa 132 caratteri { if (_descrizione != "") { *_d23 = (const char*) _descrizione; if (_descrizionemov != "") { *_d18 = (const char*) _descrizionemov; set_row(_rw, "@42g#a", _d18); set_row(_rw, "@61g#a", _d23); } else if (_descrizionemov == "") { *_d18 = (const char*) _descrcaus; set_row(_rw, "@42g#a", _d18); set_row(_rw, "@61g#a", _d23); } } else if (_descrizione == "") if (_descrizionemov != "") { *_d23 = (const char*) _descrizionemov; *_d18 = (const char*) _descrcaus; set_row (_rw,"@42g#a", _d18); set_row (_rw,"@61g#a", _d23); } else if (_descrizionemov == "") { conto(_gruppocontr,_contocontr,FALSE); TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); TString80 descr_contr = tc.descrizione(); //set_row (1,"@42g%.18s", (const char*) _descrcaus); //if (descr_contr != "Sconosciuto") // set_row (1,"@61g%.23s", (const char*) descr_contr); *_d18 = (const char*) _descrcaus; set_row (_rw,"@42g#a", _d18); if (descr_contr != "Sconosciuto") { *_d23 = (const char*) descr_contr; set_row (_rw,"@61g#a", _d23); } } } else if (_numcarat == 2) // Stampa 198 caratteri { if (_descrizione != "") { *_d30 = (const char*) _descrizione; if (_descrizionemov != "") { *_d23 = (const char*) _descrizionemov; set_row (_rw,"@46g#a", _d23); set_row (_rw,"@70g#a", _d30); } else if (_descrizionemov == "") { //set_row (1,"@46g%.23s", (const char*) _descrcaus); //set_row (1,"@70g%.30s", (const char*) _descrizione); *_d23 = (const char*) _descrcaus; set_row(_rw, "@46g#a", _d23); set_row(_rw, "@70g#a", _d30); } } else if (_descrizione == "") if (_descrizionemov != "") { //set_row (1,"@46g%.23s", (const char*) _descrcaus); //set_row (1,"@70g%.30s", (const char*) _descrizionemov); *_d30 = (const char*) _descrizionemov; *_d23 = (const char*) _descrcaus; set_row (_rw,"@46g#a", _d23); set_row (_rw,"@70g#a", _d30); } else if (_descrizionemov == "") { conto(_gruppocontr,_contocontr,FALSE); TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); TString descr_contr = tc.descrizione(); //set_row (1,"@46g%.23s", (const char*) _descrcaus); //if (descr_contr != "Sconosciuto") // set_row (1,"@70g%.30s", (const char*) descr_contr); *_d23 = (const char*) _descrcaus; set_row (_rw,"@46g#a", _d23); if (descr_contr != "Sconosciuto") { *_d30 = (const char*) descr_contr; set_row (_rw,"@70g#a", _d30); } } } } //if (_nummast == 1 || _nummast == 3) if (_nummast == 2) { TString d18,d23,d30; if (_numcarat == 1) // Stampa 132 caratteri { if (_descrizione != "") { d23 = _descrizione; if (_descrizionemov != "") d18 = _descrizionemov; else if (_descrizionemov == "") d18 = _descrcaus; } else if (_descrizione == "") if (_descrizionemov != "") { d23 = _descrizionemov; d18 = _descrcaus; } else if (_descrizionemov == "") { conto(_gruppocontr,_contocontr,FALSE); TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); TString80 descr_contr = tc.descrizione(); d18 = _descrcaus; if (descr_contr != "Sconosciuto") d23 = descr_contr; } TParagraph_string d_18 (d18,18); int i = 0; const char* str; while ( (str = d_18.get()) != NULL) { TString stringa = ""; stringa << "@42g" << str; setta_riga(i,stringa); i++; } TParagraph_string d_23 (d23,23); i = 0; while ( (str = d_23.get()) != NULL) { TString stringa = ""; stringa << "@61g" << str; setta_riga(i,stringa); i++; } } else if (_numcarat == 2) // Stampa 198 caratteri { if (_descrizione != "") { d30 = _descrizione; if (_descrizionemov != "") d23 = _descrizionemov; else if (_descrizionemov == "") d23 = _descrcaus; } else if (_descrizione == "") if (_descrizionemov != "") { d30 = _descrizionemov; d23 = _descrcaus; } else if (_descrizionemov == "") { conto(_gruppocontr,_contocontr,FALSE); TConto tc (_gruppocontr,_contocontr,_sottocontocontr,_tipo_contr); TString descr_contr = tc.descrizione(); d23 = _descrcaus; if (descr_contr != "Sconosciuto") d30 = descr_contr; } TParagraph_string d_23 (d23,23); int i = 0; const char* str; while ( (str = d_23.get()) != NULL) { TString stringa = ""; stringa << "@46g" << str; setta_riga(i,stringa); i++; } TParagraph_string d_30 (d30,30); i = 0; while ( (str = d_30.get()) != NULL) { TString stringa = ""; stringa << "@70g" << str; setta_riga(i,stringa); i++; } } _item = _riga.items(); int riga,cur_row,diff; if ( (_conta_mastrini % 2) != 0 ) { riga = (printer().formlen() / 2); //- 1; cur_row = printer().formlen() - printer().rows_left(); diff = riga - cur_row; } else { riga = printer().formlen(); //- 1; cur_row = printer().formlen() - printer().rows_left(); diff = riga - cur_row; } int lim = 0; if (_item > diff) lim = diff; else lim = _item; _indice_array = 0; int k = _rw; for (int i = 0; i < lim; i++) { TString& data = (TString&)_riga[i]; int g1 = data.find("g",1); int c1 = data.find("@",g1); int g2 = data.find("g",c1); TString fmt1 = ""; TString fmt2 = ""; TString str1,str2; if (g1 != -1) { fmt1 = data.sub(0,g1+1); fmt1 << "%s"; str1 = data.sub(g1+1,c1); } if (c1 != -1) { fmt2 = data.sub(c1,g2+1); fmt2 << "%s"; str2 = data.sub(g2+1); } if (fmt1 != "") set_row (k,fmt1,(const char*) str1); if (fmt2 != "") set_row (k,fmt2,(const char*) str2); k++; _indice_array++; } //_riga.destroy(); } //if (_nummast == 2) if (_sezione == "D") { _totale_periodo_dare += _importo; _riporto_parziale_dare += _importo; if (_numcarat == 1) // Stampa 132 caratteri set_row (_rw,"@85g%s", (const char*) _importo_str); else if (_numcarat == 2) // Stampa 198 caratteri { _saldo_progressivi += _importo; _saldo_movimenti += _importo; set_row (_rw,"@101g%s", (const char*) _importo_str); } } else if (_sezione == "A") { _totale_periodo_avere += _importo; _riporto_parziale_avere += _importo; if (_numcarat == 1) // Stampa 132 caratteri set_row (_rw,"@101g%s", (const char*) _importo_str); else if (_numcarat == 2) // Stampa 198 caratteri { _saldo_progressivi -= _importo; _saldo_movimenti -= _importo; set_row (_rw,"@117g%s", (const char*) _importo_str); } } const int righe_rimaste = printer().rows_left(); _stampato = righe_rimaste >= 1; _saldo_progressivi_str=_saldo_progressivi.string("###.###.###.###"); _saldo_movimenti_str=_saldo_movimenti.string("###.###.###.###"); if (_numcarat == 2) { ricerca_regiva(); _protiva = atol(_mov->curr().get(MOV_PROTIVA)); if (_protiva != 0) set_row (_rw,"@189g%5d", _protiva); if (_tipo < 3) set_row (_rw,"@180g#t" , &_regiva); _dataregrmov = current_cursor()->curr(LF_RMOV).get_date(RMV_DATAREG); dataregrmovstring=_dataregrmov.string(); //Gestire la stampa di saldo_progressivi nella postprocess_page di RMOV rec = rmov.recno(); rmov.next(); gruppof = rmov.get_int(RMV_GRUPPO); contof = rmov.get_int(RMV_CONTO); sottocf = rmov.get_int(RMV_SOTTOCONTO); datasucc = rmov.get_date(RMV_DATAREG); datasuccstring=datasucc.string(); if (((gruppof!=_gruppo)||(contof!=_conto)||(sottocf!=_sottoc))||(rmov.eof())) datasucc = (""); if (datasucc != _dataregrmov) set_row (_rw,"@133g#t", &_saldo_progressivi_str); rmov.readat(rec); } _rw = 1; return TRUE; } else return FALSE; } else return FALSE; } else return FALSE; break; } default: break; } return TRUE; } void TMastrini_application::set_page(int file, int counter) { switch (file) { case LF_SALDI: reset_print(); break; case LF_RMOV: reset_print(); if (_numcarat == 1) fai_stampa132(); else if (_numcarat == 2) fai_stampa198(); break; default: break; } } print_action TMastrini_application::postprocess_page(int file, int counter) { if (_nummast == 1 || _nummast == 3) { if (counter) { if (_nummast == 1) //Il salto pagina a rottura di mastrino viene printer().formfeed(); //fatto solo quando seleziono un mastrino per pagina reset_print(); // per evitare che stampi di nuovo il totale prec. _stampa_progressivi_si = TRUE; _riporto_dare = ZERO; _riporto_avere = ZERO; _riporto_parziale_dare = ZERO; _riporto_parziale_avere = ZERO; _ddociva_len = 0; return NEXT_PAGE; } } else if (_nummast == 2) { int item_lista = _lista.items(); if (counter && item_lista == 0) { reset_print(); // per evitare che stampi di nuovo il totale prec. _stampa_progressivi_si = TRUE; _riporto_dare = ZERO; _riporto_avere = ZERO; _riporto_parziale_dare = ZERO; _riporto_parziale_avere = ZERO; _ddociva_len = 0; return NEXT_PAGE; } } switch (file) { case LF_SALDI: { if (_nummast == 1 || _nummast == 3) { if (_tipostampa == 3) { reset_print(); if (_numcarat == 1) stampa_totali132(); else if (_numcarat == 2) stampa_totali198(); if (_stampatotiva) stampa_totaliiva(); } else if (_tipostampa == 2) { reset_print(); if ((_totale_saldo != 0) && (_puoi_stampare)) if (_numcarat == 1) stampa_totali132(); else if (_numcarat == 2) stampa_totali198(); if (_stampatotiva) stampa_totaliiva(); } else if (_tipostampa == 1) { reset_print(); if (_puoi_stampare) if (_numcarat == 1) stampa_totali132(); else if (_numcarat == 2) stampa_totali198(); if (_stampatotiva) stampa_totaliiva(); } } else if (_nummast == 2) { if (!counter) { if (_numcarat == 1) carica_array_totali132(); else if (_numcarat == 2) carica_array_totali198(); } if (_tipostampa == 3) { reset_print(); if (_numcarat == 1) stampa_totali132_II(); else if (_numcarat == 2) stampa_totali198_II(); } else if (_tipostampa == 2) { reset_print(); if ((_totale_saldo != 0) && (_puoi_stampare)) if (_numcarat == 1) stampa_totali132_II(); else if (_numcarat == 2) stampa_totali198_II(); } else if (_tipostampa == 1) { reset_print(); if (_puoi_stampare) if (_numcarat == 1) stampa_totali132_II(); else if (_numcarat == 2) stampa_totali198_II(); } int item_lista = _lista.items(); if (item_lista == 0) { int righe_rimaste = righe_rimaste_da_stampare(); righe_rimaste = righe_rimaste - _rw; //_rw sono le righe dei totali gia' settate, mentre //righe rimaste conteneva le righe senza quelle dei totali gia' settate if (righe_rimaste > 0) { _rw++; //incremento la riga altrimenti copro l'ultimo totale settato con una riga bianca TString sep = " "; for (int i = 0; i < righe_rimaste; i++) set_row(_rw++,"@0g%s", (const char*) sep); } } } // _stampa_progressivi_si = TRUE; _prima_volta = TRUE; return REPEAT_PAGE; } case LF_RMOV: // if (_sezione == "D") // _riporto_parziale_dare += _importo; // else if (_sezione == "A") // _riporto_parziale_avere += _importo; force_setpage(); break; default: break; } return NEXT_PAGE; } print_action TMastrini_application::postprocess_print(int file, int counter) { if (file == LF_SALDI) { _msk->reset(F_TIPOCF_INI); _msk->reset(F_GRUPPOINI); _msk->reset(F_CONTOINI_CONTO); _msk->reset(F_CONTOINI_CLIENTE); _msk->reset(F_CONTOINI_FORN); _msk->reset(F_SOTTOCINI_CONTO); _msk->reset(F_SOTTOCINI_CLIENTE); _msk->reset(F_SOTTOCINI_FORN); _msk->reset(F_DESCRINI_CONTO); _msk->reset(F_DESCRINI_CLIENTE); _msk->reset(F_DESCRINI_FORN); _msk->reset(F_TIPOCF_FINE); _msk->reset(F_GRUPPOFINE); _msk->reset(F_CONTOFINE_CONTO); _msk->reset(F_CONTOFINE_CLIENTE); _msk->reset(F_CONTOFINE_FORN); _msk->reset(F_SOTTOCFINE_CONTO); _msk->reset(F_SOTTOCFINE_CLIENTE); _msk->reset(F_SOTTOCFINE_FORN); _msk->reset(F_DESCRFINE_CONTO); _msk->reset(F_DESCRFINE_CLIENTE); _msk->reset(F_DESCRFINE_FORN); } return NEXT_PAGE; } // Stampa dei totali documenti iva se richiesta void TMastrini_application::stampa_totaliiva() { real totale; if (_nummast == 1 || _nummast == 3) { _rw = 7; _ddociva_len++; TString fmt (format("@%dg", _ddociva_len)); fmt << "%15s"; if (_stampatotiva) for (int j = 0; j < _b.items(); j++) { TDociva& riga = (TDociva&)_b[j]; set_row(_rw+j, "@0g%s",(const char*) riga._descrdoc); totale = riga._totdociva; TString string = totale.string("###.###.###.###"); set_row(_rw+j, fmt, (const char*)string); } _b.destroy(); } } // Ricerca della descrizione relativa al codice causale di MOV.dta // sull'archivio CAUS.dta void TMastrini_application::descrizione_causale() { _caus->setkey(1); _caus->curr().zero(); _caus->curr().put(CAU_CODCAUS, _codcaus); _caus->read(); if (_caus->bad()) _caus->zero(); _descrcaus = _caus->curr().get(CAU_DESCR); } // Ricerca sulla tabella dei tipi documento, la descrizione e la natura del // documento, accedendovi tramite il tipo documento trovato su MOV.dta void TMastrini_application::documenti_iva() { TString dep; _tabtpd->curr().zero(); dep << format ("%2s",(const char*) _tipodoc); _tabtpd->curr().put("CODTAB", (const char*) dep); _tabtpd->read(); _descrdociva = _tabtpd->curr().get("S0"); _natdoc = atoi(_tabtpd->curr().get("I0")); } void TMastrini_application::ricerca_regiva() { TString16 dep; _tabreg->curr().zero(); dep << format("%04d", _annoiva); dep << format("%3s" , (const char*) _regiva); _tabreg->curr().put("CODTAB", (const char*) dep); _tabreg->read(); _tipo = _tabreg->get_int("I0"); } bool TMastrini_application::preprocess_print(int file, int counter) { if (file == LF_SALDI) { _g_prec = 0; _c_prec = 0; _s_prec = 0; _saldo_periodo = ZERO; _totale_periodo_dare = ZERO; _totale_periodo_avere = ZERO; _saldo_progre = ZERO; _totprogre_dare = ZERO; _totprogre_avere = ZERO; _saldo_progre_al = ZERO; _totprogre_dare_al = ZERO; _totprogre_avere_al = ZERO; _progredare = ZERO; _progreavere = ZERO; _totale_prima_dare = ZERO; _totale_prima_avere = ZERO; _saldo_movimenti = ZERO; _saldo_progressivi = ZERO; _saldo_progre_prec = ZERO; _riporto_parziale_dare = ZERO; _riporto_parziale_avere = ZERO; _protiva = 0; _prima_volta = TRUE; _stampa_progressivi_si = TRUE; } return TRUE; } bool TMastrini_application::set_print(int) { KEY tasto; TLocalisamfile* fl; TString data1,data2; _puoi_stampare = TRUE; _msk->set_handler (F_DATAINI ,data_inizio); _msk->set_handler (F_DATAFINE ,data_fine); tasto = _msk->run(); if (tasto == K_ENTER) { _annomsk = atoi(_msk->get(F_ANNO)); _stampaprogre = (bool)(_msk->get(F_STAMPAPROGRE) == "X"); _stampatotiva = (bool)(_msk->get(F_STAMPATOTIVA) == "X"); _stampanum = atoi(_msk->get(F_STAMPANUM)); _stampa_mov_prov = (bool)(_msk->get(F_STAMPAMOVPROV) == "X"); int gruppoini = atoi(_msk->get(F_GRUPPOINI)); int contoini = atoi(_msk->get(F_CONTOINI_CONTO)); long sottocontoini = atol(_msk->get(F_SOTTOCINI_CONTO)); int gruppofine = atoi(_msk->get(F_GRUPPOFINE)); int contofine = atoi(_msk->get(F_CONTOFINE_CONTO)); long sottocontofine = atol(_msk->get(F_SOTTOCFINE_CONTO)); _tipostampa = atoi(_msk->get(F_TIPOSTAMPA)); _numcarat = atoi(_msk->get(F_NUMCARAT)); int formato = atoi(_msk->get(F_FORMATO)); _nummast = atoi(_msk->get(F_NUMMAST)); _codice_ditta = get_firm(); ricerca_dati_ditta(); if (_annomsk != 0) _anno_corrente = _annomsk; else if (_annomsk == 0) _anno_corrente = _anno_ghost; // GNACK! NO! poooorco zeeus! poooorca giunoooone! // _anno_precedente = _anno_corrente - 1; _tabesc->zero(); TString16 dep(format("%04d", _anno_corrente)); _tabesc->put("CODTAB", dep); _tabesc->read(); TDate ini = _tabesc->get("D0"); --ini; for (_tabesc->first(); !_tabesc->eof(); _tabesc->next()) { if (_tabesc->get_date("D1") == ini) { _anno_precedente = _tabesc->get_int("CODTAB"); break; } else if (_tabesc->get_date("D1") < ini) _anno_precedente = _tabesc->get_int("CODTAB"); } // LA'! //Per la stampa in continuo riservo due righe di footer, mentre per le altre no. if (_nummast == 3) printer().footerlen(2); else printer().footerlen(0); //Crea il cursore su gruppo, conto e sottoconto del file RMOV reset_files(); //resetta l'albero di stampa add_file(LF_SALDI); add_file(LF_RMOV,LF_SALDI); select_cursor(_cur1); fl = &(current_cursor()->file(LF_SALDI)); TRectype da (fl->curr()); TRectype a (fl->curr()); da.zero(); a.zero(); da.put(SLD_GRUPPO,gruppoini); da.put(SLD_CONTO,contoini); da.put(SLD_SOTTOCONTO,sottocontoini); a.put(SLD_GRUPPO,gruppofine); a.put(SLD_CONTO,contofine); a.put(SLD_SOTTOCONTO,sottocontofine); current_cursor()->setregion(da, a); if (_stampatotiva) _b.destroy(); _inizio_stampa = TRUE; _numero_pag = 1; _pagina = 1; _cambia_mastrino = FALSE; _rw = 0; _conta_mastrini = 0; _indice_lista = 0; _ddociva_len = 0; _riga.destroy(); _lista.destroy(); switch (_tipostampa) { case 1: _totale_saldo = 1; break; case 2: _totale_saldo = 0; break; case 3: _totale_saldo = 1; break; default: break; } enable_print_menu(); enable_link("Collegamento prima nota: ", 'r'); return TRUE; } else return FALSE; } void TMastrini_application::data_fine_esercizio(int anno) { TString16 dep; _tabesc->curr().zero(); dep << format ("%04d", anno); _tabesc->curr().put("CODTAB", (const char*) dep); _tabesc->read(); _data_finese = _tabesc->curr().get("D1"); _data_inizioese = _tabesc->curr().get("D0"); } void TMastrini_application::preprocess_header() { if (_nummast == 1) { if (_tipostampa == 3) crea_intestazione(); else if (_tipostampa == 2) { if ((_totale_saldo != 0) && (_puoi_stampare)) crea_intestazione(); } else if (_tipostampa == 1) if (_puoi_stampare) crea_intestazione(); } else if (_nummast == 3 && !_gia_stampata_intestazione) { if (_tipostampa == 3) crea_intestazione(); else if (_tipostampa == 2) { if ((_totale_saldo != 0) && (_puoi_stampare)) crea_intestazione(); } else if (_tipostampa == 1) if (_puoi_stampare) crea_intestazione(); } } void TMastrini_application::conto(int gruppo, int conto, bool no_contropartita) { TLocalisamfile pconti(LF_PCON); pconti.setkey(1); pconti.zero(); pconti.put(PCN_GRUPPO, gruppo); pconti.put(PCN_CONTO , conto); pconti.read(); if (pconti.bad()) pconti.zero(); if (no_contropartita) { _indbil = pconti.get_int(PCN_INDBIL); _tmcf = pconti.get_char(PCN_TMCF); } else _tipo_contr = pconti.get_char(PCN_TMCF); } void TMastrini_application::ricerca_dati_ditta() { long app; _nditte->setkey(1); _nditte->curr().zero(); _nditte->curr().put(NDT_CODDITTA,_codice_ditta); _nditte->read(); app=_nditte->curr().get_long(NDT_CODDITTA); _ragsoc=_nditte->curr().get(NDT_RAGSOC); _unloc->setkey(1); _unloc->curr().zero(); _unloc->curr().put(ULC_CODDITTA,app); _unloc->curr().put(ULC_CODULC,"1"); _unloc->read(); _indulc=_unloc->curr().get(ULC_INDULC); _civulc=_unloc->curr().get(ULC_CIVULC); _capulc=_unloc->curr().get(ULC_CAPULC); _comulc=_unloc->curr().get(ULC_COMULC); _comuni->setkey(1); _comuni->zero(); _comuni->put(COM_COM,_comulc); _comuni->read(); if (_comuni->good()) { _com=_comuni->get(COM_DENCOM); _prov=_comuni->get(COM_PROVCOM); } else { _com=""; _prov=""; } } // Crea l'intestazione per la stampa a 132 e a 198 caratteri void TMastrini_application::crea_intestazione() { TString sep(132),sep1(198); reset_header(); if (_cambia_mastrino) { _pagina = 1; _cambia_mastrino = FALSE; } if (_numcarat == 1) { sep << "Pag. " << _pagina; sep.right_just(132); set_header(1,(const char*) sep); sep =""; set_header(2,"@1g%s",(const char*) sep); //set_header(1,"@126gPag. %2d", _numero_pag++); } else if (_numcarat == 2) { sep1 << "Pagina " << _pagina; sep1.right_just(198); set_header(1,(const char*) sep1); sep1 =""; set_header(2,"@1g%s",(const char*) sep1); //set_header(1,"@190gPagina %2d", _numero_pag++); } _pagina++; set_header (1, "@0gDITTA@6g%5ld", _codice_ditta); set_header (1, "@12g%-.45s", (const char*) _ragsoc); int len = _indulc.len(); if (len <= 25) _indulc << " " << _civulc.mid(0,9); else { _indulc = _indulc.mid(0,25); _indulc << " " << _civulc.mid(0,9); } set_header (1, "@59g%s", (const char*) _indulc); //set_header (1, "@86g%-.9s", (const char*) _civulc); set_header (1, "@97g%-.5s", (const char*) _capulc); set_header (1, "@103g%-.18s", (const char*) _com); set_header (1, "@122g%-.3s", (const char*) _prov); if (_nummast == 3) { set_header (3, "@0gSottoconto@12g@b%d", _gruppo); set_header (3, "@16g@b%d", _conto); set_header (3, "@20g@b%ld", _sottoc); } else { set_header (3, "@0gSottoconto@12g%d", _gruppo); set_header (3, "@16g%d", _conto); set_header (3, "@20g%ld", _sottoc); } if (_tmcf == 'C') _tipo_mask = 1; else if (_tmcf == 'F') _tipo_mask = 2; else if (_tmcf == '\0') _tipo_mask = 3; switch (_tipo_mask) { case 1: ricerca_clifo(); break; case 2: ricerca_clifo(); break; case 3: ricerca_gruppo(); break; default: break; } if (_numcarat == 1) { sep.fill('-'); //Stampa 132 - (sep(132)) set_header (6, (const char *) sep); set_header (7,"Operazione@19gDocumento@117gContro@131gA"); if (_stampa_mov_prov) set_header(7,"@129gM"); set_header (8,"Data"); if (_stampanum < 3) set_header (8,"@11gnumero"); set_header (8,"@19gData@30gNumero@38gCod.Causale@61gDescrizione@96gDare@111gAvere@117gPartita@131gC"); if (_stampa_mov_prov) set_header(8,"@129gP"); sep.fill('-'); set_header (9, (const char *) sep); } else if (_numcarat == 2) { sep1.fill('-'); //Stampa 198 - (sep1(198)) set_header (6,"@0g%s", (const char *) sep1); set_header (7,"Operazione@23gData@34gNumero@169gContro@180gReg@188gNumero@197gA"); if (_stampa_mov_prov) set_header(7,"@195gM"); set_header (8,"Data"); if (_stampanum < 3) set_header (8,"@11gnumero"); set_header (8,"@23gDocumento@42gCod.Causale@70gDescrizione@112gDare@127gAvere@135gSaldo progre.@152gSaldo movim.@169gPartita@180gIva@184gProtocollo@197gC"); if (_stampa_mov_prov) set_header(8,"@195gP"); sep1.fill('-'); set_header (9,"@0g%s", (const char *) sep1); } calcola_progressivi(); _saldo_progressivi += _saldo_progre_prec; if (_stampa_progressivi_si) { if (_numcarat == 1) { TString string = _saldo_progre_prec.string("###.###.###.###"); set_header (10,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); string = _progredare.string("###.###.###.###"); set_header (10,"@85g%15s",(const char*) string); string = _progreavere.string("###.###.###.###"); set_header (10,"@101g%15s",(const char*) string); } if (_numcarat == 2) { TString string = _progredare.string("###.###.###.###"); set_header (10,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); string = _progreavere.string("###.###.###.###"); set_header (10,"@117g%15s",(const char*) string); string = _saldo_progre_prec.string("###.###.###.###"); set_header (10,"@133g%15s",(const char*) string); } _riporto_dare = _progredare; _riporto_avere = _progreavere; _stampa_progressivi_si = FALSE; } else { _riporto_dare += _riporto_parziale_dare; _riporto_avere += _riporto_parziale_avere; real dep_dare,dep_avere,imp_d,imp_a; imp_d = _sezione == "D" ? _importo : ZERO; imp_a = _sezione == "A" ? _importo : ZERO; dep_dare = _stampato ? _riporto_dare : _riporto_dare - imp_d; dep_avere = _stampato ? _riporto_avere : _riporto_avere - imp_a; if (_numcarat == 1) { TString string = dep_dare.string("###.###.###.###"); set_header (10,"@32gA RIPORTO@85g%15s",(const char*) string); string = dep_avere.string("###.###.###.###"); set_header (10,"@101g%15s",(const char*) string); } if (_numcarat == 2) { TString string = dep_dare.string("###.###.###.###"); set_header (10,"@32gA RIPORTO@101g%15s",(const char*) string); string = dep_avere.string("###.###.###.###"); set_header (10,"@117g%15s",(const char*) string); } _riporto_parziale_dare = ZERO; _riporto_parziale_avere = ZERO; } if (_numcarat == 1) { sep =""; set_header(11,"@1g%s",(const char*) sep); } else if (_numcarat == 2) { sep1 =""; set_header(11,"@1g%s",(const char*) sep1); } } int TMastrini_application::crea_intestazione(int start_riga) { TString sep(132),sep1(198); int r = start_riga + 2; reset_header(); _conta_mastrini++; if (_nummast == 3) _gia_stampata_intestazione = TRUE; if (_nummast == 2) if (_cambia_mastrino) { _numero_pag = 1; _cambia_mastrino = FALSE; } if (_numcarat == 1) set_row(r,"@126gPag. %2d", _numero_pag++); else if (_numcarat == 2) set_row(r,"@190gPagina %2d", _numero_pag++); set_row (r, "@0gDITTA@6g%5ld", _codice_ditta); set_row (r, "@12g%-45s", (const char*) _ragsoc); int len = _indulc.len(); if (len <= 25) _indulc << " " << _civulc.mid(0,9); else { _indulc = _indulc.mid(0,25); _indulc << " " << _civulc.mid(0,9); } set_row (r, "@59g%s", (const char*) _indulc); // set_row (r, "@86g%-9s", (const char*) _civulc); set_row (r, "@97g%-5s", (const char*) _capulc); set_row (r, "@103g%-18s", (const char*) _com); set_row (r, "@122g%-3s", (const char*) _prov); r += 2; if (_nummast == 3) { set_row (r, "@0gSottoconto@12g@b%d", _gruppo); set_row (r, "@16g@b%d", _conto); set_row (r, "@20g@b%ld", _sottoc); } else { set_row (r, "@0gSottoconto@12g%d", _gruppo); set_row (r, "@16g%d", _conto); set_row (r, "@20g%ld", _sottoc); } if (_tmcf == 'C') _tipo_mask = 1; else if (_tmcf == 'F') _tipo_mask = 2; else if (_tmcf == '\0') _tipo_mask = 3; switch (_tipo_mask) { case 1: r = ricerca_clifo(r); break; case 2: r = ricerca_clifo(r); break; case 3: r = ricerca_gruppo(r); break; default: break; } r++; if (_numcarat == 1) { sep.fill('-'); //Stampa 132 - (sep(132)) set_row (r++,"@1g%s", (const char *) sep); set_row (r++,"Operazione@19gDocumento@117gContro@131gA"); if (_stampa_mov_prov) set_header(r-1,"@129gM"); set_row (r,"Data"); if (_stampanum < 3) set_row (r,"@11gnumero"); set_row (r++,"@19gData@30gNumero@38gCod.Causale@61gDescrizione@96gDare@111gAvere@117gPartita@131gC"); if (_stampa_mov_prov) set_header(r-1,"@129gP"); sep.fill('-'); set_row (r++,"@1g%s", (const char *) sep); } else if (_numcarat == 2) { sep1.fill('-'); //Stampa 198 - (sep1(198)) set_row (r++,"@0g%s", (const char *) sep1); set_row (r++,"Operazione@23gData@34gNumero@169gContro@180gReg@188gNumero@197gA"); if (_stampa_mov_prov) set_row(r-1,"@195gM"); set_row (r,"Data"); if (_stampanum < 3) set_row (r,"@11gnumero"); set_row (r,"@23gDocumento@42gCod.Causale@70gDescrizione@112gDare@127gAvere"); set_row (r++,"@135gSaldo progre.@152gSaldo movim.@169gPartita@180gIva@184gProtocollo@197gC"); if (_stampa_mov_prov) set_row (r-1,"@195gP"); sep1.fill('-'); set_row (r++,"@0g%s", (const char *) sep1); } return r; } void TMastrini_application::stampa_progre_riporto() { TString sep(132),sep1(198); if (_nummast == 1 || _nummast == 3) _rw = 1; if (_stampa_progressivi_si) { stampa_progressivi(); _riporto_dare = _progredare; _riporto_avere = _progreavere; _stampa_progressivi_si = FALSE; } else { _riporto_dare += _riporto_parziale_dare; _riporto_avere += _riporto_parziale_avere; real dep_dare,dep_avere,imp_d,imp_a; imp_d = _sezione == "D" ? _importo : ZERO; imp_a = _sezione == "A" ? _importo : ZERO; dep_dare = _stampato ? _riporto_dare : _riporto_dare - imp_d; dep_avere = _stampato ? _riporto_avere : _riporto_avere - imp_a; if (_numcarat == 1) { TString string = dep_dare.string("###.###.###.###"); set_row (_rw,"@32gA RIPORTO@85g%15s",(const char*) string); string = dep_avere.string("###.###.###.###"); set_row (_rw++,"@101g%15s",(const char*) string); } if (_numcarat == 2) { TString string = dep_dare.string("###.###.###.###"); set_row (_rw,"@32gA RIPORTO@101g%15s",(const char*) string); string = dep_avere.string("###.###.###.###"); set_row (_rw++,"@117g%15s",(const char*) string); } _riporto_parziale_dare = ZERO; _riporto_parziale_avere = ZERO; } if (_numcarat == 1) { sep =""; set_row(_rw,"@1g%s",(const char*) sep); } else if (_numcarat == 2) { sep1 =""; set_row(_rw,"@1g%s",(const char*) sep1); } } int TMastrini_application::stampa_progre_riporto(int start_riga) { TString sep(132),sep1(198); int r = start_riga; if (_stampa_progressivi_si) { r = stampa_progressivi(r); _riporto_dare = _progredare; _riporto_avere = _progreavere; _stampa_progressivi_si = FALSE; } else { _riporto_dare += _riporto_parziale_dare; _riporto_avere += _riporto_parziale_avere; real dep_dare,dep_avere,imp_d,imp_a; imp_d = _sezione == "D" ? _importo : ZERO; imp_a = _sezione == "A" ? _importo : ZERO; dep_dare = _stampato ? _riporto_dare : _riporto_dare - imp_d; dep_avere = _stampato ? _riporto_avere : _riporto_avere - imp_a; if (_numcarat == 1) { TString string = dep_dare.string("###.###.###.###"); set_row (r,"@32gA RIPORTO@85g%15s",(const char*) string); string = dep_avere.string("###.###.###.###"); set_row (r++,"@101g%15s",(const char*) string); } if (_numcarat == 2) { TString string = dep_dare.string("###.###.###.###"); set_row (r,"@32gA RIPORTO@101g%15s",(const char*) string); string = dep_avere.string("###.###.###.###"); set_row (r++,"@117g%15s",(const char*) string); } _riporto_parziale_dare = ZERO; _riporto_parziale_avere = ZERO; } if (_numcarat == 1) { sep =""; set_row(r++,"@1g%s",(const char*) sep); } else if (_numcarat == 2) { sep1 =""; set_row(r++,"@1g%s",(const char*) sep1); } return r; } void TMastrini_application::calcola_progressivi_al() { long record,sottoc,annoes; int gruppo,conto; TDate datareg, datacomp; TLocalisamfile & rmov = current_cursor()->file(LF_RMOV); char sezione; real importo; TDate data; _totale_prima_dare = ZERO; _totale_prima_avere = ZERO; record = rmov.recno(); rmov.zero(); rmov.put(RMV_GRUPPO, _gruppo); rmov.put(RMV_CONTO, _conto); rmov.put(RMV_SOTTOCONTO, _sottoc); for (rmov.read();!rmov.eof() ;rmov.next()) { annoes = rmov.get_int (RMV_ANNOES); datareg = rmov.get_date(RMV_DATAREG); sezione = rmov.get (RMV_SEZIONE)[0]; importo = rmov.get_real(RMV_IMPORTO); long numreg = rmov.get_long(RMV_NUMREG); _mov->setkey(1); _mov->curr().zero(); _mov->curr().put(MOV_NUMREG,numreg); _mov->read(); if (_mov->bad()) _mov->zero(); datacomp = (_mov->curr().get(MOV_DATACOMP)); if (_annomsk == 0) { datareg = rmov.get_date(RMV_DATAREG); data = _inizioes; } else if (_annomsk != 0) { datareg = datacomp; data = _data_inizioese; } gruppo = rmov.get_int(RMV_GRUPPO); conto = rmov.get_int(RMV_CONTO); sottoc = rmov.get_long(RMV_SOTTOCONTO); if ((gruppo != _gruppo)||(conto != _conto)||(sottoc != _sottoc)) break; else if (((annoes==_annomsk)||(_annomsk == 0))&&(datareg >= data)&&(datareg < _data_ini)) //Legge movimenti con data < data iniziale if (sezione == 'D') _totale_prima_dare += importo; else if (sezione == 'A') _totale_prima_avere += importo; } rmov.readat(record); } void TMastrini_application::calcola_progressivi() { TLocalisamfile saldi(LF_SALDI, FALSE); real pdaresca,paveresca,pdarescap,paverescap; real progdare_attuale,progavere_attuale,progdare_prec,progavere_prec; real saldo,progredare_eseprec,progreavere_eseprec,pdarep,paverep; char salini; saldo = ZERO; pdarep = ZERO; paverep = ZERO; pdaresca = ZERO; paveresca = ZERO; pdarescap = ZERO; paverescap = ZERO; // Ricerca sull'archivio saldi dei record con gruppo,conto,sottoconto // uguali a quelli di rmov per il calcolo dei progressivi precedenti TRectype record(saldi.curr()); record.zero(); record.put(SLD_GRUPPO, _gruppo); record.put(SLD_CONTO, _conto); record.put(SLD_SOTTOCONTO, _sottoc); saldi.setkey(2); saldi.zero(); saldi.put(SLD_GRUPPO, _gruppo); saldi.put(SLD_CONTO, _conto); saldi.put(SLD_SOTTOCONTO, _sottoc); for (saldi.read(_isgteq); saldi.good(); saldi.next()) { if (saldi.curr() != record) break; int annoes_saldi = saldi.curr().get_int(SLD_ANNOES); //Calcola i progressivi dell'esercizio attuale if (annoes_saldi == _anno_corrente) { pdaresca = saldi.get_real(SLD_PDARESCA); paveresca = saldi.get_real(SLD_PAVERESCA); progdare_attuale = saldi.get_real(SLD_PDARE); progavere_attuale = saldi.get_real(SLD_PAVERE); saldo = saldi.get_real(SLD_SALDO); salini = saldi.get(SLD_FLAGSALINI)[0]; _ultima_data_reg = saldi.get_date(SLD_DATAULMOV); } //Calcola i progressivi dell'esercizio precedente if (annoes_saldi == _anno_precedente) { pdarescap = saldi.get_real(SLD_PDARESCA); pdarep = saldi.get_real(SLD_PDARE); paverescap = saldi.get_real(SLD_PAVERESCA); paverep = saldi.get_real(SLD_PAVERE); } // Se il saldo dell'esercizio attuale e' diverso da 0 allora significa che // quello corrisponde al saldo finale dell'esercizio precedente. Per ottenere // i progressivi dell'esercizio precedente devo a questo punto sommare i // progressivi dell'esercizio e i progressivi di quelli scaricati, tenendo // conto del flag salini per sapere se il saldo e' dare oppure avere. /* if (_annomsk != 0 && _anno_corrente == annoes_saldi) { if (saldo != ZERO) { if (salini == 'D') { progredare_eseprec = saldo;// + pdarescap + pdarep; progdare_prec = saldo; } else if (salini == 'A') { progreavere_eseprec = saldo;// + paverescap + paverep; progavere_prec = saldo; } } } */ } // FOR //Se il saldo dell'esercizio attuale non e' diverso da zero, allora il saldo // finale dell'esercizio precedente devo calcolarmelo tenendo conto dell'indbil if (_annomsk != 0 /*&& saldo == ZERO*/) { if ((_indbil == 1) || (_indbil == 2) || (_indbil == 5)) { const TRecnotype pos = saldi.recno(); saldo = _sld->saldofin_esprec(_anno_corrente,_gruppo,_conto,_sottoc); saldi.readat(pos); if (saldo> ZERO) { progredare_eseprec = saldo;// + pdarescap + pdarep; progdare_prec = saldo; } else if (saldo < ZERO) { saldo = -saldo; progreavere_eseprec = saldo;// + paverescap + paverep; progavere_prec = saldo; } } } calcola_progressivi_al(); //Calcolo dei progressivi precedenti: somma di tutti quei movimenti di rmov //che hanno la data di registrazione inferiore alla data di inizio stampa, //dei progressivi dell'anno esercizio precedente, e dei progressivi dei //movimenti scaricati dell'esercizio attuale. _progredare = pdaresca + progredare_eseprec + _totale_prima_dare; _progreavere = paveresca + progreavere_eseprec + _totale_prima_avere; _saldo_progre_prec = _progredare - _progreavere; //Calcolo dei progressivi al //Se sulla maschera e' stato selezionato il controllo competenza esercizio //Sommo i progressivi dell'esercizio precedente e quelli dell'esercizio attuale //altrimenti solo quelli dell'esercizio attuale if (_annomsk != 0) { _totprogre_dare_al = progdare_attuale + progdare_prec; _totprogre_avere_al = progavere_attuale + progavere_prec; } else { _totprogre_dare_al = progdare_attuale; _totprogre_avere_al = progavere_attuale; } } void TMastrini_application::stampa_progressivi() { if (_nummast == 1 || _nummast == 3) _rw = 1; if (_numcarat == 1) { TString string = _saldo_progre_prec.string("###.###.###.###"); set_row (_rw,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); string = _progredare.string("###.###.###.###"); set_row (_rw,"@85g%15s",(const char*) string); string = _progreavere.string("###.###.###.###"); set_row (_rw++,"@101g%15s",(const char*) string); } if (_numcarat == 2) { TString string = _progredare.string("###.###.###.###"); set_row (_rw,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); string = _progreavere.string("###.###.###.###"); set_row (_rw,"@117g%15s",(const char*) string); string = _saldo_progre_prec.string("###.###.###.###"); set_row (_rw++,"@133g%15s",(const char*) string); } } int TMastrini_application::stampa_progressivi(int start_riga) { int r = start_riga; if (_numcarat == 1) { TString string = _saldo_progre_prec.string("###.###.###.###"); set_row (r,"@42gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); string = _progredare.string("###.###.###.###"); set_row (r,"@85g%15s",(const char*) string); string = _progreavere.string("###.###.###.###"); set_row (r++,"@101g%15s",(const char*) string); } if (_numcarat == 2) { TString string = _progredare.string("###.###.###.###"); set_row (r,"@70gPROGRESSIVI PRECEDENTI@101g%15s",(const char*)string); string = _progreavere.string("###.###.###.###"); set_row (r,"@117g%15s",(const char*) string); string = _saldo_progre_prec.string("###.###.###.###"); set_row (r++,"@133g%15s",(const char*) string); } return r; } // Se la ricerca selezionata nella maschera e' per clienti, oppure fornitori, // allora ricerco su CLIFO i relativi dati, e su PCON il relativo gruppo,conto,// sottoconto e IV direttiva CEE void TMastrini_application::ricerca_clifo() { TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; TLocalisamfile clifo(LF_CLIFO); TLocalisamfile pconti(LF_PCON); TString16 dataini,datafine; TString descriz,descriz2; int numrivd; clifo.setkey(1); clifo.zero(); clifo.put(CLI_TIPOCF, _tmcf); clifo.put(CLI_CODCF, _sottoc); clifo.read(); if (clifo.bad()) clifo.zero(); TConto tc (_gruppo,_conto,_sottoc,_tmcf); ragsoc = tc.descrizione(); paiv = clifo.get(CLI_PAIV); cofi = clifo.get(CLI_COFI); indcf = clifo.get(CLI_INDCF); indcf.trim(); indcf << " " << clifo.get(CLI_CIVCF); capcf = clifo.get(CLI_CAPCF); ptel = clifo.get(CLI_PTEL); tel = clifo.get(CLI_TEL); statocf = clifo.get(CLI_STATOCF); comcf = clifo.get(CLI_COMCF); _comuni->setkey(1); _comuni->zero(); _comuni->put(COM_STATO, statocf); _comuni->put(COM_COM, comcf); _comuni->read(); if (_comuni->good()) { dencom = _comuni->get(COM_DENCOM); provcom = _comuni->get(COM_PROVCOM); } else { dencom=""; provcom=""; } pconti.setkey(1); pconti.zero(); pconti.put(PCN_GRUPPO, _gruppo); pconti.put(PCN_CONTO, _conto); pconti.read(); _sezivd = pconti.get_char(PCN_SEZIVD); _lettivd = pconti.get_char(PCN_LETTIVD); numrivd = pconti.get_int(PCN_NUMRIVD); _numrivd = itor(numrivd); _numivd = pconti.get_int(PCN_NUMIVD); descriz = descrizione_classe(_sezivd,_lettivd,numrivd,_numivd); if (_numivd != 0) //Ora devo stampare la descrizione del livello della { //classe immediatamente precedente a quello appena if (_numrivd != "") //stampato descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); else descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); } else if (_numrivd != "") descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); else descriz2 = ""; set_header(3,"@27g%-.30s",(const char*) descrizione_gruppo()); set_header(3,"@59g%-.30s",(const char*) descrizione_conto()); set_header(3, "@91g%-.41s",(const char*) ragsoc); if (_nummast == 3) set_header(4, "@rClasse@8g@b%c", _lettivd); else set_header(4, "Classe@8g%c", _lettivd); set_header(4, "@10g%-8s", (const char*) _numrivd); if (_numivd != 0) set_header(4, "@19g%2d", _numivd); if (descriz2 != "") { set_header(4,"@23g%-50s",(const char*) descriz2); set_header(4,"@80g%-50s",(const char*) descriz); } else set_header(4,"@23g%-50s",(const char*) descriz); dataini = _data_ini.string(); datafine = _data_fine.string(); if (_annomsk == 0) { if (_nummast == 3) { set_header (5, "@rPeriodo@10g@b%s", (const char*) dataini); set_header (5, "@22g@b%s@r", (const char*) datafine); } else { set_header (5, "Periodo@10g%s", (const char*) dataini); set_header (5, "@22g%s", (const char*) datafine); } } else { if (_nummast == 3) { set_header (5, "@rComp. da@9g@b%s", (const char*) dataini); set_header (5, "@20g@ra@22g@b%s@r", (const char*) datafine); } else { set_header (5, "Comp. da@9g%s", (const char*) dataini); set_header (5, "@20ga@22g%s", (const char*) datafine); } } set_header (5, "@33gP.I.@37g%-11s",(const char*) paiv); set_header (5, "@49gCF@52g%-16s",(const char*) cofi); set_header (5, "@69g%-.25s",(const char*) indcf); set_header (5, "@95g%-5s",(const char*) capcf); set_header (5, "@101g%-.24s",(const char*) dencom); set_header (5, "@126g%-5s",(const char*) provcom); if (_numcarat == 2) { set_header (5,"@134g%-4s",(const char*) ptel); if (tel != "") set_header (5,"@138g/@139g%-10s",(const char*) tel); } } int TMastrini_application::ricerca_clifo(int start) { TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; TLocalisamfile clifo(LF_CLIFO); TLocalisamfile pconti(LF_PCON); TString16 dataini,datafine; TString descriz,descriz2; int numrivd; int r = start; clifo.setkey(1); clifo.zero(); clifo.put(CLI_TIPOCF, _tmcf); clifo.put(CLI_CODCF, _sottoc); clifo.read(); if (clifo.bad()) clifo.zero(); TConto tc (_gruppo,_conto,_sottoc,_tmcf); ragsoc = tc.descrizione(); paiv = clifo.get(CLI_PAIV); cofi = clifo.get(CLI_COFI); indcf = clifo.get(CLI_INDCF); indcf.trim(); indcf << " " << clifo.get(CLI_CIVCF); capcf = clifo.get(CLI_CAPCF); ptel = clifo.get(CLI_PTEL); tel = clifo.get(CLI_TEL); statocf = clifo.get(CLI_STATOCF); comcf = clifo.get(CLI_COMCF); _comuni->setkey(1); _comuni->zero(); _comuni->put(COM_STATO, statocf); _comuni->put(COM_COM, comcf); _comuni->read(); if (_comuni->good()) { dencom = _comuni->get(COM_DENCOM); provcom = _comuni->get(COM_PROVCOM); } else { dencom=""; provcom=""; } pconti.setkey(1); pconti.zero(); pconti.put(PCN_GRUPPO, _gruppo); pconti.put(PCN_CONTO, _conto); pconti.read(); _sezivd = pconti.get_char(PCN_SEZIVD); _lettivd = pconti.get_char(PCN_LETTIVD); numrivd = pconti.get_int(PCN_NUMRIVD); _numrivd = itor(numrivd); _numivd = pconti.get_int(PCN_NUMIVD); descriz = descrizione_classe(_sezivd,_lettivd,numrivd,_numivd); if (_numivd != 0) //Ora devo stampare la descrizione del livello della { //classe immediatamente precedente a quello appena if (_numrivd != "") //stampato descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); else descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); } else if (_numrivd != "") descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); else descriz2 = ""; set_row (r,"@27g%-30s",(const char*) descrizione_gruppo()); set_row (r,"@59g%-30s",(const char*) descrizione_conto()); set_row(r++, "@91g%-30s",(const char*) ragsoc); if (_nummast == 3) set_row(r, "@rClasse@8g@b%c", _lettivd); else set_row(r, "Classe@8g%c", _lettivd); set_row(r, "@10g%-8s", (const char*) _numrivd); if (_numivd != 0) set_row(r, "@19g%2d", _numivd); if (descriz2 != "") { set_row(r,"@23g%-50s",(const char*) descriz2); set_row(r++,"@80g%-50s",(const char*) descriz); } else set_row(r++,"@23g%-50s",(const char*) descriz); dataini = _data_ini.string(); datafine = _data_fine.string(); if (_annomsk == 0) { if (_nummast == 3) { set_row (r, "@rPeriodo@10g@b%s", (const char*) dataini); set_row (r, "@22g%s@r", (const char*) datafine); } else { set_row (r, "Periodo@10g%s", (const char*) dataini); set_row (r, "@22g%s", (const char*) datafine); } } else { if (_nummast == 3) { set_row (r, "@rComp. da@9g@b%s", (const char*) dataini); set_row (r, "@20g@ra@22g@b%s@r", (const char*) datafine); } else { set_row (r, "Comp. da@9g%s", (const char*) dataini); set_row (r, "@20ga@22g%s", (const char*) datafine); } } set_row (r, "@33gP.I.@37g%-11s",(const char*) paiv); set_row (r, "@49gCF@52g%-16s",(const char*) cofi); set_row (r, "@69g%-25s",(const char*) indcf); set_row (r, "@95g%-5s",(const char*) capcf); set_row (r, "@101g%-24s",(const char*) dencom); set_row (r, "@126g%-5s",(const char*) provcom); if (_numcarat == 2) { set_row (r,"@134g%-4s",(const char*) ptel); if (tel != "") set_row (r++,"@138g/@139g%-10s",(const char*) tel); } return r; } // Se la ricerca selezionata sulla maschera e' per gruppo, conto, sottoconto // ricerca i corrispondenti su PCON, con relativa IV direttiva CEE void TMastrini_application::ricerca_classe_IV(bool scelta) { TLocalisamfile pconti(LF_PCON); pconti.setkey(1); pconti.zero(); pconti.put(PCN_GRUPPO, _gruppo); pconti.put(PCN_CONTO, _conto); if (scelta) pconti.put(PCN_SOTTOCONTO, _sottoc); pconti.read(); _sezivd = pconti.get_char(PCN_SEZIVD); _lettivd = pconti.get_char(PCN_LETTIVD); _numrivd_int = pconti.get_int (PCN_NUMRIVD); _numrivd = itor(_numrivd_int); _numivd = pconti.get_int (PCN_NUMIVD); } void TMastrini_application::ricerca_gruppo() { TString80 descr,descriz,descriz2,dep; TString dataini,datafine; ricerca_classe_IV (TRUE); //Esiste a livello di sottoconto if (_sezivd == '0') //Non esiste a livello di sottoconto ricerca_classe_IV (FALSE); //Allora la cerco a livello di conto descriz = descrizione_classe(_sezivd,_lettivd,_numrivd_int,_numivd); if (_numivd != 0) //Ora devo stampare la descrizione del livello della { //classe immediatamente precedente a quello appena if (_numrivd != "") //stampato descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); else descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); } else if (_numrivd != "") descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); else descriz2 = ""; set_header(3,"@27g%-.30s",(const char*) descrizione_gruppo()); set_header(3,"@59g%-.30s",(const char*) descrizione_conto()); set_header(3,"@91g%-.41s",(const char*) descrizione_sottoconto()); if (_nummast == 3) set_header(4, "@0g@rClasse@12g@b%c", _lettivd); else set_header(4, "@0gClasse@12g%c", _lettivd); set_header(4, "@14g%-8s",(const char*) _numrivd); if (_numivd != 0) set_header(4, "@23g%d", _numivd); if (descriz2 != "") { set_header(4,"@27g%-50s",(const char*) descriz2); set_header(4,"@80g%-50s",(const char*) descriz); } else set_header(4,"@27g%-50s",(const char*) descriz); dataini = _data_ini.string(); datafine = _data_fine.string(); if (_annomsk == 0) { if (_nummast == 3) { set_header (5, "@rPeriodo@12g@b%s", (const char*) dataini); set_header (5, "@24g@b%s@r", (const char*) datafine); } else { set_header (5, "Periodo@12g%s", (const char*) dataini); set_header (5, "@24g%s", (const char*) datafine); } } else { if (_nummast == 3) { set_header (5, "@rPeriodo di competenza@23g@b%s", (const char*) dataini); set_header (5, "@35g%s@r", (const char*) datafine); } else { set_header (5, "Periodo di competenza@23g%s", (const char*) dataini); set_header (5, "@35g%s", (const char*) datafine); } } } int TMastrini_application::ricerca_gruppo(int start) { TString80 descr,descriz,descriz2,dep; TString dataini,datafine; int r = start; ricerca_classe_IV (TRUE); //Esiste a livello di sottoconto if (_sezivd == '0') //Non esiste a livello di sottoconto ricerca_classe_IV (FALSE); //Allora la cerco a livello di conto descriz = descrizione_classe(_sezivd,_lettivd,_numrivd_int,_numivd); if (_numivd != 0) //Ora devo stampare la descrizione del livello della { //classe immediatamente precedente a quello appena if (_numrivd != "") //stampato descriz2 = descrizione_classe(_sezivd,_lettivd,_numrivd_int,0); else descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); } else if (_numrivd != "") descriz2 = descrizione_classe(_sezivd,_lettivd,0,0); else descriz2 = ""; set_row(r,"@27g%-.30s",(const char*) descrizione_gruppo()); set_row(r,"@59g%-.30s",(const char*) descrizione_conto()); set_row(r++,"@91g%-.41s",(const char*) descrizione_sottoconto()); if (_nummast == 3) set_row(r, "@0g@rClasse@12g@b%c", _lettivd); else set_row(r, "@0gClasse@12g%c", _lettivd); set_row(r, "@14g%-8s",(const char*) _numrivd); if (_numivd != 0) set_row(r, "@23g%d", _numivd); if (descriz2 != "") { set_row(r,"@27g%-50s",(const char*) descriz2); set_row(r++,"@80g%-50s",(const char*) descriz); } else set_row(r++,"@27g%-50s",(const char*) descriz); dataini = _data_ini.string(); datafine = _data_fine.string(); if (_annomsk == 0) { if (_nummast == 3) { set_row (r, "@rPeriodo@12g@b%s", (const char*) dataini); set_row (r, "@24g%s@r", (const char*) datafine); } else { set_row (r, "Periodo@12g%s", (const char*) dataini); set_row (r, "@24g%s", (const char*) datafine); } } else { if (_nummast == 3) { set_row (r, "@rPeriodo di competenza@23g@b%s", (const char*) dataini); set_row (r, "@35g%s@r", (const char*) datafine); } else { set_row (r, "Periodo di competenza@23g%s", (const char*) dataini); set_row (r, "@35g%s", (const char*) datafine); } } return r; } const char* TMastrini_application::descrizione_classe(char sezione, char lettera, int numr, int numero) { TTable tabivd(TAB_IVD); TString dep,dep2; tabivd.zero(); if (numr == 0 && numero == 0) dep = format("%c%c",sezione,lettera); else if (numero == 0) { if (numr != 0) dep = format("%1c%1c%04d",sezione, lettera, numr); else dep = format("%c%c ",sezione,lettera); } else { 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; } //Ricerca la descrizione relativa al gruppo da stampare const char* TMastrini_application::descrizione_gruppo() { TLocalisamfile pconti(LF_PCON); pconti.zero(); pconti.put(PCN_GRUPPO,_gruppo); if (pconti.read() != NOERR) pconti.zero(); TMP = pconti.get(PCN_DESCR); return TMP; } // Ricerca la descrizione relativa al conto da stampare const char* TMastrini_application::descrizione_conto() { TLocalisamfile pconti(LF_PCON); pconti.zero(); pconti.put(PCN_GRUPPO,_gruppo); pconti.put(PCN_CONTO,_conto); if (pconti.read() != NOERR) pconti.zero(); TMP = pconti.get(PCN_DESCR); return TMP; } const char* TMastrini_application::descrizione_sottoconto() { TLocalisamfile pconti(LF_PCON); pconti.zero(); pconti.put(PCN_GRUPPO, _gruppo); pconti.put(PCN_CONTO, _conto); pconti.put(PCN_SOTTOCONTO, _sottoc); if (pconti.read() != NOERR) pconti.zero(); TMP = pconti.get(PCN_DESCR); return TMP; } bool TMastrini_application::user_create() { TToken_string exp; _rel = new TRelation (LF_SALDI); exp.add("GRUPPO=GRUPPO"); exp.add("CONTO=CONTO"); exp.add("SOTTOCONTO=SOTTOCONTO"); _rel->add(LF_RMOV,exp,2,LF_SALDI); _cur1=add_cursor(new TCursor(_rel,"",2)); _nditte = new TLocalisamfile (LF_NDITTE); _unloc = new TLocalisamfile (LF_UNLOC); _comuni = new TLocalisamfile (LF_COMUNI); _mov = new TLocalisamfile (LF_MOV); _clifo = new TLocalisamfile (LF_CLIFO); _caus = new TLocalisamfile (LF_CAUSALI); _tabivd = new TTable (TAB_IVD); _tabtpd = new TTable (TAB_TPD); _tabreg = new TTable (TAB_REG); _tabesc = new TTable (TAB_ESC); _sld = new TSaldo (); _d18 = new TParagraph_string ("",18); _d23 = new TParagraph_string ("",23); _d30 = new TParagraph_string ("",30); _msk = new TMask("cg3200a"); _msk->set_handler(F_SOTTOCINI_CONTO, sottoc_handler_ini); _msk->set_handler(F_SOTTOCINI_CLIENTE, sottoc_handler_ini); _msk->set_handler(F_SOTTOCINI_FORN, sottoc_handler_ini); _msk->set_handler(F_SOTTOCFINE_CONTO, sottoc_handler_fine); _msk->set_handler(F_SOTTOCFINE_CLIENTE, sottoc_handler_fine); _msk->set_handler(F_SOTTOCFINE_FORN, sottoc_handler_fine); _msk->set_handler (F_GRUPPOFINE ,gruppo_hnd); _msk->set_handler (F_CONTOINI_CONTO ,contoi_hnd); _msk->set_handler (F_CONTOINI_CLIENTE ,contoi_hnd); _msk->set_handler (F_CONTOINI_FORN ,contoi_hnd); _msk->set_handler (F_CONTOFINE_CONTO ,contof_hnd); _msk->set_handler (F_CONTOFINE_CLIENTE ,contof_hnd); _msk->set_handler (F_CONTOFINE_FORN ,contof_hnd); _gia_stampata_intestazione = FALSE; // _msk->set_handler (F_SOTTOCFINE_CONTO ,sottoc_hnd); // _msk->set_handler (F_SOTTOCFINE_CLIENTE ,sottoc_hnd); // _msk->set_handler (F_SOTTOCFINE_FORN ,sottoc_hnd); return TRUE; } bool TMastrini_application::user_destroy() { delete _msk; delete _rel; delete _mov; delete _nditte; delete _unloc; delete _comuni; delete _clifo; delete _caus; delete _tabivd; delete _tabtpd; delete _tabreg; delete _tabesc; delete _sld; delete _d18; delete _d23; delete _d30; return TRUE; } int cg3200(int argc, char* argv[]) { TMastrini_application a; a.run(argc, argv, "Stampa Mastrini"); return 0; }