diff --git a/m770/772.pdb b/m770/772.pdb index 882a1a66b..10e64be7b 100755 Binary files a/m770/772.pdb and b/m770/772.pdb differ diff --git a/m770/77qc.frm b/m770/77qc.frm index 9236cd87d..10b6b543a 100755 --- a/m770/77qc.frm +++ b/m770/77qc.frm @@ -299,7 +299,7 @@ BEGIN PROMPT 45 5 "" PICTURE "###.###.###^^^" MESSAGE ADD,FL->14 - FIELD 61->TOTALE +// FIELD 61->TOTALE END NUMBER 15 @@ -308,7 +308,7 @@ BEGIN PROMPT 60 5 "" PICTURE "###.###.###^^^" MESSAGE ADD,FL->15 - FIELD 61->CONTSSN +// FIELD 61->CONTSSN END NUMBER 16 @@ -317,7 +317,7 @@ BEGIN PROMPT 76 5 "" PICTURE "###.###.###^^^" MESSAGE ADD,FL->16 - FIELD 61->SOMME +// FIELD 61->SOMME END NUMBER 17 diff --git a/m770/77qd.frm b/m770/77qd.frm index 542039479..52a8404c7 100755 --- a/m770/77qd.frm +++ b/m770/77qd.frm @@ -7,8 +7,8 @@ JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) JOIN 6 TO 62 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR -JOIN 13 TO 216@ ALIAS 313 INTO COM=COMNASC -JOIN 13 TO 218@ ALIAS 413 INTO COM=COMRF(COMRES) +JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC +JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRF(COMRES) JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES END @@ -36,71 +36,8 @@ BEGIN FI 131 END -SECTION HEADER FIRST 28 +SECTION HEADER FIRST 31 -STRINGA 1 -BEGIN - KEY "CODICE FISCALE" - PROMPT 4 13 "" - FIELD 116@->COFI -END - -STRINGA 2 -BEGIN - KEY "RAGIONE SOCIALE" - PROMPT 39 13 "" - FIELD 116@->RAGSOC - GROUP 2 -END - -STRINGA 3 -BEGIN - KEY "COGNOME" - PROMPT 39 13 "" - FIELD 116@->RAGSOC[1,30] - GROUP 1 -END - -STRINGA 4 -BEGIN - KEY "NOME" - PROMPT 17 15 "" - FIELD 116@->RAGSOC[31,50] - GROUP 1 -END - -STRINGA 5 -BEGIN - KEY "SESSO" - PROMPT 58 15 "" - FIELD 118@->SESSO - GROUP 1 -END - -STRINGA 6 -BEGIN - KEY "DATA DI NASCITA" - PROMPT 66 15 "" - FIELD 118@->DATANASC - GROUP 1 -END - -STRINGA 7 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 84 15 "" - FIELD 113@->DENCOM - GROUP 1 -END - -STRINGA 8 -BEGIN - KEY "PROV. DI NASCITA" - PROMPT 126 15 "" - FIELD 113@->PROVCOM - GROUP 1 -END - LISTA 9 BEGIN KEY "Tipo anagrafica" @@ -109,51 +46,114 @@ BEGIN ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ END +STRINGA 1 +BEGIN + KEY "CODICE FISCALE" + PROMPT 4 12 "" + FIELD 116@->COFI +END + +STRINGA 2 +BEGIN + KEY "RAGIONE SOCIALE" + PROMPT 39 12 "" + FIELD 116@->RAGSOC + GROUP 2 +END + +STRINGA 3 +BEGIN + KEY "COGNOME" + PROMPT 39 12 "" + FIELD 116@->RAGSOC[1,30] + GROUP 1 +END + +STRINGA 4 +BEGIN + KEY "NOME" + PROMPT 17 14 "" + FIELD 116@->RAGSOC[31,50] + GROUP 1 +END + +STRINGA 5 +BEGIN + KEY "SESSO" + PROMPT 58 14 "" + FIELD 118@->SESSO + GROUP 1 +END + +STRINGA 6 +BEGIN + KEY "DATA DI NASCITA" + PROMPT 66 14 "" + FIELD 118@->DATANASC + GROUP 1 +END + +STRINGA 7 +BEGIN + KEY "COMUNE DI NASCITA" + PROMPT 84 14 "" + FIELD 113@->DENCOM + GROUP 1 +END + +STRINGA 8 +BEGIN + KEY "PROV. DI NASCITA" + PROMPT 126 14 "" + FIELD 113@->PROVCOM + GROUP 1 +END + STRINGA 10 BEGIN KEY "COMUNE DI RES.FISCALE" - PROMPT 17 17 "" + PROMPT 17 16 "" FIELD 213@->DENCOM END STRINGA 11 BEGIN KEY "PROV DI RES.FISCALE" - PROMPT 59 17 "" + PROMPT 59 16 "" FIELD 213@->PROVCOM END STRINGA 12 BEGIN KEY "VIA di RES." - PROMPT 66 17 "" + PROMPT 66 16 "" FIELD 116@->INDRF END -STRINGA 13 +STRINGA 15 BEGIN KEY "NUM. CIVICO di RES." - PROMPT 102 17 "" + PROMPT 102 16 "" FIELD 116@->CIVRF END -STRINGA 14 +STRINGA 16 BEGIN KEY "CAP" - PROMPT 120 17 "" + PROMPT 120 16 "" FIELD 116@->CAPRF END -STRINGA 15 +STRINGA 13 BEGIN KEY "CODICE FISCALE DICHIARANTE" - PROMPT 118 20 "" + PROMPT 118 19 "" END -NUMBER 16 +NUMBER 14 BEGIN KEY "NUM. FOGLIO" - PROMPT 123 20 "" + PROMPT 123 22 "" END END @@ -171,22 +171,22 @@ END STRINGA 1 BEGIN KEY "COD.FIS" - PROMPT 10 2 "" + PROMPT 10 1 "" FIELD 216@->COFI END STRING 2 BEGIN KEY "COGNOME" - PROMPT 42 2 "" + PROMPT 42 1 "" FIELD 216@->RAGSOC[1,30] GROUP 1 -END +END STRING 3 BEGIN KEY "NOME" - PROMPT 81 2 "" + PROMPT 81 1 "" FIELD 216@->RAGSOC[31,50] GROUP 1 END @@ -194,7 +194,7 @@ END STRING 102 BEGIN KEY "RAGSOC GIURIDICHE" - PROMPT 54 2 "" + PROMPT 54 1 "" FIELD 216@->RAGSOC GROUP 2 END @@ -202,21 +202,21 @@ END STRING 4 BEGIN KEY "DATA NASCITA" - PROMPT 114 2 "" + PROMPT 114 1 "" FIELD 218@->DATANASC END STRING 5 BEGIN KEY "SESSO" - PROMPT 129 2 "" + PROMPT 129 1 "" FIELD 218@->SESSO END STRING 6 BEGIN KEY "COMUNE DI NASCITA" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 313@->DENCOM GROUP 1 END @@ -224,7 +224,7 @@ END STRING 101 BEGIN KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 413@->DENCOM GROUP 2 END @@ -232,7 +232,7 @@ END STRING 7 BEGIN KEY "PROV DI NASCITA" - PROMPT 47 4 "" + PROMPT 47 3 "" FIELD 313@->PROVCOM GROUP 1 END @@ -240,7 +240,7 @@ END STRING 8 BEGIN KEY "COMUNE DI RESIDENZA" - PROMPT 53 4 "" + PROMPT 53 3 "" FIELD 413@->DENCOM GROUP 1 END @@ -248,165 +248,175 @@ END STRING 9 BEGIN KEY "PROV. RESIDENZA" - PROMPT 88 4 "" + PROMPT 88 3 "" FIELD 413@->PROVCOM END STRING 106 BEGIN KEY "PROV. RESIDENZA GIURIDICHE" - PROMPT 61 4 "" + PROMPT 61 3 "" FIELD 413@->PROVCOM GROUP 2 END -STRING 10 +STRING 108 BEGIN KEY "VIA RES." - PROMPT 94 4 "" + PROMPT 94 3 "" FIELD 216@->INDRES[1,18] FLAGS "H" - MESSAGE COPY,12|COPY,107 + MESSAGE COPY,10|COPY,107 END -STRING 11 +STRING 109 BEGIN KEY "NUM.CIV" - PROMPT 93 4 "" + PROMPT 93 3 "" FLAGS "H" FIELD 216@->CIVRES - MESSAGE APPEND,12|APPEND,107 + MESSAGE APPEND,10|APPEND,107 END -STRING 12 +STRING 10 BEGIN KEY "VIA RES. + numcivres" - PROMPT 95 4 "" + PROMPT 95 3 "" GROUP 1 END STRING 107 BEGIN KEY "VIA RES GIURIDICHE" - PROMPT 69 4 "" + PROMPT 69 3 "" GROUP 2 END +STRING 11 +BEGIN + KEY "FLAG DI NON RESIDENTE" + PROMPT 11 5 "" + FIELD 216@->SOGGNRES +END + +STRING 12 +BEGIN + KEY "STATO ESTERO DI RES." + PROMPT 16 5 "" + FIELD 24@->S0 +END + +STRING 13 +BEGIN + KEY "CODICE STATO ESTERO DI RES." + PROMPT 75 5 "" + FIELD 216@->STATORES +END + STRING 14 BEGIN - KEY "FLAG DI NON RESIDENTE" - PROMPT 11 6 "" - FIELD 216@->SOGGNRES + KEY "CODICE FISCALE ESTERO" + PROMPT 89 5 "" + FIELD 216@->COFIEST END STRING 15 -BEGIN - KEY "STATO ESTERO DI RES." - PROMPT 16 6 "" - FIELD 24@->S0 -END - -STRING 16 -BEGIN - KEY "CODICE STATO ESTERO DI RES." - PROMPT 75 6 "" - FIELD 216@->STATORES -END - -STRING 17 -BEGIN - KEY "CODICE FISCALE ESTERO" - PROMPT 89 6 "" - FIELD 216@->COFIEST -END - -STRING 18 BEGIN KEY "DESCR. CAUSALE" - PROMPT 10 8 "" + PROMPT 10 7 "" FIELD 14@->S0[1,20] END +NUMBER 16 +BEGIN + KEY "TOTALE" + PROMPT 36 7 "" +// FIELD 62->TOTALE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->16 +END + +NUMBER 17 +BEGIN + KEY "SOMME NON SOGGETTE A RITENUTA" + PROMPT 55 7 "" +// FIELD 62->SOMME + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->17 +END + +NUMBER 18 +BEGIN + KEY "IMPONIBILE" + PROMPT 75 7 "" +// FIELD 62->IMPONIBILE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->18 +END + STRING 19 -BEGIN - KEY "TOTALE" - PROMPT 36 8 "" - FIELD 62->TOTALE - PICTURE "#########^^^" -END - -STRING 20 -BEGIN - KEY "SOMME NON SOGGETTE A RITENUTA" - PROMPT 55 8 "" - FIELD 62->SOMME - PICTURE "#########^^^" -END - -STRING 21 -BEGIN - KEY "IMPONIBILE" - PROMPT 75 8 "" - FIELD 62->IMPONIBILE - PICTURE "#########^^^" -END - -STRING 22 BEGIN KEY "ALIQUOTA" - PROMPT 88 8 "" + PROMPT 88 7 "" FIELD 62->PERC PICTURE "###@@" END -STRING 23 +NUMBER 20 BEGIN KEY "IMPORTO" - PROMPT 100 8 "" - FIELD 62->IMPORTO - PICTURE "#########^^^" + PROMPT 100 7 "" +// FIELD 62->IMPORTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->20 END -STRING 24 +NUMBER 21 BEGIN KEY "NETTO" - PROMPT 119 8 "" - FIELD 62->NETTO - PICTURE "#########^^^" + PROMPT 119 7 "" +// FIELD 62->NETTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->21 END END -SECTION BODY EVEN 2 +SECTION FOOTER LAST 1 -NUMBER 1 +NUMBER 16 BEGIN KEY "TOTALE TOTALE" - PROMPT 36 1 "" + PROMPT 36 1 "" + PICTURE "###.###.###^^^" END -NUMBER 2 +NUMBER 17 BEGIN KEY "TOTALE SOMME NON SOGGETTE" - PROMPT 55 1 "" + PROMPT 55 1 "" + PICTURE "###.###.###^^^" END -NUMBER 3 +NUMBER 18 BEGIN KEY "TOTALE IMPONIBILE" PROMPT 75 1 "" + PICTURE "###.###.###^^^" END -NUMBER 4 +NUMBER 20 BEGIN KEY "TOTALE IMPORTO" PROMPT 101 1 "" + PICTURE "###.###.###^^^" END -NUMBER 5 +NUMBER 21 BEGIN KEY "TOTALE NETTO" PROMPT 120 1 "" + PICTURE "###.###.###^^^" END END diff --git a/m770/77qd1.frm b/m770/77qd1.frm index e0bf57f68..6c852116b 100755 --- a/m770/77qd1.frm +++ b/m770/77qd1.frm @@ -36,7 +36,7 @@ BEGIN FI 131 END -SECTION HEADER FIRST 27 +SECTION HEADER FIRST 29 LISTA 9 BEGIN @@ -188,7 +188,7 @@ END STRING 2 BEGIN KEY "COGNOME" - PROMPT 42 2 "" + PROMPT 42 1 "" FIELD 216@->RAGSOC[1,30] GROUP 1 END @@ -196,7 +196,7 @@ END STRING 3 BEGIN KEY "NOME" - PROMPT 81 2 "" + PROMPT 80 1 "" FIELD 216@->RAGSOC[31,50] GROUP 1 END @@ -204,7 +204,7 @@ END STRING 101 BEGIN KEY "RAGSOC GIURIDICHE" - PROMPT 54 2 "" + PROMPT 54 1 "" FIELD 216@->RAGSOC GROUP 2 END @@ -212,7 +212,7 @@ END STRING 4 BEGIN KEY "DATA NASCITA" - PROMPT 114 2 "" + PROMPT 112 1 "" FIELD 218@->DATANASC GROUP 1 END @@ -220,7 +220,7 @@ END STRING 5 BEGIN KEY "SESSO" - PROMPT 129 2 "" + PROMPT 126 1 "" FIELD 218@->SESSO GROUP 1 END @@ -228,7 +228,7 @@ END STRING 6 BEGIN KEY "COMUNE DI NASCITA" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 313@->DENCOM GROUP 1 END @@ -236,7 +236,7 @@ END STRING 7 BEGIN KEY "PROV DI NASCITA" - PROMPT 47 4 "" + PROMPT 46 3 "" FIELD 313@->PROVCOM GROUP 1 END @@ -244,7 +244,7 @@ END STRING 8 BEGIN KEY "COMUNE DI RESIDENZA" - PROMPT 53 4 "" + PROMPT 53 3 "" FIELD 413@->DENCOM GROUP 1 END @@ -252,7 +252,7 @@ END STRING 102 BEGIN KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 413@->DENCOM GROUP 2 END @@ -260,7 +260,7 @@ END STRING 9 BEGIN KEY "PROV. RESIDENZA" - PROMPT 88 4 "" + PROMPT 87 3 "" FIELD 413@->PROVCOM GROUP 1 END @@ -268,7 +268,7 @@ END STRING 103 BEGIN KEY "PROVINCIA DI RESIDENZA GIURIDICHE" - PROMPT 88 4 "" + PROMPT 51 3 "" FIELD 413@->PROVCOM GROUP 2 END @@ -276,7 +276,7 @@ END STRING 105 BEGIN KEY "VIA RESIDENZA" - PROMPT 94 4 "" + PROMPT 94 3 "" FIELD 216@->INDRES[1,18] FLAGS "H" MESSAGE COPY,10|COPY,104 @@ -285,7 +285,7 @@ END STRING 106 BEGIN KEY "NUMERO CIVICO" - PROMPT 93 4 "" + PROMPT 93 3 "" FLAGS "H" FIELD 216@->CIVRES MESSAGE APPEND,10|APPEND,104 @@ -294,29 +294,29 @@ END STRING 10 BEGIN KEY "VIA + NUMERO CIVICO RESIDENZA" - PROMPT 95 4 "" + PROMPT 95 3 "" GROUP 1 END STRING 104 BEGIN KEY "VIA + NUMERO CIVICO RESIDENZA GIURIDICHE" - PROMPT 69 4 "" + PROMPT 75 3 "" GROUP 2 END STRING 11 BEGIN KEY "CAUSALE DEL QUADRO D1" - PROMPT 10 8 "" + PROMPT 12 5 "" FIELD 14@->S3 END NUMBER 12 BEGIN KEY "TOTALE" - PROMPT 36 8 "" - FIELD 63->TOTALE + PROMPT 19 5 "" +// FIELD 63->TOTALE PICTURE "###.###.###^^^" MESSAGE ADD,FL->12 END @@ -324,8 +324,8 @@ END NUMBER 13 BEGIN KEY "QUOTA PROVVIGIONI" - PROMPT 55 8 "" - FIELD 63->QUOTAPRO + PROMPT 36 5 "" +// FIELD 63->QUOTAPRO PICTURE "###.###.###^^^" MESSAGE ADD,FL->13 END @@ -333,8 +333,8 @@ END NUMBER 14 BEGIN KEY "SPESE ANTICIPATE" - PROMPT 65 8 "" - FIELD 63->SPESEANT + PROMPT 53 5 "" +// FIELD 63->SPESEANT PICTURE "###.###.###^^^" MESSAGE ADD,FL->14 END @@ -342,16 +342,16 @@ END NUMBER 15 BEGIN KEY "IMPONIBILE" - PROMPT 75 8 "" - FIELD 63->IMPONIBILE + PROMPT 70 5 "" +// FIELD 63->IMPONIBILE PICTURE "###.###.###^^^" MESSAGE ADD,FL->15 END -NUMBER 16 +STRING 16 BEGIN KEY "ALIQUOTA" - PROMPT 88 8 "" + PROMPT 87 5 "" FIELD 63->PERC PICTURE "###@@" END @@ -359,8 +359,8 @@ END NUMBER 17 BEGIN KEY "IMPORTO" - PROMPT 100 8 "" - FIELD 63->IMPORTO + PROMPT 99 5 "" +// FIELD 63->IMPORTO PICTURE "###.###.###^^^" MESSAGE ADD,FL->17 END @@ -368,50 +368,56 @@ END NUMBER 18 BEGIN KEY "NETTO" - PROMPT 119 8 "" - FIELD 63->NETTO + PROMPT 115 5 "" +// FIELD 63->NETTO PICTURE "###.###.###^^^" MESSAGE ADD,FL->18 END END -SECTION BODY EVEN 2 +SECTION FOOTER LAST 2 NUMBER 12 BEGIN KEY "TOTALE TOTALE" - PROMPT 36 1 "" + PROMPT 19 1 "" + PICTURE "###.###.###^^^" END NUMBER 13 BEGIN KEY "TOTALE QUOTA PROVVIGIONI" - PROMPT 55 1 "" + PROMPT 36 1 "" + PICTURE "###.###.###^^^" END NUMBER 14 BEGIN KEY "TOTALE SPESE ANTICIPATE" - PROMPT 75 1 "" + PROMPT 53 1 "" + PICTURE "###.###.###^^^" END NUMBER 15 BEGIN KEY "TOTALE IMPONIBILE" - PROMPT 75 1 "" + PROMPT 70 1 "" + PICTURE "###.###.###^^^" END NUMBER 17 BEGIN KEY "TOTALE IMPORTO" - PROMPT 101 1 "" + PROMPT 99 1 "" + PICTURE "###.###.###^^^" END NUMBER 18 BEGIN KEY "TOTALE NETTO" - PROMPT 120 1 "" + PROMPT 115 1 "" + PICTURE "###.###.###^^^" END END diff --git a/m770/77stq.cpp b/m770/77stq.cpp index aadebf565..0208b8ff7 100755 --- a/m770/77stq.cpp +++ b/m770/77stq.cpp @@ -1,4 +1,3 @@ -// Stampa quadro #include #include @@ -12,7 +11,8 @@ #include #include -#include +#include +#include "quadroc.h" #include "quadrod.h" #include "quadrod1.h" #include "quadrogd.h" @@ -51,6 +51,27 @@ typedef enum { STARTDOC, STARTDITTA, STARTPAGE, ENDDOC } ModulaserKey; #define TOT_IMPON 3 #define TOT_IMPOR 4 #define TOT_NETTO 5 + +#define D_TOTALE 16 +#define D_SNSRIT 17 +#define D_IMPONIBILE 18 +#define D_IMPORTO 20 +#define D_NETTO 21 + +#define D1_TOTALE 12 +#define D1_QUOTAPRO 13 +#define D1_SPESEANT 14 +#define D1_IMPONIBILE 15 +#define D1_IMPORTO 17 +#define D1_NETTO 18 + +#define C_TOTALE 14 +#define C_CONTSSN 15 +#define C_SOMME 16 +#define C_IMPONIBILE 17 +#define C_RITENUTE 18 +#define C_NETTO 19 + #define H_COFI_DIC 13 #define H_NUM_FOGLIO 14 @@ -59,17 +80,28 @@ HIDDEN const int QD_FORMLEN_PRIMA = 70; // 72 - 3 (3 e' la posizione della X di HIDDEN const int QD_FORMLEN = 72; HIDDEN const int POS_DITTA = 120; // Colonna del codice ditta a pie' di modulo HIDDEN const int QD_PAGINE = 4; -HIDDEN const int QD_RIGHE_PRIMA = 5; +HIDDEN const int QD_RIGHE_PRIMA = 4; HIDDEN const int QD_RIGHE_SECONDA = 7; -HIDDEN const int QD_RIGHE_TERZA = 6; -HIDDEN const int QD_RIGHE_QUARTA = 6; -HIDDEN const int HEADER_SECONDA = 7; +HIDDEN const int QD_RIGHE_TERZA = 7; +HIDDEN const int QD_RIGHE_QUARTA = 6; +HIDDEN const int QD1_RIGHE_PRIMA = 6; +HIDDEN const int QD1_RIGHE_SECONDA = 9; +HIDDEN const int QD1_RIGHE_TERZA = 9; +HIDDEN const int QD1_RIGHE_QUARTA = 8; + +HIDDEN const int HEADER_SECONDA = 8; HIDDEN const int HEADER_TERZA = 8; // Sarebbero 9 col righello... -HIDDEN const int HEADER_QUARTA = 14; // 15 col righello... +HIDDEN const int HEADER_QUARTA = 13; // 15 col righello... + +HIDDEN const int HEADER_D1_SECONDA = 8; +HIDDEN const int HEADER_D1_TERZA = 8; +HIDDEN const int HEADER_D1_QUARTA = 14; typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro; typedef enum { fisiche, nofisiche } TipoPagina; +// Stampa quadro + /////////////////////////////////////////////////////////////////////////////////////////// // // Quadro D @@ -81,11 +113,9 @@ class TDicForm : public TForm private: real _f_tot_totale, _f_tot_snsrit, _f_tot_impon, _f_tot_impor, _f_tot_netto; real _nf_tot_totale, _nf_tot_snsrit, _nf_tot_impon, _nf_tot_impor, _nf_tot_netto; - void aggiorna_totali_C(const char tipo); - void aggiorna_totali_D(const char tipo); - void aggiorna_totali_D1(const char tipo); - void aggiorna_totali_E(const char tipo); - void aggiorna_totali_E1(const char tipo); +// void aggiorna_totali_D(const char tipo); +// void aggiorna_totali_E(const char tipo); +// void aggiorna_totali_E1(const char tipo); TCursor* _cur; @@ -115,7 +145,7 @@ class TDicForm : public TForm void stampa_testata(TPrinter& pr); virtual void stampa_totali(TPrinter& pr); - virtual void aggiorna_totali(const char tipo); +// virtual void aggiorna_totali(const char tipo); virtual void set_body(TPrinter& pr, const char tipo); void StampaPagina(PaginaQuadro PaginaCorrente, const bool StampaTotali, const long Fis, const long NoFis); void posiziona(); @@ -387,7 +417,7 @@ bool TDicForm::print(const long codditta, const long NumFis, const long NumNoFis } if (_PaginaCorrente == TERZA) - { + { for (int righe=0; righe < QD_RIGHE_TERZA; righe++) { if (!righe) @@ -424,7 +454,8 @@ bool TDicForm::print(const long codditta, const long NumFis, const long NumNoFis } if (_PaginaCorrente == QUARTA) - { + { + azzera_totali(); for (int righe=0; righe < QD_RIGHE_QUARTA; righe++) { if (!righe) @@ -635,7 +666,15 @@ void TDicForm::jump_to_line(TPrinter& pr, const int lin) } void TDicForm::stampa_totali(TPrinter& pr) -{ +{ + TPrint_section& totali = section('F', last_page); + totali.update(); + for (int i = 0; i < totali.items(); i++) + { + pr.print(totali.row(i)); + _RigaCorr++; + } +/* PaginaQuadro PagCorr = curr_page(); TPrint_section& foot = section('B', even_page); const char* pic = "############"; @@ -727,7 +766,8 @@ const int NUM_RIGHE = 8; _RigaCorr++; } foot.reset(); // non stampare piu' questi totali! - } + } +*/ } void TDicForm::stampa_testata(TPrinter& pr) @@ -790,10 +830,11 @@ void TDicForm::next_page(TPrinter& pr) void TDicForm::azzera_totali() { - _f_tot_netto = _f_tot_totale = _f_tot_impor = _f_tot_impon = _f_tot_snsrit = ZERO; - _nf_tot_netto = _nf_tot_totale = _nf_tot_impor = _nf_tot_impon = _nf_tot_snsrit = ZERO; + TPrint_section& foot = section('F', last_page); + for (int f = foot.fields()-1; f >= 0; f--) + foot.field(f).set(""); } - +/* void TDicForm::aggiorna_totali_E(const char tipo) { } @@ -832,92 +873,24 @@ void TDicForm::aggiorna_totali_D(const char tipo) } } -void TDicForm::aggiorna_totali_D1(const char tipo) -{ - real totale, netto, impon, QuotaProv, SpeseAnt, impor; - TCursor* cur = cursor(); - TRectype& crr = cur->curr(); - - totale = crr.get_real(QD1_TOTALE); - netto = crr.get_real(QD1_NETTO); - impon = crr.get_real(QD1_IMPONIBILE); - impor = crr.get_real(QD1_IMPORTO); - QuotaProv = crr.get_real(QD1_QUOTAPRO); - SpeseAnt = crr.get_real(QD1_SPESEANT); - - if (tipo == 'F') - { - _f_tot_totale += totale; - _f_tot_netto += netto; - _f_tot_impon += impon; - _f_tot_snsrit += QuotaProv; - _f_tot_impor += impor; - } - else - { - _nf_tot_totale += totale; - _nf_tot_netto += netto; - _nf_tot_impon += impon; - _nf_tot_snsrit += QuotaProv; - _nf_tot_impor += impor; - } -} - -void TDicForm::aggiorna_totali_C(const char tipo) -{ - real totale, netto, impon, nsrit, impor; - TCursor* cur = cursor(); - TRectype& crr = cur->curr(); - - totale = crr.get_real(QUD_TOTALE); - netto = crr.get_real(QUD_NETTO); - impon = crr.get_real(QUD_IMPONIBILE); - impor = crr.get_real(QUD_IMPORTO); - nsrit = crr.get_real(QUD_SOMME); - - if (tipo == 'F') - { - _f_tot_totale += totale; - _f_tot_netto += netto; - _f_tot_impon += impon; - _f_tot_snsrit += nsrit; - _f_tot_impor += impor; - } - else - { - _nf_tot_totale += totale; - _nf_tot_netto += netto; - _nf_tot_impon += impon; - _nf_tot_snsrit += nsrit; - _nf_tot_impor += impor; - } -} - - void TDicForm::aggiorna_totali(const char tipo) { - if (_quadro == "C") - aggiorna_totali_C(tipo); - if (_quadro == "D") aggiorna_totali_D(tipo); - if (_quadro == "D1") - aggiorna_totali_D1(tipo); - if (_quadro == "E") aggiorna_totali_E(tipo); if (_quadro == "E1") aggiorna_totali_E1(tipo); } - +*/ void TDicForm::set_body(TPrinter& pr, const char tipo) { TPrint_section& body = section('B', odd_page); body.reset(); body.update(); - aggiorna_totali(tipo); +// aggiorna_totali(tipo); const int body_righe = body.height(); for (int i=0; i < body_righe; i++) { @@ -2069,10 +2042,414 @@ void TStampaQuadro::print(const bool modulaser) // STAMPA QUADRO D // ///////////////////////////////////////////////////////////////////////////////////////////// + +class TQuadroD : public TDicForm +{ + enum { QD_FORMLEN = 72 }; + + real _totale, _somme, _imponibile, _importo, _netto; + bool _devo_sommare; + +protected: + virtual void next_page(TPrinter& pr); + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + +public: + bool controlla_percentuale(TCursor* cur, const real& perc_p); + void set_body(TPrinter& pr, const char tipo); + void setta_importi(TPrint_section& body); + void leggi_importi(); + + TQuadroD(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroD() {} +}; + +bool TQuadroD::controlla_percentuale(TCursor* cur, const real& perc_p) +{ + bool stampa = TRUE; + + if (perc_p == ZERO) + { + long ditta_p = cur->curr().get_long(QUD_CODDITTA); + char tipo_p = cur->curr().get_char(QUD_TIPOA); + long codana_p = cur->curr().get_long(QUD_CODANAGR); + TString codcaus_p = cur->curr().get (QUD_CODCAUS); + + ++(*cur); + long ditta = cur->curr().get_long(QUD_CODDITTA); + char tipo = cur->curr().get_char(QUD_TIPOA); + long codana = cur->curr().get_long(QUD_CODANAGR); + TString codcaus = cur->curr().get (QUD_CODCAUS); + real perc = cur->curr().get_real(QUD_PERC); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc != ZERO) + { + stampa = FALSE; + _devo_sommare = TRUE; + } + } + --(*cur); + } + return stampa; +} + +void TQuadroD::leggi_importi() +{ + TCursor* cur = cursor(); + + _totale = cur->curr().get_real(QUD_TOTALE); + _somme = cur->curr().get_real(QUD_SOMME); + _imponibile = cur->curr().get_real(QUD_IMPONIBILE); + _importo = cur->curr().get_real(QUD_IMPORTO); + _netto = cur->curr().get_real(QUD_NETTO); +} + +void TQuadroD::setta_importi(TPrint_section& body) +{ + TCursor* cur = cursor(); + + real totale = cur->curr().get_real(QUD_TOTALE); + real somme = cur->curr().get_real(QUD_SOMME); + real imponibile = cur->curr().get_real(QUD_IMPONIBILE); + real importo = cur->curr().get_real(QUD_IMPORTO); + real netto = cur->curr().get_real(QUD_NETTO); + + if (_devo_sommare) + { + totale += _totale; + somme += _somme; + imponibile += _imponibile; + importo += _importo; + netto += _netto; + _devo_sommare = FALSE; + } + + TForm_item& ftotale = body.find_field(D_TOTALE); + TForm_item& fsomme = body.find_field(D_SNSRIT); + TForm_item& fimponibile = body.find_field(D_IMPONIBILE); + TForm_item& fimporto = body.find_field(D_IMPORTO); + TForm_item& fnetto = body.find_field(D_NETTO); + + TString stotale (totale.string()); + TString ssomme (somme.string()); + TString simponibile(imponibile.string()); + TString simporto (importo.string()); + TString snetto (netto.string()); +// Setta i campi + ftotale.set(stotale); + fsomme.set(ssomme); + fimponibile.set(simponibile); + fimporto.set(simporto); + fnetto.set(snetto); +} + +void TQuadroD::set_body(TPrinter& pr, const char tipo) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); +// body.update(); + setta_importi(body); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + body.reset(); + if (usa_progind()) + progind()->addstatus(1); +} + +void TQuadroD::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr >= TERZA) + { + if (PagCorr == TERZA) + jump_to_line(pr,64); + else + if (PagCorr == QUARTA) + jump_to_line(pr,61); + stampa_totali(pr); + } + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +bool TQuadroD::print(const long codditta, const long NumFis, const long NumNoFis) +{ + 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 + bool stampa = TRUE; + + _PaginaCorrente = PRIMA; + + if (!InitPrint(codditta)) + return FALSE; + + TCursor* cur = cursor(); + + while (!_EndPrintDitta) + { + for (int pagina=1; pagina <= QD_PAGINE; pagina++, next_page(pr)) + { + pr.formlen(QD_FORMLEN); + + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); + + for (int righe=0; righe < QD_RIGHE_PRIMA; righe++) + { + stampa = TRUE; +// Stampa intestazione, solo sul primo foglio. + if (!righe) + { + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_testata(pr); + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + +// 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(QUD_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + if (tipo != 'G') + { + PtrFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaFis = !Trovato; + } + + if (StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); +// 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 < QD_RIGHE_SECONDA; righe++) + { + stampa = TRUE; + if (!righe) + fill_page(pr, HEADER_SECONDA); + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == TERZA) + { + for (int righe=0; righe < QD_RIGHE_TERZA; righe++) + { + stampa = TRUE; + if (!righe) + { + fill_page(pr, HEADER_TERZA); + _CtrFisStampati = 0; // conta quelli che stampo sulla terza + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + _CtrFisStampati++; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == QUARTA) + { + azzera_totali(); + for (int righe=0; righe < QD_RIGHE_QUARTA; righe++) + { + stampa = TRUE; + if (!righe) + _CtrNoFisStampati = 0; + +// All'inizio salta le righe in alto + if (!righe) + fill_page(pr, HEADER_QUARTA); + + 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 long ditta = cur->curr().get_long(QUD_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + if (tipo != 'F') + { + PtrNoFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaNoFis = !Trovato; + } + + if (StabilitaInesistenzaNoFis) + break; + + (*cur) = PtrNoFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'G') + break; + else + { + CtrNoFis--; + if (CtrNoFis == 0L) _finite_nofis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'G'); + else + leggi_importi(); + 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 + close_print(); + return TRUE; +} + class TStampaQuadroD : public TStampaQuadro { - TDicForm* _form; - TRelation* _rel; + TQuadroD* _form; TCursor* _cur; protected: @@ -2093,93 +2470,12 @@ TStampaQuadroD::TStampaQuadroD(const char* quadro, char liv) } bool TStampaQuadroD::user_create() -{ - if (quadro() == "C") - { - _rel = new TRelation(LF_QUAC); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAC, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAC, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "D") - { - _rel = new TRelation(LF_QUAD); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAD, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAD, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "D1") - { - _rel = new TRelation(LF_QUAD1); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAD1, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAD1, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "E") - { - _rel = new TRelation(LF_QUAE); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAE, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAE, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "E1") - { - _rel = new TRelation(LF_QUAE1); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAE1, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAE1, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - _form = new TDicForm(form_name(), quadro()); +{ + _form = new TQuadroD("77QD", quadro()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAD, LF_QUAD); + _cur = new TSorted_cursor(_form->TForm::relation(), sortkey); return TRUE; } @@ -2188,7 +2484,462 @@ bool TStampaQuadroD::user_destroy() { delete _form; delete _cur; - delete _rel; + + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// QUADRO D1 +///////////////////////////////////////////////////////////////////////////////////////////// + +class TQuadroD1 : public TDicForm +{ + enum { QD_FORMLEN = 72 }; + + real _totale, _quotapro, _speseant, _imponibile, _importo, _netto; + bool _devo_sommare; + +protected: + virtual void next_page(TPrinter& pr); + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + +public: + bool controlla_percentuale(TCursor* cur, const real& perc_p); + void set_body(TPrinter& pr, const char tipo); + void setta_importi(TPrint_section& body); + void leggi_importi(); + + TQuadroD1(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroD1() {} +}; + +bool TQuadroD1::controlla_percentuale(TCursor* cur, const real& perc_p) +{ + bool stampa = TRUE; + + if (perc_p == ZERO) + { + long ditta_p = cur->curr().get_long(QD1_CODDITTA); + char tipo_p = cur->curr().get_char(QD1_TIPOA); + long codana_p = cur->curr().get_long(QD1_CODANAGR); + TString codcaus_p = cur->curr().get (QD1_CODCAUS); + + ++(*cur); + long ditta = cur->curr().get_long(QD1_CODDITTA); + char tipo = cur->curr().get_char(QD1_TIPOA); + long codana = cur->curr().get_long(QD1_CODANAGR); + TString codcaus = cur->curr().get (QD1_CODCAUS); + real perc = cur->curr().get_real(QD1_PERC); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc != ZERO) + { + stampa = FALSE; + _devo_sommare = TRUE; + } + } + --(*cur); + } + return stampa; +} + +void TQuadroD1::leggi_importi() +{ + TCursor* cur = cursor(); + + _totale = cur->curr().get_real(QD1_TOTALE); + _quotapro = cur->curr().get_real(QD1_QUOTAPRO); + _speseant = cur->curr().get_real(QD1_SPESEANT); + _imponibile = cur->curr().get_real(QD1_IMPONIBILE); + _importo = cur->curr().get_real(QD1_IMPORTO); + _netto = cur->curr().get_real(QD1_NETTO); +} + +void TQuadroD1::setta_importi(TPrint_section& body) +{ + TCursor* cur = cursor(); + + real totale = cur->curr().get_real(QD1_TOTALE); + real quotapro = cur->curr().get_real(QD1_QUOTAPRO); + real speseant = cur->curr().get_real(QD1_SPESEANT); + real imponibile = cur->curr().get_real(QD1_IMPONIBILE); + real importo = cur->curr().get_real(QD1_IMPORTO); + real netto = cur->curr().get_real(QD1_NETTO); + + if (_devo_sommare) + { + totale += _totale; + quotapro += _quotapro; + speseant += _speseant; + imponibile += _imponibile; + importo += _importo; + netto += _netto; + _devo_sommare = FALSE; + } + + TForm_item& ftotale = body.find_field(D1_TOTALE); + TForm_item& fquotapro = body.find_field(D1_QUOTAPRO); + TForm_item& fspeseant = body.find_field(D1_SPESEANT); + TForm_item& fimponibile = body.find_field(D1_IMPONIBILE); + TForm_item& fimporto = body.find_field(D1_IMPORTO); + TForm_item& fnetto = body.find_field(D1_NETTO); + + TString stotale (totale.string()); + TString squotapro (quotapro.string()); + TString sspeseant (speseant.string()); + TString simponibile(imponibile.string()); + TString simporto (importo.string()); + TString snetto (netto.string()); +// Setta i campi + ftotale.set(stotale); + fquotapro.set(squotapro); + fspeseant.set(sspeseant); + fimponibile.set(simponibile); + fimporto.set(simporto); + fnetto.set(snetto); +} + +void TQuadroD1::set_body(TPrinter& pr, const char tipo) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); +// body.update(); + setta_importi(body); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + body.reset(); + if (usa_progind()) + progind()->addstatus(1); +} + +void TQuadroD1::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr >= TERZA) + { + if (PagCorr == TERZA) + jump_to_line(pr,62); + else + if (PagCorr == QUARTA) + jump_to_line(pr,62); + stampa_totali(pr); + } + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +bool TQuadroD1::print(const long codditta, const long NumFis, const long NumNoFis) +{ + 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 + bool stampa = TRUE; + + _PaginaCorrente = PRIMA; + + if (!InitPrint(codditta)) + return FALSE; + + TCursor* cur = cursor(); + + while (!_EndPrintDitta) + { + for (int pagina=1; pagina <= QD_PAGINE; pagina++, next_page(pr)) + { + pr.formlen(QD_FORMLEN); + + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); + + for (int righe=0; righe < QD1_RIGHE_PRIMA; righe++) + { + stampa = TRUE; +// Stampa intestazione, solo sul primo foglio. + if (!righe) + { + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_testata(pr); + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + +// 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(QD1_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + if (tipo != 'G') + { + PtrFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaFis = !Trovato; + } + + if (StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); +// 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 < QD1_RIGHE_SECONDA; righe++) + { + stampa = TRUE; + if (!righe) + fill_page(pr, HEADER_D1_SECONDA); + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == TERZA) + { + for (int righe=0; righe < QD1_RIGHE_TERZA; righe++) + { + stampa = TRUE; + if (!righe) + { + fill_page(pr, HEADER_D1_TERZA); + _CtrFisStampati = 0; // conta quelli che stampo sulla terza + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + _CtrFisStampati++; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == QUARTA) + { + azzera_totali(); + for (int righe=0; righe < QD1_RIGHE_QUARTA; righe++) + { + stampa = TRUE; + if (!righe) + _CtrNoFisStampati = 0; + +// All'inizio salta le righe in alto + if (!righe) + fill_page(pr, HEADER_D1_QUARTA); + + 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 long ditta = cur->curr().get_long(QD1_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + if (tipo != 'F') + { + PtrNoFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaNoFis = !Trovato; + } + + if (StabilitaInesistenzaNoFis) + break; + + (*cur) = PtrNoFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'G') + break; + else + { + CtrNoFis--; + if (CtrNoFis == 0L) _finite_nofis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'G'); + else + leggi_importi(); + 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 + close_print(); + return TRUE; +} + +class TStampaQuadroD1 : public TStampaQuadro +{ + TQuadroD1* _form; + TCursor* _cur; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + + virtual TDicForm* get_form() const { return _form; } + virtual TCursor* get_cursor() const { return _cur; } + + public: + TStampaQuadroD1(const char* quadro, char livel); + virtual ~TStampaQuadroD1() { } +}; + +TStampaQuadroD1::TStampaQuadroD1(const char* quadro, char liv) + : TStampaQuadro(quadro, liv) +{ +} + +bool TStampaQuadroD1::user_create() +{ + _form = new TQuadroD1("77QD1", quadro()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAD1, LF_QUAD1); + _cur = new TSorted_cursor(_form->TForm::relation(), sortkey); + + return TRUE; +} + +bool TStampaQuadroD1::user_destroy() +{ + delete _form; + delete _cur; + return TRUE; } @@ -3457,8 +4208,7 @@ public: void TQuadroA::azzera_totali() { TPrint_section& totali = section('F', last_page); - for (int f = totali.fields()-1; f >= 0; f--) - totali.field(f).set(""); + totali.reset(); } void TQuadroA::stampa_corpo(TPrinter& pr) @@ -3541,7 +4291,7 @@ bool TQuadroA::print(const long codditta, const long NumFis, const long NumNoFis } else return FALSE; - } + } else cur = 0; @@ -3790,56 +4540,15 @@ bool TStampaQuadroA2::user_create() class TQuadroA3 : public TQuadroA { - int _nprog; - protected: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - virtual int elementi_pagina(PaginaQuadro p) const; virtual int prima_riga(PaginaQuadro p) const; - virtual long filtra(const long codditta); -public: - void set_nprog(int np) { _nprog = np; } - - TQuadroA3(const char* form, const char* quadro); +public: + TQuadroA3(const char* form, const char* quadro) : TQuadroA(form, quadro) { } virtual ~TQuadroA3() { } }; -TQuadroA3::TQuadroA3(const char* form, const char* quadro) - : TQuadroA(form, quadro), _nprog(1) -{ } - - -long TQuadroA3::filtra(const long codditta) -{ - TString filtr(32); - filtr.format("CODDITTA=%ld|NPROG=%d", codditta, _nprog); - - cursor()->setfilter(filtr, TRUE); - const long items = cursor()->items(); - - return items; -} - -bool TQuadroA3::print(const long codditta, const long NumFis, const long NumNoFis) -{ - TPrint_section& head = section('H', first_page); - TForm_item& tipo_ditta = head.field(0); - - _nprog = 1; - tipo_ditta.set("1"); - TQuadroA::print(codditta, NumFis, NumNoFis); - - azzera_totali(); - - _nprog = 2; - tipo_ditta.set("2"); - TQuadroA::print(codditta, NumFis, NumNoFis); - - return TRUE; -} - int TQuadroA3::elementi_pagina(PaginaQuadro p) const { const int n[4] = { 6, 10, 10, 9 }; @@ -3919,7 +4628,318 @@ bool TStampaQuadroB::user_create() return TRUE; } +///////////////////////////////////////////////////////////////////////////////// +// Quadro C +///////////////////////////////////////////////////////////////////////////////// +class TQuadroC : public TQuadroA +{ + enum { QA_FORMLEN = 72 }; + + real _totale, _contssn, _somme, _imponibile, _ritenute, _netto; + bool _devo_sommare; + +protected: + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + +public: + bool controlla_percentuale(TCursor& cur, const real& perc_p); + void stampa_corpo(TPrinter& pr); + void setta_importi(TPrint_section& body); + void leggi_importi(); + + TQuadroC(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroC() { } +}; + +bool TQuadroC::controlla_percentuale(TCursor& cur, const real& perc_p) +{ + bool stampa = TRUE; + + if (perc_p == ZERO) + { + long ditta_p = cur.curr().get_long(QUC_CODDITTA); + char tipo_p = cur.curr().get_char(QUC_TIPOA); + long codana_p = cur.curr().get_long(QUC_CODANAGR); + TString codcaus_p = cur.curr().get (QUC_CODCAUS); + + ++(cur); + long ditta = cur.curr().get_long(QUC_CODDITTA); + char tipo = cur.curr().get_char(QUC_TIPOA); + long codana = cur.curr().get_long(QUC_CODANAGR); + TString codcaus = cur.curr().get (QUC_CODCAUS); + real perc = cur.curr().get_real(QUC_PERC); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc != ZERO) + { + stampa = FALSE; + _devo_sommare = TRUE; + } + } + --(cur); + } + return stampa; +} + +void TQuadroC::leggi_importi() +{ + TCursor* cur = cursor(); + + _totale = cur->curr().get_real(QUC_TOTALE); + _contssn = cur->curr().get_real(QUC_CONTSSN); + _somme = cur->curr().get_real(QUC_SOMME); + _imponibile = cur->curr().get_real(QUC_IMPONIBILE); + _ritenute = cur->curr().get_real(QUC_RITENUTE); + _netto = cur->curr().get_real(QUC_NETTO); +} + +void TQuadroC::setta_importi(TPrint_section& body) +{ + TCursor* cur = cursor(); + + real totale = cur->curr().get_real(QUC_TOTALE); + real contssn = cur->curr().get_real(QUC_CONTSSN); + real somme = cur->curr().get_real(QUC_SOMME); + real imponibile = cur->curr().get_real(QUC_IMPONIBILE); + real ritenute = cur->curr().get_real(QUC_RITENUTE); + real netto = cur->curr().get_real(QUC_NETTO); + + if (_devo_sommare) + { + totale += _totale; + contssn += _contssn; + somme += _somme; + imponibile += _imponibile; + ritenute += _ritenute; + netto += _netto; + _devo_sommare = FALSE; + } + + TForm_item& ftotale = body.find_field(C_TOTALE); + TForm_item& fcontssn = body.find_field(C_CONTSSN); + TForm_item& fsomme = body.find_field(C_SOMME); + TForm_item& fimponibile = body.find_field(C_IMPONIBILE); + TForm_item& fritenute = body.find_field(C_RITENUTE); + TForm_item& fnetto = body.find_field(C_NETTO); + + TString stotale (totale.string()); + TString scontssn (contssn.string()); + TString ssomme (somme.string()); + TString simponibile(imponibile.string()); + TString sritenute (ritenute.string()); + TString snetto (netto.string()); +// Setta i campi + ftotale.set(stotale); + fcontssn.set(scontssn); + fsomme.set(ssomme); + fimponibile.set(simponibile); + fritenute.set(sritenute); + fnetto.set(snetto); +} + +void TQuadroC::stampa_corpo(TPrinter& pr) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); +// body.update(); + setta_importi(body); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + body.reset(); + if (usa_progind()) + progind()->addstatus(1); +} + +int TQuadroC::elementi_pagina(PaginaQuadro p) const +{ + const int n[4] = { 6, 10, 10, 9 }; + return n[p-PRIMA]; +} + +int TQuadroC::prima_riga(PaginaQuadro p) const +{ + return p == PRIMA ? 27 : 8; +} + +bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis) +{ + TCursor& cur = *cursor(); + TPrinter& pr = printer(); + bool stampa = TRUE; + + if (!InitPrint(codditta)) + return FALSE; + + pr.formlen(QA_FORMLEN); + + int elementi = 0; // Numero di elementi stampati in questa pagina + bool stampato_ultimo = FALSE; + bool stampati_totali = FALSE; + + int pos = 0; + TDipendenti indice; + if (quadro() == "A" || quadro() == "B") + { + const int i = indice.fill(cur); + if (i > 0) + { + if (usa_progind()) + progind()->addstatus(cur.items()-i); // Segna come elaborati tutti gli ignorati + + cur = indice[0].pos(); + } + else + return FALSE; + } + else + cur = 0; + + while (!stampati_totali) + { + bool stampa = TRUE; + bool stampero_ultimo = stampato_ultimo == FALSE; + if (stampero_ultimo) + { + if (indice.items() > 0) // Usa indice alternativo + stampero_ultimo &= pos == indice.items()-1; + else // Usa indice del cursore + stampero_ultimo &= cur.pos() == cur.items()-1; + } + + switch(_PaginaCorrente) + { + case PRIMA: + if (_modulaser) + ClearFlagModulaser(); + + if (elementi == 0) + { + stampa_testata(pr); + jump_to_line(pr, prima_riga(PRIMA)); + } + + if (!stampato_ultimo) + { + real perc_p = cur.curr().get_real(QUC_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + stampa_corpo(pr); + else + leggi_importi(); + + stampato_ultimo = stampero_ultimo; + } + + elementi++; + if (elementi >= elementi_pagina(PRIMA)) + { + next_page(pr); + elementi = 0; + } + break; + case SECONDA: + case TERZA: + if (!stampato_ultimo) + { + if (elementi == 0) + jump_to_line(pr, prima_riga(_PaginaCorrente)); + + real perc_p = cur.curr().get_real(QUC_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + stampa_corpo(pr); + else + leggi_importi(); + + stampato_ultimo = stampero_ultimo; + } + elementi++; + if (elementi >= elementi_pagina(_PaginaCorrente)) + { + next_page(pr); + elementi = 0; + } + break; + case QUARTA: + if (!stampato_ultimo) + { + if (elementi == 0) + jump_to_line(pr, prima_riga(QUARTA)); + + real perc_p = cur.curr().get_real(QUC_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + stampa_corpo(pr); + else + leggi_importi(); + + stampato_ultimo = stampero_ultimo; + } + + elementi++; + + if (elementi >= elementi_pagina(QUARTA)) + { + if (stampato_ultimo) + { + jump_to_line(pr, riga_totali(QUARTA)); + stampa_totali(pr); + stampati_totali = TRUE; + } + next_page(pr); + elementi = 0; + } + break; + default: + CHECK(0, "Invalid Quadro A page"); + break; + } + + if (!stampato_ultimo) + { + if (indice.items() > 0) + cur = indice[++pos].pos(); + else + ++cur; + } + } + + close_print(); + + return TRUE; +} + +class TStampaQuadroC : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroC(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } + virtual ~TStampaQuadroC() { } +}; + +bool TStampaQuadroC::user_create() +{ + _form = new TQuadroC("77QC", quadro()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAC, LF_QUAC); + _cur = new TSorted_cursor(_form->TForm::relation(), sortkey); + + return TRUE; +} + ///////////////////////////////////////////////////////////////////////////////// // // MAIN @@ -3938,9 +4958,17 @@ int stampa_quadro(int argc, char* argv[]) TStampaQuadro* app = NULL; - if ( quadro == "C" || quadro == "D" || quadro == "D1" || quadro == "E" || quadro == "E1" ) + if ( quadro == "C" ) + { + app = new TStampaQuadroC(quadro, livello); + } + else if ( quadro == "D" ) { app = new TStampaQuadroD(quadro, livello); + } + else if (quadro == "D1") + { + app = new TStampaQuadroD1(quadro, livello); } else if (quadro[0] == 'A') { @@ -3982,6 +5010,3 @@ int stampa_quadro(int argc, char* argv[]) } return 0; -} - - diff --git a/m770/77stq.sbr b/m770/77stq.sbr index 65e139936..090734db9 100755 Binary files a/m770/77stq.sbr and b/m770/77stq.sbr differ