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
This commit is contained in:
angelo 1998-09-01 13:57:37 +00:00
parent 11f8358b10
commit a27685b053
6 changed files with 524 additions and 41 deletions

View File

@ -122,6 +122,7 @@ public:
void mettilavirgola(TFile_text& file, TRecord_text& curr, const char* field, int len, int comma); 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 permille(TFile_text& file, TRecord_text& curr, const char* field);
void machedata(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_tables(const TFilename& name, TBrowsefile_field& bf);
void import_clifor(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'); abi.right_just(5, '0');
cab.right_just(5, '0'); cab.right_just(5, '0');
TString16 codtab = abi; TString16 codtab;
codtab = abi;
ban.put("CODTAB", codtab); ban.put("CODTAB", codtab);
if (ban.read() != NOERR) if (ban.read() != NOERR)
{ {
@ -329,17 +331,23 @@ void TTrasfer36::import_tables(const TFilename& name, TBrowsefile_field& bf)
} }
} }
else 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"); const TString& ann = file.get_field(curr, "ANNULLATO");
if (ann != "A") 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); mettilavirgola(file, curr, "CAMBIO", 11, 5);
machedata(file, curr, "INIZIO VALIDITA"); machedata(file, curr, "INIZIO VALIDITA");
machedata(file, curr, "FINE VALIDITA"); machedata(file, curr, "FINE VALIDITA");
machedata(file, curr, "DATA CAMBIO"); 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); const int err = file.autosave(curr);
if (err != NOERR) 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<l; i++)
switch(seq[i])
{
case '1':
seq[i] = 'A';
break;
case '2':
seq[i] = 'G';
break;
case '3':
seq[i] = 'S';
break;
case '4':
seq[i] = 'R';
break;
default:
seq[i] = '-';
break;
}
for (i=l; i<4; i++)
seq << '-'; // Padding...
file.add_field(curr, field, seq);
}
void TTrasfer36::machedata(TFile_text& file, TRecord_text& curr, const char* field) void TTrasfer36::machedata(TFile_text& file, TRecord_text& curr, const char* field)
{ {
TString80 num = file.get_field(curr, field); TString80 num = file.get_field(curr, field);
@ -588,18 +624,26 @@ void TTrasfer36::import_clifor(const TFilename& name, TBrowsefile_field& bf)
void TTrasfer36::import_anaart(const TFilename& name, TBrowsefile_field& bf) void TTrasfer36::import_anaart(const TFilename& name, TBrowsefile_field& bf)
{ {
TArray languages; // Massimo 4 lingue... corrispondono in modo fisso
TMask msk_lng("ibm36101");
TString msg, des, codart, um; TString msg, des, codart, um;
TString16 codlin;
real r; real r;
msg = "Importazione Anagrafica articoli"; msg = "Importazione Anagrafica articoli";
TProgind pi(::fsize(name), msg, TRUE, TRUE); TProgind pi(::fsize(name), msg, TRUE, TRUE);
TFile_text file(name, "ibm36art.ini"); TFile_text file(name, "ibm36art.ini");
long valid = 0; long valid = 0;
int nriga;
languages.add(new TString); languages.add(new TString);
languages.add(new TString); languages.add(new TString); // Max 4 linguacciones
msg.insert("@b", 0); msg.insert("@b", 0);
bf.add_line(msg); bf.add_line(msg);
bf.add_line(""); bf.add_line("");
TRelation rel(LF_ANAMAG); TRelation rel(LF_ANAMAG);
rel.add(LF_UMART,"CODART=CODART"); rel.add(LF_UMART,"CODART=CODART");
TLocalisamfile deslin(LF_DESLIN);
TRecord_text curr; TRecord_text curr;
while (file.read(curr) == NOERR) while (file.read(curr) == NOERR)
@ -608,13 +652,13 @@ void TTrasfer36::import_anaart(const TFilename& name, TBrowsefile_field& bf)
if (pi.iscancelled()) if (pi.iscancelled())
break; break;
const int tipo_record = curr.type()[0] - '0'; const int tipo_record = curr.type()[0] - '0';
if (tipo_record == 0) if (tipo_record == 0) // Anagrafica articoli
{ {
const char stato_record = file.get_field(curr, "ANNULLATO")[0]; const char stato_record = file.get_field(curr, "ANNULLATO")[0];
if (stato_record == 'A') if (stato_record == 'A')
continue; continue;
des = file.get_field(curr, "DESCRIZIONE ARTICOLO"); des = file.get_field(curr, "DESCRIZIONE ARTICOLO");
des << " "; des << " ";
des << file.get_field(curr, "ESTENSIONE DESCRIZIONE"); des << file.get_field(curr, "ESTENSIONE DESCRIZIONE");
@ -673,6 +717,55 @@ void TTrasfer36::import_anaart(const TFilename& name, TBrowsefile_field& bf)
} }
} }
} }
else
if (tipo_record >= 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 // 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) 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"; msg = "Importazione Condizioni di vendita";
TProgind pi(::fsize(name), msg, TRUE, TRUE); TProgind pi(::fsize(name), msg, TRUE, TRUE);
TFile_text file(name, "ibm36cvn.ini"); TFile_text file(name, "ibm36cvn.ini");
@ -706,13 +801,16 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf)
if (pi.iscancelled()) if (pi.iscancelled())
break; 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]; const char tipo_record = curr.type()[0];
int err = NOERR; int err = NOERR;
file.add_field(curr, "TIPO ARCHIVIO", "A"); // E' sempre tipo <A>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 <A>rticolo
}
switch (tipo_record) switch (tipo_record)
{ {
case 'A': // Righe listini. Non necessitano di scrittura testata 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("TIPO", "L");
rcondv.put("CATVEN", file.get_field(curr,"CATEGORIA VENDITE")); rcondv.put("CATVEN", file.get_field(curr,"CATEGORIA VENDITE"));
rcondv.put("COD", file.get_field(curr,"CODICE LISTINO")); 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("CODRIGA", file.get_field(curr,"CHIAVE RIGA"));
rcondv.put("UM", file.get_field(curr,"UNITA MISURA")); rcondv.put("UM", file.get_field(curr,"UNITA MISURA"));
rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE")); 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': case 'D':
file.add_field(curr, "TIPO", "O"); // Sostituisce file.add_field(curr, "TIPO", "O"); // Sostituisce
cod = file.get_field(curr,"CODICE"); 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') if (tipo_record == 'C')
{ {
mettilavirgola(file, curr, "QTA LIMITE SCAGLIONE", 11, 3); 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 SCONTO", 5, 2);
mettilavirgola(file, curr, "PERCENTUALE PROVVIGIONE", 5, 2); mettilavirgola(file, curr, "PERCENTUALE PROVVIGIONE", 5, 2);
mettilavirgola(file, curr, "QTA MERCE SCONTATA", 9, 3); 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) // record omaggio vengono dopo, (cfr FLAG PRESENZA ARTICOLO OMAGGIO)
err = file.autosave(rel, curr); err = file.autosave(rel, curr);
// Scrive la testata... ma solo se non esiste: // Scrive la testata... ma solo se non esiste:
if (err == NOERR) if (err == NOERR)
{ {
rel.read();
if (!rel.is_first_match(LF_CONDV)) // ... non esiste la testata? if (!rel.is_first_match(LF_CONDV)) // ... non esiste la testata?
{ {
des = "Offerta "; des = "Offerta ";
@ -794,6 +910,10 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf)
condv.put("DESCR", des); condv.put("DESCR", des);
condv.put("VALIN",file.get_field(curr,"VALIDITA INIZIALE")); condv.put("VALIN",file.get_field(curr,"VALIDITA INIZIALE"));
condv.put("VALFIN",file.get_field(curr,"VALIDITA FINALE")); 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... 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); 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("TIPO", "O");
rcondv.put("CATVEN", ""); rcondv.put("CATVEN", "");
rcondv.put("COD", cod); 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("CODRIGA", file.get_field(curr,"CHIAVE RIGA"));
rcondv.put("UM", file.get_field(curr,"UNITA MISURA")); rcondv.put("UM", file.get_field(curr,"UNITA MISURA"));
rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE")); rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE"));
@ -834,7 +954,7 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf)
else else
valid++; valid++;
break; break;
case 'E': // Righe contratti case 'E': // Righe contratti: non necessitano di scrittura testata
case 'F': case 'F':
{ {
file.add_field(curr, "TIPO", "C"); // Sostituisce 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 SCONTO", 5, 2);
mettilavirgola(file, curr, "PERCENTUALE PROVVIGIONE", 5, 2); mettilavirgola(file, curr, "PERCENTUALE PROVVIGIONE", 5, 2);
mettilavirgola(file, curr, "QTA MERCE SCONTATA", 9, 3); 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) // record omaggio vengono dopo, (cfr FLAG PRESENZA ARTICOLO OMAGGIO)
err = file.autosave(rel, curr); 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 else
{ {
@ -882,7 +981,7 @@ void TTrasfer36::import_condv(const TFilename& name, TBrowsefile_field& bf)
rcondv.put("CODCF", codcf); rcondv.put("CODCF", codcf);
rcondv.put("CATVEN", ""); rcondv.put("CATVEN", "");
rcondv.put("COD", cod); 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("CODRIGA", file.get_field(curr,"CHIAVE RIGA"));
rcondv.put("UM", file.get_field(curr,"UNITA MISURA")); rcondv.put("UM", file.get_field(curr,"UNITA MISURA"));
rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE")); rcondv.put("NSCAGL", file.get_field(curr,"NUMERO SCAGLIONE"));

39
ibm36/ibm36101.uml Executable file
View File

@ -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

78
ibm36/ibm36102.uml Executable file
View File

@ -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

View File

@ -176,3 +176,186 @@ FIELD(41) = PESO
FIELD(46) = PERCPROVV FIELD(46) = PERCPROVV
FIELD(47) = SCONTO 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

View File

@ -334,7 +334,7 @@ NAME(4) = NUMERO CONTRATTO
NAME(5) = TIPO ARCHIVIO NAME(5) = TIPO ARCHIVIO
NAME(6) = CHIAVE RIGA NAME(6) = CHIAVE RIGA
NAME(7) = CODICE LOTTO NAME(7) = CODICE LOTTO
NAME(8) = UNITA DI MISURA NAME(8) = UNITA MISURA
NAME(9) = NUMERO SCAGLIONE NAME(9) = NUMERO SCAGLIONE
NAME(10) = QTA LIMITE SCAGLIONE NAME(10) = QTA LIMITE SCAGLIONE
NAME(11) = PREZZO VENDITA NAME(11) = PREZZO VENDITA
@ -411,7 +411,7 @@ NAME(4) = NUMERO CONTRATTO
NAME(5) = TIPO ARCHIVIO NAME(5) = TIPO ARCHIVIO
NAME(6) = CHIAVE RIGA NAME(6) = CHIAVE RIGA
NAME(7) = CODICE LOTTO NAME(7) = CODICE LOTTO
NAME(8) = UNITA DI MISURA NAME(8) = UNITA MISURA
NAME(9) = NUMERO SCAGLIONE NAME(9) = NUMERO SCAGLIONE
NAME(10) = CODICE ARTICOLO OMAGGIO NAME(10) = CODICE ARTICOLO OMAGGIO
NAME(11) = CODICE LOTTO TAGLIA NAME(11) = CODICE LOTTO TAGLIA

View File

@ -44,6 +44,90 @@ POSITION(9) = 129
POSITION(10) = 134 POSITION(10) = 134
USE = %BAN 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] [RECORD A11]
LENGTH(0) = 1 LENGTH(0) = 1
LENGTH(1) = 3 LENGTH(1) = 3