#include #include #include #include #include #include "fe0100a.h" #include "felib.h" #include #include #include #include #include #include #include #include /////////////////////////////////////////////////////////// // TAnagrafica /////////////////////////////////////////////////////////// static const TString& comune_di(const TString& codcom) { if (codcom.blank() || codcom.len() != 4) return EMPTY_STRING; TString8 key; key << " |" << codcom; TString& den = get_tmp_string(); den = cache().get(LF_COMUNI, key, COM_DENCOM); den.cut(40); return den; } static const TString& provincia_di(const TString& codcom) { if (codcom.blank() || codcom.len() != 4) return EMPTY_STRING; TString8 key; key << '|' << codcom; return cache().get(LF_COMUNI, key, COM_PROVCOM); } const TString& TAnagrafica::comune_nascita() const { return comune_di(_com_nasc); } const TString& TAnagrafica::provincia_nascita() const { return provincia_di(_com_nasc); } const TString& TAnagrafica::comune_residenza() const { return comune_di(_com_res); } const TString& TAnagrafica::provincia_residenza() const { return provincia_di(_com_res); } void TAnagrafica::build_ind_res(const TRectype& rec, const char* ind, const char* civ) { TString80 indirizzo = rec.get(ind); if (indirizzo.full()) { const TString& numero = rec.get(civ); if (numero.full()) indirizzo << ", " << numero; indirizzo.strip_double_spaces(); TParagraph_string s(indirizzo, 40); _ind_res = s.get(0); } } bool TAnagrafica::init(const TRectype& rec) { _tipo = '\0'; _stato_estero = 0; _allegato = 0; if (rec.empty()) return false; switch (rec.num()) { case LF_OCCAS: _tipo = 'F'; _cofi = rec.get(OCC_COFI); _paiv = rec.get(OCC_PAIV); if (_cofi.blank() || _paiv.blank()) { const TString& codice = rec.get(OCC_CFPI); if (_cofi.blank() && cf_check("", codice)) _cofi = codice; if (_paiv.blank() && pi_check("", codice)) _paiv = codice; } _ragsoc = rec.get(OCC_RAGSOC); _data_nasc = rec.get(OCC_DNASC); _com_nasc = rec.get(OCC_COMNASC); _com_res = rec.get(OCC_COM); _loc_res = rec.get(OCC_LOCALITA); build_ind_res(rec, OCC_INDIR, OCC_CIV); _stato_estero = rec.get_int(OCC_STATO); _allegato = _paiv.blank() ? 6 : 2; break; case LF_ANAG: _tipo = rec.get_char(ANA_TIPOA); _ragsoc = rec.get(ANA_RAGSOC); _cofi = rec.get(ANA_COFI); _paiv = rec.get(ANA_PAIV); // Comune di residenza fiscale o domicilio _com_res = rec.get(ANA_COMRF); if (_com_res.empty()) _com_res = rec.get(ANA_COMRES); build_ind_res(rec, ANA_INDRES, ANA_CIVRES); // Dati di nascita persone fisiche if (_tipo == 'F') { const TRectype& anafis = cache().get(LF_ANAGFIS, rec.get_long(ANA_CODANAGR)); _data_nasc = anafis.get(ANF_DATANASC); _com_nasc = anafis.get(ANF_COMNASC); } else _tipo = 'G'; break; case LF_NDITTE: { const bool good = init(LF_ANAG, rec.get_char(NDT_TIPOA), rec.get_long(NDT_CODANAGR)); _ragsoc = rec.get(NDT_RAGSOC); return good; } break; case LF_CLIFO: _allegato = rec.get_int(CLI_ALLEG); if (_allegato == 4) { const long ca = rec.get_long(CLI_CODALLEG); if (ca > 0) return init(rec.get_char(CLI_TIPOCF), ca, EMPTY_STRING); } _tipo = rec.get_char(CLI_TIPOAPER); if (_tipo == 'F') { const long cod = rec.get_long(CLI_CODANAGPER); if (cod > 0 && init(LF_ANAG, _tipo, cod)) { if (rec.get(CLI_COMNASC).not_empty()) _com_nasc = rec.get(CLI_COMNASC); if (rec.get(CLI_DATANASC).not_empty()) _data_nasc = rec.get(CLI_DATANASC); } _tipo = 'F'; // init could reset _tipo } else _tipo = 'G'; // Assegno codice fiscale e partita IVA se validi, altrimenti mantengo quelli dell'anagrafica if (rec.get(CLI_COFI).not_empty()) _cofi = rec.get(CLI_COFI); if (rec.get(CLI_PAIV).not_empty()) _paiv = rec.get(CLI_PAIV); build_ind_res(rec, CLI_INDCF, CLI_CIVCF); // Prevale sempre la ragione sociale del cliente: "Il cliente ha sempre ragione". _ragsoc = rec.get(CLI_RAGSOC); _stato_estero = rec.get_int(CLI_STATOCF); _loc_res = rec.get(CLI_LOCCF); break; case LF_MOV: return init(rec.get_char(MOV_TIPO), rec.get_long(MOV_CODCF), rec.get(MOV_OCFPI)); case LF_ALLEG: return init(rec.get_char(ALL_TIPOCF), rec.get_long(ALL_CODCF), rec.get(ALL_OCFPI)); default: CHECKD(false, "Record non valido per TAnagrafica ", rec.num()); break; } _ragsoc.strip_double_spaces(); return _tipo == 'F' || _tipo == 'G'; } bool TAnagrafica::init(int num, const TString& codice) { return init(cache().get(num, codice)); } bool TAnagrafica::init(int num, long codice) { return init(cache().get(num, codice)); } bool TAnagrafica::init(int num, char tipo, long codice) { TString16 key; key << tipo << '|' << codice; return init(cache().get(num, key)); } bool TAnagrafica::init(char tipocf, long codice, const TString& ocfpi) { bool done = false; if (ocfpi.full()) done = init(LF_OCCAS, ocfpi); if (!done) { CHECK(tipocf == 'C' || tipocf == 'F', "Tipo cli/for non valido"); CHECKD(codice > 0, "Codice cli/for non valido", codice); done = init(LF_CLIFO, tipocf, codice); } return done; } /////////////////////////////////////////////////////////// // TDati_rilevanti_trc /////////////////////////////////////////////////////////// #define AN _alfafld #define CF _alfafld #define DT _datefld #define NU _longzerofld #define PI _alfafld #define OBBLIG true class TDati_rilevanti_trc : public TObject { int _tipo; TAS400_recordset* _recset; protected: bool add_field(int n, int da, int a, int len, const char* descr, TFieldtypes tipo = AN, const char* def = NULL, bool required = false); public: void create_fields(int tipo, TAS400_recordset& recset); }; bool TDati_rilevanti_trc::add_field(int n, int da, int a, int len, const char* descr, TFieldtypes tipo, const char* def, bool required) { CHECKD(descr && *descr, "Campo ignoto ", n); CHECKS(n > 0 && da > 0 && a >= da && a <= 1800 && len == (a-da+1), "Campo inconsistente ", descr); TString8 name; name.format("%d.%d", _tipo, n); bool ok = _recset->create_field(name, da-1, len, tipo, required, def); CHECKS(ok, "Can't create field ", descr); return ok; } void TDati_rilevanti_trc::create_fields(int tipo, TAS400_recordset& recset) { CHECKD(tipo >= 0 && tipo <= 5 || tipo == 9, "Tipo record non valido ", tipo); _tipo = tipo; _recset = &recset; TString4 def; def << _tipo; add_field(1, 1, 1, 1, "Tipo record", NU, def, OBBLIG); if (_tipo == 0 || _tipo == 9) { add_field( 2, 2, 6, 5, "Codice identificativo fornitura", AN, "ART21", OBBLIG); add_field( 3, 7, 8, 2, "Codice numerico fornitura", NU, "47", OBBLIG); add_field( 4, 9, 9, 1, "Tipologia di invio", NU, "0", OBBLIG); add_field( 5, 10, 26,17, "Protocollo da sostituire", AN); // ex NU add_field( 6, 27, 32, 6, "Protocollo documento", AN); // ex NU add_field( 7, 33, 48,16, "Codice fiscale", CF, "", OBBLIG); add_field( 8, 49, 59,11, "Partita IVA", PI); add_field( 9, 60,119,60, "Denominazione", AN); add_field(10,120,159,40, "Comune domicilio fiscale", AN); add_field(11,160,161, 2, "Provincia domicilio fiscale", AN); add_field(12,162,185,24, "Cognome", AN); add_field(13,186,205,20, "Nome", AN); add_field(14,206,206, 1, "Sesso", AN); add_field(15,207,214, 8, "Data di nascita", DT); add_field(16,215,254,40, "Comune o stato di nascita", AN); add_field(17,255,256, 2, "Provincia di nascita", AN); add_field(18,257,260, 4, "Anno di riferimento", NU); add_field(19,261,261, 1, "Comunicazione società incorp.", AN, "0", OBBLIG); add_field(20,262,265, 4, "Progressivo invio telmatico", NU, "1"); add_field(21,266,269, 4, "Numero totale invii telematici", NU, "1"); add_field(22,270,285,16, "Codice fiscale intermediario", CF); add_field(23,286,290, 5, "Numero iscrizione C.A.F.", AN); // Ex NU add_field(24,291,291, 1, "Impegno alla trasmissione", AN ); // Ex NU add_field(25,292,299, 8, "Data dell'impegno", DT); add_field(26,300,1797,1498, "Filler", AN); add_field(27,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG); add_field(28,1799,1800,2,"Caratteri di fine riga", AN, "\r\n"); } else if (_tipo == 1) { add_field(2, 2,17,16, "Codice fiscale", CF, "", OBBLIG); add_field(3,18,25, 8, "Data dell'operazione", DT); add_field(4,26,26, 1, "Modalità di pagamento", NU, "3", OBBLIG); add_field(5,27,35, 9, "Importo dovuto", NU); add_field(6,36,1797,1762, "Filler", AN); add_field(7,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG); add_field(8,1799,1800,2,"Caratteri di fine riga", AN, "\r\n"); } else if (_tipo == 2) { add_field( 2, 2,12,11, "Partita IVA", PI, "", OBBLIG); add_field( 3,13,20, 8, "Data dell'operazione", DT); add_field( 4,21,35,15, "Numero della fattura", AN); add_field( 5,36,36, 1, "Modalità di pagamento", NU, "1", OBBLIG); add_field( 6,37,45, 9, "Importo dovuto", NU); add_field( 7,46,54, 9, "Imposta", NU); add_field( 8,55,55, 1, "Tipologia dell'operazione", NU, "1", OBBLIG); add_field( 9,56,1797,1742, "Filler", AN); add_field(10,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG); add_field(11,1799,1800,2,"Caratteri di fine riga", AN, "\r\n"); } else if (_tipo == 3) { add_field( 2, 2, 25,24, "Cognome", AN); add_field( 3, 26, 45,20, "Nome", AN); add_field( 4, 46, 53, 8, "Data di nascita", DT); add_field( 5, 54, 93,40, "Comune o stato estero di nascita", AN); add_field( 6, 94, 95, 2, "Provincia di nascita", AN); add_field( 7, 96, 98, 3, "Stato estero del domicilio", AN); add_field( 8, 99,158,60, "Ragione sociale", AN); add_field( 9,159,198,40, "Città estera della sede legale", AN); add_field(10,199,201, 3, "Stato estero della sede legale", AN); add_field(11,202,241,40, "Indirizzo estero della sede legale", AN); add_field(12,242,249, 8, "Data dell'operazione", DT); add_field(13,250,264,15, "Numero della fattura", AN); add_field(14,265,265, 1, "Modalità di pagamento", NU, "1", OBBLIG); add_field(15,266,274, 9, "Importo dovuto", NU); add_field(16,275,283, 9, "Imposta", NU); add_field(17,284,284, 1, "Tipologia dell'operazione", NU, "1", OBBLIG); add_field(18,285,1797,1513, "Filler", AN); add_field(19,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG); add_field(20,1799,1800,2,"Caratteri di fine riga", AN, "\r\n"); } else if (_tipo == 4) { add_field( 2, 2,12,11, "Partita IVA", PI); add_field( 3,13,28,16, "Codice Fiscale", CF); add_field( 4,29,36, 8, "Data dell'operazione", DT, "", OBBLIG); add_field( 5,37,51,15, "Numero della Nota di Variazione", AN, "", OBBLIG); add_field( 6,52,60, 9, "Imponibile Nota di Variazione", NU); add_field( 7,61,69, 9, "Imposta Nota di Variazione", NU); add_field( 8,70,77, 8, "Data della Fattura da rettificare", DT, "", OBBLIG); add_field( 9,78,92,15, "Numero della Fattura da rettificare", AN, "", OBBLIG); add_field(10,93,93, 1, "Variazione imponib. (Debito/Credito)",AN); add_field(11,94,94, 1, "Variazione imposta (Debito/Credito)", AN); add_field(11,95,1797,1703, "Filler", AN); add_field(12,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG); add_field(13,1799,1800,2,"Caratteri di fine riga", AN, "\r\n"); } else if (_tipo == 5) { add_field( 2, 2, 25,24, "Cognome", AN); add_field( 3, 26, 45,20, "Nome", AN); add_field( 4, 46, 53, 8, "Data di nascita", DT); add_field( 5, 54, 93,40, "Comune o stato estero di nascita", AN); add_field( 6, 94, 95, 2, "Provincia di nascita", AN); add_field( 7, 96, 98, 3, "Stato estero del domicilio", AN); add_field( 8, 99,158,60, "Ragione sociale", AN); add_field( 9,159,198,40, "Città estera della sede legale", AN); add_field(10,199,201, 3, "Stato estero della sede legale", AN); add_field(11,202,241,40, "Indirizzo estero della sede legale", AN); add_field(12,242,249, 8, "Data dell'operazione", DT, "", OBBLIG); add_field(13,250,264,15, "Numero della Nota di Variazione", AN, "", OBBLIG); add_field(14,265,273, 9, "Imponibile Nota di Variazione", NU); add_field(15,274,282, 9, "Imposta Nota di Variazione", NU); add_field(16,283,290, 8, "Data della Fattura da rettificare", DT, "", OBBLIG); add_field(17,291,305,15, "Numero della Fattura da rettificare", AN, "", OBBLIG); add_field(18,306,306, 1, "Variazione imponib. (Debito/Credito)",AN); add_field(19,307,307, 1, "Variazione imposta (Debito/Credito)", AN); add_field(20,308,1797,1490, "Filler", AN); add_field(21,1798,1798,1,"Carattere di controllo", AN, "A", OBBLIG); add_field(22,1799,1800,2,"Caratteri di fine riga", AN, "\r\n"); } _recset = NULL; } /////////////////////////////////////////////////////////// // TDati_rilevanti_set /////////////////////////////////////////////////////////// bool TDati_rilevanti_set::set_field(const TAS400_column_info& fi, const TVariant& var) { // Salva le date in formato GGMMAAAA invece dello standard ANSI AAAAMMGG if (fi._type == DT && fi._width == 8) { const TDate d = var.as_date(); if (d.ok()) { TFixed_string str = d.string(full, '\0', full, full, gma_date); row().overwrite(str, fi._pos); } else row().overwrite(" ", fi._pos); return true; } else // Salva gli importi in formato 000001234 (non possono essere negativi) if (fi._type == NU && fi._width == 9) { TString16 str = var.as_string(); CHECKS(str[0] != '-', "Importo negativo non ammesso:", (const char*)str); // Tiene la sola parte intera e riempie di zeri const int dot = str.find('.'); if (dot >= 0) str.cut(dot); str.right_just(fi._width, '0'); row().overwrite(str, fi._pos); return true; } else if (fi._type == AN) { TString256 str = var.as_string(); str.upper(); str.replace('ä', 'A'); str.replace('ö', 'O'); str.replace('ü', 'U'); row().overwrite(str, fi._pos, fi._width); return true; } return TAS400_recordset::set_field(fi, var); } const TVariant& TDati_rilevanti_set::get_field(const TAS400_column_info& ci) const { if (ci._type == DT && ci._width == 8) { const TRecnotype n = current_row(); if (n >= 0 && n < items()) { const TString& str = row(n).mid(ci._pos, ci._width); const int gg = atoi(str.left(2)); const int mm = atoi(str.mid(2,2)); const int aa = atoi(str.mid(4,4)); if (aa > 1800 && aa < 2100) { TVariant& var = get_tmp_var(); var.set(TDate(gg, mm, aa)); return var; } } return NULL_VARIANT; } return TAS400_recordset::get_field(ci); } void TDati_rilevanti_set::add_header(const TMask& msk, int num_inv, int tot_inv) { const TAnagrafica ditta(LF_NDITTE, prefix().get_codditta()); new_rec("0"); set(7, ditta.codice_fiscale()); set(8, ditta.partita_IVA()); if (ditta.giuridica()) { set( 9, ditta.ragione_sociale()); set(10, ditta.comune_residenza()); set(11, ditta.provincia_residenza()); } else { set(12, ditta.cognome()); set(13, ditta.nome()); set(14, ditta.sesso()); set(15, ditta.data_nascita()); set(16, ditta.comune_nascita()); set(17, ditta.provincia_nascita()); } set(18, _anno); if (tot_inv < 1) tot_inv = 1; if (num_inv <= 0) num_inv = 1; if (num_inv > tot_inv) num_inv = tot_inv; set(20, num_inv); set(21, tot_inv); const TString& cofi = msk.get(F_INTER_COFI); if (cofi.full()) { set(22, cofi); set(23, msk.get(F_INTER_CAF)); set(24, msk.get(F_INTER_COM)); set(25, msk.get(F_INTER_DATE)); } else { set(25, TDate()); // Svuota data impegno } } void TDati_rilevanti_set::add_footer() { TString f = row(0); f.overwrite("9"); new_rec(f); } bool TDati_rilevanti_set::split(const TFilename& name, const TRecnotype maxalleg) { const TRecnotype totrec = items(); bool done = totrec <= maxalleg; if (!done) { TString msg; msg.format(FR("Spezzatura del file %s in blocchi da %d righe"), (const char*)name, maxalleg); TProgind pi(totrec, msg); TDati_rilevanti_set outset(_anno); int f = 0; for (TRecnotype r = 0; r < totrec; r++) { if (!pi.setstatus(r)) break; // Procedura interrotta dall'utente outset.new_rec(row(r)); if (outset.items() >= maxalleg || r == totrec-1) { // Costruisce il nome del file di invio parziale, es: Spesometro00001_2.txt TFilename outname = name; const TString8 saved_ext = outname.ext(); outname.ext(""); outname << '_' << (++f); outname.ext(saved_ext); done = outset.save_as(outname); if (done) outset.destroy(); else { cantwrite_box(outname); break; } } } if (f > 1) warning_box(FR("Sono stati generati %d file nella cartella %s"), name.path()); } return done; } void TDati_rilevanti_set::init() { TDati_rilevanti_trc trc; for (int i = 0; i <= 5; i++) trc.create_fields(i, *this); trc.create_fields(9, *this); } TDati_rilevanti_set::TDati_rilevanti_set(const TFilename& file) : TAS400_recordset("AS400(1800,1)"), _anno(2010) { init(); if (load_file(file) && move_first()) { const int anno = get(18).as_int(); if (anno > 2010) _anno = anno; } } TDati_rilevanti_set::TDati_rilevanti_set(int anno) : TAS400_recordset("AS400(1800,1)"), _anno(anno) { init(); } /////////////////////////////////////////////////////////// // TCofi_cache /////////////////////////////////////////////////////////// TObject* TCofi_cache::find_ragsoc(bool piva, char tipocf, const TString& code) { const int fkey = piva ? 5 : 4; const char* kfield = piva ? CLI_PAIV : CLI_COFI; _clifo.setkey(fkey); _clifo.zero(); _clifo.put(CLI_TIPOCF, tipocf); _clifo.put(kfield, code); int err = _clifo.read(); if (err == NOERR && _clifo.get_int(CLI_ALLEG) == 4) // Codice Fiscale o Partita IVA doppia { const long codall = _clifo.get_long(CLI_CODALLEG); if (codall > 0) { const TRecnotype recno = _clifo.recno(); _clifo.setkey(1); _clifo.put(CLI_TIPOCF, tipocf); _clifo.put(CLI_CODCF, codall); err = _clifo.read(); if (err != NOERR || _clifo.get(kfield) != code) err = _clifo.readat(recno); _clifo.setkey(fkey); } } if (err != NOERR && piva && pi_check("IT", code)) { _clifo.put(CLI_TIPOCF, tipocf); _clifo.put(CLI_STATOPAIV, "IT"); _clifo.put(CLI_PAIV, code); err = _clifo.read(); } if (err == NOERR) return new TString80(_clifo.get(CLI_RAGSOC)); if (piva && !pi_check("IT", code)) // cerco partite IVA estere { TString query; query << "USE CLIFO SELECT PAIV=\"" << code << '"' << "\nFROM TIPOCF=" << tipocf << "\nTO TIPOCF=" << tipocf; TISAM_recordset clifo(query); if (clifo.move_first()) return new TString80(clifo.get(CLI_RAGSOC).as_string()); } _occas.put(OCC_CFPI, code); if (_occas.read() == NOERR) { const TString& cfpi = _occas.get(piva ? OCC_PAIV : OCC_COFI); if (code == cfpi || cfpi.empty()) return new TString80(_occas.get(OCC_RAGSOC)); } TString query; query << "USE OCCAS SELECT "; if (piva) query << "PAIV=\"" << code << '"'; else query << "COFI=\"" << code << '"'; TISAM_recordset occas(query); if (occas.move_first()) return new TString80(occas.get(OCC_RAGSOC).as_string()); return NULL; } TObject* TCofi_cache::key2obj(const char* key) { TToken_string chiave(key); const bool paiv = chiave.get_char(0)=='P'; const char tipocf = chiave.get_char(1); TString16 code; chiave.get(2, code); TObject* ragsoc = NULL; if (code.full()) { if (tipocf != 'C' && tipocf != 'F') { ragsoc = find_ragsoc(paiv, 'C', code); if (ragsoc == NULL) ragsoc = find_ragsoc(paiv, 'F', code); } else ragsoc = find_ragsoc(paiv, tipocf, code); } return ragsoc; } const TString& TCofi_cache::cofi2ragsoc(char tipocf, const TString& cofi) { const TString* ragsoc = NULL; if (cofi.full()) { TString80 key; key.format("CF|%c|%s", tipocf, (const char*)cofi); ragsoc = (const TString*)objptr(key); } return ragsoc ? *ragsoc : EMPTY_STRING; } const TString& TCofi_cache::paiv2ragsoc(char tipocf, const TString& paiv) { const TString* ragsoc = NULL; if (paiv.full()) { TString80 key; key.format("PI|%c|%s", tipocf, (const char*)paiv); ragsoc = (const TString*)objptr(key); } return ragsoc ? *ragsoc : EMPTY_STRING; } /////////////////////////////////////////////////////////// // TDati_rilevanti_rep /////////////////////////////////////////////////////////// bool TDati_rilevanti_rep::get_usr_val(const TString& name, TVariant& var) const { const TDati_rilevanti_set& set = *(TDati_rilevanti_set*)recordset(); const int tipo = set.rec_type()[0] - '0'; if (name == "ANNO") { var.set(set.anno()); return true; } if (name == "TIPO") { var.set(tipo); return true; } if (name == "COFI") { switch (tipo) { case 1: var = set.get("1.2"); break; case 4: var = set.get("4.3"); break; default: var.set_null(); break; } return true; } if (name == "PAIV") { switch (tipo) { case 2: var = set.get("2.2"); break; case 4: var = set.get("4.2"); break; default: var.set_null(); break; } return true; } if (name == "RAGSOC") { switch (tipo) { case 1: var = cofi2ragsoc(' ', set.get("1.2").as_string()); break; case 2: { const char tipocf = set.get("2.8").as_int() == 2 ? 'F' : 'C'; var = paiv2ragsoc(tipocf, set.get("2.2").as_string()); } break; case 3: var = set.get("3.8"); if (var.as_string().blank()) { TString80 rs; rs << set.get("3.2") << ' ' << set.get("3.3"); var = rs.trim(); } break; case 4: { const TString16 paiv = set.get("4.2").as_string(); if (paiv.full()) var = paiv2ragsoc(' ', paiv); else { const TString16 cofi = set.get("4.3").as_string(); var = cofi2ragsoc(' ', cofi); } } break; case 5: var = set.get("5.8"); if (var.as_string().blank()) { TString80 rs; rs << set.get("5.2") << ' ' << set.get("5.3"); var = rs.trim(); } break; default: var.set_null(); break; } return true; } if (name == "DATAREG") { switch (tipo) { case 1: var = set.get("1.3"); break; case 2: var = set.get("2.3"); break; case 3: var = set.get("3.12"); break; case 4: var = set.get("4.4"); break; case 5: var = set.get("5.12"); break; default: var.set_null(); break; } return true; } if (name == "NUMDOC") { switch (tipo) { case 2: var = set.get("2.4"); break; case 3: var = set.get("3.13"); break; case 4: var = set.get("4.5"); break; case 5: var = set.get("5.13"); break; default: var.set_null(); break; } return true; } if (name == "IMPORTO") { switch (tipo) { case 1: var = set.get("1.5"); break; case 2: var = set.get("2.6"); break; case 3: var = set.get("3.15"); break; case 4: var = set.get("4.6"); break; case 5: var = set.get("5.14"); break; default: var.set_null(); break; } return true; } if (name == "IMPOSTA") { switch (tipo) { case 2: var = set.get("2.7"); break; case 3: var = set.get("3.16"); break; case 4: var = set.get("4.7"); break; case 5: var = set.get("5.15"); break; default: var.set_null(); break; } return true; } if (name == "DATARETT") { switch (tipo) { case 4: var = set.get("4.8"); break; case 5: var = set.get("5.16"); break; default: var.set_null(); break; } return true; } if (name == "NUMRETT") { switch (tipo) { case 4: var = set.get("4.9"); break; case 5: var = set.get("5.17"); break; default: var.set_null(); break; } return true; } if (name == "SIMPORTO") { switch (tipo) { case 4: var = set.get("4.10"); break; case 5: var = set.get("5.18"); break; default: var.set_null(); break; } return true; } if (name == "SIMPOSTA") { switch (tipo) { case 4: var = set.get("4.11"); break; case 5: var = set.get("5.19"); break; default: var.set_null(); break; } return true; } if (name == "MODPAG") { switch (tipo) { case 1: var = set.get("1.4"); break; case 2: var = set.get("2.5"); break; case 3: var = set.get("3.14"); break; default: var.set_null(); break; } return true; } if (name == "TIPOPE") { switch (tipo) { case 2: var = set.get("2.8"); break; case 3: var = set.get("3.17"); break; default: var.set_null(); break; } return true; } return TReport::get_usr_val(name, var); } TDati_rilevanti_rep::TDati_rilevanti_rep(const TFilename& file) { load("fe0100"); TDati_rilevanti_set* set = new TDati_rilevanti_set(file); // Elimina testata e coda set->destroy(0); set->destroy(set->items()-1); set_recordset(set); }