From 1683aee3fd47b65783f6c9cbe3bcb839ac62a70f Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 26 Jul 1996 14:40:38 +0000 Subject: [PATCH] Modifica alla stampa dei quadri C - D e aggiunta stampa quadro D1 git-svn-id: svn://10.65.10.50/trunk@3246 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/772.pdb | Bin 145846 -> 153768 bytes m770/77qc.frm | 6 +- m770/77qd.frm | 340 +++++------ m770/77qd1.frm | 82 +-- m770/77stq.cpp | 1485 ++++++++++++++++++++++++++++++++++++++++-------- m770/77stq.sbr | Bin 274734 -> 277218 bytes 6 files changed, 1477 insertions(+), 436 deletions(-) diff --git a/m770/772.pdb b/m770/772.pdb index 882a1a66ba6bdfcf3b91fe67304869bad9300601..10e64be7b62cec18e81274ea47d75d606f6cc009 100755 GIT binary patch delta 3253 zcmcImX>3$g6h8OO>vWd3(-x><$#f8pB&bM%pd?sChf>#)q|1A*R zgQexc;T6GgTG*c>?JdOgsuqB-u?U@Q!sQ_?7!7NWEJ^Z$3MsG{jUN}YEV{~HQh6;h zVS@Kr3K>C4Q@!Iz`hiJlo_7LC{S+>>fd$?YlBTCgsnlCeQng)5o4iqyLUC*|Noumh zws|W_(o@gcd5QY)5*gtLi`5^Fvh7NTCFltj6%~iIvS1(@js{DLWnQnKvGIAfHnRqu zPm~o$hiS!SQC`2LSpUpqwumXq(6}^(jqkP`U6JO+Vql=Vup}G_1$D=%sg=|++{>VQbLw0wd&EtIbD9w$e;z&aD%qFB0l zq?>Q&XbK!P(Vyd%^9emEZYR?TSF?Fo1*yj2)oj88Yta)b36+M*qQ!yoU{P^dP!{2j zY!{WJG#Jo|i-M%iEBdD~W)17gt{b!0u>Sg9H!n|@R^`b^@8#lwcwn7KalI&yOmP5N zIu0_$9zLETN39eGP>NoKqscJ1HQKW&_PHoeGEDT@hqYAh)f8JL>XQs}Lf4_5!A>D(mhx9#kYdXzr0!J$F0a}CL7n6JtomD2U__>24 z=!~y`=aP8uxZ!B4=@r8va%Oamx$d1Jr9I{@`w$sC%#!$Wa+Nm4?CORL2K|hu=Cft4 zNjAP#-0%?^jdd*RA%Cooqp{g0tjK2YsMHq91*Gg}YCsE>P+v-8`9|NxtgdH$DmRu2 z$3%cv?kZr-7v7+p6_V@VH$io61=S5xj-%0G4cn++PvZ%C;Dpe3`8a#upr_5AmMi*S z1V(|<4yHhPG5=wi>vwva$8WM+6eQ2ro1jbqJcT?6XU{24(E>rJAQMlE8fQ6({aMS+~fy41wLEMk~R739Ql z9Ovl8}Isy R9?3P|qp@cl%ToL~e*poVJBI)O delta 29 jcmZ3nk#pN;jtM4QObkFEP_0^K*=W~l$GFvwslpNfi5m!P diff --git a/m770/77qc.frm b/m770/77qc.frm index 9236cd87d..10b6b543a 100755 --- a/m770/77qc.frm +++ b/m770/77qc.frm @@ -299,7 +299,7 @@ BEGIN PROMPT 45 5 "" PICTURE "###.###.###^^^" MESSAGE ADD,FL->14 - FIELD 61->TOTALE +// FIELD 61->TOTALE END NUMBER 15 @@ -308,7 +308,7 @@ BEGIN PROMPT 60 5 "" PICTURE "###.###.###^^^" MESSAGE ADD,FL->15 - FIELD 61->CONTSSN +// FIELD 61->CONTSSN END NUMBER 16 @@ -317,7 +317,7 @@ BEGIN PROMPT 76 5 "" PICTURE "###.###.###^^^" MESSAGE ADD,FL->16 - FIELD 61->SOMME +// FIELD 61->SOMME END NUMBER 17 diff --git a/m770/77qd.frm b/m770/77qd.frm index 542039479..52a8404c7 100755 --- a/m770/77qd.frm +++ b/m770/77qd.frm @@ -7,8 +7,8 @@ JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) JOIN 6 TO 62 ALIAS 216 INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN 8 TO 216@ ALIAS 218 INTO CODANAGR=CODANAGR -JOIN 13 TO 216@ ALIAS 313 INTO COM=COMNASC -JOIN 13 TO 218@ ALIAS 413 INTO COM=COMRF(COMRES) +JOIN 13 TO 218@ ALIAS 313 INTO COM=COMNASC +JOIN 13 TO 216@ ALIAS 413 INTO COM=COMRF(COMRES) JOIN %STA TO 216@ ALIAS 24 INTO CODTAB=STATORES END @@ -36,71 +36,8 @@ BEGIN FI 131 END -SECTION HEADER FIRST 28 +SECTION HEADER FIRST 31 -STRINGA 1 -BEGIN - KEY "CODICE FISCALE" - PROMPT 4 13 "" - FIELD 116@->COFI -END - -STRINGA 2 -BEGIN - KEY "RAGIONE SOCIALE" - PROMPT 39 13 "" - FIELD 116@->RAGSOC - GROUP 2 -END - -STRINGA 3 -BEGIN - KEY "COGNOME" - PROMPT 39 13 "" - FIELD 116@->RAGSOC[1,30] - GROUP 1 -END - -STRINGA 4 -BEGIN - KEY "NOME" - PROMPT 17 15 "" - FIELD 116@->RAGSOC[31,50] - GROUP 1 -END - -STRINGA 5 -BEGIN - KEY "SESSO" - PROMPT 58 15 "" - FIELD 118@->SESSO - GROUP 1 -END - -STRINGA 6 -BEGIN - KEY "DATA DI NASCITA" - PROMPT 66 15 "" - FIELD 118@->DATANASC - GROUP 1 -END - -STRINGA 7 -BEGIN - KEY "COMUNE DI NASCITA" - PROMPT 84 15 "" - FIELD 113@->DENCOM - GROUP 1 -END - -STRINGA 8 -BEGIN - KEY "PROV. DI NASCITA" - PROMPT 126 15 "" - FIELD 113@->PROVCOM - GROUP 1 -END - LISTA 9 BEGIN KEY "Tipo anagrafica" @@ -109,51 +46,114 @@ BEGIN ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ END +STRINGA 1 +BEGIN + KEY "CODICE FISCALE" + PROMPT 4 12 "" + FIELD 116@->COFI +END + +STRINGA 2 +BEGIN + KEY "RAGIONE SOCIALE" + PROMPT 39 12 "" + FIELD 116@->RAGSOC + GROUP 2 +END + +STRINGA 3 +BEGIN + KEY "COGNOME" + PROMPT 39 12 "" + FIELD 116@->RAGSOC[1,30] + GROUP 1 +END + +STRINGA 4 +BEGIN + KEY "NOME" + PROMPT 17 14 "" + FIELD 116@->RAGSOC[31,50] + GROUP 1 +END + +STRINGA 5 +BEGIN + KEY "SESSO" + PROMPT 58 14 "" + FIELD 118@->SESSO + GROUP 1 +END + +STRINGA 6 +BEGIN + KEY "DATA DI NASCITA" + PROMPT 66 14 "" + FIELD 118@->DATANASC + GROUP 1 +END + +STRINGA 7 +BEGIN + KEY "COMUNE DI NASCITA" + PROMPT 84 14 "" + FIELD 113@->DENCOM + GROUP 1 +END + +STRINGA 8 +BEGIN + KEY "PROV. DI NASCITA" + PROMPT 126 14 "" + FIELD 113@->PROVCOM + GROUP 1 +END + STRINGA 10 BEGIN KEY "COMUNE DI RES.FISCALE" - PROMPT 17 17 "" + PROMPT 17 16 "" FIELD 213@->DENCOM END STRINGA 11 BEGIN KEY "PROV DI RES.FISCALE" - PROMPT 59 17 "" + PROMPT 59 16 "" FIELD 213@->PROVCOM END STRINGA 12 BEGIN KEY "VIA di RES." - PROMPT 66 17 "" + PROMPT 66 16 "" FIELD 116@->INDRF END -STRINGA 13 +STRINGA 15 BEGIN KEY "NUM. CIVICO di RES." - PROMPT 102 17 "" + PROMPT 102 16 "" FIELD 116@->CIVRF END -STRINGA 14 +STRINGA 16 BEGIN KEY "CAP" - PROMPT 120 17 "" + PROMPT 120 16 "" FIELD 116@->CAPRF END -STRINGA 15 +STRINGA 13 BEGIN KEY "CODICE FISCALE DICHIARANTE" - PROMPT 118 20 "" + PROMPT 118 19 "" END -NUMBER 16 +NUMBER 14 BEGIN KEY "NUM. FOGLIO" - PROMPT 123 20 "" + PROMPT 123 22 "" END END @@ -171,22 +171,22 @@ END STRINGA 1 BEGIN KEY "COD.FIS" - PROMPT 10 2 "" + PROMPT 10 1 "" FIELD 216@->COFI END STRING 2 BEGIN KEY "COGNOME" - PROMPT 42 2 "" + PROMPT 42 1 "" FIELD 216@->RAGSOC[1,30] GROUP 1 -END +END STRING 3 BEGIN KEY "NOME" - PROMPT 81 2 "" + PROMPT 81 1 "" FIELD 216@->RAGSOC[31,50] GROUP 1 END @@ -194,7 +194,7 @@ END STRING 102 BEGIN KEY "RAGSOC GIURIDICHE" - PROMPT 54 2 "" + PROMPT 54 1 "" FIELD 216@->RAGSOC GROUP 2 END @@ -202,21 +202,21 @@ END STRING 4 BEGIN KEY "DATA NASCITA" - PROMPT 114 2 "" + PROMPT 114 1 "" FIELD 218@->DATANASC END STRING 5 BEGIN KEY "SESSO" - PROMPT 129 2 "" + PROMPT 129 1 "" FIELD 218@->SESSO END STRING 6 BEGIN KEY "COMUNE DI NASCITA" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 313@->DENCOM GROUP 1 END @@ -224,7 +224,7 @@ END STRING 101 BEGIN KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 413@->DENCOM GROUP 2 END @@ -232,7 +232,7 @@ END STRING 7 BEGIN KEY "PROV DI NASCITA" - PROMPT 47 4 "" + PROMPT 47 3 "" FIELD 313@->PROVCOM GROUP 1 END @@ -240,7 +240,7 @@ END STRING 8 BEGIN KEY "COMUNE DI RESIDENZA" - PROMPT 53 4 "" + PROMPT 53 3 "" FIELD 413@->DENCOM GROUP 1 END @@ -248,165 +248,175 @@ END STRING 9 BEGIN KEY "PROV. RESIDENZA" - PROMPT 88 4 "" + PROMPT 88 3 "" FIELD 413@->PROVCOM END STRING 106 BEGIN KEY "PROV. RESIDENZA GIURIDICHE" - PROMPT 61 4 "" + PROMPT 61 3 "" FIELD 413@->PROVCOM GROUP 2 END -STRING 10 +STRING 108 BEGIN KEY "VIA RES." - PROMPT 94 4 "" + PROMPT 94 3 "" FIELD 216@->INDRES[1,18] FLAGS "H" - MESSAGE COPY,12|COPY,107 + MESSAGE COPY,10|COPY,107 END -STRING 11 +STRING 109 BEGIN KEY "NUM.CIV" - PROMPT 93 4 "" + PROMPT 93 3 "" FLAGS "H" FIELD 216@->CIVRES - MESSAGE APPEND,12|APPEND,107 + MESSAGE APPEND,10|APPEND,107 END -STRING 12 +STRING 10 BEGIN KEY "VIA RES. + numcivres" - PROMPT 95 4 "" + PROMPT 95 3 "" GROUP 1 END STRING 107 BEGIN KEY "VIA RES GIURIDICHE" - PROMPT 69 4 "" + PROMPT 69 3 "" GROUP 2 END +STRING 11 +BEGIN + KEY "FLAG DI NON RESIDENTE" + PROMPT 11 5 "" + FIELD 216@->SOGGNRES +END + +STRING 12 +BEGIN + KEY "STATO ESTERO DI RES." + PROMPT 16 5 "" + FIELD 24@->S0 +END + +STRING 13 +BEGIN + KEY "CODICE STATO ESTERO DI RES." + PROMPT 75 5 "" + FIELD 216@->STATORES +END + STRING 14 BEGIN - KEY "FLAG DI NON RESIDENTE" - PROMPT 11 6 "" - FIELD 216@->SOGGNRES + KEY "CODICE FISCALE ESTERO" + PROMPT 89 5 "" + FIELD 216@->COFIEST END STRING 15 -BEGIN - KEY "STATO ESTERO DI RES." - PROMPT 16 6 "" - FIELD 24@->S0 -END - -STRING 16 -BEGIN - KEY "CODICE STATO ESTERO DI RES." - PROMPT 75 6 "" - FIELD 216@->STATORES -END - -STRING 17 -BEGIN - KEY "CODICE FISCALE ESTERO" - PROMPT 89 6 "" - FIELD 216@->COFIEST -END - -STRING 18 BEGIN KEY "DESCR. CAUSALE" - PROMPT 10 8 "" + PROMPT 10 7 "" FIELD 14@->S0[1,20] END +NUMBER 16 +BEGIN + KEY "TOTALE" + PROMPT 36 7 "" +// FIELD 62->TOTALE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->16 +END + +NUMBER 17 +BEGIN + KEY "SOMME NON SOGGETTE A RITENUTA" + PROMPT 55 7 "" +// FIELD 62->SOMME + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->17 +END + +NUMBER 18 +BEGIN + KEY "IMPONIBILE" + PROMPT 75 7 "" +// FIELD 62->IMPONIBILE + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->18 +END + STRING 19 -BEGIN - KEY "TOTALE" - PROMPT 36 8 "" - FIELD 62->TOTALE - PICTURE "#########^^^" -END - -STRING 20 -BEGIN - KEY "SOMME NON SOGGETTE A RITENUTA" - PROMPT 55 8 "" - FIELD 62->SOMME - PICTURE "#########^^^" -END - -STRING 21 -BEGIN - KEY "IMPONIBILE" - PROMPT 75 8 "" - FIELD 62->IMPONIBILE - PICTURE "#########^^^" -END - -STRING 22 BEGIN KEY "ALIQUOTA" - PROMPT 88 8 "" + PROMPT 88 7 "" FIELD 62->PERC PICTURE "###@@" END -STRING 23 +NUMBER 20 BEGIN KEY "IMPORTO" - PROMPT 100 8 "" - FIELD 62->IMPORTO - PICTURE "#########^^^" + PROMPT 100 7 "" +// FIELD 62->IMPORTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->20 END -STRING 24 +NUMBER 21 BEGIN KEY "NETTO" - PROMPT 119 8 "" - FIELD 62->NETTO - PICTURE "#########^^^" + PROMPT 119 7 "" +// FIELD 62->NETTO + PICTURE "###.###.###^^^" + MESSAGE ADD,FL->21 END END -SECTION BODY EVEN 2 +SECTION FOOTER LAST 1 -NUMBER 1 +NUMBER 16 BEGIN KEY "TOTALE TOTALE" - PROMPT 36 1 "" + PROMPT 36 1 "" + PICTURE "###.###.###^^^" END -NUMBER 2 +NUMBER 17 BEGIN KEY "TOTALE SOMME NON SOGGETTE" - PROMPT 55 1 "" + PROMPT 55 1 "" + PICTURE "###.###.###^^^" END -NUMBER 3 +NUMBER 18 BEGIN KEY "TOTALE IMPONIBILE" PROMPT 75 1 "" + PICTURE "###.###.###^^^" END -NUMBER 4 +NUMBER 20 BEGIN KEY "TOTALE IMPORTO" PROMPT 101 1 "" + PICTURE "###.###.###^^^" END -NUMBER 5 +NUMBER 21 BEGIN KEY "TOTALE NETTO" PROMPT 120 1 "" + PICTURE "###.###.###^^^" END END diff --git a/m770/77qd1.frm b/m770/77qd1.frm index e0bf57f68..6c852116b 100755 --- a/m770/77qd1.frm +++ b/m770/77qd1.frm @@ -36,7 +36,7 @@ BEGIN FI 131 END -SECTION HEADER FIRST 27 +SECTION HEADER FIRST 29 LISTA 9 BEGIN @@ -188,7 +188,7 @@ END STRING 2 BEGIN KEY "COGNOME" - PROMPT 42 2 "" + PROMPT 42 1 "" FIELD 216@->RAGSOC[1,30] GROUP 1 END @@ -196,7 +196,7 @@ END STRING 3 BEGIN KEY "NOME" - PROMPT 81 2 "" + PROMPT 80 1 "" FIELD 216@->RAGSOC[31,50] GROUP 1 END @@ -204,7 +204,7 @@ END STRING 101 BEGIN KEY "RAGSOC GIURIDICHE" - PROMPT 54 2 "" + PROMPT 54 1 "" FIELD 216@->RAGSOC GROUP 2 END @@ -212,7 +212,7 @@ END STRING 4 BEGIN KEY "DATA NASCITA" - PROMPT 114 2 "" + PROMPT 112 1 "" FIELD 218@->DATANASC GROUP 1 END @@ -220,7 +220,7 @@ END STRING 5 BEGIN KEY "SESSO" - PROMPT 129 2 "" + PROMPT 126 1 "" FIELD 218@->SESSO GROUP 1 END @@ -228,7 +228,7 @@ END STRING 6 BEGIN KEY "COMUNE DI NASCITA" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 313@->DENCOM GROUP 1 END @@ -236,7 +236,7 @@ END STRING 7 BEGIN KEY "PROV DI NASCITA" - PROMPT 47 4 "" + PROMPT 46 3 "" FIELD 313@->PROVCOM GROUP 1 END @@ -244,7 +244,7 @@ END STRING 8 BEGIN KEY "COMUNE DI RESIDENZA" - PROMPT 53 4 "" + PROMPT 53 3 "" FIELD 413@->DENCOM GROUP 1 END @@ -252,7 +252,7 @@ END STRING 102 BEGIN KEY "COMUNE DI RESIDENZA GIURIDICHE" - PROMPT 10 4 "" + PROMPT 10 3 "" FIELD 413@->DENCOM GROUP 2 END @@ -260,7 +260,7 @@ END STRING 9 BEGIN KEY "PROV. RESIDENZA" - PROMPT 88 4 "" + PROMPT 87 3 "" FIELD 413@->PROVCOM GROUP 1 END @@ -268,7 +268,7 @@ END STRING 103 BEGIN KEY "PROVINCIA DI RESIDENZA GIURIDICHE" - PROMPT 88 4 "" + PROMPT 51 3 "" FIELD 413@->PROVCOM GROUP 2 END @@ -276,7 +276,7 @@ END STRING 105 BEGIN KEY "VIA RESIDENZA" - PROMPT 94 4 "" + PROMPT 94 3 "" FIELD 216@->INDRES[1,18] FLAGS "H" MESSAGE COPY,10|COPY,104 @@ -285,7 +285,7 @@ END STRING 106 BEGIN KEY "NUMERO CIVICO" - PROMPT 93 4 "" + PROMPT 93 3 "" FLAGS "H" FIELD 216@->CIVRES MESSAGE APPEND,10|APPEND,104 @@ -294,29 +294,29 @@ END STRING 10 BEGIN KEY "VIA + NUMERO CIVICO RESIDENZA" - PROMPT 95 4 "" + PROMPT 95 3 "" GROUP 1 END STRING 104 BEGIN KEY "VIA + NUMERO CIVICO RESIDENZA GIURIDICHE" - PROMPT 69 4 "" + PROMPT 75 3 "" GROUP 2 END STRING 11 BEGIN KEY "CAUSALE DEL QUADRO D1" - PROMPT 10 8 "" + PROMPT 12 5 "" FIELD 14@->S3 END NUMBER 12 BEGIN KEY "TOTALE" - PROMPT 36 8 "" - FIELD 63->TOTALE + PROMPT 19 5 "" +// FIELD 63->TOTALE PICTURE "###.###.###^^^" MESSAGE ADD,FL->12 END @@ -324,8 +324,8 @@ END NUMBER 13 BEGIN KEY "QUOTA PROVVIGIONI" - PROMPT 55 8 "" - FIELD 63->QUOTAPRO + PROMPT 36 5 "" +// FIELD 63->QUOTAPRO PICTURE "###.###.###^^^" MESSAGE ADD,FL->13 END @@ -333,8 +333,8 @@ END NUMBER 14 BEGIN KEY "SPESE ANTICIPATE" - PROMPT 65 8 "" - FIELD 63->SPESEANT + PROMPT 53 5 "" +// FIELD 63->SPESEANT PICTURE "###.###.###^^^" MESSAGE ADD,FL->14 END @@ -342,16 +342,16 @@ END NUMBER 15 BEGIN KEY "IMPONIBILE" - PROMPT 75 8 "" - FIELD 63->IMPONIBILE + PROMPT 70 5 "" +// FIELD 63->IMPONIBILE PICTURE "###.###.###^^^" MESSAGE ADD,FL->15 END -NUMBER 16 +STRING 16 BEGIN KEY "ALIQUOTA" - PROMPT 88 8 "" + PROMPT 87 5 "" FIELD 63->PERC PICTURE "###@@" END @@ -359,8 +359,8 @@ END NUMBER 17 BEGIN KEY "IMPORTO" - PROMPT 100 8 "" - FIELD 63->IMPORTO + PROMPT 99 5 "" +// FIELD 63->IMPORTO PICTURE "###.###.###^^^" MESSAGE ADD,FL->17 END @@ -368,50 +368,56 @@ END NUMBER 18 BEGIN KEY "NETTO" - PROMPT 119 8 "" - FIELD 63->NETTO + PROMPT 115 5 "" +// FIELD 63->NETTO PICTURE "###.###.###^^^" MESSAGE ADD,FL->18 END END -SECTION BODY EVEN 2 +SECTION FOOTER LAST 2 NUMBER 12 BEGIN KEY "TOTALE TOTALE" - PROMPT 36 1 "" + PROMPT 19 1 "" + PICTURE "###.###.###^^^" END NUMBER 13 BEGIN KEY "TOTALE QUOTA PROVVIGIONI" - PROMPT 55 1 "" + PROMPT 36 1 "" + PICTURE "###.###.###^^^" END NUMBER 14 BEGIN KEY "TOTALE SPESE ANTICIPATE" - PROMPT 75 1 "" + PROMPT 53 1 "" + PICTURE "###.###.###^^^" END NUMBER 15 BEGIN KEY "TOTALE IMPONIBILE" - PROMPT 75 1 "" + PROMPT 70 1 "" + PICTURE "###.###.###^^^" END NUMBER 17 BEGIN KEY "TOTALE IMPORTO" - PROMPT 101 1 "" + PROMPT 99 1 "" + PICTURE "###.###.###^^^" END NUMBER 18 BEGIN KEY "TOTALE NETTO" - PROMPT 120 1 "" + PROMPT 115 1 "" + PICTURE "###.###.###^^^" END END diff --git a/m770/77stq.cpp b/m770/77stq.cpp index aadebf565..0208b8ff7 100755 --- a/m770/77stq.cpp +++ b/m770/77stq.cpp @@ -1,4 +1,3 @@ -// Stampa quadro #include #include @@ -12,7 +11,8 @@ #include #include -#include +#include +#include "quadroc.h" #include "quadrod.h" #include "quadrod1.h" #include "quadrogd.h" @@ -51,6 +51,27 @@ typedef enum { STARTDOC, STARTDITTA, STARTPAGE, ENDDOC } ModulaserKey; #define TOT_IMPON 3 #define TOT_IMPOR 4 #define TOT_NETTO 5 + +#define D_TOTALE 16 +#define D_SNSRIT 17 +#define D_IMPONIBILE 18 +#define D_IMPORTO 20 +#define D_NETTO 21 + +#define D1_TOTALE 12 +#define D1_QUOTAPRO 13 +#define D1_SPESEANT 14 +#define D1_IMPONIBILE 15 +#define D1_IMPORTO 17 +#define D1_NETTO 18 + +#define C_TOTALE 14 +#define C_CONTSSN 15 +#define C_SOMME 16 +#define C_IMPONIBILE 17 +#define C_RITENUTE 18 +#define C_NETTO 19 + #define H_COFI_DIC 13 #define H_NUM_FOGLIO 14 @@ -59,17 +80,28 @@ HIDDEN const int QD_FORMLEN_PRIMA = 70; // 72 - 3 (3 e' la posizione della X di HIDDEN const int QD_FORMLEN = 72; HIDDEN const int POS_DITTA = 120; // Colonna del codice ditta a pie' di modulo HIDDEN const int QD_PAGINE = 4; -HIDDEN const int QD_RIGHE_PRIMA = 5; +HIDDEN const int QD_RIGHE_PRIMA = 4; HIDDEN const int QD_RIGHE_SECONDA = 7; -HIDDEN const int QD_RIGHE_TERZA = 6; -HIDDEN const int QD_RIGHE_QUARTA = 6; -HIDDEN const int HEADER_SECONDA = 7; +HIDDEN const int QD_RIGHE_TERZA = 7; +HIDDEN const int QD_RIGHE_QUARTA = 6; +HIDDEN const int QD1_RIGHE_PRIMA = 6; +HIDDEN const int QD1_RIGHE_SECONDA = 9; +HIDDEN const int QD1_RIGHE_TERZA = 9; +HIDDEN const int QD1_RIGHE_QUARTA = 8; + +HIDDEN const int HEADER_SECONDA = 8; HIDDEN const int HEADER_TERZA = 8; // Sarebbero 9 col righello... -HIDDEN const int HEADER_QUARTA = 14; // 15 col righello... +HIDDEN const int HEADER_QUARTA = 13; // 15 col righello... + +HIDDEN const int HEADER_D1_SECONDA = 8; +HIDDEN const int HEADER_D1_TERZA = 8; +HIDDEN const int HEADER_D1_QUARTA = 14; typedef enum { PRIMA=1, SECONDA, TERZA, QUARTA } PaginaQuadro; typedef enum { fisiche, nofisiche } TipoPagina; +// Stampa quadro + /////////////////////////////////////////////////////////////////////////////////////////// // // Quadro D @@ -81,11 +113,9 @@ class TDicForm : public TForm private: real _f_tot_totale, _f_tot_snsrit, _f_tot_impon, _f_tot_impor, _f_tot_netto; real _nf_tot_totale, _nf_tot_snsrit, _nf_tot_impon, _nf_tot_impor, _nf_tot_netto; - void aggiorna_totali_C(const char tipo); - void aggiorna_totali_D(const char tipo); - void aggiorna_totali_D1(const char tipo); - void aggiorna_totali_E(const char tipo); - void aggiorna_totali_E1(const char tipo); +// void aggiorna_totali_D(const char tipo); +// void aggiorna_totali_E(const char tipo); +// void aggiorna_totali_E1(const char tipo); TCursor* _cur; @@ -115,7 +145,7 @@ class TDicForm : public TForm void stampa_testata(TPrinter& pr); virtual void stampa_totali(TPrinter& pr); - virtual void aggiorna_totali(const char tipo); +// virtual void aggiorna_totali(const char tipo); virtual void set_body(TPrinter& pr, const char tipo); void StampaPagina(PaginaQuadro PaginaCorrente, const bool StampaTotali, const long Fis, const long NoFis); void posiziona(); @@ -387,7 +417,7 @@ bool TDicForm::print(const long codditta, const long NumFis, const long NumNoFis } if (_PaginaCorrente == TERZA) - { + { for (int righe=0; righe < QD_RIGHE_TERZA; righe++) { if (!righe) @@ -424,7 +454,8 @@ bool TDicForm::print(const long codditta, const long NumFis, const long NumNoFis } if (_PaginaCorrente == QUARTA) - { + { + azzera_totali(); for (int righe=0; righe < QD_RIGHE_QUARTA; righe++) { if (!righe) @@ -635,7 +666,15 @@ void TDicForm::jump_to_line(TPrinter& pr, const int lin) } void TDicForm::stampa_totali(TPrinter& pr) -{ +{ + TPrint_section& totali = section('F', last_page); + totali.update(); + for (int i = 0; i < totali.items(); i++) + { + pr.print(totali.row(i)); + _RigaCorr++; + } +/* PaginaQuadro PagCorr = curr_page(); TPrint_section& foot = section('B', even_page); const char* pic = "############"; @@ -727,7 +766,8 @@ const int NUM_RIGHE = 8; _RigaCorr++; } foot.reset(); // non stampare piu' questi totali! - } + } +*/ } void TDicForm::stampa_testata(TPrinter& pr) @@ -790,10 +830,11 @@ void TDicForm::next_page(TPrinter& pr) void TDicForm::azzera_totali() { - _f_tot_netto = _f_tot_totale = _f_tot_impor = _f_tot_impon = _f_tot_snsrit = ZERO; - _nf_tot_netto = _nf_tot_totale = _nf_tot_impor = _nf_tot_impon = _nf_tot_snsrit = ZERO; + TPrint_section& foot = section('F', last_page); + for (int f = foot.fields()-1; f >= 0; f--) + foot.field(f).set(""); } - +/* void TDicForm::aggiorna_totali_E(const char tipo) { } @@ -832,92 +873,24 @@ void TDicForm::aggiorna_totali_D(const char tipo) } } -void TDicForm::aggiorna_totali_D1(const char tipo) -{ - real totale, netto, impon, QuotaProv, SpeseAnt, impor; - TCursor* cur = cursor(); - TRectype& crr = cur->curr(); - - totale = crr.get_real(QD1_TOTALE); - netto = crr.get_real(QD1_NETTO); - impon = crr.get_real(QD1_IMPONIBILE); - impor = crr.get_real(QD1_IMPORTO); - QuotaProv = crr.get_real(QD1_QUOTAPRO); - SpeseAnt = crr.get_real(QD1_SPESEANT); - - if (tipo == 'F') - { - _f_tot_totale += totale; - _f_tot_netto += netto; - _f_tot_impon += impon; - _f_tot_snsrit += QuotaProv; - _f_tot_impor += impor; - } - else - { - _nf_tot_totale += totale; - _nf_tot_netto += netto; - _nf_tot_impon += impon; - _nf_tot_snsrit += QuotaProv; - _nf_tot_impor += impor; - } -} - -void TDicForm::aggiorna_totali_C(const char tipo) -{ - real totale, netto, impon, nsrit, impor; - TCursor* cur = cursor(); - TRectype& crr = cur->curr(); - - totale = crr.get_real(QUD_TOTALE); - netto = crr.get_real(QUD_NETTO); - impon = crr.get_real(QUD_IMPONIBILE); - impor = crr.get_real(QUD_IMPORTO); - nsrit = crr.get_real(QUD_SOMME); - - if (tipo == 'F') - { - _f_tot_totale += totale; - _f_tot_netto += netto; - _f_tot_impon += impon; - _f_tot_snsrit += nsrit; - _f_tot_impor += impor; - } - else - { - _nf_tot_totale += totale; - _nf_tot_netto += netto; - _nf_tot_impon += impon; - _nf_tot_snsrit += nsrit; - _nf_tot_impor += impor; - } -} - - void TDicForm::aggiorna_totali(const char tipo) { - if (_quadro == "C") - aggiorna_totali_C(tipo); - if (_quadro == "D") aggiorna_totali_D(tipo); - if (_quadro == "D1") - aggiorna_totali_D1(tipo); - if (_quadro == "E") aggiorna_totali_E(tipo); if (_quadro == "E1") aggiorna_totali_E1(tipo); } - +*/ void TDicForm::set_body(TPrinter& pr, const char tipo) { TPrint_section& body = section('B', odd_page); body.reset(); body.update(); - aggiorna_totali(tipo); +// aggiorna_totali(tipo); const int body_righe = body.height(); for (int i=0; i < body_righe; i++) { @@ -2069,10 +2042,414 @@ void TStampaQuadro::print(const bool modulaser) // STAMPA QUADRO D // ///////////////////////////////////////////////////////////////////////////////////////////// + +class TQuadroD : public TDicForm +{ + enum { QD_FORMLEN = 72 }; + + real _totale, _somme, _imponibile, _importo, _netto; + bool _devo_sommare; + +protected: + virtual void next_page(TPrinter& pr); + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + +public: + bool controlla_percentuale(TCursor* cur, const real& perc_p); + void set_body(TPrinter& pr, const char tipo); + void setta_importi(TPrint_section& body); + void leggi_importi(); + + TQuadroD(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroD() {} +}; + +bool TQuadroD::controlla_percentuale(TCursor* cur, const real& perc_p) +{ + bool stampa = TRUE; + + if (perc_p == ZERO) + { + long ditta_p = cur->curr().get_long(QUD_CODDITTA); + char tipo_p = cur->curr().get_char(QUD_TIPOA); + long codana_p = cur->curr().get_long(QUD_CODANAGR); + TString codcaus_p = cur->curr().get (QUD_CODCAUS); + + ++(*cur); + long ditta = cur->curr().get_long(QUD_CODDITTA); + char tipo = cur->curr().get_char(QUD_TIPOA); + long codana = cur->curr().get_long(QUD_CODANAGR); + TString codcaus = cur->curr().get (QUD_CODCAUS); + real perc = cur->curr().get_real(QUD_PERC); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc != ZERO) + { + stampa = FALSE; + _devo_sommare = TRUE; + } + } + --(*cur); + } + return stampa; +} + +void TQuadroD::leggi_importi() +{ + TCursor* cur = cursor(); + + _totale = cur->curr().get_real(QUD_TOTALE); + _somme = cur->curr().get_real(QUD_SOMME); + _imponibile = cur->curr().get_real(QUD_IMPONIBILE); + _importo = cur->curr().get_real(QUD_IMPORTO); + _netto = cur->curr().get_real(QUD_NETTO); +} + +void TQuadroD::setta_importi(TPrint_section& body) +{ + TCursor* cur = cursor(); + + real totale = cur->curr().get_real(QUD_TOTALE); + real somme = cur->curr().get_real(QUD_SOMME); + real imponibile = cur->curr().get_real(QUD_IMPONIBILE); + real importo = cur->curr().get_real(QUD_IMPORTO); + real netto = cur->curr().get_real(QUD_NETTO); + + if (_devo_sommare) + { + totale += _totale; + somme += _somme; + imponibile += _imponibile; + importo += _importo; + netto += _netto; + _devo_sommare = FALSE; + } + + TForm_item& ftotale = body.find_field(D_TOTALE); + TForm_item& fsomme = body.find_field(D_SNSRIT); + TForm_item& fimponibile = body.find_field(D_IMPONIBILE); + TForm_item& fimporto = body.find_field(D_IMPORTO); + TForm_item& fnetto = body.find_field(D_NETTO); + + TString stotale (totale.string()); + TString ssomme (somme.string()); + TString simponibile(imponibile.string()); + TString simporto (importo.string()); + TString snetto (netto.string()); +// Setta i campi + ftotale.set(stotale); + fsomme.set(ssomme); + fimponibile.set(simponibile); + fimporto.set(simporto); + fnetto.set(snetto); +} + +void TQuadroD::set_body(TPrinter& pr, const char tipo) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); +// body.update(); + setta_importi(body); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + body.reset(); + if (usa_progind()) + progind()->addstatus(1); +} + +void TQuadroD::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr >= TERZA) + { + if (PagCorr == TERZA) + jump_to_line(pr,64); + else + if (PagCorr == QUARTA) + jump_to_line(pr,61); + stampa_totali(pr); + } + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +bool TQuadroD::print(const long codditta, const long NumFis, const long NumNoFis) +{ + bool StabilitaInesistenzaNoFis = FALSE; + bool StabilitaInesistenzaFis = FALSE; + long CtrFis = NumFis; + long CtrNoFis = NumNoFis; + long PtrFis = -1L, PtrNoFis=-1L; + TPrinter& pr = printer(); + + _CtrFisStampati = _CtrNoFisStampati = 0; + _finite_fis = _finite_nofis = FALSE; + _GiaStampatiFis = _GiaStampatiNoFis = FALSE; + _EndPrintDitta = FALSE; // Vero se stampato l'ultimo record + bool LastRecord = FALSE; // Vero se letto l'ultimo record + bool stampa = TRUE; + + _PaginaCorrente = PRIMA; + + if (!InitPrint(codditta)) + return FALSE; + + TCursor* cur = cursor(); + + while (!_EndPrintDitta) + { + for (int pagina=1; pagina <= QD_PAGINE; pagina++, next_page(pr)) + { + pr.formlen(QD_FORMLEN); + + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); + + for (int righe=0; righe < QD_RIGHE_PRIMA; righe++) + { + stampa = TRUE; +// Stampa intestazione, solo sul primo foglio. + if (!righe) + { + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_testata(pr); + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + +// La prima volta si deve posizionare sul primo record di p.f. + if (PtrFis<0L && !StabilitaInesistenzaFis) + { + bool Trovato = FALSE; + + while (!Trovato) + { + const long ditta = cur->curr().get_long(QUD_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + if (tipo != 'G') + { + PtrFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaFis = !Trovato; + } + + if (StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); +// La stampa e' finita se ho STAMPATO l'ultimo record + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } // for righe.. + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == SECONDA) + { +// Reset del flag di pagina con posiz. + if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; + for (int righe=0; righe < QD_RIGHE_SECONDA; righe++) + { + stampa = TRUE; + if (!righe) + fill_page(pr, HEADER_SECONDA); + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == TERZA) + { + for (int righe=0; righe < QD_RIGHE_TERZA; righe++) + { + stampa = TRUE; + if (!righe) + { + fill_page(pr, HEADER_TERZA); + _CtrFisStampati = 0; // conta quelli che stampo sulla terza + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + _CtrFisStampati++; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == QUARTA) + { + azzera_totali(); + for (int righe=0; righe < QD_RIGHE_QUARTA; righe++) + { + stampa = TRUE; + if (!righe) + _CtrNoFisStampati = 0; + +// All'inizio salta le righe in alto + if (!righe) + fill_page(pr, HEADER_QUARTA); + + if (_finite_nofis || StabilitaInesistenzaNoFis) + break; + +// La prima volta si deve posizionare sul primo record di p.g. + if (PtrNoFis<0L && !StabilitaInesistenzaNoFis) + { + bool Trovato = FALSE; + bool eof = FALSE; + (*cur) = PtrFis-1 > 0L ? PtrFis-1 : 0L; // parti dall'inizio + while (!Trovato && !eof) + { + eof = cur->pos() >= _Items-1; + const long ditta = cur->curr().get_long(QUD_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + if (tipo != 'F') + { + PtrNoFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaNoFis = !Trovato; + } + + if (StabilitaInesistenzaNoFis) + break; + + (*cur) = PtrNoFis; + const char tipo = cur->curr().get(QUD_TIPOA)[0]; + + if (tipo != 'G') + break; + else + { + CtrNoFis--; + if (CtrNoFis == 0L) _finite_nofis = TRUE; + + real perc_p = cur->curr().get_real(QUD_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'G'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + _CtrNoFisStampati++; + if (!LastRecord) + { + ++(*cur); + PtrNoFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrNoFis = cur->pos(); + } + } // for pagina.. + } // while !_EndPrintDitta + close_print(); + return TRUE; +} + class TStampaQuadroD : public TStampaQuadro { - TDicForm* _form; - TRelation* _rel; + TQuadroD* _form; TCursor* _cur; protected: @@ -2093,93 +2470,12 @@ TStampaQuadroD::TStampaQuadroD(const char* quadro, char liv) } bool TStampaQuadroD::user_create() -{ - if (quadro() == "C") - { - _rel = new TRelation(LF_QUAC); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAC, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAC, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "D") - { - _rel = new TRelation(LF_QUAD); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAD, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAD, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "D1") - { - _rel = new TRelation(LF_QUAD1); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAD1, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAD1, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "E") - { - _rel = new TRelation(LF_QUAE); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAE, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAE, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - if (quadro() == "E1") - { - _rel = new TRelation(LF_QUAE1); - _rel->add("%CA7", "CODTAB=CODCAUS", 1, LF_QUAE1, 14); - _rel->add(LF_NDITTE, "CODDITTA=CODDITTA"); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_NDITTE, 116); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, LF_ANAG, 118); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, LF_ANAGFIS, 113); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, LF_ANAG, 213); - _rel->add(LF_ANAG, "TIPOA=TIPOA|CODANAGR=CODANAGR", 1, LF_QUAE1, 216); - _rel->add("%STA", "CODTAB=STATORES", 1, -216, 24); - _rel->add(LF_ANAGFIS, "CODANAGR=CODANAGR", 1, -216, 218); - _rel->add(LF_COMUNI, "COM=COMNASC", 1, -218, 313); - _rel->add(LF_COMUNI, "COM=COMRF(COMRES)", 1, -216, 413); - _cur = new TSorted_cursor(_rel, "CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC"); - } - - _form = new TDicForm(form_name(), quadro()); +{ + _form = new TQuadroD("77QD", quadro()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAD, LF_QUAD); + _cur = new TSorted_cursor(_form->TForm::relation(), sortkey); return TRUE; } @@ -2188,7 +2484,462 @@ bool TStampaQuadroD::user_destroy() { delete _form; delete _cur; - delete _rel; + + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// QUADRO D1 +///////////////////////////////////////////////////////////////////////////////////////////// + +class TQuadroD1 : public TDicForm +{ + enum { QD_FORMLEN = 72 }; + + real _totale, _quotapro, _speseant, _imponibile, _importo, _netto; + bool _devo_sommare; + +protected: + virtual void next_page(TPrinter& pr); + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + +public: + bool controlla_percentuale(TCursor* cur, const real& perc_p); + void set_body(TPrinter& pr, const char tipo); + void setta_importi(TPrint_section& body); + void leggi_importi(); + + TQuadroD1(const char* form, const char* quadro) : TDicForm(form, quadro) {} + virtual ~TQuadroD1() {} +}; + +bool TQuadroD1::controlla_percentuale(TCursor* cur, const real& perc_p) +{ + bool stampa = TRUE; + + if (perc_p == ZERO) + { + long ditta_p = cur->curr().get_long(QD1_CODDITTA); + char tipo_p = cur->curr().get_char(QD1_TIPOA); + long codana_p = cur->curr().get_long(QD1_CODANAGR); + TString codcaus_p = cur->curr().get (QD1_CODCAUS); + + ++(*cur); + long ditta = cur->curr().get_long(QD1_CODDITTA); + char tipo = cur->curr().get_char(QD1_TIPOA); + long codana = cur->curr().get_long(QD1_CODANAGR); + TString codcaus = cur->curr().get (QD1_CODCAUS); + real perc = cur->curr().get_real(QD1_PERC); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc != ZERO) + { + stampa = FALSE; + _devo_sommare = TRUE; + } + } + --(*cur); + } + return stampa; +} + +void TQuadroD1::leggi_importi() +{ + TCursor* cur = cursor(); + + _totale = cur->curr().get_real(QD1_TOTALE); + _quotapro = cur->curr().get_real(QD1_QUOTAPRO); + _speseant = cur->curr().get_real(QD1_SPESEANT); + _imponibile = cur->curr().get_real(QD1_IMPONIBILE); + _importo = cur->curr().get_real(QD1_IMPORTO); + _netto = cur->curr().get_real(QD1_NETTO); +} + +void TQuadroD1::setta_importi(TPrint_section& body) +{ + TCursor* cur = cursor(); + + real totale = cur->curr().get_real(QD1_TOTALE); + real quotapro = cur->curr().get_real(QD1_QUOTAPRO); + real speseant = cur->curr().get_real(QD1_SPESEANT); + real imponibile = cur->curr().get_real(QD1_IMPONIBILE); + real importo = cur->curr().get_real(QD1_IMPORTO); + real netto = cur->curr().get_real(QD1_NETTO); + + if (_devo_sommare) + { + totale += _totale; + quotapro += _quotapro; + speseant += _speseant; + imponibile += _imponibile; + importo += _importo; + netto += _netto; + _devo_sommare = FALSE; + } + + TForm_item& ftotale = body.find_field(D1_TOTALE); + TForm_item& fquotapro = body.find_field(D1_QUOTAPRO); + TForm_item& fspeseant = body.find_field(D1_SPESEANT); + TForm_item& fimponibile = body.find_field(D1_IMPONIBILE); + TForm_item& fimporto = body.find_field(D1_IMPORTO); + TForm_item& fnetto = body.find_field(D1_NETTO); + + TString stotale (totale.string()); + TString squotapro (quotapro.string()); + TString sspeseant (speseant.string()); + TString simponibile(imponibile.string()); + TString simporto (importo.string()); + TString snetto (netto.string()); +// Setta i campi + ftotale.set(stotale); + fquotapro.set(squotapro); + fspeseant.set(sspeseant); + fimponibile.set(simponibile); + fimporto.set(simporto); + fnetto.set(snetto); +} + +void TQuadroD1::set_body(TPrinter& pr, const char tipo) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); +// body.update(); + setta_importi(body); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + body.reset(); + if (usa_progind()) + progind()->addstatus(1); +} + +void TQuadroD1::next_page(TPrinter& pr) +{ + PaginaQuadro PagCorr = curr_page(); + if (PagCorr >= TERZA) + { + if (PagCorr == TERZA) + jump_to_line(pr,62); + else + if (PagCorr == QUARTA) + jump_to_line(pr,62); + stampa_totali(pr); + } + fill_page(pr, -1); // formfeed "adattato" + inc_curr_page(); +} + +bool TQuadroD1::print(const long codditta, const long NumFis, const long NumNoFis) +{ + bool StabilitaInesistenzaNoFis = FALSE; + bool StabilitaInesistenzaFis = FALSE; + long CtrFis = NumFis; + long CtrNoFis = NumNoFis; + long PtrFis = -1L, PtrNoFis=-1L; + TPrinter& pr = printer(); + + _CtrFisStampati = _CtrNoFisStampati = 0; + _finite_fis = _finite_nofis = FALSE; + _GiaStampatiFis = _GiaStampatiNoFis = FALSE; + _EndPrintDitta = FALSE; // Vero se stampato l'ultimo record + bool LastRecord = FALSE; // Vero se letto l'ultimo record + bool stampa = TRUE; + + _PaginaCorrente = PRIMA; + + if (!InitPrint(codditta)) + return FALSE; + + TCursor* cur = cursor(); + + while (!_EndPrintDitta) + { + for (int pagina=1; pagina <= QD_PAGINE; pagina++, next_page(pr)) + { + pr.formlen(QD_FORMLEN); + + if (_PaginaCorrente == PRIMA) + { + if (_modulaser) ClearFlagModulaser(); + + for (int righe=0; righe < QD1_RIGHE_PRIMA; righe++) + { + stampa = TRUE; +// Stampa intestazione, solo sul primo foglio. + if (!righe) + { + (*cur) = PtrFis >= 0L ? PtrFis : 0L; + stampa_testata(pr); + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + +// La prima volta si deve posizionare sul primo record di p.f. + if (PtrFis<0L && !StabilitaInesistenzaFis) + { + bool Trovato = FALSE; + + while (!Trovato) + { + const long ditta = cur->curr().get_long(QD1_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + if (tipo != 'G') + { + PtrFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaFis = !Trovato; + } + + if (StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); +// La stampa e' finita se ho STAMPATO l'ultimo record + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } // for righe.. + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == SECONDA) + { +// Reset del flag di pagina con posiz. + if (_posiziona && _PaginaPosizionamento) _PaginaPosizionamento = FALSE; + for (int righe=0; righe < QD1_RIGHE_SECONDA; righe++) + { + stampa = TRUE; + if (!righe) + fill_page(pr, HEADER_D1_SECONDA); + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == TERZA) + { + for (int righe=0; righe < QD1_RIGHE_TERZA; righe++) + { + stampa = TRUE; + if (!righe) + { + fill_page(pr, HEADER_D1_TERZA); + _CtrFisStampati = 0; // conta quelli che stampo sulla terza + } + + if (_finite_fis || StabilitaInesistenzaFis) + break; + + (*cur) = PtrFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'F') + break; + else + { + CtrFis--; + if (CtrFis == 0L) _finite_fis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'F'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + _CtrFisStampati++; + if (!LastRecord) + { + ++(*cur); + PtrFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrFis = cur->pos(); + } + + if (_PaginaCorrente == QUARTA) + { + azzera_totali(); + for (int righe=0; righe < QD1_RIGHE_QUARTA; righe++) + { + stampa = TRUE; + if (!righe) + _CtrNoFisStampati = 0; + +// All'inizio salta le righe in alto + if (!righe) + fill_page(pr, HEADER_D1_QUARTA); + + if (_finite_nofis || StabilitaInesistenzaNoFis) + break; + +// La prima volta si deve posizionare sul primo record di p.g. + if (PtrNoFis<0L && !StabilitaInesistenzaNoFis) + { + bool Trovato = FALSE; + bool eof = FALSE; + (*cur) = PtrFis-1 > 0L ? PtrFis-1 : 0L; // parti dall'inizio + while (!Trovato && !eof) + { + eof = cur->pos() >= _Items-1; + const long ditta = cur->curr().get_long(QD1_CODDITTA); + if (ditta != codditta) + break; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + if (tipo != 'F') + { + PtrNoFis = cur->pos(); + Trovato = TRUE; + break; + } + else + ++(*cur); + } + StabilitaInesistenzaNoFis = !Trovato; + } + + if (StabilitaInesistenzaNoFis) + break; + + (*cur) = PtrNoFis; + const char tipo = cur->curr().get(QD1_TIPOA)[0]; + + if (tipo != 'G') + break; + else + { + CtrNoFis--; + if (CtrNoFis == 0L) _finite_nofis = TRUE; + + real perc_p = cur->curr().get_real(QD1_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + set_body(pr, 'G'); + else + leggi_importi(); + LastRecord = cur->pos() >= _Items-1; + _EndPrintDitta = LastRecord; + _CtrNoFisStampati++; + if (!LastRecord) + { + ++(*cur); + PtrNoFis = cur->pos(); + LastRecord = cur->pos() >= _Items-1; + } + } + } + PtrNoFis = cur->pos(); + } + } // for pagina.. + } // while !_EndPrintDitta + close_print(); + return TRUE; +} + +class TStampaQuadroD1 : public TStampaQuadro +{ + TQuadroD1* _form; + TCursor* _cur; + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + + virtual TDicForm* get_form() const { return _form; } + virtual TCursor* get_cursor() const { return _cur; } + + public: + TStampaQuadroD1(const char* quadro, char livel); + virtual ~TStampaQuadroD1() { } +}; + +TStampaQuadroD1::TStampaQuadroD1(const char* quadro, char liv) + : TStampaQuadro(quadro, liv) +{ +} + +bool TStampaQuadroD1::user_create() +{ + _form = new TQuadroD1("77QD1", quadro()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAD1, LF_QUAD1); + _cur = new TSorted_cursor(_form->TForm::relation(), sortkey); + + return TRUE; +} + +bool TStampaQuadroD1::user_destroy() +{ + delete _form; + delete _cur; + return TRUE; } @@ -3457,8 +4208,7 @@ public: void TQuadroA::azzera_totali() { TPrint_section& totali = section('F', last_page); - for (int f = totali.fields()-1; f >= 0; f--) - totali.field(f).set(""); + totali.reset(); } void TQuadroA::stampa_corpo(TPrinter& pr) @@ -3541,7 +4291,7 @@ bool TQuadroA::print(const long codditta, const long NumFis, const long NumNoFis } else return FALSE; - } + } else cur = 0; @@ -3790,56 +4540,15 @@ bool TStampaQuadroA2::user_create() class TQuadroA3 : public TQuadroA { - int _nprog; - protected: - virtual bool print(const long codditta, const long NumFis, const long NumNoFis); - virtual int elementi_pagina(PaginaQuadro p) const; virtual int prima_riga(PaginaQuadro p) const; - virtual long filtra(const long codditta); -public: - void set_nprog(int np) { _nprog = np; } - - TQuadroA3(const char* form, const char* quadro); +public: + TQuadroA3(const char* form, const char* quadro) : TQuadroA(form, quadro) { } virtual ~TQuadroA3() { } }; -TQuadroA3::TQuadroA3(const char* form, const char* quadro) - : TQuadroA(form, quadro), _nprog(1) -{ } - - -long TQuadroA3::filtra(const long codditta) -{ - TString filtr(32); - filtr.format("CODDITTA=%ld|NPROG=%d", codditta, _nprog); - - cursor()->setfilter(filtr, TRUE); - const long items = cursor()->items(); - - return items; -} - -bool TQuadroA3::print(const long codditta, const long NumFis, const long NumNoFis) -{ - TPrint_section& head = section('H', first_page); - TForm_item& tipo_ditta = head.field(0); - - _nprog = 1; - tipo_ditta.set("1"); - TQuadroA::print(codditta, NumFis, NumNoFis); - - azzera_totali(); - - _nprog = 2; - tipo_ditta.set("2"); - TQuadroA::print(codditta, NumFis, NumNoFis); - - return TRUE; -} - int TQuadroA3::elementi_pagina(PaginaQuadro p) const { const int n[4] = { 6, 10, 10, 9 }; @@ -3919,7 +4628,318 @@ bool TStampaQuadroB::user_create() return TRUE; } +///////////////////////////////////////////////////////////////////////////////// +// Quadro C +///////////////////////////////////////////////////////////////////////////////// +class TQuadroC : public TQuadroA +{ + enum { QA_FORMLEN = 72 }; + + real _totale, _contssn, _somme, _imponibile, _ritenute, _netto; + bool _devo_sommare; + +protected: + virtual int elementi_pagina(PaginaQuadro p) const; + virtual int prima_riga(PaginaQuadro p) const; + virtual bool print(const long codditta, const long NumFis, const long NumNoFis); + +public: + bool controlla_percentuale(TCursor& cur, const real& perc_p); + void stampa_corpo(TPrinter& pr); + void setta_importi(TPrint_section& body); + void leggi_importi(); + + TQuadroC(const char* form, const char* quadro) : TQuadroA(form, quadro) { } + virtual ~TQuadroC() { } +}; + +bool TQuadroC::controlla_percentuale(TCursor& cur, const real& perc_p) +{ + bool stampa = TRUE; + + if (perc_p == ZERO) + { + long ditta_p = cur.curr().get_long(QUC_CODDITTA); + char tipo_p = cur.curr().get_char(QUC_TIPOA); + long codana_p = cur.curr().get_long(QUC_CODANAGR); + TString codcaus_p = cur.curr().get (QUC_CODCAUS); + + ++(cur); + long ditta = cur.curr().get_long(QUC_CODDITTA); + char tipo = cur.curr().get_char(QUC_TIPOA); + long codana = cur.curr().get_long(QUC_CODANAGR); + TString codcaus = cur.curr().get (QUC_CODCAUS); + real perc = cur.curr().get_real(QUC_PERC); + + if (ditta == ditta_p && tipo == tipo_p && + codana == codana_p && codcaus == codcaus_p) + { + if (perc != ZERO) + { + stampa = FALSE; + _devo_sommare = TRUE; + } + } + --(cur); + } + return stampa; +} + +void TQuadroC::leggi_importi() +{ + TCursor* cur = cursor(); + + _totale = cur->curr().get_real(QUC_TOTALE); + _contssn = cur->curr().get_real(QUC_CONTSSN); + _somme = cur->curr().get_real(QUC_SOMME); + _imponibile = cur->curr().get_real(QUC_IMPONIBILE); + _ritenute = cur->curr().get_real(QUC_RITENUTE); + _netto = cur->curr().get_real(QUC_NETTO); +} + +void TQuadroC::setta_importi(TPrint_section& body) +{ + TCursor* cur = cursor(); + + real totale = cur->curr().get_real(QUC_TOTALE); + real contssn = cur->curr().get_real(QUC_CONTSSN); + real somme = cur->curr().get_real(QUC_SOMME); + real imponibile = cur->curr().get_real(QUC_IMPONIBILE); + real ritenute = cur->curr().get_real(QUC_RITENUTE); + real netto = cur->curr().get_real(QUC_NETTO); + + if (_devo_sommare) + { + totale += _totale; + contssn += _contssn; + somme += _somme; + imponibile += _imponibile; + ritenute += _ritenute; + netto += _netto; + _devo_sommare = FALSE; + } + + TForm_item& ftotale = body.find_field(C_TOTALE); + TForm_item& fcontssn = body.find_field(C_CONTSSN); + TForm_item& fsomme = body.find_field(C_SOMME); + TForm_item& fimponibile = body.find_field(C_IMPONIBILE); + TForm_item& fritenute = body.find_field(C_RITENUTE); + TForm_item& fnetto = body.find_field(C_NETTO); + + TString stotale (totale.string()); + TString scontssn (contssn.string()); + TString ssomme (somme.string()); + TString simponibile(imponibile.string()); + TString sritenute (ritenute.string()); + TString snetto (netto.string()); +// Setta i campi + ftotale.set(stotale); + fcontssn.set(scontssn); + fsomme.set(ssomme); + fimponibile.set(simponibile); + fritenute.set(sritenute); + fnetto.set(snetto); +} + +void TQuadroC::stampa_corpo(TPrinter& pr) +{ + TPrint_section& body = section('B', odd_page); + body.reset(); +// body.update(); + setta_importi(body); + body.update(); + const int body_righe = body.height(); + for (int i=0; i < body_righe; i++) + { + pr.print(body.row(i)); + _RigaCorr++; + } + body.reset(); + if (usa_progind()) + progind()->addstatus(1); +} + +int TQuadroC::elementi_pagina(PaginaQuadro p) const +{ + const int n[4] = { 6, 10, 10, 9 }; + return n[p-PRIMA]; +} + +int TQuadroC::prima_riga(PaginaQuadro p) const +{ + return p == PRIMA ? 27 : 8; +} + +bool TQuadroC::print(const long codditta, const long NumFis, const long NumNoFis) +{ + TCursor& cur = *cursor(); + TPrinter& pr = printer(); + bool stampa = TRUE; + + if (!InitPrint(codditta)) + return FALSE; + + pr.formlen(QA_FORMLEN); + + int elementi = 0; // Numero di elementi stampati in questa pagina + bool stampato_ultimo = FALSE; + bool stampati_totali = FALSE; + + int pos = 0; + TDipendenti indice; + if (quadro() == "A" || quadro() == "B") + { + const int i = indice.fill(cur); + if (i > 0) + { + if (usa_progind()) + progind()->addstatus(cur.items()-i); // Segna come elaborati tutti gli ignorati + + cur = indice[0].pos(); + } + else + return FALSE; + } + else + cur = 0; + + while (!stampati_totali) + { + bool stampa = TRUE; + bool stampero_ultimo = stampato_ultimo == FALSE; + if (stampero_ultimo) + { + if (indice.items() > 0) // Usa indice alternativo + stampero_ultimo &= pos == indice.items()-1; + else // Usa indice del cursore + stampero_ultimo &= cur.pos() == cur.items()-1; + } + + switch(_PaginaCorrente) + { + case PRIMA: + if (_modulaser) + ClearFlagModulaser(); + + if (elementi == 0) + { + stampa_testata(pr); + jump_to_line(pr, prima_riga(PRIMA)); + } + + if (!stampato_ultimo) + { + real perc_p = cur.curr().get_real(QUC_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + stampa_corpo(pr); + else + leggi_importi(); + + stampato_ultimo = stampero_ultimo; + } + + elementi++; + if (elementi >= elementi_pagina(PRIMA)) + { + next_page(pr); + elementi = 0; + } + break; + case SECONDA: + case TERZA: + if (!stampato_ultimo) + { + if (elementi == 0) + jump_to_line(pr, prima_riga(_PaginaCorrente)); + + real perc_p = cur.curr().get_real(QUC_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + stampa_corpo(pr); + else + leggi_importi(); + + stampato_ultimo = stampero_ultimo; + } + elementi++; + if (elementi >= elementi_pagina(_PaginaCorrente)) + { + next_page(pr); + elementi = 0; + } + break; + case QUARTA: + if (!stampato_ultimo) + { + if (elementi == 0) + jump_to_line(pr, prima_riga(QUARTA)); + + real perc_p = cur.curr().get_real(QUC_PERC); + stampa = controlla_percentuale(cur,perc_p); + if (stampa) + stampa_corpo(pr); + else + leggi_importi(); + + stampato_ultimo = stampero_ultimo; + } + + elementi++; + + if (elementi >= elementi_pagina(QUARTA)) + { + if (stampato_ultimo) + { + jump_to_line(pr, riga_totali(QUARTA)); + stampa_totali(pr); + stampati_totali = TRUE; + } + next_page(pr); + elementi = 0; + } + break; + default: + CHECK(0, "Invalid Quadro A page"); + break; + } + + if (!stampato_ultimo) + { + if (indice.items() > 0) + cur = indice[++pos].pos(); + else + ++cur; + } + } + + close_print(); + + return TRUE; +} + +class TStampaQuadroC : public TStampaQuadroA +{ +protected: + virtual bool user_create(); + +public: + TStampaQuadroC(const char* quadro, char livel) : TStampaQuadroA(quadro, livel) { } + virtual ~TStampaQuadroC() { } +}; + +bool TStampaQuadroC::user_create() +{ + _form = new TQuadroC("77QC", quadro()); + + TString sortkey(80); + sortkey.format("CODDITTA|TIPOA|216@->RAGSOC|CODANAGR|CODCAUS|PERC", LF_QUAC, LF_QUAC); + _cur = new TSorted_cursor(_form->TForm::relation(), sortkey); + + return TRUE; +} + ///////////////////////////////////////////////////////////////////////////////// // // MAIN @@ -3938,9 +4958,17 @@ int stampa_quadro(int argc, char* argv[]) TStampaQuadro* app = NULL; - if ( quadro == "C" || quadro == "D" || quadro == "D1" || quadro == "E" || quadro == "E1" ) + if ( quadro == "C" ) + { + app = new TStampaQuadroC(quadro, livello); + } + else if ( quadro == "D" ) { app = new TStampaQuadroD(quadro, livello); + } + else if (quadro == "D1") + { + app = new TStampaQuadroD1(quadro, livello); } else if (quadro[0] == 'A') { @@ -3982,6 +5010,3 @@ int stampa_quadro(int argc, char* argv[]) } return 0; -} - - diff --git a/m770/77stq.sbr b/m770/77stq.sbr index 65e139936deca47202a04cff2445c17c54dbb82a..090734db9f928faeba752251d9e972a61e581542 100755 GIT binary patch delta 43863 zcmafc2Ygh;_Wx$?Npg2Lo6vg+hTcPm?G3?47c8iR5CVjf#3Z1Ax`K!Z*vnPH-bL&p zHf)HEr(zc?`t0plf}$e-?>YBQb{GA)bK*q_ zmyzpobv-a)Y}wQq(Zo5c<2etlj;qaYs%9>0>HwpabwzulpkJPl#r984l$OOOClceQ zPmj7(zCfb_oj!ibWPqC6Tn~-xU{v}ax_gE}IVonEHvY(Q$+9Wa#!m!M%thZEFi5#N z`_s6ilkv%u62Qhawo3+fdUD!K;1U|wH3J95r?EO?HL}=0E*VWEr%q7bYXVj+caqESxLm#bc42V1w_l6p zSRcPFhQodR4wsSda`p31DW6|eT|RYb`P{l1mpa~M6uDf3{nHaw6=Q4ambgssV85E_ zDp)s&)QK*d-_B_6qL;0C#~LT)oMi1h)>zbIj*Du#F?eTVS;f*im#TCjW9 zNxe(Wb5TF5@OY!0X8}Tfqgk;z#2S3OF~nEpLc}x7AFisdD6=9}MynQ+lJVn?o9R*u zU9@r#V@Ftzo@Mk^YLWHS@kX0=i(NFc1uwcLMMwI><Ka;Txk;pO0_)$kiP$7(i@mAga(=2};kLAgtH ze4cgPJfp;`F4KSo)*od?*Fl%-_(Fd;Sv~itnmHK?Pa7LgvKp2qT5OG+NWeoJH8*S5@?OJ2)TWB2NRX0mrK&!RZb#sgXo?CQ$ zo%Lds(W_A1%1KlGU#$6htDwRt_T26WQ5&r;i;TXexT?@4H1|%O4I8PFu&cWIQruY+^7Q$UP$ON-KY^G2AQNf@w5!+5JN4 z5#Aww!*IE7_18-8e+mh-$bv&;1vRv#?`mY7y;9a61SVp zJ;T;x1#E|rOgn7DcIZ73EO&_{w#bM}EV5fS?<`Sdo8NB!Ohem5kBfv%tn`TP-q}L- zuwQy4sQY9iJ?y9ZMc~CkDfZi|c#aT0=C3HPuB`*%V~zBf$h${1~UTkqa=o=`pQUtC__09o4`>1iRlOo+t(yTrWjq7AML=qP-y8P zA-__{GY!63^I8x*E?Bnwh)XQLq`$XLRC(FY{VP;?ypdk^Q@d8E0BIDc+{oWrMaxzV zkoE+m*{wr}qe0u0Dd2YsJvW|+x)QCcG~K$;_eR)~ue4S#H2&4xU-fG=)I!^!7F8dr; ztH6@_`MTf_x~NrvC8FT}60ZD_oCbhU4~i-D*CXBPkPD@)TsZ)7_f9!%@iP1r_d6d3 zoSP%b=kq^h@;4`sA}Gj_>hTGK3{Ra$Uo5rLC0#pgu3ZC@mM$4vRWG(%%#leo95q!T zi(n%tvHs%Wu1Lqb2drw#=#*-f!`L2yctag?P}hKJE})(avc*twK(!EHufPDfw zR@BtZ<+@QFb9l7uIr6VGhx!Mo7k|_c5f}j1aLH=-fEt~{xbC3$>%2t+)9Y%Ml{dhHhyKAFiUJ#! zWX1+$NQRpXnf?-*w4b6~R3wMS29RqN6Qc0}89p46iTf$oMa6SyJftKgHSm^}sIe@V zEzML%v5qjK2|3UNP`8@QAvMj>T^%igCuzYcN!*q^BZnqI^6@#;BcNvTx5>2#x#|ST zZq%<%%Avji)~B=tX0K*(@dKjD7;dU^PDahi(5)hifh~M~8tYd13#Br8+m*2-hx>{L zP#@BLx>dDkJ408=i~zOw(+nh3n5|tooV?DnGn>+xJu^#pwMu7pwVl~DlG(G<*->k=7&x=*(^$7UPx9Kw&g%uDTZPVA zMSwc^sRBA(lq3Hx5iPoL*3_lkuH4Gf8N5noaFYmG^bZ-lI)@fP*!7aZ8?q|%MwVPo zsLh+Q^i?P(*L%KzAtMR(m<5J`l}%2h@im`J8`{{BaJQ1Iho%p`HQt z8GoBx7Th2|*Eae^R$ZtsbrpWaC91wg>*sd)t<>Rn87h9C#m9B{QyRKPYZv0r0M@)fQ{>GQ;!^1F28RpdmKb zqEI5e{pb&y*+CoLTq1oK-qH@*@KzG(%kVaKP~gRFCDIEH9RH~f%3gUeRY%suv{xTe z-f1#C-xR2;IYkEJn*;GBb0u^O4@i|5k~=A0!okROJ2!!H?M-x1bTdk=SW%H*byILD zF_bB~9V1UG)k6ZgJPlDj87CFrM^Q86x1SbxUkYvk<}8k5*k5rf_Xir5)QVepYzfWW zPgPyj07wYX{o=R`)Xdugb>;KxYbrGNAVu2(>@v_oP)JOr4qOggP(>BMF1nn zHW>9V1&4=yo)L#OF<8wwX_nEm$a@S5WxV2XW3``pas9Pyjyjv9;G>vo zvQW#CQooeu|XQ~P&riFgam(!=t74jB-(5iU~t9RlQy{`MO6|L#@06Xs}!TCap zXd6EYQ7wS50H^isFjXa}7l*>?7pK8UyIQfsU!!OTR2vn2B5^=nrCfsN>D>HaC;MN?M!+Ag zZzx|siGYRPIP z)+YI1AuZ!hhEYGT5^BGqb0s%F2C6aQ0scxOnWgGi-NJtg%&TvxbM>^l2l^?%YXq>1 z-xU2A;HWV~9Y9?)sy`JqST%1M?FRm(h5iz#mn2LtF5 zxh<$di8K>qFOo3Y2@JoPLEi+J4i(Y-1cOZ$Wrz5SLsd(I8qp`UHqa)~rwe7Hm<$ZM zgG8aNq{-|ZnVYS$iy>W1u_2vCH-oK6*6;iE8zJ?V6BHvl!f-kT3Qj4XFU#m?o~pzk z3X<*Lm2^k(1Sy0Z^pFtTxSj?LlhuH}kQ}jBK)X%%p2_{W;h3d6IIpIrK^tX%DP&I& zb?XjN$5QeH@iEl^gX4(gm2zc3^*OfA6{54Ox%W#&Mdu=0=eatCmccnSbFsjGhS*%C zK`n#Szf{eW0BUf7q}fWS%AC0nNMMUqf@vK@%V-^>RzZB5YLP)jL6!lK-7FSMajNQ0 zND*19F=(Bid?TTysTx?ntR?^aly@AcmKwZ9fPrC|!JRk)ryBI;AmnT_>Pxo9x&)^l zSvGd^w22dvlU(X*4erX|DbXXxPfEJfH5ytR%-rxwM9YqJsp|~h9qJaGZf_SIiQS=Y zL1kWV6b$y0y3rc9-stAJi3<|@5>#TPDlxSKXsxXN@B&fGm}!v!vJl0ztYG z4dy|Ex`F3mQB?~12yZU{9x*bUyhkM>PTu2oP@J}oJ8U8zMcwLYE^kvkBa)O z*C6$8-5D+kVyBH3ODlR=_kGnuX!qzqE#dZ~_83l&UK8XV9dNrxf6Z__$l9Rv=;*{t zxKpnUIz9U92Gs;PiXQz9gM0M14W~y>y{m=R1*J!aRJ%vtYfxQK_vjx$LO1Tz>w|iE zauGpKJHY6xO6f-y^jwL^xuXh<9NNjBmXAchJe^=UR{IWWTn z^Pgd?k=o!T96}LXrAf z0IP!)HH+(A>Kloj#ogFhK{_*tZ>$>%a9wa-1u~Ng((0i4UYFXrK?b7G)&+TR{Q>YG zEoDBM+J?*fM`2zMW@LC>Q2nGiHv}1y0_%EV{n?-mK{_RawNY3%f)ypQKB)F<*7Jf4 z0p~{H{MDfIg0wt?^MG)k4^9->#-RFLb6yZ+2sqCd&OeM3>4G4w%wRnztQUe6g?fHa z{iRti3Ni$&7YgekgDwiv=^30kgp#3EK}_0+YyaY)J^tqtb7Ax_$r=AI31a-eM9lgU zl&^;nF;xM{_+LoQ_~y z@%Z0b&=~*Q5M2xv+mVd_?S=AUZqD3ub(W}3li9m4H+L7^NXGvXl3t@baa)&ee|V~g zwDoK3w%&uB(fayeeI>TW(bRkDeBTh{rhdIN^|D<_Km`Hs%gshTA-YvoUuv z#^x!_#@q!=YJ|-+BpY=PP$O)n;bIT>ajUv7h>xj8lGBwvB<%;;1p@77l!k8)R*aOQ zvf-me!o$J(Ivj5p15<#EAko7?6`>UWi%Vpze2?dEx0*=wP>^m3BI2~gNkrR&bWa-M zR#QdrGrETu>Qd7MvQzgWLvey<0>Co_{46(Gbqp)OpJ(_xWvb(do(xw%Apf^=tQatlQ0Ygx&mP45n>D#5(YOMe3;9awIJriC`=H(k`5sjeBz%8^i3tk-GU8Ad3}wTVWlIsasrQxAG0Q&4CZhiY z=_~%I%|c&-mUgXBI}7zU&|wSpHwj&_xJ)-oxCeVpw-YZ~xz+sui4XrPob^Q7iGM)D ze-pU&;vdxD1Ap`46E3xl#yHY`7p|;>blZu2{6B)&SgvoVs%|J}FaM9AdYB5j1xY<> zrLHul=R9V;aiwvb`8ay`;=F@F%X_uaqd@JD+5+TI&{}YfG03Z)a3GXpU3--=#Pg)4 zFs%2k!daB3bUe?x{3fHnSM8KKYc^YXtnr(SuKBx=!fcn%+Ox^%*hW3aF;x_@H@+SH ztWqqzVq9X}v6^i*I+w7>$l)U8B$Mo>7lkNb zP1$S=ZS_16is408*iP_N9cW43qLQ5O!Yb!Cey;b7<5r>uP=zvfiwtIDK zpu{w}dP_IqK_Ts#zO4ty!J!Hsa0i8WgnSnRMZXXY4$+YPG`MxK|4SA1f zfItRo$ooVC1u{rOJ|yZLGS$aKw>3hd+DCM2BLt~Wh;C^FzxtHu=0>og=Dr}hNvOUg z8hxXXeMNMGkbRB*QOMltTQvQ4O&_=V!LEz{O7YnyH#l`jiqCJ?#gDo!LRoe3lXgGC zun%4=NXb|c*tI*l6{h2b(fz?gc@XB3{?T{ zH)Y-DH;qk(8tSX->#C3>kZ%a`fJTl*l`pBS!Hzv}uM6&XjXToDp`L(yO>lo|MaDUb zlp)=+5%YLMda+*})adb<=xQu=17Gb|hls|Zf?T;23fb$uty3zO;vrr-Fmf?j;+l(w z=xnjJ388rq@4{L-FQ=2>QK3!viJ^HqXEsT$kf5rYNG65mIr+0G@`M65pea(W$uc;Da0Q;T98YVL;SI$KH(kF%4B|=L{f#q%>YPX zK#}k>05Skbsb(UAArQkPEpsU$3Sg4bDwmRyI>N1UX{;oTaGP8@Qqo1ZT`mtqD8cr* z+-7HlCe4^Q1!r}gQ@kAndJIGDy+cpdf>612l6 zl9LXr!(Kvx2C6Aiu33lGVc%RjA;cfMTKeVEi6Q>j(f+w~QiwlxbU-f63h~E|4ia9j z5Abt+3>Iz%Kmr3wg`WYCA$2%JL@)$mm}I!rAq1d)Mo1lk7vYgohhRf^l++;@5FV4u zr;|{JeyN%YU5EOxbwI##Gb=GDph{F?3i}upA#5Ge+>i?AQYGpqB9&O_RATh7N{n%Z znJSUXO&fk-5_uNiYC#ASzy%?Sgz#;uBSi{m0J7b_ak)J0Qb!4A|5BcSO@h_SehvIR zmp$l~ro1^|pOWiLxoSgA%PUiLQYVMd<(>{70@OL;z$hI73jH|<<6&K2i+iTKvyuXLH{ z^@!@LLRrrB>QIJreHKTwb6uV5OkLMDjm)(ymdo-SYv0W{i+r+nW_`* z&kbq+dUZ(E3urxq9RK>PkZKU%hERroy^$l1f4!6opVK;z%bNY`Q*s^u`qbRCf4y9~ zHM9zN)hlxK5u}w`vGYTR`PZlAI{x(;xxA0IDx^|eifWZ;b3w>CTem922g}Z4fjEOM zxJyIY^S(4hzXb{3=fP-DHRt4V=vVQ)&&AmBG|o7Q>z&$=%WERydY>mkHtF$uQ;2>K z(k5_Um@EG-&ZV^>+Q1)mi3rRIxz**8)pa3tRW9S!fqt{j+fAX&BS_ce(oMi#C&}C% z(npXW(_ca(6ga0KaA7RK zwB@ZZwGg0gbq|Ns{f_SH0TFz+7M#kEybZMn$&a9!hSa0{-E;)$G0ARTNbSg_^Fyo; zjv!qSQcrO41EQW}xT&7zWYjYmy6wzj;BMymG!{pYUXsdi#-EpS51ZM%BHC`#RkAI_ zN07E5p*=7v{Ch1|j;_3E$KDbx56D`RdMB3;FPsxn@8{CS5CW$9P}j?oS@rUf2B)41 z>9Z>zXVmpRXceNTAmCFNOGfVhBiikx9%H{%$(D z;>zQOfQrn?%c@AMDDv4r)TEKeXIF^Prpn9X`pnPc60~j2%;MwvEJ$NH+B{GCx|Vr- zxUv<0%h}Ghd2FC=H6V|th;M|ZAKid!LeaXq^5vK#z7bLb^9qhw*@D#IJi5J&fg3^B zHI`v(zpm1yhUQ`Eji+*Ng{;%>GWy`aLmo%p30Ws?HHu9&JP&s#)Cg)kCzKksM__$p)--DwOc9K!&I=(~`0)SX5z z(=TcL7_zq9WArdpK++1@X&nezkKJhuGDAZ1N67NsWps3_utX1rtk7LXXKUD2qnpVZ zM;wj2b$ACga$O@;w?v7IV1d+6G<9?@Qo#(Moyb6ssW_R4%TA_K>pyHEb07o<8wF)2 z*`?b-8?}<7-ToyRjAslvz z^as0n#Yf@t3`J;(`8wiBEp3EDN%Kjr;O5*(b7V5v^fo{*SoYDSWSCCTCGB&X%k z@GzB1l1EFDhz@p=JjSVSoF?qixFjohUIPLy3`E z3C=b98KX2nYjs?PRwG2KKw7Kg^C%Fek)qX136GNS38LYMFtA*!Wuld`jjw0wM^Ph~ zp++cN&6m|29l{dR3e3(>ASepN(+ZU5Q9Mi`Npy~c!xF9#1%hEn@xF+ue$Mc-bH_K#pD@Xik za+r>i59X`2!U0IEjXGIMClN-PZdI2jK4^oK(b6VMS|&y0G}?&wfRxcxPQbng#QB?+ zE~cZiifQ^`#Wce%reprOn2rrs%;WorraC3h$;r&{qDq`Eux~0Xhf-mh8m4JsIyy|# z!!#pI$Asxv`QQ}&3ds*>wzqMsm3DsCNDqBt7(Fx}q~Wda6s~ug-V?*>?7V{S+mKqD zM|HiqkG{6CY>7*)%cFjsIC>3kJHoYB=jPeB8tH2E;guB)xMt~6>+_gobLNG}4FcNK zSXN$LU1Q&@JWnzL!mH93BF{fc=&o!mTU@oQa`9qZ%e+97UD1e!+OQa-#6{fCaS~P| zL^U)3bg5LzN$|0YJ+s2$C6(1nt(d8~*7?_qn$^~!2aO*2H%O$`>bK44 zQFxQ2^a-v!7JKT#*7XN5*sR=Uc=B&%Dzm}bxXtM0xkbta@nzQI+l+y}+l0%`>~ia) zCyZV=NWm}`v(oDO5U%iTapLCb)^pqW=H#7H-VluLe?eo@!(YxKk2wSZIExgOZCaR8my)6Qlq}8;!#E!;2}&Nj9<@5m4fmEXuLMi~c54{c=%QP~bSr4L=h3lk38(*L z@rhcsQV-{`L`3mzYr2Ewd88)0`@Gd$1kVUa>a+V`Z!HAv%%dE?El52p;j0?eE)JkS zeu3-7R4)pbSZddlcMiB-$|Gv4{+-9U8QhjmYpq_EFc!XE$wRwD1Eu-{jKv+9`c7(3 z9@;J%F;#~da^V1c)N2A<6Q<1r)f;()l2>o#p~X^Sw0c``&G&QkUdeZ%=t-{z6GEgQ>!g-=>>pJTkULHr|kN6?;@9YCJh z19=X;FE2UNqYyf&pYmu^BRv^|XLMNj*T|~SNx7!lFH#ThGjdbjSxDg5 zJennw?A_r-F7=z_v1mUF)g_}2ENRM``jdxhoom6$RE@7qs- zf$GmZ+7qUg7*zhsljGZ_!l6Ahj)pK_lwMqh!;IKZsj{xxX0%Ir8^ji03&(5b!ih%r zZ{UPqj_b{^y;4wBfh#l&c#8otTNjX`d}ow+n_0(JF|#vNwOs@5+Hp@81n-1Y zi+t{Dpxt}8dj7c4G1XE7-Ve{O!of|swNqZ^c$KzOz>5d1MC1pKw?TWus%<{K(3!?a z9e)^}gF6Y8JCdnKf9Q!t3YF2XTJn^XZE)HI7of zgyidRg75z)?JXyvoBb=z?5g@mA*WQoeEK@Ol>19*0@zm<^1eeT0up#**UfvV!4X3FK^U_y`aGmY<^#$zF*PQiYxMmvZb<|(Xub-mU_QY1Y%P*cAHXQ% zw$!oAjK#zZ^3PG#3YcS$eN&Y}uaW;c#soY`V<) z;t8WTwOma4=kVlt^WcF?fk`j>OGbM!)zSGFJ-MQO4bMY+UKm!>rHFsyQ@?c$V)O^X za-~@vn~xrLjm9I*2(H6COl`@wcg#=(eXKaoiQm zXnNK8)Hl_JmN6aY&4}3ZrIBq^jR>Pilk-SMgpXR38LBp)XSX2FjoA0pFo^_m2Aou3 z%8!UY3(&D`RGom#h|`#CV7)FBcVxmSTmu}-yE~{OTS|k*dLz6*=d21gp-;`H+z4i^ z)>F%I7ctj*^(muW;c}-C;Y$K--TSoBW~!-9%O@NnfmA5YYwBm%*0f3|&^%%f&(q~d zxM(4wxsBQ#D%z`j)M`g;Tc10k)@T7OtW{4NtvdZ*OlNDR!QO~kCn`3N&>X)ySHdkK zG#BR{&yxsbEc2_2{wZ@83&Ck1y-a6rmZ>fmDDqba#FhDWh2v=l0mE|U0lZlv6rubG znGw1epsVxIDAcuLqF)YE*X7giJm0#Jvt+89q=kqthVgx+G>x{A^uS@No25cKL=Nll zJ2D`n!@pJ9P6oj9nvkHw}u&Xmx)+b&cTmcS;Bw z*v=oaEAC-|U{L4~p^gzA6dsXez}IiI1C(Cs@eD8kJX-G*y?ZnnG#>b<#25qz<5|J< zY{IzIE`g+aMXFrtxqRvwVL#>%8MAvuFl^&0nLs%^|K?1{O^g9fEjnHzgx-av2VQWalIar&( zglR}beU&fAo4?NI*K>wNre++!_%5H9&*5{Ah=i*vPi-i};&o*cdnCe-*+i4aSbJ9* zz8UI!sU=X4iP-&SHf8cC`|Xq;VL7v1!ASbhaw7ZC@=r{l!XPM}ZvA_gQJP|w$p2vR z1|#hGPK-1ihnN)6#~~(0Xi@}jyPWM~(Gf>9&l>A$khVTu9FEB8;-B*grP9b*hm!>c zSDSy%zqMzj(YD_RNqTxj4oCc&?;MUeHj;Tb;MfcUTB!vx0%Y70$Nnhqp!iiA z?4?HJ2vl2>1+_OZiIrx!Frp8ObYy|pjTTL7B6^FaCc?MG@jX96BhW;?lcQ4SEvzZMY>4nb?1^Z;6jKX-x#VR(>H`>x{lO$wb+r z!A;S%kb*T>qy_}GXfP{HMcAh@Rh)H%eI-q30w`8mIi&vO=&mM+;PqNC_>j0Qd6G%% zA$gif6%lnbe>ZK>OqcB9Uhy#|EpU?MTjIxZ@dKicV>s@?aWd+J4Bbx5VqnK@b{dN< znhL25XNzW@yib#HOMJd)dy%e^iz2*5a}g4%GUeYw(aX6dzF5~pjm~VXuwSV&n~~Q# z%=;l`ndJ2pC$G*e@l$nXmuKm&R_M&Gv@?6UWcG}7c2p{hfirtn8jCw@l2_-J_&U+; zTAj6PBYaEzTIjUilz$sV3;UM%dEBnt>O!5tOLPV=6(P6&Lk2H5=~f84N;0@9t1>sU zWVt1Nb(X&B8lAywIX!iqoy{90n>VI2qHfA!<80oR#=6xO$)?jCZZ-Lq_+6ssR-M_c z7~B1{75d#{%D;O}*=l>hjy)(@cW#M4B-=~n5%s7^^CDCZrpI;rdMK-X?a<)u5xvv) z1Zo6r#BQ@sB6|_q4gpW&-JuLCenzx=+-{NC4RR-543Y-9OK6_>hmw8{Zva8&3!4}O*SOsgS=Vfxf&0_ssTufQw)X5c+F51K86IomF2m4jHYtt^HI6sFY>P_qET}B}PPZ@C!6I0N_`!dS*a#`9tC=_XNZDOwicbVW= zR7AZg4o>E>UxqL8W`x#aR;%3fJnAl&8Ei$mj`qGTL;1Jb!{LGayNE3GeH)?gK%VEO z)$H%N-Qpg2!0pmyW%YU9@TOh_Rn!etQP`A{^|fF`#of-@%l=4xOWv2Jlzk8`uLO3_Sb^#r%$tmZ}k z!C5V3Z>>$4I+69_n)XBwb5cufBXYddGANFNxzP+S6$F`g>t-{BDguSRsg@{}v$`p4 ziUEhSy8kz~*B9k_>l|(JSi3~E$J#kcU834!to62GG>DS_yAr$}(X)TFX>EbaY(UhWQHs+#kR!Gy>BH3lsa$xa zrBT~yU8Vs;qPEj|igViIT2pTAw4SMz8Wlb4T+wQ`O41xD9TRj1?U;l=ZY?JH#x1Bh>)>S$7vlK zrA~et3+~I^^6v^ajfv85{-`TOAUmy_C96ZC>N+>$hJgMCowv!+OsDlGH%$ii7D;A$ zR6DJZ3BNHW=ZbE1)AT5Et!@{hW1{wwkxdd6r}Yju9Rn$MN@_sBY2C_#ZKw5K))76& z{cdOis9SC0kb2nBT|FX#XKKMIN!*tF7}SR3C*3qOs-EKSCa3jj$u6AMoo*TxweL#MrW-C{T-%R(CIgrIsW}FT6CAEjsDJA z*I_s@)!f6@ZQEOmEH=(&n>5y~+IzTtIsIWr4?C@$M91e&S3jK&;axoPud7F# z)+6j#2`flF>{{*N;qzgoQPsyoBVc!6>gRE$<>zFzul^dmE~=f@0V$`XxXljq&^hP< zAYiZu|Ln~0)T>mqJI`*BE`~QX$RQp&Pa5Pfp}F86N_x15E`ZFDqMltqqa-EUX$`Oj zD58)DxnxA$iIjWT6S*Rq?XgUy^q^I3CH2!_jwm++-B>Vy+)@j+(M7z zwO(Vry4Pr@;AM1cN39FgB9G&=UKf?Uc*e|r&S(`^)gE?UZWQ+;%fU>$FbRI8wub4{ z&Ei~S)9Fh`3qj%XWTo7u#WkpmOU092BoHa@ukfFTBYY*S8B|gY{8u~Fq^dfzRmXA{_@>M8}DXqy6=kV4l2Bc*&WaP{iyZv6F8Bw ze7E5!_w%JSaevB(*!hRsBOZeAKN1 z#IsnBcT=}X__zc7N*1EGOZ1on1PG#cNObA}0tC@5I%;F@MAy@ZX3a@J_=*yIQtB@B zvyx;^Mv`|65NrTK&^;2}*-hOm0bBZg5=LSmxIZKO0Qz<@T8OpHb(;sp2t#sOz?h(V z$OG$v8Btezg6IpWhaIbY%r2zIrI73jpO7x3H&IACm{~o+Le*28uzH%4R69Al>RHaE zdd`uy+o^kOk%+*I`Y%X%-ED}w16lQa2j z(eN62=@?9UkB553s8>wA;o(hJ`|9hPtP)eEddJecv2RNmp?Cu3t+Ko2p7m>KDT< zEhziNn5-W-zt=s};Mifiv_E+GTr2qd#aQ>!Skor$e?{1kSkpv`N@LC@?T;R3lXhsV zX_FR6Y|{P&rUf~!;W62z1q{2iKZ~FdF=v<72L7T;Yh;WkG{Ji++~^I}>w^KN)Y;zGbu>e-Ir>%uyWYKU`kak$94!m_2x9 z?9PhJf7qSP@jBvK<7jJ487za#Dx4+4QS$#1LQO&j)99GW_i{rC#dyEglyEqP{aWSq za+87(Y}Xbs%ipruOelE2wxt%?Hq}ai$SH5vw)NUIZ>n}8+1ak`;ANwQ^dT|6V$#tI z17;=cXcv(nR!t*=s#u~x4Uf@?7!3=m5|IUVJiN5lueu9C{a+mJnG#$RwFjoy%gZ~# zeZ1U0uoK+ZOTA-olZJYoYu1U_)FVsNm$rv#cv9f{()I{1`%z zrqk4zthmIy1l<#?63(Ryg`-x=J3$0jr5l^6#(LRRgPm2!^z{8m$sa&9F=q*3yqBtC zGU-3ci%CBYr+_O)i5O4aC!zG69i}N>s*b6tf*co9M|*8Q^%xe2Y0t6H29IY;sg)k@ z9Vgn?)bpN%*Jh@pZ=Ey%{43Cu9TRAnPp1A#|1aK3+GHewABBLuN18?hD$ygmYs zC3uZ4$F(lzJSjA7^3hXVs#<`lb7S`F0{lM6aJ-vQBjELE=#Y{4DHZ{4h{=0HHhaB* zHge~_F-GfS_{Q>;056Kk8$;_Drk3gQy*S2i450=tit$Sur=ZEk=(H3QIS-pG7w${I z4YfhFKBiV^?n`3~1otJvz0ymU#%OJt87E$Z`!Xk!_H!p^dRaO?=khlmRur16kOE5o zGKQtpSvrYLF@_?Et0ajvUfL9+Gtx<@wZgp_+^7f;of}iS9cX*MzP`4~x5k*9jVr5nb=4>tZ-p#y#1VMz zd)i{pT`~LQc-i|#uJy!TBj5X&M%@$R?Ui2M9bRX4dLM@Fy?7Jj36X|r?gKHNm3FXZ zzi;GO#qS$MMe0fBM%QKly)9;+28V2~TRnqLYqo29%v$lD5j1yj7v`}g!j-=deeniy z<)0A5;gXxRcmNdV3dNH`ks-Xmw~c)(P9WkW&}pD|yYz~CV$LLB5BOi_{k5H5LgDSQ z`}OBU*5QSam-5~P<9OZ+olv-r!#p{rUPR|AUV7UMFa0F}+B1RO5^kCp{9B?;6N8r} z+B7kEMMv$4!K<)#nHa2Z?AA0hP_H?C|C_eLZ;8To)nFjM2Wq~}eCiz*rru?h)q4(4 zs=yh(zl=>Cn;yN-)ZnietOxH^8v1qYuy+&3y3|<(JhFeINA|I>z;9wIwWdHu_O%7h z&uXn}tSujk1CX$^a}XS62iGDv+zy_N;0Qao2EmaHE_IG(KC7{Ij>EhfL5F!&V{L^4 zJrh9(nrf__JG9{hN$CuP0aoh@INj6nb4?9(QNf%h;h2P1N;odz6%tP1iiof*Z!B{> zlJy0SNAg|F%KOL|>fN9LKg6sPe>R2`sEr!(W6WCk9YfC3ke_4LlVBQuegU0v1nY7t z(y6PduPrN=WKYr2ITBr_qZJZes-u{(Tu^}aLycD8W21-n!U7&g5&sSCZzDD}cYJIV zSQmbbP0fpR(tlW`pYm%pmlm+M3n%H2weMr2vw0Z=%~m;atL!VIxIkTQ)6Z5$-1_xP zqfcLT1rxaP;^|GWvDtfISBeBPZcX_FzXZiTSN^2}k`y`}X^M!*{}AELi?bWnKHlVp zb%<*>tbLq1;3$gax9(kJbS=EK9Usr*BqPdBvURQ*hdXA~eqsdL&>4+*JjJc9f~msr zuLhk9rS#Y*Mvp0t09;c*>u}q)k=8cS*^RUY?@+W?*A~!OcoG_SxEtxrMoKlZ6u_@5 zfUVGJjkL0nR-j{1H*w*Z>SmED1v)tOhjbz(ah^9xRmzrB_qe!Px8Si_%rxUuqC?B3 zPoC~lw+f(ld`ip#+*aT?V}0WCN?b`C55@6YakmR)|2Vs2ed6qn-64f!oFo7{u@eY5MVCS%>iGil$0;BwyddGGvU^e3 zU|Tj@Fr(~V63U=(?RNBnIbx#;S2d;_!I6xre4~KEaf*oGHznMp z&RfF9MlJ>r%~0oUp^OUGJ85;^*Xn#A>U^lxiQDSv^8ZK#qv_a!6Y;rCmi2J~#p9F^ z!TTiKq|PV8h1OBQk5)~NSEeIV;`QZNV7#@R+FwB9;-)%KKojCLK2GiQGg7JF3uvN% z+G@}r1vE(@Z8YT10-7w4)*5oKfTjqfm4^H!o!f-CI#j@2+{CzY`M9H-6jwPu?(QbX zmGW_?HzlreeOix{=FjsTu1CI)dqzk!ecV4nqPK}na~1rJ%je^s6kLTq?oYwh{BK+> z(p*935w4a#?s~!2%Euk>#5j7~_P(aKu}{?rjI{*Ms}mL^ym4 z4F~vS`ae)a*&|-cdq@nbK3<_O)8hAmn2vkxQ{(uB#wmQIgkRNS$a031MRjzAL}NO- zQlfDkJx!tsj;g_U1U<)fdc3Z(zH08$Dv03t8L1`!92)@AaX2@KpV@?mgH!5rRwY)& z^{T`WE@38I&E?4l8;1F)J}#>g!+o+UG15nkF*VwUdreHZCSHeYF01hNCjTZxN{#WM z!O@zyb6x4|xW2CBhaJXgNf#B60Nzcp?>J5GqJjdMF_f?5;bLA@7ZvisKZ2vgELfm^ z>IfD78%@MVr)1MaeJN(h6cqE(vTUOG-vlLmv^1M$ENmYAmaM#tgDNnOqolyEi0g9} zSH$V77~va)2JjQaGIH!UTc%I)rI%}bv^=hkM#G4!89q8)IKGRiV;PR9I*tR_gox80 zmw0+fnlPV5u<%sjP`DUyy_S&I_i4_u*Wu9US$=dy;q>GvC+Q9Il@E*0lcM;Hr_~k5ZZ?J z?O5$Q@MxG17~5zc^3gkDwA;nt5NR=BvhDs+ z5rIUSjQ0Js(LSb;O-B1c+Gux3E$b^j;jld@@A6Bz&KN4@L_-_;zc)&&6oL_nGkh+ee?r>3vD=6=C}V zY%p4&!Sj*piX)qAi}c+v0s94}gZD0+O)u0t8Tk3CWeANlC}I6koZPi(vYRP6qT!}{y0 zpV43cfd2YF+Vp>FGX2j)@XuoUKZ)soA&_4j(~r5-R|06XO@EGyM|||xUkh|UoBn<- z7oMr_N1ndLxYS6E2>sC1U;ionHTZzBP5-|>`cq8*M>ag}{SMk*iv1+XPd+*rX9{T$ z>SwV|K*XtMr8SzUG``b+fsAZW6FSHhlApjY0nkxka0ldvZkK>j8f zRSB{FUpSxYfVO@k(bQ!d3CMzZgmtY|Ha=}-s4*4iAL4S!k=HRDxa$NafgY^RqHdW}15N3jbV9OUaqmax59TK+O zLL&t}H~3)vz=JPO^LY{s1fN^@@(an6AeU(AmgKx(gY^RqHjid2NH7p=USabVQbB@p zm<^A86*hI*2&ke$IyKcAzXeJi5Afl(7J6XxL2`OvZU&88kuTxYa#7-M19Nkoc(VlW zbRqHEr0KONq-F^!5}jL#&dn3tQsBimN``2WM{E?IK?FwZQ)4q_s8+$2n$noCq zWRz%`khP-@g^p{}CegG_*RjyqrfZwvb)hy1UKi?A=xo!q6GD5N4yd*$#8TC@(B7tN zpVF##NXRZ7DC}LjBMPZQLhsV`D0HR+9TR#w&`a{uDUr4H)mwm_6Ini69|3krWbASE z6;Rj2;_?)Ht#V%R1~@-E>O} zsb_*+ts$t^)*NmcwR$D8U9F)~qrJFBQ*5}s|6ZlTw2-ET+b5CfYYi6>NTjLV_D#3j z5gOUlZu_O%?MRKpEI!yp((j)r=d}Se>QNer3BB#44M@nk0dS)=4pVy@H!vZ~2*CNJ z8z+1t zz=w7ZJov_IzLC-yfNzBG9aTsp6VzAOCJ5Uou%X=p4YrAzZM1X-U>hZDlL~2cg8B*D z6k!{a0v{G2fd}7I&F4=r5PV~VZ(1Sw6VzY$rVC#HY*>K=8f-H(TQI>uumyzem_iCB zXn?RCCu||GVFeOsupQ5AL9U^2f}!9G3E#{@3MXhF^Wl-$tUk-`zf_q>izMt#%h`p@ zi*dYMcLdP{HZ7yl*rRAQ6@`f4^@l>9d8+xkXBfv#2%I29m$0BvHZ7|PX&m}2`xn#} zO2po@TqI$8({gbkwM;M_b{&_X3&8?gwV<(SSyM=ngj=0lD4UjbLK#Uoo0iKYs?%il zQ<$6QfRd#N+&|)HrNx3*7Se}PH)Om90*PVly4FKo;dIvbZ$6ZR8VgZ{#8u&sX@KJNu0 z0DF{2C+tVAfNJek7qJ*@wRmP&&Dv8(>-Ah0S?#@KhzTMV@-nY9mL0e&kmLF^1_^?5<1`)LhDwYn@Wtu($zA1rS zJUW^8@2J+^#e1=kHlnUy1|Ng-i&lW7@+?-jaISmcY+>)K=oX&uYA> zXL`3K)Z2vxPvWW8cM9p-j$9qp*g&nRcd5NnIZMzp)Zi(RN_mE_+@;>*VVCI^qZaMo zyjAZD>7q1gDxHSPpC~t;KappgxkS2WkP{ z2`pb$Q&)p6U}hA()yE=pK4g|Jt%p+kBtDP3wT6bOc~v7T%At1k{H5jd7gs^tCxWkR zEUR9+q*7$n%ty~!U$qR#&kE^D+3ek(u=e4(u>$pllm#s1k%V;@QF}ZH!j|BAEMYxi zP*3wKiS0;O-x<`y{90m9Caei~$Gkv&TS(gyO#O7idN7wt-0C|fP&*S=HPI;Z3&bLh z_cq=gf^cx0cEn|;-MPh+KrIp;PBP*o z*|x;HGlA;j!Lkao*6&$C^ z!sL;ih<-0b7955@3ZXEEgI(00g|G!XOru(0vW=G3aL`U z;Vvqth~bbhu7j!YlV}LxL0=QU5zWB}fVo9d_-G#PA{YVQMD-ML!P%D3Keb)T?hU^;TdtvVNRsQ@+~urBEc zej!520+@NgbW2Cvs-%cZ446t-j_O&&o`owZ-Naz&C-9)K*OgSgiVFBi=iWthR7-BO zbMZ1~c>@|>KPi}I#W>z+`AzEU9cTk)yC`YZn$+7nxQORVXcBoz3+IY^;@28b%(Go) z(!#B?juX{TiF%TFAFq0DB;7?-p?4k|A9oaA!5JP^NwgW*HarEqk)4)PjEM&z=!u4&?u&xnD z*G?%DPkn&heyEvsin#tyoxBAgo+3{=vvv_^$9JGJwbxJT6ej8P7A$yrOSc+XM6RT% z#)$OnQn7IDqS-``=-EGst{Iv1i=_>M)-0g9B@IgAgV(K#IHZ#FB)s(`ZkKT!bsXjD zFjY*%+f~vll_w&HCwW4PcTI|Dc#=Oy;;DLwN^0W|B=NH}C_$j$h&-LZM~y9_K$6gt zsUwS614PbfiGmx?aHRJy(J$`kH>ahVP(*PEog~y3wN#UfWZ@&3#A-o2NlE_TC1_zg ziZeNvdm4a|m&X!n8cY!Q>4Kk-#Aqe>qmtxFsu@KzA;}*WajaH*QWD)#rL8(NgebJb z^)1zLMKmc%I}+;H<3$-nz`6=m2EAvon)qKXZDLB&8IGf94^xtAPLX&x6-9i(ep+&B zH0?&sD-!>s*fTw8onAnF2hA^X9OC1W*`7?)z6|1ArLRJb6nkbSttmxR>{bgUdScQ( zt~8*K@{8m$+TtSKx&`Gdt62%2tNo)nwfCwe8an&(PSn~u(?=b=)fzS@X-#ZFct^d~ zQO%s2w6HKaz(Ap$U`CwT>|LF6|B3hfo&w-#0&){rgD~y?)yyHFcxuV`V zNm)xeQ;S)j%=}G}RRFUPwORt0SFRDm+aOeB&P8yLV3p}?!E9tp-T%KeYetrFNsB?J{T`X}xZFMYB2ZglBPJFW@K0TTBID~~meVqn)r;8Gs zY$dKPqD@KOLA|EPezM?twl~~u7XfMO?9gqNuw9d^Mc;CxD0V$M5_MA%U7w_DlK26S zCt$>dx7z%-34fCvw{PX0E&MkK|LsL|19R*<*=X4UTHk3iZ51Zl&ju1*_qg;O5O6;lXiI99+Mxjt;1yDS)w`jJPq&HPI_pEW3^hHQCl6XfKU+2pkiAKq~G`L+jn;v2j*tT+x_<2Z@>NR z?)UcY?GyiEsl{pWZ%W0W?7w4RQoDF>3`}kp?;B13GZlWwqQ@@Vdal?Cu0|CMa|Mp1 z3Q&+L5Rw4E3T~iOd?T=ghIVn2WE%@94Fgk_X=sN`*n}cZK-))=9NR8QR1~vnlqA(9 zMoF11y^`85%K7r1w5X8SMYN3|5}brKB#jMK5>9^r*M?zu82XDbOf-sWWyW?=oecXQ z`-u^lLpU*4bY}bb3MeZQw@Qvu$Hy>SR`siVC3JT7>Be1mo?XXey|Pv~C2+?AY5mHJfaS1NF( zy2vw4Oob~aMY4q|+{B70C{$)23lA!yVxe`3O7~KlpBL}Men^Wh@(BiVT(9w8ZRRu* zq9mF`6Qg-}b!}R7%kay-QZ?dFye?57(K~aCTsVD+!xBUoh3fi&n*7BT5dVSQJ z69Hk(HUw%^a4${_t0iFD*HG*5^&Jw&f)mead9u2OYwJ+7&aRa-@pma)XV*#SQqZC7 zI{O);VFT9b#Irt1mbkU7Ak7NylaQt&w9p1$eLz5F6BoFy3*CCw(5)zJ57))}El~3n z`yRL1OXxe;&qMJJJthwSXI2d>o`Ju|x&eDpBCC38-cP zKNP5%<}T(2t+L%l-MQKhzf}rWV;5fJE+kccs4A6OqTmvC*&`Crpf8zW@MZR2jy3U& zyGY@0rg#iit8ff9DDjwe*~XD$@No$nbH?C~{4t1GW(+=&9fMD^t2ReNXc{_cvl0Of zp-~{dZU@VN8ADH3K{Eago4Cb{pxITBitT03ZCAmksvr@2hCP>2L8c03a-Q#C-cihJ z-p)STk)?j8bsy|durs2bboj#PD6Moe2J>%9K>PL^NDr{jvbH5AxC5+x7eo3igAx$s z-;xk0*cDNJ$SC+WD+t>$ga??9-NNN}bNTN`*li)7hV#u~cGjK|T#?K6DDhpx)%Pq{ zdqb|aPJlQDkK_<%p9=1+MzFq5SK@#QzE%x$VwC5HdC1g0w%{e}6k_US%hXE>UXGX| zEk0?PGyzhn1BR&|NI+wLXqfsDN;vTxOWe#}MCu45wb>%IU5OuCq>he6>L(J8<{CLF6~E2c{Eo3ZMcDmb!YKuBN7((r6#gR@&bAjP*W;|FY_tv|gH9(_=8o3lvWX1d zv&2bFkwHc9%p^z@iT7=Cu?`ASFgAFs9+I&S$y-jT4qmLs?T#ySCCYX1n|j>tpgcd! zt61rlYVudDj@I)!ZFe+kHPmUlo|6(Em1NiR&g^ntu6a4XDgg~1HoQ0fse6*oOUHj++xulbs(n-)+}8-DsXjwtBl=Z~sRp7Zl)%ls zY&&qdUB=o67@}sza4TWh;=xu80}+PPjfNSlA*apBvCCP(HdZjxgKfDK&SuYM@+l<$ zX0&KC6wa{}KCFZNQ}7$N+pvmWXHW;PPr-XKpRUBCI=DOq@5w075A(*YbqBfXUDh20 z-cuI5T^gQ>z#}dAhAH-X?g?MmIW`D?)X>=B0opd#(Ab5=oVYP;;(GUCBr(k-F0~}C z&_Y`h_m3p8+k^cYsz0C)2Ep_4NyIEe;{1q2Jek6~p}=7b_xDl><;eFyc5{xyC4 zP~~&<=VqKR?(*OuT64Dt3rpcSO|!@I)(xe-ys3rcL_M7#xvtT407W}|+9 zvs<&xfLYXvEs>GiSYSbyX(Zg$g&!1nFcNr(1>Wdb6H1)ufD_b=FGLc9EOEFq6gbie uNAM^Z^G`g^nVYV~#7_R}phnk|YX@(G@^bM6CE^VIqz9iYEi8=33O@o~_kqy> delta 41911 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