diff --git a/ba/ba2200.cpp b/ba/ba2200.cpp index ab6bc4712..df85b1299 100755 --- a/ba/ba2200.cpp +++ b/ba/ba2200.cpp @@ -42,7 +42,7 @@ public: class TArchive : public TObject { - enum { BUFSIZE = 4096 }; + enum { BUFSIZE = 4096*7 }; ALArchive* _arc; protected: @@ -53,6 +53,9 @@ protected: bool fsplit(const char* filename, char floppy, const char* desc = "") const; bool fbuild(const char* filename, char floppy) const; + int build_backup_list(long firm, TString_array& fl) const; + int build_restore_list(long firm, char floppy, TString_array& fl) const; + public: bool backup(const char* dir, char floppy, const char* desc); bool backup(long firm, char floppy, const char* desc); @@ -79,7 +82,7 @@ FILE* TArchive::ask_disk(TFilename& name, int disk, char floppy, bool lettura) c retry = yesno_box("Il file %s non e' accessibile: riprovare?", (const char*)name); else { - setvbuf(f, NULL, _IOFBF, 32000); + setvbuf(f, NULL, _IOFBF, BUFSIZE); retry = FALSE; } } @@ -94,6 +97,64 @@ long TArchive::fsize(FILE* f) const const long s = ftell(f); fseek(f, 0, SEEK_SET); return s; +} + +int TArchive::build_backup_list(long firm, TString_array& fl) const +{ + fl.destroy(); + if (firm < 0L) + { + fl.add(firm2dir(0L)); + TLocalisamfile ditte(LF_NDITTE); + for (int err = ditte.first(); err == NOERR; err = ditte.next()) + { + const char* dir = firm2dir(ditte.get_long("CODDITTA")); + if (fexist(dir)) + fl.add(dir); + } + + TFilename name(firm2dir(-1)); // __ptprf + name.add("config"); // Aggiungi configurazioni + if (fexist(name)) + fl.add(name); + } + else + fl.add(firm2dir(firm)); + + return fl.items(); +} + + +// Costruisce la lista delle directory da scompattare +int TArchive::build_restore_list(long firm, char floppy, TString_array& fl) const +{ + if (firm < 0) // Crea lista automaticamente + { + TFilename name("a:/backup.ini"); name[0] = floppy; + TConfig ini(name); + const int max = ini.list_paragraphs(fl); // Lista degli archivi + for (int i = max-1; i >= 0; i--) + { + const int disk = ini.get_int("Disk", fl.row(i)); + if (disk == 1) + { + firm = atol(fl.row(i)); + fl.add(firm2dir(firm), i); // Aggiungi gli archivi che iniziano qui + } + else fl.destroy(i, TRUE); // Elimina gli archivi che non iniziano qui + } + + name = firm2dir(-1); // __ptprf + name.add("config"); // Aggiungi configurazioni + fl.add(name); + } + else + { + fl.destroy(); + fl.add(firm2dir(firm)); // Inserisci solo una ditta (o COM) + } + + return fl.items(); } @@ -103,6 +164,7 @@ bool TArchive::fsplit(const char* filename, char floppy, const char* desc) const FILE* i = fopen(from, "rb"), *o = NULL; if (i == NULL) return error_box("Impossibile aprire il file '%s'", from); + setvbuf(i, NULL, _IOFBF, BUFSIZE); const long tot = fsize(i); @@ -118,10 +180,10 @@ bool TArchive::fsplit(const char* filename, char floppy, const char* desc) const bool ok = TRUE; while (ok) { - const word letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i); + const size_t letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i); if (o != NULL) - ok = letti ? (fwrite((char*)(const char*)buffer, letti, 1, o) == 1) : TRUE; + ok = (letti > 0) ? (fwrite((char*)(const char*)buffer, letti, 1, o) == 1) : TRUE; else ok = FALSE; @@ -135,23 +197,40 @@ bool TArchive::fsplit(const char* filename, char floppy, const char* desc) const TFilename parag(work.name()); parag.ext(""); TFilename ini("a:/backup.ini"); ini[0] = floppy; - if (fexist(ini)) + bool asked = FALSE; + while (!asked) { - TConfig c(ini, parag); - const TString16 d(c.get("Date")); - if (d.not_empty()) + if (fexist(ini)) { - ok = yesno_box("Il disco %d contiene gia' un backup del direttorio %s del %s" - "\nSi desidera continuare ugualmente?", - disk, (const char*)parag, (const char*)d); - if (!ok) break; - } - } - else - { - FILE* i = fopen(ini, "w"); // Crea il file backup.ini - fclose(i); + TConfig c(ini, parag); + const int d = c.get_int("Disk"); + if (d == disk) + { + ok = yesno_box("Il disco %d contiene gia' un backup del direttorio %s del %s" + "\nSi desidera continuare?", + disk, (const char*)parag, (const char*)c.get("Date")); + asked = TRUE; + } + else + { + if (d > 0) + { + ok = yesno_box("Inserire il disco %d nel drive %c:" + "\nSi desidera continuare?", disk, floppy); + if (!ok) break; + } + else + asked = TRUE; + } + } + else + { + FILE* i = fopen(ini, "w"); // Crea il file backup.ini + fclose(i); + asked = TRUE; + } } + if (!ok) break; TConfig c(ini, parag); const char* oggi = TDate(TODAY).string(); @@ -160,14 +239,16 @@ bool TArchive::fsplit(const char* filename, char floppy, const char* desc) const c.set("Description", desc, NULL, TRUE); c.set("Date", oggi, NULL, TRUE); - ok = letti ? (fwrite((char*)(const char*)buffer, letti, 1, o) == 1) : TRUE; + ok = (letti > 0) ? (fwrite((char*)(const char*)buffer, letti, 1, o) == 1) : TRUE; if (!ok) error_box("Impossibile scrivere i dati sul dischetto"); } } w.addstatus(letti); - if (letti < BUFSIZE) break; - if (ok) ok = !w.iscancelled(); + if (ok) + ok = !w.iscancelled(); + if (letti < BUFSIZE) + break; } fclose(i); @@ -182,7 +263,9 @@ bool TArchive::fbuild(const char* filename, char floppy) const const TFilename work(filename); FILE* o = fopen(work, "wb"), *i = NULL; - if (o == NULL) return error_box("Impossibile creare il file '%s'", (const char*)work); + if (o == NULL) + return error_box("Impossibile creare il file '%s'", (const char*)work); + setvbuf(o, NULL, _IOFBF, BUFSIZE); long totale = 0L; // Bytes letti long max = 1440000L; // Bytes da leggere @@ -198,7 +281,7 @@ bool TArchive::fbuild(const char* filename, char floppy) const bool ok = TRUE; while (ok) { - word letti = 0; + size_t letti = 0; if (i != NULL) { letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i); @@ -207,7 +290,7 @@ bool TArchive::fbuild(const char* filename, char floppy) const else ok = FALSE; - if (!ok) + if (!ok) // Richiedi nuovo disco { if (i != NULL) fclose(i); i = ask_disk(name, ++disk, floppy, TRUE); @@ -227,7 +310,7 @@ bool TArchive::fbuild(const char* filename, char floppy) const } w.setmax(max); - if (ok) + if (ok) // Leggi primo blocco di bytes { letti = fread((char*)(const char*)buffer, 1, BUFSIZE, i); ok = letti > 0; @@ -235,7 +318,7 @@ bool TArchive::fbuild(const char* filename, char floppy) const } } - if (ok) + if (ok) // La lettura e stata fatta bene { ok = fwrite((char*)(const char*)buffer, 1, letti, o) == letti; if (ok) @@ -247,7 +330,8 @@ bool TArchive::fbuild(const char* filename, char floppy) const else error_box("Impossibile scrivere i dati sul file %s", (const char*)work); } - if (letti < BUFSIZE || totale == max) break; + if (!ok || totale == max) // Esci in caso di errore o se hai finito + break; } fclose(o); @@ -269,8 +353,9 @@ bool TArchive::backup(const char* dir, char floppy, const char* desc) TFilename work; work.tempdir(); work.add(name); work.ext("gal"); _arc = new ALArchive(work); - - TProgress_win w("Archiviazione", this); + + TString256 title("Archiviazione di "); title << name; + TProgress_win w(title, this); ALEntryList list(w.monitor()); _arc->AddWildCardFiles(list, "*.*"); @@ -295,9 +380,18 @@ bool TArchive::backup(const char* dir, char floppy, const char* desc) } bool TArchive::backup(long firm, char floppy, const char* desc) -{ - const TFilename dir(firm2dir(firm)); - return backup(dir, floppy, desc); +{ + TString_array fl; + const int num_ditte = build_backup_list(firm, fl); + + bool ok = TRUE; + for (int f = 0; f < num_ditte; f++) + { + ok = backup(fl.row(f), floppy, desc); + if (!ok) break; + } + + return ok; } bool TArchive::restore(const char* dir, char floppy, bool tmp) @@ -362,8 +456,18 @@ bool TArchive::restore(const char* dir, char floppy, bool tmp) bool TArchive::restore(long firm, char floppy, bool temp) { - const TFilename dir(firm2dir(firm)); - return restore(dir, floppy, temp); + TString_array fl; + const int num_ditte = build_restore_list(firm, floppy, fl); + + bool ok = TRUE; + for (int f = 0; f < num_ditte; f++) + { + ok = restore(fl.row(f), floppy, temp); + if (!ok) break; + } + + return ok; + } void TArchive::stop_job() @@ -460,8 +564,11 @@ KEY TArchive_app::query(long& firm, char& floppy, TString& desc, bool& temp) con const KEY k = m.run(); if (k != K_QUIT) - { - firm = m.get_long(F_CODDITTA); + { + if (m.get(F_DATA) == "T") + firm = -1; + else + firm = m.get_long(F_CODDITTA); floppy = m.get(F_FLOPPY)[0]; desc = m.get(F_DESCR); temp = m.get_bool(F_TEMP); diff --git a/ba/ba2200.uml b/ba/ba2200.uml index 25ed870c7..2b0243acd 100755 --- a/ba/ba2200.uml +++ b/ba/ba2200.uml @@ -13,7 +13,8 @@ LIST F_DATA 1 14 BEGIN PROMPT 17 1 "Dati " ITEM " |Ditta" MESSAGE ENABLE,1@ - ITEM "C|Dati comuni" MESSAGE CLEAR,1@ + ITEM "C|Dati comuni" MESSAGE CLEAR,1@|"Archivi comuni",F_RAGSOC + ITEM "T|Tutti" MESSAGE CLEAR,1@|"Archivi comuni e ditte",F_RAGSOC END NUMBER F_CODDITTA 5 diff --git a/ba/boltitcf.frm b/ba/boltitcf.frm new file mode 100755 index 000000000..6e8236e43 --- /dev/null +++ b/ba/boltitcf.frm @@ -0,0 +1,376 @@ +USE %DEL +JOIN 9 INTO CODDITTA=CODTAB[1,5] +JOIN 6 TO 9 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 9 INTO CODANAGR=CODANAGR +JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC +JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) +JOIN %UCC TO 213@ ALIAS 14 INTO CODTAB=UFFCONC + +END + +SECTION BODY ODD 24 0 0 + +GROUP +BEGIN + KEY "Prima sezione" +END + +NUMERO +BEGIN + KEY "IMPORTO TRIBUTO" + PROMPT 2 13 "" + MESSAGE COPY,10@ + PICTURE "###.###.###^^^" + FIELD R0 +END + +NUMERO +BEGIN + KEY "INTERESSI" + PROMPT 12 13 "" + MESSAGE ADD,10@ + PICTURE "###.###.###^^^" + FIELD R1 +END + +NUMERO +BEGIN + KEY "TOTALE (in basso)" + PROMPT 19 13 "" + GROUP 10 + PICTURE "###.###.###^^^" +END + +NUMERO +BEGIN + KEY "TOTALE (in alto)" + PROMPT 19 2 "" + GROUP 10 + PICTURE "###.###.###^^^" +END + +NUMERO +BEGIN + KEY "TOTALE (in lettere)" + PROMPT 2 3 "" + GROUP 10 + PICTURE "LETTERE" +END + +STRINGA +BEGIN + KEY "sul C/C n." + PROMPT 6 4 "" + FIELD 14@->S5 +END + +STRINGA +BEGIN + KEY "Concessione di" + PROMPT 10 5 "" + FIELD 14@->S0 +END + +STRINGA +BEGIN + KEY "Eseguito da" + PROMPT 7 6 "" + FIELD 6->RAGSOC[1,22] +END + +NUMERO +BEGIN + KEY "Codice Concessione" + PROMPT 8 9 "" + FIELD 14@->CODTAB +END + +STRINGA +BEGIN + KEY "Codice fiscale" + PROMPT 12 9 "" + FIELD 6->COFI +END + +STRING +BEGIN + KEY "CODICE TRIBUTO" + PROMPT 9 11 "" + FIELD S6 +END + +STRING +BEGIN + KEY "PERIODO DI RIFERIMENTO" + PROMPT 20 11 "" + FIELD CODTAB[6,9] +END + +GROUP +BEGIN + KEY "Seconda sezione" +END + +NUMERO +BEGIN + KEY "IMPORTO TRIBUTO" + PROMPT 2 47 "" + PICTURE "###.###.###^^^" + FIELD R0 +END + +NUMERO +BEGIN + KEY "INTERESSI" + PROMPT 12 47 "" + PICTURE "###.###.###^^^" + FIELD R1 +END + +NUMERO +BEGIN + KEY "TOTALE (in basso)" + PROMPT 19 47 "" + GROUP 10 + PICTURE "###.###.###^^^" +END + +NUMERO +BEGIN + KEY "TOTALE (in alto)" + PROMPT 19 45 "" + GROUP 10 + PICTURE "###.###.###^^^" +END + +NUMERO +BEGIN + KEY "TOTALE (in lettere)" + PROMPT 2 45 "" + GROUP 10 + PICTURE "LETTERE" +END + +STRINGA +BEGIN + KEY "sul C/C n." + PROMPT 6 38 "" + FIELD 14@->S5 +END + +STRINGA +BEGIN + KEY "Concessione di" + PROMPT 10 39 "" + FIELD 14@->S0 +END + +STRINGA +BEGIN + KEY "Eseguito da" + PROMPT 7 40 "" + FIELD 6->RAGSOC[1,22] +END + +NUMERO +BEGIN + KEY "Codice Concessione" + PROMPT 8 43 "" + FIELD 14@->CODTAB +END + +STRINGA +BEGIN + KEY "Codice fiscale" + PROMPT 12 43 "" + FIELD 6->COFI +END + +STRING +BEGIN + KEY "CODICE TRIBUTO" + PROMPT 9 45 "" + FIELD S6 +END + +STRING +BEGIN + KEY "PERIODO DI RIFERIMENTO" + PROMPT 20 56 "" + FIELD CODTAB[6,9] +END + +GROUP +BEGIN + KEY "Terza sezione" +END + +NUMERO +BEGIN + KEY "TOTALE (in lettere)" + PROMPT 70 3 "" + GROUP 10 + PICTURE "LETTERE" +END + +NUMERO +BEGIN + KEY "TOTALE (in alto)" + PROMPT 110 3 "" + GROUP 10 + PICTURE "###.###.###^^^" +END + +STRINGA +BEGIN + KEY "sul C/C n." + PROMPT 70 4 "" + FIELD 14@->S5 +END + +STRINGA +BEGIN + KEY "Concessione di" + PROMPT 74 5 "" + FIELD 14@->S0 +END + +STRINGA +BEGIN + KEY "Eseguito da (1)" + PROMPT 72 6 "" + FIELD 6->RAGSOC[1,30] +END + +STRINGA +BEGIN + KEY "Eseguito da (2)" + PROMPT 102 6 "" + FIELD 6->RAGSOC[31,50] +END + +LISTA +BEGIN + KEY "Tipo anagrafica" + FIELD 6->TIPOA + ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ + ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ +END + +DATA +BEGIN + KEY "DATA DI NASCITA" + PROMPT 68 7 "" + GROUP 1 + FLAGS "D" + PICTURE "# # ^ # # ^ ^ # # #" + FIELD 8->DATANASC +END + +STRINGA +BEGIN + KEY "COMUNE (o Stato estero) DI NASCITA" + PROMPT 84 7 "" + GROUP 1 + FLAGS "D" + FIELD 113@->DENCOM +END + +STRINGA +BEGIN + KEY "PROV. DI NASCITA (sigla)" + PROMPT 123 7 "" + GROUP 1 + FLAGS "D" + FIELD 113@->PROVCOM +END + +STRINGA +BEGIN + KEY "SESSO (M o F)" + PROMPT 127 7 "" + GROUP 1 + FLAGS "D" + FIELD 8->SESSO +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: COMUNE" + PROMPT 65 8 "" + FIELD 213@->DENCOM +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: VIA" + PROMPT 85 8 "" + FIELD 6->INDRF + FIELD 6->INDRES +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: NUMERO CIVICO" + PROMPT 124 8 "" + FIELD 6->CIVRF + FIELD 6->CIVRES +END + +STRING +BEGIN + KEY "CODICE TRIBUTO" + PROMPT 68 13 "" + PICTURE "# # # #" + FIELD S6 +END + +STRING +BEGIN + KEY "PERIODO DI RIFERIMENTO" + PROMPT 80 13 "" + FIELD CODTAB[6,9] +END + +NUMERO +BEGIN + KEY "Codice Concessione" + PROMPT 92 13 "" + PICTURE "# # #" + FIELD 14@->CODTAB +END + +STRINGA +BEGIN + KEY "Codice fiscale" + PROMPT 100 13 "" + PICTURE "# # # # # # # # # # # # # # # #" + FIELD 6->COFI +END + +STRINGA +BEGIN + KEY "Partita IVA" + PROMPT 109 15 "" + PICTURE "# # # # # # # # # # #" + FIELD 6->PAIV +END + +NUMERO +BEGIN + KEY "IMPORTO TRIBUTO" + PROMPT 109 17 "" + PICTURE "# # # # # # # #^^^" + FIELD R0 +END + +NUMERO +BEGIN + KEY "INTERESSI" + PROMPT 109 19 "" + PICTURE "# # # # # # # #^^^" + FIELD R1 +END + +END + diff --git a/ba/dissd6.frm b/ba/dissd6.frm index 8d6a9f366..ed7b9d7c7 100755 --- a/ba/dissd6.frm +++ b/ba/dissd6.frm @@ -4,7 +4,8 @@ JOIN 6 INTO TIPOA=S0[1,1] CODANAGR=S0[2,6] JOIN 8 TO 6 INTO CODANAGR=CODANAGR JOIN 13 TO 6 INTO COM=COMRF(COMRES) -END +END + SECTION BODY 0 66 0 0 STRINGA @@ -83,7 +84,7 @@ BEGIN KEY "IRPEG 2100 GRUPPO 4: IMPOSTA" PROMPT 32 18 "" MESSAGE COPY,1@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R0 END @@ -92,7 +93,7 @@ BEGIN KEY "IRPEG 2100 GRUPPO 4: INTERESSI" PROMPT 48 18 "" MESSAGE ADD,1@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R4 END @@ -102,7 +103,7 @@ BEGIN PROMPT 62 18 "" GROUP 1 MESSAGE COPY,5@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" END NUMERO @@ -124,7 +125,7 @@ BEGIN KEY "IRPEG 2110 GRUPPO 10: IMPOSTA" PROMPT 32 23 "" MESSAGE COPY,2@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R1 END @@ -133,7 +134,7 @@ BEGIN KEY "IRPEG 2110 GRUPPO 10: INTERESSI" PROMPT 48 23 "" MESSAGE ADD,2@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R5 END @@ -143,7 +144,7 @@ BEGIN PROMPT 62 23 "" GROUP 2 MESSAGE ADD,5@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" END GRUPPO @@ -171,7 +172,7 @@ BEGIN KEY "ILOR 3000 GRUPPO 06: IMPOSTA" PROMPT 32 33 "" MESSAGE COPY,3@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R2 END @@ -180,7 +181,7 @@ BEGIN KEY "ILOR 3000 GRUPPO 06: INTERESSI" PROMPT 48 33 "" MESSAGE ADD,3@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R6 END @@ -190,7 +191,7 @@ BEGIN PROMPT 62 33 "" GROUP 3 MESSAGE ADD,5@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" END NUMERO @@ -212,7 +213,7 @@ BEGIN KEY "ILOR 3110 GRUPPO 11: IMPOSTA" PROMPT 32 38 "" MESSAGE COPY,4@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R3 END @@ -221,7 +222,7 @@ BEGIN KEY "ILOR 3110 GRUPPO 11: INTERESSI" PROMPT 48 38 "" MESSAGE ADD,4@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" FIELD R7 END @@ -231,7 +232,7 @@ BEGIN PROMPT 62 38 "" GROUP 4 MESSAGE ADD,5@ - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" END NUMERO @@ -239,7 +240,7 @@ BEGIN KEY "TOTALE DA VERSARE" PROMPT 62 44 "" GROUP 5 - PICTURE "###.###.###^^^" + PICTURE "###.###.###~~~" END STRINGA @@ -261,7 +262,7 @@ DATA BEGIN KEY "DATA: giorno - mese - anno" PROMPT 12 56 "" - PICTURE "@@ ^ @@^^^@@" + PICTURE "@@ ~ @@~~~@@" FIELD D0 END diff --git a/ba/distitcf.frm b/ba/distitcf.frm new file mode 100755 index 000000000..857e97c0b --- /dev/null +++ b/ba/distitcf.frm @@ -0,0 +1,198 @@ +USE %DEL +JOIN 9 INTO CODDITTA=CODTAB[1,5] +JOIN 6 TO 9 INTO TIPOA=TIPOA CODANAGR=CODANAGR +JOIN 8 TO 9 INTO CODANAGR=CODANAGR +JOIN 13 TO 8 ALIAS 113 INTO COM=COMNASC +JOIN 13 TO 6 ALIAS 213 INTO COM=COMRF(COMRES) +JOIN %UCC TO 213@ ALIAS 14 INTO CODTAB=UFFCONC + +END + +SECTION BODY 0 64 0 0 + +STRINGA +BEGIN + KEY "CONCESSIONE DI" + PROMPT 36 5 "" + FIELD 14@->S0 +END + +STRINGA +BEGIN + KEY "COD. CONCESS." + PROMPT 9 11 "" + FIELD 14@->CODTAB +END + +STRINGA +BEGIN + KEY "CODICE FISCALE" + PROMPT 15 11 "" + FIELD 6->COFI +END + +STRINGA +BEGIN + KEY "COGNOME, DENOMINAZIONE O RAGIONE SOCIALE" + PROMPT 2 15 "" + FIELD 6->RAGSOC[1,30] +END + +STRINGA +BEGIN + KEY "NOME" + PROMPT 54 15 "" + FIELD 6->RAGSOC[31,-1] +END + +LISTA +BEGIN + KEY "Tipo anagrafica" + FIELD 6->TIPOA + ITEM "F| " MESSAGE ENABLE,1@|DISABLE,2@ + ITEM "G| " MESSAGE ENABLE,2@|DISABLE,1@ +END + +GRUPPO +BEGIN + KEY "Persone fisiche" + PROMPT 0 0 "" + GROUP 1 + FLAGS "DH" +END + +DATA +BEGIN + KEY "DATA DI NASCITA" + PROMPT 2 17 "" + GROUP 1 + FLAGS "DH" + PICTURE "# # ~ # # ~ ~ # # #" + FIELD 8->DATANASC +END + +STRINGA +BEGIN + KEY "SESSO (M o F)" + PROMPT 19 17 "" + GROUP 1 + FLAGS "DH" + FIELD 8->SESSO +END + +STRINGA +BEGIN + KEY "COMUNE (o Stato estero) DI NASCITA" + PROMPT 24 17 "" + GROUP 1 + FLAGS "DH" + FIELD 113@->DENCOM +END + +STRINGA +BEGIN + KEY "PROV. DI NASCITA (sigla)" + PROMPT 68 17 "" + GROUP 1 + FLAGS "DH" + FIELD 113@->PROVCOM +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: COMUNE" + PROMPT 8 19 "" + FIELD 213@->DENCOM +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: PROV. (sigla)" + PROMPT 36 19 "" + FIELD 213@->PROVCOM +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: VIA" + PROMPT 41 19 "" + FIELD 6->INDRF + FIELD 6->INDRES +END + +STRINGA +BEGIN + KEY "DOMICILIO FISCALE: NUMERO CIVICO" + PROMPT 70 19 "" + FIELD 6->CIVRF + FIELD 6->CIVRES +END + +STRINGA +BEGIN + KEY "PARTITA IVA" + PROMPT 12 47 "" + FIELD 6->PAIV +END + +NUMERO +BEGIN + KEY "ANNO" + PROMPT 14 51 "" + PICTURE "~~@@" + FIELD CODTAB[6,9] +END + +NUMERO +BEGIN + KEY "IMPORTO TRIBUTO" + PROMPT 20 51 "" + MESSAGE COPY,10@ + PICTURE "###.###.###~~~" + FIELD R0 +END + +NUMERO +BEGIN + KEY "INTERESSI" + PROMPT 40 51 "" + MESSAGE ADD,10@ + PICTURE "###.###.###~~~" + FIELD R1 +END + +NUMERO +BEGIN + KEY "TOTALE" + PROMPT 54 51 "" + GROUP 10 + PICTURE "###.###.###~~~" +END + +NUMERO +BEGIN + KEY "TOTALE (in lettere)" + PROMPT 5 55 "" + GROUP 10 + PICTURE "LETTERE" +END + +NUMERO +BEGIN + KEY "TOTALE (in cifre)" + PROMPT 54 55 "" + GROUP 10 + PICTURE "###.###.###~~~" +END + +DATA +BEGIN + KEY "DATA: giorno - mese - anno" + PROMPT 12 60 "" + PICTURE "@@ ~ @@~~~@@" + FIELD D0 +END + +END + +END