Merge branch 'R_10_00' of http://10.65.20.33/CAMPO/campo into R_10_00
This commit is contained in:
commit
c74a2a304d
4
cd/test/ba0960.txt
Normal file
4
cd/test/ba0960.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
recdesc\f25.dir
|
||||||
|
recdesc\f25.trr
|
||||||
|
|
||||||
|
Reverse charge parziale in prima nota
|
32
cd/test/ba0960a.ini
Normal file
32
cd/test/ba0960a.ini
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
[Main]
|
||||||
|
Demo=0
|
||||||
|
|
||||||
|
[ba0]
|
||||||
|
File(279) = recdesc\f25.dir|X
|
||||||
|
File(280) = recdesc\f25.trr|X
|
||||||
|
Patch = 0960
|
||||||
|
Versione = 21511200
|
||||||
|
|
||||||
|
[ba99]
|
||||||
|
Kill(0) = batbsce.txt|x
|
||||||
|
Kill(1) = wxmsw240.dll|x
|
||||||
|
Kill(2) = bastcms.rep|x
|
||||||
|
Kill(3) = bastcms.msk|x
|
||||||
|
Kill(4) = bastfsc.msk|x
|
||||||
|
Kill(5) = bastfsc.rep|x
|
||||||
|
Kill(6) = bastuue.msk|x
|
||||||
|
Kill(7) = bastuue.rep|x
|
||||||
|
|
||||||
|
[ba]
|
||||||
|
Data = 04-05-2020
|
||||||
|
Descrizione = Base
|
||||||
|
Dischi = 1
|
||||||
|
Moduli = sy
|
||||||
|
OEM =
|
||||||
|
Patch = 960
|
||||||
|
PostProcess = bainst -0 BA
|
||||||
|
PreProcess =
|
||||||
|
Prezzo(1) =
|
||||||
|
Prezzo(2) =
|
||||||
|
Versione = 21511200
|
||||||
|
|
BIN
cd/test/ba0960a1.zip
Normal file
BIN
cd/test/ba0960a1.zip
Normal file
Binary file not shown.
5
cd/test/cg0960.txt
Normal file
5
cd/test/cg0960.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
cg2.exe
|
||||||
|
cg2100c.msk
|
||||||
|
|
||||||
|
F1: aggiunta forzatura collegamento a fppro in salvataggio per date inferiori alla data ricezione e anche nel caso generale in cui non riconosce esattamente la fattura per i controlli sui totali
|
||||||
|
Reverse charge parziale in prima nota
|
99
cd/test/cg0960a.ini
Normal file
99
cd/test/cg0960a.ini
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
[Main]
|
||||||
|
Demo=0
|
||||||
|
|
||||||
|
[cg2]
|
||||||
|
File(164) = cg2.exe|X
|
||||||
|
File(167) = cg2100c.msk|X
|
||||||
|
Patch = 960
|
||||||
|
Versione = 21511200
|
||||||
|
|
||||||
|
[cg99]
|
||||||
|
Kill(0) = bastpor.rep|x
|
||||||
|
Kill(1) = batbcam.msk|x
|
||||||
|
Kill(2) = batbscc.msk|x
|
||||||
|
Kill(3) = bastnot.msk|x
|
||||||
|
Kill(4) = cgtbcon.msk|x
|
||||||
|
Kill(5) = bastdpn.msk|x
|
||||||
|
Kill(6) = bastpor.msk|x
|
||||||
|
Kill(7) = bastarb.msk|x
|
||||||
|
Kill(8) = bastmsp.rep|x
|
||||||
|
Kill(9) = batbcfi.msk|x
|
||||||
|
Kill(10) = bastndo.rep|x
|
||||||
|
Kill(11) = batblia.msk|x
|
||||||
|
Kill(12) = batbdpn.msk|x
|
||||||
|
Kill(13) = bastcco.msk|x
|
||||||
|
Kill(14) = batbpor.msk|x
|
||||||
|
Kill(15) = batbins.msk|x
|
||||||
|
Kill(16) = batbleg.msk|x
|
||||||
|
Kill(17) = batbvet.msk|x
|
||||||
|
Kill(18) = batbcco.msk|x
|
||||||
|
Kill(19) = bastver.msk|x
|
||||||
|
Kill(20) = batbind.msk|x
|
||||||
|
Kill(21) = batbntb.msk|x
|
||||||
|
Kill(22) = bastivd.msk|x
|
||||||
|
Kill(23) = bastcam.msk|x
|
||||||
|
Kill(24) = bastzon.rep|x
|
||||||
|
Kill(25) = batbivd.msk|x
|
||||||
|
Kill(26) = batbtra.msk|x
|
||||||
|
Kill(27) = batbtit.msk|x
|
||||||
|
Kill(28) = bastscc.rep|x
|
||||||
|
Kill(29) = bastarb.rep|x
|
||||||
|
Kill(30) = bastesc.rep|x
|
||||||
|
Kill(31) = bastivd.rep|x
|
||||||
|
Kill(32) = batbndo.msk|x
|
||||||
|
Kill(33) = batbinl.msk|x
|
||||||
|
Kill(34) = batblia.msk|x
|
||||||
|
Kill(35) = bastvet.msk|x
|
||||||
|
Kill(36) = bastcfi.rep|x
|
||||||
|
Kill(37) = batbdel.msk|x
|
||||||
|
Kill(38) = cg2fppro.msk|x
|
||||||
|
Kill(39) = bastver.rep|x
|
||||||
|
Kill(40) = bastvet.rep|x
|
||||||
|
Kill(41) = bastntb.msk|x
|
||||||
|
Kill(42) = bastleg.msk|x
|
||||||
|
Kill(43) = batbzon.msk|x
|
||||||
|
Kill(44) = bastnot.rep|x
|
||||||
|
Kill(45) = batbnot.msk|x
|
||||||
|
Kill(46) = bastcam.rep|x
|
||||||
|
Kill(47) = batbver.msk|x
|
||||||
|
Kill(48) = batbarb.msk|x
|
||||||
|
Kill(49) = bastndo.msk|x
|
||||||
|
Kill(50) = batbcve.msk|x
|
||||||
|
Kill(51) = batbmsp.msk|x
|
||||||
|
Kill(52) = bastcve.msk|x
|
||||||
|
Kill(53) = bastpdb.msk|x
|
||||||
|
Kill(54) = bastreg.msk|x
|
||||||
|
Kill(55) = bastdpn.rep|x
|
||||||
|
Kill(56) = bastreg.rep|x
|
||||||
|
Kill(57) = batbesc.msk|x
|
||||||
|
Kill(58) = bastzon.msk|x
|
||||||
|
Kill(59) = batblbu.msk|x
|
||||||
|
Kill(60) = bastleg.rep|x
|
||||||
|
Kill(61) = batbreg.msk|x
|
||||||
|
Kill(62) = bastesc.msk|x
|
||||||
|
Kill(63) = bastntb.rep|x
|
||||||
|
Kill(64) = bastscc.msk|x
|
||||||
|
Kill(65) = batbpdb.msk|x
|
||||||
|
Kill(66) = bastpdb.rep|x
|
||||||
|
Kill(67) = bastcco.rep|x
|
||||||
|
Kill(68) = bastcve.rep|x
|
||||||
|
Kill(69) = bastcfi.msk|x
|
||||||
|
Kill(70) = bastmsp.msk|x
|
||||||
|
|
||||||
|
[cg]
|
||||||
|
Data = 04-05-2020
|
||||||
|
Descrizione = Contabilita' Generale
|
||||||
|
Dischi = 1
|
||||||
|
Edit_19 = cg0 -0
|
||||||
|
Edit_20 = cg0 -1
|
||||||
|
Edit_26 = cg0 -4
|
||||||
|
Edit_5 = cg0 -5
|
||||||
|
Moduli = ba
|
||||||
|
OEM =
|
||||||
|
Patch = 0960
|
||||||
|
PostProcess = bainst -0 CG
|
||||||
|
PreProcess =
|
||||||
|
Prezzo(1) =
|
||||||
|
Prezzo(2) =
|
||||||
|
Versione = 21511200
|
||||||
|
|
BIN
cd/test/cg0960a1.zip
Normal file
BIN
cd/test/cg0960a1.zip
Normal file
Binary file not shown.
@ -1489,8 +1489,7 @@ 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(
|
message_box(
|
||||||
TString("ATTENZIONE:") <<
|
"ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n"
|
||||||
" 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.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1577,8 +1576,12 @@ int TPrimanota_application::write(const TMask& m)
|
|||||||
|
|
||||||
switch (controlli_f1(m)) // Solo con F1
|
switch (controlli_f1(m)) // Solo con F1
|
||||||
{
|
{
|
||||||
case pro_dataric_err:
|
case pro_dataric_err:
|
||||||
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
|
{
|
||||||
|
const bool forza = noyes_box("Attenzione! La data operazione e' inferiore alla data di ricezione.\nContinuare comunque e forzare il collegamento al doc. elettronico?");
|
||||||
|
if (forza)
|
||||||
|
break;
|
||||||
|
}
|
||||||
case pro_numreg_err:
|
case pro_numreg_err:
|
||||||
return _isnowarning;
|
return _isnowarning;
|
||||||
default: case pro_noerr: break;
|
default: case pro_noerr: break;
|
||||||
@ -1709,7 +1712,11 @@ int TPrimanota_application::rewrite(const TMask& m)
|
|||||||
switch (controlli_f1(m)) // Solo con F1
|
switch (controlli_f1(m)) // Solo con F1
|
||||||
{
|
{
|
||||||
case pro_dataric_err:
|
case pro_dataric_err:
|
||||||
error_box("Attenzione non è possibile registrare una fattura\ncon data operazione minore della data di ricezione.");
|
{
|
||||||
|
const bool forza = noyes_box("Attenzione! La data operazione e' inferiore alla data di ricezione.\nContinuare comunque e forzare il collegamento al doc. elettronico?");
|
||||||
|
if (forza)
|
||||||
|
break;
|
||||||
|
}
|
||||||
case pro_numreg_err:
|
case pro_numreg_err:
|
||||||
return _isnowarning;
|
return _isnowarning;
|
||||||
default: case pro_noerr: break;
|
default: case pro_noerr: break;
|
||||||
@ -2452,6 +2459,7 @@ void TPrimanota_application::ini2mask(TConfig& ini, TMask& msk, bool query)
|
|||||||
msk.set(FS_RECALC, "");
|
msk.set(FS_RECALC, "");
|
||||||
set_scad_f1(msk);
|
set_scad_f1(msk);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != nullptr)
|
if (_f1_liq && msk.find_by_id(F_DIFFERITA) != nullptr)
|
||||||
{
|
{
|
||||||
@ -2636,63 +2644,62 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
|
|||||||
|
|
||||||
int TPrimanota_application::save_fppro()
|
int TPrimanota_application::save_fppro()
|
||||||
{
|
{
|
||||||
TMask& msk = curr_mask();
|
TMask& msk = curr_mask();
|
||||||
const KEY last = msk.last_key();
|
|
||||||
|
|
||||||
// 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;
|
||||||
|
|
||||||
// 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
|
||||||
// Guardo se quel documento corrisponde a un doc in FPPRO
|
// Guardo se quel documento corrisponde a un doc in FPPRO
|
||||||
// Lancio messaggio di avvertimento pulisco su db e proseguo col salvataggio del documento modificato
|
// Lancio messaggio di avvertimento pulisco su db e proseguo col salvataggio del documento modificato
|
||||||
if (_mode != MODE_INS)
|
if (_mode != MODE_INS)
|
||||||
{
|
{
|
||||||
if(_mode == MODE_MOD)
|
if(_mode == MODE_MOD)
|
||||||
{
|
{
|
||||||
TString query;
|
TString query;
|
||||||
query << "SELECT COUNT(*) AS COUNT FROM FPPRO00F WHERE PZ_NUMREGCONT = '" << msk.get(F_NUMREG) << "'";
|
query << "SELECT COUNT(*) AS COUNT FROM FPPRO00F WHERE PZ_NUMREGCONT = '" << msk.get(F_NUMREG) << "'";
|
||||||
fp_db().sq_set_exec(query);
|
fp_db().sq_set_exec(query);
|
||||||
if (fp_db().sq_get_int("COUNT") != 0)
|
if (fp_db().sq_get_int("COUNT") != 0)
|
||||||
{
|
{
|
||||||
message_box(TString("Attenzione!") << " E' stato modificato un movimento già collegato a un documento in ingresso.");
|
message_box("Attenzione! E' stato modificato un movimento gia' collegato a un documento in ingresso.");
|
||||||
clean_fppro(); // Pulisco db
|
clean_fppro(); // Pulisco db
|
||||||
save_dbmov(true); // Svuoto riferimento doc ingresso sul mov e proseguo col regolare salvataggio
|
save_dbmov(true); // Svuoto riferimento doc ingresso sul mov e proseguo col regolare salvataggio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else return pro_notsaved; // In altre modalita' esco senza fare nulla sul db
|
else return pro_notsaved; // In altre modalita' esco senza fare nulla sul db
|
||||||
}
|
}
|
||||||
|
|
||||||
// Controllo che sto registrando un documento d'acquisto
|
// Controllo che sto registrando un documento d'acquisto
|
||||||
if (!check_causale(msk.get(F_CODCAUS)))
|
if (!check_causale(msk.get(F_CODCAUS)))
|
||||||
return pro_notsaved;
|
return pro_notsaved;
|
||||||
|
|
||||||
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);
|
||||||
real tot_doc = msk.get_real(F_TOTALE);
|
real tot_doc = msk.get_real(F_TOTALE);
|
||||||
const real ritfis = msk.get_real(F_RITFIS);
|
const real ritfis = msk.get_real(F_RITFIS);
|
||||||
const real ritsoc = msk.get_real(F_RITSOC);
|
const real ritsoc = msk.get_real(F_RITSOC);
|
||||||
tot_doc = tot_doc + ritfis + ritsoc;
|
tot_doc = tot_doc + ritfis + ritsoc;
|
||||||
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();
|
||||||
const TString& keybodyfatt = fppro_keys.get();
|
const TString& keybodyfatt = fppro_keys.get();
|
||||||
|
|
||||||
// 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() << "\'";
|
where_str << " (PZ_DATA = \'" << data_documento.date2ansi() << "\'";
|
||||||
if (has_tot_doc(fppro_keys))
|
if (has_tot_doc(fppro_keys))
|
||||||
where_str << " AND PQ_IMPTOTDOC = \'" << tot_doc << "\'";
|
where_str << " AND PQ_IMPTOTDOC = \'" << tot_doc << "\'";
|
||||||
if(!numero_docext.empty())
|
if(!numero_docext.empty())
|
||||||
where_str << " AND PZ_NUMERO = \'" << numero_docext << "\'";
|
where_str << " AND PZ_NUMERO = \'" << numero_docext << "\'";
|
||||||
where_str << ") ";
|
where_str << ") ";
|
||||||
TString& query = TPro_msk::query_string();
|
TString& query = TPro_msk::query_string();
|
||||||
query << "WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "'";
|
query << "WHERE PZ_KEYPRGINVIO = '" << keyprginvio << "' AND PZ_KEYHEADERFATT = '" << keyheaderfatt << "' AND PZ_KEYBODYFATT = '" << keybodyfatt << "'";
|
||||||
query << " AND " << where_str;
|
query << " AND " << where_str;
|
||||||
|
|
||||||
fp_db().sq_set_exec(query);
|
fp_db().sq_set_exec(query);
|
||||||
int items = fp_db().sq_items();
|
int items = fp_db().sq_items();
|
||||||
if(items != 1 && has_tot_doc(fppro_keys)) // Controllo se e' sbagliato solo il segno dell'importo
|
if(items != 1 && has_tot_doc(fppro_keys)) // Controllo se e' sbagliato solo il segno dell'importo
|
||||||
{
|
{
|
||||||
@ -2705,34 +2712,38 @@ int TPrimanota_application::save_fppro()
|
|||||||
items = fp_db().sq_items();
|
items = fp_db().sq_items();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(has_f1_db(&msk) && items != 1)
|
if(has_f1_db(&msk) && items != 1)
|
||||||
{
|
{
|
||||||
warning_box(TString("Attenzione, ") << "al movimento non è stato abbinato nessun documento elettronico.\n" <<
|
const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n"
|
||||||
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n" <<
|
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n"
|
||||||
"all'inserimento dei dati riportati sulla fattura per la corretta identificazione del documento in entrata.\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"
|
"Se possibile utilizzare il 'Riporta documento' o la contabilizzazione dal monitor delle fatture passive per evitare errori.\n\n"
|
||||||
"In caso di documento escluso dalla fatturazione elettronica ignorate questo messaggio.");
|
"Forzare il collegamento al documento elettronico?\n"
|
||||||
save_dbmov(true);
|
"In caso di documento escluso dalla fatturazione elettronica rispondere 'No'.\n");
|
||||||
return pro_notsaved;
|
if (!forza)
|
||||||
}
|
{
|
||||||
|
save_dbmov(true);
|
||||||
|
return pro_notsaved;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const int numregcont = msk.get_int(F_NUMREG);
|
const int numregcont = msk.get_int(F_NUMREG);
|
||||||
const int clifor = msk.get_int(F_CODCLIFOR);
|
const int clifor = msk.get_int(F_CODCLIFOR);
|
||||||
|
|
||||||
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() << "\', " <<
|
"SET PZ_TIPOCF = 'F', PZ_CLIFOR = '" << clifor << "', PZ_DATACONT = '" << TDate(TODAY).date2ansi() << "', " <<
|
||||||
"PZ_NUMREGCONT = \'" << numregcont << "\', PZ_DATAREGCONT = \'" << data_operazione.date2ansi() << "\'\n" <<
|
"PZ_NUMREGCONT = '" << numregcont << "', PZ_DATAREGCONT = '" << data_operazione.date2ansi() << "'\n" <<
|
||||||
"WHERE PZ_KEYPRGINVIO = \'" << keyprginvio << "\' AND PZ_KEYHEADERFATT = \'" << keyheaderfatt << "\' AND PZ_KEYBODYFATT = \'" << keybodyfatt << "\';";
|
"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 e' stato possibile registrare la fattura nel database.");
|
||||||
save_dbmov(true);
|
save_dbmov(true);
|
||||||
}
|
}
|
||||||
return saved? pro_noerr : pro_notsaved;
|
return saved? pro_noerr : pro_notsaved;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TPrimanota_application::save_dbmov(bool clean) const
|
bool TPrimanota_application::save_dbmov(bool clean) const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user