Patch level : 12.0 no-patch
Files correlati : f90.exe Commento : - Modificata finestra estrazione - Scrittura db per nuova estrazione - Corretta visualizzazione estrazioni passate
This commit is contained in:
parent
582028f096
commit
9d1dde9315
120
src/f1/f1lib.cpp
120
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;
|
||||
}
|
@ -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); }
|
||||
|
@ -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<TDate, movs_s> 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[])
|
||||
|
@ -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
|
||||
#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
|
@ -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 <helpbar.h>
|
||||
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
|
||||
|
111
src/f9/f901tab.h
111
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user