From 9d1dde93155bb25a4bb5118120d9e4b11974a3ca Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Fri, 2 Aug 2019 07:43:36 +0200 Subject: [PATCH 1/3] Patch level : 12.0 no-patch Files correlati : f90.exe Commento : - Modificata finestra estrazione - Scrittura db per nuova estrazione - Corretta visualizzazione estrazioni passate --- src/f1/f1lib.cpp | 120 ++++---- src/f1/f1lib.h | 27 +- src/f9/f90100.cpp | 663 +++++++++++++++++++++++++++++++-------------- src/f9/f90100a.h | 51 ++-- src/f9/f90100a.uml | 211 ++++++--------- src/f9/f901tab.h | 111 +++++--- 6 files changed, 708 insertions(+), 475 deletions(-) diff --git a/src/f1/f1lib.cpp b/src/f1/f1lib.cpp index 5295766ea..b56def31f 100644 --- a/src/f1/f1lib.cpp +++ b/src/f1/f1lib.cpp @@ -27,6 +27,7 @@ bool TFppro::check_reg(TToken_string& keys, int numreg) return get_numreg(keys) == numreg; } +// todo: da mettere apposto fa ancora schifo bool TFppro::guess_the_doc(const TLocalisamfile& mov) { // Controllo datadoc - numdoc - totdoc - p.iva @@ -35,40 +36,46 @@ bool TFppro::guess_the_doc(const TLocalisamfile& mov) "\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" << "JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" << "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n"; - _db->sq_set_exec(query); + _db->sq_set_exec(query, false); - const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") }; - const TDate data = _db->sq_get_date("DATA"); - const TString numdoc = _db->sq_get("NUMDOC"); - const real imptotdoc(_db->sq_get("IMPTOTDOC")); - const TString4 statopiva = _db->sq_get("STATOPIVA"); - const TString piva = _db->sq_get("PIVA"); - - // Prendo il fornitore del mov per controllare la p.iva - TLocalisamfile clifo(LF_CLIFO); - clifo.put(CLI_TIPOCF, "F"); - const TString& codforn = mov.get(MOV_CODCF); - clifo.put(CLI_CODCF, codforn); - clifo.read(); - TString cli_statopiva, cli_piva; - cli_statopiva << clifo.get(CLI_STATOPAIV); - cli_piva << clifo.get(CLI_PAIV); - - bool ok = data == mov.get_date(MOV_DATAREG); - ok &= numdoc == mov.get(MOV_NUMDOC) || numdoc == mov.get(MOV_NUMDOCEXT); - ok &= imptotdoc == real(mov.get(MOV_TOTDOC)); - ok &= cli_statopiva.full() && statopiva == cli_statopiva && piva == cli_piva || !cli_statopiva.full() && piva == cli_piva; - if (ok) + for(bool f = _db->sq_next(); f; f = _db->sq_next()) { - _keys = keys; + const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") }; + const TDate data = _db->sq_get_date("DATA"); + const TString numdoc = _db->sq_get("NUMDOC"); + const real imptotdoc(_db->sq_get("IMPTOTDOC")); + const TString4 statopiva = _db->sq_get("STATOPIVA"); + const TString piva = _db->sq_get("PIVA"); + + // Prendo il fornitore del mov per controllare la p.iva + TLocalisamfile clifo(LF_CLIFO); + clifo.put(CLI_TIPOCF, "F"); + const TString& codforn = mov.get(MOV_CODCF); + clifo.put(CLI_CODCF, codforn); + clifo.read(); + TString cli_statopiva, cli_piva; + cli_statopiva << clifo.get(CLI_STATOPAIV); + cli_piva << clifo.get(CLI_PAIV); + + bool ok = data == mov.get_date(MOV_DATAREG); + ok = ok && numdoc == mov.get(MOV_NUMDOC) || numdoc == mov.get(MOV_NUMDOCEXT); + ok = ok && imptotdoc == real(mov.get(MOV_TOTDOC)); + ok = ok && cli_statopiva.full() && statopiva == cli_statopiva && piva == cli_piva || !cli_statopiva.full() && piva == cli_piva; + if (ok) + { + _keys = keys; + return true; + } } - return ok; + return false; } -void TFppro::get_keys_fppro() +const char* TFppro::get_keys_fppro() const { - + static TString keys; + keys.cut(0) << _keys.prginvio << ";" << _keys.headerfatt << ";" << _keys.bodyfatt; + return (const char*)keys; } int TFppro::get_numreg() @@ -154,6 +161,31 @@ TFppro& TFppro::set_keys(keys_s keys) return *this; } +bool TFppro::associa_mov(const int numreg) const +{ + bool ok = false; + TLocalisamfile mov(LF_MOV); + mov.put(MOV_NUMREG, numreg); + if ((ok = mov.read() == NOERR)) + { + mov.put(MOV_KEYFPPRO, get_keys_fppro()); + if ((ok = mov.rewrite() == NOERR)) // Scrivo sul movimento il riferimento al fppro + { + TString query; + query << "UPDATE FPPRO00F \nSET " << + "PZ_TIPOCF = 'F', PZ_CLIFOR = '" << mov.get(MOV_CODCF) << "', PZ_NUMREGCONT = '" << + mov.get(MOV_NUMREG) << "', PZ_DATAREGCONT = '" << mov.get_date(MOV_DATAREG).date2ansi() << "'\n" << + fppro_db().where_str() << ";"; + if (!((ok = _db->sq_set_exec(query) && _db->sq_commit()))) // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro + { + mov.put(MOV_KEYFPPRO, ""); + mov.rewrite(); + } + } + } + return ok; +} + TDate TFppro::get_data_first_doc() const { TString query; @@ -401,38 +433,4 @@ bool TF1_log::show_log() _log = NULL; } return true; -} - -bool TFppro::set_connection(SSimple_query& s) -{ - bool ok = true; -#ifdef DBG - TString ip = fp_settings().get_db_indirizzo(); - if (ip.upper() != "TESTCAMPO2012") - { - if (s.sq_connect("TESTCAMPO2012@campo_fp", - "fp", - "fp", - TSDB_MSSQL) != NOERR) - { - warning_box("Impossibile connettersi al DB esterno"); - ok = false; - } - } - else - { -#endif - if (s.sq_connect( - fp_settings().get_db_str_con(), - fp_settings().get_db_user(), - fp_settings().get_db_password(), - TSDB_MSSQL) != NOERR) - { - warning_box("Impossibile connettersi al DB esterno"); - ok = false; - } -#ifdef DBG - } -#endif - return ok; } \ No newline at end of file diff --git a/src/f1/f1lib.h b/src/f1/f1lib.h index 3cd054cc7..92fc81e88 100644 --- a/src/f1/f1lib.h +++ b/src/f1/f1lib.h @@ -28,9 +28,9 @@ class TFppro : public TObject { struct keys_s { - const char* prginvio; - const char* headerfatt; - const char* bodyfatt; + TString prginvio; + TString headerfatt; + TString bodyfatt; }; private: SSimple_query* _db; @@ -47,23 +47,22 @@ public: // Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e` bool guess_the_doc(const TLocalisamfile& mov); // Getters - void get_keys_fppro(); - int get_numreg(); - int get_numreg(TToken_string& keys); + const char* get_keys_fppro() const; + int get_numreg(); + int get_numreg(TToken_string& keys); TString get_codforn() const; - TDate get_datareg(); - TDate get_datareg(TToken_string& keys); - real get_ritenute() const; - TDate get_data_first_doc() const; - TDate get_dataorarioric() const; - int get_numregcont() const; + TDate get_datareg(); + TDate get_datareg(TToken_string& keys); + real get_ritenute() const; + TDate get_data_first_doc() const; + TDate get_dataorarioric() const; + int get_numregcont() const; // Setters bool set_query(); TFppro& set_keys(TToken_string& keys); TFppro& set_keys(keys_s keys); - - static bool set_connection(SSimple_query& s); + bool associa_mov(int numreg) const; TFppro(); TFppro(TToken_string& keys) : TFppro() { set_keys(keys); } diff --git a/src/f9/f90100.cpp b/src/f9/f90100.cpp index ef36cf2cd..09657e014 100644 --- a/src/f9/f90100.cpp +++ b/src/f9/f90100.cpp @@ -6,41 +6,345 @@ #include "mov.h" #include "f1lib.h" #include "../fp/fplib.h" +#include "urldefid.h" +#include "f90100.h" +#include "progind.h" -enum state_fppro +SSimple_query& db() { - correct = 1, - reg_with_err = -1, - not_fa = -10, - guessed = 100, - no_guessed = 0 -}; + static SSimple_query* db = nullptr; + if (db == nullptr) + { + db = new SSimple_query(); + set_connection(*db); + } + return *db; +} -class TMonitor_mask : public TAutomask +//////////////////////////////////////////////////////// +// TEstrai_mask +//////////////////////////////////////////////////////// + +TEstrai_mask::TEstrai_mask() : TMask("Estrazione", 1, 60, 10), _dirty(true) { - bool _dirty; - state_fppro check_fppro(int numreg) const; + add_button_tool(DLG_ELABORA, "Estrai", TOOL_ELABORA); + //add_button_tool(DLG_FINDREC, "Diagnostica", TOOL_PERMISSIONS); + //add_button_tool(DLG_NULL, "", 0); + //add_button_tool(DLG_EDIT, "Reset", TOOL_EDIT); + add_button_tool(DLG_NULL, "", 0); + add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); -protected: - void sel_all(); - bool diagnosticazzi(); - bool estrai(); - void load_packs(); - bool on_field_event(TOperable_field& o, TField_event e, long jolly) override; + add_groupbox(ES_DATEGROUP, 0, "Inserire periodo per estrazione:", 1, 0, 59, 3, ""); + add_date(ES_DATAINI, 0, "dal", 4, 1, ""); + add_date(ES_DATAEND, 0, " al", 33, 1, ""); + add_groupbox(ES_FLAGGROUP, 0, "Selezionare tipo di estrazione:", 1, 3, 28, 3, ""); + add_list(ES_FLAGPROV, 0, "Flag provvisorio", 2, 4, 1, "", "P|D", "Provvisorio|Definitivo"); + add_groupbox(ES_TIPOGROUP, 0, "Selezionare documenti da estrarre:", 32, 3, 28, 3, ""); + add_list(ES_TIPODOC, 0, "Tipi documento", 33, 4, 1, "", "A|V|C", "Acquisti|Vendite|Corrispettivi"); -public: - void fill(); - void save_all(); - void next_page(int p) override; + TMask::set_handler(DLG_ELABORA, estrai_handler); + //TMask::set_handler(DLG_FINDREC, diagnostica_handler); + //TMask::set_handler(DLG_EDIT, enable_handler); + TMask::set_handler(ES_DATAINI, dataini_handler); + TMask::set_handler(ES_DATAEND, dataend_handler); - TMonitor_mask() : TAutomask("f90100a") {} -}; + //TMask::enable(DLG_ELABORA, false); + //TMask::enable(DLG_EDIT, false); -state_fppro TMonitor_mask::check_fppro(int numreg) const + TDate dt(TODAY); dt.set_day(1); dt.set_month(1); +#ifdef DBG + dt.set_year(2017); +#endif + set(ES_DATAINI, dt); + set(ES_DATAEND, TDate(TODAY)); +} + +bool TEstrai_mask::estrai_handler(TMask_field& f, unsigned short key) +{ + auto& msk = (TEstrai_mask&)f.mask(); // this + descr_msk().run(); + msk._descr.cut(0) << descr_msk().get(DES_TEXT); + app().estrai(); + return true; +} + +void TEstrai_mask::enable_fields(bool en) +{ + enable(ES_DATAINI, en); + enable(ES_DATAEND, en); + enable(ES_FLAGPROV, en); + enable(ES_TIPODOC, en); + + //enable(DLG_ELABORA, !en); + //enable(DLG_FINDREC, en); + //enable(DLG_EDIT, !en); +} + +bool TEstrai_mask::enable_handler(TMask_field& f, unsigned short key) +{ + ((TEstrai_mask&)f.mask()).enable_fields(); + return true; +} + +bool TEstrai_mask::dataini_handler(TMask_field& f, unsigned short key) +{ + TMask& msk = f.mask(); + if (key == K_TAB) + { + if(msk.get(ES_DATAINI).full() && msk.get(ES_DATAEND).full() && msk.get_date(ES_DATAINI) > msk.get_date(ES_DATAEND)) + return f.error_box("La data di inizio non puo' essere maggiore di quella di fine"); + } + //msk.enable(DLG_ELABORA, false); + return true; +} + +bool TEstrai_mask::dataend_handler(TMask_field& f, unsigned short key) +{ + TMask& msk = f.mask(); + if (key == K_TAB) + { + if (msk.get(ES_DATAINI).full() && msk.get(ES_DATAEND).full() && msk.get_date(ES_DATAINI) > msk.get_date(ES_DATAEND)) + return f.error_box("La data di fine non puo' essere minore di quella di inizio"); + } + //msk.enable(DLG_ELABORA, false); + return true; +} + +TMask& TEstrai_mask::descr_msk() +{ + static TMask* m = nullptr; + if(m == nullptr) + { + m = new TMask("Estrazione", 1, 60, 5); + m->add_button_tool(DLG_OK, "Conferma", TOOL_OK); + m->add_groupbox(DES_GROUP, 0, "Inserire descrizione estrazione:", 1, 0, 59, 3, ""); + m->add_string(DES_TEXT, 0, "Descrizione", 4, 1, 250, "", 40); + } + return *m; +} + +//////////////////////////////////////////////////////// +// TMonitor_mask +//////////////////////////////////////////////////////// + +bool TMonitor_mask::save_conf_handler(TMask_field& f, unsigned short key) +{ + TMask& m = f.mask(); + TF9_app& a = app(); + a.set_ambiente(m.get(CF_CODSOC)); + a.set_addr_doc(m.get(CF_ADDRDOC)); + + if(a.get_ambiente().full()) + ini_set_string(CONFIG_DITTA, "F9", AMBIENTE_F9, a.get_ambiente()); + if(a.get_addr_doc().full()) + ini_set_string(CONFIG_DITTA, "F9", ADDRCART_F9, a.get_addr_doc()); + m.close(); + a.edit_wa(); + return true; +} + +void TMonitor_mask::controllo_errori() +{ + +} + +bool TMonitor_mask::on_key(const KEY key) +{ + return true; +} + +void TMonitor_mask::open_win_estr() +{ + if (!app().get_ambiente().full()) + warning_box("Inserire codice ambiente societa' in configurazione"); + else app().run_estr_msk(); +} + +void TMonitor_mask::open_win_conf() const +{ + static TMask* m = nullptr; + + if (m == nullptr) + { + m = new TMask("Configurazione Archiviazione Sostitutiva", 1, 60, 10); + + m->add_button_tool(DLG_OK, "Conferma", TOOL_OK); + m->add_button_tool(DLG_NULL, "", 0); + m->add_button_tool(DLG_QUIT, "Esci", TOOL_QUIT); + + m->add_groupbox(CF_CODGROUP, 0, "Codice Ambiente Societa' (WEBAPP):", 1, 0, 59, 3, ""); + m->add_string(CF_CODSOC, 0, "Codice ambiente", 4, 1, 10, "", 10); + m->add_groupbox(CF_ADDRGROUP, 0, "Indicare percorso documenti cartacei:", 1, 3, 59, 3, ""); + m->add_string(CF_ADDRDOC, 0, "Percorso", 2, 4, 256, "", 40); + + m->set_handler(DLG_OK, save_conf_handler); + + m->set(CF_CODSOC, ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9)); + m->set(CF_ADDRDOC, ini_get_string(CONFIG_DITTA, PAR_MOD, ADDRCART_F9)); + } + m->run(); +} + +bool TMonitor_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_ALL: + if(e == fe_button && curr_page() == 1) + //sel_all(); + break; + case DLG_ELABORA: + if (e == fe_button) + open_win_estr(); + break; + case DLG_CONFIG: + if (e == fe_button) + open_win_conf(); + break; + case DLG_FINDREC: + if (e == fe_button) + controllo_errori(); + default: break; + } + return true; +} + +//////////////////////////////////////////////////////// +// TF9_app +//////////////////////////////////////////////////////// + +void TF9_app::edit_wa() const +{ + TString query; + query << "DELETE FROM F9WA00K WHERE true;" << + "INSERT INTO F9WA00K (F9PCSOC, F9PPCDC0) VALUES (" << _ambiente << ", " << _addr_doc << ");"; +} + +void TF9_app::load() +{ + const TDate dataini = get_dataini(); + const TDate dataend = get_dataend(); + const char tipodoc = get_tipodoc(); + const bool flagpro = is_provviso(); + TLocalisamfile mov(LF_MOV); + + mov.setkey(2); + mov.put(MOV_DATAREG, dataini); + + int items = 0; + for (bool ok = mov.read(); ok && mov.get_date(MOV_DATAREG) <= dataend; ok = mov.next() == NOERR) + items++; + + TProgress_monitor progr(items, "Acquisizione movimenti"); + int i = 0; + mov.zero(); + mov.setkey(2); + mov.put(MOV_DATAREG, dataini); + // Prendo tutti i movimenti a partire da una data e li carico tutti fino alla data finale + for (bool ok = mov.read(); ok && mov.get_date(MOV_DATAREG) <= dataend; ok = mov.next() == NOERR) + { + if (!progr.add_status()) + break; + const TipoIVA tipo = tipodoc == 'V' ? iva_vendite : iva_acquisti; + // Se definitivo controllo il flag di stampato REGST + if (mov.get_bool(MOV_REGST) != flagpro && mov.get(MOV_NUMDOC).full() && TCausale(mov.get(MOV_CODCAUS)).reg().iva() == tipo) + { + TToken_string t("", '|'); + t.add(""); + t.add(mov.get(MOV_NUMREG)); + t.add(mov.get(MOV_DATAREG)); + t.add(mov.get(MOV_DATADOC)); + t.add(mov.get(MOV_CODCAUS)); + t.add(mov.get(MOV_MESELIQ)); + t.add(mov.get(MOV_NUMDOC)); + t.add(mov.get(MOV_PROTIVA)); + t.add(mov.get(MOV_DESCR)); + _movs.insert(_movs.end(), t); + i++; + } + } + _tot_movs = i; +} + +const char* TF9_app::traduci_stato(const TString& cod) +{ + static TString stato; + static TString last_cod; + if (last_cod != cod) + { + last_cod = cod; + stato.cut(0); + if (cod == "01") + stato << "in diagnostica"; // Deprecated + else if (cod == "02") + stato << "err. diagnostica"; + else if (cod == "03") + stato << "diagnostica ok"; + else if (cod == "04") + stato << "controllo WA"; + else if (cod == "05") + stato << "err. diagn. WA"; + else if (cod == "06") + stato << "diagn. WA OK"; + else if (cod == "07") + stato << "in elab. sost."; + else if (cod == "08") + stato << "err. diag. sost."; + else if (cod == "09") + stato << "Archiviato"; + } + return (const char*)stato; +} + +void TF9_app::fill() +{ + _ambiente = ini_get_string(CONFIG_DITTA, PAR_MOD, AMBIENTE_F9); + _addr_doc = ini_get_string(CONFIG_DITTA, PAR_MOD, ADDRCART_F9); + + TString query; + query << "SELECT * FROM F9DRD00K ORDER BY " << DRD_TIME << ";"; + db().sq_set_exec(query, false); + + TSheet_field& sf = _msk->sfield(S_ELAB); + sf.hide(); + int i = 0; + for(bool ok = db().sq_next(); ok; ok = db().sq_next()) + { + TString tipo; + TToken_string& row = sf.row(i++); + row.add(db().sq_get(DRD_STATO) == "09" ? "X" : ""); + row.add(db().sq_get(DRD_ID_EST)); + row.add(db().sq_get_date(DRD_TIME)); + row.add(db().sq_get(DRD_FLAG_PD) == "P" ? "X" : ""); + + tipo << db().sq_get(DRD_TIPODOC); + if(tipo == "A") tipo << "cquisti"; + if(tipo == "V") tipo << "endite"; + if(tipo == "C") tipo << "orrispettivi"; + row.add(tipo); + + row.add(db().sq_get_date(DRD_DATADA)); + row.add(db().sq_get_date(DRD_DATAA)); + row.add(db().sq_get(DRD_UTENTE)); + row.add(traduci_stato(db().sq_get(DRD_STATO))); + row.add(db().sq_get(DRD_DESC)); + if(TDate(row.get(cid2index(F_DATAESTR))) == TDate(TODAY)) + { + if (TString(row.get(cid2index(F_PROV_B))) == "X") + _last_estr_p = real(TString(row.get(cid2index(F_IDESTR))).ltrim(9)).integer(); + else + _last_estr_d = real(TString(row.get(cid2index(F_IDESTR))).ltrim(9)).integer(); + } + } + sf.force_update(); + sf.show(); +} + +state_fppro TF9_app::check_fppro(int numreg) const { TLocalisamfile mov(LF_MOV); mov.put(MOV_NUMREG, numreg); - if (mov.read() && check_causale(mov.get(MOV_CODCAUS))) // Controllo subito la causale se no non mi interessa + if (mov.read() == NOERR && check_causale(mov.get(MOV_CODCAUS))) { // Controllo se ho i riferimenti all'FPPRO e verifico che sia tutto ok const TString& keys_fppro = mov.get(MOV_KEYFPPRO); @@ -61,224 +365,163 @@ state_fppro TMonitor_mask::check_fppro(int numreg) const return not_fa; } -void TMonitor_mask::sel_all() +// Controlla lo stato delle fatture e per le fatt. acquisto non collegate a fppro cerca di agganciarle +const char * TF9_app::check_stato(TipoIVA tipo) { - TSheet_field& sf = sfield(S_MOVS); - const char s = sf.row(0).starts_with("X") ? ' ' : 'X'; - sf.hide(); - FOR_EACH_SHEET_ROW(sf, n, row) - row->add(s, 0); - sf.force_update(); - sf.show(); -} + bool ok = true; -bool TMonitor_mask::diagnosticazzi() -{ - return false; -} - -bool TMonitor_mask::estrai() -{ - return false; -} - -void TMonitor_mask::load_packs() -{ - TSheet_field& sf = sfield(S_ELAB); - - const TDate from(TFppro::get_data_first_doc()); - const TDate to(TODAY); - - TLocalisamfile mov(LF_MOV); - mov.setkey(2); - mov.put(MOV_DATAREG, from); - - struct movs_s + if (tipo == iva_acquisti) { - int n_docs{}; - TDate first_doc; - TDate last_doc; - }; - std::map elabs; - for(bool ok = mov.read(); ok && mov.get_date(MOV_DATAREG) <= to; ok = mov.next() == NOERR) - { - TDate last_dt_doc; - TDate last_dt_el; - TDate data_el = mov.get_date(MOV_DATAELABF9); - if(data_el.ok()) + TProgress_monitor bar(_movs.size(), "Controllo stato movimenti di acquisto"); + // Controlli per le fatture di acquisto + for (auto it = _movs.begin(); it != _movs.end(); ++it) { - auto it = elabs.find(data_el); - if (it != elabs.end()) + if (!bar.add_status()) + break; + + TToken_string& row = *it; + const int numreg = row.get_int(cid2index(F_NUMREG)); + switch (app().check_fppro(numreg)) { - elabs[data_el].n_docs++; - last_dt_el = data_el; - last_dt_doc = mov.get_date(MOV_DATAREG); - } - else - { - if (!elabs.empty()) - elabs[last_dt_el].last_doc = last_dt_doc; - elabs.insert({ data_el, {1, mov.get_date(MOV_DATAREG), TDate()} }); + case guessed: + ok &= fppro_db().associa_mov(numreg); + //row.add(fppro_db().get_keys_fppro()); + case correct: + ok &= true; + break; + + case not_fa: + case reg_with_err: + case no_guessed: + ok &= false; + row.add("X", 0); // Mi segno il movimento che ha un problema + default: break; } } } - for (auto it = elabs.begin(); it != elabs.end(); ++it) - { - TToken_string& row = sf.row(-1); - row.add(it->first, 1); - row.add(it->second.n_docs); - row.add(it->second.first_doc); - row.add(it->second.last_doc); - - } -} - -void TMonitor_mask::fill() -{ - const TDate dataini = get_date(F_DATAINI); - const TDate dataend = get_date(F_DATAEND); - TSheet_field& sf = sfield(S_MOVS); - TLocalisamfile mov(LF_MOV); - - - sf.hide(); - sf.reset(); - mov.setkey(2); - mov.put(MOV_DATAREG, dataini); - int i = 0; - for(bool ok = mov.read(); ok && mov.get_date(MOV_DATAREG) <= dataend; ok = mov.next() == NOERR) - { - if(mov.get_bool(MOV_REGST) && mov.get(MOV_NUMDOC).full()) + else if (tipo == iva_vendite) { + for (auto it = _movs.begin(); it != _movs.end(); ++it) { - TToken_string& row = sf.row(-1); - row.add(""); - row.add(mov.get(MOV_NUMREG)); - row.add(mov.get(MOV_DATAREG)); - row.add(mov.get(MOV_DATADOC)); - row.add(mov.get(MOV_CODCAUS)); - row.add(mov.get(MOV_MESELIQ)); - row.add(mov.get(MOV_NUMDOC)); - row.add(mov.get(MOV_PROTIVA)); - row.add(mov.get(MOV_DESCR)); - i++; + // Controlli per le fatture di vendita } } - sf.force_update(); - sf.show(); - - set(F_TOTMOV, i); - - sel_all(); + return ok ? D_GEST_OK : D_GEST_ERR; } -void TMonitor_mask::save_all() +TString TF9_app::next_estr_today(const char tipo) const { - + char estr[] = {0,0,0,0,0,0,0,0,0,0}; + if(tipo == 'P') + sprintf_s(estr, 10, "%09d", _last_estr_p + 1); + else + sprintf_s(estr, 10, "%09d", _last_estr_d + 1); + return estr; } -void TMonitor_mask::next_page(int p) +bool TF9_app::check_periodo_def(const drd& head) { - if (_dirty && p != 1000) + TString query; + // Controllo se ci sono estrazioni (definitive) che si sovrappongono di periodo (con lo stesso tipo) e che non siano in stato di errore + // Nel caso di stato di errore e' invece possibile la ri-estrazione + query << "SELECT *\nFROM F9DRD00K\n" << + "WHERE '" << head.dal.date2ansi() << "' =< " << DRD_DATAA << " AND '" << head.al.date2ansi() << "' >= " << DRD_DATADA << " AND " << + DRD_FLAG_PD << " = 'D' AND\n F9RIDAS <> '02' AND F9RIDAS <> '05' AND F9RIDAS <> '08' AND " << DRD_TIPODOC << " = '" << head.tipo_doc << "';"; + db().sq_set_exec(query); + return db().sq_items() == 0; +} + +bool TF9_app::esporta() +{ + const bool ok = new_extr(); + fill(); + return ok; +} + +TString& TF9_app::drd_attr() +{ + static TString attr; + attr.cut(0) << DRD_CODSOC << ", " << DRD_ID_EST << ", " << DRD_FLAG_PD << ", " << DRD_DESC << + ", " << DRD_TIPODOC << ", " << DRD_DATADA << ", " << DRD_DATAA << ", " << DRD_UTENTE << ", " << DRD_TIME << ", " << + DRD_STATO << ", " << DRD_PERC; + return attr; +} + +TString& TF9_app::drd_tovalues() const +{ + static TString str; + return str.cut(0) << "'" << _head.cod_soc << "', '" << _head.id_estr << "', '" << (_head.flag_prov ? "P" : "D") << "', '" << _head.descr << + "', '" << _head.tipo_doc << "', '" << _head.dal.date2ansi() << "', '" << _head.al.date2ansi() << "', '" << _head.user << "', CURRENT_TIMESTAMP, '" << + _head.stato_estr << "', '" << _head.addr_cart << "'"; +} + +auto TF9_app::new_extr() -> bool +{ + TString query; + query << "INSERT INTO " << F9_DRD << " ( " << drd_attr() << " ) \nVALUES ( " << drd_tovalues() << " );"; + bool ok = db().sq_set_exec(query); + ok = ok && db().sq_commit(); + return ok; +} + +int TF9_app::estrai() +{ + // Acquisisco i movimenti + load(); + + if (_movs.empty()) { - fill(); - _dirty = false; + warning_box("Non esistono movimenti estraibili per il periodo selezionato."); + return -1; } - TAutomask::next_page(p); -} -bool TMonitor_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) -{ - switch (o.dlg()) + const char tipo = _estr_msk->get(ES_FLAGPROV)[0]; + _head.flag_prov = is_provviso(); + _head.dal = get_dataini(); + _head.al = get_dataend(); + _head.tipo_doc = get_tipodoc(); + if(!_head.flag_prov) // Se estrazione definitiva controllo il periodo che non si sovrapponga alle altre estrazioni def. { - case F_DATAINI: - if (e == fe_init) + if (!check_periodo_def(_head)) { -#ifdef DBG - TDate d("01-01-2017"); -#else - TDate d(TODAY); - d.set_month(1); d.set_day(1); -#endif - o.set(d); + error_box("Attenzione e' stato inserito un periodo che si sovrappone\nad un'estrazione definitiva gia' esistente."); + return -1; } - break; - case F_DATAEND: - if (e == fe_init) - { - TDate d(TODAY); d.set_month(d.month() - 1); d.set_end_month(); - o.set(d); - } - break; - case S_ELAB: - if(e == fe_init) - load_packs(); - break; - case DLG_ALL: - if(e == fe_button && curr_page() == 1) - sel_all(); - break; - case B_ESTR: - if (e == fe_button) - estrai(); - break; - case DLG_FINDREC: - if(e == fe_button && curr_page() == 1) - { - fill(); - if(diagnosticazzi()); - field(B_ESTR).enable(); - } - break; - case DLG_USER: - if (e == fe_button && jolly > 0) - { - TSheet_field& sf = sfield(S_MOVS); - TToken_string& row = sf.row(sf.selected()); - TRectype mov(LF_MOV); - mov.put(MOV_NUMREG, row.get(sf.cid2index(F_NUMREG))); - if (mov.edit()) - fill(); - } - break; - default: break; } - - if (e == fe_modify) - if (o.dlg() >= START_MASK && o.dlg() < END_MASK || o.dlg() >= F_SEL && o.dlg() <= F_DESCR) - field(B_ESTR).disable(); + _head.cod_soc = _ambiente; + _head.id_estr.cut(0) << TDate(TODAY).date2ansi() << _estr_msk->get(ES_FLAGPROV) << next_estr_today(tipo); + _head.descr = get_descr(); + _head.user = user(); + _head.flag_prov = is_provviso(); + _head.addr_cart = _addr_doc; - if((e == fe_modify || e >= se_enter) && jolly == 0) - if (o.dlg() >= START_MASK && o.dlg() < END_MASK) - _dirty = true; + _head.stato_estr = check_stato(get_tipoiva()); - return true; -} + const bool ok = esporta(); -/////////////////////////////////////////////// -// TF9_app -/////////////////////////////////////////////// - -class TF9_app : public TSkeleton_application -{ -public: - virtual bool create(); - virtual void main_loop(); -}; - -bool TF9_app::create() -{ - return TSkeleton_application::create(); + if (_head.stato_estr) + warning_box("Attenzione l'estrazione ha prodotto degli errori. \nControllare e correggere eventuali problemi \npremendo il pulsante 'Controllo Estr.'"); + _msk->enable(DLG_FINDREC, ok); + return ok ? 1 : false; } void TF9_app::main_loop() { - TMonitor_mask m; - m.field(B_ESTR).disable(); - while (m.run() == K_ENTER) - { - - } + _msk = new TMonitor_mask(); + _estr_msk = new TEstrai_mask(); + fill(); + while (_msk->run() == K_ENTER){ } + + delete _msk; + delete _estr_msk; +} + +TF9_app& app() +{ + static TF9_app* app = nullptr; + if(app == nullptr) + app = (TF9_app*)&main_app(); + return *app; } int f90100(int argc, char* argv[]) diff --git a/src/f9/f90100a.h b/src/f9/f90100a.h index 322885f14..f7cd830d1 100644 --- a/src/f9/f90100a.h +++ b/src/f9/f90100a.h @@ -1,23 +1,19 @@ -#define START_MASK 501 -#define F_DATAINI 501 -#define F_DATAEND 502 -#define F_BOXDATE 503 -#define F_TOTMOV 504 -#define B_ESTR 505 -#define END_MASK 599 - - +// Sheet Pacchetti gia' elaborati #define S_ELAB 201 +#define F_TEXT 202 -#define F_SELPACK 101 -#define F_DATA 102 -#define F_NDOCS 103 -#define F_PERIOD_DA 104 -#define F_PERIOD_A 105 - - -#define S_MOVS 301 +#define F_ARCH_B 101 +#define F_IDESTR 102 +#define F_DATAESTR 103 +#define F_PROV_B 104 +#define F_TIPODOC 105 +#define F_DATADAL 106 +#define F_DATAAL 107 +#define F_USER 108 +#define F_STATESTR 109 +#define F_DESCR_E 110 +// Campi del vettore _movs #define F_SEL 101 #define F_NUMREG 102 #define F_DATAREG 103 @@ -26,4 +22,23 @@ #define F_MESELIQ 106 #define F_NUMDOC 107 #define F_PROTIVA 108 -#define F_DESCR 109 \ No newline at end of file +#define F_DESCR 109 + + +// Campi maschera finestra runtime estrazione +#define ES_DATAINI 501 +#define ES_DATAEND 502 +#define ES_FLAGPROV 503 +#define ES_TIPODOC 504 +#define ES_DATEGROUP 505 +#define ES_FLAGGROUP 506 +#define ES_TIPOGROUP 507 + +// +#define CF_CODGROUP 501 +#define CF_CODSOC 502 +#define CF_ADDRGROUP 503 +#define CF_ADDRDOC 504 + +#define DES_TEXT 501 +#define DES_GROUP 502 \ No newline at end of file diff --git a/src/f9/f90100a.uml b/src/f9/f90100a.uml index d59d8e2ba..ad5178f42 100644 --- a/src/f9/f90100a.uml +++ b/src/f9/f90100a.uml @@ -8,72 +8,50 @@ BEGIN PICTURE TOOL_MULTISEL END -BUTTON B_ESTR 2 2 +BUTTON DLG_ELABORA 2 2 BEGIN - PROMPT 1 1 "Estrai" + PROMPT 1 1 "Estrazione" PICTURE TOOL_ELABORA - FLAGS "D" + FLAGS "" +END + +BUTTON DLG_CONFIG 2 2 +BEGIN + PROMPT 1 1 "Configurazione" + PICTURE TOOL_CONFIG + FLAGS "" END BUTTON DLG_FINDREC 2 2 BEGIN - PROMPT 1 1 "Diagnostica" + PROMPT 1 1 "Controllo Estr." PICTURE TOOL_PERMISSIONS - FLAGS "" + FLAGS "" END #include ENDPAGE -PAGE "Config " 0 2 0 0 +PAGE "Monitor Estrazioni" 0 2 0 0 -GROUPBOX F_BOXDATE 60 3 +TEXT F_TEXT BEGIN - PROMPT 0 0 "Periodo" + PROMPT 0 1 "@BEstrazioni effettuate:" END -DATE F_DATAINI +SPREADSHEET S_ELAB -1 -1 BEGIN - PROMPT 1 1 " dal" -END - -DATE F_DATAEND -BEGIN - PROMPT 34 1 "Fino al" -END - -SPREADSHEET S_ELAB 60 10 -BEGIN - PROMPT 0 3 "Elenco pacchetti elaborati" - ITEM " " - ITEM "DATA " - ITEM "NDOCS " - ITEM "PERIOD_DA" - ITEM "PERIOD_A " -END - -ENDPAGE - -PAGE "Movimenti" 0 2 0 0 - -SPREADSHEET S_MOVS 0 -3 -BEGIN - PROMPT 1 1 "Movimenti stampati" - ITEM "" - ITEM "Numero" - ITEM "Data" - ITEM "Data Doc" - ITEM "Causale" - ITEM "Mese Liq.@7" - ITEM "Documento" - ITEM "Protoc." - ITEM "Descrizione" -END - -NUMBER F_TOTMOV 7 0 -BEGIN - PROMPT 1 -1 "n. movimenti" - FLAGS "D" + PROMPT 0 2 "Elenco pacchetti elaborati" + ITEM "Archiviato@8" + ITEM "ID Estrazione@14" + ITEM "Data@8" + ITEM "Provv.@4" + ITEM "Tipo@8" + ITEM "dal@8" + ITEM "al@8" + ITEM "Utente@8" + ITEM "Stato estrazione@11" + ITEM "Descrizione@50" END ENDPAGE @@ -82,36 +60,65 @@ ENDMASK PAGE "Pacchetti" -1 -1 78 13 -BOOLEAN F_SELPACK +BOOLEAN F_ARCH_B BEGIN - PROMPT 1 1 "Sel." -END - -DATA F_DATA -BEGIN - PROMPT 30 1 "Data" + PROMPT 1 1 "" FLAGS "D" END -NUMBER F_NDOCS 6 0 +STRING F_IDESTR 18 BEGIN - PROMPT 1 2 "Data" + PROMPT 1 1 "" FLAGS "D" END -DATA F_PERIOD_DA +BOOLEAN F_PROV_B BEGIN - PROMPT 1 3 "Data periodo da" + PROMPT 1 1 "" FLAGS "D" END -DATA F_PERIOD_A +STRING F_DESCR_E 50 BEGIN - PROMPT 1 4 "Data periodo a " + PROMPT 1 1 "" FLAGS "D" END +STRING F_TIPODOC 13 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END +DATE F_DATADAL +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +DATE F_DATAAL +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_USER 20 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_DATAESTR 19 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END + +STRING F_STATESTR 16 +BEGIN + PROMPT 1 1 "" + FLAGS "D" +END ENDPAGE @@ -133,80 +140,16 @@ END ENPAGE ENDMASK +PAGE "Elenco di controllo" -1 -1 78 13 -PAGE "Elementi spredsheet" -1 -1 50 3 - -BOOLEAN F_SEL +SPREADSHEET S_ELAB 60 10 BEGIN - PROMPT 1 0 "" -END - -NUMBER F_NUMREG 7 -BEGIN - PROMPT 1 1 "Numero " - FLAGS "D" -END - -DATE F_DATAREG -BEGIN - PROMPT 1 2 "Data reg." - FLAGS "D" -END - -DATE F_DATADOC -BEGIN - PROMPT 1 3 "Data doc." - FLAGS "D" -END - -STRING F_CODCAUS 3 -BEGIN - PROMPT 1 4 "Causale " - FLAGS "D" -END - -NUMBER F_MESELIQ 2 -BEGIN - PROMPT 1 5 "Causale " - FLAGS "D" -END - -NUMBER F_NUMDOC 7 -BEGIN - PROMPT 1 6 "Documento" - FLAGS "D" -END - -NUMBER F_PROTIVA 6 -BEGIN - PROMPT 1 7 "Protoc." - FLAGS "D" -END - -STRING F_DESCR 50 -BEGIN - PROMPT 1 8 "Descrizione" - FLAGS "D" -END - -ENDPAGE - -TOOLBAR "topbar" 0 0 0 2 - -BUTTON DLG_OK 2 2 -BEGIN - PROMPT 1 1 "" -END - -BUTTON DLG_USER 2 2 -BEGIN - PROMPT 1 1 "Collega" - PICTURE TOOL_LINK -END - -BUTTON DLG_CANCEL 2 2 -BEGIN - PROMPT 1 1 "" + PROMPT 0 2 "Movimenti da controllare" + ITEM " " + ITEM "DATA " + ITEM "NDOCS " + ITEM "PERIOD_DA" + ITEM "PERIOD_A " END ENDPAGE diff --git a/src/f9/f901tab.h b/src/f9/f901tab.h index cd8abea08..67c0c2b20 100644 --- a/src/f9/f901tab.h +++ b/src/f9/f901tab.h @@ -1,5 +1,11 @@ #pragma once +#define F9_WA "F9WA00K" +#define F9_DRD "F9DRD00K" +#define F9_IVA "F9IVA00K" +#define F9_DRT "F9DRT00K" + +// FILE DRD : DRIVER ESTRAZIONE GIORNALE IVA #define DRD_CODSOC "F9RCSOC" // A(10) [K] #define DRD_ID_EST "F9RIDES" // A(18) [K] #define DRD_FLAG_PD "F9RFPDE" // A(1) [K] - { P | D } - Flag provvisorio/definitivo @@ -10,17 +16,21 @@ #define DRD_UTENTE "F9RUTEE" // A(10) - Utente estrazione #define DRD_TIME "F9RUHES" // T - Data e ora estrazione #define DRD_STATO "F9RIDAS" // A(2) - { 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 } - Stato estrazione documenti -// 01 = in diagnostica -// 02 = errore diagnostica gestionale -// 03 = diagnostica gestionale ok, -// 04 = in controllo webapp, -// 05 = errore diagnostica webapp, -// 06 = diagnostica webapp ok (se provvisorio si ferma qui) -// 07 = elaborazione presso sostitutiva -// 08 = errore diagnostica sostitutiva -// 09 = Pacchetto archiviazione acquisito +// Stati ///////////////// +#define IN_DIAGN "01" // 01 = in diagnostica +#define D_GEST_ERR "02" // 02 = errore diagnostica gestionale +#define D_GEST_OK "03" // 03 = diagnostica gestionale ok, +#define WA_CONTROL "04" // 04 = in controllo webapp, +#define D_WA_ERR "05" // 05 = errore diagnostica webapp, +#define D_WA_OK "06" // 06 = diagnostica webapp ok (se provvisorio si ferma qui) +#define ELAB_SOS "07" // 07 = elaborazione presso sostitutiva +#define D_ERR_SOS "08" // 08 = errore diagnostica sostitutiva +#define ELAB_COMPL "09" // 09 = Pacchetto archiviazione acquisito +////////////////////////// +#define DRD_PERC "F9RPCDC" // A(256) - Perc. copia doc. cartacei WA +// FILE IVA : DOCUMENTI ESTRATTI DAL GIORNALE IVA #define IVA_CODSOC "F9ICSOC" // A(10) [K] - Codice società #define IVA_IDLAN "F9IIDLA" // A(18) [K] - ID UNIVOCO DI LANCIO #define IVA_FLAG_PD "F9IFPDE" // A(1) [K] - Flag Provvisorio / Definitivo @@ -30,34 +40,59 @@ #define IVA_DOCXML "F9IDXML" // A(1) - { S | N } - Documento xml (S=Si, N=No) #define IVA_TIPOCF "F9ITCFO" // A(1) - { C | F } - Tipo cliente / fornitore (C=Cliente, F=Fornitore) #define IVA_CODCF "F9ICCFO" // A(10) - Codice cliente / fornitore (In caso di autofattura mettere fornitore originale) - -#define IVA_DRSO "F9IDRSO" // A(60) - Ragione sociale -#define IVA_IDFI "F9IIDFI" // A(30) - {Codice ISO + { PIVA (x ita) | CF (x est)}} ID fiscale -#define IVA_PIVA "F9IPIVA" // A(28) - Partiva Iva -#define IVA_CFIS "F9ICFIS" // A(16) - Codice fiscale -#define IVA_CADO "F9ICADO" // A(10) - Categoria documento -#define IVA_CSOS "F9ICSOS" // A(6) - Causale per sostitutiva(da tabella f9drt) (tipo documento fattura (TD01,TD02,TD03 ecc)) -#define IVA_NDOC "F9INDOC" // A(20) - Numero Documento -#define IVA_UDOC "F9IUDOC" // D - Data Documento -#define IVA_SIVA "F9ISIVA" // A(10) [K] - sezionale iva -#define IVA_CREG "F9ICREG" // A(6) [K] - Tipo registrazione -#define IVA_NPRI "F9INPRI" // A(20) [K] - n.protocollo iva -#define IVA_UPRI "F9IUPRI" // D [K] - data protocollo iva -#define IVA_FOOA "F9IFOOA" // A(10) - fornitore originale fattura -#define IVA_TROT "F9ITROT" // A(6) - tipo registrazione originale(TR) -#define IVA_NRRO "F9INRRO" // A(20) - n.registrazione originale -#define IVA_URGO "F9IURGO" // D - data registrazione originale -#define IVA_CLDF "F9ICLDF" // A(10) - classe documentale FTV (in base al tipo documento da F9DRT00K) -#define IVA_NMF1 "F9INMF1" // A(100) - nome file DOC (Nome fattura cartacea) -#define IVA_CLDN "F9ICLDN" // A(10) - classe documentale(annesso 1) (in base al tipo documento da F9DRA00K) -#define IVA_NMF2 "F9INMF2" // A(100) - nome file -#define IVA_CLDA "F9ICLDA" // A(10) - classe documentale(annesso 2) -#define IVA_NMF3 "F9INMF3" // A(100) - nome file (Nome documento (senza percorso)) - - - - - - +#define IVA_RAGSOC "F9IDRSO" // A(60) - Ragione sociale +#define IVA_IDFISC "F9IIDFI" // A(30) - {Codice ISO + { PIVA (x ita) | CF (x est)}} ID fiscale +#define IVA_PIVA "F9IPIVA" // A(28) - Partiva Iva +#define IVA_CODFIS "F9ICFIS" // A(16) - Codice fiscale +#define IVA_CATDOC "F9ICADO" // A(10) - Categoria documento +#define IVA_CAUSSOS "F9ICSOS" // A(6) - Causale per sostitutiva(da tabella f9drt) (tipo documento fattura (TD01,TD02,TD03 ecc)) +#define IVA_NUMDOC "F9INDOC" // A(20) - Numero Documento +#define IVA_DATADOC "F9IUDOC" // D - Data Documento +#define IVA_SELIVA "F9ISIVA" // A(10) [K] - sezionale iva +#define IVA_TIPOREG "F9ICREG" // A(6) [K] - Tipo registrazione +#define IVA_NPROT "F9INPRI" // A(20) [K] - n.protocollo iva +#define IVA_DATPROT "F9IUPRI" // D [K] - data protocollo iva +#define IVA_FORNOR "F9IFOOA" // A(10) - fornitore originale fattura +#define IVA_REGOR "F9ITROT" // A(6) - tipo registrazione originale(TR) +#define IVA_NUMOR "F9INRRO" // A(20) - n.registrazione originale +#define IVA_DATAOR "F9IURGO" // D - data registrazione originale +#define IVA_CLASDOC "F9ICLDF" // A(10) - classe documentale FTV (in base al tipo documento da F9DRT00K) +#define IVA_NOMF1 "F9INMF1" // A(100) - nome file DOC (Nome fattura cartacea) +#define IVA_CLASAN1 "F9ICLDN" // A(10) - classe documentale(annesso 1) (in base al tipo documento da F9DRA00K) +#define IVA_NOMF2 "F9INMF2" // A(100) - nome file 1 +#define IVA_CLASAN2 "F9ICLDA" // A(10) - classe documentale(annesso 2) +#define IVA_NOMF3 "F9INMF3" // A(100) - nome file 2 (Nome documento (senza percorso)) +#define IVA_CLASAN4 "F9ICLD4" // A(10) - classe documentale(annesso 3) +#define IVA_NOMF4 "F9INMF4" // A(100) - nome file 3 +#define IVA_CLASAN5 "F9ICLD5" // A(10) - classe documentale(annesso 4) +#define IVA_NOMF5 "F9INMF5" // A(100) - nome file 4 +#define IVA_CLASAN6 "F9ICLD6" // A(10) - classe documentale(annesso 5) +#define IVA_NOMF6 "F9INMF6" // A(100) - nome file 5 +#define IVA_CLASAN7 "F9ICLD7" // A(10) - classe documentale(annesso 6) +#define IVA_NOMF7 "F9INMF7" // A(100) - nome file 6 +#define IVA_CLASAN8 "F9ICLD8" // A(10) - classe documentale(annesso 7) +#define IVA_NOMF8 "F9INMF8" // A(100) - nome file 7 +#define IVA_CLASAN9 "F9ICLD9" // A(10) - classe documentale(annesso 8) +#define IVA_NOMF9 "F9INMF9" // A(100) - nome file 8 +#define IVA_CLASA10 "F9ICL10" // A(10) - classe documentale(annesso 9) +#define IVA_NOMF10 "F9INM10" // A(100) - nome file 9 +#define IVA_USERELA "F9IUTEE" // A(10) - Utente elaborazione +#define IVA_TIMEELA "F9IUHEL" // D - Data e ora elaborazione +#define IVA_TIMEWEB "F9IUHEW" // D - Data e ora elaborazione WEBAPP +#define IVA_DESCDOC "F9IDDES" // A(30) - Descrizione documento +#define IVA_TIPPROT "F9ITPRT" // A(2) - Tipo protocollo ricezione +#define IVA_NUMPROT "F9IAPRT" // I(4) - Numero protocollo ricezione +#define IVA_ANNPROT "F9INPRT" // I(10) - Anno protocollo ricezione +#define IVA_TIMERIC "F9IURIC" // D - Data/ora ricezione fattura +// FILE DRT : TABELLA CATEGORIE DOCUMENTALI +#define DRT_CODSOC "F9TCSOC" // A(10) [K] - COD.SOCIETÀ +#define DRT_CATDOC "F9TCADO" // A(10) [K] - Categoria documento +#define DRT_DESCR "F9TDES" // A(30) - Descrizione documento +#define DRT_CLASSO "F9TCLDC" // A(10) - classe documentale sostitutiva +#define DRT_CAUSSO "F9TCSOS" // A(6) - causale per sostitutiva(TD01…) +#define DRT_CAUSCON "F9TCAU" // A(6) - causale contabile +#define DRT_TIPOCAU "F9TTCAU" // A(6) - tipo causale contabile +#define DRT_TIMOMOV "F9TTMOV" // A(6) - tipo movimento contabile +#define DRT_OPCEE "F9TFCEE" // A(6) - operatore CEE From 8a112df689595cbdac105452f35940a681d2e3e4 Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Fri, 2 Aug 2019 07:45:32 +0200 Subject: [PATCH 2/3] Patch level : 12.0 no-patch Files correlati : build Commento : modificati file progetto f90 --- build/f90.vcxproj | 2 -- build/f90.vcxproj.filters | 6 ------ 2 files changed, 8 deletions(-) diff --git a/build/f90.vcxproj b/build/f90.vcxproj index 8a8dee020..b951d2da4 100644 --- a/build/f90.vcxproj +++ b/build/f90.vcxproj @@ -186,12 +186,10 @@ - - diff --git a/build/f90.vcxproj.filters b/build/f90.vcxproj.filters index 33bd6e7ef..f2627b09c 100644 --- a/build/f90.vcxproj.filters +++ b/build/f90.vcxproj.filters @@ -27,9 +27,6 @@ Headers - - Headers - Headers @@ -41,9 +38,6 @@ Sources - - Sources - From 0c09b9897c286c9e1fc4ef64d69eead217b0f80c Mon Sep 17 00:00:00 2001 From: Simone Palacino Date: Fri, 2 Aug 2019 07:46:01 +0200 Subject: [PATCH 3/3] Patch level : 12.0 no-patch Files correlati : build Commento : modificati file progetto f1lib per f9 --- build/f1lib.vcxproj | 4 ++++ build/f1lib.vcxproj.filters | 3 +++ 2 files changed, 7 insertions(+) diff --git a/build/f1lib.vcxproj b/build/f1lib.vcxproj index fa7086b48..a56256393 100644 --- a/build/f1lib.vcxproj +++ b/build/f1lib.vcxproj @@ -159,9 +159,13 @@ {2d38a763-3d74-4338-9362-b891784ec90e} + + {c575788b-0be4-4f68-b9c9-3c204ec04e07} + + diff --git a/build/f1lib.vcxproj.filters b/build/f1lib.vcxproj.filters index c61d72f6b..dce97793d 100644 --- a/build/f1lib.vcxproj.filters +++ b/build/f1lib.vcxproj.filters @@ -12,6 +12,9 @@ Sources + + Sources +