From 997973b64539922bf28499f6613525520f3acf03 Mon Sep 17 00:00:00 2001 From: ale <ale@c028cbd2-c16b-5b4b-a496-9718f37d4682> Date: Fri, 18 Oct 1996 13:24:49 +0000 Subject: [PATCH] - Sistemato il seguente errore: quando la distinta del quadro G occupa piu' di un modulo bisogna stampare prima 2 pagine bianche del quadro G. git-svn-id: svn://10.65.10.50/trunk@3798 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/77qgd.frm | 90 ++++++++++++++++++ m770/77stq.cpp | 241 +++++++++++-------------------------------------- 2 files changed, 142 insertions(+), 189 deletions(-) diff --git a/m770/77qgd.frm b/m770/77qgd.frm index e982aa381..9c0b28354 100755 --- a/m770/77qgd.frm +++ b/m770/77qgd.frm @@ -50,6 +50,96 @@ END END +SECTION HEADER LAST 18 + +STRINGA 1 +BEGIN + KEY "CODICE FISCALE" + PROMPT 4 11 "" + FIELD 106@->COFI +END + +STRINGA 2 +BEGIN + KEY "RAGIONE SOCIALE" + PROMPT 39 11 "" + FIELD 106@->RAGSOC +END + +STRINGA 3 +BEGIN + KEY "COGNOME" + PROMPT 39 11 "" + FIELD 106@->RAGSOC[1,30] + GROUP 1 + FLAGS "H" +END + +STRINGA 4 +BEGIN + KEY "NOME" + PROMPT 17 13 "" + FIELD 106@->RAGSOC[31,50] + GROUP 1 + FLAGS "H" +END + +STRINGA 5 +BEGIN + KEY "COMUNE DI RES." + PROMPT 17 13 "" + FIELD 413@->DENCOM +END + +STRINGA 6 +BEGIN + KEY "PROV DI RES." + PROMPT 58 13 "" + FIELD 413@->PROVCOM +END + +STRINGA 7 +BEGIN + KEY "VIA di RES." + PROMPT 65 13 "" + FIELD 106@->INDRF + FIELD 106@->INDRES + GROUP 4 +END + +STRINGA 8 +BEGIN + KEY "NUM. CIVICO di RES." + PROMPT 101 13 "" + FIELD 106@->CIVRF + FIELD 106@->CIVRES + GROUP 4 +END + +STRINGA 9 +BEGIN + KEY "CAP" + PROMPT 122 13 "" + FIELD 106@->CAPRF + FIELD 106@->CAPRES + GROUP 4 +END + +STRINGA 13 +BEGIN + KEY "CODICE FISCALE DICHIARANTE" + PROMPT 118 16 "" +END + +STRINGA 14 +BEGIN + KEY "NUM. FOGLIO" + PROMPT 120 17 "" + FLAGS "H" +END + +END + SECTION BODY ODD 8 STRINGA 1 diff --git a/m770/77stq.cpp b/m770/77stq.cpp index 9bdb67e0e..727f9d275 100755 --- a/m770/77stq.cpp +++ b/m770/77stq.cpp @@ -1065,8 +1065,8 @@ bool TQuadroG::print(const long codditta, const long NumFis, const long NumNoFis _PaginaCorrente = PRIMA; - if (!InitPrint(codditta)) - return FALSE; +/* if (! */InitPrint(codditta); /*)*/ +// return FALSE; for (int pagina=1; pagina <= QG_PAGINE; pagina++, next_page(pr)) { @@ -1117,6 +1117,9 @@ class TDistintaG : public TQuadroG int calcola_firma(); public: virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + + void stampa_testata_quadroG(TPrinter& pr); + TDistintaG(const char* form, const char* quadro) : TQuadroG(form,quadro) {} virtual ~TDistintaG() {} }; @@ -1161,7 +1164,7 @@ void TDistintaG::stampa_totali(TPrinter& pr, bool tot) { TPrint_section& totali = section('F', even_page); totali.update(); - const int lasty = calcola_firma(); + const int lasty = calcola_firma() - 1; for (int i = 0; i < totali.items(); i++) { TPrintrow& row = totali.row(i); @@ -1215,6 +1218,45 @@ void TDistintaG::set_body(TPrinter& pr, const char tipo) progind()->addstatus(1); } +void TDistintaG::stampa_testata_quadroG(TPrinter& pr) +{ + TPrint_section& head = section('H', last_page); + const word r = head.height()-1; + TPrintrow& head_row = head.row(r-1); + +// Setta il cod.fis. del dichiarante se necessario + if (tipo_ditta() == estinto) + { + TForm_item& cfd = head.find_field(H_COFI_DIC); + cfd.set(_cofi_dic); + } +// Righe da saltare nelle prime pag. dei moduli successivi al primo (che' son +// senza le righe del posizionamento...) + int righedasaltare=HEADER_PRIMA_NOPOS; + head.update(); + for (word j = 0; j <= r; j++) + { + if (j==0) + { + if (_modulaser) + { + TPrintrow& r = head.row(j); + if (!_GiaMessoStartDoc) + put_modulaser(r, STARTDOC); + put_modulaser(r, STARTDITTA); + put_modulaser(r, STARTPAGE, 1); + pr.print(r); + _RigaCorr++; + r.reset(); + righedasaltare--; + } + if (!PaginaPosizionamento()) + fill_page(pr, righedasaltare); + } + pr.print(head.row(j)); + _RigaCorr++; + } +} bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoFis) { @@ -1387,6 +1429,12 @@ bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoF stampa_totali(pr,FALSE); _EndPrintDitta = _finite_fis && _finite_nofis; + if (!_EndPrintDitta) + { // Se la distinta occupa piu' di un modulo devo fare in modo + next_page(pr); // che vengano stampate la testata del quadro G piu' le prime + stampa_testata_quadroG(pr); // due pagine vuote prima di continuare a stampare la distinta + next_page(pr); + } } } // for pagina.. } // while !EndPrintDitta @@ -1398,194 +1446,8 @@ bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoF } return TRUE; - -/* - VECCHIA PRINT DELLA DISTINTA - TCursor* cur = cursor(); - - bool StabilitaInesistenzaNoFis = FALSE; - bool StabilitaInesistenzaFis = FALSE; - long CtrFis = NumFis; - long CtrNoFis = NumNoFis; - long PtrFis = -1L, PtrNoFis=-1L; - TPrinter& pr = printer(); - - _CtrFisStampati = _CtrNoFisStampati = 0; - _finite_fis = _finite_nofis = FALSE; - _GiaStampatiFis = _GiaStampatiNoFis = FALSE; - _EndPrintDitta = FALSE; // Vero se stampato l'ultimo record - bool LastRecord = FALSE; // Vero se letto l'ultimo record - _PaginaCorrente = PRIMA; - - _codditta = codditta; - _RigaCorr = 0; - - const long items = filtra(codditta); - - while (!_EndPrintDitta) - { - for (int pagina=1; pagina <= QGD_PAGINE; pagina++, next_page(pr)) - { - pr.formlen(QGD_FORMLEN); - - if (_PaginaCorrente == PRIMA) - { - _EndPrintDitta=(_finite_fis && _finite_nofis); - - if (_EndPrintDitta ) - break; - - if (_finite_fis || StabilitaInesistenzaFis) - break; - - if (_modulaser) ClearFlagModulaser(); - - for (int righe=0; righe < QGD_RIGHE_PRIMA; righe++) - { -// Stampa intestazione, solo sul primo foglio. - if (!righe) - { - (*cur) = PtrFis >= 0L ? PtrFis : 0L; - stampa_testata(pr); - } - -// La prima volta si deve posizionare sul primo record di p.f. - if (PtrFis<0L && !StabilitaInesistenzaFis) - { - bool Trovato = FALSE; - - while (!Trovato) - { - const long ditta = cur->curr().get_long(QGD_CODDITTA); - if (ditta != codditta) - break; - const char tipo = cur->curr().get(QGD_TIPOA)[0]; - if (tipo != 'G') - { - PtrFis = cur->pos(); - Trovato = TRUE; - break; - } - else - ++(*cur); - } - StabilitaInesistenzaFis = !Trovato; - } - - if (StabilitaInesistenzaFis) - { - _finite_fis=TRUE; - break; - } - - (*cur) = PtrFis; - const char tipo = cur->curr().get(QGD_TIPOA)[0]; - - if (tipo != 'F') - break; - else - { - CtrFis--; - if (CtrFis == 0L) _finite_fis = TRUE; - set_body(pr, 'F'); -// La stampa e' finita se ho STAMPATO l'ultimo record - LastRecord = cur->pos() >= items-1; - _EndPrintDitta = LastRecord; - if (!LastRecord) - { - ++(*cur); - PtrFis = cur->pos(); - LastRecord = cur->pos() >= items-1; - } - } - } // for righe.. - PtrFis = cur->pos(); - } - - if (_PaginaCorrente == SECONDA) - { -// Reset del flag di pagina con posiz. - if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; - for (int righe=0; righe < QGD_RIGHE_SECONDA; righe++) - { - if (!righe) - _CtrNoFisStampati = 0; - -// All'inizio salta le righe in alto - if (!righe) - fill_page(pr, HEADER_SECONDA_GD); - - if (_finite_nofis || StabilitaInesistenzaNoFis) - break; - -// La prima volta si deve posizionare sul primo record di p.g. - if (PtrNoFis<0L && !StabilitaInesistenzaNoFis) - { - bool Trovato = FALSE; - bool eof = FALSE; - (*cur) = PtrFis-1 > 0L ? PtrFis-1 : 0L; // parti dall'inizio - while (!Trovato && !eof) - { - eof = cur->pos() >= items-1; - const char tipo = cur->curr().get(QGD_TIPOA)[0]; - if (tipo == 'G') - { - PtrNoFis = cur->pos(); - Trovato = TRUE; - break; - } - else - ++(*cur); - } - StabilitaInesistenzaNoFis = !Trovato; - } - -// Gestisce i casi in cui non ci sono percipienti nella distinta.. -// if (items==0) _EndPrintDitta=TRUE; - - if (StabilitaInesistenzaNoFis) - { - _finite_nofis=TRUE; - break; - } - - (*cur) = PtrNoFis; - const char tipo = cur->curr().get(QGD_TIPOA)[0]; - - if (tipo != 'G') - break; - else - { - CtrNoFis--; - if (CtrNoFis == 0L) _finite_nofis = TRUE; - set_body(pr, 'G'); - LastRecord = cur->pos() >= items-1; - _EndPrintDitta = LastRecord; - _CtrNoFisStampati++; - if (!LastRecord) - { - ++(*cur); - PtrNoFis = cur->pos(); - LastRecord = cur->pos() >= items-1; - } - } - } - PtrNoFis = cur->pos(); - } - } // for pagina.. - } // while !EndPrintDitta - - if (usa_progind()) - { - delete _prog; - _prog = NULL; - } - - return TRUE; -*/ } - /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// @@ -3000,6 +2862,7 @@ bool TStampaQuadroG::print_quadro(const int OffsetDitta, const bool modulaser) items_g = _form_g->filtra(codditta); items_gd = _form_gd->filtra(codditta); + if (items_g == 0 && items_gd == 0) continue; // Dice al form quanto e' lunga la progress-bar _form_g->set_items_gd(items_g, items_gd);