Patch level : 1.7 AGA no patch

Files correlati     : si0.exe si0400a.ini
Ricompilazione Demo : [ ]
Commento            : Corretto tracciato e risultati del file di Invio ad AS/400


git-svn-id: svn://10.65.10.50/trunk@10076 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2002-02-26 09:35:22 +00:00
parent 5b58dca9b7
commit 887a4d8e1b
2 changed files with 56 additions and 67 deletions

View File

@ -35,26 +35,15 @@ class TScaricoAS400: public TSkeleton_application
virtual bool destroy();
// Coontrolla se lo stato ed il tipo del documento sono validi e rispettano la selezione
bool doc_tipo_stato_ok(const TDocumento* doc);
// Handler del codice elaborazione differita
static bool handle_cod_eld(TMask_field& f, KEY k);
// Handler dell'intervallo di date
static bool handle_data_range(TMask_field& f, KEY k);
// Handler del pulsante di selezione codici numerazione
static bool handle_select(TMask_field& f, KEY k);
// Aggiunge il documento corrente alla lista dei documenti raggruppabili
void add_to_group_list(TDocumento* doc);
// Costruisce la stringa chiave per raggruppamento
void build_group_key(TString& key, TDocumento* doc);
// Costruisce la stringa chiave per documento
void build_doc_key(TToken_string& key, TDocumento* doc);
void put_seq(TConfig & c);
void transfer();
// costruisce l'array delle elaborazioni scelte
void build_elaborazioni();
// costruisce l'array dei tipi doc e relativi stati per una elaborazione
void build_tipidoc(const TContabilizzazione& cont);
void scrivi_righe(TAssoc_array& arr_imponibile, TAssoc_array& arr_imposta);
void record(THash_object& lavoro, TString& codartmag, TString& valimponibile, TString& valimposta);
void record(THash_object& lavoro, TString& codartmag, real& valimponibile, real& valimposta);
virtual const char * extra_modules() const { return "BA"; }
public:
TString16& provenienza() {return _provenienza;};
@ -74,7 +63,8 @@ class TScarico_file: public TFile_text
protected:
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
public:
void forza_validate(TRecord_text& rec, TTracciato_record& tr );
TScarico_file(const TString& file_name, const TString& config_name);
virtual ~TScarico_file() { }
};
@ -88,6 +78,13 @@ void TScarico_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, T
valore = app().provenienza();
else if (code == "_DATADOC")
valore = app().datadocprec().string(brief,'\0');
else if (code == "_CURRENCY")
{
valore = str;
int len = atoi(s.get());
if (len > 0)
valore.lpad(len);
}
else NFCHECK("Macro non definita: %s", (const char *)code);
str = valore;
}
@ -97,6 +94,29 @@ TScarico_file::TScarico_file(const TString& file_name, const TString& config_nam
{
}
void TScarico_file::forza_validate(TRecord_text& rec, TTracciato_record& tr )
{
TString campo;
TCursor cur(tr.relation());
TRelation& rel = *cur.relation();
TArray& a_tc = tr.tracciati_campo();
int items = a_tc.items();
for (int i = 0; i < items; i++)
{
TTracciato_campo& tc = tr.get(i);
const TString& message = tc.message();
if (!message.empty())
{
campo = rec.get(i);
TToken_string msg (message, ',');
if (!msg.blank())
{
validate(cur, rec, msg, campo);
rec.add(campo, i);
}
}
}
}
// costruisce l'assoc array delle elaborazioni scelte
void TScaricoAS400::build_elaborazioni()
@ -173,7 +193,7 @@ bool TScaricoAS400::doc_tipo_stato_ok(const TDocumento* doc)
}
//emetto un record
void TScaricoAS400::record(THash_object& lavoro, TString& codartmag, TString& valimponibile, TString& valimposta)
void TScaricoAS400::record(THash_object& lavoro, TString& codartmag, real& valimponibile, real& valimposta)
{
TTracciato_record& oggetto = (TTracciato_record&)lavoro.obj();
const TString& tipo = oggetto.type();
@ -181,8 +201,15 @@ void TScaricoAS400::record(THash_object& lavoro, TString& codartmag, TString& va
//carico il record da emettere
_trasfile->autoload(rec, LF_RIGHEDOC);
_trasfile->add_field(rec, "CODARTMAG", (const char*) codartmag);
_trasfile->add_field(rec, "IMPONIBILE", (const char*) valimponibile);
_trasfile->add_field(rec, "IMPOSTA", (const char*) valimposta);
TCurrency c(valimponibile);
TString80 str = c.string();
str.strip(",");
_trasfile->add_field(rec, "IMPONIBILE", (const char*) str);
c = TCurrency(valimposta);
str = c.string();
str.strip(",");
_trasfile->add_field(rec, "IMPOSTA", (const char*) str);
_trasfile->forza_validate(rec,oggetto);
_trasfile->write(rec);//emetto i dati su file
}
@ -232,7 +259,6 @@ void TScaricoAS400::main_loop()
_trasfile->open(_msk->get(F_FILEMOV),'w');
build_elaborazioni();
transfer();
put_seq(c);
delete _trasfile;
}
}
@ -244,19 +270,13 @@ void TScaricoAS400::scrivi_righe(TAssoc_array& arr_imponibile, TAssoc_array& arr
for (int i=0;i<arrimp.items();i++)
{
TString80 codartmag = arrimp.row(i).get(0);
real& r = (real&) arr_imponibile[codartmag];
TCurrency c(r);
TString80 valimponibile = c.string();
valimponibile.strip(",");
r = (real&) arr_imposta[codartmag];
c = TCurrency(r);
TString80 valimposta = c.string();
valimposta.strip(",");
real& valimponibile = (real&) arr_imponibile[codartmag];
real& valimposta = (real&) arr_imposta[codartmag];
THash_object* lavoro = _tracciati.get_hashobj();
//scandisco tutti i record di un effetto
for (int i = 0; lavoro != NULL; i++)
{
record(*lavoro, codartmag, valimponibile, valimposta);//emetto il record
record(*lavoro, codartmag, valimponibile, valimposta); //emetto il record
lavoro = _tracciati.get_hashobj();
}
}
@ -322,7 +342,7 @@ void TScaricoAS400::transfer()
doc_cur = j;
TDocumento* doc = new TDocumento;
if (doc->read(doc_cur.curr()) == NOERR && // legge il documento
codnum == doc->get(DOC_CODNUM) && // patch del cazzo
codnum == doc->get(DOC_CODNUM) && // patch del cazzo (non l'ho scritto io!!!!)
doc_tipo_stato_ok(doc)) // controlla che il tipo documento e lo stato siano coerenti con la ELD selezionata
{
TDate datadoc = doc->data();
@ -332,9 +352,7 @@ void TScaricoAS400::transfer()
{
if (_datadocprec.ok())
// devo scrivere i record su file di testo
{
scrivi_righe(arr_imponibile, arr_imposta);
}
// devo azzerare l'assoc array con tipodoc e codartmag
arr_imposta.destroy();
arr_imponibile.destroy();
@ -357,11 +375,11 @@ void TScaricoAS400::transfer()
if (!arr_imponibile.is_key(key))
arr_imponibile.add(key, new real);
real& rl1 = (real&) arr_imponibile[key];
rl1 += rr.imponibile(TRUE);
rl1 += rr.imponibile();
if (!arr_imposta.is_key(key))
arr_imposta.add(key, new real);
real& rl2 = (real&) arr_imposta[key];
rl2 += rr.imposta(TRUE);
rl2 += rr.imposta();
}
}
cont.change_doc_status(*doc);
@ -372,26 +390,7 @@ void TScaricoAS400::transfer()
}
if (_datadocprec.ok())
// devo scrivere i record su file di testo
{
scrivi_righe(arr_imponibile, arr_imposta);
/*
TString_array arrimp;
arr_imponibile.get_keys(arrimp, TRUE);
for (i=0;i<arrimp.items();i++)
{
TString80 codartmag = arrimp.row(i).get(0);
real& r = (real&) arr_imponibile[codartmag];
TString80 valimponibile = r.string();
THash_object* lavoro = tracciati.get_hashobj();
//scandisco tutti i record di un effetto
for (int i = 0; lavoro != NULL; i++)
{
record(*lavoro, codartmag, valimponibile, valimposta);//emetto il record
lavoro = tracciati.get_hashobj();
}
}
*/
}
#ifdef DBG
if (p.iscancelled()) break;
#endif
@ -400,17 +399,6 @@ void TScaricoAS400::transfer()
xvt_statbar_set("");
}
void TScaricoAS400::put_seq(TConfig & c)
{
TScanner seq(c.get("FileSeqE"));
//const int expected_seq = c.get_int("Seq1") + 1;
const int seqnum = seq.integer();
//if (expected_seq != seqnum)
// error_box("Il numero di sequenza trovato %d\nnon coincide con quello atteso %d", seqnum, expected_seq);
c.set("Seq1", seqnum);
}
int si0400(int argc, char* argv[])
{
TScaricoAS400 a;

View File

@ -18,18 +18,19 @@ NAME(1) = Data documento
POSITION(1) = 4
LENGTH(2) = 20
LENGTH(2) = 13
NAME(2) = CODARTMAG
POSITION(2) = 10
LENGTH(3) = 15
NAME(3) = IMPONIBILE
POSITION(3) = 30
ALLIGN = R
POSITION(3) = 23
ALLIGN(3) = R
MESSAGE(3) = _CURRENCY,15
LENGTH(4) = 15
NAME(4) = IMPOSTA
POSITION(4) = 45
ALLIGN = R
POSITION(4) = 38
ALLIGN(4) = R
MESSAGE(4) = _CURRENCY,15
USE=34