From a27685b053faf77e73e3dd2ef5e5a0fde5fd36e6 Mon Sep 17 00:00:00 2001 From: angelo Date: Tue, 1 Sep 1998 13:57:37 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunta importazione descrizioni in lingua, testate contratti, corretti ammenicoli relativi all'importazione delle condizioni di vendita. git-svn-id: svn://10.65.10.50/trunk@7004 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ibm36/ibm36100.cpp | 177 +++++++++++++++++++++++++++++++++---------- ibm36/ibm36101.uml | 39 ++++++++++ ibm36/ibm36102.uml | 78 +++++++++++++++++++ ibm36/ibm36art.ini | 183 +++++++++++++++++++++++++++++++++++++++++++++ ibm36/ibm36cvn.ini | 4 +- ibm36/ibm36tab.ini | 84 +++++++++++++++++++++ 6 files changed, 524 insertions(+), 41 deletions(-) create mode 100755 ibm36/ibm36101.uml create mode 100755 ibm36/ibm36102.uml diff --git a/ibm36/ibm36100.cpp b/ibm36/ibm36100.cpp index 8dfee0e55..cd8324b6e 100755 --- a/ibm36/ibm36100.cpp +++ b/ibm36/ibm36100.cpp @@ -122,6 +122,7 @@ public: void mettilavirgola(TFile_text& file, TRecord_text& curr, const char* field, int len, int comma); void permille(TFile_text& file, TRecord_text& curr, const char* field); void machedata(TFile_text& file, TRecord_text& curr, const char* field); + void macheseqric(TFile_text& file, TRecord_text& curr, const char* field); void import_tables(const TFilename& name, TBrowsefile_field& bf); void import_clifor(const TFilename& name, TBrowsefile_field& bf); @@ -276,7 +277,8 @@ void TTrasfer36::import_tables(const TFilename& name, TBrowsefile_field& bf) abi.right_just(5, '0'); cab.right_just(5, '0'); - TString16 codtab = abi; + TString16 codtab; + codtab = abi; ban.put("CODTAB", codtab); if (ban.read() != NOERR) { @@ -329,17 +331,23 @@ void TTrasfer36::import_tables(const TFilename& name, TBrowsefile_field& bf) } } else - if (type == "A11") // File testate listini + if (type == "A11" || type == "A27") // File testate listini(A11) e contratti (A27) { const TString& ann = file.get_field(curr, "ANNULLATO"); if (ann != "A") { - file.add_field(curr, "TIPO", "L"); + file.add_field(curr, "TIPO", type == "A11" ? "L" : "C"); + + if (type == "A27") // ..trattasi di contratti... + { + const int tcf = atoi(file.get_field(curr, "TIPO ANAGRAFICA")); + file.add_field(curr, "TIPO ANAGRAFICA", tcf == 1 ? "C" : "F"); + } mettilavirgola(file, curr, "CAMBIO", 11, 5); machedata(file, curr, "INIZIO VALIDITA"); machedata(file, curr, "FINE VALIDITA"); machedata(file, curr, "DATA CAMBIO"); - // TBI: traduzione campo SEQRIC per la sequenza di ricerca + macheseqric(file, curr, "SEQUENZA RICERCA"); const int err = file.autosave(curr); if (err != NOERR) { @@ -382,6 +390,34 @@ void TTrasfer36::permille(TFile_text& file, TRecord_text& curr, const char* fiel } } +void TTrasfer36::macheseqric(TFile_text& file, TRecord_text& curr, const char* field) +{ + TString16 seq(file.get_field(curr, field)); + const int l = seq.len(); + for (int i=0; i= 1 && tipo_record <= 4) // Descrizioni in lingua + { + const char stato_record = file.get_field(curr, "ANNULLATO")[0]; + if (stato_record == 'A') + continue; + // Il tipo record corrisponde ad una lingua fissa... ogni volta che se ne incontra una + // nuova si chiede all'utente in input a quale lingua corrisponde su EuroCAMPO + codlin = (TString&) languages[tipo_record-1]; + if (codlin.empty()) // Non esiste la corrispondenza? La chiedo all'utente... + { + msk_lng.set(100, (long)tipo_record); + msk_lng.run(); + codlin = msk_lng.get(101); + languages.add(codlin, tipo_record-1); // lo memorizzo al posto di quello vuoto + } + nriga = 1; + codart = file.get_field(curr, "CODICE PRIMARIO"); + des = file.get_field(curr, "DESCRIZIONE"); + des << " "; + des << file.get_field(curr, "ESTENSIONE DESCRIZIONE"); + des.strip_d_spaces(); + deslin.put("CODART", codart); + deslin.put("DESCR", des); + deslin.put("CODLIN", codlin); + deslin.put("NRIGA", nriga); + // Aggiunge sempre in coda perche' gli articoli possono essere mischiati + // al massimo pero' le lingue sono 4... + int err = NOERR; + while ((err = deslin.write()) == _isreinsert && nriga < 4) + { + nriga++; + deslin.put("NRIGA", nriga); + } + if (err == _isreinsert) // Se non e' riuscito ad aggiungerlo... forza la riscrittura al tipo_record... + { + deslin.put("NRIGA", tipo_record); // Non importa se i numeri riga non saranno esattamente in sequenza + err = deslin.rewrite(); // perche' i record array leggono ugualmente + } + //const int err = file.autosave(curr); + if (err != NOERR) + { + msg = "! Errore di scrittura sul file LF_DESLIN: "; + msg << err; + bf.add_line(msg); + } + else + valid++; + } } // Messaggio finale di elaborazione @@ -684,7 +777,9 @@ void TTrasfer36::import_anaart(const TFilename& name, TBrowsefile_field& bf) void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) { - TString msg,des,cod; + TMask msk_prm("ibm36102"); + TString msg,des,cod, camp_seq_ric; + bool camp_um, camp_sca, camp_sco; msg = "Importazione Condizioni di vendita"; TProgind pi(::fsize(name), msg, TRUE, TRUE); TFile_text file(name, "ibm36cvn.ini"); @@ -706,13 +801,16 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) if (pi.iscancelled()) break; - const char stato_record = file.get_field(curr, "ANNULLATO")[0]; - if (stato_record == 'A') // ANNULLATO is always defined ;-) - continue; - const char tipo_record = curr.type()[0]; int err = NOERR; - file.add_field(curr, "TIPO ARCHIVIO", "A"); // E' sempre tipo rticolo ??? waiting for Morena's call... + + if (tipo_record >= 'A' && tipo_record <= 'F') + { + const char stato_record = file.get_field(curr, "ANNULLATO")[0]; + if (stato_record == 'A') // ANNULLATO is always defined for records A through F + continue; + file.add_field(curr, "TIPO ARCHIVIO", "A"); // E' sempre tipo rticolo + } switch (tipo_record) { case 'A': // Righe listini. Non necessitano di scrittura testata @@ -738,7 +836,7 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) rcondv.put("TIPO", "L"); rcondv.put("CATVEN", file.get_field(curr,"CATEGORIA VENDITE")); rcondv.put("COD", file.get_field(curr,"CODICE LISTINO")); - rcondv.put("TIPORIGA", "A"); // See above... waiting for Morena's call ?? + rcondv.put("TIPORIGA", "A"); // See above... rcondv.put("CODRIGA", file.get_field(curr,"CHIAVE RIGA")); rcondv.put("UM", file.get_field(curr,"UNITA MISURA")); rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE")); @@ -769,6 +867,23 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) case 'D': file.add_field(curr, "TIPO", "O"); // Sostituisce cod = file.get_field(curr,"CODICE"); + // La prima volta chiede i parametri di default per la testata campagne: + // sequenza ricerca + // campagne per UM + // campagne a scaglioni + // campagne con sconti ed omaggi + if (camp_seq_ric.empty()) + { + msk_prm.run(); + camp_seq_ric = msk_prm.get(100); + camp_seq_ric << msk_prm.get(101); + camp_seq_ric << msk_prm.get(102); + camp_seq_ric << msk_prm.get(103); + camp_um = msk_prm.get_bool(104); + camp_sca = msk_prm.get_bool(105); + camp_sco = msk_prm.get_bool(106); + } + if (tipo_record == 'C') { mettilavirgola(file, curr, "QTA LIMITE SCAGLIONE", 11, 3); @@ -776,12 +891,13 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) mettilavirgola(file, curr, "PERCENTUALE SCONTO", 5, 2); mettilavirgola(file, curr, "PERCENTUALE PROVVIGIONE", 5, 2); mettilavirgola(file, curr, "QTA MERCE SCONTATA", 9, 3); - // Scrive o aggiorna tranquillamente i record di tipo "A": se vi sono + // Scrive o aggiorna tranquillamente i record di tipo "C": se vi sono // record omaggio vengono dopo, (cfr FLAG PRESENZA ARTICOLO OMAGGIO) err = file.autosave(rel, curr); // Scrive la testata... ma solo se non esiste: if (err == NOERR) { + rel.read(); if (!rel.is_first_match(LF_CONDV)) // ... non esiste la testata? { des = "Offerta "; @@ -794,6 +910,10 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) condv.put("DESCR", des); condv.put("VALIN",file.get_field(curr,"VALIDITA INIZIALE")); condv.put("VALFIN",file.get_field(curr,"VALIDITA FINALE")); + condv.put("SEQRIC", camp_seq_ric); + condv.put("GESTUM", camp_um); + condv.put("GESTSCAGL", camp_sca); + condv.put("GESTSCO", camp_sco); if (condv.write() != NOERR) // Allora la scrive... { msg.format("! Errore %d di scrittura testata offerte sul file LF_CONDV: %s", condv.status(), (const char*) cod); @@ -808,7 +928,7 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) rcondv.put("TIPO", "O"); rcondv.put("CATVEN", ""); rcondv.put("COD", cod); - rcondv.put("TIPORIGA", "A"); // See above... waiting for Morena's call ?? + rcondv.put("TIPORIGA", "A"); // See above... rcondv.put("CODRIGA", file.get_field(curr,"CHIAVE RIGA")); rcondv.put("UM", file.get_field(curr,"UNITA MISURA")); rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE")); @@ -834,7 +954,7 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) else valid++; break; - case 'E': // Righe contratti + case 'E': // Righe contratti: non necessitano di scrittura testata case 'F': { file.add_field(curr, "TIPO", "C"); // Sostituisce @@ -849,30 +969,9 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) mettilavirgola(file, curr, "PERCENTUALE SCONTO", 5, 2); mettilavirgola(file, curr, "PERCENTUALE PROVVIGIONE", 5, 2); mettilavirgola(file, curr, "QTA MERCE SCONTATA", 9, 3); - // Scrive o aggiorna tranquillamente i record di tipo "A": se vi sono + // Scrive o aggiorna tranquillamente i record di tipo "E": se vi sono // record omaggio vengono dopo, (cfr FLAG PRESENZA ARTICOLO OMAGGIO) err = file.autosave(rel, curr); - - // Scrive la testata... ma solo se non esiste: - if (err == NOERR) - { - if (!rel.is_first_match(LF_CONDV)) // ... non esiste la testata? - { - des = "Contratto "; - des << cod; - condv.put("TIPO","C"); - condv.put("CATVEN",""); - condv.put("TIPOCF",tipocf); - condv.put("CODCF", codcf); - condv.put("COD",cod); - condv.put("DESCR", des); - if (condv.write() != NOERR) // Allora la scrive... - { - msg.format("! Errore %d di scrittura testata contratti sul file LF_CONDV: %s", condv.status(), (const char*) cod); - bf.add_line(msg); - } - } - } } else { @@ -882,7 +981,7 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf) rcondv.put("CODCF", codcf); rcondv.put("CATVEN", ""); rcondv.put("COD", cod); - rcondv.put("TIPORIGA", "A"); // See above... waiting for Morena's call ?? + rcondv.put("TIPORIGA", "A"); // See above... rcondv.put("CODRIGA", file.get_field(curr,"CHIAVE RIGA")); rcondv.put("UM", file.get_field(curr,"UNITA MISURA")); rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE")); diff --git a/ibm36/ibm36101.uml b/ibm36/ibm36101.uml new file mode 100755 index 000000000..0f6afb6f7 --- /dev/null +++ b/ibm36/ibm36101.uml @@ -0,0 +1,39 @@ +PAGE "Corrispondenza Lingue" -1 -1 68 8 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "Scegliere il codice lingua di EuroCAMPO per la" +END + +TEXT DLG_NULL +BEGIN + PROMPT 1 2 "corrispondenza in importazione descrizioni in lingua" +END + +NUMBER 100 1 +BEGIN + PROMPT 1 3 "Cod. lingua " + FLAGS "D" +END + +STRING 101 1 +BEGIN + PROMPT 1 4 "Cod. Lingua EuroCAMPO " + USE %LNG + INPUT CODTAB 101 + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT 101 CODTAB + CHECKTYPE REQUIRED + WARNING "Codice lingua errato" +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -11 -1 "" +END + +ENDPAGE + +ENDMASK + diff --git a/ibm36/ibm36102.uml b/ibm36/ibm36102.uml new file mode 100755 index 000000000..bc169028d --- /dev/null +++ b/ibm36/ibm36102.uml @@ -0,0 +1,78 @@ +PAGE "Parametri Campagne" -1 -1 78 8 + +TEXT DLG_NULL +BEGIN + PROMPT 1 1 "Scegliere i parametri default per le testate delle campagne" +END + +LIST 100 10 +BEGIN + PROMPT 2 2 "Sequenza ricerca " + ITEM "A|Articoli" + ITEM "G|Gruppo M." + ITEM "S|Sottog. M." + ITEM "R|Ragg.fisc." +END + +LIST 101 10 +BEGIN + PROMPT 34 2 "" + ITEM "-|Nessuno" MESSAGE CLEAR,5@ + ITEM "A|Articoli" MESSAGE ENABLE,102 + ITEM "G|Gruppo M." MESSAGE ENABLE,102 + ITEM "S|Sottog. M." MESSAGE ENABLE,102 + ITEM "R|Ragg.fisc." MESSAGE ENABLE,102 + STR_EXPR (#THIS_FIELD=="-")||(#THIS_FIELD!=#100) + WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe" +END + +LIST 102 10 +BEGIN + PROMPT 49 2 "" + ITEM "-|Nessuno" MESSAGE CLEAR,103 + ITEM "A|Articoli" MESSAGE ENABLE,103 + ITEM "G|Gruppo M." MESSAGE ENABLE,103 + ITEM "S|Sottog. M." MESSAGE ENABLE,103 + ITEM "R|Ragg.fisc." MESSAGE ENABLE,103 + GROUP 5 + STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#100)&&(#THIS_FIELD!=#101)) + WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe" +END + +LIST 103 10 +BEGIN + PROMPT 64 2 "" + ITEM "-|Nessuno" + ITEM "A|Articoli" + ITEM "G|Gruppo M." + ITEM "S|Sottog. M." + ITEM "R|Ragg.fisc." + GROUP 5 + STR_EXPR (#THIS_FIELD=="-")||((#THIS_FIELD!=#100)&&(#THIS_FIELD!=#101)&&(#THIS_FIELD!=#102)) + WARNING "La sequenza di ricerca deve indicare quattro tipi diversi di righe" +END + +BOOLEAN 104 +BEGIN + PROMPT 2 3 "Gestione per UM " +END + +BOOLEAN 105 +BEGIN + PROMPT 2 4 "Gestione scaglioni " +END + +BOOLEAN 106 +BEGIN + PROMPT 2 5 "Gestione sconti " +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -11 -1 "" +END + +ENDPAGE + +ENDMASK + diff --git a/ibm36/ibm36art.ini b/ibm36/ibm36art.ini index ff28c745d..51d52745e 100755 --- a/ibm36/ibm36art.ini +++ b/ibm36/ibm36art.ini @@ -176,3 +176,186 @@ FIELD(41) = PESO FIELD(46) = PERCPROVV FIELD(47) = SCONTO +[RECORD 1] +LENGTH(0) = 1 +LENGTH(1) = 1 +LENGTH(2) = 19 +LENGTH(3) = 1 +LENGTH(4) = 19 +LENGTH(5) = 1 +LENGTH(6) = 19 +LENGTH(7) = 3 +LENGTH(8) = 2 +LENGTH(9) = 2 +LENGTH(10) = 35 +LENGTH(11) = 35 + +NAME(0) = ANNULLATO +NAME(1) = TIPO RECORD +NAME(2) = CODICE PRIMARIO +NAME(3) = SECONDO TIPO RECORD +NAME(4) = CODICE ALTERNATIVO +NAME(5) = TERZO TIPO RECORD +NAME(6) = SECONDO CODICE ALTERNATIVO +NAME(7) = CODICE LINEA +NAME(8) = CODICE STATISTICO +NAME(9) = FILLER +NAME(10) = DESCRIZIONE +NAME(11) = ESTENSIONE DESCRIZIONE + +POSITION(0) = 0 +POSITION(1) = 1 +POSITION(2) = 2 +POSITION(3) = 21 +POSITION(4) = 22 +POSITION(5) = 41 +POSITION(6) = 42 +POSITION(7) = 61 +POSITION(8) = 64 +POSITION(9) = 66 +POSITION(10) = 68 +POSITION(11) = 103 + +FIELD(1) = NRIGA +FIELD(2) = CODART +FIELD(3) = CODLIN +FIELD(10) = DESCR +USE = 51 + +[RECORD 2] +LENGTH(0) = 1 +LENGTH(1) = 1 +LENGTH(2) = 19 +LENGTH(3) = 1 +LENGTH(4) = 19 +LENGTH(5) = 1 +LENGTH(6) = 19 +LENGTH(7) = 3 +LENGTH(8) = 2 +LENGTH(9) = 2 +LENGTH(10) = 35 +LENGTH(11) = 35 + +NAME(0) = ANNULLATO +NAME(1) = TIPO RECORD +NAME(2) = CODICE PRIMARIO +NAME(3) = SECONDO TIPO RECORD +NAME(4) = CODICE ALTERNATIVO +NAME(5) = TERZO TIPO RECORD +NAME(6) = SECONDO CODICE ALTERNATIVO +NAME(7) = CODICE LINEA +NAME(8) = CODICE STATISTICO +NAME(9) = FILLER +NAME(10) = DESCRIZIONE +NAME(11) = ESTENSIONE DESCRIZIONE + +POSITION(0) = 0 +POSITION(1) = 1 +POSITION(2) = 2 +POSITION(3) = 21 +POSITION(4) = 22 +POSITION(5) = 41 +POSITION(6) = 42 +POSITION(7) = 61 +POSITION(8) = 64 +POSITION(9) = 66 +POSITION(10) = 68 +POSITION(11) = 103 + +FIELD(1) = NRIGA +FIELD(2) = CODART +FIELD(3) = CODLIN +FIELD(10) = DESCR +USE = 51 + +[RECORD 3] +LENGTH(0) = 1 +LENGTH(1) = 1 +LENGTH(2) = 19 +LENGTH(3) = 1 +LENGTH(4) = 19 +LENGTH(5) = 1 +LENGTH(6) = 19 +LENGTH(7) = 3 +LENGTH(8) = 2 +LENGTH(9) = 2 +LENGTH(10) = 35 +LENGTH(11) = 35 + +NAME(0) = ANNULLATO +NAME(1) = TIPO RECORD +NAME(2) = CODICE PRIMARIO +NAME(3) = SECONDO TIPO RECORD +NAME(4) = CODICE ALTERNATIVO +NAME(5) = TERZO TIPO RECORD +NAME(6) = SECONDO CODICE ALTERNATIVO +NAME(7) = CODICE LINEA +NAME(8) = CODICE STATISTICO +NAME(9) = FILLER +NAME(10) = DESCRIZIONE +NAME(11) = ESTENSIONE DESCRIZIONE + +POSITION(0) = 0 +POSITION(1) = 1 +POSITION(2) = 2 +POSITION(3) = 21 +POSITION(4) = 22 +POSITION(5) = 41 +POSITION(6) = 42 +POSITION(7) = 61 +POSITION(8) = 64 +POSITION(9) = 66 +POSITION(10) = 68 +POSITION(11) = 103 + +FIELD(1) = NRIGA +FIELD(2) = CODART +FIELD(3) = CODLIN +FIELD(10) = DESCR +USE = 51 + +[RECORD 4] +LENGTH(0) = 1 +LENGTH(1) = 1 +LENGTH(2) = 19 +LENGTH(3) = 1 +LENGTH(4) = 19 +LENGTH(5) = 1 +LENGTH(6) = 19 +LENGTH(7) = 3 +LENGTH(8) = 2 +LENGTH(9) = 2 +LENGTH(10) = 35 +LENGTH(11) = 35 + +NAME(0) = ANNULLATO +NAME(1) = TIPO RECORD +NAME(2) = CODICE PRIMARIO +NAME(3) = SECONDO TIPO RECORD +NAME(4) = CODICE ALTERNATIVO +NAME(5) = TERZO TIPO RECORD +NAME(6) = SECONDO CODICE ALTERNATIVO +NAME(7) = CODICE LINEA +NAME(8) = CODICE STATISTICO +NAME(9) = FILLER +NAME(10) = DESCRIZIONE +NAME(11) = ESTENSIONE DESCRIZIONE + +POSITION(0) = 0 +POSITION(1) = 1 +POSITION(2) = 2 +POSITION(3) = 21 +POSITION(4) = 22 +POSITION(5) = 41 +POSITION(6) = 42 +POSITION(7) = 61 +POSITION(8) = 64 +POSITION(9) = 66 +POSITION(10) = 68 +POSITION(11) = 103 + +FIELD(1) = NRIGA +FIELD(2) = CODART +FIELD(3) = CODLIN +FIELD(10) = DESCR +USE = 51 diff --git a/ibm36/ibm36cvn.ini b/ibm36/ibm36cvn.ini index e8bc04508..45db985a3 100755 --- a/ibm36/ibm36cvn.ini +++ b/ibm36/ibm36cvn.ini @@ -334,7 +334,7 @@ NAME(4) = NUMERO CONTRATTO NAME(5) = TIPO ARCHIVIO NAME(6) = CHIAVE RIGA NAME(7) = CODICE LOTTO -NAME(8) = UNITA DI MISURA +NAME(8) = UNITA MISURA NAME(9) = NUMERO SCAGLIONE NAME(10) = QTA LIMITE SCAGLIONE NAME(11) = PREZZO VENDITA @@ -411,7 +411,7 @@ NAME(4) = NUMERO CONTRATTO NAME(5) = TIPO ARCHIVIO NAME(6) = CHIAVE RIGA NAME(7) = CODICE LOTTO -NAME(8) = UNITA DI MISURA +NAME(8) = UNITA MISURA NAME(9) = NUMERO SCAGLIONE NAME(10) = CODICE ARTICOLO OMAGGIO NAME(11) = CODICE LOTTO TAGLIA diff --git a/ibm36/ibm36tab.ini b/ibm36/ibm36tab.ini index a5e6dec5f..34ec2106d 100755 --- a/ibm36/ibm36tab.ini +++ b/ibm36/ibm36tab.ini @@ -44,6 +44,90 @@ POSITION(9) = 129 POSITION(10) = 134 USE = %BAN +[RECORD A27] +LENGTH(0) = 1 +LENGTH(1) = 3 +LENGTH(2) = 1 +LENGTH(3) = 6 +LENGTH(4) = 2 +LENGTH(5) = 4 +LENGTH(6) = 30 +LENGTH(7) = 3 +LENGTH(8) = 11 +LENGTH(9) = 6 +LENGTH(10) = 6 +LENGTH(11) = 2 +LENGTH(12) = 1 +LENGTH(13) = 4 +LENGTH(14) = 1 +LENGTH(15) = 1 +LENGTH(16) = 1 +LENGTH(17) = 1 +LENGTH(18) = 6 +LENGTH(19) = 1 +LENGTH(20) = 1 + +NAME(0) = ANNULLATO +NAME(1) = TIPO +NAME(2) = TIPO ANAGRAFICA +NAME(3) = CODICE CLIENTE +NAME(4) = NUMERO CONTRATTO +NAME(5) = FILLER +NAME(6) = DESCRIZIONE +NAME(7) = CODICE DIVISA +NAME(8) = CAMBIO +NAME(9) = INIZIO VALIDITA +NAME(10) = FINE VALIDITA +NAME(11) = UNUSED +NAME(12) = FLAG LORDO +NAME(13) = SEQUENZA RICERCA +NAME(14) = GESTIONE UM +NAME(15) = GESTIONE SCAGLIONI +NAME(16) = GESTIONE SCONTI +NAME(17) = TIPO GESTIONE +NAME(18) = DATA CAMBIO +NAME(19) = VALIDITA CAMPAGNA +NAME(20) = CONTRATTO OBBLIGATORIO + +POSITION(0) = 0 +POSITION(1) = 1 +POSITION(2) = 4 +POSITION(3) = 5 +POSITION(4) = 11 +POSITION(5) = 13 +POSITION(6) = 17 +POSITION(7) = 47 +POSITION(8) = 50 +POSITION(9) = 56 +POSITION(10) = 62 +POSITION(11) = 68 +POSITION(12) = 70 +POSITION(13) = 71 +POSITION(14) = 75 +POSITION(15) = 76 +POSITION(16) = 77 +POSITION(17) = 78 +POSITION(18) = 79 +POSITION(19) = 85 +POSITION(20) = 86 + +FIELD(1) = TIPO +FIELD(2) = TIPOCF +FIELD(3) = CODCF +FIELD(4) = COD +FIELD(6) = DESCR +FIELD(7) = CODVAL +FIELD(8) = CAMBIO +FIELD(9) = VALIN +FIELD(10) = VALFIN +FIELD(13) = SEQRIC +FIELD(14) = GESTUM +FIELD(15) = GESTSCAGL +FIELD(16) = GESTSCO +FIELD(18) = DATACAM +FIELD(20) = OBBLIG +USE = 52 + [RECORD A11] LENGTH(0) = 1 LENGTH(1) = 3