diff --git a/cg/cg7.cpp b/cg/cg7.cpp new file mode 100755 index 000000000..c4f03129a --- /dev/null +++ b/cg/cg7.cpp @@ -0,0 +1,40 @@ +#include + +#include "cg7.h" + +int main(int argc, char** argv) +{ + int rt = -1; + const int r = (argc > 1) ? argv[1][1]-'0' : -1; + + switch (r) + { + case 1: + default: + cg7100(argc, argv); break; // invio ad altra procedura + } + exit(0); + return 0; +} + + + + + + + + + + + + + + + + + + + + + + diff --git a/cg/cg7.h b/cg/cg7.h new file mode 100755 index 000000000..0f9fc3bc2 --- /dev/null +++ b/cg/cg7.h @@ -0,0 +1,20 @@ +#ifndef __CG7_H +#define __CG7_H + +int cg7100(int argc, char** argv); + +#endif // __CG7_H + + + + + + + + + + + + + + diff --git a/cg/cg7100.cpp b/cg/cg7100.cpp new file mode 100755 index 000000000..9fd5e9993 --- /dev/null +++ b/cg/cg7100.cpp @@ -0,0 +1,609 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cg7.h" +#include "cg7100a.h" + +#include +#include +#include + +#define ALIAS_REG 100 + +class TInvio_file: public TFile_text +{ +protected: + virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str); + +public: + TInvio_file(const TString& file_name, const TString& config_name); + virtual ~TInvio_file() { } +}; + +TInvio_file::TInvio_file(const TString& file_name, const TString& config_name) + : TFile_text(file_name, config_name) +{ +} + +class TInvio_mask : public TAutomask +{ +protected: + bool on_field_event(TOperable_field& o, TField_event e, long jolly); +public: + + TInvio_mask(); + + virtual ~TInvio_mask(){}; +}; + +TInvio_mask::TInvio_mask() :TAutomask ("cg7100a") +{ +} + +bool TInvio_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_CODDITTA: + if (e==fe_init && o.empty()) + { + set(F_CODDITTA, main_app().get_firm()); + ((TEdit_field&) o).check(); + disable(F_CODDITTA); + } + break; + default: + break; + } + return TRUE; +} + +class TInvio : public TSkeleton_application +{ + TCursor* _cur; + TInvio_mask* _msk; + TInvio_file* _trasfile; + long _nrecords, _nrecsfattvend, _nrecsfattacqu, _nrecsmocontab; + int _nfiles; + long _nrecsdettaglio; + TString16 _descrdettaglio; + TDate _dataini, _datafin; + bool _totale, _finemov; + +protected: + virtual bool create(void); + virtual bool destroy(void); + virtual void main_loop() ; + void invio_zucchetti(); + long i_zucchetti_causali(const bool invio = TRUE); + long i_zucchetti_clifor(const bool invio = TRUE); + long i_zucchetti_conti(const bool invio = TRUE); + long i_zucchetti_movcont(const bool invio = TRUE); + long i_zucchetti_moviva(const char acqven, const bool invio = TRUE); + void i_zucchetti_testa_dettaglio(const TString16& descr, const long nrecs); + void i_zucchetti_coda_dettaglio(const TString16& descr, const long nrecs); + void i_zucchetti_testa(); + void i_zucchetti_coda(); +public: + int get_nfiles() {return _nfiles;}; + long get_nrecords() {return _nrecords;}; + long get_nrecsdettaglio() {return _nrecsdettaglio;}; + TString16& get_descrdettaglio() {return _descrdettaglio;}; + const bool totale() {return _totale;}; + const bool finemov() {return _finemov;}; + TInvio() {} ; + virtual ~TInvio() {} ; +}; + +// restituisce un riferimento all' applicazione +inline TInvio& app() { return (TInvio&) main_app();} + +// gestione dei messaggi estesi nei campi +void TInvio_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str) +{ + const TString code(s.get(0)); + TString valore; + if (code == "_FISSO") + { + // gestione dei campi fissi per i record delle riba + // sintassi: _FISSO,! + // dove: è la stringa fissa da emettere + TString in(s.get()); + CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'"); + in.ltrim(1); + in.trim(); + valore = in; + } + else if (code == "_ANNO") + { + TDate data(str); + int anno = data.year(); + valore.format("%ld", anno); + } + else if (code == "_MESE") + { + TDate data(str); + int mese = data.month(); + valore.format("%ld", mese); + } + else if (code == "_SEZIONE") + { + valore = str; + const char sezione = s.get()[0]; + const char sezriga = cur.curr(LF_RMOV).get_char(RMV_SEZIONE); + if (sezione != sezriga) + valore = ""; + } + else if (code == "_CAUSALE") + { + TFilename configname = "zucchett.ini"; + TConfig configfile(configname); + TToken_string causali = configfile.get("STANDARD", "CAUSALI"); + const char sezione = cur.curr(LF_RMOV).get_char(RMV_SEZIONE); + if (sezione == 'D') + valore = causali.get(0); + else + valore = causali.get(1); + } + else if (code == "_NUMFILES") + { + const int nfiles = app().get_nfiles(); + valore.format("%ld", nfiles); + } + else if (code == "_NUMRECORDS") + { + const long nrecords = app().get_nrecords(); + valore.format("%ld", nrecords); + } + else if (code == "_NUMRECORDSDETTAGLIO") + { + const long nrecords = app().get_nrecsdettaglio(); + valore.format("%ld", nrecords); + } + else if (code == "_TIPOFILE") + { + valore = app().get_descrdettaglio(); + } + else if (code == "_OPZIONI") + { + TString in(s.get()); + TFilename configname = "zucchett.ini"; + TConfig configfile(configname); + valore = configfile.get(in, "OPZIONI"); + } + else if (code == "_OGGI") + { + TDate data(TODAY); + valore = data.string(full, '-', full, full, amg_date); + valore.strip("-"); + } + else if (code == "_CODIFICA") + { + const char tipocf = str[0]; + if (tipocf == 'C') + valore = "P"; + else + valore = "R"; + } + else if (code == "_NUMDOC") + { + if (cur.file("REG").get("I0") == 1) + valore = cur.curr().get(MOV_NUMDOC); + else + valore = cur.curr().get(MOV_PROTIVA); + } + else if (code == "_SEGNO") + { + TString archivio(s.get()); + TString campo(s.get()); + const real importo = cur.curr(archivio).get_real(campo); + valore = "+"; + if (importo < 0) + valore = "-"; + } + else if (code == "_IMPORTO") + { + real importo(str); + valore = importo.string(0,2); + valore.strip("-"); + valore.strip("+"); + valore.strip("."); + } + else if (code == "_TIPODOC") + { + const char tipodoc = str[0]; + valore = (tipodoc == 'F') ? "1" : "2"; + } + else if (code == "_DIVERSI") + { + valore = (app().finemov() ? "X" : " "); + } + else if (code == "_TOTALE") + { + real importo(ZERO); + if (app().totale()) + { + importo = cur.curr(LF_MOV).get_real(MOV_TOTDOC); + importo+=cur.curr(LF_MOV).get_real(MOV_RITFIS); + } + valore = importo.string(11,2); + valore.strip("-"); + valore.strip("+"); + valore.strip("."); + } + else if (code == "_SEGNOTOTALE") + { + real importo(ZERO); + if (app().totale()) + { + importo = cur.curr(LF_MOV).get_real(MOV_TOTDOC); + importo+=cur.curr(LF_MOV).get_real(MOV_RITFIS); + } + valore = importo.string(11,2); + valore.trim(); + valore = valore.sub(0,1); + if (valore[0] != '-' && valore[0] != '+') + valore = "+"; + } + else NFCHECK("Macro non definita: %s", (const char *)code); + str = valore; +} + +bool TInvio::create() +{ + open_files(LF_CAUSALI, LF_CLIFO, LF_PCON, LF_MOV, LF_RMOV, LF_RMOVIVA, 0); + _msk = new TInvio_mask(); + _trasfile = NULL; + return TSkeleton_application::create(); +} + +bool TInvio::destroy() +{ + if (_trasfile) + delete _trasfile; + delete _msk; + + return TSkeleton_application::destroy(); +} + +void TInvio::main_loop() +{ + TFilename configname = "zucchett.ini"; + TConfig configfile(configname); + _msk->set(F_NUMEROINVIO, configfile.get_int("NUMEROINVIO","OPZIONI")+1); + _msk->set(F_DATAINI, configfile.get("DATA","OPZIONI")); + _msk->set(F_DESTINAZIONE, configfile.get("PERCORSO","OPZIONI")); + + while (_msk->run()!=K_QUIT) + { + _totale = FALSE; + _finemov = FALSE; + configfile.set("NUMEROINVIO", _msk->get(F_NUMEROINVIO),"OPZIONI"); + configfile.set("DATA", _msk->get_date(F_DATAFIN),"OPZIONI"); + configfile.set("PERCORSO", _msk->get(F_DESTINAZIONE),"OPZIONI"); + configfile.set_paragraph("CAUSALI"); + _dataini = _msk->get_date(F_DATAINI); + _datafin = _msk->get_date(F_DATAFIN); + const char tipoinvio = _msk->get(F_TIPOINVIO)[0]; + if (tipoinvio == 'Z') + invio_zucchetti(); + } +} + +void TInvio::invio_zucchetti() +{ + TFilename configname = "zucchett.ini"; + TConfig configfile(configname); + TFilename filename = _msk->get(F_DESTINAZIONE); + filename.add(configfile.get("NOMEFILE", "OPZIONI")); + if (fexist(filename)) + remove(filename); + _trasfile = new TInvio_file(filename, configname); + _trasfile->open(filename,'w'); + i_zucchetti_testa(); + if (_msk->get_bool(F_CAUSALI)) + i_zucchetti_causali(); + if (_msk->get_bool(F_CLIFOR)) + i_zucchetti_clifor(); + if (_msk->get_bool(F_CONTI)) + i_zucchetti_conti(); + if (_msk->get_bool(F_MOVCONT)) + i_zucchetti_movcont(); + if (_msk->get_bool(F_MOVIVA)) + { + i_zucchetti_moviva('V'); + i_zucchetti_moviva('A'); + } + i_zucchetti_coda(); + _trasfile->close(); + delete _trasfile; + _trasfile = NULL; +} + +void TInvio::i_zucchetti_testa() +{ + // cursore fittizio + TRelation rel(LF_CAUSALI); + TCursor cur(&rel); + _nrecords = 0; + _nfiles = 0; + if (_msk->get_bool(F_CAUSALI)) + { + _nrecords += i_zucchetti_causali(FALSE)+2; + _nfiles++; + } + if (_msk->get_bool(F_CLIFOR)) + { + _nrecords += i_zucchetti_clifor(FALSE)+2; + _nfiles++; + } + if (_msk->get_bool(F_CONTI)) + { + _nrecords += i_zucchetti_conti(FALSE)+2; + _nfiles++; + } + if (_msk->get_bool(F_MOVCONT)) + { + _nrecsmocontab = i_zucchetti_movcont(FALSE); + if (_nrecsmocontab > 0) + { + _nrecords += _nrecsmocontab+2; + _nfiles++; + } + } + if (_msk->get_bool(F_MOVIVA)) + { + _nrecsfattvend = i_zucchetti_moviva('V', FALSE); + if (_nrecsfattvend > 0) + { + _nrecords += _nrecsfattvend+2; + _nfiles++; + } + _nrecsfattacqu = i_zucchetti_moviva('A', FALSE); + if (_nrecsfattacqu > 0) + { + _nrecords += _nrecsfattacqu+2; + _nfiles++; + } + } + TRecord_text rec; + rec.set_type("T"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); +} + +void TInvio::i_zucchetti_testa_dettaglio(const TString16& descr, const long nrecs) +{ + // cursore fittizio + TRelation rel(LF_CAUSALI); + TCursor cur(&rel); + _nrecsdettaglio = nrecs; + _descrdettaglio = descr; + TRecord_text rec; + rec.set_type("F"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); +} + +void TInvio::i_zucchetti_coda_dettaglio(const TString16& descr, const long nrecs) +{ + // cursore fittizio + TRelation rel(LF_CAUSALI); + TCursor cur(&rel); + _nrecsdettaglio = nrecs; + _descrdettaglio = descr; + TRecord_text rec; + rec.set_type("E"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); +} + +void TInvio::i_zucchetti_coda() +{ + TRelation rel(LF_CAUSALI); + TCursor cur(&rel); + TRecord_text rec; + rec.set_type("C"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); +} + +long TInvio::i_zucchetti_causali(const bool invio) +{ + TRelation rel(LF_CAUSALI); + TCursor cur(&rel); + const long cur_items = cur.items(); + if (cur_items != 0 && invio) + { + i_zucchetti_testa_dettaglio("CAUSMOVM", cur_items); + cur.freeze(); + TRectype& cur_rec = cur.curr(); + for (cur = 0; cur.pos() < cur_items; ++(cur)) + { + TRecord_text rec; + rec.set_type("21"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); + } + i_zucchetti_coda_dettaglio("CAUSMOVM", cur_items); + } + return cur_items; +} + +long TInvio::i_zucchetti_conti(const bool invio) +{ + TRelation rel(LF_PCON); + TCursor cur(&rel); + const long cur_items = cur.items(); + if (cur_items != 0 && invio) + { + i_zucchetti_testa_dettaglio("DESCONTI", cur_items); + cur.freeze(); + TRectype& cur_rec = cur.curr(); + for (cur = 0; cur.pos() < cur_items; ++(cur)) + { + TRecord_text rec; + rec.set_type("20"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); + } + i_zucchetti_coda_dettaglio("DESCONTI", cur_items); + } + return cur_items; +} + +long TInvio::i_zucchetti_movcont(const bool invio) +{ + TRectype da(LF_MOV); + TRectype a(LF_MOV); + da.put(MOV_DATAREG, _dataini); + a.put(MOV_DATAREG, _datafin); + TRelation rel(LF_MOV); + rel.add(LF_RMOV, "NUMREG==NUMREG", 1); + TCursor cur(&rel, "23->PROTIVA == \"\"", 2, &da, &a); + + const long cur_items = cur.items(); + long totrec = 0; + if (cur_items != 0) + { + if (invio) + i_zucchetti_testa_dettaglio("MOCONTAB", _nrecsmocontab); + cur.freeze(); + TRectype& cur_rec = cur.curr(); + for (cur = 0; cur.pos() < cur_items; ++(cur)) + { + const long numreg = cur.curr().get_long(MOV_NUMREG); + bool continua = TRUE; + while (continua) + { + const long numregrig = cur.curr(LF_RMOV).get_long(RMV_NUMREG); + if (numreg == numregrig) + { + if (invio) + { + TRectype& cur_rec_righe = cur.curr(LF_RMOV); + TRecord_text recrighe; + recrighe.set_type("50"); + cur.save_status(); + _finemov = !(cur.next_match(LF_RMOV, "NUMREG")); + cur.restore_status(); + _trasfile->autoload(recrighe, cur); + _trasfile->write(recrighe); + } + totrec++; + } + continua = cur.next_match(LF_RMOV, "NUMREG"); + } + } + if (invio) + i_zucchetti_coda_dettaglio("MOCONTAB", _nrecsmocontab); + } + return totrec; +} + +long TInvio::i_zucchetti_moviva(const char acqven, const bool invio) +{ + TRectype da(LF_MOV); + TRectype a(LF_MOV); + da.put(MOV_DATAREG, _dataini); + a.put(MOV_DATAREG, _datafin); + TRelation rel(LF_MOV); + rel.add(LF_RMOVIVA, "NUMREG==NUMREG", 1); + rel.add("REG", "CODTAB[1,4]==ANNOIVA|CODTAB[5,7]==REG", 1); + TString filtro = "(23->PROTIVA != \"\") && "; + if (acqven == 'V') + filtro << "(REG->I0 == 1)"; + else + filtro << "(REG->I0 == 2)"; + TCursor cur(&rel, "", 2, &da, &a); + cur.setfilter(filtro, TRUE); + const long cur_items = cur.items(); + long totrec = 0; + if (cur_items != 0) + { + if (invio) + i_zucchetti_testa_dettaglio(acqven == 'V' ? "FATTVEND" : "FATTACQU", acqven == 'V' ? _nrecsfattvend : _nrecsfattacqu); + cur.freeze(); + TRectype& cur_rec = cur.curr(); + for (cur = 0; cur.pos() < cur_items; ++(cur)) + { + if (invio) + { + TRecord_text rec; + rec.set_type("30"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); + } + totrec++; + const long numreg = cur.curr().get_long(MOV_NUMREG); + bool continua = TRUE; + while (continua) + { + const long numregrig = cur.curr(LF_RMOVIVA).get_long(RMI_NUMREG); + if (numreg == numregrig) + { + if (invio) + { + TRectype& cur_rec_righe = cur.curr(LF_RMOVIVA); + TRecord_text recrighe; + recrighe.set_type("31"); + cur.save_status(); + _totale = !(cur.next_match(LF_RMOVIVA, "NUMREG")); + cur.restore_status(); + _trasfile->autoload(recrighe, cur); + _trasfile->write(recrighe); + } + totrec++; + } + continua = cur.next_match(LF_RMOVIVA, "NUMREG"); + } + } + if (invio) + i_zucchetti_coda_dettaglio(acqven == 'V' ? "FATTVEND" : "FATTACQU", acqven == 'V' ? _nrecsfattvend : _nrecsfattacqu); + } + return totrec; +} + +long TInvio::i_zucchetti_clifor(const bool invio) +{ + TRelation rel(LF_CLIFO); + TCursor cur(&rel); + const long cur_items = cur.items(); + if (cur_items != 0 && invio) + { + i_zucchetti_testa_dettaglio("CLIEFORN", cur_items*2); + cur.freeze(); + TRectype& cur_rec = cur.curr(); + for (cur = 0; cur.pos() < cur_items; ++(cur)) + { + TRecord_text rec; + + rec.set_type("10"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); + + rec.set_type("11"); + _trasfile->autoload(rec, cur); + _trasfile->write(rec); + } + i_zucchetti_coda_dettaglio("CLIEFORN", cur_items*2); + } + return cur_items+cur_items; +} + +int cg7100(int argc, char **argv) +{ + TInvio a; + a.run(argc, argv, "Invio dati contabilità"); + return 0; +} + diff --git a/cg/cg7100a.h b/cg/cg7100a.h new file mode 100755 index 000000000..b6f4fd037 --- /dev/null +++ b/cg/cg7100a.h @@ -0,0 +1,18 @@ +// invio dati ad altra procedura + +#define F_CODDITTA 101 +#define F_RAGSOC 102 +#define F_CAUSALI 110 +#define F_CONTI 111 +#define F_CLIFOR 112 +#define F_MOVCONT 113 +#define F_MOVIVA 114 +#define F_CORRISP 115 +#define F_SALDACONTO 116 +#define F_TIPOINVIO 120 +#define F_DESTINAZIONE 121 +#define F_NUMEROINVIO 122 +#define F_DATAINI 123 +#define F_DATAFIN 124 +#define F_RIPRISTINA 125 +#define F_DATARIPRISTINO 126 diff --git a/cg/cg7100a.uml b/cg/cg7100a.uml new file mode 100755 index 000000000..3a1ff6bfd --- /dev/null +++ b/cg/cg7100a.uml @@ -0,0 +1,128 @@ +#include "cg7100a.h" + +PAGE "Invio dati contabilita'" -1 -1 78 20 + +//STRING 30 70 50 +// BEGIN +// FLAGS "G" +// PROMPT 10 -5 "Profilo " +// PSELECT +//END + +GROUPBOX DLG_NULL 76 3 +BEGIN + PROMPT 2 1 "@bDitta corrente" +END + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 3 2 "Codice " + FLAGS "FD" + USE LF_NDITTE + INPUT CODDITTA F_CODDITTA + OUTPUT F_RAGSOC RAGSOC + CHECKTYPE REQUIRED +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 23 2 "" + FLAGS "D" +END + +GROUPBOX DLG_NULL 76 6 +BEGIN + PROMPT 2 4 "Dati da inviare" +END + +BOOLEAN F_CAUSALI +BEGIN + PROMPT 3 5 "Causali" + FLAGS "D" +END + +BOOLEAN F_CONTI +BEGIN + PROMPT 3 6 "Conti" +END + +BOOLEAN F_CLIFOR +BEGIN + PROMPT 3 7 "Clienti/Fornitori" +END + +BOOLEAN F_MOVCONT +BEGIN + PROMPT 3 8 "Movimenti contabili" + MESSAGE TRUE,ENABLE F_DATAFIN +END + +BOOLEAN F_MOVIVA +BEGIN + PROMPT 40 5 "Movimenti IVA" + MESSAGE TRUE,ENABLE F_DATAFIN +END + +BOOLEAN F_CORRISP +BEGIN + PROMPT 40 6 "Corrispettivi" + MESSAGE TRUE,ENABLE F_DATAFIN +END + +BOOLEAN F_SALDACONTO +BEGIN + PROMPT 40 7 "Saldaconto" + FLAGS "D" +END + +LISTBOX F_TIPOINVIO 20 +BEGIN + PROMPT 2 10 "Invio a " + ITEM "Z|Zucchetti" +END + +STRING F_DESTINAZIONE 20 +BEGIN + PROMPT 2 11 "Destinazione " +END + +NUMBER F_NUMEROINVIO 2 +BEGIN + PROMPT 2 12 "Numero invio " +END + +DATE F_DATAINI +BEGIN + PROMPT 20 12 "Data iniz. " +END + +DATE F_DATAFIN +BEGIN + PROMPT 44 12 "Data fin. " +END + +BUTTON F_RIPRISTINA 20 +BEGIN + PROMPT 2 14 "Annulla invio" + MESSAGE SHOW,F_DATARIPRISTINO|ENABLE,F_DATARIPRISTINO +END + +DATE F_DATARIPRISTINO +BEGIN + PROMPT 25 14 "Annulla invio fino al " + FLAGS "HD" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK diff --git a/cg/zucchett.ini b/cg/zucchett.ini new file mode 100755 index 000000000..d73d63b30 --- /dev/null +++ b/cg/zucchett.ini @@ -0,0 +1,759 @@ +[MAIN] +DECSEP = , +FIELDSEP = +RECORDSEP = +RECORDSIZE = 200 +SKIPLINES = 0 +TYPEFIELD = 0 +TYPELEN = 0 +TYPEPOS = -1 + +[TYPE STRINGA] +ALIGN = L +DATA = S +DECIMAL = 0 +FILLER = ' ' +LENGTH = 0 +PICTURE = + +[TYPE NUMERO] +ALIGN = R +DATA = N +DECIMAL = 0 +FILLER = '0' +LENGTH = 0 +PICTURE = + +[TYPE DATA] +ALIGN = +DATA = D +DECIMAL = 0 +FILLER = '0' +LENGTH = 8 +PICTURE = 3444 + +[TYPE IMPORTO] +ALIGN = R +DATA = S +DECIMAL = 0 +FILLER = '0' +LENGTH = 0 + +[RECORD T] + +NAME(0) = TIPO RECORD TESTATA GENERALE +TYPE(0) = STRINGA +POSITION(0) = 0 +LENGTH(0) = 1 +MESSAGE(0)=_FISSO,!T + +NAME(1) = NUMERO FILE TRASFERITI +TYPE(1) = NUMERO +POSITION(1) = 1 +LENGTH(1) = 3 +MESSAGE(1)=_NUMFILES + +NAME(2) = NUMERO RECORD TRASFERITI +TYPE(2) = NUMERO +POSITION(2) = 4 +LENGTH(2) = 13 +MESSAGE(2)=_NUMRECORDS + +NAME(3) = CODICE DITTA +TYPE(3) = NUMERO +POSITION(3) = 17 +LENGTH(3) = 6 +MESSAGE(3)=_OPZIONI,CODICEDITTA + +NAME(4) = NUMERO SPEDIZIONE +TYPE(4) = NUMERO +POSITION(4) = 23 +LENGTH(4) = 2 +MESSAGE(4)=_OPZIONI,NUMEROINVIO + +NAME(5) = DATA SPEDIZIONE +TYPE(5) = STRINGA +POSITION(5) = 25 +LENGTH(5) = 8 +MESSAGE(5)=_OGGI + +NAME(6) = TIPO SPEDIZIONE +TYPE(6) = STRINGA +POSITION(6) = 33 +LENGTH(6) = 1 +MESSAGE(6)=_FISSO,!V + +[RECORD C] + +NAME(0) = TIPO RECORD CODA GENERALE +TYPE(0) = STRINGA +POSITION(0) = 0 +LENGTH(0) = 1 +MESSAGE(0)=_FISSO,!T + +NAME(1) = NUMERO FILE TRASFERITI +TYPE(1) = NUMERO +POSITION(1) = 1 +LENGTH(1) = 3 +MESSAGE(1)=_NUMFILES + +NAME(2) = NUMERO RECORD TRASFERITI +TYPE(2) = NUMERO +POSITION(2) = 4 +LENGTH(2) = 13 +MESSAGE(2)=_NUMRECORDS + +NAME(3) = CODICE DITTA +TYPE(3) = NUMERO +POSITION(3) = 17 +LENGTH(3) = 6 +MESSAGE(3)=_OPZIONI,CODICEDITTA + +NAME(4) = NUMERO SPEDIZIONE +TYPE(4) = NUMERO +POSITION(4) = 23 +LENGTH(4) = 2 +MESSAGE(4)=_OPZIONI,NUMEROINVIO + +NAME(5) = DATA SPEDIZIONE +TYPE(5) = STRINGA +POSITION(5) = 25 +LENGTH(5) = 8 +MESSAGE(5)=_OGGI + +NAME(6) = TIPO SPEDIZIONE +TYPE(6) = STRINGA +POSITION(6) = 33 +LENGTH(6) = 1 +MESSAGE(6)=_FISSO,!V + +[RECORD F] + +NAME(0) = TIPO RECORD TESTATA GRUPPO +TYPE(0) = STRINGA +POSITION(0) = 0 +LENGTH(0) = 1 +MESSAGE(0)=_FISSO,!F + +NAME(1) = TIPO FILE +TYPE(1) = STRINGA +POSITION(1) = 1 +LENGTH(1) = 8 +MESSAGE(1)=_TIPOFILE + +NAME(2) = NUMERO RECORD TRASFERITI +TYPE(2) = NUMERO +POSITION(2) = 9 +LENGTH(2) = 8 +MESSAGE(2)=_NUMRECORDSDETTAGLIO + +[RECORD E] + +NAME(0) = TIPO RECORD CODA GRUPPO +TYPE(0) = STRINGA +POSITION(0) = 0 +LENGTH(0) = 1 +MESSAGE(0)=_FISSO,!E + +NAME(1) = TIPO FILE +TYPE(1) = STRINGA +POSITION(1) = 1 +LENGTH(1) = 8 +MESSAGE(1)=_TIPOFILE + +NAME(2) = NUMERO RECORD TRASFERITI +TYPE(2) = NUMERO +POSITION(2) = 9 +LENGTH(2) = 8 +MESSAGE(2)=_NUMRECORDSDETTAGLIO + +[RECORD 21] +NAME(1) = TIPO DETTAGLIO CAUSALI +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D21 + +NAME(2) = CAUSALE +TYPE(2) = STRINGA +POSITION(2) = 3 +LENGTH(2) = 3 +FIELD(2) = 26->CODCAUS + +NAME(3) = DESCRIZIONE +TYPE(3) = STRINGA +POSITION(3) = 6 +LENGTH(3) = 29 +FIELD(3) = 26->DESCR[1,29] + +NAME(4) = LIMITE INFERIORE DARE +TYPE(4) = NUMERO +POSITION(4) = 35 +LENGTH(4) = 5 + +NAME(5) = LIMITE SUPERIORE DARE +TYPE(5) = NUMERO +POSITION(5) = 40 +LENGTH(5) = 5 + +NAME(6) = LIMITE INFERIORE AVERE +TYPE(6) = NUMERO +POSITION(6) = 45 +LENGTH(6) = 5 + +NAME(7) = LIMITE SUPERIORE AVERE +TYPE(7) = NUMERO +POSITION(7) = 50 +LENGTH(7) = 5 + +NAME(8) = FILLER +TYPE(8) = STRINGA +POSITION(8) = 55 +LENGTH(8) = 145 + +[RECORD 10] +NAME(1) = TIPO DETTAGLIO CLIFOR 1 +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D10 + +NAME(2) = FLAG CLIFO +TYPE(2) = STRINGA +POSITION(2) = 3 +LENGTH(2) = 1 +FIELD(2) = 20->TIPOCF + +NAME(3) = CODICE CLIFO +TYPE(3) = NUMERO +POSITION(3) = 4 +LENGTH(3) = 5 +FIELD(3) = 20->CODCF + +NAME(4) = TIPO CODIFICA CLIFO +TYPE(4) = STRINGA +POSITION(4) = 9 +LENGTH(4) = 1 + +NAME(5) = CHIAVE SGG00F +TYPE(5) = STRINGA +POSITION(5) = 10 +LENGTH(5) = 11 + +NAME(6) = COGNOME SOGGETTO +TYPE(6) = STRINGA +POSITION(6) = 21 +LENGTH(6) = 25 +FIELD(6) = 20->RAGSOC[1,25] + +NAME(7) = NOME SOGGETTO +TYPE(7) = STRINGA +POSITION(7) = 46 +LENGTH(7) = 25 +FIELD(7) = 20->RAGSOC[26,25] + +NAME(8) = CODICE FISCALE +TYPE(8) = STRINGA +POSITION(8) = 71 +LENGTH(8) = 16 +FIELD(8) = 20->PAIV + +NAME(9) = CODICE FISCALE ERRATO +TYPE(9) = STRINGA +POSITION(9) = 87 +LENGTH(9) = 1 + +NAME(10) = SOGGETTO INTRACOMUNITARIO +TYPE(10) = STRINGA +POSITION(10) = 88 +LENGTH(10) = 1 + +NAME(11) = FILLER +TYPE(11) = STRINGA +POSITION(11) = 89 +LENGTH(11) = 111 + +[RECORD 11] +NAME(1) = TIPO DETTAGLIO CLIFOR 2 +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D11 + +NAME(2) = VIA DI RESIDENZA +TYPE(2) = STRINGA +POSITION(2) = 3 +LENGTH(2) = 32 +FIELD(2)=20->INDCF + +NAME(3) = NUMERO CIVICO +TYPE(3) = STRINGA +POSITION(3) = 35 +LENGTH(3) = 5 +FIELD(3)=20->CIVCF + +NAME(4) = CAP DI RESIDENZA +TYPE(4) = STRINGA +POSITION(4) = 40 +LENGTH(4) = 5 +FIELD(4)=20->CAPCF + +NAME(5) = COMUNE DI RESIDENZA +TYPE(5) = STRINGA +POSITION(5) = 45 +LENGTH(5) = 23 + +NAME(6) = PROVINCIA DI RESIDENZA +TYPE(6) = STRINGA +POSITION(6) = 68 +LENGTH(6) = 2 + +NAME(7) = PARTITA IVA +TYPE(7) = STRINGA +POSITION(7) = 70 +LENGTH(7) = 11 +FIELD(7)=20->PAIV + +NAME(8) = PARTITA IVA ERRATA +TYPE(8) = STRINGA +POSITION(8) = 81 +LENGTH(8) = 1 + +NAME(9) = TIPO SOGGETTO +TYPE(9) = STRINGA +POSITION(9) = 82 +LENGTH(9) = 1 +FIELD(9) = 20->TIPOPERS + +NAME(10) = ALLEGATO CLIFOR +TYPE(10) = STRINGA +POSITION(10) = 83 +LENGTH(10) = 1 + +NAME(11) = BOLLA DOGANALE +TYPE(11) = STRINGA +POSITION(11) = 84 +LENGTH(11) = 1 + +NAME(12) = FILLER +TYPE(12) = STRINGA +POSITION(12) = 85 +LENGTH(12) = 115 + +[RECORD 20] + +NAME(1) = TIPO DETTAGLIO SOTTOCONTI +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D20 + +NAME(2) = SOTTOCONTO +TYPE(2) = NUMERO +POSITION(2) = 3 +LENGTH(2) = 7 +FIELD(2)=19->SOTTOCONTO + +NAME(3) = DESCRIZIONE +TYPE(3) = STRINGA +POSITION(3) = 10 +LENGTH(3) = 30 +FIELD(3)=19->DESCR + +NAME(4) = TIPO CONTO +TYPE(4) = STRINGA +POSITION(4) = 40 +LENGTH(4) = 30 + +NAME(5) = FILLER +TYPE(5) = STRINGA +POSITION(5) = 41 +LENGTH(5) = 159 + +[RECORD 50] +NAME(1) = TIPO DETTAGLIO MOV CONT +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D50 + +NAME(2) = DATA REGISTRAZIONE +TYPE(2) = DATA +POSITION(2) = 3 +LENGTH(2) = 8 +FIELD(2) = 23->DATAREG + +NAME(3) = CODICE CAUSALE +TYPE(3) = STRINGA +POSITION(3) = 11 +LENGTH(3) = 3 +FIELD(3) = 23->CODCAUS +MESSAGE(3) = _CAUSALE + +NAME(4) = DESCRIZIONE +TYPE(4) = STRINGA +POSITION(4) = 14 +LENGTH(4) = 29 +FIELD(4) = 23->DESCR + +NAME(5) = IMPORTO EURO +TYPE(5) = IMPORTO +POSITION(5) = 43 +LENGTH(5) = 13 +FIELD(5) = 24->IMPORTO +MESSAGE(5) = _IMPORTO + +NAME(6) = SEGNO IMPORTO +TYPE(6) = STRINGA +POSITION(6) = 56 +LENGTH(6) = 1 +MESSAGE(6) = _SEGNO,23,TOTDOC + +NAME(7) = CENTRO DI COSTO DARE +TYPE(7) = NUMERO +POSITION(7) = 57 +LENGTH(7) = 2 + +NAME(8) = SOTTOCONTO DARE +TYPE(8) = NUMERO +POSITION(8) = 59 +LENGTH(8) = 5 +FIELD(8) = 24->SOTTOCONTO +MESSAGE(8) = _SEZIONE,D + +NAME(9) = CENTRO DI COSTO AVERE +TYPE(9) = NUMERO +POSITION(9) = 64 +LENGTH(9) = 2 + +NAME(10) = SOTTOCONTO AVERE +TYPE(10) = NUMERO +POSITION(10) = 66 +LENGTH(10) = 5 +FIELD(10) = 24->SOTTOCONTO +MESSAGE(10)= _SEZIONE,A + +NAME(11) = TIPO CODIFICA DARE +TYPE(11) = STRINGA +POSITION(11) = 71 +LENGTH(11) = 1 + +NAME(12) = PARTITA IVA DARE +TYPE(12) = NUMERO +POSITION(12) = 72 +LENGTH(12) = 11 + +NAME(13) = TIPO CODIFICA AVERE +TYPE(13) = STRINGA +POSITION(13) = 83 +LENGTH(13) = 1 + +NAME(14) = PARTITA IVA AVERE +TYPE(14) = NUMERO +POSITION(14) = 84 +LENGTH(14) = 11 + +NAME(15) = FLAG DIVERSI +TYPE(15) = STRINGA +POSITION(15) = 95 +LENGTH(15) = 1 +MESSAGE(15) = _DIVERSI + +NAME(16) = FLAG LIRE EURO +TYPE(16) = STRINGA +POSITION(16) = 96 +LENGTH(16) = 1 +MESSAGE(16) = _FISSO,!E + +NAME(17) = FILLER +TYPE(17) = STRINGA +POSITION(17) = 97 +LENGTH(17) = 103 + +[RECORD 51] +NAME(1) = TIPO DETTAGLIO DESCRIZIONI AGGIUNTIVE MOV CONT +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D51 + +NAME(2) = DESCRIZIONE +TYPE(2) = STRINGA +POSITION(2) = 3 +LENGTH(2) = 29 +FIELD(2) = 24->DESCR + +NAME(3) = FLAG FINE DESCRIZIONI +TYPE(3) = STRINGA +POSITION(3) = 32 +LENGTH(3) = 1 + +NAME(4) = FILLER +TYPE(4) = STRINGA +POSITION(4) = 33 +LENGTH(4) = 167 + +[RECORD 30] +NAME(1) = TIPO DETTAGLIO MOV IVA (FATTURE) +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D30 + +NAME(2) = ANNO REGISTRAZIONE +TYPE(2) = NUMERO +POSITION(2) = 3 +LENGTH(2) = 4 +MESSAGE(2) = _ANNO +FIELD(2) = 23->DATAREG + +NAME(3) = MESE REGISTRAZIONE +TYPE(3) = NUMERO +POSITION(3) = 7 +LENGTH(3) = 2 +MESSAGE(3) = _MESE +FIELD(3) = 23->DATAREG + +NAME(4) = ANNO COMPETENZA +TYPE(4) = NUMERO +POSITION(4) = 9 +LENGTH(4) = 4 +MESSAGE(4) = _ANNO +FIELD(4) = 23->DATACOMP + +NAME(5) = MESE COMPETENZA +TYPE(5) = NUMERO +POSITION(5) = 13 +LENGTH(5) = 2 +MESSAGE(5) = _MESE +FIELD(5) = 23->DATACOMP + +NAME(6) = SEZIONE +TYPE(6) = NUMERO +POSITION(6) = 15 +LENGTH(6) = 2 + +NAME(7) = TIPO DOCUMENTO +TYPE(7) = STRINGA +POSITION(7) = 17 +LENGTH(7) = 1 +FIELD(7) = 23->TIPODOC[1,1] +MESSAGE(7) = _TIPODOC + +NAME(8) = TIPO FATTURA +TYPE(8) = STRINGA +POSITION(8) = 18 +LENGTH(8) = 2 + +NAME(9) = NUMERO DOCUMENTO +TYPE(9) = NUMERO +POSITION(9) = 20 +LENGTH(9) = 7 +FIELD(9) = 23->NUMDOC +MESSAGE(9) = _NUMDOC + +NAME(10) = NUMERO BIS +TYPE(10) = STRINGA +POSITION(10) = 27 +LENGTH(10) = 1 + +NAME(11) = NUMERO FATTURA FORNITORE +TYPE(11) = STRINGA +POSITION(11) = 28 +LENGTH(11) = 7 +FIELD(11) = 23->NUMDOC + +NAME(12) = DATA REGISTRAZIONE +TYPE(12) = DATA +POSITION(12) = 35 +LENGTH(12) = 8 +FIELD(12) = 23->DATAREG + +NAME(13) = DATA FATTURA +TYPE(13) = DATA +POSITION(13) = 43 +LENGTH(13) = 8 +FIELD(13) = 23->DATADOC + +NAME(14) = DATA SCADENZA +TYPE(14) = DATA +POSITION(14) = 51 +LENGTH(14) = 8 + +NAME(15) = DATA RISCONTO +TYPE(15) = DATA +POSITION(15) = 59 +LENGTH(15) = 8 + +NAME(16) = DATA RATEO +TYPE(16) = DATA +POSITION(16) = 67 +LENGTH(16) = 8 + +NAME(17) = CODICE PAGAMENTO +TYPE(17) = NUMERO +POSITION(17) = 75 +LENGTH(17) = 3 + +NAME(18) = TIPO PAGAMENTO +TYPE(18) = STRINGA +POSITION(18) = 78 +LENGTH(18) = 1 + +NAME(19) = CODICE CLIFOR +TYPE(19) = NUMERO +POSITION(19) = 79 +LENGTH(19) = 5 +FIELD(19) = 23->CODCF + +NAME(20) = TIPO CODIFICA +TYPE(20) = STRINGA +POSITION(20) = 84 +LENGTH(20) = 1 +FIELD(20) = 23->TIPO +MESSAGE(20) = _CODIFICA + +NAME(21) = PARTITA IVA +TYPE(21) = NUMERO +POSITION(21) = 85 +LENGTH(21) = 11 + +NAME(22) = DESCRIZIONE ALTERNATIVA +TYPE(22) = STRINGA +POSITION(22) = 96 +LENGTH(22) = 29 + +NAME(23) = TIPO DESCRIZIONE +TYPE(23) = STRINGA +POSITION(23) = 125 +LENGTH(23) = 1 + +NAME(24) = FLAG PARTITA +TYPE(24) = STRINGA +POSITION(24) = 126 +LENGTH(24) = 1 + +NAME(25) = MESE STAMPA +TYPE(25) = NUMERO +POSITION(25) = 127 +LENGTH(25) = 2 + +NAME(26) = FLAG LIRE EURO +TYPE(26) = STRINGA +POSITION(26) = 129 +LENGTH(26) = 1 +MESSAGE(26) = _FISSO,!E + +NAME(27) = ALTRE RITENUTE +TYPE(27) = IMPORTO +POSITION(27) = 130 +LENGTH(27) = 11 + +NAME(28) = RITENUTA ACCONTO +TYPE(28) = IMPORTO +POSITION(28) = 141 +LENGTH(28) = 11 +FIELD(28) = 23->RITFIS +MESSAGE(28) = _IMPORTO + +[RECORD 31] +NAME(1) = TIPO DETTAGLIO RIGHE MOVIVA (RIGHE FATTURA) +TYPE(1) = STRINGA +POSITION(1) = 0 +LENGTH(1) = 3 +MESSAGE(1)=_FISSO,!D31 + +NAME(2) = ALIQUOTA IVA +TYPE(2) = STRINGA +POSITION(2) = 3 +LENGTH(2) = 4 +FIELD(2)= 25->CODIVA[1,2] +FILLER(2) = '0' + +NAME(3) = IMPORTO IMPONIBILE EURO +TYPE(3) = IMPORTO +POSITION(3) = 7 +LENGTH(3) = 11 +FIELD(3)= 25->IMPONIBILE +MESSAGE(3) = _IMPORTO + +NAME(4) = SEGNO IMPONIBILE +TYPE(4) = STRINGA +POSITION(4) = 18 +LENGTH(4) = 1 +MESSAGE(4) = _SEGNO,25,IMPONIBILE + +NAME(5) = IMPORTO IMPOSTA EURO +TYPE(5) = IMPORTO +POSITION(5) = 19 +LENGTH(5) = 9 +FIELD(5)= 25->IMPOSTA +MESSAGE(5) = _IMPORTO + +NAME(6) = SEGNO IMPOSTA +TYPE(6) = STRINGA +POSITION(6) = 28 +LENGTH(6) = 1 +MESSAGE(6) = _SEGNO,25,IMPOSTA + +NAME(7) = CODICE NORMA +TYPE(7) = STRINGA +POSITION(7) = 29 +LENGTH(7) = 2 +FIELD(7) = 25->CODIVA[3,4] +FILLER(7) = '0' + +NAME(8) = CENTRO DI COSTO +TYPE(8) = STRINGA +POSITION(8) = 31 +LENGTH(8) = 2 + +NAME(9) = CONTROPARTITA +TYPE(9) = NUMERO +POSITION(9) = 33 +LENGTH(9) = 5 +FIELD(9) = 25->SOTTOCONTO + +NAME(10) = IMPORTO TOTALE EURO +TYPE(10) = IMPORTO +POSITION(10) = 38 +LENGTH(10) = 11 +MESSAGE(10)= _TOTALE + +NAME(11) = SEGNO TOTALE +TYPE(11) = STRINGA +POSITION(11) = 49 +LENGTH(11) = 1 +MESSAGE(11)= _SEGNOTOTALE + +NAME(12) = IMPORTO VALUTA +TYPE(12) = IMPORTO +POSITION(12) = 50 +LENGTH(12) = 13 + +NAME(13) = SEGNO VALUTA +TYPE(13) = STRINGA +POSITION(13) = 63 +LENGTH(13) = 1 +MESSAGE(13) = _FISSO,!+ + +NAME(14) = TIPO VALUTA +TYPE(14) = STRINGA +POSITION(14) = 64 +LENGTH(14) = 3 + +NAME(15) = CODICE CEE +TYPE(15) = STRINGA +POSITION(15) = 67 +LENGTH(15) = 2 + +[OPZIONI] +CODICEDITTA = 000106 +DATA = +NOMEFILE = im000000 +NUMEROINVIO = +PERCORSO = + +[CAUSALI] +STANDARD=021|020 +