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

View File

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