From 313319491be2d0b00af2fad10c85996cd25b914a Mon Sep 17 00:00:00 2001 From: guy Date: Fri, 27 Jun 2014 16:10:25 +0000 Subject: [PATCH] Prima patch PA git-svn-id: svn://10.65.10.50/branches/R_10_00@22975 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- pa/pa0100.cpp | 330 +++++++++++++++++++++++++++++++++++++++---------- pa/pa0100a.h | 14 +++ pa/pa0100a.uml | 95 ++++++++++++++ pa/paf.ini | 51 +++++++- 4 files changed, 425 insertions(+), 65 deletions(-) create mode 100644 pa/pa0100a.h create mode 100644 pa/pa0100a.uml diff --git a/pa/pa0100.cpp b/pa/pa0100.cpp index bd7c53cc0..18e4e43e0 100644 --- a/pa/pa0100.cpp +++ b/pa/pa0100.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -6,10 +7,10 @@ #include "../ve/velib05.h" #include "pa0.h" +#include "pa0100a.h" #include "../fe/felib.h" -#include #include ///////////////////////////////////////////////////////////////////////////////////// @@ -33,6 +34,7 @@ protected: const TString& var2str(const TVariant& var) const; public: + void reset() { _fields.destroy(); } void set(const char* fld, const TVariant& var); void set(const char* fld, long var); void set(const char* fld, const char* var); @@ -237,6 +239,101 @@ TPaf_record::TPaf_record(const char* table) : _table(table), _key(15, ',') CHECKS(_key.full(), "Invalid primary key for table ", table); } +///////////////////////////////////////////////////////////////////////////////////// +// TPa_mask +///////////////////////////////////////////////////////////////////////////////////// + +class TPA_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void fill(); + +public: + TPA_mask() : TAutomask("pa0100a") {} +}; + +void TPA_mask::fill() +{ + TSheet_field& docs = sfield(F_DOCS); + TString_array& sht = docs.rows_array(); + docs.hide(); + + sht.destroy(); + + TString query; + query << "USE 17 SELECT (PADESTIN!='')&&(PARIFAMM!='')" + << "\nJOIN 20 INTO TIPOCF=TIPOCF CODCF==CODCF" + << "\nFROM TIPOCF=C\nTO TIPOCF=C"; + + TISAM_recordset clifo_pa(query); + const TRecnotype n = clifo_pa.items(); + if (n > 0) + { + const TDate dal = get(F_DATAINI); + TProgress_monitor pi(n, NULL); + for (bool okc = clifo_pa.move_first(); okc; okc = clifo_pa.move_next()) + { + if (!pi.addstatus(1)) + break; + + query.cut(0); + query << "USE 33 KEY 2\nSELECT (BETWEEN(STATO,2,8))"; + if (!get_bool(F_SHOWALL)) + query << "&&(PAF!='X')"; + query << "\nFROM TIPOCF=C CODCF=#CLIENTE PROVV=D ANNO=2014 DATADOC=" << dal.date2ansi() + << "\nTO TIPOCF=C CODCF=#CLIENTE PROVV=D"; + TISAM_recordset doc_pa(query); + doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF)); + for (bool okd = doc_pa.move_first(); okd; okd = doc_pa.move_next()) + { + const TTipo_documento& td = cached_tipodoc(doc_pa.get(DOC_TIPODOC).as_string()); + if (!td.is_fattura()) + continue; + TToken_string* row = new TToken_string; + *row = doc_pa.get(DOC_PAF).as_bool() ? " " : "X"; + row->add(doc_pa.get(DOC_ANNO).as_int(), 1); + row->add(doc_pa.get(DOC_CODNUM).as_string()); + row->add(doc_pa.get(DOC_NDOC).as_int()); + row->add(doc_pa.get(DOC_DATADOC).as_date()); + row->add(clifo_pa.get(CFV_CODCF).as_int()); + row->add(clifo_pa.get("20."CLI_RAGSOC).as_string()); + row->add(clifo_pa.get(CFV_PADESTIN).as_string()); + row->add(clifo_pa.get(CFV_PARIFAMM).as_string()); + + sht.add(row); + } + } + } + docs.force_update(); + docs.show(); +} + +bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_DATAINI: + if (e == fe_init) + o.set("01-06-2014"); + if (e == fe_modify) + fill(); + break; + case F_SHOWALL: + if (e == fe_modify) + fill(); + break; + case F_DOCS: + if (e == fe_init) + fill(); + if (e == se_query_add || e == se_query_del) + return false; + break; + default: break; + } + return true; +} + ///////////////////////////////////////////////////////////////////////////////////// // TDoc2Paf ///////////////////////////////////////////////////////////////////////////////////// @@ -266,7 +363,9 @@ public: const TString& TDoc2Paf::cessionario(const TDocumento& doc) { - return doc.clifor().get(CLI_DESTIN); + const TString& cess = doc.clifor().vendite().get(CFV_PADESTIN); + CHECK(cess.full(), "Destinatario fattura elettronica non valido"); + return cess; } const TString& TDoc2Paf::fattura(const TDocumento& doc) @@ -280,11 +379,10 @@ const TString& TDoc2Paf::fattura(const TDocumento& doc) void TDoc2Paf::elabora(TDocumentoEsteso& doc) { const TFirm& firm = prefix().firm(); - TString8 prginv; prginv.format("%05d", ini_get_int("./paf.ini", "Main", "PRGINV") + 1); - ini_set_string("./paf.ini", "Main", "PRGINV", prginv); + TString8 prginv; prginv.format("%08d", ini_get_int("./paf.ini", "Main", "PRGINV") + 1); - const TString8 hfatt = cessionario(doc); - const TString80 bfatt = fattura(doc); + const TString8 hfatt = cessionario(doc); // Codice univoco di 6 caratteri dell'ufficio P.A. + const TString80 bfatt = fattura(doc); // Codice univoco di 20 caratteri del documento // TPaf_record paf0100f("PAF0100F"); @@ -297,6 +395,7 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) paf0100f.set("P1PRGINV", prginv); paf0100f.set("P1FTRASM", "SDI10"); + paf0100f.set("P1CDEST", hfatt); TString80 tel; tel << firm.get(NDT_PTEL) << firm.get(NDT_TEL); paf0100f.set("P1TELEF", tel); paf0100f.set("P1MAIL", firm.get(NDT_MAIL)); @@ -308,7 +407,7 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) paf0200f.set("P2KHFATT", hfatt); paf0200f.set("P2KBFATT", bfatt); paf0200f.remove(); - paf0200f.set("P2PAESE", paf0100f.get("P1PAESE")); + paf0200f.set("P2PAESE", paf0100f.get("P1PAESE")); // Sempre IT paf0200f.set("P2CODICE", _ditta.partita_IVA()); paf0200f.set("P2FISCA", _ditta.codice_fiscale()); if (_ditta.fisica()) @@ -328,6 +427,7 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) paf0200f.set("P2SPROV", _ditta.provincia_residenza()); paf0200f.set("P2SNAZI", paf0100f.get("P1PAESE")); + /* // DatiStabile paf0200f.set("P2OINDI", _ditta.indirizzo_residenza()); paf0200f.set("P2OCOMU", _ditta.comune_residenza()); @@ -335,16 +435,18 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) paf0200f.set("P2ONAZI", paf0100f.get("P1PAESE")); paf0200f.insert(); + */ + // // - TAnagrafica cliente('C', doc.get_long(DOC_CODCF)); + TAnagrafica cliente(doc.clifor()); TPaf_record paf0400f("PAF0400F"); - paf0400f.set("P4KHFATT", paf0100f.get("P1KHFATT")); - paf0400f.set("P4KBFATT", paf0100f.get("P1KBFATT")); + paf0400f.set("P4KHFATT", hfatt); + paf0400f.set("P4KBFATT", bfatt); paf0400f.remove(); - paf0400f.set("P4PAESE", paf0100f.get("P1PAESE")); + paf0400f.set("P4PAESE", "IT"); paf0400f.set("P4CODICE", cliente.partita_IVA()); paf0400f.set("P4FISCA", cliente.codice_fiscale()); if (cliente.fisica()) @@ -368,17 +470,40 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) // TPaf_record paf0700f("PAF0700F"); - paf0700f.set("P7KHFATT", paf0100f.get("P1KHFATT")); - paf0700f.set("P7KBFATT", paf0100f.get("P1KBFATT")); - paf0700f.set("P7TDOC", doc.tipo().codice()); + paf0700f.set("P7KHFATT", hfatt); + paf0700f.set("P7KBFATT", bfatt); + paf0700f.remove(); + paf0700f.set("P7TDOC", doc.is_nota_credito() ? "TD04" : "TD01"); paf0700f.set("P7DIVISA", "EUR"); // Aggiungere codice ISO 4217 a tabella divise (%VAL) paf0700f.set("P7DATA", doc.data()); paf0700f.set("P7NUME", doc.numero()); paf0700f.insert(); + // + TPaf_record paf0900f("PAF0900F"); + paf0900f.set("P9KHFATT", hfatt); + paf0900f.set("P9KBFATT", bfatt); + paf0900f.remove(); + TToken_string sconto(doc.get(DOC_SCONTOPERC), '+'); + sconto.strip_spaces(); + long nlin_sconto = 1; + FOR_EACH_TOKEN(sconto, str) + { + const real sconto = str; + if (!sconto.is_zero()) + { + paf0900f.set("P9NLIN", nlin_sconto++); + paf0900f.set("P9TSCO", sconto > ZERO ? "SC" : "MG"); + paf0900f.set("P9PSCO", sconto); + } + paf0900f.insert(); + } + // + TPaf_record paf2700f("PAF2700F"); - paf2700f.set("PQKHFATT", paf0100f.get("P1KHFATT")); - paf2700f.set("PQKBFATT", paf0100f.get("P1KBFATT")); + paf2700f.set("PQKHFATT", hfatt); + paf2700f.set("PQKBFATT", bfatt); + paf2700f.remove(); paf2700f.set("PQITDOC", doc.totale_doc()); paf2700f.set("PQCAUS", doc.tipo().descrizione()); paf2700f.set("PQART73", true); @@ -387,14 +512,18 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) // TPaf_record paf1800f("PAF1800F"); - paf1800f.set("PIKHFATT", paf0100f.get("P1KHFATT")); - paf1800f.set("PIKBFATT", paf0100f.get("P1KBFATT")); + paf1800f.set("PIKHFATT", hfatt); + paf1800f.set("PIKBFATT", bfatt); paf1800f.remove(); // Cancella tutte le righe documento - long pinlin = 1; + long pinlin = 0; + const int nrows = doc.rows(); FOR_EACH_PHYSICAL_RDOC(doc, r, rdoc) { - paf1800f.set("PINLIN", pinlin++); + paf1800f.reset(); + paf1800f.set("PIKHFATT", hfatt); + paf1800f.set("PIKBFATT", bfatt); + paf1800f.set("PINLIN", ++pinlin); paf1800f.set("PIDESC", rdoc->get(RDOC_DESCR)); if (rdoc->is_merce()) { @@ -404,6 +533,41 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) paf1800f.set("PIPRZT", rdoc->importo(true, false)); const real aliquota = cache().get("%IVA", rdoc->get(RDOC_CODIVA), "R0"); paf1800f.set("PIAIVA", aliquota); + + // + TPaf_record paf2000f("PAF2000F"); + paf2000f.set("PJKHFATT", hfatt); + paf2000f.set("PJKBFATT", bfatt); + paf2000f.remove(); + TToken_string sconto(rdoc->get(RDOC_SCONTO), '+'); + sconto.strip_spaces(); + if (sconto.items()) + { + /* + long nlin_sconto = 1; + FOR_EACH_TOKEN(sconto, str) + { + const real perc = str; + if (!perc.is_zero()) + { + paf2000f.set("PJNLIN", nlin_sconto++); + paf2000f.set("PJTSCO", perc > ZERO ? "SC" : "MG"); + paf2000f.set("PJPSCO", perc); + paf2000f.insert(); + } + } + */ + const real perc = sconto; + if (!perc.is_zero()) + { + paf2000f.set("PJKNLIN", pinlin); + paf2000f.set("PJTSCO", perc > ZERO ? "SC" : "MG"); + paf2000f.set("PJPSCO", perc); + paf2000f.insert(); + } + } + + // } paf1800f.insert(); } @@ -411,8 +575,8 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) // TPaf_record paf2200f("PAF2200F"); - paf2200f.set("PLKHFATT", paf0100f.get("P1KHFATT")); - paf2200f.set("PLKBFATT", paf0100f.get("P1KBFATT")); + paf2200f.set("PLKHFATT", hfatt); + paf2200f.set("PLKBFATT", bfatt); paf2200f.remove(); // Cancella tutte le righe di riepilogo IVA TAssoc_array& tiva = doc.tabella_iva(false); @@ -421,19 +585,71 @@ void TDoc2Paf::elabora(TDocumentoEsteso& doc) const TRiepilogo_iva& riva = *(const TRiepilogo_iva*)itm; const real aliquota = riva.cod_iva().percentuale(); paf2200f.set("PLALIVA", aliquota); + const TString& tipo = riva.cod_iva().tipo(); + if (tipo.full()) + { + if (tipo == "NS") paf2200f.set("PLNATU", "N2"); else + if (tipo == "NI") paf2200f.set("PLNATU", "N3"); else + if (tipo == "ES") paf2200f.set("PLNATU", "N4"); + } paf2200f.set("PLIMPO", riva.imponibile()); paf2200f.set("PLIMPS", riva.imposta()); - const char* eiva = doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA) ? "E" : "I"; + // Esigibilità IVA: immediata o no? + const char* eiva = doc.get_bool(DOC_LIQDIFF) || doc.get_bool(DOC_IVAXCASSA) ? "D" : "I"; paf2200f.set("PLEIVA", eiva); + paf2200f.insert(); } // + + // + TPaf_record paf2400f("PAF2400F"); + paf2400f.set("PNKHFATT", hfatt); + paf2400f.set("PNKBFATT", bfatt); + paf2400f.remove(); // Cancella i dati pagamento + const TPagamento& pag = doc.pagamento(); + + doc.scadenze_recalc(); // Ricalcola array delle rate + TString_array& scad = doc.scadenze(); + const int nrate = scad.items(); // Conta rate generate + paf2400f.set("PNCPAG", nrate > 1 ? "TP01" : "TP02"); // A rate (TP01) o una soluzione(TP02)? + paf2400f.insert(); + + TPaf_record paf2500f("PAF2500F"); + paf2500f.set("POKHFATT", hfatt); + paf2500f.set("POKBFATT", bfatt); + paf2500f.remove(); // Cancella tutte le rate + for (int nr = 0; nr < nrate; nr++) + { + paf2500f.set("POKNLIN", long(nr+1)); // Numero riga + const char* mod_pag = "MP01"; // Modalità di pagamento + const int n = nr < pag.n_rate() ? nr : 0; // Si assicura che il numero riga sia accettabile + switch (pag.tipo_rata(n)) + { + case _bonfico: mod_pag = "MP05"; break; // bonifico + case _rid : mod_pag = "MP09"; break; // RID + case _ric_ban: mod_pag = "MP12"; break; // RIBA + default : mod_pag = "MP01"; break; // contanti + } + paf2500f.set("POMPAGAM", mod_pag); + + TToken_string& riga = scad.row(nr); // Data|Importo + paf2500f.set("POUSCAD", TDate(riga.get(0))); // Data scadenza + paf2500f.set("POIMPO", real(riga.get())); // Importo rata + paf2500f.set("POCPAG", pag.code()); // Codice pagamento di CAMPO + paf2500f.insert(); + } + + // + + ini_set_string("./paf.ini", "Main", "PRGINV", prginv); } void TDoc2Paf::elabora(const TRectype& rec) { - TDocumentoEsteso doc(rec); - elabora(doc); + TDocumentoEsteso doc; + if (doc.read(rec) == NOERR) + elabora(doc); } void TDoc2Paf::elabora(const TDoc_key& key) @@ -489,51 +705,33 @@ void TDoc2Paf::main_loop() if (!is_batch) { - const char* title = TR("Fatture Pubblica Amministrazione"); - TArray_sheet sht(-1, 3, 78, -3, - title, HR("@1|Anno|Cod.|Numero|Destinatario|Cliente|Ragione Sociale@50")); + TPA_mask mask; - TISAM_recordset clifo_pa("USE 20 SELECT PADESTIN!=''\nTO TIPOCF=C"); - const TRecnotype n = clifo_pa.items(); - if (n > 0) + for (;;) { - TProgress_monitor pi(n, title); - for (bool okc = clifo_pa.move_first(); okc; okc = clifo_pa.move_next()) + if (mask.run() == K_ENTER) { - if (!pi.addstatus(1)) - break; - - TISAM_recordset doc_pa("USE 33 KEY 2\nSELECT BETWEEN(STATO,2,5)\nFROM TIPOCF=C CODCF=#CLIENTE\nTO TIPOCF=C CODCF=#CLIENTE"); - doc_pa.set_var("#CLIENTE", clifo_pa.get(CLI_CODCF)); - for (bool okd = doc_pa.move_first(); okd; okd = doc_pa.move_next()) + TString_array& sht = mask.sfield(F_DOCS).rows_array(); + TProgress_monitor pi(sht.items(), NULL); + int ndocs = 0; + FOR_EACH_ARRAY_ROW(sht, r, riga) { - const TTipo_documento& td = cached_tipodoc(doc_pa.get(DOC_TIPODOC).as_string()); - if (!td.is_fattura()) - continue; - TToken_string* row = new TToken_string; - row->add(doc_pa.get(DOC_ANNO).as_int(), 1); - row->add(doc_pa.get(DOC_CODNUM).as_string()); - row->add(doc_pa.get(DOC_NDOC).as_int()); - row->add(clifo_pa.get(CLI_PADESTIN).as_string()); - const long codcf = doc_pa.get(DOC_CODCF).as_int(); - row->add(codcf); - TString8 key; key.format("C|%ld", codcf); - row->add(cache().get(LF_CLIFO, key, CLI_RAGSOC)); - - sht.add(row); + if (!pi.add_status(1)) + break; + if (riga->starts_with("X")) + { + const int anno = riga->get_int(1); + const long ndoc = riga->get_long(3); + const TFixed_string codnum(riga->get(2)); // lascio sapientemente per ultima la get di una stringa + const TDoc_key key(anno, codnum, ndoc); + elabora(key); + ndocs++; + } } + message_box(FR("Sono stati elborati %d documenti"), ndocs); } - } - while (sht.run() == K_ENTER) - { - FOR_EACH_CHECKED_ROW(sht, r, riga) - { - const int anno = riga->get_int(1); - const long ndoc = riga->get_long(3); - const TFixed_string codnum(riga->get(2)); // lascio sapientemente per ultima la get di una stringa - const TDoc_key key(anno, codnum, ndoc); - elabora(key); - } + else + break; } } } @@ -658,6 +856,10 @@ bool TDoc2Paf::create() else return cantread_box(n); + TRectype cfven(LF_CFVEN); + if (cfven.type(CFV_PARIFAMM) != _alfafld) + return error_box(TR("Database non convertito per fatturazione elettronica")); + _ditta.init(LF_NDITTE, prefix().get_codditta()); return TSkeleton_application::create(); diff --git a/pa/pa0100a.h b/pa/pa0100a.h new file mode 100644 index 000000000..6ce9dcc48 --- /dev/null +++ b/pa/pa0100a.h @@ -0,0 +1,14 @@ +#define F_DATAINI 201 +#define F_SHOWALL 202 +#define F_DOCS 210 + +#define S_SELECTED 101 +#define S_ANNO 102 +#define S_CODNUM 103 +#define S_NDOC 104 +#define S_DATADOC 105 +#define S_CLIENTE 106 +#define S_RAGSOC 107 +#define S_UFFICIO 108 +#define S_RIFAMM 109 + diff --git a/pa/pa0100a.uml b/pa/pa0100a.uml new file mode 100644 index 000000000..9ab6cf280 --- /dev/null +++ b/pa/pa0100a.uml @@ -0,0 +1,95 @@ +#include "pa0100a.h" + +TOOLBAR "topbar" 0 0 0 2 +#include +ENDPAGE + +PAGE "Fatture Pubblica Amministrazione" 0 2 0 0 + +DATE F_DATAINI +BEGIN + PROMPT 1 0 "Data iniziale" + CHECKTYPE REQUIRED +END + +BOOLEAN F_SHOWALL +BEGIN + PROMPT 40 0 "Mostra anche i documenti già inviati" +END + +SPREADSHEET F_DOCS +BEGIN + PROMPT 0 1 "" + ITEM "@1" + ITEM "Anno" + ITEM "Cod.\nNum.@4" + ITEM "Num.\nDoc.@7" + ITEM "Data\nDoc.@10" + ITEM "Cliente" + ITEM "Ragione Sociale@50" + ITEM "Ufficio" + ITEM "Riferimento\nAmministrazione@20" +END + +ENDPAGE + +ENDMASK + +PAGE "Documento" -1 -1 78 8 + +BOOLEAN S_SELECTED +BEGIN + PROMPT 1 1 "Da elaborare" +END + +NUMBER S_ANNO 4 +BEGIN + PROMPT 1 2 "Anno " + FLAGS "D" +END + +STRING S_CODNUM 4 +BEGIN + PROMPT 21 2 "Numerazione " + FLAGS "D" +END + +NUMBER S_NDOC 7 +BEGIN + PROMPT 41 2 "Numero " + FLAGS "D" +END + +DATE S_DATADOC +BEGIN + PROMPT 61 2 "Data " + FLAGS "D" +END + +NUMBER S_CLIENTE 6 +BEGIN + PROMPT 1 3 "Cliente " + FLAGS "D" +END + +STRING S_RAGSOC 50 +BEGIN + PROMPT 21 3 "" + FLAGS "D" +END + +STRING S_UFFICIO 6 +BEGIN + PROMPT 1 4 "" + FLAGS "D" +END + +STRING S_RIFAMM 20 +BEGIN + PROMPT 21 4 "" + FLAGS "D" +END + +ENDPAGE + +ENDMASK diff --git a/pa/paf.ini b/pa/paf.ini index b426c0b6b..a138f89b5 100644 --- a/pa/paf.ini +++ b/pa/paf.ini @@ -3,7 +3,7 @@ P1KHFATT = VARCHAR(20) P1KBFATT = VARCHAR(20) P1PAESE = VARCHAR(2) P1CODICE = VARCHAR(28) -P1PRGINV = INTEGER +P1PRGINV = VARCHAR(10) P1FTRASM = VARCHAR(5) P1CDEST = VARCHAR(6) P1TELEF = VARCHAR(12) @@ -79,6 +79,19 @@ P7ERRORE = VARCHAR(5) INDEX_1 = P7KHFATT,P7KBFATT +[PAF0900F] +P9KHFATT = VARCHAR(20) +P9KBFATT = VARCHAR(20) +P9NLIN = INTEGER +P9TSCO = VARCHAR(2) +P9PSCO = NUMERIC +P9ISCO = NUMERIC + +P9GESTIONE = VARCHAR(1) + +INDEX_1 = P9KHFATT,P9KBFATT,P9NLIN + + [PAF1800F] PIKHFATT = VARCHAR(20) PIKBFATT = VARCHAR(20) @@ -96,6 +109,18 @@ PIERRORE = VARCHAR(5) INDEX_1 = PIKHFATT,PIKBFATT,PINLIN +[PAF2000F] +PJKHFATT = VARCHAR(20) +PJKBFATT = VARCHAR(20) +PJKNLIN = INTEGER +PJTSCO = VARCHAR(2) +PJPSCO = NUMERIC +PJISCO = NUMERIC + +PJGESTIONE = VARCHAR(1) + +INDEX_1 = PJKHFATT,PJKBFATT,PJKNLIN + [PAF2200F] PLKHFATT = VARCHAR(20) PLKBFATT = VARCHAR(20) @@ -110,6 +135,30 @@ PLERRORE = VARCHAR(5) INDEX_1 = PLKHFATT,PLKBFATT,PLALIVA,PLNATU +[PAF2400F] +PNKHFATT = VARCHAR(20) +PNKBFATT = VARCHAR(20) +PNCPAG = VARCHAR(4) + +PNGESTIONE = VARCHAR(1) +PNERRORE = VARCHAR(5) + +INDEX_1 = PNKHFATT,PNKBFATT + +[PAF2500F] +POKHFATT = VARCHAR(20) +POKBFATT = VARCHAR(20) +POKNLIN = INTEGER +POMPAGAM = VARCHAR(4) +POUSCAD = VARCHAR(10) +POIMPO = NUMERIC +POCPAG = VARCHAR(15) + +POGESTIONE = VARCHAR(1) +POERRORE = VARCHAR(5) + +INDEX_1 = POKHFATT,POKBFATT,POKNLIN + [PAF2700F] PQKHFATT = VARCHAR(20) PQKBFATT = VARCHAR(20)