Patch level : 1.7 aga nopatch

Files correlati     : si0400a.ini si0.exe
Ricompilazione Demo : [ ]
Commento            : sistemato scarico ad as400 perché non raggruppi per data e articolo


git-svn-id: svn://10.65.10.50/trunk@10110 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2002-03-06 14:13:52 +00:00
parent d55cff9819
commit 04573681df
2 changed files with 21 additions and 61 deletions

View File

@ -25,7 +25,6 @@ class TScaricoAS400: public TSkeleton_application
TString_array _elaborazioni; // array delle elaborazioni selezionate
TString_array _tipidoc; // Array di stringhe contenente i tipi documenti da elaborare
TScarico_file* _trasfile; // file di scarico dati
TDate _datadocprec;
TAssoc_array _tracciati;
protected: // TApplication
@ -43,11 +42,10 @@ class TScaricoAS400: public TSkeleton_application
// 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, real& valimponibile, real& valimposta);
void record(THash_object& lavoro, TDate& datadoc, TString& codartmag, real& valimponibile, real& valimposta);
virtual const char * extra_modules() const { return "BA"; }
public:
TString16& provenienza() {return _provenienza;};
TDate& datadocprec() {return _datadocprec;};
TScaricoAS400() {_msk = NULL;};
virtual ~TScaricoAS400() { }
};
@ -76,8 +74,11 @@ void TScarico_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, T
TString valore;
if (code == "_PROVENIENZA")
valore = app().provenienza();
else if (code == "_DATADOC")
valore = app().datadocprec().string(brief,'\0');
else if (code == "_DATADOC")
{
TDate tmp(str);
valore = tmp.string(brief,'\0');
}
else if (code == "_CURRENCY")
{
valore = str;
@ -193,13 +194,14 @@ bool TScaricoAS400::doc_tipo_stato_ok(const TDocumento* doc)
}
//emetto un record
void TScaricoAS400::record(THash_object& lavoro, TString& codartmag, real& valimponibile, real& valimposta)
void TScaricoAS400::record(THash_object& lavoro, TDate& datadoc, TString& codartmag, real& valimponibile, real& valimposta)
{
TTracciato_record& oggetto = (TTracciato_record&)lavoro.obj();
const TString& tipo = oggetto.type();
TRecord_text rec(tipo);
//carico il record da emettere
_trasfile->autoload(rec, LF_RIGHEDOC);
_trasfile->add_field(rec, "DATADOC", (const char*) datadoc);
_trasfile->add_field(rec, "CODARTMAG", (const char*) codartmag);
TCurrency c(valimponibile);
TString80 str = c.string();
@ -263,25 +265,6 @@ void TScaricoAS400::main_loop()
}
}
void TScaricoAS400::scrivi_righe(TAssoc_array& arr_imponibile, TAssoc_array& arr_imposta)
{
TString_array arrimp;
arr_imponibile.get_keys(arrimp, TRUE);
for (int i=0;i<arrimp.items();i++)
{
TString80 codartmag = arrimp.row(i).get(0);
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
lavoro = _tracciati.get_hashobj();
}
}
}
void TScaricoAS400::transfer()
{
_tracciati = _trasfile->tracciati();
@ -330,11 +313,6 @@ void TScaricoAS400::transfer()
#else
TProgind p(cur_items,msg,FALSE,TRUE,1);
#endif
// assoc array per imposta e imponibile
TAssoc_array arr_imposta, arr_imponibile;
arr_imposta.destroy();
arr_imponibile.destroy();
_datadocprec = NULLDATE;
long j = 0;
// Comportamento:
// - scorre i documenti della numerazione corrente.
@ -352,21 +330,8 @@ void TScaricoAS400::transfer()
doc_tipo_stato_ok(doc)) // controlla che il tipo documento e lo stato siano coerenti con la ELD selezionata
{
TDate datadoc = doc->data();
TString16 tipodoc = doc->get(DOC_TIPODOC);
// controllo se sono arrivato al punto di rottura (data diversa da precedente)
if (datadoc != _datadocprec)
{
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();
_datadocprec = datadoc;
}
// scorre tutte le righe del documento
TString key;
TString80 str;
TString80 codartmag;
real valimponibile, valimposta;
const int items = doc->physical_rows();
int numrig = 1;
for (int i=1; i<=items; i++)
@ -374,18 +339,16 @@ void TScaricoAS400::transfer()
const TRiga_documento& rr = (*doc)[i];
if (rr.is_articolo())
{
str = rr.get(RDOC_CODARTMAG);
key = "";
//key << tipodoc;
key << str;
if (!arr_imponibile.is_key(key))
arr_imponibile.add(key, new real);
real& rl1 = (real&) arr_imponibile[key];
rl1 += rr.imponibile();
if (!arr_imposta.is_key(key))
arr_imposta.add(key, new real);
real& rl2 = (real&) arr_imposta[key];
rl2 += rr.imposta();
codartmag = rr.get(RDOC_CODARTMAG);
valimponibile = rr.imponibile();
valimposta = rr.imposta();
THash_object* lavoro = _tracciati.get_hashobj();
//scandisco tutti i record di un effetto
for (int i = 0; lavoro != NULL; i++)
{
record(*lavoro, datadoc, codartmag, valimponibile, valimposta); //emetto il record
lavoro = _tracciati.get_hashobj();
}
}
}
cont.change_doc_status(*doc);
@ -394,9 +357,6 @@ void TScaricoAS400::transfer()
else
delete doc;
}
if (_datadocprec.ok())
// devo scrivere i record su file di testo
scrivi_righe(arr_imponibile, arr_imposta);
#ifdef DBG
if (p.iscancelled()) break;
#endif

View File

@ -14,7 +14,7 @@ POSITION(0) = 0
MESSAGE(1) = _DATADOC
LENGTH(1) = 6
NAME(1) = Data documento
NAME(1) = DATADOC
POSITION(1) = 4