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

This commit is contained in:
Simone Palacino 2020-07-14 09:52:31 +02:00
commit 6376fddbab
15 changed files with 335 additions and 134 deletions

3
cd/test/ba0978.txt Normal file
View File

@ -0,0 +1,3 @@
bacnv.exe
Migliorata la funzione di correzzione delle righe documento anche per chi ha il CONAI. E' sufficiente che ci siano anche le sottocategorie vecchie nella tabella.

31
cd/test/ba0978a.ini Normal file
View File

@ -0,0 +1,31 @@
[Main]
Demo=0
[ba0]
File(14) = bacnv.exe|X
Patch = 0978
Versione = 21511200
[ba99]
Kill(0) = wxmsw240.dll|x
Kill(1) = batbsce.txt|x
Kill(2) = bastfsc.rep|x
Kill(3) = bastfsc.msk|x
Kill(4) = bastcms.msk|x
Kill(5) = bastcms.rep|x
Kill(6) = bastuue.rep|x
Kill(7) = bastuue.msk|x
[ba]
Data = 11-07-2020
Descrizione = Base
Dischi = 1
Moduli = sy
OEM =
Patch = 978
PostProcess = bainst -0 BA
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ba0978a1.zip Normal file

Binary file not shown.

View File

@ -1,15 +1,9 @@
f9prospintegr.rep
fpmenu.men
f90.exe f90.exe
f90100a.msk
f90100d.msk
f90200a.msk
f90100b.msk
f90100c.msk
sql\f90\f90100.sql
f90300a.msk
sql\f90\f90102.sql
f90300b.msk
sql\f90\f90104.sql
Modificato pescaggio file documento cartaceo dalla spotlight se esiste. Modificato pescaggio file docuemnto cartaceo dalla spotlight se esiste.
Modificato guessing movimenti passivi per associazione automatica piu' "intelligente" con FPPRO.
Correzione controllo annessi obligatori.
Correzione controllo movimento collegato (per rev. charge).
Corretto messaggio di errore generazione prospetto integrativo.
Correzione esportazione numero documento per le vendite secondo la regola che viene utilizzata nell'invio fp dove viene fatto il leading di 0 se esiste prefisso/suffisso.
Correzione conferma estratti e segna sul movimento che e' estratto.

View File

@ -3,23 +3,11 @@ Demo=0
[f90] [f90]
File(0) = f90.exe|X File(0) = f90.exe|X
File(1) = f90100a.msk|X Patch = 976
File(2) = f90100b.msk|X
File(3) = f90100c.msk|X
File(4) = f90100d.msk|X
File(5) = f90200a.msk|X
File(6) = f90300a.msk|X
File(7) = f90300b.msk|X
File(8) = f9prospintegr.rep|X
File(9) = fpmenu.men|X
File(10) = sql\f90\f90100.sql|X
File(11) = sql\f90\f90102.sql|X
File(12) = sql\f90\f90104.sql|X
Patch = 0976
Versione = 21511200 Versione = 21511200
[f9] [f9]
Data = 08-07-2020 Data = 09-07-2020
Descrizione = Archiviazione Sostitutiva Descrizione = Archiviazione Sostitutiva
Dischi = 1 Dischi = 1
Moduli = fp,cg Moduli = fp,cg

Binary file not shown.

3
cd/test/tp0978.txt Normal file
View File

@ -0,0 +1,3 @@
tp0.exe
Sistemata la gestione delle rettifiche CONAI

21
cd/test/tp0978a.ini Normal file
View File

@ -0,0 +1,21 @@
[Main]
Demo=0
[tp0]
File(0) = tp0.exe|X
Patch = 978
Versione = 21511200
[tp]
Data = 30-06-2020
Descrizione = Trasferimento PACK
Dischi = 1
Moduli = ve
OEM =
Patch = 978
PostProcess =
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/tp0978a1.zip Normal file

Binary file not shown.

3
cd/test/ve0978.txt Normal file
View File

@ -0,0 +1,3 @@
ve0.exe
Se cancello tutte le righe merce o omaggio da un documento con CONAI la riga di addebito viene trasformata in una riga normale per gestire le rettifiche CONAI con copia documento

132
cd/test/ve0978a.ini Normal file
View File

@ -0,0 +1,132 @@
[Main]
Demo=0
[ve0]
Edit_163 = ve0 -6
Edit_4 = ve0 -6
Edit_5 = ve0 -6
File(20) = ve0.exe|X
Patch = 978
Versione = 21511200
[ve99]
Kill(0) = batbimb.msk|x
Kill(1) = batbacr.msk|x
Kill(2) = batbcau.msk|x
Kill(3) = bastgmc.rep|x
Kill(4) = batbtip.msk|x
Kill(5) = ve7.exe|x
Kill(6) = batbfrm.msk|x
Kill(7) = efstbnp.msk|x
Kill(8) = bastfrd.rep|x
Kill(9) = batbcra.msk|x
Kill(10) = batbums.msk|x
Kill(11) = ve7300a.msk|x
Kill(12) = batbnum.msk|x
Kill(13) = bastimb.rep|x
Kill(14) = basteld.msk|x
Kill(15) = bastrfa.msk|x
Kill(16) = batbprv.msk|x
Kill(17) = bastums.rep|x
Kill(18) = batbfid.msk|x
Kill(19) = ve7500a.msk|x
Kill(20) = efstbnp.rep|x
Kill(21) = batbprs.msk|x
Kill(22) = bastfrr.rep|x
Kill(23) = batbctr.msk|x
Kill(24) = basteld.rep|x
Kill(25) = batbstd.msk|x
Kill(26) = batbmre.msk|x
Kill(27) = ve7200a.msk|x
Kill(28) = batbfrr.msk|x
Kill(29) = batbubi.msk|x
Kill(30) = basttag.msk|x
Kill(31) = ve7600a.msk|x
Kill(32) = bastnum.rep|x
Kill(33) = batbgca.msk|x
Kill(34) = batbrfa.msk|x
Kill(35) = ve7100a.msk|x
Kill(36) = bastasf.rep|x
Kill(37) = ve7300a.frm|x
Kill(38) = bastrfa.rep|x
Kill(39) = bastbnp.msk|x
Kill(40) = bastgcg.msk|x
Kill(41) = bastgca.msk|x
Kill(42) = bastcra.msk|x
Kill(43) = batbpro.msk|x
Kill(44) = bastfrm.rep|x
Kill(45) = ve7400a.msk|x
Kill(46) = bastcaa.msk|x
Kill(47) = batbtag.msk|x
Kill(48) = basttag.rep|x
Kill(49) = bastums.msk|x
Kill(50) = bastimb.msk|x
Kill(51) = bastcau.rep|x
Kill(52) = batbcaa.msk|x
Kill(53) = bastfca.msk|x
Kill(54) = bastfrm.msk|x
Kill(55) = baststd.msk|x
Kill(56) = batbgmc.msk|x
Kill(57) = batbfrd.msk|x
Kill(58) = bastabe.msk|x
Kill(59) = batbgsa.msk|x
Kill(60) = batbspt.msk|x
Kill(61) = basttri.msk|x
Kill(62) = bastfrd.msk|x
Kill(63) = bastnum.msk|x
Kill(64) = basttip.rep|x
Kill(65) = bastprs.msk|x
Kill(66) = bastspp.msk|x
Kill(67) = ve7400conf.ini|x
Kill(68) = basttri.rep|x
Kill(69) = eftbbnp.msk|x
Kill(70) = bastrfc.rep|x
Kill(71) = bastrfc.msk|x
Kill(72) = batbfsa.msk|x
Kill(73) = batbspp.msk|x
Kill(74) = bastfca.rep|x
Kill(75) = ve7701a.ini|x
Kill(76) = bastctr.msk|x
Kill(77) = bastcau.msk|x
Kill(78) = bastabe.rep|x
Kill(79) = batbbnp.msk|x
Kill(80) = batbtri.msk|x
Kill(81) = ve7700a.msk|x
Kill(82) = bastctr.rep|x
Kill(83) = bastasf.msk|x
Kill(84) = baststd.rep|x
Kill(85) = bastcaa.rep|x
Kill(86) = batbgcg.msk|x
Kill(87) = ve7200a.frm|x
Kill(88) = bastubi.msk|x
Kill(89) = bastgca.rep|x
Kill(90) = batbabe.msk|x
Kill(91) = basttip.msk|x
Kill(92) = bastubi.rep|x
Kill(93) = ve7400a.ini|x
Kill(94) = batbasf.msk|x
Kill(95) = batbeld.msk|x
Kill(96) = bastgcg.rep|x
Kill(97) = bastprs.rep|x
Kill(98) = bastspp.rep|x
Kill(99) = batbcld.msk|x
Kill(100) = batbrfc.msk|x
Kill(101) = bastgmc.msk|x
Kill(102) = bastbnp.rep|x
Kill(103) = bastfrr.msk|x
Kill(104) = bastcra.rep|x
Kill(105) = batbfca.msk|x
[ve]
Data = 30-06-2020
Descrizione = Vendite
Dischi = 1
Moduli = ba,cg9,pr9,mg9,sv9,in9,ef9
OEM =
Patch = 978
PostProcess = bainst -0 VE
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ve0978a1.zip Normal file

Binary file not shown.

View File

@ -2453,6 +2453,7 @@ void TConversione_archivi::update_righe_doc()
TCursor frr(new TRelation("%FRR")); TCursor frr(new TRelation("%FRR"));
const int fritems = frr.items(); const int fritems = frr.items();
TString_array formule; TString_array formule;
TAssoc_array tipidoc;
for (frr = 0L; frr.pos() < fritems; ++frr) for (frr = 0L; frr.pos() < fritems; ++frr)
formule.add(frr.curr().get("CODTAB")); formule.add(frr.curr().get("CODTAB"));
@ -2461,7 +2462,15 @@ void TConversione_archivi::update_righe_doc()
const TString4 tipo = r.get(RDOC_TIPORIGA); const TString4 tipo = r.get(RDOC_TIPORIGA);
const TTipo_riga_documento & tiporiga = TRiga_documento::tipo(tipo); const TTipo_riga_documento & tiporiga = TRiga_documento::tipo(tipo);
bool changed = false; bool changed = false;
TToken_string key(r.get(RDOC_PROVV));
key.add(r.get_int(RDOC_ANNO));
key.add(r.get(RDOC_CODNUM));
key.add(r.get_int(RDOC_NDOC));
const TString tipodoc = cache().get(LF_DOC, key, DOC_TIPODOC);
const bool has_conai = cache().get("%TIP", tipodoc, "B6") == "X";
if (tiporiga.is_merce() || tiporiga.is_omaggio()) if (tiporiga.is_merce() || tiporiga.is_omaggio())
{ {
for (int j = 0; j < CONAI_CLASSES; j++) for (int j = 0; j < CONAI_CLASSES; j++)
@ -2472,9 +2481,11 @@ void TConversione_archivi::update_righe_doc()
r.zero(old_conai_peso[j]); r.zero(old_conai_peso[j]);
changed = true; changed = true;
} }
const TString & sottocat = r.get(conai_sottocat_name(j + 1));
if (sottocat.full() && cache().get("&VESCC", sottocat).empty()) const TString & sottocat = r.get(conai_sottocat_name(j + 1));
const TRectype & rec_sottocat = cache().get("&VESCC", sottocat);
if (!has_conai && sottocat.full() && rec_sottocat.empty())
r.zero(conai_sottocat_name(j + 1)); r.zero(conai_sottocat_name(j + 1));
if (r.get(conai_sottocat_name(j + 1)).blank() && if (r.get(conai_sottocat_name(j + 1)).blank() &&
r.get(conai_peso_name(j + 1)).full()) r.get(conai_peso_name(j + 1)).full())

View File

@ -99,10 +99,10 @@ protected:
bool scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, bool scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp, TLog_report &log) const; const TString& conai_codsp, TLog_report &log) const;
void scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, void scrivi_csv_doc_generata(const TDocumento& doc, const int n_riga_generata,
TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie,
const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const; const TString & sottoclass, const TString& conai_codsp, TLog_report &log) const;
void scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, void scrivi_csv_doc_not_generata(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp) const; const TString& conai_codsp) const;
@ -147,7 +147,7 @@ real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class
} }
//riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI //riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI
void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, void TDichiarazione_CONAI::scrivi_csv_doc_generata(const TDocumento& doc, const int n_riga_generata,
TDichiarazione_CONAI_csv_recordset& csv, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp, TLog_report &log) const const TString& conai_codsp, TLog_report &log) const
@ -316,7 +316,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do
//riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI; trattasi di documenti.. //riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI; trattasi di documenti..
//..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici //..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici
void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, void TDichiarazione_CONAI::scrivi_csv_doc_not_generata(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv,
const TCONAI_class conai_specie, const TString & sottoclass, const TCONAI_class conai_specie, const TString & sottoclass,
const TString& conai_codsp) const const TString& conai_codsp) const
{ {
@ -331,109 +331,129 @@ void TDichiarazione_CONAI::scrivi_csv_doc_rettifiche(const TDocumento& doc, TDic
TString80 clifo_paiv; TString80 clifo_paiv;
//cerca la percentuale di esenzione conai sul cliente (controllo //cerca la percentuale di esenzione conai sul cliente (controllo
const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv, doc); const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv, doc);
bool ok = cfven_perc_conai >= CENTO;
const int nrighe = doc.rows(); if (!ok)
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
FOR_EACH_PHYSICAL_RDOC(doc, i, rdoc)
{ {
for (int j = 1; j <= FR_CMAX; j++) bool has_rettifica = false;
FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc)
{ {
TString4 sottocat = rdoc->get(conai_sottocat_name(j)); //c'è la riga generata con codart di tipo conai (sia automatica che manuale)?
if (rdoc->get(RDOC_CODART) == conai_codsp && !rdoc->is_generata())
if (sottocat == sottoclass)
{ {
real peso; has_rettifica = true;
real prezzo; break;
const TRectype& spp = cache().get("SPP", conai_codsp); }
}
if (rdoc->is_merce()) ok |= has_rettifica;
{ }
prezzo = spp.get_real("R10");
peso = rdoc->get_real(conai_peso_name(j)); if (ok)
} {
else const int nrighe = doc.rows();
if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp)
//ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati
FOR_EACH_PHYSICAL_RDOC(doc, i, rdoc)
{
for (int j = 1; j <= FR_CMAX; j++)
{
TString4 sottocat = rdoc->get(conai_sottocat_name(j));
if (sottocat == sottoclass)
{
real peso;
real prezzo;
const TRectype& spp = cache().get("SPP", conai_codsp);
if (rdoc->is_merce())
{ {
peso = rdoc->get_real(RDOC_QTA); prezzo = spp.get_real("R10");
prezzo = rdoc->get_real(RDOC_PREZZO); //va preso dalla riga stessa
peso = rdoc->get_real(conai_peso_name(j));
} }
if (sottocat == sottoclass && (peso != ZERO)) else
{ if (rdoc->is_spese() && !rdoc->is_generata() && rdoc->get(RDOC_CODART) == conai_codsp)
//puo' capitare che la sottocategoria sia stata troncata alla categoria {
if (sottocat.len() == 2) peso = rdoc->get_real(RDOC_QTA);
sottocat << "99"; prezzo = rdoc->get_real(RDOC_PREZZO); //va preso dalla riga stessa
}
if (sottocat == sottoclass && (peso != ZERO))
{
//puo' capitare che la sottocategoria sia stata troncata alla categoria
if (sottocat.len() == 2)
sottocat << "99";
//creazione di un nuovo record da esportare //creazione di un nuovo record da esportare
csv.new_rec(""); csv.new_rec("");
//riempie i campi del record del csv //riempie i campi del record del csv
//codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A)
//parte chiave della riga //parte chiave della riga
csv.set(0, rdoc->get(RDOC_CODNUM)); csv.set(0, rdoc->get(RDOC_CODNUM));
csv.set(1, TVariant(rdoc->get(RDOC_ANNO))); csv.set(1, TVariant(rdoc->get(RDOC_ANNO)));
csv.set(2, TVariant(rdoc->get(RDOC_NDOC))); csv.set(2, TVariant(rdoc->get(RDOC_NDOC)));
csv.set(3, TVariant(datadoc)); csv.set(3, TVariant(datadoc));
csv.set(4, TVariant(clifo.codice())); csv.set(4, TVariant(clifo.codice()));
csv.set(5, TVariant(clifo_paiv)); csv.set(5, TVariant(clifo_paiv));
csv.set(6, TVariant(rdoc->get(RDOC_CODART))); csv.set(6, TVariant(rdoc->get(RDOC_CODART)));
csv.set(7, TVariant(rdoc->get(RDOC_NRIGA))); csv.set(7, TVariant(rdoc->get(RDOC_NRIGA)));
//codici conai //codici conai
csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...) csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...)
//prezzo //prezzo
csv.set(10, TVariant(prezzo)); csv.set(10, TVariant(prezzo));
//um conai //um conai
const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta)); csv.set(11, TVariant(umqta));
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = rdoc->get_real(RDOC_QTA); real qta_tot_conai = rdoc->get_real(RDOC_QTA);
const real qta_unitaria_conai = rdoc->get_real(conai_peso_name(j)); const real qta_unitaria_conai = rdoc->get_real(conai_peso_name(j));
if (qta_unitaria_conai != ZERO) if (qta_unitaria_conai != ZERO)
qta_tot_conai *= qta_unitaria_conai; qta_tot_conai *= qta_unitaria_conai;
if (is_nac) if (is_nac)
qta_tot_conai = -qta_tot_conai; qta_tot_conai = -qta_tot_conai;
csv.set(15, TVariant(qta_tot_conai)); csv.set(15, TVariant(qta_tot_conai));
//percentuale di esenzione conai al 100%? //percentuale di esenzione conai al 100%?
const real rdoc_perc_conai = rdoc->get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2 const real rdoc_perc_conai = rdoc->get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato..
//..in precedenza non deve fare nulla!) //..in precedenza non deve fare nulla!)
real qta_assoggettata_conai = qta_tot_conai; real qta_assoggettata_conai = qta_tot_conai;
//segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai.. //segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai..
//..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non.. //..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non..
//..è personalizzato //..è personalizzato
if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100% if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100%
qta_assoggettata_conai = ZERO; qta_assoggettata_conai = ZERO;
csv.set(13, TVariant(qta_assoggettata_conai)); csv.set(13, TVariant(qta_assoggettata_conai));
//quantita' esente conai (A) sul report //quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO! const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO!
csv.set(12, TVariant(qta_esente_conai)); csv.set(12, TVariant(qta_esente_conai));
//valore totale contributo (BxC) sul report //valore totale contributo (BxC) sul report
const real totale_contrib_conai = qta_assoggettata_conai * prezzo; const real totale_contrib_conai = qta_assoggettata_conai * prezzo;
csv.set(14, TVariant(totale_contrib_conai)); csv.set(14, TVariant(totale_contrib_conai));
//percentuale di esenzione conai //percentuale di esenzione conai
csv.set(16, TVariant(rdoc_perc_conai)); csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in cfven //percentuale di esenzione conai in cfven
csv.set(17, TVariant(cfven_perc_conai)); csv.set(17, TVariant(cfven_perc_conai));
TString descr = cache().get("&VESCC", sottocat, "S2"); TString descr = cache().get("&VESCC", sottocat, "S2");
if (descr.blank()) if (descr.blank())
descr = cache().get("&VESCC", sottocat, "S0"); descr = cache().get("&VESCC", sottocat, "S0");
csv.set(18, descr); csv.set(18, descr);
}
} }
} }
} }
@ -454,9 +474,9 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
#ifdef DBG #ifdef DBG
//check di debug //check di debug
if (numdoc == 1451) if (numdoc == 935L)
const int cazzone = 1; const int cazzone = 1;
if (numdoc == 5L) if ((numdoc == 308L) || (numdoc == 343L))
int i = 1; int i = 1;
#endif #endif
//documento della prima riga e quindi anche di tutte le altre righe conai //documento della prima riga e quindi anche di tutte le altre righe conai
@ -517,23 +537,9 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
} }
} }
if (n_riga_generata > 0) if (n_riga_generata > 0)
scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log); scrivi_csv_doc_generata(doc, n_riga_generata, csv, conai_specie, sottoclass, conai_codsp, log);
else else
{ scrivi_csv_doc_not_generata(doc, csv, conai_specie, sottoclass, conai_codsp);
bool has_rettifica = false;
FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc)
{
//c'è la riga generata con codart di tipo conai (sia automatica che manuale)?
if (rdoc->get(RDOC_CODART) == conai_codsp && !rdoc->is_generata())
{
has_rettifica = true;
break;
}
}
if (has_rettifica)
scrivi_csv_doc_rettifiche(doc, csv, conai_specie, sottoclass, conai_codsp);
}
return true; return true;
} }

View File

@ -3073,15 +3073,18 @@ void TDocumento::update_conai()
const TDate dataees = cfven.get(CFV_DATAECONAI); const TDate dataees = cfven.get(CFV_DATAECONAI);
const bool esponi_esenti = ini_get_bool(CONFIG_DITTA, "ve", "ESPONIESENTI"); const bool esponi_esenti = ini_get_bool(CONFIG_DITTA, "ve", "ESPONIESENTI");
real perc_esenz; real perc_esenz;
const int rows = physical_rows();
bool to_delete = false;
// Come prima cosa mi calcolo le qta conai // Come prima cosa mi calcolo le qta conai
update_conai_qta(); update_conai_qta();
for (int i = physical_rows(); i > 0; i--) for (int i = 1; i <= rows; i++)
{ {
TRiga_documento& r = row(i); TRiga_documento& r = row(i);
const bool tipo_conai = r.get_char("GENTIPO") == 'C'; const bool tipo_conai = r.get_char("GENTIPO") == 'C';
to_delete |= (!tipo_conai) && (r.is_merce() || r.is_omaggio());
// Elimina righe generate // Elimina righe generate
if (tipo_conai) if (tipo_conai)
{ {
@ -3112,9 +3115,15 @@ void TDocumento::update_conai()
destroy_row(i, true); destroy_row(i, true);
} }
else else
destroy_row(i, true); if (to_delete)
destroy_row(i, true);
conai_aggiornati.add(sottocat, sottocat); conai_aggiornati.add(sottocat, sottocat);
} }
if (!to_delete)
{
r.zero(RDOC_GENERATA);
r.zero(RDOC_GENTIPO);
}
} }
} }