diff --git a/m770/77qc.frm b/m770/77qc.frm index 8caf8bcdc..2a92ee8bd 100755 --- a/m770/77qc.frm +++ b/m770/77qc.frm @@ -8,7 +8,7 @@ JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) JOIN 6 TO 61 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC -JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRF(COMRES) +JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRES JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES END @@ -129,6 +129,7 @@ BEGIN KEY "VIA di RES." PROMPT 67 14 "" FIELD 116@->INDRF + FIELD 116@->INDRES FLAGS "H" MESSAGE COPY,17 END @@ -137,7 +138,8 @@ STRINGA 15 BEGIN KEY "NUM. CIVICO di RES." PROMPT 103 14 "" - FIELD 116@->CIVRF + FIELD 116@->CIVRF + FIELD 116@->CIVRES FLAGS "H" MESSAGE APPEND,17 END @@ -152,7 +154,8 @@ STRINGA 16 BEGIN KEY "CAP" PROMPT 124 14 "" - FIELD 116@->CAPRF + FIELD 116@->CAPRF + FIELD 116@->CAPRES END STRINGA 13 diff --git a/m770/77qd.frm b/m770/77qd.frm index 9268d036c..207df92e9 100755 --- a/m770/77qd.frm +++ b/m770/77qd.frm @@ -1,422 +1,447 @@ -USE 62 -JOIN %CA7 TO 62 ALIAS 14 INTO CODTAB=CODCAUS -JOIN 9 INTO CODDITTA=CODDITTA -JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR -JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR -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 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 - -DESCRIPTION -BEGIN - 62->* "Quadro D 770" - 9->* "Ditte" - 6->* "Anagrafica persone fisiche e giuridiche" - 8->* "Anagrafica persone fisiche" - 113@->* "Comuni" - 213@->* "Comuni" - 216@->* "Anagrafica persone fisiche e giuridiche" - 218@->* "Anagrafica persone giuridiche" - 313@->* "Comuni" - 413@->* "Comuni" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Courier 17cpi" - SIZE 10 - CA "X" - IN 3 2 - FI 131 -END - -SECTION HEADER FIRST 31 - -LISTA 9 -BEGIN - KEY "Tipo anagrafica" - FIELD 116@->TIPOA - ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ - 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 16 "" - FIELD 213@->DENCOM -END - -STRINGA 11 -BEGIN - KEY "PROV DI RES.FISCALE" - PROMPT 59 16 "" - FIELD 213@->PROVCOM -END - -STRINGA 12 -BEGIN - KEY "VIA di RES." - PROMPT 66 16 "" - FIELD 116@->INDRF -END - -STRINGA 15 -BEGIN - KEY "NUM. CIVICO di RES." - PROMPT 102 16 "" - FIELD 116@->CIVRF -END - -STRINGA 16 -BEGIN - KEY "CAP" - PROMPT 120 16 "" - FIELD 116@->CAPRF -END - -STRINGA 13 -BEGIN - KEY "CODICE FISCALE DICHIARANTE" - PROMPT 118 19 "" -END - -NUMBER 14 -BEGIN - KEY "NUM. FOGLIO" - PROMPT 123 22 "" -END - -END - -SECTION BODY ODD 8 - -LISTA 100 -BEGIN - KEY "Tipo anagrafica" - FIELD 216@->TIPOA - ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ - ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ -END - -STRINGA 1 -BEGIN - KEY "COD.FIS" - PROMPT 10 1 "" - FIELD 216@->COFI -END - -STRING 2 -BEGIN - KEY "COGNOME" - PROMPT 42 1 "" - FIELD 216@->RAGSOC[1,30] - GROUP 1 -END - -STRING 3 -BEGIN - KEY "NOME" - PROMPT 81 1 "" - FIELD 216@->RAGSOC[31,50] - GROUP 1 -END - -STRING 102 -BEGIN - KEY "RAGSOC GIURIDICHE" - PROMPT 54 1 "" - FIELD 216@->RAGSOC - GROUP 2 -END - -STRING 4 -BEGIN - KEY "DATA NASCITA" - PROMPT 114 1 "" - FIELD 218@->DATANASC -END - -STRING 5 -BEGIN - KEY "SESSO" - PROMPT 129 1 "" - FIELD 218@->SESSO -END - -STRING 6 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 10 3 "" - FIELD 313@->DENCOM - GROUP 1 -END - -STRING 101 -BEGIN - KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 3 "" - FIELD 413@->DENCOM - GROUP 2 -END - -STRING 7 -BEGIN - KEY "PROV DI NASCITA" - PROMPT 47 3 "" - FIELD 313@->PROVCOM - GROUP 1 -END - -STRING 8 -BEGIN - KEY "COMUNE DI RESIDENZA" - PROMPT 53 3 "" - FIELD 413@->DENCOM - GROUP 1 -END - -STRING 9 -BEGIN - KEY "PROV. RESIDENZA" - PROMPT 88 3 "" - FIELD 413@->PROVCOM -END - -STRING 106 -BEGIN - KEY "PROV. RESIDENZA GIURIDICHE" - PROMPT 61 3 "" - FIELD 413@->PROVCOM - GROUP 2 -END - -STRING 108 -BEGIN - KEY "VIA RES." - PROMPT 94 3 "" - FIELD 216@->INDRES[1,18] - FLAGS "H" - MESSAGE COPY,10|COPY,107 -END - -STRING 109 -BEGIN - KEY "NUM.CIV" - PROMPT 93 3 "" - FLAGS "H" - FIELD 216@->CIVRES - MESSAGE APPEND,10|APPEND,107 -END - -STRING 10 -BEGIN - KEY "VIA RES. + numcivres" - PROMPT 95 3 "" - GROUP 1 -END - -STRING 107 -BEGIN - KEY "VIA RES GIURIDICHE" - 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 "CODICE FISCALE ESTERO" - PROMPT 89 5 "" - FIELD 216@->COFIEST -END - -STRING 15 -BEGIN - KEY "DESCR. CAUSALE" - 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 "ALIQUOTA" - PROMPT 88 7 "" - FIELD 62->PERC - PICTURE "###@@" -END - -NUMBER 20 -BEGIN - KEY "IMPORTO" - PROMPT 100 7 "" -// FIELD 62->IMPORTO - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->20 -END - -NUMBER 21 -BEGIN - KEY "NETTO" - PROMPT 119 7 "" -// FIELD 62->NETTO - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->21 -END - -END - -SECTION FOOTER LAST 1 - -NUMBER 16 -BEGIN - KEY "TOTALE TOTALE" - PROMPT 36 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 17 -BEGIN - KEY "TOTALE SOMME NON SOGGETTE" - PROMPT 55 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 18 -BEGIN - KEY "TOTALE IMPONIBILE" - PROMPT 75 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 20 -BEGIN - KEY "TOTALE IMPORTO" - PROMPT 101 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 21 -BEGIN - KEY "TOTALE NETTO" - PROMPT 120 1 "" - PICTURE "###.###.###^^^" -END - -END +USE 62 +JOIN %CA7 TO 62 ALIAS 14 INTO CODTAB=CODCAUS +JOIN 9 INTO CODDITTA=CODDITTA +JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR +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 218@ ALIAS 313 INTO COM=COMNASC +JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRES +JOIN 13 TO 216@ ALIAS 513 INTO COM=COMRF(COMRES) +JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES +END + +DESCRIPTION +BEGIN + 62->* "Quadro D 770" + 9->* "Ditte" + 6->* "Anagrafica persone fisiche e giuridiche" + 8->* "Anagrafica persone fisiche" + 113@->* "Comuni" + 213@->* "Comuni" + 216@->* "Anagrafica persone fisiche e giuridiche" + 218@->* "Anagrafica persone giuridiche" + 313@->* "Comuni" + 413@->* "Comuni" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Courier 17cpi" + SIZE 10 + CA "X" + IN 3 2 + FI 131 +END + +SECTION HEADER FIRST 31 + +LISTA 9 +BEGIN + KEY "Tipo anagrafica" + FIELD 116@->TIPOA + ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ + 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 16 "" + FIELD 213@->DENCOM +END + +STRINGA 11 +BEGIN + KEY "PROV DI RES.FISCALE" + PROMPT 59 16 "" + FIELD 213@->PROVCOM +END + +STRINGA 12 +BEGIN + KEY "VIA di RES." + PROMPT 66 16 "" + FIELD 116@->INDRF + FIELD 116@->INDRES +END + +STRINGA 15 +BEGIN + KEY "NUM. CIVICO di RES." + PROMPT 102 16 "" + FIELD 116@->CIVRF + FIELD 116@->CIVRES +END + +STRINGA 16 +BEGIN + KEY "CAP" + PROMPT 122 16 "" + FIELD 116@->CAPRF + FIELD 116@->CAPRES +END + +STRINGA 13 +BEGIN + KEY "CODICE FISCALE DICHIARANTE" + PROMPT 118 19 "" +END + +NUMBER 14 +BEGIN + KEY "NUM. FOGLIO" + PROMPT 123 22 "" +END + +END + +SECTION BODY ODD 8 + +LISTA 100 +BEGIN + KEY "Tipo anagrafica" + FIELD 216@->TIPOA + ITEM "F| " MESSAGE SHOW,1@|HIDE,2@ + ITEM "G| " MESSAGE SHOW,2@|HIDE,1@ +END + +STRINGA 1 +BEGIN + KEY "COD.FIS" + PROMPT 10 1 "" + FIELD 216@->COFI +END + +STRING 2 +BEGIN + KEY "COGNOME" + PROMPT 42 1 "" + FIELD 216@->RAGSOC[1,30] + GROUP 1 +END + +STRING 3 +BEGIN + KEY "NOME" + PROMPT 81 1 "" + FIELD 216@->RAGSOC[31,50] + GROUP 1 +END + +STRING 102 +BEGIN + KEY "RAGSOC GIURIDICHE" + PROMPT 54 1 "" + FIELD 216@->RAGSOC + GROUP 2 +END + +STRING 4 +BEGIN + KEY "DATA NASCITA" + PROMPT 114 1 "" + FIELD 218@->DATANASC +END + +STRING 5 +BEGIN + KEY "SESSO" + PROMPT 129 1 "" + FIELD 218@->SESSO +END + +STRING 6 +BEGIN + KEY "COMUNE DI NASCITA" + PROMPT 10 3 "" + FIELD 313@->DENCOM + GROUP 1 +END + +STRING 7 +BEGIN + KEY "PROV DI NASCITA" + PROMPT 47 3 "" + FIELD 313@->PROVCOM + GROUP 1 +END + +STRING 8 +BEGIN + KEY "COMUNE DI RESIDENZA FISICHE" + PROMPT 53 3 "" + FIELD 413@->DENCOM + GROUP 1 +END + +STRING 9 +BEGIN + KEY "PROV. RESIDENZA FISICHE" + PROMPT 88 3 "" + FIELD 413@->PROVCOM + GROUP 1 +END + +STRING 101 +BEGIN + KEY "COMUNE RF/RES. GIURIDICHE" + PROMPT 10 3 "" + FIELD 513@->DENCOM + GROUP 2 +END + +STRING 106 +BEGIN + KEY "PROV. RF/RES GIURIDICHE" + PROMPT 61 3 "" + FIELD 513@->PROVCOM + GROUP 2 +END + +STRING 108 +BEGIN + KEY "VIA RES. FISICHE" + FIELD 216@->INDRES[1,18] + FLAGS "H" + MESSAGE COPY,10 + GROUP 1 +END + +STRING 109 +BEGIN + KEY "NUM.CIV DI RESIDENZA FISICHE" + FLAGS "H" + FIELD 216@->CIVRES + MESSAGE APPEND,10 + GROUP 1 +END + +STRING 10 +BEGIN + KEY "VIA RES. + NUMCIVRES FISICHE" + PROMPT 95 3 "" + GROUP 1 +END + +STRING 110 +BEGIN + KEY "VIA RF/RES. GIURIDICHE" + FIELD 216@->INDRF[1,18] + FIELD 216@->INDRES[1,18] + FLAGS "H" + MESSAGE COPY,107 + GROUP 2 +END + +STRING 111 +BEGIN + KEY "NUM.CIV RF/RES GIURIDICHE" + FLAGS "H" + FIELD 216@->CIVRF + FIELD 216@->CIVRES + MESSAGE APPEND,107 + GROUP 2 +END + +STRING 107 +BEGIN + KEY "VIA RES GIURIDICHE" + PROMPT 69 3 "" + GROUP 2 +END + +STRING 11 +BEGIN + KEY "FLAG DI NON RESIDENTE" + PROMPT 12 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 79 5 "" + FIELD 216@->STATORES +END + +STRING 14 +BEGIN + KEY "CODICE FISCALE ESTERO" + PROMPT 89 5 "" + FIELD 216@->COFIEST +END + +STRING 15 +BEGIN + KEY "DESCR. CAUSALE" + PROMPT 11 7 "" + FIELD 14@->S0[1,20] +END + +NUMBER 16 +BEGIN + KEY "TOTALE" + PROMPT 42 7 "" +// FIELD 62->TOTALE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->16 +END + +NUMBER 17 +BEGIN + KEY "SOMME NON SOGGETTE A RITENUTA" + PROMPT 61 7 "" +// FIELD 62->SOMME + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->17 +END + +NUMBER 18 +BEGIN + KEY "IMPONIBILE" + PROMPT 82 7 "" +// FIELD 62->IMPONIBILE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->18 +END + +STRING 19 +BEGIN + KEY "ALIQUOTA" + PROMPT 93 7 "" + FIELD 62->PERC + PICTURE "###@@" +END + +NUMBER 20 +BEGIN + KEY "IMPORTO" + PROMPT 106 7 "" +// FIELD 62->IMPORTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->20 +END + +NUMBER 21 +BEGIN + KEY "NETTO" + PROMPT 126 7 "" +// FIELD 62->NETTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->21 +END + +END + +SECTION FOOTER LAST 1 + +NUMBER 16 +BEGIN + KEY "TOTALE TOTALE" + PROMPT 36 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 17 +BEGIN + KEY "TOTALE SOMME NON SOGGETTE" + PROMPT 55 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 18 +BEGIN + KEY "TOTALE IMPONIBILE" + PROMPT 75 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 20 +BEGIN + KEY "TOTALE IMPORTO" + PROMPT 101 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 21 +BEGIN + KEY "TOTALE NETTO" + PROMPT 120 1 "" + PICTURE "###.###.###^^^" +END + +END diff --git a/m770/77qd1.frm b/m770/77qd1.frm index 7bac8b2bc..78707a69a 100755 --- a/m770/77qd1.frm +++ b/m770/77qd1.frm @@ -1,423 +1,447 @@ -USE 63 -JOIN %CA7 TO 63 ALIAS 14 INTO CODTAB=CODCAUS -JOIN 9 INTO CODDITTA=CODDITTA -JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR -JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR -JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC -JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) -JOIN 6 TO 63 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR -JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR -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 - -DESCRIPTION -BEGIN - 63->* "Quadro D1 770" - 9->* "Ditte" - 6->* "Anagrafica persone fisiche e giuridiche" - 8->* "Anagrafica persone fisiche" - 113@->* "Comuni" - 213@->* "Comuni" - 216@->* "Anagrafica persone fisiche e giuridiche" - 218@->* "Anagrafica persone giuridiche" - 313@->* "Comuni" - 413@->* "Comuni" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Courier 17cpi" - SIZE 10 - CA "X" - IN 3 2 - FI 131 -END - -SECTION HEADER FIRST 29 - -LISTA 9 -BEGIN - KEY "Tipo anagrafica" - FIELD 116@->TIPOA - ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ - ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ -END - -STRINGA 1 -BEGIN - KEY "CODICE FISCALE" - PROMPT 3 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 56 14 "" - FIELD 118@->SESSO - GROUP 1 -END - -STRINGA 6 -BEGIN - KEY "DATA DI NASCITA" - PROMPT 63 14 "" - FIELD 118@->DATANASC - GROUP 1 -END - -STRINGA 7 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 83 14 "" - FIELD 113@->DENCOM - GROUP 1 -END - -STRINGA 8 -BEGIN - KEY "PROV. DI NASCITA" - PROMPT 122 14 "" - FIELD 113@->PROVCOM - GROUP 1 -END - -STRINGA 10 -BEGIN - KEY "COMUNE DI RES.FISCALE" - PROMPT 17 16 "" - FIELD 213@->DENCOM -END - -STRINGA 11 -BEGIN - KEY "PROV DI RES.FISCALE" - PROMPT 56 16 "" - FIELD 213@->PROVCOM -END - -STRINGA 12 -BEGIN - KEY "VIA di RES." - PROMPT 67 16 "" - FIELD 116@->INDRF - FLAGS "H" - MESSAGE COPY,17 -END - -STRINGA 15 -BEGIN - KEY "NUM. CIVICO di RES." - PROMPT 103 16 "" - FIELD 116@->CIVRF - FLAGS "H" - MESSAGE APPEND,17 -END - -STRINGA 17 -BEGIN - KEY "VIA RES. + NUM. RES." - PROMPT 67 16 "" -END - -STRINGA 16 -BEGIN - KEY "CAP" - PROMPT 124 16 "" - FIELD 116@->CAPRF -END - -STRINGA 13 -BEGIN - KEY "CODICE FISCALE DICHIARANTE" - PROMPT 105 19 "" -END - -NUMBER 14 -BEGIN - KEY "NUM. FOGLIO" - PROMPT 125 22 "" -END - -END - -SECTION BODY ODD 6 - -LISTA 100 -BEGIN - KEY "Tipo anagrafica" - FIELD 216@->TIPOA - ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ - ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ -END - -STRINGA 1 -BEGIN - KEY "COD.FIS" - PROMPT 10 1 "" - FIELD 216@->COFI -END - -STRING 2 -BEGIN - KEY "COGNOME" - PROMPT 42 1 "" - FIELD 216@->RAGSOC[1,30] - GROUP 1 -END - -STRING 3 -BEGIN - KEY "NOME" - PROMPT 80 1 "" - FIELD 216@->RAGSOC[31,50] - GROUP 1 -END - -STRING 101 -BEGIN - KEY "RAGSOC GIURIDICHE" - PROMPT 54 1 "" - FIELD 216@->RAGSOC - GROUP 2 -END - -STRING 4 -BEGIN - KEY "DATA NASCITA" - PROMPT 112 1 "" - FIELD 218@->DATANASC - GROUP 1 -END - -STRING 5 -BEGIN - KEY "SESSO" - PROMPT 126 1 "" - FIELD 218@->SESSO - GROUP 1 -END - -STRING 6 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 10 3 "" - FIELD 313@->DENCOM - GROUP 1 -END - -STRING 7 -BEGIN - KEY "PROV DI NASCITA" - PROMPT 46 3 "" - FIELD 313@->PROVCOM - GROUP 1 -END - -STRING 8 -BEGIN - KEY "COMUNE DI RESIDENZA" - PROMPT 53 3 "" - FIELD 413@->DENCOM - GROUP 1 -END - -STRING 102 -BEGIN - KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 3 "" - FIELD 413@->DENCOM - GROUP 2 -END - -STRING 9 -BEGIN - KEY "PROV. RESIDENZA" - PROMPT 87 3 "" - FIELD 413@->PROVCOM - GROUP 1 -END - -STRING 103 -BEGIN - KEY "PROVINCIA DI RESIDENZA GIURIDICHE" - PROMPT 51 3 "" - FIELD 413@->PROVCOM - GROUP 2 -END - -STRING 105 -BEGIN - KEY "VIA RESIDENZA" - PROMPT 94 3 "" - FIELD 216@->INDRES[1,18] - FLAGS "H" - MESSAGE COPY,10|COPY,104 -END - -STRING 106 -BEGIN - KEY "NUMERO CIVICO" - PROMPT 93 3 "" - FLAGS "H" - FIELD 216@->CIVRES - MESSAGE APPEND,10|APPEND,104 -END - -STRING 10 -BEGIN - KEY "VIA + NUMERO CIVICO RESIDENZA" - PROMPT 95 3 "" - GROUP 1 -END - -STRING 104 -BEGIN - KEY "VIA + NUMERO CIVICO RESIDENZA GIURIDICHE" - PROMPT 75 3 "" - GROUP 2 -END - -STRING 11 -BEGIN - KEY "CAUSALE DEL QUADRO D1" - PROMPT 12 5 "" - FIELD 14@->S3 -END - -NUMBER 12 -BEGIN - KEY "TOTALE" - PROMPT 19 5 "" -// FIELD 63->TOTALE - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->12 -END - -NUMBER 13 -BEGIN - KEY "QUOTA PROVVIGIONI" - PROMPT 36 5 "" -// FIELD 63->QUOTAPRO - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->13 -END - -NUMBER 14 -BEGIN - KEY "SPESE ANTICIPATE" - PROMPT 53 5 "" -// FIELD 63->SPESEANT - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->14 -END - -NUMBER 15 -BEGIN - KEY "IMPONIBILE" - PROMPT 70 5 "" -// FIELD 63->IMPONIBILE - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->15 -END - -STRING 16 -BEGIN - KEY "ALIQUOTA" - PROMPT 87 5 "" - FIELD 63->PERC - PICTURE "###@@" -END - -NUMBER 17 -BEGIN - KEY "IMPORTO" - PROMPT 99 5 "" -// FIELD 63->IMPORTO - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->17 -END - -NUMBER 18 -BEGIN - KEY "NETTO" - PROMPT 115 5 "" -// FIELD 63->NETTO - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->18 -END - -END - -SECTION FOOTER LAST 2 - -NUMBER 12 -BEGIN - KEY "TOTALE TOTALE" - PROMPT 19 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 13 -BEGIN - KEY "TOTALE QUOTA PROVVIGIONI" - PROMPT 36 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 14 -BEGIN - KEY "TOTALE SPESE ANTICIPATE" - PROMPT 53 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 15 -BEGIN - KEY "TOTALE IMPONIBILE" - PROMPT 70 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 17 -BEGIN - KEY "TOTALE IMPORTO" - PROMPT 99 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 18 -BEGIN - KEY "TOTALE NETTO" - PROMPT 115 1 "" - PICTURE "###.###.###^^^" -END - -END +USE 63 +JOIN %CA7 TO 63 ALIAS 14 INTO CODTAB=CODCAUS +JOIN 9 INTO CODDITTA=CODDITTA +JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR +JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC +JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) +JOIN 6 TO 63 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR +JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC +JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRES +JOIN 13 TO 216@ ALIAS 513 INTO COM=COMRF(COMRES) +JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES +END + +DESCRIPTION +BEGIN + 63->* "Quadro D1 770" + 9->* "Ditte" + 6->* "Anagrafica persone fisiche e giuridiche" + 8->* "Anagrafica persone fisiche" + 113@->* "Comuni" + 213@->* "Comuni" + 216@->* "Anagrafica persone fisiche e giuridiche" + 218@->* "Anagrafica persone giuridiche" + 313@->* "Comuni" + 413@->* "Comuni" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Courier 17cpi" + SIZE 10 + CA "X" + IN 3 2 + FI 131 +END + +SECTION HEADER FIRST 29 + +LISTA 9 +BEGIN + KEY "Tipo anagrafica" + FIELD 116@->TIPOA + ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ + ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ +END + +STRINGA 1 +BEGIN + KEY "CODICE FISCALE" + PROMPT 3 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 63 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 125 14 "" + FIELD 113@->PROVCOM + GROUP 1 +END + +STRINGA 10 +BEGIN + KEY "COMUNE DI RES.FISCALE" + PROMPT 17 16 "" + FIELD 213@->DENCOM +END + +STRINGA 11 +BEGIN + KEY "PROV DI RES.FISCALE" + PROMPT 59 16 "" + FIELD 213@->PROVCOM +END + +STRINGA 12 +BEGIN + KEY "VIA di RES." + PROMPT 67 16 "" + FIELD 116@->INDRF + FIELD 116@->INDRES + FLAGS "H" + MESSAGE COPY,17 +END + +STRINGA 15 +BEGIN + KEY "NUM. CIVICO di RES." + PROMPT 103 16 "" + FIELD 116@->CIVRF + FIELD 116@->CIVRES + FLAGS "H" + MESSAGE APPEND,17 +END + +STRINGA 17 +BEGIN + KEY "VIA RES. + NUM. RES." + PROMPT 67 16 "" +END + +STRINGA 16 +BEGIN + KEY "CAP" + PROMPT 124 16 "" + FIELD 116@->CAPRF + FIELD 116@->CAPRES +END + +STRINGA 13 +BEGIN + KEY "CODICE FISCALE DICHIARANTE" + PROMPT 105 19 "" +END + +NUMBER 14 +BEGIN + KEY "NUM. FOGLIO" + PROMPT 125 22 "" +END + +END + +SECTION BODY ODD 6 + +LISTA 100 +BEGIN + KEY "Tipo anagrafica" + FIELD 216@->TIPOA + ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ + ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ +END + +STRINGA 1 +BEGIN + KEY "COD.FIS" + PROMPT 10 1 "" + FIELD 216@->COFI +END + +STRING 2 +BEGIN + KEY "COGNOME" + PROMPT 42 1 "" + FIELD 216@->RAGSOC[1,30] + GROUP 1 +END + +STRING 3 +BEGIN + KEY "NOME" + PROMPT 80 1 "" + FIELD 216@->RAGSOC[31,50] + GROUP 1 +END + +STRING 101 +BEGIN + KEY "RAGSOC GIURIDICHE" + PROMPT 54 1 "" + FIELD 216@->RAGSOC + GROUP 2 +END + +STRING 4 +BEGIN + KEY "DATA NASCITA" + PROMPT 114 1 "" + FIELD 218@->DATANASC + GROUP 1 +END + +STRING 5 +BEGIN + KEY "SESSO" + PROMPT 128 1 "" + FIELD 218@->SESSO + GROUP 1 +END + +STRING 6 +BEGIN + KEY "COMUNE DI NASCITA" + PROMPT 10 3 "" + FIELD 313@->DENCOM + GROUP 1 +END + +STRING 7 +BEGIN + KEY "PROV DI NASCITA" + PROMPT 48 3 "" + FIELD 313@->PROVCOM + GROUP 1 +END + +STRING 8 +BEGIN + KEY "COMUNE DI RESIDENZA FISICHE" + PROMPT 53 3 "" + FIELD 413@->DENCOM + GROUP 1 +END + +STRING 9 +BEGIN + KEY "PROV. RESIDENZA FISICHE" + PROMPT 89 3 "" + FIELD 413@->PROVCOM + GROUP 1 +END + +STRING 102 +BEGIN + KEY "COMUNE RF/RES. GIURIDICHE" + PROMPT 10 3 "" + FIELD 513@->DENCOM + GROUP 2 +END + +STRING 103 +BEGIN + KEY "PROVINCIA RF/RES. GIURIDICHE" + PROMPT 51 3 "" + FIELD 513@->PROVCOM + GROUP 2 +END + +STRING 105 +BEGIN + KEY "VIA RESIDENZA FISICHE" + FIELD 216@->INDRES[1,18] + FLAGS "H" + MESSAGE COPY,10 + GROUP 1 +END + +STRING 106 +BEGIN + KEY "NUMERO CIVICO RES. FISICHE" + FLAGS "H" + FIELD 216@->CIVRES + MESSAGE APPEND,10 + GROUP 1 +END + +STRING 10 +BEGIN + KEY "VIA + NUMERO CIVICO RESIDENZA FISICHE" + PROMPT 95 3 "" + GROUP 1 +END + +STRING 105 +BEGIN + KEY "VIA RF/RES. GIURIDICHE" + FIELD 216@->INDRF[1,18] + FIELD 216@->INDRES[1,18] + FLAGS "H" + MESSAGE COPY,104 + GROUP 2 +END + +STRING 106 +BEGIN + KEY "NUMERO CIVICO RF/RES. GIURIDICHE" + FLAGS "H" + FIELD 216@->CIVRF + FIELD 216@->CIVRES + MESSAGE APPEND,104 + GROUP 2 +END + +STRING 104 +BEGIN + KEY "VIA + NUMERO CIVICO RF/RES. GIURIDICHE" + PROMPT 75 3 "" + GROUP 2 +END + +STRING 11 +BEGIN + KEY "CAUSALE DEL QUADRO D1" + PROMPT 13 5 "" + FIELD 14@->S3 +END + +NUMBER 12 +BEGIN + KEY "TOTALE" + PROMPT 23 5 "" +// FIELD 63->TOTALE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->12 +END + +NUMBER 13 +BEGIN + KEY "QUOTA PROVVIGIONI" + PROMPT 40 5 "" +// FIELD 63->QUOTAPRO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->13 +END + +NUMBER 14 +BEGIN + KEY "SPESE ANTICIPATE" + PROMPT 57 5 "" +// FIELD 63->SPESEANT + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->14 +END + +NUMBER 15 +BEGIN + KEY "IMPONIBILE" + PROMPT 75 5 "" +// FIELD 63->IMPONIBILE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->15 +END + +STRING 16 +BEGIN + KEY "ALIQUOTA" + PROMPT 90 5 "" + FIELD 63->PERC + PICTURE "###@@" +END + +NUMBER 17 +BEGIN + KEY "IMPORTO" + PROMPT 104 5 "" +// FIELD 63->IMPORTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->17 +END + +NUMBER 18 +BEGIN + KEY "NETTO" + PROMPT 120 5 "" +// FIELD 63->NETTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->18 +END + +END + +SECTION FOOTER LAST 2 + +NUMBER 12 +BEGIN + KEY "TOTALE TOTALE" + PROMPT 19 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 13 +BEGIN + KEY "TOTALE QUOTA PROVVIGIONI" + PROMPT 36 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 14 +BEGIN + KEY "TOTALE SPESE ANTICIPATE" + PROMPT 53 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 15 +BEGIN + KEY "TOTALE IMPONIBILE" + PROMPT 70 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 17 +BEGIN + KEY "TOTALE IMPORTO" + PROMPT 99 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 18 +BEGIN + KEY "TOTALE NETTO" + PROMPT 115 1 "" + PICTURE "###.###.###^^^" +END + +END diff --git a/m770/77qg.frm b/m770/77qg.frm index 28d94d40d..210eb89ea 100755 --- a/m770/77qg.frm +++ b/m770/77qg.frm @@ -1,1177 +1,1178 @@ -USE 70 -JOIN 9 INTO CODDITTA=CODDITTA -JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR -JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR -JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC -JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) -END - -DESCRIPTION -BEGIN - 70->* "Quadro G 770" - 9->* "Ditte" - 6->* "Anagrafica persone fisiche e giuridiche" - 8->* "Anagrafica persone fisiche" - 113@->* "Comuni" - 213@->* "Comuni" - 216@->* "Anagrafica persone fisiche e giuridiche" - 218@->* "Anagrafica persone giuridiche" - 313@->* "Comuni" - 413@->* "Comuni" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Courier 17cpi" - SIZE 10 - CA "X" - IN 3 2 - FI 131 -END - -SECTION HEADER FIRST 65 - -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 -END - -STRINGA 3 -BEGIN - KEY "COGNOME" - PROMPT 39 12 "" - FIELD 116@->RAGSOC[1,30] - GROUP 1 - FLAGS "H" -END - -STRINGA 4 -BEGIN - KEY "NOME" - PROMPT 17 14 "" - FIELD 116@->RAGSOC[31,50] - GROUP 1 - FLAGS "H" -END - -STRINGA 5 -BEGIN - KEY "COMUNE DI RES." - PROMPT 17 14 "" - FIELD 213@->DENCOM -END - -STRINGA 6 -BEGIN - KEY "PROV DI RES." - PROMPT 58 14 "" - FIELD 213@->PROVCOM -END - -STRINGA 7 -BEGIN - KEY "VIA di RES." - PROMPT 65 14 "" - FIELD 116@->INDRES - GROUP 4 -END - -STRINGA 8 -BEGIN - KEY "NUM. CIVICO di RES." - PROMPT 101 14 "" - FIELD 116@->CIVRES - GROUP 4 -END - -STRINGA 9 -BEGIN - KEY "CAP" - PROMPT 122 14 "" - FIELD 116@->CAPRES - GROUP 4 -END - -STRINGA 10 -BEGIN - KEY "VIA di RES. RF" - PROMPT 65 14 "" - FIELD 116@->INDRF - MESSAGE EMPTY HIDE,5@ - GROUP 5 -END - -STRINGA 11 -BEGIN - KEY "NUM. CIVICO di RES. RF" - PROMPT 101 14 "" - FIELD 116@->CIVRF - GROUP 5 -END - -STRINGA 12 -BEGIN - KEY "CAP" - PROMPT 122 14 "" - FIELD 116@->CAPRF - GROUP 5 -END - -STRINGA 13 -BEGIN - KEY "CODICE FISCALE DICHIARANTE" - PROMPT 118 17 "" -END - -STRINGA 14 -BEGIN - KEY "NUM. FOGLIO" - PROMPT 120 18 "" - FLAGS "H" -END - -STRINGA 15 -BEGIN - KEY "Prospetto 1 data delib.1" - PROMPT 4 26 "" - FIELD 70->P1DATAD1 - GROUP 3 -END - -STRINGA 16 -BEGIN - KEY "Titolo 1" - PROMPT 20 26 "" - FIELD 70->P1TITOLO1 - GROUP 3 -END - -STRINGA 17 -BEGIN - KEY "Data ut.1" - PROMPT 51 26 "" - FIELD 70->P1DATAP1 - GROUP 3 -END - -NUMBER 20 -BEGIN - KEY "Amm.1" - PROMPT 68 26 "" - FIELD 70->P1AMMQ1 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 21 -BEGIN - KEY "Num.az.1" - PROMPT 85 26 "" - FIELD 70->P1NUMQ1 - GROUP 3 -END - -NUMBER 22 -BEGIN - KEY "Amm.Compless.1" - PROMPT 120 26 "" - FIELD 70->P1AMM1 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 23 -BEGIN - KEY "Prospetto 1 data delib.2" - PROMPT 4 28 "" - FIELD 70->P1DATAD2 - GROUP 3 -END - -STRINGA 24 -BEGIN - KEY "Titolo 2" - PROMPT 20 28 "" - FIELD 70->P1TITOLO2 - GROUP 3 -END - -STRINGA 25 -BEGIN - KEY "Data ut.2" - PROMPT 51 28 "" - FIELD 70->P1DATAP2 - GROUP 3 -END - -NUMBER 26 -BEGIN - KEY "Amm.2" - PROMPT 68 28 "" - FIELD 70->P1AMMQ2 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 27 -BEGIN - KEY "Num.az.2" - PROMPT 85 28 "" - FIELD 70->P1NUMQ2 - GROUP 3 -END - -NUMBER 28 -BEGIN - KEY "Amm.Compless.2" - PROMPT 120 28 "" - FIELD 70->P1AMM2 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 29 -BEGIN - KEY "Prospetto 1 data delib.3" - PROMPT 4 30 "" - FIELD 70->P1DATAD3 - GROUP 3 -END - -STRINGA 30 -BEGIN - KEY "Titolo 3" - PROMPT 20 30 "" - FIELD 70->P1TITOLO3 - GROUP 3 -END - -STRINGA 31 -BEGIN - KEY "Data ut.3" - PROMPT 51 30 "" - FIELD 70->P1DATAP3 - GROUP 3 -END - -NUMBER 32 -BEGIN - KEY "Amm.3" - PROMPT 68 30 "" - FIELD 70->P1AMMQ3 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 33 -BEGIN - KEY "Num.az.3" - PROMPT 85 30 "" - FIELD 70->P1NUMQ3 - GROUP 3 -END - -NUMBER 34 -BEGIN - KEY "Amm.Compless.3" - PROMPT 120 30 "" - FIELD 70->P1AMM3 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 35 -BEGIN - KEY "Prospetto 1 data delib.4" - FIELD 70->P1DATAD4 - PROMPT 4 32 "" - GROUP 3 -END - -STRINGA 36 -BEGIN - KEY "Titolo 4" - PROMPT 20 32 "" - FIELD 70->P1TITOLO4 - GROUP 3 -END - -STRINGA 37 -BEGIN - KEY "Data ut.4" - PROMPT 51 32 "" - FIELD 70->P1DATAP4 - GROUP 3 -END - -NUMBER 38 -BEGIN - KEY "Amm.4" - PROMPT 68 32 "" - FIELD 70->P1AMMQ4 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRINGA 39 -BEGIN - KEY "Num.az.4" - PROMPT 85 32 "" - FIELD 70->P1NUMQ4 - GROUP 3 -END - -NUMBER 40 -BEGIN - KEY "Amm.Compless.4" - PROMPT 120 32 "" - FIELD 70->P1AMM4 - PICTURE "###.###.###^^^" - GROUP 3 -END - -STRING 41 -BEGIN - KEY "Totale num.az" - FIELD 70->P1NUMQT - PROMPT 85 34 "" -END - -STRINGA 42 -BEGIN - KEY "Totale amm.compl." - FIELD 70->P1AMMT - PROMPT 120 34 "" -END - -STRINGA 43 -BEGIN - KEY "Data delibera" - PROMPT 27 37 "" - FIELD 70->P2DATADE -END - -STRINGA 44 -BEGIN - KEY "Data distribuzione" - PROMPT 100 37 "" - FIELD 70->P2DATADI -END - -STRINGA 45 -BEGIN - KEY "DESC.BENI DISTR.1" - PROMPT 4 41 "" - FIELD 70->P2DESC1 -END - -STRINGA 46 -BEGIN - KEY "DATA 1" - PROMPT 78 41 "" - FIELD 70->P2DATA1 -END - -NUMBER 47 -BEGIN - KEY "VALORE ULT. BIL. 1" - PROMPT 120 41 "" - FIELD 70->P2VAL1 - PICTURE "###.###.###^^^" -END - -STRINGA 48 -BEGIN - KEY "DESC.BENI DISTR.2" - PROMPT 4 43 "" - FIELD 70->P2DESC2 -END - -STRINGA 49 -BEGIN - KEY "DATA 2" - PROMPT 78 43 "" - FIELD 70->P2DATA2 -END - -NUMBER 50 -BEGIN - KEY "VALORE ULT. BIL. 2" - PROMPT 120 43 "" - FIELD 70->P2VAL2 - PICTURE "###.###.###^^^" -END - -STRINGA 51 -BEGIN - KEY "DESC.BENI DISTR.3" - PROMPT 4 45 "" - FIELD 70->P2DESC3 -END - -STRINGA 52 -BEGIN - KEY "DATA 3" - PROMPT 78 45 "" - FIELD 70->P2DATA3 -END - -NUMBER 53 -BEGIN - KEY "VALORE ULT. BIL. 3" - PROMPT 120 45 "" - FIELD 70->P2VAL3 - PICTURE "###.###.###^^^" -END - -NUMBER 54 -BEGIN - KEY "TOT.UT.NATURA" - PROMPT 120 47 "" - FIELD 70->P2VALT - PICTURE "###.###.###^^^" -END - -NUMBER 55 -BEGIN - KEY "IMP.IMPUT.AZ.QUOT" - PROMPT 120 49 "" - FIELD 70->P2IMPQ - PICTURE "###.###.###^^^" -END - -NUMBER 56 -BEGIN - KEY "P221" - PROMPT 44 56 "" - PICTURE "###.###.###^^^" -END - -NUMBER 57 -BEGIN - KEY "P231" - PROMPT 63 56 "" - PICTURE "###.###.###^^^" -END - -NUMBER 58 -BEGIN - KEY "P241" - PROMPT 81 56 "" - PICTURE "###.###.###^^^" -END - -NUMBER 59 -BEGIN - KEY "P251" - PROMPT 100 56 "" - PICTURE "###.###.###^^^" -END - -NUMBER 60 -BEGIN - KEY "P261" - PROMPT 119 56 "" - PICTURE "###.###.###^^^" -END - -NUMBER 61 -BEGIN - KEY "P222" - PROMPT 44 57 "" - PICTURE "###.###.###^^^" -END - -NUMBER 62 -BEGIN - KEY "P232" - PROMPT 63 57 "" - PICTURE "###.###.###^^^" -END - -NUMBER 63 -BEGIN - KEY "P242" - PROMPT 81 57 "" - PICTURE "###.###.###^^^" -END - -NUMBER 64 -BEGIN - KEY "P252" - PROMPT 100 57 "" - PICTURE "###.###.###^^^" -END - -NUMBER 65 -BEGIN - KEY "P262" - PROMPT 119 57 "" - PICTURE "###.###.###^^^" -END - -NUMBER 66 -BEGIN - KEY "P223" - PROMPT 44 58 "" - PICTURE "###.###.###^^^" -END - -NUMBER 67 -BEGIN - KEY "P233" - PROMPT 63 58 "" - PICTURE "###.###.###^^^" -END - -NUMBER 68 -BEGIN - KEY "P243" - PROMPT 81 58 "" - PICTURE "###.###.###^^^" -END - -NUMBER 69 -BEGIN - KEY "P253" - PROMPT 100 58 "" - PICTURE "###.###.###^^^" -END - -NUMBER 70 -BEGIN - KEY "P263" - PROMPT 119 58 "" - PICTURE "###.###.###^^^" -END - -NUMBER 71 -BEGIN - KEY "P224" - PROMPT 44 59 "" - PICTURE "###.###.###^^^" -END - -NUMBER 72 -BEGIN - KEY "P234" - PROMPT 63 59 "" - PICTURE "###.###.###^^^" -END - -NUMBER 73 -BEGIN - KEY "P244" - PROMPT 81 59 "" - PICTURE "###.###.###^^^" -END - -NUMBER 74 -BEGIN - KEY "P254" - PROMPT 100 59 "" - PICTURE "###.###.###^^^" -END - -NUMBER 75 -BEGIN - KEY "P264" - PROMPT 119 59 "" - PICTURE "###.###.###^^^" -END - -NUMBER 76 -BEGIN - KEY "P225" - PROMPT 44 60 "" - PICTURE "###.###.###^^^" -END - -NUMBER 77 -BEGIN - KEY "P235" - PROMPT 63 60 "" - PICTURE "###.###.###^^^" -END - -NUMBER 78 -BEGIN - KEY "P245" - PROMPT 81 60 "" - PICTURE "###.###.###^^^" -END - -NUMBER 79 -BEGIN - KEY "P255" - PROMPT 100 60 "" - PICTURE "###.###.###^^^" -END - -NUMBER 80 -BEGIN - KEY "P265" - PROMPT 119 60 "" - PICTURE "###.###.###^^^" -END - - -NUMBER 81 -BEGIN - KEY "P22TOT" - PROMPT 44 61 "" - PICTURE "###.###.###^^^" - FIELD 70->P22TOT -END - -NUMBER 82 -BEGIN - KEY "P23TOT" - PROMPT 63 61 "" - PICTURE "###.###.###^^^" - FIELD 70->P23TOT -END - -NUMBER 83 -BEGIN - KEY "P24TOT" - PROMPT 81 61 "" - PICTURE "###.###.###^^^" - FIELD 70->P24TOT -END - -NUMBER 84 -BEGIN - KEY "P25TOT" - PROMPT 100 61 "" - PICTURE "###.###.###^^^" - FIELD 70->P25TOT -END - -NUMBER 85 -BEGIN - KEY "P26TOT" - PROMPT 119 61 "" - PICTURE "###.###.###^^^" - FIELD 70->P26TOT -END - -END - -SECTION BODY ODD 60 - -NUMBER 1 -BEGIN - KEY "P3 COL 2 - CINQUE SOLE RIGHE -" - PROMPT 36 7 "" - PICTURE "###.###.###^^^" -END - -NUMBER 2 -BEGIN - KEY "P3 COL2 - 2" - PROMPT 36 12 "" - PICTURE "###.###.###^^^" -END - -NUMBER 3 -BEGIN - KEY "P3 COL2 - 3" - PROMPT 36 15 "" - PICTURE "###.###.###^^^" -END - -NUMBER 4 -BEGIN - KEY "P3 COL2 - 4" - PROMPT 36 17 "" - PICTURE "###.###.###^^^" -END - -NUMBER 5 -BEGIN - KEY "P3 COL2 - 5" - PROMPT 36 19 "" - PICTURE "###.###.###^^^" -END - -NUMBER 6 -BEGIN - KEY "P3 COL2 TOTALI" - PROMPT 36 20 "" - PICTURE "###.###.###^^^" -END - -NUMBER 7 -BEGIN - KEY "P3 COL3 1" - PROMPT 57 5 "" - PICTURE "###.###.###^^^" -END - -NUMBER 8 -BEGIN - KEY "P3 COL3 2" - PROMPT 57 6 "" - PICTURE "###.###.###^^^" -END - -NUMBER 9 -BEGIN - KEY "P3 COL3 3" - PROMPT 57 7 "" - PICTURE "###.###.###^^^" -END - -NUMBER 10 -BEGIN - KEY "P3 COL3 4" - PROMPT 57 8 "" - PICTURE "###.###.###^^^" -END - -NUMBER 11 -BEGIN - KEY "P3 COL3 5" - PROMPT 57 9 "" - PICTURE "###.###.###^^^" -END - -NUMBER 12 -BEGIN - KEY "P3 COL3 6" - PROMPT 57 10 "" - PICTURE "###.###.###^^^" -END - -NUMBER 13 -BEGIN - KEY "P3 COL3 7" - PROMPT 57 11 "" - PICTURE "###.###.###^^^" -END - -NUMBER 14 -BEGIN - KEY "P3 COL3 8" - PROMPT 57 12 "" - PICTURE "###.###.###^^^" -END - -NUMBER 15 -BEGIN - KEY "P3 COL3 9" - PROMPT 57 13 "" - PICTURE "###.###.###^^^" -END - -NUMBER 16 -BEGIN - KEY "P3 COL3 10" - PROMPT 57 14 "" - PICTURE "###.###.###^^^" -END - -NUMBER 17 -BEGIN - KEY "P3 COL3 11" - PROMPT 57 15 "" - PICTURE "###.###.###^^^" -END - -NUMBER 18 -BEGIN - KEY "P3 COL3 12" - PROMPT 57 16 "" - PICTURE "###.###.###^^^" -END - -NUMBER 19 -BEGIN - KEY "P3 COL3 13" - PROMPT 57 17 "" - PICTURE "###.###.###^^^" -END - -NUMBER 20 -BEGIN - KEY "P3 COL3 14" - PROMPT 57 18 "" - PICTURE "###.###.###^^^" -END - -NUMBER 21 -BEGIN - KEY "P3 COL3 15" - PROMPT 57 19 "" - PICTURE "###.###.###^^^" -END - -NUMBER 22 -BEGIN - KEY "P3 COL3 TOTALI" - PROMPT 57 20 "" - PICTURE "###.###.###^^^" -END - -NUMBER 23 -BEGIN - KEY "P3 COL5 1" - PROMPT 80 5 "" - PICTURE "###.###.###^^^" -END - -NUMBER 24 -BEGIN - KEY "P3 COL5 2" - PROMPT 80 6 "" - PICTURE "###.###.###^^^" -END - -NUMBER 25 -BEGIN - KEY "P3 COL5 3" - PROMPT 80 7 "" - PICTURE "###.###.###^^^" -END - -NUMBER 26 -BEGIN - KEY "P3 COL5 4" - PROMPT 80 8 "" - PICTURE "###.###.###^^^" -END - -NUMBER 27 -BEGIN - KEY "P3 COL5 5" - PROMPT 80 9 "" - PICTURE "###.###.###^^^" -END - -NUMBER 28 -BEGIN - KEY "P3 COL5 6" - PROMPT 80 10 "" - PICTURE "###.###.###^^^" -END - -NUMBER 29 -BEGIN - KEY "P3 COL5 7" - PROMPT 80 11 "" - PICTURE "###.###.###^^^" -END - -NUMBER 30 -BEGIN - KEY "P3 COL5 8" - PROMPT 80 12 "" - PICTURE "###.###.###^^^" -END - -NUMBER 31 -BEGIN - KEY "P3 COL5 9" - PROMPT 80 13 "" - PICTURE "###.###.###^^^" -END - -NUMBER 32 -BEGIN - KEY "P3 COL5 10" - PROMPT 80 14 "" - PICTURE "###.###.###^^^" -END - -NUMBER 33 -BEGIN - KEY "P3 COL5 11" - PROMPT 80 15 "" - PICTURE "###.###.###^^^" -END - -NUMBER 34 -BEGIN - KEY "P3 COL5 12" - PROMPT 80 16 "" - PICTURE "###.###.###^^^" -END - -NUMBER 35 -BEGIN - KEY "P3 COL5 13" - PROMPT 80 17 "" - PICTURE "###.###.###^^^" -END - -NUMBER 36 -BEGIN - KEY "P3 COL5 14" - PROMPT 80 18 "" - PICTURE "###.###.###^^^" -END - -NUMBER 37 -BEGIN - KEY "P3 COL5 15" - PROMPT 80 19 "" - PICTURE "###.###.###^^^" -END - -NUMBER 38 -BEGIN - KEY "P3 COL5 TOTALI" - PROMPT 80 20 "" - PICTURE "###.###.###^^^" -END - -NUMBER 39 -BEGIN - KEY "P3 COL6 1" - PROMPT 97 5 "" - PICTURE "###.###.###^^^" -END - -NUMBER 40 -BEGIN - KEY "P3 COL6 2" - PROMPT 97 6 "" - PICTURE "###.###.###^^^" -END - -NUMBER 41 -BEGIN - KEY "P3 COL6 3" - PROMPT 97 7 "" - PICTURE "###.###.###^^^" -END - -NUMBER 42 -BEGIN - KEY "P3 COL6 4" - PROMPT 97 8 "" - PICTURE "###.###.###^^^" -END - -NUMBER 43 -BEGIN - KEY "P3 COL6 5" - PROMPT 97 9 "" - PICTURE "###.###.###^^^" -END - -NUMBER 44 -BEGIN - KEY "P3 COL6 6" - PROMPT 97 10 "" - PICTURE "###.###.###^^^" -END - -NUMBER 45 -BEGIN - KEY "P3 COL6 7" - PROMPT 97 11 "" - PICTURE "###.###.###^^^" -END - -NUMBER 46 -BEGIN - KEY "P3 COL6 8" - PROMPT 97 12 "" - PICTURE "###.###.###^^^" -END - -NUMBER 47 -BEGIN - KEY "P3 COL6 9" - PROMPT 97 13 "" - PICTURE "###.###.###^^^" -END - -NUMBER 48 -BEGIN - KEY "P3 COL6 10" - PROMPT 97 14 "" - PICTURE "###.###.###^^^" -END - -NUMBER 49 -BEGIN - KEY "P3 COL6 11" - PROMPT 97 15 "" - PICTURE "###.###.###^^^" -END - -NUMBER 50 -BEGIN - KEY "P3 COL6 12" - PROMPT 97 16 "" - PICTURE "###.###.###^^^" -END - -NUMBER 51 -BEGIN - KEY "P3 COL6 13" - PROMPT 97 17 "" - PICTURE "###.###.###^^^" -END - -NUMBER 52 -BEGIN - KEY "P3 COL6 14" - PROMPT 97 18 "" - PICTURE "###.###.###^^^" -END - -NUMBER 53 -BEGIN - KEY "P3 COL6 15" - PROMPT 97 19 "" - PICTURE "###.###.###^^^" -END - -NUMBER 54 -BEGIN - KEY "P3 COL6 TOTALI" - PROMPT 97 20 "" - PICTURE "###.###.###^^^" -END - -NUMBER 55 -BEGIN - KEY "P3 COL7 1/5" - PROMPT 119 7 "" - PICTURE "###.###.###^^^" -END - -NUMBER 56 -BEGIN - KEY "P3 COL7 2/5" - PROMPT 119 12 "" - PICTURE "###.###.###^^^" -END - -NUMBER 57 -BEGIN - KEY "P3 COL7 3/5" - PROMPT 119 15 "" - PICTURE "###.###.###^^^" -END - -NUMBER 58 -BEGIN - KEY "P3 COL7 4/5" - PROMPT 119 17 "" - PICTURE "###.###.###^^^" -END - -NUMBER 59 -BEGIN - KEY "P3 COL7 5/5" - PROMPT 119 19 "" - PICTURE "###.###.###^^^" -END - -NUMBER 60 -BEGIN - KEY "P3 COL7 TOTALI" - PROMPT 119 20 "" - PICTURE "###.###.###^^^" -END - -NUMBER 61 -BEGIN - KEY "P4 IMP.1" - PROMPT 117 33 "" - FIELD 70->P421 - PICTURE "###.###.###^^^" -END - -NUMBER 62 -BEGIN - KEY "P4 IMP.2" - PROMPT 117 37 "" - FIELD 70->P422 - PICTURE "###.###.###^^^" -END - -NUMBER 63 -BEGIN - KEY "P4 IMP.3" - PROMPT 117 38 "" - FIELD 70->P423 - PICTURE "###.###.###^^^" -END - -NUMBER 64 -BEGIN - KEY "P4 IMP.4 " - PROMPT 117 41 "" - FIELD 70->P424 - PICTURE "###.###.###^^^" -END - -NUMBER 65 -BEGIN - KEY "P4 IMP.5" - PROMPT 117 42 "" - FIELD 70->P425 - PICTURE "###.###.###^^^" -END - -NUMBER 66 -BEGIN - KEY "P4 IMP.6" - PROMPT 117 43 "" - FIELD 70->P426 - PICTURE "###.###.###^^^" -END - -NUMBER 67 -BEGIN - KEY "P4 IMP.7" - PROMPT 117 44 "" - FIELD 70->P427 - PICTURE "###.###.###^^^" -END - -NUMBER 68 -BEGIN - KEY "P4 IMP.8" - PROMPT 117 48 "" - FIELD 70->P428 - PICTURE "###.###.###^^^" -END - -NUMBER 69 -BEGIN - KEY "P4 IMP.9" - PROMPT 117 49 "" - FIELD 70->P429 - PICTURE "###.###.###^^^" -END - -NUMBER 70 -BEGIN - KEY "P4 TOTALE" - PROMPT 117 50 "" - FIELD 70->P42TOT - PICTURE "###.###.###^^^" -END - -END - -END - - +USE 70 +JOIN 9 INTO CODDITTA=CODDITTA +JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR +JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC +JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) +END + +DESCRIPTION +BEGIN + 70->* "Quadro G 770" + 9->* "Ditte" + 6->* "Anagrafica persone fisiche e giuridiche" + 8->* "Anagrafica persone fisiche" + 113@->* "Comuni" + 213@->* "Comuni" + 216@->* "Anagrafica persone fisiche e giuridiche" + 218@->* "Anagrafica persone giuridiche" + 313@->* "Comuni" + 413@->* "Comuni" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Courier 17cpi" + SIZE 10 + CA "X" + IN 3 2 + FI 131 +END + +SECTION HEADER FIRST 65 + +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 +END + +STRINGA 3 +BEGIN + KEY "COGNOME" + PROMPT 39 12 "" + FIELD 116@->RAGSOC[1,30] + GROUP 1 + FLAGS "H" +END + +STRINGA 4 +BEGIN + KEY "NOME" + PROMPT 17 14 "" + FIELD 116@->RAGSOC[31,50] + GROUP 1 + FLAGS "H" +END + +STRINGA 5 +BEGIN + KEY "COMUNE DI RES." + PROMPT 17 14 "" + FIELD 213@->DENCOM +END + +STRINGA 6 +BEGIN + KEY "PROV DI RES." + PROMPT 58 14 "" + FIELD 213@->PROVCOM +END + +STRINGA 7 +BEGIN + KEY "VIA di RES." + PROMPT 65 14 "" + FIELD 116@->INDRES + GROUP 4 +END + +STRINGA 8 +BEGIN + KEY "NUM. CIVICO di RES." + PROMPT 101 14 "" + FIELD 116@->CIVRES + GROUP 4 +END + +STRINGA 9 +BEGIN + KEY "CAP" + PROMPT 122 14 "" + FIELD 116@->CAPRES + GROUP 4 +END + +STRINGA 10 +BEGIN + KEY "VIA di RES. RF" + PROMPT 65 14 "" + FIELD 116@->INDRF + MESSAGE EMPTY HIDE,5@ + GROUP 5 +END + +STRINGA 11 +BEGIN + KEY "NUM. CIVICO di RES. RF" + PROMPT 101 14 "" + FIELD 116@->CIVRF + GROUP 5 +END + +STRINGA 12 +BEGIN + KEY "CAP" + PROMPT 122 14 "" + FIELD 116@->CAPRF + GROUP 5 +END + +STRINGA 13 +BEGIN + KEY "CODICE FISCALE DICHIARANTE" + PROMPT 118 17 "" +END + +STRINGA 14 +BEGIN + KEY "NUM. FOGLIO" + PROMPT 120 18 "" + FLAGS "H" +END + +STRINGA 15 +BEGIN + KEY "Prospetto 1 data delib.1" + PROMPT 6 26 "" + FIELD 70->P1DATAD1 + GROUP 3 +END + +STRINGA 16 +BEGIN + KEY "Titolo 1" + PROMPT 20 26 "" + FIELD 70->P1TITOLO1 + GROUP 3 +END + +STRINGA 17 +BEGIN + KEY "Data ut.1" + PROMPT 53 26 "" + FIELD 70->P1DATAP1 + GROUP 3 +END + +NUMBER 20 +BEGIN + KEY "Amm.1" + PROMPT 68 26 "" + FIELD 70->P1AMMQ1 + PICTURE "###.###.###.###" + GROUP 3 +END + +STRINGA 21 +BEGIN + KEY "Num.az.1" + PROMPT 93 26 "" + FIELD 70->P1NUMQ1 + GROUP 3 +END + +NUMBER 22 +BEGIN + KEY "Amm.Compless.1" + PROMPT 124 26 "" + FIELD 70->P1AMM1 + PICTURE "###.###.###^^^" + GROUP 3 +END + +STRINGA 23 +BEGIN + KEY "Prospetto 1 data delib.2" + PROMPT 6 28 "" + FIELD 70->P1DATAD2 + GROUP 3 +END + +STRINGA 24 +BEGIN + KEY "Titolo 2" + PROMPT 20 28 "" + FIELD 70->P1TITOLO2 + GROUP 3 +END + +STRINGA 25 +BEGIN + KEY "Data ut.2" + PROMPT 53 28 "" + FIELD 70->P1DATAP2 + GROUP 3 +END + +NUMBER 26 +BEGIN + KEY "Amm.2" + PROMPT 68 28 "" + FIELD 70->P1AMMQ2 + PICTURE "###.###.###.###" + GROUP 3 +END + +STRINGA 27 +BEGIN + KEY "Num.az.2" + PROMPT 93 28 "" + FIELD 70->P1NUMQ2 + GROUP 3 +END + +NUMBER 28 +BEGIN + KEY "Amm.Compless.2" + PROMPT 124 28 "" + FIELD 70->P1AMM2 + PICTURE "###.###.###^^^" + GROUP 3 +END + +STRINGA 29 +BEGIN + KEY "Prospetto 1 data delib.3" + PROMPT 6 30 "" + FIELD 70->P1DATAD3 + GROUP 3 +END + +STRINGA 30 +BEGIN + KEY "Titolo 3" + PROMPT 20 30 "" + FIELD 70->P1TITOLO3 + GROUP 3 +END + +STRINGA 31 +BEGIN + KEY "Data ut.3" + PROMPT 53 30 "" + FIELD 70->P1DATAP3 + GROUP 3 +END + +NUMBER 32 +BEGIN + KEY "Amm.3" + PROMPT 68 30 "" + FIELD 70->P1AMMQ3 + PICTURE "###.###.###.###" + GROUP 3 +END + +STRINGA 33 +BEGIN + KEY "Num.az.3" + PROMPT 93 30 "" + FIELD 70->P1NUMQ3 + GROUP 3 +END + +NUMBER 34 +BEGIN + KEY "Amm.Compless.3" + PROMPT 124 30 "" + FIELD 70->P1AMM3 + PICTURE "###.###.###^^^" + GROUP 3 +END + +STRINGA 35 +BEGIN + KEY "Prospetto 1 data delib.4" + FIELD 70->P1DATAD4 + PROMPT 6 32 "" + GROUP 3 +END + +STRINGA 36 +BEGIN + KEY "Titolo 4" + PROMPT 20 32 "" + FIELD 70->P1TITOLO4 + GROUP 3 +END + +STRINGA 37 +BEGIN + KEY "Data ut.4" + PROMPT 53 32 "" + FIELD 70->P1DATAP4 + GROUP 3 +END + +NUMBER 38 +BEGIN + KEY "Amm.4" + PROMPT 68 32 "" + FIELD 70->P1AMMQ4 + PICTURE "###.###.###.###" + GROUP 3 +END + +STRINGA 39 +BEGIN + KEY "Num.az.4" + PROMPT 93 32 "" + FIELD 70->P1NUMQ4 + GROUP 3 +END + +NUMBER 40 +BEGIN + KEY "Amm.Compless.4" + PROMPT 124 32 "" + FIELD 70->P1AMM4 + PICTURE "###.###.###^^^" + GROUP 3 +END + +STRING 41 +BEGIN + KEY "Totale num.az" + FIELD 70->P1NUMQT + PROMPT 93 34 "" +END + +STRINGA 42 +BEGIN + KEY "Totale amm.compl." + FIELD 70->P1AMMT + PROMPT 124 34 "" + PICTURE "###.###.###^^^" +END + +STRINGA 43 +BEGIN + KEY "Data delibera" + PROMPT 27 37 "" + FIELD 70->P2DATADE +END + +STRINGA 44 +BEGIN + KEY "Data distribuzione" + PROMPT 100 37 "" + FIELD 70->P2DATADI +END + +STRINGA 45 +BEGIN + KEY "DESC.BENI DISTR.1" + PROMPT 4 41 "" + FIELD 70->P2DESC1 +END + +STRINGA 46 +BEGIN + KEY "DATA 1" + PROMPT 78 41 "" + FIELD 70->P2DATA1 +END + +NUMBER 47 +BEGIN + KEY "VALORE ULT. BIL. 1" + PROMPT 120 41 "" + FIELD 70->P2VAL1 + PICTURE "###.###.###^^^" +END + +STRINGA 48 +BEGIN + KEY "DESC.BENI DISTR.2" + PROMPT 4 43 "" + FIELD 70->P2DESC2 +END + +STRINGA 49 +BEGIN + KEY "DATA 2" + PROMPT 78 43 "" + FIELD 70->P2DATA2 +END + +NUMBER 50 +BEGIN + KEY "VALORE ULT. BIL. 2" + PROMPT 120 43 "" + FIELD 70->P2VAL2 + PICTURE "###.###.###^^^" +END + +STRINGA 51 +BEGIN + KEY "DESC.BENI DISTR.3" + PROMPT 4 45 "" + FIELD 70->P2DESC3 +END + +STRINGA 52 +BEGIN + KEY "DATA 3" + PROMPT 78 45 "" + FIELD 70->P2DATA3 +END + +NUMBER 53 +BEGIN + KEY "VALORE ULT. BIL. 3" + PROMPT 120 45 "" + FIELD 70->P2VAL3 + PICTURE "###.###.###^^^" +END + +NUMBER 54 +BEGIN + KEY "TOT.UT.NATURA" + PROMPT 120 47 "" + FIELD 70->P2VALT + PICTURE "###.###.###^^^" +END + +NUMBER 55 +BEGIN + KEY "IMP.IMPUT.AZ.QUOT" + PROMPT 120 49 "" + FIELD 70->P2IMPQ + PICTURE "###.###.###^^^" +END + +NUMBER 56 +BEGIN + KEY "P221" + PROMPT 44 56 "" + PICTURE "###.###.###^^^" +END + +NUMBER 57 +BEGIN + KEY "P231" + PROMPT 63 56 "" + PICTURE "###.###.###^^^" +END + +NUMBER 58 +BEGIN + KEY "P241" + PROMPT 81 56 "" + PICTURE "###.###.###^^^" +END + +NUMBER 59 +BEGIN + KEY "P251" + PROMPT 100 56 "" + PICTURE "###.###.###^^^" +END + +NUMBER 60 +BEGIN + KEY "P261" + PROMPT 119 56 "" + PICTURE "###.###.###^^^" +END + +NUMBER 61 +BEGIN + KEY "P222" + PROMPT 44 57 "" + PICTURE "###.###.###^^^" +END + +NUMBER 62 +BEGIN + KEY "P232" + PROMPT 63 57 "" + PICTURE "###.###.###^^^" +END + +NUMBER 63 +BEGIN + KEY "P242" + PROMPT 81 57 "" + PICTURE "###.###.###^^^" +END + +NUMBER 64 +BEGIN + KEY "P252" + PROMPT 100 57 "" + PICTURE "###.###.###^^^" +END + +NUMBER 65 +BEGIN + KEY "P262" + PROMPT 119 57 "" + PICTURE "###.###.###^^^" +END + +NUMBER 66 +BEGIN + KEY "P223" + PROMPT 44 58 "" + PICTURE "###.###.###^^^" +END + +NUMBER 67 +BEGIN + KEY "P233" + PROMPT 63 58 "" + PICTURE "###.###.###^^^" +END + +NUMBER 68 +BEGIN + KEY "P243" + PROMPT 81 58 "" + PICTURE "###.###.###^^^" +END + +NUMBER 69 +BEGIN + KEY "P253" + PROMPT 100 58 "" + PICTURE "###.###.###^^^" +END + +NUMBER 70 +BEGIN + KEY "P263" + PROMPT 119 58 "" + PICTURE "###.###.###^^^" +END + +NUMBER 71 +BEGIN + KEY "P224" + PROMPT 44 59 "" + PICTURE "###.###.###^^^" +END + +NUMBER 72 +BEGIN + KEY "P234" + PROMPT 63 59 "" + PICTURE "###.###.###^^^" +END + +NUMBER 73 +BEGIN + KEY "P244" + PROMPT 81 59 "" + PICTURE "###.###.###^^^" +END + +NUMBER 74 +BEGIN + KEY "P254" + PROMPT 100 59 "" + PICTURE "###.###.###^^^" +END + +NUMBER 75 +BEGIN + KEY "P264" + PROMPT 119 59 "" + PICTURE "###.###.###^^^" +END + +NUMBER 76 +BEGIN + KEY "P225" + PROMPT 44 60 "" + PICTURE "###.###.###^^^" +END + +NUMBER 77 +BEGIN + KEY "P235" + PROMPT 63 60 "" + PICTURE "###.###.###^^^" +END + +NUMBER 78 +BEGIN + KEY "P245" + PROMPT 81 60 "" + PICTURE "###.###.###^^^" +END + +NUMBER 79 +BEGIN + KEY "P255" + PROMPT 100 60 "" + PICTURE "###.###.###^^^" +END + +NUMBER 80 +BEGIN + KEY "P265" + PROMPT 119 60 "" + PICTURE "###.###.###^^^" +END + + +NUMBER 81 +BEGIN + KEY "P22TOT" + PROMPT 44 61 "" + PICTURE "###.###.###^^^" + FIELD 70->P22TOT +END + +NUMBER 82 +BEGIN + KEY "P23TOT" + PROMPT 63 61 "" + PICTURE "###.###.###^^^" + FIELD 70->P23TOT +END + +NUMBER 83 +BEGIN + KEY "P24TOT" + PROMPT 81 61 "" + PICTURE "###.###.###^^^" + FIELD 70->P24TOT +END + +NUMBER 84 +BEGIN + KEY "P25TOT" + PROMPT 100 61 "" + PICTURE "###.###.###^^^" + FIELD 70->P25TOT +END + +NUMBER 85 +BEGIN + KEY "P26TOT" + PROMPT 119 61 "" + PICTURE "###.###.###^^^" + FIELD 70->P26TOT +END + +END + +SECTION BODY ODD 60 + +NUMBER 1 +BEGIN + KEY "P3 COL 2 - CINQUE SOLE RIGHE -" + PROMPT 36 7 "" + PICTURE "###.###.###^^^" +END + +NUMBER 2 +BEGIN + KEY "P3 COL2 - 2" + PROMPT 36 12 "" + PICTURE "###.###.###^^^" +END + +NUMBER 3 +BEGIN + KEY "P3 COL2 - 3" + PROMPT 36 15 "" + PICTURE "###.###.###^^^" +END + +NUMBER 4 +BEGIN + KEY "P3 COL2 - 4" + PROMPT 36 17 "" + PICTURE "###.###.###^^^" +END + +NUMBER 5 +BEGIN + KEY "P3 COL2 - 5" + PROMPT 36 19 "" + PICTURE "###.###.###^^^" +END + +NUMBER 6 +BEGIN + KEY "P3 COL2 TOTALI" + PROMPT 36 20 "" + PICTURE "###.###.###^^^" +END + +NUMBER 7 +BEGIN + KEY "P3 COL3 1" + PROMPT 57 5 "" + PICTURE "###.###.###^^^" +END + +NUMBER 8 +BEGIN + KEY "P3 COL3 2" + PROMPT 57 6 "" + PICTURE "###.###.###^^^" +END + +NUMBER 9 +BEGIN + KEY "P3 COL3 3" + PROMPT 57 7 "" + PICTURE "###.###.###^^^" +END + +NUMBER 10 +BEGIN + KEY "P3 COL3 4" + PROMPT 57 8 "" + PICTURE "###.###.###^^^" +END + +NUMBER 11 +BEGIN + KEY "P3 COL3 5" + PROMPT 57 9 "" + PICTURE "###.###.###^^^" +END + +NUMBER 12 +BEGIN + KEY "P3 COL3 6" + PROMPT 57 10 "" + PICTURE "###.###.###^^^" +END + +NUMBER 13 +BEGIN + KEY "P3 COL3 7" + PROMPT 57 11 "" + PICTURE "###.###.###^^^" +END + +NUMBER 14 +BEGIN + KEY "P3 COL3 8" + PROMPT 57 12 "" + PICTURE "###.###.###^^^" +END + +NUMBER 15 +BEGIN + KEY "P3 COL3 9" + PROMPT 57 13 "" + PICTURE "###.###.###^^^" +END + +NUMBER 16 +BEGIN + KEY "P3 COL3 10" + PROMPT 57 14 "" + PICTURE "###.###.###^^^" +END + +NUMBER 17 +BEGIN + KEY "P3 COL3 11" + PROMPT 57 15 "" + PICTURE "###.###.###^^^" +END + +NUMBER 18 +BEGIN + KEY "P3 COL3 12" + PROMPT 57 16 "" + PICTURE "###.###.###^^^" +END + +NUMBER 19 +BEGIN + KEY "P3 COL3 13" + PROMPT 57 17 "" + PICTURE "###.###.###^^^" +END + +NUMBER 20 +BEGIN + KEY "P3 COL3 14" + PROMPT 57 18 "" + PICTURE "###.###.###^^^" +END + +NUMBER 21 +BEGIN + KEY "P3 COL3 15" + PROMPT 57 19 "" + PICTURE "###.###.###^^^" +END + +NUMBER 22 +BEGIN + KEY "P3 COL3 TOTALI" + PROMPT 57 20 "" + PICTURE "###.###.###^^^" +END + +NUMBER 23 +BEGIN + KEY "P3 COL5 1" + PROMPT 80 5 "" + PICTURE "###.###.###^^^" +END + +NUMBER 24 +BEGIN + KEY "P3 COL5 2" + PROMPT 80 6 "" + PICTURE "###.###.###^^^" +END + +NUMBER 25 +BEGIN + KEY "P3 COL5 3" + PROMPT 80 7 "" + PICTURE "###.###.###^^^" +END + +NUMBER 26 +BEGIN + KEY "P3 COL5 4" + PROMPT 80 8 "" + PICTURE "###.###.###^^^" +END + +NUMBER 27 +BEGIN + KEY "P3 COL5 5" + PROMPT 80 9 "" + PICTURE "###.###.###^^^" +END + +NUMBER 28 +BEGIN + KEY "P3 COL5 6" + PROMPT 80 10 "" + PICTURE "###.###.###^^^" +END + +NUMBER 29 +BEGIN + KEY "P3 COL5 7" + PROMPT 80 11 "" + PICTURE "###.###.###^^^" +END + +NUMBER 30 +BEGIN + KEY "P3 COL5 8" + PROMPT 80 12 "" + PICTURE "###.###.###^^^" +END + +NUMBER 31 +BEGIN + KEY "P3 COL5 9" + PROMPT 80 13 "" + PICTURE "###.###.###^^^" +END + +NUMBER 32 +BEGIN + KEY "P3 COL5 10" + PROMPT 80 14 "" + PICTURE "###.###.###^^^" +END + +NUMBER 33 +BEGIN + KEY "P3 COL5 11" + PROMPT 80 15 "" + PICTURE "###.###.###^^^" +END + +NUMBER 34 +BEGIN + KEY "P3 COL5 12" + PROMPT 80 16 "" + PICTURE "###.###.###^^^" +END + +NUMBER 35 +BEGIN + KEY "P3 COL5 13" + PROMPT 80 17 "" + PICTURE "###.###.###^^^" +END + +NUMBER 36 +BEGIN + KEY "P3 COL5 14" + PROMPT 80 18 "" + PICTURE "###.###.###^^^" +END + +NUMBER 37 +BEGIN + KEY "P3 COL5 15" + PROMPT 80 19 "" + PICTURE "###.###.###^^^" +END + +NUMBER 38 +BEGIN + KEY "P3 COL5 TOTALI" + PROMPT 80 20 "" + PICTURE "###.###.###^^^" +END + +NUMBER 39 +BEGIN + KEY "P3 COL6 1" + PROMPT 97 5 "" + PICTURE "###.###.###^^^" +END + +NUMBER 40 +BEGIN + KEY "P3 COL6 2" + PROMPT 97 6 "" + PICTURE "###.###.###^^^" +END + +NUMBER 41 +BEGIN + KEY "P3 COL6 3" + PROMPT 97 7 "" + PICTURE "###.###.###^^^" +END + +NUMBER 42 +BEGIN + KEY "P3 COL6 4" + PROMPT 97 8 "" + PICTURE "###.###.###^^^" +END + +NUMBER 43 +BEGIN + KEY "P3 COL6 5" + PROMPT 97 9 "" + PICTURE "###.###.###^^^" +END + +NUMBER 44 +BEGIN + KEY "P3 COL6 6" + PROMPT 97 10 "" + PICTURE "###.###.###^^^" +END + +NUMBER 45 +BEGIN + KEY "P3 COL6 7" + PROMPT 97 11 "" + PICTURE "###.###.###^^^" +END + +NUMBER 46 +BEGIN + KEY "P3 COL6 8" + PROMPT 97 12 "" + PICTURE "###.###.###^^^" +END + +NUMBER 47 +BEGIN + KEY "P3 COL6 9" + PROMPT 97 13 "" + PICTURE "###.###.###^^^" +END + +NUMBER 48 +BEGIN + KEY "P3 COL6 10" + PROMPT 97 14 "" + PICTURE "###.###.###^^^" +END + +NUMBER 49 +BEGIN + KEY "P3 COL6 11" + PROMPT 97 15 "" + PICTURE "###.###.###^^^" +END + +NUMBER 50 +BEGIN + KEY "P3 COL6 12" + PROMPT 97 16 "" + PICTURE "###.###.###^^^" +END + +NUMBER 51 +BEGIN + KEY "P3 COL6 13" + PROMPT 97 17 "" + PICTURE "###.###.###^^^" +END + +NUMBER 52 +BEGIN + KEY "P3 COL6 14" + PROMPT 97 18 "" + PICTURE "###.###.###^^^" +END + +NUMBER 53 +BEGIN + KEY "P3 COL6 15" + PROMPT 97 19 "" + PICTURE "###.###.###^^^" +END + +NUMBER 54 +BEGIN + KEY "P3 COL6 TOTALI" + PROMPT 97 20 "" + PICTURE "###.###.###^^^" +END + +NUMBER 55 +BEGIN + KEY "P3 COL7 1/5" + PROMPT 119 7 "" + PICTURE "###.###.###^^^" +END + +NUMBER 56 +BEGIN + KEY "P3 COL7 2/5" + PROMPT 119 12 "" + PICTURE "###.###.###^^^" +END + +NUMBER 57 +BEGIN + KEY "P3 COL7 3/5" + PROMPT 119 15 "" + PICTURE "###.###.###^^^" +END + +NUMBER 58 +BEGIN + KEY "P3 COL7 4/5" + PROMPT 119 17 "" + PICTURE "###.###.###^^^" +END + +NUMBER 59 +BEGIN + KEY "P3 COL7 5/5" + PROMPT 119 19 "" + PICTURE "###.###.###^^^" +END + +NUMBER 60 +BEGIN + KEY "P3 COL7 TOTALI" + PROMPT 119 20 "" + PICTURE "###.###.###^^^" +END + +NUMBER 61 +BEGIN + KEY "P4 IMP.1" + PROMPT 117 33 "" + FIELD 70->P421 + PICTURE "###.###.###^^^" +END + +NUMBER 62 +BEGIN + KEY "P4 IMP.2" + PROMPT 117 37 "" + FIELD 70->P422 + PICTURE "###.###.###^^^" +END + +NUMBER 63 +BEGIN + KEY "P4 IMP.3" + PROMPT 117 38 "" + FIELD 70->P423 + PICTURE "###.###.###^^^" +END + +NUMBER 64 +BEGIN + KEY "P4 IMP.4 " + PROMPT 117 41 "" + FIELD 70->P424 + PICTURE "###.###.###^^^" +END + +NUMBER 65 +BEGIN + KEY "P4 IMP.5" + PROMPT 117 42 "" + FIELD 70->P425 + PICTURE "###.###.###^^^" +END + +NUMBER 66 +BEGIN + KEY "P4 IMP.6" + PROMPT 117 43 "" + FIELD 70->P426 + PICTURE "###.###.###^^^" +END + +NUMBER 67 +BEGIN + KEY "P4 IMP.7" + PROMPT 117 44 "" + FIELD 70->P427 + PICTURE "###.###.###^^^" +END + +NUMBER 68 +BEGIN + KEY "P4 IMP.8" + PROMPT 117 48 "" + FIELD 70->P428 + PICTURE "###.###.###^^^" +END + +NUMBER 69 +BEGIN + KEY "P4 IMP.9" + PROMPT 117 49 "" + FIELD 70->P429 + PICTURE "###.###.###^^^" +END + +NUMBER 70 +BEGIN + KEY "P4 TOTALE" + PROMPT 117 50 "" + FIELD 70->P42TOT + PICTURE "###.###.###^^^" +END + +END + +END + + diff --git a/m770/77qgd.frm b/m770/77qgd.frm index 4d82f1f43..db7bd4e25 100755 --- a/m770/77qgd.frm +++ b/m770/77qgd.frm @@ -1,341 +1,350 @@ -USE 101 -JOIN 6 TO 101 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 %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES -END - -DESCRIPTION -BEGIN - 62->* "770 Quadro G distinta" - 9->* "Ditte" - 6->* "Anagrafica persone fisiche e giuridiche" - 8->* "Anagrafica persone fisiche" - 113@->* "Comuni" - 213@->* "Comuni" - 216@->* "Anagrafica persone fisiche e giuridiche" - 218@->* "Anagrafica persone giuridiche" - 313@->* "Comuni" - 413@->* "Comuni" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Courier 17cpi" - SIZE 10 - CA "X" - IN 3 2 - FI 131 -END - -SECTION HEADER FIRST 17 - -NUMBER 14 -BEGIN - KEY "NUM. FOGLIO" - PROMPT 123 20 "" -END - -END - -SECTION BODY ODD 8 - -STRINGA 1 -BEGIN - KEY "COD.FIS" - PROMPT 10 1 "" - FIELD 216@->COFI -END - -STRING 2 -BEGIN - KEY "COGNOME" - PROMPT 43 1 "" - FIELD 216@->RAGSOC[1,30] -END - -STRING 3 -BEGIN - KEY "NOME" - PROMPT 82 1 "" - FIELD 216@->RAGSOC[31,50] - GROUP 1 -END - -STRING 4 -BEGIN - KEY "DATA NASCITA" - PROMPT 10 3 "" - FIELD 218@->DATANASC -END - -STRING 5 -BEGIN - KEY "SESSO" - PROMPT 36 3 "" - FIELD 218@->SESSO -END - -STRING 6 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 44 3 "" - FIELD 313@->DENCOM -END - -STRING 7 -BEGIN - KEY "PROV DI NASCITA" - PROMPT 117 3 "" - FIELD 313@->PROVCOM -END - -STRING 8 -BEGIN - KEY "COMUNE DI RESIDENZA" - PROMPT 10 5 "" - FIELD 413@->DENCOM -END - -STRING 9 -BEGIN - KEY "PROV. RESIDENZA" - PROMPT 58 5 "" - FIELD 413@->PROVCOM -END - -STRING 101 -BEGIN - KEY "VIA RES." - PROMPT 94 5 "" - FIELD 216@->INDRES[1,18] - FLAGS "H" - MESSAGE COPY,10 -END - -STRING 102 -BEGIN - KEY "NUM.CIV" - PROMPT 93 5 "" - FLAGS "H" - FIELD 216@->CIVRES - MESSAGE APPEND,10 -END - -STRING 10 -BEGIN - KEY "VIA RES. + numcivres" - PROMPT 66 5 "" -END - -STRING 11 -BEGIN - KEY "NUMERO QUOTE" - PROMPT 125 5 "" - FIELD 101->NUMQUOTE - PICTURE "####^^^" -END - -NUMBER 12 -BEGIN - KEY "UTILI SPETTANTI" - PROMPT 31 7 "" - FIELD 101->UTSPETT - PICTURE "###.###.###^^^" - MESSAGE ADD,FO->12 -END - -NUMBER 13 -BEGIN - KEY "RIT.OPERATE SUGLI UTILI SPETTANTI" - PROMPT 59 7 "" - FIELD 101->ROPESPET - PICTURE "###.###.###^^^" - MESSAGE ADD,FO->13 -END - -NUMBER 14 -BEGIN - KEY "UTILI PAGATI" - PROMPT 93 7 "" - FIELD 101->UTPAG - PICTURE "###.###.###^^^" - MESSAGE ADD,FO->14 -END - -NUMBER 15 -BEGIN - KEY "RITENUTE OPERATE SUGLI UT.PAGATI" - PROMPT 120 7 "" - FIELD 101->ROPE - PICTURE "###.###.###^^^" - MESSAGE ADD,FO->15 -END - -END - -SECTION BODY EVEN 6 - -STRINGA 1 -BEGIN - KEY "COD.FIS" - PROMPT 10 1 "" - FIELD 216@->COFI -END - -STRING 2 -BEGIN - KEY "RAGSOC GIURIDICHE" - PROMPT 44 1 "" - FIELD 216@->RAGSOC -END - -STRING 3 -BEGIN - KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 3 "" - FIELD 413@->DENCOM -END - -STRING 4 -BEGIN - KEY "PROV. RESIDENZA GIURIDICHE" - PROMPT 61 3 "" - FIELD 413@->PROVCOM -END - -STRING 5 -BEGIN - KEY "VIA RES. GIURIDICHE" - PROMPT 94 3 "" - FIELD 216@->INDRES[1,18] - FLAGS "H" - MESSAGE COPY,7 -END - -STRING 6 -BEGIN - KEY "NUM.CIV GIURIDICHE" - PROMPT 93 3 "" - FLAGS "H" - FIELD 216@->CIVRES - MESSAGE APPEND,7 -END - -STRING 7 -BEGIN - KEY "VIA RES. + numcivres" - PROMPT 69 3 "" -END - -STRING 11 -BEGIN - KEY "NUMERO QUOTE" - PROMPT 128 3 "" - FIELD 101->NUMQUOTE - PICTURE "####^^^" -END - -NUMBER 12 -BEGIN - KEY "UTILI SPETTANTI" - PROMPT 31 5 "" - FIELD 101->UTSPETT - PICTURE "###.###.###^^^" - MESSAGE ADD,FE->12 -END - -NUMBER 13 -BEGIN - KEY "RIT.OPERATE SUGLI UTILI SPETTANTI" - PROMPT 59 5 "" - FIELD 101->ROPESPET - PICTURE "###.###.###^^^" - MESSAGE ADD,FE->13 -END - -NUMBER 14 -BEGIN - KEY "UTILI PAGATI" - PROMPT 93 5 "" - FIELD 101->UTPAG - PICTURE "###.###.###^^^" - MESSAGE ADD,FE->14 -END - -NUMBER 15 -BEGIN - KEY "RITENUTE OPERATE SUGLI UT.PAGATI" - PROMPT 120 5 "" - FIELD 101->ROPE - PICTURE "###.###.###^^^" - MESSAGE ADD,FE->15 -END - -END - -SECTION FOOTER ODD 2 - -NUMBER 12 -BEGIN - KEY "TOTALE UT.SPETT." - PROMPT 31 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 13 -BEGIN - KEY "TOTALE R.OPE.SU UT.SPETT." - PROMPT 59 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 14 -BEGIN - KEY "TOTALE UTILI PAGATI" - PROMPT 93 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 15 -BEGIN - KEY "TOTALE R.OPE.SU UT.PAGATI" - PROMPT 120 1 "" - PICTURE "###.###.###^^^" -END - -END - -SECTION FOOTER EVEN 2 - -NUMBER 12 -BEGIN - KEY "TOTALE UT.SPETT." - PROMPT 31 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 13 -BEGIN - KEY "TOTALE R.OPE.SU UT.SPETT." - PROMPT 59 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 14 -BEGIN - KEY "TOTALE UTILI PAGATI" - PROMPT 93 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 15 -BEGIN - KEY "TOTALE R.OPE.SU UT.PAGAI" - PROMPT 120 1 "" - PICTURE "###.###.###^^^" -END - -END +USE 101 +JOIN 6 TO 101 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR +JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC +JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRES +JOIN 13 TO 216@ ALIAS 513 INTO COM=COMRF(COMRES) +JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES +END + +DESCRIPTION +BEGIN + 62->* "770 Quadro G distinta" + 9->* "Ditte" + 6->* "Anagrafica persone fisiche e giuridiche" + 8->* "Anagrafica persone fisiche" + 113@->* "Comuni" + 213@->* "Comuni" + 216@->* "Anagrafica persone fisiche e giuridiche" + 218@->* "Anagrafica persone giuridiche" + 313@->* "Comuni" + 413@->* "Comuni" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Courier 17cpi" + SIZE 10 + CA "X" + IN 3 2 + FI 131 +END + +SECTION HEADER FIRST 17 + +STRINGA 13 +BEGIN + KEY "CODICE FISCALE DICHIARANTE" + PROMPT 105 19 "" + FLAGS "H" +END + +NUMBER 14 +BEGIN + KEY "NUM. FOGLIO" + PROMPT 123 5 "" +END + +END + +SECTION BODY ODD 8 + +STRINGA 1 +BEGIN + KEY "COD.FIS" + PROMPT 10 1 "" + FIELD 216@->COFI +END + +STRING 2 +BEGIN + KEY "COGNOME" + PROMPT 43 1 "" + FIELD 216@->RAGSOC[1,30] +END + +STRING 3 +BEGIN + KEY "NOME" + PROMPT 98 1 "" + FIELD 216@->RAGSOC[31,50] +END + +STRING 4 +BEGIN + KEY "DATA NASCITA" + PROMPT 10 3 "" + FIELD 218@->DATANASC +END + +STRING 5 +BEGIN + KEY "SESSO" + PROMPT 36 3 "" + FIELD 218@->SESSO +END + +STRING 6 +BEGIN + KEY "COMUNE DI NASCITA" + PROMPT 44 3 "" + FIELD 313@->DENCOM +END + +STRING 7 +BEGIN + KEY "PROV DI NASCITA" + PROMPT 117 3 "" + FIELD 313@->PROVCOM +END + +STRING 8 +BEGIN + KEY "COMUNE DI RESIDENZA" + PROMPT 10 5 "" + FIELD 413@->DENCOM +END + +STRING 9 +BEGIN + KEY "PROV. RESIDENZA" + PROMPT 58 5 "" + FIELD 413@->PROVCOM +END + +STRING 101 +BEGIN + KEY "VIA RES." + PROMPT 94 5 "" + FIELD 216@->INDRES[1,18] + FLAGS "H" + MESSAGE COPY,10 +END + +STRING 102 +BEGIN + KEY "NUM.CIV" + PROMPT 93 5 "" + FLAGS "H" + FIELD 216@->CIVRES + MESSAGE APPEND,10 +END + +STRING 10 +BEGIN + KEY "VIA RES. + numcivres" + PROMPT 66 5 "" +END + +NUMBER 11 +BEGIN + KEY "NUMERO QUOTE" + PROMPT 125 5 "" + FIELD 101->NUMQUOTE + PICTURE "###@@" +END + +NUMBER 12 +BEGIN + KEY "UTILI SPETTANTI" + PROMPT 31 7 "" + FIELD 101->UTSPETT + PICTURE "###.###.###^^^" + MESSAGE ADD,FO->12 +END + +NUMBER 13 +BEGIN + KEY "RIT.OPERATE SUGLI UTILI SPETTANTI" + PROMPT 59 7 "" + FIELD 101->ROPESPET + PICTURE "###.###.###^^^" + MESSAGE ADD,FO->13 +END + +NUMBER 14 +BEGIN + KEY "UTILI PAGATI" + PROMPT 93 7 "" + FIELD 101->UTPAG + PICTURE "###.###.###^^^" + MESSAGE ADD,FO->14 +END + +NUMBER 15 +BEGIN + KEY "RITENUTE OPERATE SUGLI UT.PAGATI" + PROMPT 120 7 "" + FIELD 101->ROPE + PICTURE "###.###.###^^^" + MESSAGE ADD,FO->15 +END + +END + +SECTION BODY EVEN 6 + +STRINGA 1 +BEGIN + KEY "COD.FIS" + PROMPT 10 1 "" + FIELD 216@->COFI +END + +STRING 2 +BEGIN + KEY "RAGSOC GIURIDICHE" + PROMPT 44 1 "" + FIELD 216@->RAGSOC +END + +STRING 3 +BEGIN + KEY "COMUNE DI RF/RES. GIURIDICHE" + PROMPT 10 3 "" + FIELD 513@->DENCOM +END + +STRING 4 +BEGIN + KEY "PROV. RF/RES. GIURIDICHE" + PROMPT 61 3 "" + FIELD 513@->PROVCOM +END + +STRING 5 +BEGIN + KEY "VIA RF/RES. GIURIDICHE" + PROMPT 94 3 "" + FIELD 216@->INDRF[1,18] + FIELD 216@->INDRES[1,18] + FLAGS "H" + MESSAGE COPY,7 +END + +STRING 6 +BEGIN + KEY "NUM.CIV RF/RES. GIURIDICHE" + PROMPT 93 3 "" + FLAGS "H" + FIELD 216@->CIVRF + FIELD 216@->CIVRES + MESSAGE APPEND,7 +END + +STRING 7 +BEGIN + KEY "VIA RF/RES. + numcivres" + PROMPT 69 3 "" +END + +NUMBER 11 +BEGIN + KEY "NUMERO QUOTE" + PROMPT 128 3 "" + FIELD 101->NUMQUOTE + PICTURE "###@@" +END + +NUMBER 12 +BEGIN + KEY "UTILI SPETTANTI" + PROMPT 31 5 "" + FIELD 101->UTSPETT + PICTURE "###.###.###^^^" + MESSAGE ADD,FE->12 +END + +NUMBER 13 +BEGIN + KEY "RIT.OPERATE SUGLI UTILI SPETTANTI" + PROMPT 59 5 "" + FIELD 101->ROPESPET + PICTURE "###.###.###^^^" + MESSAGE ADD,FE->13 +END + +NUMBER 14 +BEGIN + KEY "UTILI PAGATI" + PROMPT 93 5 "" + FIELD 101->UTPAG + PICTURE "###.###.###^^^" + MESSAGE ADD,FE->14 +END + +NUMBER 15 +BEGIN + KEY "RITENUTE OPERATE SUGLI UT.PAGATI" + PROMPT 120 5 "" + FIELD 101->ROPE + PICTURE "###.###.###^^^" + MESSAGE ADD,FE->15 +END + +END + +SECTION FOOTER ODD 2 + +NUMBER 12 +BEGIN + KEY "TOTALE UT.SPETT." + PROMPT 31 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 13 +BEGIN + KEY "TOTALE R.OPE.SU UT.SPETT." + PROMPT 59 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 14 +BEGIN + KEY "TOTALE UTILI PAGATI" + PROMPT 93 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 15 +BEGIN + KEY "TOTALE R.OPE.SU UT.PAGATI" + PROMPT 120 1 "" + PICTURE "###.###.###^^^" +END + +END + +SECTION FOOTER EVEN 2 + +NUMBER 12 +BEGIN + KEY "TOTALE UT.SPETT." + PROMPT 31 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 13 +BEGIN + KEY "TOTALE R.OPE.SU UT.SPETT." + PROMPT 59 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 14 +BEGIN + KEY "TOTALE UTILI PAGATI" + PROMPT 93 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 15 +BEGIN + KEY "TOTALE R.OPE.SU UT.PAGAI" + PROMPT 120 1 "" + PICTURE "###.###.###^^^" +END + +END diff --git a/m770/77qh.frm b/m770/77qh.frm index 8848ac9e4..3b2a217e0 100755 --- a/m770/77qh.frm +++ b/m770/77qh.frm @@ -1,209 +1,212 @@ -USE 43 -JOIN 9 TO 43 INTO CODDITTA=CODDITTA -JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR -JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR -JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC -JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) -JOIN %ENT TO 43 ALIAS 214 INTO CODTAB=H1ENTE -END - -DESCRIPTION -BEGIN - 61->* "Quadro H 770" - 9->* "Ditte" - 6->* "Anagrafica persone fisiche e giuridiche" - 8->* "Anagrafica persone fisiche" - 113@->* "Comuni" - 213@->* "Comuni" -END - -GENERAL -BEGIN - OFFSET 0 0 - FONT "Courier 17cpi" - SIZE 11 - CA "X" - IN 3 2 - FI 131 -END - -SECTION HEADER FIRST 22 - -LISTA 9 -BEGIN - KEY "Tipo anagrafica" - FLAGS "H" - FIELD 116@->TIPOA - ITEM "F|Fisica" MESSAGE SHOW,1@|HIDE,2@ - ITEM "G|Giuridica" MESSAGE SHOW,2@|HIDE,1@ -END - -STRINGA 1 -BEGIN - KEY "CODICE FISCALE" - PROMPT 3 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 56 14 "" - FIELD 118@->SESSO - GROUP 1 -END - -STRINGA 6 -BEGIN - KEY "DATA DI NASCITA" - PROMPT 63 14 "" - FIELD 118@->DATANASC - GROUP 1 -END - -STRINGA 7 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 83 14 "" - FIELD 113@->DENCOM - GROUP 1 -END - -STRINGA 8 -BEGIN - KEY "PROV. DI NASCITA" - PROMPT 122 14 "" - FIELD 113@->PROVCOM - GROUP 1 -END - -STRINGA 10 -BEGIN - KEY "COMUNE DI RES.FISCALE" - PROMPT 17 16 "" - FIELD 213@->DENCOM -END - -STRINGA 11 -BEGIN - KEY "PROV DI RES.FISCALE" - PROMPT 56 16 "" - FIELD 213@->PROVCOM -END - -STRINGA 12 -BEGIN - KEY "VIA di RES." - PROMPT 67 16 "" - FIELD 116@->INDRF - FLAGS "H" - MESSAGE COPY,17 -END - -STRINGA 15 -BEGIN - KEY "NUM. CIVICO di RES." - PROMPT 103 16 "" - FIELD 116@->CIVRF - FLAGS "H" - MESSAGE APPEND,17 -END - -STRINGA 17 -BEGIN - KEY "VIA + NUM CIV. DI RES." - PROMPT 67 16 "" -END - -STRINGA 16 -BEGIN - KEY "CAP" - PROMPT 124 16 "" - FIELD 116@->CAPRF -END - -STRINGA 13 -BEGIN - KEY "CODICE FISCALE DICHIARANTE" - PROMPT 105 19 "" -END - -NUMBER 14 -BEGIN - KEY "NUM. FOGLIO" - PROMPT 125 21 "" - FLAGS "H" -END - -END - -SECTION BODY ODD 2 - -STRINGA 1 -BEGIN - KEY "ENTE PREVIDENZIALE" - PROMPT 8 1 "" - FIELD 214@->S0 -END - -NUMBER 2 -BEGIN - KEY "CONTR.OBB. CARICO DATORE LAVORO" - PROMPT 88 1 "" - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->2 - FIELD 43->H1DAT -END - -NUMBER 3 -BEGIN - KEY "CONTR.OBB. CARICO DIPENDENTE" - PROMPT 119 1 "" - PICTURE "###.###.###^^^" - MESSAGE ADD,FL->3 - FIELD 43->H1LAV -END - -END - -SECTION FOOTER LAST 2 - -NUMBER 2 -BEGIN - KEY "TOTALE CONTR.OBB. DATORE LAVORO" - PROMPT 88 1 "" - PICTURE "###.###.###^^^" -END - -NUMBER 3 -BEGIN - KEY "TOTALE CONTR.OBB DIPENDENTE." - PROMPT 119 1 "" - PICTURE "###.###.###^^^" -END - -END +USE 43 +JOIN 9 TO 43 INTO CODDITTA=CODDITTA +JOIN 6 TO 9 ALIAS 116 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 6 ALIAS 118 INTO CODANAGR=CODANAGR +JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC +JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) +JOIN %ENT TO 43 ALIAS 214 INTO CODTAB=H1ENTE +END + +DESCRIPTION +BEGIN + 61->* "Quadro H 770" + 9->* "Ditte" + 6->* "Anagrafica persone fisiche e giuridiche" + 8->* "Anagrafica persone fisiche" + 113@->* "Comuni" + 213@->* "Comuni" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Courier 17cpi" + SIZE 11 + CA "X" + IN 3 2 + FI 131 +END + +SECTION HEADER FIRST 22 + +LISTA 9 +BEGIN + KEY "Tipo anagrafica" + FLAGS "H" + FIELD 116@->TIPOA + ITEM "F|Fisica" MESSAGE SHOW,1@|HIDE,2@ + ITEM "G|Giuridica" MESSAGE SHOW,2@|HIDE,1@ +END + +STRINGA 1 +BEGIN + KEY "CODICE FISCALE" + PROMPT 3 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 83 14 "" + FIELD 113@->DENCOM + GROUP 1 +END + +STRINGA 8 +BEGIN + KEY "PROV. DI NASCITA" + PROMPT 125 14 "" + FIELD 113@->PROVCOM + GROUP 1 +END + +STRINGA 10 +BEGIN + KEY "COMUNE DI RES.FISCALE" + PROMPT 17 16 "" + FIELD 213@->DENCOM +END + +STRINGA 11 +BEGIN + KEY "PROV DI RES.FISCALE" + PROMPT 59 16 "" + FIELD 213@->PROVCOM +END + +STRINGA 12 +BEGIN + KEY "VIA di RES." + PROMPT 67 16 "" + FIELD 116@->INDRF + FIELD 116@->INDRES + FLAGS "H" + MESSAGE COPY,17 +END + +STRINGA 15 +BEGIN + KEY "NUM. CIVICO di RES." + PROMPT 103 16 "" + FIELD 116@->CIVRF + FIELD 116@->CIVRES + FLAGS "H" + MESSAGE APPEND,17 +END + +STRINGA 17 +BEGIN + KEY "VIA + NUM CIV. DI RES." + PROMPT 67 16 "" +END + +STRINGA 16 +BEGIN + KEY "CAP" + PROMPT 124 16 "" + FIELD 116@->CAPRF + FIELD 116@->CAPRES +END + +STRINGA 13 +BEGIN + KEY "CODICE FISCALE DICHIARANTE" + PROMPT 105 19 "" +END + +NUMBER 14 +BEGIN + KEY "NUM. FOGLIO" + PROMPT 125 21 "" + FLAGS "H" +END + +END + +SECTION BODY ODD 2 + +STRINGA 1 +BEGIN + KEY "ENTE PREVIDENZIALE" + PROMPT 8 1 "" + FIELD 214@->S0 +END + +NUMBER 2 +BEGIN + KEY "CONTR.OBB. CARICO DATORE LAVORO" + PROMPT 88 1 "" + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->2 + FIELD 43->H1DAT +END + +NUMBER 3 +BEGIN + KEY "CONTR.OBB. CARICO DIPENDENTE" + PROMPT 119 1 "" + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->3 + FIELD 43->H1LAV +END + +END + +SECTION FOOTER LAST 2 + +NUMBER 2 +BEGIN + KEY "TOTALE CONTR.OBB. DATORE LAVORO" + PROMPT 88 1 "" + PICTURE "###.###.###^^^" +END + +NUMBER 3 +BEGIN + KEY "TOTALE CONTR.OBB DIPENDENTE." + PROMPT 119 1 "" + PICTURE "###.###.###^^^" +END + +END diff --git a/m770/77stq.cpp b/m770/77stq.cpp index f1520805b..eea089d4e 100755 --- a/m770/77stq.cpp +++ b/m770/77stq.cpp @@ -1,3 +1,3941 @@ +<<<<<<< 77stq.cpp +#include "77stq.h" +#include "77stba.h" +#include "77stqab.h" +#include "77stqc.h" + +// +// Lista modifiche +// +// 3.4.96 Nella stampa per Modulaser, aggiunto all'inizio un comando per settare +// il font della stampante a 17cpi (v.riga 176) +// + +const char* get_ragsoc_anagr(char tipo, long codanagr) +{ + TLocalisamfile anagr (LF_ANAG); + + anagr.setkey(1); + anagr.zero(); + anagr.put(ANA_TIPOA, tipo); + anagr.put(ANA_CODANAGR, codanagr); + if (anagr.read() == NOERR) + __dep80 = anagr.get(ANA_RAGSOC); + else + __dep80 = ""; + + return __dep80; +} + +const char* get_ragsoc(const long codditta) +{ + TLocalisamfile ndt(LF_NDITTE); + ndt.zero(); + ndt.put("CODDITTA",(long)codditta); + if (ndt.read() == NOERR) + __dep80=ndt.get("RAGSOC"); + else + __dep80=""; + return __dep80; +} + +void TDicForm::set_cofi_dic(const char* cofi) +{ + _cofi_dic = cofi; +// salva il cod.dich. (serve per modulaser) + _codditta_dic = sogg_estinto(_codditta); +} + +TCursor& TDicForm::cur() +{ + return *_cur; +} + +void TDicForm::set_cursor(TCursor* cur) +{ + CHECK(cur, "NULL cursor in TDicForm"); + _cur = cur; +} + +TDicForm::TDicForm(const char* form, const char* quadro) + : TForm(form), _quadro(quadro), _prog(NULL), _cur(NULL) +{ + _can_print_tot_fis = _can_print_tot_nofis = FALSE; + _GiaStampatiFis = _GiaStampatiNoFis = _GiaMessoStartDoc = FALSE; + _GiaPosizionato = _posiziona = _modulaser = FALSE; + _LastDitta = _EndPrintDitta = _PaginaPosizionamento = FALSE; + ClearFlagModulaser(); +} + +long TDicForm::filtra(const long codditta) +{ + TString filtr(24); + _codditta=codditta; + filtr.format("CODDITTA=%ld", codditta); + _cur->setfilter(filtr, TRUE); + const long items = _cur->items(); + return items; +} + + +bool TDicForm::InitPrint(const long codditta) +{ + _codditta = codditta; + _RigaCorr = 0; + + TPrinter& pr = printer(); + pr.set_offset(offset_y(), offset_x()); + pr.set_char_size(fontsize()); // Set font name and size + pr.set_fontname(fontname()); // according to current form + + if (_posiziona && !_GiaPosizionato && pr.printtype() == winprinter) + { + posiziona(); +#ifdef DBG + if (!yesno_box("Proseguire con la stampa ?")) + return FALSE; +#endif + } + + const bool was_open = pr.isopen(); + + set_last_page(FALSE); + set_background(1, TRUE); + set_curr_page(PRIMA); + + if (!was_open && !pr.open()) + return FALSE; + do_events(); + + _Items = filtra(codditta); + + if (_Items == 0L) // Se non ci sono record non stampa + return FALSE; + + if (_prog) + { + delete _prog; + _prog = NULL; + } + if (pr.printtype() != screenvis) + { + TString msg(60); + msg.format("Elaborazione in corso ditta %ld", codditta); + _prog = new TProgind(_Items, msg, FALSE,TRUE); + } + return TRUE; +} + +void TDicForm::close_print() +{ + if (_prog) + { + delete _prog; + _prog = NULL; + } +} + +bool TDicForm::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 + + _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 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; + 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 < QD_RIGHE_SECONDA; righe++) + { + 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; + set_body(pr, 'F'); + 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++) + { + 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; + set_body(pr, 'F'); + 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++) + { + 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; + 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 + close_print(); + return TRUE; +} + + +void TDicForm::ClearFlagModulaser() +{ + for (int i=0; i<=QD_PAGINE; i++) + _GiaMessoStartPage[i] = FALSE; +} + +bool TDicForm::ultima_fis() +{ + return _can_print_tot_fis && _finite_fis && !_GiaStampatiFis; +} + +bool TDicForm::ultima_nofis() +{ + return _can_print_tot_nofis && _finite_nofis && !_GiaStampatiNoFis; +} + +void TDicForm::inc_curr_page() +{ + if (_PaginaCorrente == PRIMA) + _PaginaCorrente = SECONDA; + else + if (_PaginaCorrente == SECONDA) + _PaginaCorrente = TERZA; + else + if (_PaginaCorrente == TERZA) + _PaginaCorrente = QUARTA; + else + if (_PaginaCorrente == QUARTA) + _PaginaCorrente = PRIMA; +} + +const char* TDicForm::BuildModulaserStartPage() +{ + __dep16="*"; + if (_quadro=="Base") + __dep16<<"1"; + else if (_quadro=="A") + __dep16<<"2"; + else if (_quadro=="A1") + __dep16<<"3"; + else if (_quadro=="A2") + __dep16<<"4"; + else if (_quadro=="A3") + __dep16<<"5"; + else if (_quadro=="B") + __dep16<<"6"; + else if (_quadro=="B1") + __dep16<<"7"; + else if (_quadro=="C") + __dep16<<"8"; + else if (_quadro=="D") + __dep16<<"9"; + else if (_quadro=="D1") + __dep16<<"10"; + else if (_quadro=="E") + __dep16<<"11"; + else if (_quadro=="E1") + __dep16<<"12"; + else if (_quadro=="E2") + __dep16<<"13"; + else if (_quadro=="F") + __dep16<<"14"; + else if (_quadro=="F1") + __dep16<<"15"; + else if (_quadro=="F2") + __dep16<<"16"; + else if (_quadro=="G") + __dep16<<"17"; + else if (_quadro=="G1") + __dep16<<"18"; + else if (_quadro=="H") + __dep16<<"19"; + else if (_quadro=="La") + __dep16<<"20"; + else if (_quadro=="Na") + __dep16<<"21"; + else if (_quadro=="Es") + __dep16<<"22"; + + __dep16<<"*"; + return __dep16; +} + +void TDicForm::put_modulaser(TPrintrow& row, ModulaserKey Cmd, int page) +{ + TString riga(80); + + switch (Cmd) + { + case STARTDOC: + if (!_GiaMessoStartDoc) + { + riga = "\xf"; // Printer escape: font 17cpi + riga << VK_STARTDOC; + _GiaMessoStartDoc = TRUE; + } + break; + case STARTDITTA: + { + riga = "$"; + TString cofi(16); + TString ragsoc(50); +// Legge il codice fisc.e la rag.soc. del sogg.dich. oppure della ditta corrente + if (_tipo_ditta == estinto) + { + cofi = _cofi_dic; + ragsoc = get_ragsoc(_codditta_dic); + } + else + { + cofi = cod_fis(_codditta); + ragsoc = get_ragsoc(_codditta); + } +// cofi.format("%-16s", (const char*)_cur->file(-116).get(ANA_COFI)); +// ragsoc = _cur->file(LF_NDITTE).get(NDT_RAGSOC); + + riga << cofi; // Cod.Fiscale + riga << "$00/"; // Cod.Studio/ + if (_tipo_ditta == estinto) + riga << _codditta_dic; // Cod.Cliente + else + riga << _codditta; + riga << "$"; + riga << ragsoc; // RagSoc + } + break; + case STARTPAGE: +// riga = "*1*"; + riga = BuildModulaserStartPage(); + riga << page; + _GiaMessoStartPage[page] = TRUE; + break; + case ENDDOC: + riga = VK_ENDDOC; + break; + default: + break; + } + riga.rtrim(); + riga << '\r'; + row.put(riga); +} + + +bool TDicForm::PaginaPosizionamento() const +{ + return _PaginaPosizionamento && curr_page() == PRIMA; +} + +int TDicForm::dic_form_len() const +{ + if (curr_page() == PRIMA) + return QD_FORMLEN_PRIMA; + else + return QD_FORMLEN; +} + +// Stampa "righe" righe vuote. Se righe e' -1 fa un formfeed mettendo +// il codice ditta sull'ultima riga +void TDicForm::fill_page(TPrinter& pr, const int righe) +{ + TPrintrow row; + PaginaQuadro pagina = curr_page(); + +// form feed + if (righe < 0) + { +// const int stop = PaginaPosizionamento() ? QD_FORMLEN_PRIMA : QD_FORMLEN; + const int stop = dic_form_len(); + for (int i = _RigaCorr; i < stop; i++) + { + if (i == 0) + if (_modulaser) + { + if (!_GiaMessoStartPage[pagina]) + put_modulaser(row, STARTPAGE, pagina); + } +// Sull'ultima riga metto il codice ditta + if (i == stop - 2) + { +// if (_modulaser && EndJob() && curr_page() == QUARTA) + if (_modulaser && EndJob() && ultima_pagina()) + put_modulaser(row, ENDDOC); + + TString16 ditta; ditta << _codditta; + row.put(ditta, POS_DITTA); + pr.print(row); + } + else + pr.print(row); + row.reset(); + } + _RigaCorr = 0; + return; + } + else // righe > 0 + { + for (int i=0; i < righe; i++) + { + if (i == 0 && _modulaser && !_GiaMessoStartPage[pagina]) + put_modulaser(row, STARTPAGE, pagina); + else + row.reset(); + pr.print(row); + row.reset(); + _RigaCorr++; + } + } +} + +void TDicForm::jump_to_line(TPrinter& pr, const int lin) +{ + if (_RigaCorr > lin) + fill_page(pr, -1); + fill_page(pr, lin - _RigaCorr); +} + +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++; + } +} + +void TDicForm::stampa_testata(TPrinter& pr) +{ + TPrint_section& head = section('H', first_page); + const word r = head.height()-1; + TPrintrow& head_row = head.row(r-1); + +// Setta il numero di pagina e poi lo incrementa + TForm_item& nf = head.find_field(H_NUM_FOGLIO); + TString fstr(10); fstr << _num_foglio; + nf.set(fstr); + _num_foglio++; + +// 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 HEADER_PRIMA_NOPOS = 3; + 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(); + HEADER_PRIMA_NOPOS--; + } + if (!PaginaPosizionamento()) + fill_page(pr, HEADER_PRIMA_NOPOS); + } + else + { + pr.print(head.row(j)); + _RigaCorr++; + } + } +} + +void TDicForm::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr >= TERZA) + stampa_totali(pr); + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +void TDicForm::azzera_totali() +{ + TPrint_section& foot = section('F', last_page); + for (int f = foot.fields()-1; f >= 0; f--) + foot.field(f).set(""); +} + +void TDicForm::set_body(TPrinter& pr, const char tipo) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); + body.update(); +// aggiorna_totali(tipo); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +} + + +void TDicForm::posiziona() +{ + _GiaPosizionato = TRUE; + _PaginaPosizionamento = TRUE; + + arrange_form(); +/**************************** + char str_pos[MAX_LEN]; + int i; + const int xip = ipx(); + const int yip = ipy(); + const int xfp = fpx(); //131; + + for (i=0; i < MAX_LEN; i++) str_pos[i] = ' '; + str_pos[0] = '\r'; + str_pos[0] = '\r'; + str_pos[xip] = str_pos[xfp] = char_to_pos(); + str_pos[xfp+1] = '\r'; + str_pos[xfp+1] = '\0'; + + bool parti = yesno_box("Conferma stampa riga di posizionamento ?"); + if (!parti) return; + + _GiaPosizionato = TRUE; + _PaginaPosizionamento = TRUE; + + do + { + if (!PrintLineNow(str_pos, xfp+1, hInst)) + message_box("PrintLineNow fallita!"); + } + while (!yesno_box("Posizione corretta ?")); +**************/ +} + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Quadro G +// +/////////////////////////////////////////////////////////////////////////////////////////// + +HIDDEN const int QG_FORMLEN = 72; +HIDDEN const int QG_PAGINE = 2; +HIDDEN const int HEADER_SECONDA_G = 7; + +class TQuadroG : public TDicForm +{ + private: + long _items_g, _items_gd; + void stampa_prospetti1_2(TPrinter& pr); + void stampa_prospetti3_4(TPrinter& pr); + + protected: + virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; } + virtual void inc_curr_page(); + virtual void next_page(TPrinter& pr); + virtual void stampa_totali(TPrinter& pr) {} + virtual void aggiorna_totali(const char tipo) {} + virtual void set_body(TPrinter& pr, const char tipo) {} + + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + void set_items_gd(const long itg, const long itgd) { _items_g = itg; _items_gd = itgd; } + + TQuadroG(const char* form, const char* quadro) : TDicForm(form, quadro), + _items_g(0L), _items_gd(0L) {} + virtual ~TQuadroG() {} +}; + + +void TQuadroG::inc_curr_page() +{ + if (_PaginaCorrente == PRIMA) + _PaginaCorrente = SECONDA; + else + if (_PaginaCorrente == SECONDA) + _PaginaCorrente = PRIMA; +} + + +void TQuadroG::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + fill_page(pr, -1); + inc_curr_page(); +} + + +void TQuadroG::stampa_prospetti1_2(TPrinter& pr) +{ + TPrint_section& head = section('H', 1); + const word rr = head.height()-1; + TPrintrow& head_row = head.row(rr-1); + +// Setta il numero di pagina e poi lo incrementa + TForm_item& nf = head.find_field(H_NUM_FOGLIO); + TString fstr(10); fstr << _num_foglio; + nf.set(fstr); + _num_foglio++; + +// 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); + } + + TCursor* cur = cursor(); + +// Prospetto n. 2 + TRectype& r = cur->curr(); + TToken_string p22(r.get("P22")); + TToken_string p23(r.get("P23")); + TToken_string p24(r.get("P24")); + TToken_string p25(r.get("P25")); + TToken_string p26(r.get("P26")); + + const int START_P2 = 56; + const int RIGHE_P2 = 5; + const int COL_P2 = 5; + int cols = 0; + for (int i = 0; i < RIGHE_P2; i++) + { + const int fc2 = START_P2 + cols; + TForm_item& c2 = head.find_field(fc2); + c2.set(p22.get(i)); + + const int fc3 = fc2 + 1; + TForm_item& c3 = head.find_field(fc3); + c3.set(p23.get(i)); + + const int fc4 = fc3 + 1; + TForm_item& c4 = head.find_field(fc4); + c4.set(p24.get(i)); + + const int fc5 = fc4 + 1; + TForm_item& c5 = head.find_field(fc5); + c5.set(p25.get(i)); + + const int fc6 = fc5 + 1; + TForm_item& c6 = head.find_field(fc6); + c6.set(p26.get(i)); + + cols += COL_P2; + } + +// Righe da saltare nelle prime pag. dei moduli successivi al primo (che' son +// senza le righe del posizionamento...) + int HEADER_PRIMA_NOPOS = 3; + head.update(); + for (word j = 0; j <= rr; 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(); + HEADER_PRIMA_NOPOS--; + } + if (!PaginaPosizionamento()) + fill_page(pr, HEADER_PRIMA_NOPOS); + } + else + { + pr.print(head.row(j)); + _RigaCorr++; + } + } +// fill_page(pr, -1); // formfeed "adattato" +// inc_curr_page(); +} + +void TQuadroG::stampa_prospetti3_4(TPrinter& pr) +{ + TPrint_section& sez = section('B'); + const word rr = sez.height()-1; + sez.reset(); + TPrintrow& head_row = sez.row(rr-1); + +// Prospetto n. 3 + TCursor* cur = cursor(); + TRectype& r = cur->curr(); + TToken_string p33a(r.get("P33A")); + TToken_string p33b(r.get("P33B")); + TToken_string p35a(r.get("P35A")); + TToken_string p35b(r.get("P35B")); + TToken_string p36a(r.get("P36A")); + TToken_string p36b(r.get("P36B")); + +// colonna 2 e 7 + int k = 1; + real tot2,tot7,tot_tot2,tot_tot7; + + tot2 = ZERO; + tot7 = ZERO; + tot_tot2 = ZERO; + tot_tot7 = ZERO; + + for (int i=0; i<19; i++) + { + if (i == 6 || i == 10 || i == 13 || i ==16) continue; + + real token2 (p33a.get(i)); + real token7 (p36b.get(i)); + tot2 += token2; + tot7 += token7; + tot_tot2 += token2; + tot_tot7 += token7; + if (i == 5 || i == 9 || i == 12 || i == 15 || i == 18) + { + TForm_item& c2 = sez.find_field(k); + TForm_item& c7 = sez.find_field(k+54); + + c2.set(tot2.string()); + c7.set(tot7.string()); + k++; + tot2 = ZERO; + tot7 = ZERO; + if (i == 18) + { + TForm_item& t2 = sez.find_field(k); + TForm_item& t7 = sez.find_field(k+54); + + t2.set(tot_tot2.string()); + t7.set(tot_tot7.string()); + } + } + } + + const int RIGHE_P3 = 21; + +// Colonna 3 + const int START_P3_COL3 = 7; + int c3=0; + real totale = ZERO; + for (i = 0, k = 0; i < RIGHE_P3; i++) + { + if (i == 6 || i == 10 || i == 13 || i ==16 || i == 19) continue; + + c3 = START_P3_COL3 + k; + TForm_item& c5a = sez.find_field(c3); + real importo (p33b.get(i)); + if (i != 20) + c5a.set(importo.string()); + else + c5a.set(totale.string()); + totale += importo; + k++; + } + +// Colonna 5 + const int START_P3_COL5 = c3 + 1; + int c5=0; + totale = ZERO; + for (i = 0, k = 0; i < RIGHE_P3; i++) + { + if (i == 6 || i == 10 || i == 13 || i ==16 || i == 19) continue; + + c5 = START_P3_COL5 + k; + TForm_item& c5a = sez.find_field(c5); + real importo (p35b.get(i)); + if (i != 20) + c5a.set(importo.string()); + else + c5a.set(totale.string()); + totale += importo; + k++; + } + +// Colonna 6 + const int START_P3_COL6 = c5 + 1; + int c6=0; + totale = ZERO; + for (i = 0, k = 0; i < RIGHE_P3; i++) + { + if (i == 6 || i == 10 || i == 13 || i ==16 || i == 19) continue; + + c6 = START_P3_COL6 + k; + TForm_item& c6a = sez.find_field(c6); + real importo (p36a.get(i)); + if (i != 20) + c6a.set(importo.string()); + else + c6a.set(totale.string()); + totale += importo; + k++; + } + + sez.update(); + const int sez_righe = sez.height(); + for (i=0; i < sez_righe; i++) + { + pr.print(sez.row(i)); + _RigaCorr++; + } + if (usa_progind()) + progind()->addstatus(1); +// fill_page(pr, -1); // formfeed "adattato" +// inc_curr_page(); +} + + +bool TQuadroG::print(const long codditta, const long NumFis, const long NumNoFis) +{ + 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; + + if (!InitPrint(codditta)) + return FALSE; + + for (int pagina=1; pagina <= QG_PAGINE; pagina++, next_page(pr)) + { + pr.formlen(QG_FORMLEN); + + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); + + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_prospetti1_2(pr); + } + + if (_PaginaCorrente == SECONDA) + { +// Reset del flag di pagina con posiz. + if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; + + fill_page(pr, HEADER_SECONDA_G); + stampa_prospetti3_4(pr); + } + } // for pagina.. + + return TRUE; +} + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Distinta G +// +/////////////////////////////////////////////////////////////////////////////////////////// + +HIDDEN const int QGD_FORMLEN = 72; +HIDDEN const int QGD_PAGINE = 2; +HIDDEN const int HEADER_PRIMA_GD = 17; +HIDDEN const int HEADER_SECONDA_GD = 15; +HIDDEN const int QGD_RIGHE_PRIMA = 5; +HIDDEN const int QGD_RIGHE_SECONDA = 6; + +class TDistintaG : public TQuadroG +{ + private: + virtual void stampa_totali(TPrinter& pr); + virtual void next_page(TPrinter& pr); + virtual void set_body(TPrinter& pr, const char tipo); + +// void stampa_testata(TPrinter& pr); + + public: + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + + TDistintaG(const char* form, const char* quadro) : TQuadroG(form,quadro) {} + virtual ~TDistintaG() {} +}; + +void TDistintaG::stampa_totali(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr == PRIMA) + { + TPrint_section& totali = section('F', odd_page); + totali.update(); + for (int i = 0; i < totali.items(); i++) + { + pr.print(totali.row(i)); + _RigaCorr++; + } + } + else + if (PagCorr == SECONDA) + { + TPrint_section& totali = section('F', even_page); + totali.update(); + for (int i = 0; i < totali.items(); i++) + { + pr.print(totali.row(i)); + _RigaCorr++; + } + } +} + +void TDistintaG::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr == PRIMA) + jump_to_line(pr,57); + else + if (PagCorr == SECONDA) + jump_to_line(pr,51); + stampa_totali(pr); + TPrint_section& body = section('F', last_page); + body.reset(); + + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); + +} + +/*void TDistintaG::stampa_testata(TPrinter& pr) +{ + TPrint_section& head = section('H', 1); + const word r = head.height()-1; + TPrintrow& head_row = head.row(r-1); + +// Setta il numero di pagina e poi lo incrementa + TForm_item& nf = head.find_field(H_NUM_FOGLIO); + TString fstr(10); fstr << _num_foglio; + nf.set(fstr); + _num_foglio++; + fill_page(pr, HEADER_PRIMA_GD); +}*/ + +void TDistintaG::set_body(TPrinter& pr, const char tipo) +{ + if (tipo == 'F') + { + TPrint_section& body = section('B', odd_page); + body.reset(); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + } + else + if (tipo == 'G') + { + TPrint_section& body = section('B', even_page); + body.reset(); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + } + if (usa_progind()) + progind()->addstatus(1); +} + + +bool TDistintaG::print(const long codditta, const long NumFis, const long NumNoFis) +{ + 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) + { + 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); + } + + 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(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) + 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 long ditta = cur->curr().get_long(QGD_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QGD_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(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; +} + + +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////// +// +// TStDicArray +// +// Array delle ditte da stampare. Contiene una riga per ogni ditta che si vuole stampare +// Il formato della riga e': +// codditta|estinti|numfis|numnofis|ultimafis|ultimanofis +// +///////////////////////////////////////////////////////////////////////////////////////////// + +TToken_string& TStDicArray::operator[](int i) const +{ + return ((TString_array&)_store).row(i); +} + +void TStDicArray::set_ultima_con_fis(const int index, const bool ultima_fis) +{ + TToken_string riga((TString&)_store[index]); + riga.add(ultima_fis, 4); + _store.add(riga,index); +} + +void TStDicArray::set_ultima_con_nofis(const int index, const bool ultima_nofis) +{ + TToken_string riga((TString&)_store[index]); + riga.add(ultima_nofis, 5); + _store.add(riga,index); +} + +void TStDicArray::set_flag_tipi(const int index, const bool ultima_fis, const bool ultima_nofis) +{ + TToken_string riga((TString&)_store[index]); + riga.add(ultima_fis,4); + riga.add(ultima_nofis,5); + _store[index] = riga; +} + +void TStDicArray::set_ctr_tipi(const int index, const int num_fis, const int num_nofis) +{ + TToken_string riga((TString&)_store[index]); + riga.add(num_fis,2); + riga.add(num_nofis,3); + _store[index] = riga; +} + +void TStDicArray::set(const int index, const TipoDitta tipo, const int num_fis, const int num_nofis, + bool ultima_con_fis, bool ultima_con_nofis, const char* cofi_dic) +{ + TToken_string riga((TString&)_store[index]); + riga.add(tipo,1); + riga.add(num_fis,2); + riga.add(num_nofis,3); + riga.add(ultima_con_fis,4); + riga.add(ultima_con_nofis,5); + TString codfis(20); codfis = cofi_dic ? cofi_dic : ""; + riga.add((const char*)codfis,6); + _store[index] = riga; +} + +void TStDicArray::add(const long codditta, const TipoDitta tipo, const int num_fis, const int num_nofis, + bool ultima_con_fis, bool ultima_con_nofis, const char* cfdic) +{ + TString key(40); +// Il formato della riga e': codditta|estinti|numfis|numnofis|ultimafis|ultimanofis + key.format("%ld|%d|%d|%d|%d|%d|%s", codditta, tipo, num_fis, num_nofis, ultima_con_fis, ultima_con_nofis, cfdic ? cfdic : ""); + _store.add(key); +} + +////////////////////////////////////////////////////////////////////////////////////////// +// TStampaQuadro +////////////////////////////////////////////////////////////////////////////////////////// + +TStampaQuadro::TStampaQuadro(const char* quad, char liv) + : _quadro(quad), _livello(liv) +{ + _title = "Stampa Quadro "; _title << _quadro; +} + +// La maschera e' uguale per tutti i quadri +const char* TStampaQuadro::mask_name() const +{ + return "77STQD"; +} + +const char* TStampaQuadro::form_name() const +{ + __dep16 = "77Q"; + __dep16 << _quadro; + return __dep16; +} + +bool TStampaQuadro::create() +{ + TApplication::create(); + + _section = name(); + _section.cut(2); + _cnf = new TConfig(CONFIG_USER, _section); + + _m = new TMask(mask_name()); + _m->set_caption(taitol()); + + if (singola_ditta()) + { + _codditta = get_firm_770(); + _m->set(F_CODDITTA, _codditta); + } + else + { + _m->hide(F_RAGDITTA); + _m->set(F_TEXT, "Ditte selezionate"); + _m->show(F_TEXT); + } + + user_create(); + + dispatch_e_menu(BAR_ITEM(1)); + return TRUE; +} + +bool TStampaQuadro::destroy() +{ + user_destroy(); + + delete _m; + delete _cnf; + return TApplication::destroy(); +} + +void TStampaQuadro::on_config_change() +{ + TConfig conf(singola_ditta() ? CONFIG_STUDIO : CONFIG_USER); + _anno_dic = (int)conf.get_long(ANNO_SEL, _section); +} + +bool TStampaQuadro::menu(MENU_TAG) +{ + KEY k; + _m->set(F_ANNO, _anno_dic); + while ((k = _m->run()) == K_ENTER) + { + const bool modulaser = _m->get_bool(F_MODULASER); + print(modulaser); + } + return FALSE; +} + +void TStampaQuadro::fill_estinti(const long CodDic) +{ + int NumFisiche=0, NumNoFisiche=0; + TString CodFiDic(20); + +// Salva il cod.fis. del dichiarante + CodFiDic = cod_fis(CodDic); + + if (conta_tipi_per()) + { + conta_tipiper(CodDic, _quadro, &NumFisiche, &NumNoFisiche); + _ditte.add(CodDic, dichiarante, NumFisiche, NumNoFisiche); + } + else + _ditte.add(CodDic, dichiarante); + + const int index_dich = _ditte.curr_index(); + bool gia_trovata_ultima_fis = FALSE; + bool gia_trovata_ultima_nofis = FALSE; + int index = index_dich; + +// Leggo gli estinti + TLocalisamfile base(LF_BASE); + base.setkey(2); + base.zero(); + base.put(BSE_CODDIC, (long)CodDic); + TRectype dep(base.curr()); + + for (base.read(); !base.eof(); base.next()) + { + if (base.curr() > dep) + break; + +// Scarta il record del quadro I "globale" del dichiarante + const char tipoqua = base.get(BSE_TIPOQUA)[0]; + if (tipoqua == COD_QUA_I_DIC) + continue; + + const long DittaEstinta = base.get_long(BSE_CODDITTA); + + if (conta_tipi_per()) + { + conta_tipiper(DittaEstinta, _quadro, &NumFisiche, &NumNoFisiche); + _ditte.add(DittaEstinta, estinto, NumFisiche, NumNoFisiche, FALSE, FALSE, CodFiDic); + } + else + _ditte.add(DittaEstinta, estinto, 0L, 0L, FALSE, FALSE, CodFiDic); + + if (conta_tipi_per()) + { + // Determina se con questa ditta finiscono le persone f. o g. + if (NumFisiche == 0 && !gia_trovata_ultima_fis) + { + _ditte.set_ultima_con_fis(index, TRUE); + gia_trovata_ultima_fis = TRUE; + } + + if (NumNoFisiche == 0 && !gia_trovata_ultima_nofis) + { + _ditte.set_ultima_con_nofis(index, TRUE); + gia_trovata_ultima_nofis = TRUE; + } + } + index++; + } + + if (conta_tipi_per()) + { +// Finiti gli estinti. L'ultima ditta deve avere i totali se non gia' trovati + if (!gia_trovata_ultima_fis) + _ditte.set_ultima_con_fis(index, TRUE); + + if (!gia_trovata_ultima_nofis) + _ditte.set_ultima_con_nofis(index, TRUE); + } +} + +// _ditte e' fatto di righe siffatte: +// codditta, flag 2 dichiarante, 1 normale, 0 estinto, num_fis, num_nofis, ultima_con_fis, ultima_con_nofis + +bool TStampaQuadro::print_quadro(const int OffsetDitta, const bool modulaser) +{ + TDicForm* ff = get_form(); + int start=0, last=0; +// Setta formlen prima di printer.open per avere la lunghezza giusta nel caso di +// stampa a video + printer().formlen(QD_FORMLEN); + bool ok = printer().open(); + + ff->set_cursor(get_cursor()); + ff->azzera_totali(); + ff->set_modulaser(modulaser); + +// Dice se deve eseguire il posizionamento del foglio. +// Se stampa piu' ditte va eseguito solo sulla prima +// Occhio a non spostarlo nel ciclo. + ff->set_posiziona(TRUE); + + if (OffsetDitta >= 0) + { + start = OffsetDitta; + last = OffsetDitta; + } + else + last = _ditte.items() - 1; + + for (int i = start; i <= last; i++) + { + TString CoFiDic(20); + TToken_string riga(ditte()[i]); + const long codditta = atol(riga.get(0)); + const TipoDitta tipo = (TipoDitta)riga.get_int(1); + const long fis = riga.get_long(2); + const long nofis = riga.get_long(3); + const bool LastFis = (bool)riga.get_int(4); + const bool LastNoFis = (bool)riga.get_int(5); + +// I gruppi dich-estinti hanno totali comuni +// Si presume che nell'array vengano messi nell'ordine dich-estinti + if (tipo == normale || tipo == dichiarante) + ff->azzera_totali(); + + if (tipo == estinto) + CoFiDic = riga.get(6); + + if (conta_tipi_per()) + { +// Se e' un dichiarante i totali vanno sull'estinto in cui finiscono o le F o le G + const bool StampaTotaliFis = tipo == normale || + (tipo == estinto && LastFis); + + const bool StampaTotaliNoFis = tipo == normale || + (tipo == estinto && LastNoFis); + +// Dice al form se e' questa ditta e' l'ultima con f. o g. + ff->can_print_tot_fis(StampaTotaliFis); + ff->can_print_tot_nofis(StampaTotaliNoFis); + } + +// Dice al form che tipo di ditta si stampa + ff->set_tipo_ditta(tipo); + +// Numera i fogli a partire da 1 per ogni ditta normale e da 1 e di seguito negli estinti +// per i sogg. dichiaranti + if (tipo == normale || tipo == dichiarante) + ff->set_num_foglio(1); + +// Se la ditta e' estinta dice al form il cod.fis. del dichiarante + if (tipo == estinto) + ff->set_cofi_dic(CoFiDic); + +// Dice al form che e' l'ultima ditta + if (i == last) + ff->set_last_ditta(TRUE); + + ff->print(codditta, fis, nofis); + } + + printer().close(); + return ok; +} + +void TStampaQuadro::print(const bool modulaser) +{ + int NumFisiche=0, NumNoFisiche=0; + + _ditte.destroy(); // Pulisce l'array delle ditte + + if (singola_ditta()) + { + if (sogg_estinto(_codditta)) + { + warning_box("La ditta %ld e' un soggetto estinto", _codditta); + return; + } + +// Se e' un dichiarante va a prendere tutti i suoi estinti. + bool dich = sogg_dic(_codditta); + if (dich) + fill_estinti(_codditta); + else + { + if (conta_tipi_per()) + { + conta_tipiper(_codditta, _quadro, &NumFisiche, &NumNoFisiche); + _ditte.add(_codditta, normale, NumFisiche, NumNoFisiche); + } + else + _ditte.add(_codditta, normale); + } + } + else // stampa ditte selezionate + { +// Costruisco un'array delle ditte da stampare. +// Tolgo i sogg. estinti, e dopo un dichiarante metto tutti i suoi estinti. + long codditta_prec = get_firm_770(); + long codditta = 0L; + int i=0; + while ((codditta = _cnf->get_long(DITTE_SEL, _section, i++)) != 0L) + { + if (sogg_estinto(codditta)) + continue; + +// Se e' un dichiarante va a prendere tutti i suoi estinti. + bool dich = sogg_dic(codditta); + if (dich) + fill_estinti(codditta); + else + { + if (conta_tipi_per()) + { + conta_tipiper(codditta, _quadro, &NumFisiche, &NumNoFisiche); + _ditte.add(codditta, normale, NumFisiche, NumNoFisiche); + } + else + _ditte.add(codditta, normale); + } + } + set_firm_770(codditta_prec); + } + + print_quadro(-1, 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; + + 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); + if (quadro()[0] == 'D') + codcaus_p = cur->curr(-14).get(quadro() == "D" ? "S2" : "S3"); + + ++(*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); + real perc = cur->curr().get_real(QUD_PERC); + + TString codcaus = cur->curr().get (QUD_CODCAUS); + if (quadro()[0] == 'D') + codcaus = cur->curr(-14).get(quadro() == "D" ? "S2" : "S3"); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc == perc_p || (perc_p == ZERO && 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); + TForm_item& stato_estero = body.find_field(QD_STATO_ESTERO); + TCursor* cur = cursor(); + TString codice = cur->curr(-24).get("CODTAB"); + codice.trim(); + if (codice.empty()) + stato_estero.hide(); + else + stato_estero.show(); + 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(); + + bool testata = TRUE; + for (int righe=0; righe < QD_RIGHE_PRIMA; righe++) + { + stampa = TRUE; +// Stampa intestazione, solo sul primo foglio. + if (testata) + { + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_testata(pr); + testata = FALSE; + } + + 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 + { // Siccome questo record non viene stampato perche' va sommato + leggi_importi(); // con quello successivo, non e' giusto incrementare l'indice + righe--; // delle righe per foglio. Siccome pero' l'ho gia' incrementato + } // all'inizio del ciclo ora lo devo decrementare. +// 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; + + bool testata = TRUE; + for (int righe=0; righe < QD_RIGHE_SECONDA; righe++) + { + stampa = TRUE; + if (testata) + { + fill_page(pr, HEADER_SECONDA); + testata = FALSE; + } + + 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(); + righe--; + } + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == TERZA) + { + bool testata = TRUE; + for (int righe=0; righe < QD_RIGHE_TERZA; righe++) + { + stampa = TRUE; + if (testata) + { + fill_page(pr, HEADER_TERZA); + _CtrFisStampati = 0; // conta quelli che stampo sulla terza + testata = FALSE; + } + + 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(); + righe--; + } + 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(); + + bool testata = TRUE; + for (int righe=0; righe < QD_RIGHE_QUARTA; righe++) + { + stampa = TRUE; +// All'inizio salta le righe in alto + if (testata) + { + _CtrNoFisStampati = 0; + fill_page(pr, HEADER_QUARTA); + testata = FALSE; + } + + 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(); + righe--; + } + 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 +{ + TQuadroD* _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: + TStampaQuadroD(const char* quadro, char livel); + virtual ~TStampaQuadroD() { } +}; + +TStampaQuadroD::TStampaQuadroD(const char* quadro, char liv) + : TStampaQuadro(quadro, liv) +{ +} + +bool TStampaQuadroD::user_create() +{ + _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; +} + +bool TStampaQuadroD::user_destroy() +{ + delete _form; + delete _cur; + + 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(); + + bool testata = TRUE; + for (int righe=0; righe < QD1_RIGHE_PRIMA; righe++) + { + stampa = TRUE; +// Stampa intestazione, solo sul primo foglio. + if (testata) + { + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_testata(pr); + testata = FALSE; + } + + 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(); + righe--; + } +// 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; + + bool testata = TRUE; + for (int righe=0; righe < QD1_RIGHE_SECONDA; righe++) + { + stampa = TRUE; + if (testata) + { + fill_page(pr, HEADER_D1_SECONDA); + testata = FALSE; + } + + 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(); + righe--; + } + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == TERZA) + { + bool testata = TRUE; + for (int righe=0; righe < QD1_RIGHE_TERZA; righe++) + { + stampa = TRUE; + if (testata) + { + fill_page(pr, HEADER_D1_TERZA); + _CtrFisStampati = 0; // conta quelli che stampo sulla terza + testata = FALSE; + } + + 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(); + righe--; + } + 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(); + + bool testata = TRUE; + for (int righe=0; righe < QD1_RIGHE_QUARTA; righe++) + { + stampa = TRUE; + if (testata) + { + _CtrNoFisStampati = 0; +// All'inizio salta le righe in alto + fill_page(pr, HEADER_D1_QUARTA); + testata = FALSE; + } + + 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(); + righe--; + } + 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; +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// +// STAMPA QUADRO G +// +///////////////////////////////////////////////////////////////////////////////////////////// +class TStampaQuadroG : public TStampaQuadro +{ +private: + TQuadroG* _form_g; + TDistintaG* _form_gd; +// TRelation* _rel_g, * _rel_gd; + TCursor* _cur_g, * _cur_gd; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + + virtual TDicForm* get_form() const { return _form_g; } + virtual TCursor* get_cursor() const { return _cur_g; } + + virtual bool print_quadro(const int OffsetDitta, const bool modulaser); + +public: + TStampaQuadroG(char livel) : TStampaQuadro("G", livel) { } +}; + +bool TStampaQuadroG::user_create() +{ +/* _rel_g = new TRelation(LF_QUAG); + _rel_g->add(LF_NDITTE, "CODDITTA=CODDITTA"); + _rel_g->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); + _rel_g->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); + _rel_g->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); + _rel_g->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); + _cur_g = new TCursor(_rel_g); + + _rel_gd = new TRelation(LF_QUAGD); + _rel_gd->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAGD, 216); + _rel_gd->add("%STA", "CODTAB=STATORES", 1, -216, 24); + _rel_gd->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); + _rel_gd->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); + _rel_gd->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); + _cur_gd = new TSorted_cursor(_rel_gd, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR"); +*/ + _form_g = new TQuadroG("77QG", quadro()); + _form_gd = new TDistintaG("77QGD", quadro()); + + _cur_g = new TCursor(_form_g->TForm::relation()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR", LF_QUAGD, LF_QUAGD); + _cur_gd = new TSorted_cursor(_form_gd->TForm::relation(), sortkey); + + _form_gd->set_num_foglio(1); + + return TRUE; +} + +bool TStampaQuadroG::user_destroy() +{ + delete _form_gd; + delete _form_g; + +// delete _rel_gd; + delete _cur_gd; + +// delete _rel_g; + delete _cur_g; + + return TRUE; +} + +// _ditte e' fatto di righe siffatte: +// codditta, flag 2 dichiarante, 1 normale, 0 estinto, num_fis, num_nofis, ultima_con_fis, ultima_con_nofis +bool TStampaQuadroG::print_quadro(const int OffsetDitta, const bool modulaser) +{ + int start=0, last=0; + long items_g, items_gd; + + items_g = items_gd = 0L; +// Setta formlen prima di printer.open per avere la lunghezza giusta nel caso di +// stampa a video + printer().formlen(QG_FORMLEN); + bool ok = printer().open(); + + _form_g->set_cursor(_cur_g); + _form_gd->set_cursor(_cur_gd); + + _form_g->set_modulaser(modulaser); + _form_gd->set_modulaser(modulaser); + + _form_gd->azzera_totali(); + +// Dice se deve eseguire il posizionamento del foglio. +// Se stampa piu' ditte va eseguito solo sulla prima +// Occhio a non spostarlo nel ciclo. + _form_g->set_posiziona(TRUE); + + if (OffsetDitta >= 0) + { + start = OffsetDitta; + last = OffsetDitta; + } + else + last = ditte().items() - 1; + + for (int i = start; i <= last; i++) + { + TString CoFiDic(20); + TToken_string riga(ditte()[i]); + const long codditta = atol(riga.get(0)); + const TipoDitta tipo = (TipoDitta)riga.get_int(1); + const long fis = riga.get_long(2); + const long nofis = riga.get_long(3); + const bool LastFis = (bool)riga.get_int(4); + const bool LastNoFis = (bool)riga.get_int(5); + +// I gruppi dich-estinti hanno totali comuni +// Si presume che nell'array vengano messi nell'ordine dich-estinti + if (tipo == normale || tipo == dichiarante) + _form_g->azzera_totali(); + + if (tipo == estinto) + CoFiDic = riga.get(6); + +// Se e' un dichiarante i totali vanno sull'estinto in cui finiscono o le F o le G + const bool StampaTotaliFis = tipo == normale || + (tipo == estinto && LastFis); + + const bool StampaTotaliNoFis = tipo == normale || + (tipo == estinto && LastNoFis); + +// Dice al form se e' questa ditta e' l'ultima con f. o g. + _form_gd->can_print_tot_fis(StampaTotaliFis); + _form_gd->can_print_tot_nofis(StampaTotaliNoFis); + +// Dice al form che tipo di ditta si stampa + _form_g->set_tipo_ditta(tipo); + +// Numera i fogli a partire da 1 per ogni ditta normale e da 1 e di seguito negli estinti +// per i sogg. dichiaranti + if (tipo == normale || tipo == dichiarante) + _form_g->set_num_foglio(1); + +// Se la ditta e' estinta dice al form il cod.fis. del dichiarante + if (tipo == estinto) + _form_g->set_cofi_dic(CoFiDic); + +// Dice al form che e' l'ultima ditta + if (i == last) + _form_gd->set_last_ditta(TRUE); + + items_g = _form_g->filtra(codditta); + items_gd = _form_gd->filtra(codditta); + +// Dice al form quanto e' lunga la progress-bar + _form_g->set_items_gd(items_g, items_gd); + + _form_g->print(codditta, fis, nofis); +// La progind deve essere la stessa tra G e distinta... + + _form_gd->set_progind(_form_g->progind()); // Passa la progind al form gd ... + _form_g->set_progind(NULL); // ... e la toglie dal form g + + _form_gd->print(codditta, fis, nofis); + } + + printer().close(); + return ok; +} + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Quadro G-1 +// +/////////////////////////////////////////////////////////////////////////////////////////// +HIDDEN const int QG1_FORMLEN = 72; +HIDDEN const int QG1_PAGINE = 1; + +class TQuadroG1 : public TDicForm +{ + private: + long _items; + void stampa_prospetto(TPrinter& pr); + + public: + virtual bool print(const long codditta, const long NumFis=0L, const long NumNoFis=0L); + //virtual bool print(const long codditta); + + TQuadroG1(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroG1() {} +}; + +bool TQuadroG1::print(const long codditta, const long NumFis, const long NumNoFis) +{ + TCursor* cur = cursor(); + TPrinter& pr = printer(); + + if (!InitPrint(codditta)) + return FALSE; + + pr.formlen(QG1_FORMLEN); + + if (_modulaser) ClearFlagModulaser(); + + (*cur) = 0L; + stampa_prospetto(pr); + + return TRUE; +} + +void TQuadroG1::stampa_prospetto(TPrinter& pr) +{ + TPrint_section& head = section('H', 1); + const word rr = head.height()-1; + TPrintrow& head_row = head.row(rr-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); + } + + TCursor* cur = cursor(); +// Prospetto + TRectype& r = cur->curr(); + TToken_string p12(r.get("P12")); + TToken_string p13(r.get("P13")); + TToken_string p14(r.get("P14")); + TToken_string p15(r.get("P15")); + TToken_string p16(r.get("P16")); + TToken_string p17(r.get("P17")); + + const int START_PROSP = 56; + const int RIGHE_COL356 = 12; + const int RIGHE_COL27 = 5; + const int COL_PROSP = 5; + +// Colonne 2 e 7 + for (int i = 0; i < RIGHE_COL27; i++) + { + const int fc2 = START_PROSP + i; + TForm_item& c2 = head.find_field(fc2); + c2.set(p12.get(i)); + + const int fc7 = fc2 + RIGHE_COL27 + 1; + TForm_item& c7 = head.find_field(fc7); + c7.set(p17.get(i)); + } + + const int START_COL3 = 68; +// Colonne 3 5 e 6 + for (i = 0; i < RIGHE_COL356; i++) + { + const int fc3 = START_COL3 + i; + TForm_item& c3 = head.find_field(fc3); + c3.set(p13.get(i)); + + const int fc5 = fc3 + RIGHE_COL356 + 1; + TForm_item& c5 = head.find_field(fc5); + c5.set(p15.get(i)); + + const int fc6 = fc5 + RIGHE_COL356 + 1; + TForm_item& c6 = head.find_field(fc6); + c6.set(p16.get(i)); + } + +// Righe da saltare nelle prime pag. dei moduli successivi al primo (che' son +// senza le righe del posizionamento...) + int HEADER_PRIMA_NOPOS = 3; + head.update(); + for (word j = 0; j <= rr; 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(); + HEADER_PRIMA_NOPOS--; + } + if (!PaginaPosizionamento()) + fill_page(pr, HEADER_PRIMA_NOPOS); + } + else + { + pr.print(head.row(j)); + _RigaCorr++; + } + } +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// +// STAMPA QUADRO G-1 +// +///////////////////////////////////////////////////////////////////////////////////////////// +class TStampaQuadroG1 : public TStampaQuadroD +{ + private: + TQuadroG1* _form; + TRelation* _rel; + 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; } + virtual bool conta_tipi_per() const { return FALSE; } + + public: + TStampaQuadroG1(char livel) : TStampaQuadroD("G1", livel) {} +}; + +bool TStampaQuadroG1::user_create() +{ + _form = new TQuadroG1("77QG1", quadro()); + + _rel = new TRelation(LF_QUAG1); + _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); + _cur = new TCursor(_rel); + + return TRUE; +} + +bool TStampaQuadroG1::user_destroy() +{ + delete _cur; + delete _rel; + delete _form; + + return TRUE; +} + +/* +// _ditte e' fatto di righe siffatte: +// codditta, flag 2 dichiarante, 1 normale, 0 estinto, num_fis, num_nofis, ultima_con_fis, ultima_con_nofis +bool TStampaQuadroG1::print_quadro(TString& quadro, const int OffsetDitta) +{ + int start=0, last=0; + +// Setta formlen prima di printer.open per avere la lunghezza giusta nel caso di +// stampa a video + printer().formlen(QG_FORMLEN); + bool ok = printer().open(); + bool modulaser = _m->get_bool(F_MODULASER); + + _form->set_cursor(_rel, _cur); + + _form->set_modulaser(modulaser); + +// Dice se deve eseguire il posizionamento del foglio. +// Se stampa piu' ditte va eseguito solo sulla prima +// Occhio a non spostarlo nel ciclo. + _form->set_posiziona(TRUE); + + if (OffsetDitta >= 0) + { + start = OffsetDitta; + last = OffsetDitta; + } + else + last = _ditte.items() - 1; + + for (int i = start; i <= last; i++) + { + TString CoFiDic(20); + TToken_string riga(_ditte[i]); + riga.separator('|'); + const long codditta = atol(riga.get(0)); + const TipoDitta tipo = (TipoDitta)riga.get_int(1); + +// I gruppi dich-estinti hanno totali comuni +// Si presume che nell'array vengano messi nell'ordine dich-estinti + if (tipo == normale || tipo == dichiarante) + _form->azzera_totali(); + + if (tipo == estinto) + CoFiDic = riga.get(6); + +// Dice al form che tipo di ditta si stampa + _form->set_tipo_ditta(tipo); + +// Numera i fogli a partire da 1 per ogni ditta normale e da 1 e di seguito negli estinti +// per i sogg. dichiaranti + if (tipo == normale || tipo == dichiarante) + _form->set_num_foglio(1); + +// Se la ditta e' estinta dice al form il cod.fis. del dichiarante + if (tipo == estinto) + _form->set_cofi_dic(CoFiDic); + +// Dice al form che e' l'ultima ditta + if (i == last) + _form->set_last_ditta(TRUE); + + _form->print(codditta); + } + printer().close(); + return ok; +} +*/ +/* +void TStampaQuadroG1::fill_estinti(const long CodDic) +{ + int NumFisiche=0, NumNoFisiche=0; + TString CodFiDic(20); + +// Salva il cod.fis. del dichiarante + CodFiDic = cod_fis(CodDic); + + _ditte.add(CodDic, dichiarante); + const int index_dich = _ditte.curr_index(); + int index = index_dich; + +// Leggo gli estinti + TLocalisamfile base(LF_BASE); + base.setkey(2); + base.zero(); + base.put(BSE_CODDIC, (long)CodDic); + TRectype dep(base.curr()); + + for (base.read(); !base.eof(); base.next()) + { + if (base.curr() > dep) + break; + +// Scarta il record del quadro I "globale" del dichiarante + const char tipoqua = base.get(BSE_TIPOQUA)[0]; + if (tipoqua == COD_QUA_I_DIC) + continue; + + const long DittaEstinta = base.get_long(BSE_CODDITTA); + + _ditte.add(DittaEstinta, estinto, 0L, 0L, FALSE, FALSE, CodFiDic); + + index++; + } +} +*/ +/* +void TStampaQuadroG1::print() +{ + int NumFisiche=0, NumNoFisiche=0; + + _ditte.destroy(); // Pulisce l'array delle ditte + + if (_singola_ditta) + { + if (sogg_estinto(_codditta)) + { + warning_box("La ditta %ld e' un soggetto estinto", _codditta); + return; + } + +// Se e' un dichiarante va a prendere tutti i suoi estinti. + bool dich = sogg_dic(_codditta); + if (dich) + fill_estinti(_codditta); + else + _ditte.add(_codditta, normale); + } + else // stampa ditte selezionate + { +// Costruisco un'array delle ditte da stampare. +// Tolgo i sogg. estinti, e dopo un dichiarante metto tutti i suoi estinti. + long codditta_prec = get_firm_770(); + long codditta = 0L; + int i=0; + while ((codditta = _cnf->get_long(DITTE_SEL, _section, i++)) != 0L) + { + if (sogg_estinto(codditta)) + continue; + +// Se e' un dichiarante va a prendere tutti i suoi estinti. + bool dich = sogg_dic(codditta); + if (dich) + fill_estinti(codditta); + else + _ditte.add(codditta, normale); + + } + set_firm_770(codditta_prec); + } + print_quadro(_quadro, -1); +} +*/ + + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// Quadro F +// +/////////////////////////////////////////////////////////////////////////////////////////// + +HIDDEN const int QF_FORMLEN = 72; +HIDDEN const int QF_PAGINE = 2; +HIDDEN const int HEADER_SECONDA_F = 7; + +class TQuadroF : public TDicForm +{ + private: + real pa3t, pa4t, pa5t, pa6t, pa7t; // totali prosp. A + real pb3t, pb4t, pc3t, pc4t, pd3t, pd4t; // totali prosp, B, C e D + int _ptrA, _ptrB, _ptrC, _ptrD; // puntatori alle righe dei prospetti + long _items; + int stampa_prospetto_A(TPrinter& pr); + int stampa_prospetto_B(TPrinter& pr); + int stampa_prospetto_C(TPrinter& pr); + int stampa_prospetto_D(TPrinter& pr); + TRecord_array* _prosp_a, *_prosp_b, *_prosp_c, *_prosp_d; + void azzera_contatori(); + void aggiorna_totali(char tipoprosp, TRectype& r); + void stampa_totali(char tipoprosp, TPrinter& pr); + virtual bool ultima_pagina() const { return _PaginaCorrente==SECONDA; } + + public: + virtual bool print(const long codditta, const long numfis=0L, const long numnofis=0L); + virtual void inc_curr_page(); + virtual void next_page(TPrinter& pr); + + TQuadroF(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroF() {} +}; + +void TQuadroF::azzera_contatori() +{ + pa3t = pa4t = pa5t = pa6t = pa7t = ZERO; + pb3t=pb4t=pc3t=pc4t=pd3t=pd4t = ZERO; // totali prosp, B, C e D + _ptrA = _ptrB = _ptrC = _ptrD = 1; +} + + +void TQuadroF::stampa_totali(char tipoprosp, TPrinter& pr) +{ + const int PA3_TOT = 104; + const int PB3_TOT = 54; + TPrint_section& sez = tipoprosp == 'A' ? section('H', 1) : section('B', 1); + const int rr = sez.height()-1; + int i = PA3_TOT, riga_tot=0; + + switch (tipoprosp) + { + case 'A': + { + riga_tot = 46; + TForm_item& c = sez.find_field(i++); + TString c3(pa3t.string()); + c.set(c3); + c = sez.find_field(i++); + TString c4(pa4t.string()); + c.set(c4); + c = sez.find_field(i++); + TString c5(pa5t.string()); + c.set(c5); + c = sez.find_field(i++); + TString c6(pa6t.string()); + c.set(c6); + c = sez.find_field(i++); + TString c7(pa7t.string()); + c.set(c7); + break; + } + case 'B': + { + i = PB3_TOT; + riga_tot = 14; + TForm_item& c = sez.find_field(i++); + TString c3(pb3t.string()); + c.set(c3); + c = sez.find_field(i); + TString c4(pb4t.string()); + c.set(c4); + break; + } + case 'C': + { + i = PB3_TOT+2; + riga_tot = 20; + TForm_item& c = sez.find_field(i++); + TString c3(pc3t.string()); + c.set(c3); + c = sez.find_field(i); + TString c4(pc4t.string()); + c.set(c4); + break; + } + case 'D': + { + i = PB3_TOT+4; + riga_tot = 26; + TForm_item& c = sez.find_field(i++); + TString d3(pd3t.string()); + c.set(d3); + c = sez.find_field(i); + TString d4(pd4t.string()); + c.set(d4); + break; + } + default: + break; + } + + sez.update(); + pr.print(sez.row(riga_tot)); + _RigaCorr++; + + if (usa_progind()) + progind()->addstatus(1); + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +void TQuadroF::aggiorna_totali(char tipoprosp, TRectype& r) +{ + real sogg,rope,acc,ecc,sal; + + switch (tipoprosp) + { + case 'A': + sogg = r.get_real(QUF_SOGRIT); + rope = r.get_real(QUF_ROPE); + acc = r.get_real(QUF_ACCONTI); + ecc = r.get_real(QUF_VERSECC); + sal = r.get_real(QUF_VERSALDO); + pa3t += sogg; + pa4t += rope; + pa5t += acc; + pa6t += ecc; + pa7t += sal; + break; + case 'B': + sogg = r.get_real(QUF_SOGRIT); + rope = r.get_real(QUF_ROPE); + pb3t += sogg; + pb4t += rope; + break; + case 'C': + sogg = r.get_real(QUF_SOGRIT); + rope = r.get_real(QUF_ROPE); + pc3t += sogg; + pc4t += rope; + break; + case 'D': + sogg = r.get_real(QUF_SOGRIT); + rope = r.get_real(QUF_ROPE); + pd3t += sogg; + pd4t += rope; + break; + default: + break; + } +} + +void TQuadroF::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); +// if (PagCorr = SECONDA) stampa_totali(pr); + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +void TQuadroF::inc_curr_page() +{ + if (_PaginaCorrente == PRIMA) + _PaginaCorrente = SECONDA; + else + if (_PaginaCorrente == SECONDA) + _PaginaCorrente = PRIMA; +} + + +bool TQuadroF::print(const long codditta, const long numfis, const long numnofis) +{ + bool EndPrint=FALSE, End_A=FALSE, End_B=FALSE, End_C=FALSE, End_D=FALSE; + int residui_A=0, residui_B=0, residui_C=0, residui_D=0; + TCursor* cur = cursor(); + TPrinter& pr = printer(); + + if (!InitPrint(codditta)) + return FALSE; + + azzera_contatori(); + + TLocalisamfile& rf = cur->file(LF_RIGHEF); + TRectype dep(rf.curr()); + dep.zero(); + dep.put("CODDITTA", _codditta); + dep.put("TIPOPRO", "A"); + _prosp_a = new TRecord_array(dep, "NPROG"); + dep.put("TIPOPRO", "B"); + _prosp_b = new TRecord_array(dep, "NPROG"); + dep.put("TIPOPRO", "C"); + _prosp_c = new TRecord_array(dep, "NPROG"); + dep.put("TIPOPRO", "D"); + _prosp_d = new TRecord_array(dep, "NPROG"); + + pr.formlen(QG1_FORMLEN); + + while (!EndPrint) + { + for (int pagina=1; pagina <= QF_PAGINE; pagina++, next_page(pr)) + { + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); + + if (End_A) + break; + + (*cur) = 0L; + + residui_A = stampa_prospetto_A(pr); + + End_A = (residui_A == 0); + if (End_A) stampa_totali('A', pr); + _EndPrintDitta=EndPrint = End_A && End_B && End_C && End_D; + } + + if (_PaginaCorrente == SECONDA) + { +// Reset del flag di pagina con posiz. + if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; + + if (End_B && End_C && End_D) + break; + + fill_page(pr, HEADER_SECONDA_F); + + residui_B = stampa_prospetto_B(pr); + End_B = (residui_B == 0); + if (End_B) stampa_totali('B', pr); + + residui_C = stampa_prospetto_C(pr); + End_C = (residui_C == 0); + if (End_C) stampa_totali('C', pr); + + residui_D = stampa_prospetto_D(pr); + End_D = (residui_D == 0); + if (End_D) stampa_totali('D', pr); + + _EndPrintDitta=EndPrint = End_A && End_B && End_C && End_D; + } + } // for pagina.. + } // EndPrint() + close_print(); + return TRUE; +} + +const int F_DESC_CAUS = 50; +const int RIGHE_PROSP = 3; + +int TQuadroF::stampa_prospetto_C(TPrinter& pr) +{ + TPrint_section& sez = section('B', 1); + const int rr = sez.height()-1; + + const int START_C = 16; + const int last_c = _prosp_c->last_row(); + for (int i=0; i < RIGHE_PROSP; _ptrC++, i++) + { + if (_ptrC > last_c) + break; + + TRectype& r = _prosp_c->row(_ptrC, TRUE); + aggiorna_totali('C', r); + TString16 codcau(r.get(QUF_CODCAUS)); + TString descr_cau(get_desc_cau(codcau)); + TString16 aliq (r.get(QUF_ALIQUOTA)); + TString sogg (r.get(QUF_SOGRIT)); + TString rope (r.get(QUF_ROPE)); + + const int fc0 = START_C + _ptrC - 1; + TString16 nord; nord << _ptrC; + TForm_item& c0 = sez.find_field(fc0); + c0.set(nord); + + const int fc1 = fc0 + RIGHE_PROSP; + TForm_item& c1 = sez.find_field(fc1); + c1.set(descr_cau); + + const int fc2 = fc1 + RIGHE_PROSP; + TForm_item& c2 = sez.find_field(fc2); + c2.set(aliq); + + const int fc3 = fc2 + RIGHE_PROSP; + TForm_item& c3 = sez.find_field(fc3); + c3.set(sogg); + + const int fc4 = fc3 + RIGHE_PROSP; + TForm_item& c4 = sez.find_field(fc4); + c4.set(rope); + } + const int res_C = last_c - _ptrC; + return res_C < 0 ? 0 : res_C; +} + +int TQuadroF::stampa_prospetto_D(TPrinter& pr) +{ + TPrint_section& sez = section('B', 1); + const int rr = sez.height()-1; + + const int START_D = 31; + const int last_d = _prosp_d->last_row(); + for (int i=0; i < RIGHE_PROSP; _ptrD++, i++) + { + if (_ptrD > last_d) + break; + + TRectype& r = _prosp_d->row(_ptrD, TRUE); + aggiorna_totali('D', r); + TString16 codcau(r.get(QUF_CODCAUS)); + TString descr_cau(get_desc_cau(codcau)); + TString16 aliq (r.get(QUF_ALIQUOTA)); + TString sogg (r.get(QUF_SOGRIT)); + TString rope (r.get(QUF_ROPE)); + + const int fc0 = START_D + _ptrD - 1; + TString16 nord; nord << _ptrD; + TForm_item& c0 = sez.find_field(fc0); + c0.set(nord); + + const int fc1 = fc0 + RIGHE_PROSP; + TForm_item& c1 = sez.find_field(fc1); + c1.set(descr_cau); + + const int fc2 = fc1 + RIGHE_PROSP; + TForm_item& c2 = sez.find_field(fc2); + c2.set(aliq); + + const int fc3 = fc2 + RIGHE_PROSP; + TForm_item& c3 = sez.find_field(fc3); + c3.set(sogg); + + const int fc4 = fc3 + RIGHE_PROSP; + TForm_item& c4 = sez.find_field(fc4); + c4.set(rope); + } + + sez.update(); + for (i=0; i < rr; i++) + { + pr.print(sez.row(i)); + _RigaCorr++; + } + + if (usa_progind()) + progind()->addstatus(1); + + const int res_D = last_d - _ptrD; + return res_D < 0 ? 0 : res_D; +} + +int TQuadroF::stampa_prospetto_B(TPrinter& pr) +{ + TPrint_section& sez = section('B', 1); + const int rr = sez.height()-1; + + const int START_B = 1; + + const int last_b = _prosp_b->last_row(); + for (int i=0; i < RIGHE_PROSP; _ptrB++, i++) + { + if (_ptrB > last_b) + break; + + TRectype& r = _prosp_b->row(_ptrB, TRUE); + aggiorna_totali('B', r); + TString dep(50); + dep = r.get(QUF_CODCAUS); + TString descr_cau(get_desc_cau(dep)); + TString16 aliq (r.get(QUF_ALIQUOTA)); + TString sogg (r.get(QUF_SOGRIT)); + TString rope (r.get(QUF_ROPE)); + + const int fc0 = START_B + _ptrB - 1; + TString16 nord; nord << _ptrB; + TForm_item& c0 = sez.find_field(fc0); + c0.set(nord); + + const int fc1 = fc0 + RIGHE_PROSP; + TForm_item& c1 = sez.find_field(fc1); + c1.set(descr_cau); + + const int fc2 = fc1 + RIGHE_PROSP; + TForm_item& c2 = sez.find_field(fc2); + c2.set(aliq); + + const int fc3 = fc2 + RIGHE_PROSP; + TForm_item& c3 = sez.find_field(fc3); + c3.set(sogg); + + const int fc4 = fc3 + RIGHE_PROSP; + TForm_item& c4 = sez.find_field(fc4); + c4.set(rope); + } + +// TBI setta totali e descr.causale F + TString16 fcau(cursor()->curr(LF_QUAF).get(QUF_FCAUS)); + TString descr_cau(get_desc_cau(fcau)); + TForm_item& fd = sez.find_field(F_DESC_CAUS); + fd.set(descr_cau); + + const int res_B = last_b - _ptrB; + return res_B < 0 ? 0 : res_B; +} + +int TQuadroF::stampa_prospetto_A(TPrinter& pr) +{ + TPrint_section& head = section('H', 1); + const word rr = head.height()-1; + TPrintrow& head_row = head.row(rr-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); + } + + TCursor* cur = cursor(); + + const int START_PROSP = 56; + const int RIGHE_PROSP = 6; + const int COL_PROSP = 8; + const int last_a = _prosp_a->last_row(); + + for (int i=0; i < RIGHE_PROSP ; _ptrA++, i++) + { + if (_ptrA > last_a) + break; + TRectype& r = _prosp_a->row(_ptrA, TRUE); + aggiorna_totali('A', r); + TString16 codcau(r.get(QUF_CODCAUS)); + TString descr_cau(get_desc_cau(codcau)); + TString16 aliq (r.get(QUF_ALIQUOTA)); + TString sogg (r.get(QUF_SOGRIT)); + TString rope (r.get(QUF_ROPE)); + TString acc(r.get(QUF_ACCONTI)); + TString ecc(r.get(QUF_VERSECC)); + TString sal(r.get(QUF_VERSALDO)); + + const int fc0 = START_PROSP + _ptrA - 1; + TString16 nord; nord << _ptrA; + TForm_item& c0 = head.find_field(fc0); + c0.set(nord); + + const int fc1 = fc0 + RIGHE_PROSP; + TForm_item& c1 = head.find_field(fc1); + c1.set(descr_cau); + + const int fc2 = fc1 + RIGHE_PROSP; + TForm_item& c2 = head.find_field(fc2); + c2.set(aliq); + + const int fc3 = fc2 + RIGHE_PROSP; + TForm_item& c3 = head.find_field(fc3); + c3.set(sogg); + + const int fc4 = fc3 + RIGHE_PROSP; + TForm_item& c4 = head.find_field(fc4); + c4.set(rope); + + const int fc5 = fc4 + RIGHE_PROSP; + TForm_item& c5 = head.find_field(fc5); + c5.set(acc); + + const int fc6 = fc5 + RIGHE_PROSP; + TForm_item& c6 = head.find_field(fc6); + c6.set(ecc); + + const int fc7 = fc6 + RIGHE_PROSP; + TForm_item& c7 = head.find_field(fc7); + c7.set(sal); + } + +// Righe da saltare nelle prime pag. dei moduli successivi al primo (che' son +// senza le righe del posizionamento...) + int HEADER_PRIMA_NOPOS = 3; + head.update(); + for (word j = 0; j <= rr; 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(); + HEADER_PRIMA_NOPOS--; + } + if (!PaginaPosizionamento()) + fill_page(pr, HEADER_PRIMA_NOPOS); + } + else + { + pr.print(head.row(j)); + _RigaCorr++; + } + } + const int res = last_a - _ptrA; + return res < 0 ? 0 : res; +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// +// STAMPA QUADRO F +// +///////////////////////////////////////////////////////////////////////////////////////////// + +class TStampaQuadroF : public TStampaQuadro +{ + private: + TQuadroF* _form; + TRelation* _rel; + TCursor* _cur; + + protected: + virtual bool conta_tipi_per() const { return FALSE; } + virtual TDicForm* get_form() const { return _form; } + + virtual TCursor* get_cursor() const { return _cur; } + + virtual bool user_create(); + virtual bool user_destroy(); + + public: + TStampaQuadroF(char livel) : TStampaQuadro("F", livel) { } +}; + +bool TStampaQuadroF::user_create() +{ + _form = new TQuadroF("77QF", quadro()); + + _rel = new TRelation(LF_QUAF); + _rel->add(LF_RIGHEF, "CODDITTA=CODDITTA"); + _rel->add(LF_NDITTE, "CODDITTA=CODDITTA", 1, LF_QUAF); + _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); + _cur = new TCursor(_rel); + + return TRUE; +} + +bool TStampaQuadroF::user_destroy() +{ + delete _cur; + delete _rel; + delete _form; + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////////// +// Busta +///////////////////////////////////////////////////////////////////////////////// + +class TBusta : public TDicForm +{ +protected: + virtual bool print(const long codditta, const long, const long); + +public: + TBusta(const char* form, const char* quadro) : TDicForm(form, quadro) { } + virtual ~TBusta() { } +}; + +bool TBusta::print(const long codditta, const long, const long) +{ + const bool ok = InitPrint(codditta); + if (ok) + { + // Calcola identificatore del quadretto corrispondente al quadro L + TForm_item& dietor = find_field('B', odd_page, 'L' * 10); + const int anno = anno_770(); + const bool elle = esiste_record_L(codditta, anno); + dietor.set(elle ? "X" : ""); + + TForm::print(0); + } + return ok; +} + +class TStampaBusta : public TStampaQuadro +{ + TDicForm* _form; + +protected: // TStampaQuadro + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool conta_tipi_per() const { return FALSE; } + virtual TDicForm* get_form() const { return _form; } + virtual TCursor* get_cursor() const { return _form->TForm::cursor(); } + virtual bool print_quadro(const int OffsetDitta, const bool modulaser); + +public: + TStampaBusta(const char* quadro, char livel); + virtual ~TStampaBusta() { } +}; + +TStampaBusta::TStampaBusta(const char* quadro, char livel) + : TStampaQuadro(quadro, livel), _form(NULL) +{ + set_taitol("Stampa buste"); +} + +bool TStampaBusta::user_create() +{ + _form = new TBusta("77Busta", quadro()); + return TRUE; +} + +bool TStampaBusta::user_destroy() +{ + delete _form; + _form = NULL; + return TRUE; +} + +bool TStampaBusta::print_quadro(const int OffsetDitta, const bool modulaser) +{ + TDicForm* ff = get_form(); + ff->set_cursor(get_cursor()); + +// Setta formlen prima di printer.open per avere la lunghezza giusta nel caso di stampa a video + printer().formlen(ff->height()); + bool ok = printer().open(); + + ff->set_modulaser(modulaser); + + ff->set_arrange(FALSE); + ff->set_posiziona(TRUE); + + int start = 0, last = 0; + if (OffsetDitta >= 0) + { + start = OffsetDitta; + last = OffsetDitta; + } + else + last = ditte().items() - 1; + + for (int i = start; i <= last; i++) + { + TToken_string& riga = ditte()[i]; + const long codditta = riga.get_long(0); + const TipoDitta tipo = (TipoDitta)riga.get_int(); + if (tipo != estinto) + ff->print(codditta, 0, 0); + } + + printer().close(); + return ok; +} + +/////////////////////////////////////////////////////////////////////////////////////////// +// +// BASE +// +/////////////////////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////////// +// +// MAIN +// +// Uso: +// 772mod -4 [QUADRO] [ LIVELLO {S|D} ] +// +///////////////////////////////////////////////////////////////////////////////// +int stampa_quadro(int argc, char* argv[]) +{ + if (argc >= 4) + { + const TFixed_string quadro(argv[2]); + const char livello = *argv[3]; + + TStampaQuadro* app = NULL; + + 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') + { + switch (quadro[1] - '0') + { + case 1: app = new TStampaQuadroA1(quadro, livello); break; + case 2: app = new TStampaQuadroA2(quadro, livello); break; + case 3: app = new TStampaQuadroA3(quadro, livello); break; + default: app = new TStampaQuadroA(quadro, livello); break; + } + } + else if (quadro[0] == 'B' && quadro[1] != 'a') + { + switch (quadro[1]) + { + case 'U': app = new TStampaBusta(quadro, livello); break; + default : app = new TStampaQuadroB(quadro, livello); break; + } + } + else if (quadro == "F") + { + app = new TStampaQuadroF(livello); + } + else if (quadro == "G") + { + app = new TStampaQuadroG(livello); + } + else if (quadro == "G1") + { + app = new TStampaQuadroG1(livello); + } + else if (quadro == "Base") + { + app = new TStampaBase(livello); + } + else if (quadro == "H") + { + app = new TStampaQuadroH(quadro, livello); + } + + if (app != NULL) + { + app->run(argc, argv, app->taitol()); + delete app; + } + } + + return 0; +} +======= #include "77stq.h" #include "77stba.h" #include "77stqab.h" @@ -3840,3 +7778,4 @@ int stampa_quadro(int argc, char* argv[]) return 0; } +>>>>>>> 1.29 diff --git a/m770/77stq.h b/m770/77stq.h index 5fd672765..a4bb1da3a 100755 --- a/m770/77stq.h +++ b/m770/77stq.h @@ -64,8 +64,9 @@ typedef enum { STARTDOC, STARTDITTA, STARTPAGE, ENDDOC } ModulaserKey; #define C_RITENUTE 18 #define C_NETTO 19 -#define H_COFI_DIC 13 -#define H_NUM_FOGLIO 14 +#define H_COFI_DIC 13 +#define H_NUM_FOGLIO 14 +#define QD_STATO_ESTERO 12 // Quadro D HIDDEN const int QD_FORMLEN_PRIMA = 70; // 72 - 3 (3 e' la posizione della X di posiz.) @@ -92,6 +93,8 @@ HIDDEN const int HEADER_D1_QUARTA = 14; typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro; typedef enum { fisiche, nofisiche } TipoPagina; +const char* get_ragsoc_anagr(char tipo, long codanagr); + class TDicForm : public TForm { private: diff --git a/m770/77stqc.cpp b/m770/77stqc.cpp index 1b4af60ee..61ac806df 100755 --- a/m770/77stqc.cpp +++ b/m770/77stqc.cpp @@ -11,32 +11,56 @@ bool TQuadroC::controlla_percentuale(TCursor& cur, const real& perc_p) { bool stampa = TRUE; + + 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); + TString ragsoc_p = get_ragsoc_anagr(tipo_p,codana_p); 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) + TString ragsoc = get_ragsoc_anagr(tipo,codana); + real perc = cur.curr().get_real(QUC_PERC); + + if (ditta == ditta_p && tipo == tipo_p && ragsoc == ragsoc_p + && codana == codana_p && codcaus == codcaus_p) { if (perc != ZERO) { stampa = FALSE; _devo_sommare = TRUE; - } + } + else + stampa = FALSE; } --(cur); - } + } + else + if (perc_p != ZERO) + { + ++(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); + TString ragsoc = get_ragsoc_anagr(tipo,codana); + real perc = cur.curr().get_real(QUC_PERC); + + if (ditta == ditta_p && tipo == tipo_p && ragsoc == ragsoc_p && + codana == codana_p && codcaus == codcaus_p && perc_p == perc) + stampa = FALSE; + else + _devo_sommare = TRUE; + + --(cur); + } + return stampa; } @@ -44,12 +68,12 @@ 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); + _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) @@ -69,9 +93,15 @@ void TQuadroC::setta_importi(TPrint_section& body) contssn += _contssn; somme += _somme; imponibile += _imponibile; - ritenute += _ritenute; + ritenute += _ritenute; netto += _netto; - _devo_sommare = FALSE; + _devo_sommare = FALSE; + _totale = ZERO; + _contssn = ZERO; + _somme = ZERO; + _imponibile = ZERO; + _ritenute = ZERO; + _netto = ZERO; } TForm_item& ftotale = body.find_field(C_TOTALE); @@ -137,7 +167,8 @@ bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis pr.formlen(QA_FORMLEN); - int elementi = 0; // Numero di elementi stampati in questa pagina + int elementi = 0; // Numero di elementi stampati in questa pagina + int ele_bis = 0; bool stampato_ultimo = FALSE; bool stampati_totali = FALSE; @@ -178,7 +209,7 @@ bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis if (_modulaser) ClearFlagModulaser(); - if (elementi == 0) + if (ele_bis == 0) { stampa_testata(pr); jump_to_line(pr, prima_riga(PRIMA)); @@ -190,24 +221,28 @@ bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis stampa = controlla_percentuale(cur,perc_p); if (stampa) stampa_corpo(pr); - else - leggi_importi(); - + else + { + leggi_importi(); + elementi--; + } stampato_ultimo = stampero_ultimo; } elementi++; + ele_bis++; if (elementi >= elementi_pagina(PRIMA)) { next_page(pr); - elementi = 0; + elementi = 0; + ele_bis = 0; } break; case SECONDA: case TERZA: if (!stampato_ultimo) { - if (elementi == 0) + if (ele_bis == 0) jump_to_line(pr, prima_riga(_PaginaCorrente)); real perc_p = cur.curr().get_real(QUC_PERC); @@ -215,34 +250,41 @@ bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis if (stampa) stampa_corpo(pr); else - leggi_importi(); - + { + leggi_importi(); + elementi--; + } stampato_ultimo = stampero_ultimo; } - elementi++; + elementi++; + ele_bis++; if (elementi >= elementi_pagina(_PaginaCorrente)) { next_page(pr); - elementi = 0; + elementi = 0; + ele_bis = 0; } break; case QUARTA: if (!stampato_ultimo) { - if (elementi == 0) + if (ele_bis == 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(); - + else + { + leggi_importi(); + elementi--; + } stampato_ultimo = stampero_ultimo; } - elementi++; + elementi++; + ele_bis++; if (elementi >= elementi_pagina(QUARTA)) { @@ -253,7 +295,8 @@ bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis stampati_totali = TRUE; } next_page(pr); - elementi = 0; + elementi = 0; + ele_bis = 0; } break; default: