Merge remote-tracking branch 'origin/R_10_00' into R_10_00

This commit is contained in:
Mattia Tollari 2019-06-27 15:12:23 +02:00
commit 3d9f58af40
15 changed files with 320 additions and 185 deletions

View File

@ -235,12 +235,15 @@
</SqlCompiler> </SqlCompiler>
<SqlCompiler Include="..\src\fp\sql\fp0106.sql"> <SqlCompiler Include="..\src\fp\sql\fp0106.sql">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler> </SqlCompiler>
<SqlCompiler Include="..\src\fp\sql\fp0108.sql"> <SqlCompiler Include="..\src\fp\sql\fp0108.sql">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler> </SqlCompiler>
<SqlCompiler Include="..\src\fp\sql\fp0110.sql"> <SqlCompiler Include="..\src\fp\sql\fp0110.sql">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</SqlCompiler> </SqlCompiler>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -3,3 +3,5 @@ cg2fppro.msk
Cambiata icona ricarica fatture su 'Fatture SDI' Cambiata icona ricarica fatture su 'Fatture SDI'
Aggiunta importazione percent. e natura iva da ini con f1 Aggiunta importazione percent. e natura iva da ini con f1
Corretta importazione importo totale con ritenute
Corretto calcolo ritenute in maschera fppro

View File

@ -9,79 +9,79 @@ Patch = 846
Versione = 21511200 Versione = 21511200
[cg99] [cg99]
Kill(0) = batbmsp.msk|x Kill(0) = bastndo.msk|x
Kill(1) = bastcve.rep|x Kill(1) = batblbu.msk|x
Kill(2) = batbins.msk|x Kill(2) = bastzon.msk|x
Kill(3) = bastscc.rep|x Kill(3) = bastesc.msk|x
Kill(4) = batbcam.msk|x Kill(4) = bastscc.msk|x
Kill(5) = batbpdb.msk|x Kill(5) = bastvet.msk|x
Kill(6) = bastver.msk|x Kill(6) = bastcve.msk|x
Kill(7) = batbcco.msk|x Kill(7) = batbntb.msk|x
Kill(8) = batbesc.msk|x Kill(8) = bastndo.rep|x
Kill(9) = batbdpn.msk|x Kill(9) = batbvet.msk|x
Kill(10) = bastndo.msk|x Kill(10) = batbcve.msk|x
Kill(11) = bastesc.msk|x Kill(11) = batbndo.msk|x
Kill(12) = batbndo.msk|x Kill(12) = bastpor.msk|x
Kill(13) = batbind.msk|x Kill(13) = batbind.msk|x
Kill(14) = bastmsp.msk|x Kill(14) = batbtit.msk|x
Kill(15) = bastreg.rep|x Kill(15) = bastntb.rep|x
Kill(16) = batbleg.msk|x Kill(16) = batbleg.msk|x
Kill(17) = bastpor.msk|x Kill(17) = bastcco.rep|x
Kill(18) = batbpor.msk|x Kill(18) = bastmsp.rep|x
Kill(19) = batbcfi.msk|x Kill(19) = bastreg.rep|x
Kill(20) = bastcco.msk|x Kill(20) = bastcco.msk|x
Kill(21) = bastmsp.rep|x Kill(21) = bastmsp.msk|x
Kill(22) = batbtit.msk|x Kill(22) = bastnot.msk|x
Kill(23) = batbcve.msk|x Kill(23) = batbcam.msk|x
Kill(24) = batbivd.msk|x Kill(24) = bastpor.rep|x
Kill(25) = batbscc.msk|x Kill(25) = batbpdb.msk|x
Kill(26) = bastcfi.rep|x Kill(26) = batbins.msk|x
Kill(27) = batbarb.msk|x Kill(27) = bastscc.rep|x
Kill(28) = bastver.rep|x Kill(28) = bastvet.rep|x
Kill(29) = bastleg.msk|x Kill(29) = bastpdb.msk|x
Kill(30) = bastzon.rep|x Kill(30) = batbesc.msk|x
Kill(31) = bastleg.rep|x Kill(31) = bastleg.msk|x
Kill(32) = bastcam.rep|x Kill(32) = bastivd.msk|x
Kill(33) = batblia.msk|x Kill(33) = batbdpn.msk|x
Kill(34) = batbzon.msk|x Kill(34) = bastdpn.rep|x
Kill(35) = bastvet.rep|x Kill(35) = batbmsp.msk|x
Kill(36) = bastdpn.msk|x Kill(36) = bastdpn.msk|x
Kill(37) = bastivd.msk|x Kill(37) = bastcve.rep|x
Kill(38) = bastarb.rep|x Kill(38) = bastesc.rep|x
Kill(39) = bastcam.msk|x Kill(39) = batbdel.msk|x
Kill(40) = bastntb.msk|x Kill(40) = bastver.rep|x
Kill(41) = bastivd.rep|x Kill(41) = bastcam.msk|x
Kill(42) = bastdpn.rep|x Kill(42) = batbreg.msk|x
Kill(43) = bastpdb.msk|x Kill(43) = bastivd.rep|x
Kill(44) = batbinl.msk|x Kill(44) = batbnot.msk|x
Kill(45) = bastesc.rep|x Kill(45) = bastntb.msk|x
Kill(46) = bastreg.msk|x Kill(46) = bastreg.msk|x
Kill(47) = batbreg.msk|x Kill(47) = batbzon.msk|x
Kill(48) = bastzon.msk|x Kill(48) = batbtra.msk|x
Kill(49) = bastarb.msk|x Kill(49) = bastcfi.msk|x
Kill(50) = batblia.msk|x Kill(50) = bastarb.rep|x
Kill(51) = cgtbcon.msk|x Kill(51) = bastarb.msk|x
Kill(52) = batbnot.msk|x Kill(52) = bastpdb.rep|x
Kill(53) = batbdel.msk|x Kill(53) = cgtbcon.msk|x
Kill(54) = batbvet.msk|x Kill(54) = batbver.msk|x
Kill(55) = batbtra.msk|x Kill(55) = batblia.msk|x
Kill(56) = bastnot.rep|x Kill(56) = bastnot.rep|x
Kill(57) = bastpdb.rep|x Kill(57) = batbinl.msk|x
Kill(58) = bastscc.msk|x Kill(58) = bastver.msk|x
Kill(59) = bastcco.rep|x Kill(59) = batbcco.msk|x
Kill(60) = batbntb.msk|x Kill(60) = bastcam.rep|x
Kill(61) = bastvet.msk|x Kill(61) = bastcfi.rep|x
Kill(62) = batbver.msk|x Kill(62) = batbscc.msk|x
Kill(63) = bastcfi.msk|x Kill(63) = batbcfi.msk|x
Kill(64) = batblbu.msk|x Kill(64) = bastzon.rep|x
Kill(65) = bastntb.rep|x Kill(65) = batbivd.msk|x
Kill(66) = bastcve.msk|x Kill(66) = batbpor.msk|x
Kill(67) = bastndo.rep|x Kill(67) = bastleg.rep|x
Kill(68) = bastnot.msk|x Kill(68) = batblia.msk|x
Kill(69) = bastpor.rep|x Kill(69) = batbarb.msk|x
[cg] [cg]
Data = 25-06-2019 Data = 26-06-2019
Descrizione = Contabilita' Generale Descrizione = Contabilita' Generale
Dischi = 1 Dischi = 1
Moduli = ba Moduli = ba

Binary file not shown.

View File

@ -1,3 +1,10 @@
fp0.exe fp0.exe
fp0400a.msk
fp0500a.msk
Aggiunta esportazione percentuale e natura iva per f1 Aggiunta esportazione percentuale e natura iva per f1
Corretto calcolo ritenute fiscali se piu di una
Aggiunta colonna ritenute fiscali nel monitor passive
Sistemata maschera fp0500 per lo sheet "altri dati gestionali"
Corretta esportazione altri dati gestionali
Corretto controllo tipo documento con tipo causale (TD01 -> FA, TD04 -> NC)

View File

@ -3,11 +3,13 @@ Demo=0
[fp1] [fp1]
File(0) = fp0.exe|X File(0) = fp0.exe|X
Patch = 0844 File(4) = fp0400a.msk|X
File(5) = fp0500a.msk|X
Patch = 844
Versione = 21511200 Versione = 21511200
[fp] [fp]
Data = 25-06-2019 Data = 26-06-2019
Descrizione = Fattura Elettronica Descrizione = Fattura Elettronica
Dischi = 1 Dischi = 1
Moduli = cg,ve Moduli = cg,ve

Binary file not shown.

View File

@ -28,7 +28,9 @@ enum
pro_err = -86552, pro_err = -86552,
pro_noerr = 1, pro_noerr = 1,
pro_notsaved = 0, pro_notsaved = 0,
pro_nofp = -1 pro_nofp = -1,
pro_dataric_err = -2,
pro_numreg_err = -3
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -1449,7 +1451,9 @@ void TPrimanota_application::write_fppro()
{ {
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov // Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
if (save_fppro() > 0 && !save_dbmov()) if (save_fppro() > 0 && !save_dbmov())
message_box(TString("ATTENZIONE:") << " non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" << message_box(
TString("ATTENZIONE:") <<
" non è stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n" <<
"Movimento registrato senza collegamento ai documenti in ingresso."); "Movimento registrato senza collegamento ai documenti in ingresso.");
} }
@ -1463,10 +1467,43 @@ bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
return tot.full() && real(tot) != 0; return tot.full() && real(tot) != 0;
} }
int TPrimanota_application::controlli_f1(const TMask& m)
{
if (m.find_by_id(F_PROKEY) != NULL && m.get(F_PROKEY).full() && has_f1_db((TMask*)&m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
{
TToken_string keys(m.get(F_PROKEY), ';');
const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric();
// Devo controllare che la data operazione sia maggiore della data ric
const TDate data_operazione(m.get(F_DATAREG));
if (data_operazione < dataoraric)
return pro_dataric_err;
const int numreg = fppro_db().set_keys(keys).get_numregcont();
if (numreg != 0)
{
const TDate data_documento(m.get(F_DATADOC));
TString msg; msg << "Attenzione il documento " << data_documento.year() << " / " << m.get(F_NUMDOCEXT) <<
" appena registrato e' gia' stato inserito con la registrazione numero " << numreg <<
"\nSe si vuole registrare questo documento in ingresso, scollegarlo prima dalla precedente registrazione.";
error_box(msg);
return pro_numreg_err;
}
}
return pro_noerr;
}
int TPrimanota_application::write(const TMask& m) int TPrimanota_application::write(const TMask& m)
{ {
static int lasterr = NOERR; static int lasterr = NOERR;
switch (controlli_f1(m)) // Solo con F1
{
case pro_dataric_err:
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
case pro_numreg_err:
return _isnowarning;
default: case pro_noerr: break;
}
const long numreg = m.get_long(F_NUMREG); const long numreg = m.get_long(F_NUMREG);
if (numreg > _lastreg) _lastreg = numreg; // Aggiorna ultima registrazione libera if (numreg > _lastreg) _lastreg = numreg; // Aggiorna ultima registrazione libera
@ -1569,10 +1606,19 @@ int TPrimanota_application::write(const TMask& m)
return err; return err;
} }
int TPrimanota_application::rewrite(const TMask& m) int TPrimanota_application::rewrite(const TMask& m)
{ {
mask2rel(m); mask2rel(m);
switch (controlli_f1(m)) // Solo con F1
{
case pro_dataric_err:
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
case pro_numreg_err:
return _isnowarning;
default: case pro_noerr: break;
}
const int err = _rel->rewrite(true); const int err = _rel->rewrite(true);
if (err == NOERR) if (err == NOERR)
{ {
@ -2414,11 +2460,6 @@ int TPrimanota_application::save_fppro()
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP // Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
if (!has_f1_db(&msk)) if (!has_f1_db(&msk))
return pro_nofp; return pro_nofp;
if (!fp_db().sq_is_connect())
{
message_box("Attenzione connesione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata.");
return pro_nofp;
}
// Anzitutto guardo la modalita' in cui sono // Anzitutto guardo la modalita' in cui sono
// Se in modalita' inserimento continuo normalmente o in mod. modifica // Se in modalita' inserimento continuo normalmente o in mod. modifica
@ -2448,8 +2489,9 @@ int TPrimanota_application::save_fppro()
const TDate data_operazione(msk.get(F_DATAREG)); const TDate data_operazione(msk.get(F_DATAREG));
const TDate data_documento(msk.get(F_DATADOC)); const TDate data_documento(msk.get(F_DATADOC));
const TString& numero_docext = msk.get(F_NUMDOCEXT); const TString& numero_docext = msk.get(F_NUMDOCEXT);
const TString& numero_doc = msk.get(F_NUMDOC); real tot_doc = msk.get_real(F_TOTALE);
const TString& tot_doc = msk.get(F_TOTALE); const real ritenute = msk.get_real(F_RITFIS);
tot_doc += ritenute;
TToken_string fppro_keys(msk.get(F_PROKEY), ';'); TToken_string fppro_keys(msk.get(F_PROKEY), ';');
const TString& keyprginvio = fppro_keys.get(); const TString& keyprginvio = fppro_keys.get();
const TString& keyheaderfatt = fppro_keys.get(); const TString& keyheaderfatt = fppro_keys.get();
@ -2457,35 +2499,25 @@ int TPrimanota_application::save_fppro()
// Controllo che i dati corrispondano a quelli nella fattura in ingresso // Controllo che i dati corrispondano a quelli nella fattura in ingresso
TString where_str; TString where_str;
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\'";
if (has_tot_doc(fppro_keys)) if (has_tot_doc(fppro_keys))
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PQ_IMPTOTDOC = \'" << tot_doc << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') "; where_str << " AND PQ_IMPTOTDOC = \'" << tot_doc << "\'";
else if(!numero_docext.empty())
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\' AND PZ_NUMERO = \'" << (!numero_docext.empty() ? numero_docext : numero_doc) << "\') "; where_str << " AND PZ_NUMERO = \'" << numero_docext << "\'";
TString& query = TPro_msk::query_fppro(keyprginvio, keyheaderfatt, keybodyfatt, where_str); where_str << ") ";
TString& query = TPro_msk::query_string();
query << "WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "'";
query << " AND " << where_str;
fp_db().sq_set_exec(query); fp_db().sq_set_exec(query);
if(has_f1_db(&msk) && fp_db().sq_items() != 1) if(has_f1_db(&msk) && fp_db().sq_items() != 1)
{ {
warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\n" << warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\n" <<
"Per consentire una corretta archiviazione sostitutiva si consiglia di non confermare la registrazione e di procedere\n" << "Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n" <<
"all'identificazione del fornitore tramite il monitor fatture passive.\n" << "all'inserimento dei dati riportati sulla fattura per la corretta identificazione del documento in entrata.\n" <<
"Se possibile utilizzare il 'Riporta documento' o la contabilizzazione dal monitor delle fatture passive per evitare errori.\n"
"In caso di documento escluso dalla fatturazione elettronica ignorate questo messaggio."); "In caso di documento escluso dalla fatturazione elettronica ignorate questo messaggio.");
return pro_notsaved; save_dbmov(true);
}
const int numreg = fp_db().sq_get_int("PZ_NUMREGCONT");
if (numreg != 0)
{
TString msg; msg << "Attenzione il documento " << data_documento.year() << " / " << numero_doc <<
" appena registrato e' gia' stato inserito con la registrazione numero " << numreg <<
"\nControllare e nel caso provvedere a correggere l'associazione del movimento ai documenti in ingresso.";
warning_box(msg);
}
// Devo controllare che la data operazione sia maggiore della data ric
const TDate dataoraric = fp_db().sq_get_date("P1_DATAORARIC");
if(data_operazione < dataoraric)
{
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
return pro_notsaved; return pro_notsaved;
} }
@ -2494,13 +2526,17 @@ int TPrimanota_application::save_fppro()
TString update_query; TString update_query;
update_query << "UPDATE FPPRO00F\n" << update_query << "UPDATE FPPRO00F\n" <<
"SET PZ_TIPOCF = 'F', PZ_CLIFOR = \'" << clifor << "\', PZ_DATACONT = \'" << TDate(TODAY).date2ansi() << "\', PZ_NUMREGCONT = \'" << numregcont << "\', PZ_DATAREGCONT = \'" << data_operazione.date2ansi() << "\'\n" << "SET PZ_TIPOCF = 'F', PZ_CLIFOR = \'" << clifor << "\', PZ_DATACONT = \'" << TDate(TODAY).date2ansi() << "\', " <<
"WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';"; "PZ_NUMREGCONT = \'" << numregcont << "\', PZ_DATAREGCONT = \'" << data_operazione.date2ansi() << "\'\n" <<
"WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';";
fp_db().sq_set_exec(update_query); fp_db().sq_set_exec(update_query);
const bool saved = fp_db().sq_commit(); const bool saved = fp_db().sq_commit();
if (!saved) if (!saved)
{
error_box("Attenzione non è stato possibile registrare la fattura nel database."); error_box("Attenzione non è stato possibile registrare la fattura nel database.");
save_dbmov(true);
}
return saved? pro_noerr : pro_notsaved; return saved? pro_noerr : pro_notsaved;
} }

View File

@ -4011,22 +4011,24 @@ bool TPro_msk::load_fppro_mask(TMask* msk, KEY k)
const bool show_all = msk->get_bool(F_SHOWALL); const bool show_all = msk->get_bool(F_SHOWALL);
if (numreg != "0" && !show_all) if (numreg != "0" && !show_all)
continue; continue;
TToken_string& row = sf.row(-1); TToken_string& row = sf.row(-1);
TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';');
keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT"));
row.add("", 0); row.add("", 0);
row.add(fp_db().sq_get("P7_TIPODOC")); row.add(fp_db().sq_get("P7_TIPODOC"));
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC"))); row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
row.add(TDate(fp_db().sq_get_date("PZ_DATA"))); row.add(TDate(fp_db().sq_get_date("PZ_DATA")));
row.add(fp_db().sq_get("PQ_IMPTOTDOC")); row.add(fp_db().sq_get("PQ_IMPTOTDOC"));
row.add(fp_db().sq_get("P7_IMPORTORIT")); row.add(fppro_db().set_keys(keys).get_ritenute());
row.add(fp_db().sq_get("PZ_NUMERO")); row.add(fp_db().sq_get("PZ_NUMERO"));
row.add(fp_db().sq_get("P2_FISCIVAPAESE")); row.add(fp_db().sq_get("P2_FISCIVAPAESE"));
row.add(fp_db().sq_get("P2_FISCIVACOD")); row.add(fp_db().sq_get("P2_FISCIVACOD"));
row.add(fp_db().sq_get("P2_CODFISCALE")); row.add(fp_db().sq_get("P2_CODFISCALE"));
row.add(fp_db().sq_get("PZ_TIPOPROT")); row.add(fp_db().sq_get("PZ_TIPOPROT"));
row.add(fp_db().sq_get("PZ_NUMPROT")); row.add(fp_db().sq_get("PZ_NUMPROT"));
TString fppro_keys; row.add(keys);
fppro_keys << fp_db().sq_get("PZ_KEYPRGINVIO") << ";" << fp_db().sq_get("PZ_KEYHEADERFATT") << ";" << fp_db().sq_get("PZ_KEYBODYFATT");
row.add(fppro_keys);
} }
sf.force_update(); sf.force_update();
sf.show(); sf.show();
@ -4200,12 +4202,6 @@ void TPro_msk::add_scad(const TDate& date, const real& importo)
_scadenze.insert(_scadenze.end(), { date, importo }); _scadenze.insert(_scadenze.end(), { date, importo });
} }
TString& TPro_msk::query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt,
const TString& where_str)
{
return query_fppro("", "", "", where_str, "", keyprginvio, keyheaderfatt, keybodyfatt, false, false);
}
TString& TPro_msk::query_fppro(const TString& codforn, const TString& date) TString& TPro_msk::query_fppro(const TString& codforn, const TString& date)
{ {
return query_fppro(codforn, "", "", "", date, "", "", "", true, false); return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
@ -4240,7 +4236,7 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
} }
static TString query; static TString query;
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, P7_IMPORTORIT, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, PZ_NUMPROT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" << query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, PZ_NUMPROT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
"FROM PAA0200F\n" << "JOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" << "FROM PAA0200F\n" << "JOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"JOIN PAA0100F\n" << " ON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" << "JOIN PAA0100F\n" << " ON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
"JOIN PAA2700F\n" << "ON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" << "JOIN PAA2700F\n" << "ON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" <<
@ -4276,6 +4272,18 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
return query; return query;
} }
TString& TPro_msk::query_string()
{
static TString query;
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
"PZ_NUMPROT, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
"FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
"JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
"JOIN PAA2700F \nON P2_KEYPRGINVIO = PQ_KEYPRGINVIO AND P2_KEYHEADERFATT = PQ_KEYHEADERFATT AND P2_KEYBODYFATT = PQ_KEYBODYFATT\n" <<
"JOIN PAA0700F \nON P7_KEYPRGINVIO = PQ_KEYPRGINVIO AND P7_KEYHEADERFATT = PQ_KEYHEADERFATT AND P7_KEYBODYFATT = PQ_KEYBODYFATT\n";
return query;
}
void TPro_msk::abilita_piva(TMask* msk) void TPro_msk::abilita_piva(TMask* msk)
{ {
if (msk->get_bool(F_ENABSEARCH)) if (msk->get_bool(F_ENABSEARCH))

View File

@ -227,6 +227,8 @@ protected: // TApplication
// setta variabili prima del controllo has_f1_db // setta variabili prima del controllo has_f1_db
void set_has_f1_db(TMask* m); void set_has_f1_db(TMask* m);
bool has_f1_db(TMask* m); bool has_f1_db(TMask* m);
// Controlli prima di write e rewrite
int controlli_f1(const TMask& m);
virtual bool save(bool check_dirty); virtual bool save(bool check_dirty);
@ -459,11 +461,10 @@ public:
void add_scad(const TDate& date, const real& importo); void add_scad(const TDate& date, const real& importo);
bool should_bring_back() const { return _riporta; } bool should_bring_back() const { return _riporta; }
static TString& query_fppro(const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, const TString& where_str);
static TString& query_fppro(const TString& codforn, const TString& date); static TString& query_fppro(const TString& codforn, const TString& date);
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date); static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date);
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false); static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
static TString& query_string();
static void abilita_piva(TMask* msk); static void abilita_piva(TMask* msk);
//bool is_fp(); //bool is_fp();
// Carica documenti FPPRO sulla maschera // Carica documenti FPPRO sulla maschera

View File

@ -5,10 +5,10 @@
#include "cg2102.h" #include "cg2102.h"
#include "execp.h" #include "execp.h"
#include "cfven.h" #include "cfven.h"
#include "../fp/fp0400a.h"
#include "reputils.h" #include "reputils.h"
#include "../fp/fplib.h"
#include "causali.h" #include "causali.h"
#include "clifo.h"
#include "../fp/fplib.h"
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// TFppro // TFppro
@ -18,9 +18,7 @@ TFppro& fppro_db()
{ {
static TFppro* fppro = nullptr; static TFppro* fppro = nullptr;
if (fppro == nullptr) if (fppro == nullptr)
{
fppro = new TFppro(); fppro = new TFppro();
}
return *fppro; return *fppro;
} }
@ -37,14 +35,14 @@ 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" << "\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 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"; "JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n";
fp_db().sq_set_exec(query); _db->sq_set_exec(query);
const keys_s keys = { fp_db().sq_get("KEYPRGINVIO"), fp_db().sq_get("KEYHEADERFATT"), fp_db().sq_get("KEYBODYFATT") }; const keys_s keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") };
const TDate data = fp_db().sq_get_date("DATA"); const TDate data = _db->sq_get_date("DATA");
const TString numdoc = fp_db().sq_get("NUMDOC"); const TString numdoc = _db->sq_get("NUMDOC");
const real imptotdoc(fp_db().sq_get("IMPTOTDOC")); const real imptotdoc(_db->sq_get("IMPTOTDOC"));
const TString4 statopiva = fp_db().sq_get("STATOPIVA"); const TString4 statopiva = _db->sq_get("STATOPIVA");
const TString piva = fp_db().sq_get("PIVA"); const TString piva = _db->sq_get("PIVA");
// Prendo il fornitore del mov per controllare la p.iva // Prendo il fornitore del mov per controllare la p.iva
TLocalisamfile clifo(LF_CLIFO); TLocalisamfile clifo(LF_CLIFO);
@ -78,10 +76,10 @@ int TFppro::get_numreg()
if (!_is_set) if (!_is_set)
{ {
if (set_query()) if (set_query())
return fp_db().sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_int("PZ_NUMREGCONT");
return -1; return -1;
} }
return fp_db().sq_get_int("PZ_NUMREGCONT"); return _db->sq_get_int("PZ_NUMREGCONT");
} }
int TFppro::get_numreg(TToken_string& keys) int TFppro::get_numreg(TToken_string& keys)
@ -95,31 +93,33 @@ TDate TFppro::get_datareg()
if (!_is_set) if (!_is_set)
{ {
if (set_query()) if (set_query())
return fp_db().sq_get_date("PZ_DATAREGCONT"); return _db->sq_get_date("PZ_DATAREGCONT");
return TDate(); return TDate();
} }
return fp_db().sq_get_date("PZ_DATAREGCONT"); return _db->sq_get_date("PZ_DATAREGCONT");
} }
TDate TFppro::get_datareg(TToken_string& keys) TDate TFppro::get_datareg(TToken_string& keys)
{ {
if (set_keys(keys)) set_keys(keys);
if (_is_set)
return get_datareg(); return get_datareg();
return TDate(); return TDate();
} }
real TFppro::get_ritenute() const real TFppro::get_ritenute() const
{ {
real imp = ZERO;
TString query; TString query;
query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" << query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" <<
"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'"; "WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'";
fp_db().sq_set_exec(query); _db->sq_set_exec(query, false);
if(fp_db().sq_items() >= 1) for(bool ok = _db->sq_next(); ok; ok = _db->sq_next())
return fp_db().sq_get_real("IMPORTO"); imp += _db->sq_get_real("IMPORTO");
return ZERO; return imp;
} }
bool TFppro::set_keys(TToken_string& keys) TFppro& TFppro::set_keys(TToken_string& keys)
{ {
if(keys.items() == 3) if(keys.items() == 3)
{ {
@ -127,30 +127,49 @@ bool TFppro::set_keys(TToken_string& keys)
_keys.headerfatt = keys.get(1); _keys.headerfatt = keys.get(1);
_keys.bodyfatt = keys.get(2); _keys.bodyfatt = keys.get(2);
_is_set = false; _is_set = false;
return _keys_setted = true; _keys_setted = true;
} }
return _keys_setted = false; _keys_setted = false;
return *this;
} }
bool TFppro::set_keys(keys_s keys) TFppro& TFppro::set_keys(keys_s keys)
{ {
if(*keys.prginvio != 0 && *keys.headerfatt != 0 && *keys.bodyfatt != 0) if(*keys.prginvio != 0 && *keys.headerfatt != 0 && *keys.bodyfatt != 0)
{ {
_keys = keys; _keys = keys;
_is_set = false; _is_set = false;
return _keys_setted = true; _keys_setted = true;
} }
_is_set = false; _is_set = false;
return _keys_setted = false; _keys_setted = false;
return *this;
} }
TDate TFppro::get_data_first_doc() TDate TFppro::get_data_first_doc() const
{ {
TString query; TString query;
query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" << query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" <<
"\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a"; "\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a";
fp_db().sq_set_exec(query); _db->sq_set_exec(query);
return fp_db().sq_get_date("DATA"); return _db->sq_get_date("DATA");
}
TDate TFppro::get_dataorarioric() const
{
TString query;
query << "SELECT P1_DATAORARIC \nFROM PAA0100F \n" <<
"WHERE P1_KEYPRGINVIO = '" << _keys.prginvio << "' AND P1_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P1_KEYBODYFATT = '" << _keys.bodyfatt << "'";
_db->sq_set_exec(query);
return _db->sq_get_date("P1_DATAORARIC");
}
int TFppro::get_numregcont() const
{
TString query;
query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str();
_db->sq_set_exec(query);
return _db->sq_get_int("PZ_NUMREGCONT");
} }
bool TFppro::set_query() bool TFppro::set_query()
@ -158,18 +177,26 @@ bool TFppro::set_query()
if (_keys_setted) if (_keys_setted)
{ {
_fppro_query.cut(0) << "SELECT * FROM FPPRO00F " << where_str(); _fppro_query.cut(0) << "SELECT * FROM FPPRO00F " << where_str();
return _is_set = fp_db().sq_set_exec(_fppro_query); return _is_set = _db->sq_set_exec(_fppro_query);
} }
return _is_set = false; return _is_set = false;
} }
const char* TFppro::where_str() const const char* TFppro::where_str() const
{ {
TString str; static TString str;
str << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'"; str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'";
return str; return str;
} }
TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false)
{
_db = new SSimple_query();
const bool ok = set_connection(*_db);
// Non utilizzo l'autocommit, viene gestito manualmente
if (ok) _db->sq_set_autocommit(false);
}
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// TProtocollo // TProtocollo
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
@ -366,4 +393,38 @@ bool TF1_log::show_log()
_log = NULL; _log = NULL;
} }
return true; 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;
} }

View File

@ -2,9 +2,8 @@
#define _F1LIBH_ #define _F1LIBH_
#include "strings.h" #include "strings.h"
#include "config.h"
#include "report.h"
#include "reputils.h" #include "reputils.h"
#include "tsdb.h"
#define FILE_CONFIG CONFIG_DITTA #define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "f1" #define FILE_SECTION "f1"
@ -34,6 +33,7 @@ class TFppro : public TObject
const char* bodyfatt; const char* bodyfatt;
}; };
private: private:
SSimple_query* _db;
keys_s _keys; keys_s _keys;
bool _guess; bool _guess;
bool _keys_setted; bool _keys_setted;
@ -46,20 +46,26 @@ public:
bool check_reg(TToken_string& keys, int numreg); bool check_reg(TToken_string& keys, int numreg);
// Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e` // Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e`
bool guess_the_doc(const TLocalisamfile& mov); bool guess_the_doc(const TLocalisamfile& mov);
// Getters
void get_keys_fppro(); void get_keys_fppro();
int get_numreg(); int get_numreg();
int get_numreg(TToken_string& keys); int get_numreg(TToken_string& keys);
TDate get_datareg(); TDate get_datareg();
TDate get_datareg(TToken_string& keys); TDate get_datareg(TToken_string& keys);
real get_ritenute() const; real get_ritenute() const;
bool set_query(); TDate get_data_first_doc() const;
bool set_keys(TToken_string& keys); TDate get_dataorarioric() const;
bool set_keys(keys_s keys); int get_numregcont() const;
// Setters
bool set_query();
TFppro& set_keys(TToken_string& keys);
TFppro& set_keys(keys_s keys);
static TDate get_data_first_doc();
TFppro() : _keys({"\0", "\0", "\0" }), _guess(false), _keys_setted(false), _is_set(false) { } static bool set_connection(SSimple_query& s);
TFppro::TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
TFppro();
TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
}; };
class TProtocollo : TObject class TProtocollo : TObject

View File

@ -247,6 +247,8 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
const TDate& dataregcont = fp_db().sq_get_date("DATAREGCONT"); const TDate& dataregcont = fp_db().sq_get_date("DATAREGCONT");
const TString& filter_elab = get_fattsel(); const TString& filter_elab = get_fattsel();
const bool is_contab = dataregcont != TDate("20010101"); const bool is_contab = dataregcont != TDate("20010101");
TToken_string keys("", ';');
keys.add(fp_db().sq_get("KEYPROG")); keys.add(fp_db().sq_get("KEYHEAD")); keys.add(fp_db().sq_get("KEYFATT"));
clifo.zero(); clifo.zero();
clifo.put(CLI_TIPOCF, 'F'); clifo.put(CLI_TIPOCF, 'F');
@ -271,6 +273,7 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(fp_db().sq_get_date("DATA_RIC")); row.add(fp_db().sq_get_date("DATA_RIC"));
row.add(fp_db().sq_get_date("DATA_DOC")); row.add(fp_db().sq_get_date("DATA_DOC"));
row.add(fp_db().sq_get("TOT_DOC")); row.add(fp_db().sq_get("TOT_DOC"));
row.add(fppro_db().set_keys(keys).get_ritenute());
// Decido se mettere o meno il flag // Decido se mettere o meno il flag
if (forn_code == 0) if (forn_code == 0)
@ -301,12 +304,10 @@ void TPassive_mask::aggiungi_riga(TLocalisamfile& clifo, TSheet_field& sf, TShee
row.add(paa_codpaese, sf.cid2index(S_STATOPAIV)); row.add(paa_codpaese, sf.cid2index(S_STATOPAIV));
row.add(paa_piva); row.add(paa_piva);
row.add(paa_codfisc); row.add(paa_codfisc);
row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X"); row.add(fp_db().sq_get("ATTACHMENT") != "0" ? "" : "X");
row.add(denom); row.add(denom);
row.add(TProtocollo(fp_db().sq_get_int("ANNO_PROT"), fp_db().sq_get("TIPO_PROT"), fp_db().sq_get("NUM_PROT"))); row.add(TProtocollo(fp_db().sq_get_int("ANNO_PROT"), fp_db().sq_get("TIPO_PROT"), fp_db().sq_get("NUM_PROT")));
TString key_prot; key_prot << fp_db().sq_get("KEYPROG") << ";" << fp_db().sq_get("KEYHEAD") << ";" << fp_db().sq_get("KEYFATT"); row.add(keys);
row.add(key_prot);
} }
} }
@ -566,10 +567,10 @@ int TPassive_mask::prepara_contab() const
TString codcaus(get_codcaus(row->get(2), row->get(10))); TString codcaus(get_codcaus(row->get(2), row->get(10)));
TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI))); TString tipodoc(row->get(sf.cid2index(S_TIPODOCSDI)));
if(tipodoc == "TD01" && !check_causale(codcaus, "FA")) if(tipodoc == "TD01" && !check_causale(codcaus, "FA", true))
if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nProcedere lo stesso con l'esportazione?")) if(!yesno_box("Attenzione, per un documento di tipo TD01 e' stata selezionata \nuna causale diversa da Fattura d'Acquisto.\nProcedere lo stesso con l'esportazione?"))
continue; continue;
if(tipodoc == "TD04" && !check_causale(codcaus, "NC")) if(tipodoc == "TD04" && !check_causale(codcaus, "NC", true))
if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nProcedere lo stesso con l'esportazione?")) if(!yesno_box("Attenzione, per un documento di tipo TD04 e' stata selezionata \nuna causale diversa da Nota Credito di Acquisto.\nProcedere lo stesso con l'esportazione?"))
continue; continue;
n_sel++; n_sel++;
@ -599,7 +600,7 @@ int TPassive_mask::prepara_contab() const
real imp = calcola_importo(riva); real imp = calcola_importo(riva);
totdoc.cut(0) << imp; totdoc.cut(0) << imp;
} }
real rit = TFppro(keys).get_ritenute(); real rit = fppro_db().set_keys(keys).get_ritenute();
if(rit != ZERO) if(rit != ZERO)
{ {
contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string()); contab_ini.set("TOTDOC", (abs(real(totdoc)) - rit).string());

View File

@ -30,18 +30,19 @@
#define S_DATARIC 105 #define S_DATARIC 105
#define S_DATADOC 106 #define S_DATADOC 106
#define S_TOTDOC 107 #define S_TOTDOC 107
#define S_FPPRO 108 #define S_TOTRIT 108
#define S_NUMREGCONT 109 #define S_FPPRO 109
#define S_DATAREGCONT 110 #define S_NUMREGCONT 110
#define S_FORNITORE 111 #define S_DATAREGCONT 111
#define S_RAGSOC 112 #define S_FORNITORE 112
#define S_STATOPAIV 113 #define S_RAGSOC 113
#define S_PARIVA 114 #define S_STATOPAIV 114
#define S_CODFISC 115 #define S_PARIVA 115
#define S_ATTACH 116 #define S_CODFISC 116
#define S_RAGXML 117 #define S_ATTACH 117
#define S_NPROT 118 #define S_RAGXML 118
#define S_PROKEY 119 #define S_NPROT 119
#define S_PROKEY 120
#define F_ERR 301 #define F_ERR 301

View File

@ -184,23 +184,24 @@ BEGIN
PROMPT 0 4 "" PROMPT 0 4 ""
ITEM "" ITEM ""
ITEM "Anno" ITEM "Anno"
ITEM "Tipo Doc.\nSDI@6" ITEM "Tipo Doc.\nSDI@5"
ITEM "Numero\nDocumento@18" ITEM "Numero\nDocumento@14"
ITEM "Data\nRicezione@8" ITEM "Data\nRicezione@8"
ITEM "Data\nDoc.@8" ITEM "Data\nDoc.@8"
ITEM "Totale\nDocumento@12" ITEM "Totale\nDocumento@7"
ITEM "Fornitore\nassociato@7" ITEM "Totale\nritenute@6"
ITEM "Num. Registrazione\ncontabile@12" ITEM "Fornitore\nassociato@6"
ITEM "Data Registrazione\ncontabile@12" ITEM "Num. Regis.\ncontabile@8"
ITEM "Fornitore@7" ITEM "Data Regis.\ncontabile@8"
ITEM "Ragione Sociale@50" ITEM "Fornitore@5"
ITEM "Ragione Sociale@40"
ITEM "Stato\nP.IVA@4" ITEM "Stato\nP.IVA@4"
ITEM "Partita IVA@10" ITEM "Partita IVA@10"
ITEM "Cod. Fiscale@16" ITEM "Cod. Fiscale@12"
ITEM "Allegati@7" ITEM "Allegati@6"
ITEM "Ragione Sociale (XML)@50" ITEM "Ragione Sociale (XML)@40"
ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@22" ITEM "Numero Protocollo (in entrata)\n[anno-tipo prot/progressivo]@20"
ITEM "Chiave Prot.@80" ITEM "Chiave Prot.@40"
END END
ENDPAGE ENDPAGE
@ -311,6 +312,12 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER S_TOTRIT 10 2
BEGIN
PROMPT 1 2 "Totale Ritenute"
FLAGS "D"
END
BOOLEAN S_FPPRO BOOLEAN S_FPPRO
BEGIN BEGIN
PROMPT 15 2 "Salvato in FP-PRO" PROMPT 15 2 "Salvato in FP-PRO"