Patch level : aga 1.7 nopatch
Files correlati : si0.exe si0400a.msk si0400a.ini Ricompilazione Demo : [ ] Commento : Scarico dati ad AS400 per Ass. Agricoltori Ravenna git-svn-id: svn://10.65.10.50/trunk@10059 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2d0aeae806
commit
5b58dca9b7
@ -14,6 +14,9 @@ int main( int argc, char** argv )
|
|||||||
case 3:
|
case 3:
|
||||||
rt = si0300( argc, argv ); // per realplast
|
rt = si0300( argc, argv ); // per realplast
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
|
rt = si0400( argc, argv ); // Invio dati ad AS/400
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
rt = si0100( argc, argv ); // Ricezione dati
|
rt = si0100( argc, argv ); // Ricezione dati
|
||||||
break;
|
break;
|
||||||
|
1
si/si0.h
1
si/si0.h
@ -4,6 +4,7 @@
|
|||||||
int si0100(int argc, char* argv[]); // Ricezione dati
|
int si0100(int argc, char* argv[]); // Ricezione dati
|
||||||
int si0200(int argc, char* argv[]); // Stampe varie
|
int si0200(int argc, char* argv[]); // Stampe varie
|
||||||
int si0300(int argc, char* argv[]); // temp
|
int si0300(int argc, char* argv[]); // temp
|
||||||
|
int si0400(int argc, char* argv[]); // Invio dati
|
||||||
|
|
||||||
#endif // __SI0_H
|
#endif // __SI0_H
|
||||||
|
|
||||||
|
419
si/si0400.cpp
Executable file
419
si/si0400.cpp
Executable file
@ -0,0 +1,419 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <filetext.h>
|
||||||
|
#include <form.h>
|
||||||
|
|
||||||
|
#include <mask.h>
|
||||||
|
#include <relation.h>
|
||||||
|
#include <tabutil.h>
|
||||||
|
#include <printer.h>
|
||||||
|
#include <progind.h>
|
||||||
|
#include <utility.h>
|
||||||
|
#include <lffiles.h>
|
||||||
|
|
||||||
|
#include <sheet.h>
|
||||||
|
|
||||||
|
#include "..\ve\velib.h"
|
||||||
|
#include "si0400a.h"
|
||||||
|
|
||||||
|
class TScarico_file;
|
||||||
|
class TScaricoAS400: public TSkeleton_application
|
||||||
|
{
|
||||||
|
TString16 _provenienza; // provenienza
|
||||||
|
TDate _data_ini; // data di inizio intervallo
|
||||||
|
TDate _data_fine; // data di fine intervallo
|
||||||
|
TMask* _msk; // maschera di selezione dati
|
||||||
|
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
|
||||||
|
// Le 4 seguenti non hanno bisogno di commenti
|
||||||
|
virtual void main_loop();
|
||||||
|
virtual bool create();
|
||||||
|
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);
|
||||||
|
virtual const char * extra_modules() const { return "BA"; }
|
||||||
|
public:
|
||||||
|
TString16& provenienza() {return _provenienza;};
|
||||||
|
TDate& datadocprec() {return _datadocprec;};
|
||||||
|
TScaricoAS400() {_msk = NULL;};
|
||||||
|
virtual ~TScaricoAS400() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
inline TScaricoAS400& app() { return (TScaricoAS400&) main_app(); }
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
|
// Classe TScarico_file customizzata dalla TFile_text //
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
|
class TScarico_file: public TFile_text
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TScarico_file(const TString& file_name, const TString& config_name);
|
||||||
|
virtual ~TScarico_file() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
// gestione dei messaggi estesi nei campi
|
||||||
|
void TScarico_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
|
||||||
|
{
|
||||||
|
const TString code(s.get(0));
|
||||||
|
TString valore;
|
||||||
|
if (code == "_PROVENIENZA")
|
||||||
|
valore = app().provenienza();
|
||||||
|
else if (code == "_DATADOC")
|
||||||
|
valore = app().datadocprec().string(brief,'\0');
|
||||||
|
else NFCHECK("Macro non definita: %s", (const char *)code);
|
||||||
|
str = valore;
|
||||||
|
}
|
||||||
|
|
||||||
|
TScarico_file::TScarico_file(const TString& file_name, const TString& config_name)
|
||||||
|
: TFile_text(file_name, config_name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// costruisce l'assoc array delle elaborazioni scelte
|
||||||
|
void TScaricoAS400::build_elaborazioni()
|
||||||
|
{
|
||||||
|
_elaborazioni.destroy();
|
||||||
|
TString16 str;
|
||||||
|
str = _msk->get(F_CODICE_ELAB1);
|
||||||
|
if (str.not_empty())
|
||||||
|
_elaborazioni.add(str);
|
||||||
|
str = _msk->get(F_CODICE_ELAB2);
|
||||||
|
if (str.not_empty())
|
||||||
|
_elaborazioni.add(str);
|
||||||
|
str = _msk->get(F_CODICE_ELAB3);
|
||||||
|
if (str.not_empty())
|
||||||
|
_elaborazioni.add(str);
|
||||||
|
str = _msk->get(F_CODICE_ELAB4);
|
||||||
|
if (str.not_empty())
|
||||||
|
_elaborazioni.add(str);
|
||||||
|
str = _msk->get(F_CODICE_ELAB5);
|
||||||
|
if (str.not_empty())
|
||||||
|
_elaborazioni.add(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TScaricoAS400::handle_data_range(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (k==K_ENTER && f.dirty())
|
||||||
|
{
|
||||||
|
TMask& m = f.mask();
|
||||||
|
TDate da(m.get_date(F_DATAINI));
|
||||||
|
TDate a(m.get_date(F_DATAFIN));
|
||||||
|
if (a < da)
|
||||||
|
{
|
||||||
|
f.error_box("La data di inizio deve essere minore della data di fine.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TScaricoAS400::build_tipidoc(const TContabilizzazione& cont)
|
||||||
|
{
|
||||||
|
_tipidoc.destroy();
|
||||||
|
TToken_string t;
|
||||||
|
TString16 tipo;
|
||||||
|
for (int i=0;i<TElaborazione::_max_tipi_doc_elab;i++)
|
||||||
|
{
|
||||||
|
tipo = cont.tipo_iniziale(i);
|
||||||
|
if (tipo.not_empty())
|
||||||
|
{
|
||||||
|
t = tipo;
|
||||||
|
t.add(cont.stato_iniziale(i)); // Stato iniziale
|
||||||
|
_tipidoc.add(t); // Aggiunge questo tipo documento alla lista con il suo stato iniziale
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TScaricoAS400::doc_tipo_stato_ok(const TDocumento* doc)
|
||||||
|
// Verifica che il tipo documento corrente esista tra i tipi previsti dalla elaborazione
|
||||||
|
// differita selezionata
|
||||||
|
{
|
||||||
|
bool found = FALSE;
|
||||||
|
const TString16 tipo = doc->get(DOC_TIPODOC);
|
||||||
|
const char stato = doc->get_char(DOC_STATO);
|
||||||
|
const int items = _tipidoc.items();
|
||||||
|
for (int i=0;i<items && !found;i++)
|
||||||
|
{
|
||||||
|
TToken_string& t = _tipidoc.row(i);
|
||||||
|
const TString16 tipox(t.get(0));
|
||||||
|
const char statox = t.get(1)[0];
|
||||||
|
if (tipo == tipox && stato == statox)
|
||||||
|
found = TRUE;
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
//emetto un record
|
||||||
|
void TScaricoAS400::record(THash_object& lavoro, TString& codartmag, TString& valimponibile, TString& 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, "CODARTMAG", (const char*) codartmag);
|
||||||
|
_trasfile->add_field(rec, "IMPONIBILE", (const char*) valimponibile);
|
||||||
|
_trasfile->add_field(rec, "IMPOSTA", (const char*) valimposta);
|
||||||
|
_trasfile->write(rec);//emetto i dati su file
|
||||||
|
}
|
||||||
|
|
||||||
|
// creazione dell'applicazione
|
||||||
|
bool TScaricoAS400::create()
|
||||||
|
{
|
||||||
|
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_OCCAS, LF_INDSP, LF_CFVEN, LF_DOC, LF_RIGHEDOC, LF_ANAMAG, LF_MOVMAG, LF_RMOVMAG, LF_CONDV, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, LF_CESS, LF_CAUSALI, 0);
|
||||||
|
_msk = new TMask("si0400a");
|
||||||
|
_msk->set_handler(F_DATAINI,handle_data_range);
|
||||||
|
_msk->set_handler(F_DATAFIN,handle_data_range);
|
||||||
|
_trasfile = NULL;
|
||||||
|
return TSkeleton_application::create();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TScaricoAS400::destroy()
|
||||||
|
{
|
||||||
|
if (_msk) delete _msk;
|
||||||
|
if (_trasfile) delete _trasfile;
|
||||||
|
return TSkeleton_application::destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TScaricoAS400::main_loop()
|
||||||
|
{
|
||||||
|
TConfig c(CONFIG_STUDIO, "sipag");
|
||||||
|
_msk->set(F_FILESEQ, c.get("FileSeqE"));
|
||||||
|
_msk->set(F_FILEMOV, c.get("FileMov"));
|
||||||
|
_msk->set(F_CODICE_ELAB1, c.get("CodElab1"));
|
||||||
|
_msk->set(F_CODICE_ELAB2, c.get("CodElab2"));
|
||||||
|
_msk->set(F_CODICE_ELAB3, c.get("CodElab3"));
|
||||||
|
_msk->set(F_CODICE_ELAB4, c.get("CodElab4"));
|
||||||
|
_msk->set(F_CODICE_ELAB5, c.get("CodElab5"));
|
||||||
|
_msk->set(F_PROVENIENZA, c.get("CodProv"));
|
||||||
|
while (_msk->run() == K_ENTER)
|
||||||
|
{
|
||||||
|
c.set("FileSeqE", _msk->get(F_FILESEQ));
|
||||||
|
c.set("FileMov", _msk->get(F_FILEMOV));
|
||||||
|
c.set("CodElab1", _msk->get(F_CODICE_ELAB1));
|
||||||
|
c.set("CodElab2", _msk->get(F_CODICE_ELAB2));
|
||||||
|
c.set("CodElab3", _msk->get(F_CODICE_ELAB3));
|
||||||
|
c.set("CodElab4", _msk->get(F_CODICE_ELAB4));
|
||||||
|
c.set("CodElab5", _msk->get(F_CODICE_ELAB5));
|
||||||
|
c.set("CodProv", _msk->get(F_PROVENIENZA));
|
||||||
|
_data_ini = _msk->get_date(F_DATAINI);
|
||||||
|
_data_fine = _msk->get_date(F_DATAFIN);
|
||||||
|
_provenienza = _msk->get(F_PROVENIENZA);
|
||||||
|
_trasfile = new TScarico_file(_msk->get(F_FILEMOV), "si0400a.ini");
|
||||||
|
_trasfile->open(_msk->get(F_FILEMOV),'w');
|
||||||
|
build_elaborazioni();
|
||||||
|
transfer();
|
||||||
|
put_seq(c);
|
||||||
|
delete _trasfile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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& 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(",");
|
||||||
|
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();
|
||||||
|
TRelation doc_rel(LF_DOC);
|
||||||
|
TRectype da(LF_DOC);
|
||||||
|
TRectype a(LF_DOC);
|
||||||
|
const int items = _elaborazioni.items();
|
||||||
|
long tot = 0L;
|
||||||
|
int year_from = _data_ini.year();
|
||||||
|
int year_to = _data_fine.year();
|
||||||
|
TString16 codnum;
|
||||||
|
TString msg,filt_expr;
|
||||||
|
TDate data;
|
||||||
|
da.put("DATADOC",_data_ini);
|
||||||
|
da.put("PROVV","D");
|
||||||
|
da.put("ANNO",year_from);
|
||||||
|
a.put("DATADOC",_data_fine);
|
||||||
|
a.put("PROVV","D");
|
||||||
|
a.put("ANNO",year_to);
|
||||||
|
for (int i=0; i<items;i++) // Scorre per tutte le elaborazioni
|
||||||
|
{
|
||||||
|
const TString16 codelab = (const char*) _elaborazioni.row(i);
|
||||||
|
TContabilizzazione cont(codelab);
|
||||||
|
if (!cont.empty())
|
||||||
|
{
|
||||||
|
build_tipidoc(cont);
|
||||||
|
codnum = cont.codice_numerazione_iniziale();
|
||||||
|
filt_expr = "CODNUM=\"";
|
||||||
|
filt_expr << codnum << "\"";
|
||||||
|
TCursor doc_cur(&doc_rel,filt_expr,3,&da,&a);
|
||||||
|
const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
|
||||||
|
if (cur_items == 0)
|
||||||
|
continue;
|
||||||
|
msg = "Selezione documenti ";
|
||||||
|
msg << codnum << " dal ";
|
||||||
|
msg << _data_ini.string() << " al ";
|
||||||
|
msg << _data_fine.string();
|
||||||
|
#ifdef DBG
|
||||||
|
TProgind p(cur_items,msg,TRUE,TRUE,1);
|
||||||
|
#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.
|
||||||
|
#ifdef DBG
|
||||||
|
for (;j<cur_items && !p.iscancelled();j++)
|
||||||
|
#else
|
||||||
|
for (;j<cur_items;j++)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
p.setstatus(j+1);
|
||||||
|
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
|
||||||
|
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;
|
||||||
|
const int items = doc->physical_rows();
|
||||||
|
int numrig = 1;
|
||||||
|
for (int i=1; i<=items; i++)
|
||||||
|
{
|
||||||
|
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(TRUE);
|
||||||
|
if (!arr_imposta.is_key(key))
|
||||||
|
arr_imposta.add(key, new real);
|
||||||
|
real& rl2 = (real&) arr_imposta[key];
|
||||||
|
rl2 += rr.imposta(TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cont.change_doc_status(*doc);
|
||||||
|
delete doc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
delete doc;
|
||||||
|
}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
a.run(argc, argv, "Scarico dati per AS/400");
|
||||||
|
return 0;
|
||||||
|
}
|
15
si/si0400a.h
Executable file
15
si/si0400a.h
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#define F_FILESEQ 101
|
||||||
|
#define F_FILEMOV 102
|
||||||
|
#define F_DATAINI 103
|
||||||
|
#define F_DATAFIN 104
|
||||||
|
#define F_CODICE_ELAB1 201
|
||||||
|
#define F_CODICE_ELAB2 202
|
||||||
|
#define F_CODICE_ELAB3 203
|
||||||
|
#define F_CODICE_ELAB4 204
|
||||||
|
#define F_CODICE_ELAB5 205
|
||||||
|
#define F_DESC_ELAB1 206
|
||||||
|
#define F_DESC_ELAB2 207
|
||||||
|
#define F_DESC_ELAB3 208
|
||||||
|
#define F_DESC_ELAB4 209
|
||||||
|
#define F_DESC_ELAB5 210
|
||||||
|
#define F_PROVENIENZA 211
|
35
si/si0400a.ini
Executable file
35
si/si0400a.ini
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
[MAIN]
|
||||||
|
FIELDSEP =
|
||||||
|
RECORDSEP =
|
||||||
|
RECORDSIZE =
|
||||||
|
SKIPLINES =
|
||||||
|
TYPEFIELD = -1
|
||||||
|
|
||||||
|
[RECORD]
|
||||||
|
|
||||||
|
MESSAGE(0) = _PROVENIENZA
|
||||||
|
LENGTH(0) = 4
|
||||||
|
NAME(0) = Provenienza
|
||||||
|
POSITION(0) = 0
|
||||||
|
|
||||||
|
MESSAGE(1) = _DATADOC
|
||||||
|
LENGTH(1) = 6
|
||||||
|
NAME(1) = Data documento
|
||||||
|
POSITION(1) = 4
|
||||||
|
|
||||||
|
|
||||||
|
LENGTH(2) = 20
|
||||||
|
NAME(2) = CODARTMAG
|
||||||
|
POSITION(2) = 10
|
||||||
|
|
||||||
|
LENGTH(3) = 15
|
||||||
|
NAME(3) = IMPONIBILE
|
||||||
|
POSITION(3) = 30
|
||||||
|
ALLIGN = R
|
||||||
|
|
||||||
|
LENGTH(4) = 15
|
||||||
|
NAME(4) = IMPOSTA
|
||||||
|
POSITION(4) = 45
|
||||||
|
ALLIGN = R
|
||||||
|
|
||||||
|
USE=34
|
176
si/si0400a.uml
Executable file
176
si/si0400a.uml
Executable file
@ -0,0 +1,176 @@
|
|||||||
|
#include "si0400a.h"
|
||||||
|
|
||||||
|
TOOLBAR "" 0 20 0 2
|
||||||
|
|
||||||
|
BUTTON DLG_OK 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -12 -11 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_QUIT 9 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -22 -11 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Invio dati" -1 -1 78 20
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 77 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Opzioni per invio"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FILESEQ 52
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 3 "Nome file sequenza "
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
VALIDATE FILENAME_FUNC
|
||||||
|
FLAGS "A"
|
||||||
|
WARNING "E' necessario specificare un nome di file"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FILEMOV 52
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 5 "Nome file movimenti "
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
VALIDATE FILENAME_FUNC
|
||||||
|
FLAGS "A"
|
||||||
|
WARNING "E' necessario specificare un nome di file"
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATAINI
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 7 "Data iniziale "
|
||||||
|
HELP "Data iniziale"
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATAFIN
|
||||||
|
BEGIN
|
||||||
|
PROMPT 40 7 "Data finale "
|
||||||
|
HELP "Data finale"
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 77 7
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 9 "Codici di elaborazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ELAB1 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 10 ""
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0 == 3
|
||||||
|
INPUT CODTAB F_CODICE_ELAB1
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ELAB1 CODTAB
|
||||||
|
OUTPUT F_DESC_ELAB1 S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "E' necessario specificare il codice elaborazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ELAB1 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 15 10 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0 == 3
|
||||||
|
INPUT S0 F_DESC_ELAB1
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ELAB1
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ELAB2 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 11 ""
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0 == 3
|
||||||
|
INPUT CODTAB F_CODICE_ELAB2
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ELAB2 CODTAB
|
||||||
|
OUTPUT F_DESC_ELAB2 S0
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ELAB2 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 15 11 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0 == 3
|
||||||
|
INPUT S0 F_DESC_ELAB2
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ELAB2
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ELAB3 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 12 ""
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0 == 3
|
||||||
|
INPUT CODTAB F_CODICE_ELAB3
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ELAB3 CODTAB
|
||||||
|
OUTPUT F_DESC_ELAB3 S0
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ELAB3 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 15 12 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0 == 3
|
||||||
|
INPUT S0 F_DESC_ELAB3
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ELAB3
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ELAB4 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 13 ""
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0 == 3
|
||||||
|
INPUT CODTAB F_CODICE_ELAB4
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ELAB4 CODTAB
|
||||||
|
OUTPUT F_DESC_ELAB4 S0
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ELAB4 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 15 13 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0 == 3
|
||||||
|
INPUT S0 F_DESC_ELAB4
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ELAB4
|
||||||
|
END
|
||||||
|
STRING F_CODICE_ELAB5 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 14 ""
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0 == 3
|
||||||
|
INPUT CODTAB F_CODICE_ELAB5
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ELAB5 CODTAB
|
||||||
|
OUTPUT F_DESC_ELAB5 S0
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ELAB5 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 15 14 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0 == 3
|
||||||
|
INPUT S0 F_DESC_ELAB5
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ELAB5
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_PROVENIENZA 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 17 "Codice provenienza "
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user