Patch level : 12.00 140

Files correlati     : ve010.exe fp010.exe
Commento                :
Invio ritente e casse previdenziali
This commit is contained in:
Alessandro Bonazzi 2026-03-24 17:17:21 +01:00
parent f5c520de78
commit f9f2a94979
3 changed files with 168 additions and 180 deletions

View File

@ -181,7 +181,6 @@ public:
bool is_ritenuta() const { return tipo_ritenuta() != '\0'; }
bool is_ritenuta_fiscale() const { return tipo_ritenuta() == RITENUTA_FISCALE; }
bool is_ritenuta_sociale() const { return tipo_ritenuta() == RITENUTA_SOCIALE; }
const TString& codice_tipo_ritenuta() const { return get("S13").left(4); }
const TString& tipo_riga() const { return get("S8"); }
char genere() const;
const TString& conto_analitico_vendite() const { return ((cod() == "ATR") || (cod() == "RSS")) ? EMPTY_STRING : get_tmp_string() = get("S1").sleft(20); }
@ -194,8 +193,9 @@ public:
const int codtrib() const { return get_int("S10"); }
const TRectype& rec_caus_770() const;
const int caus_770() const { return get_int("I6"); }
const int quadro_770() const { return get_int("S12"); }
const int quadroLA_770() const { return get_int("S14"); }
const TString& quadro_770() const { return get("S12"); }
const TString& quadroLA_770() const { return get("S14"); }
const TString& codice_tipo_ritenuta() const { return get("S13").left(4); }
const TString& codice_cassa_previdenziale() const { return get("S13").left(4); }
bool sogg_a_rit() const { return get_bool("B0"); }
bool spe_cal_rit() const { return get_bool("B1"); }
@ -1147,7 +1147,7 @@ public:
real spese(const TString & tipo_spesa) const;
real prestazioni() const;
real ritenute(const char tipo = '\0', bool lordo = false, int ndec = AUTO_DECIMALS) const;
int find_riga_ritenute(const TSpesa_prest * sp, const char tipo = '\0', int from_row = 1);
int find_riga_ritenute(const char tipo = '\0', int from_row = 1);
real provvigione(bool first = true, int ndec = AUTO_DECIMALS) const;
real valore(bool totale, bool lordo = false, int ndec = AUTO_DECIMALS) const;

View File

@ -846,17 +846,17 @@ void TDocumento::copy_data(TRectype& dst, const TRectype& src)
// Ripristina tutti i campi chiave
set_key(dst, provv, anno, codnum, numdoc);
dst.init_memo(RECORD_NON_FISICO);
if (is_riga)
{
dst.put(RDOC_NRIGA, nriga);
dst.put(RDOC_IDRIGA, idriga);
dst.zero(RDOC_MOVMAG);
const TString& memo = src.get(RDOC_DESCEST);
dst.put(RDOC_DESCEST, memo);
if (is_riga)
{
dst.put(RDOC_NRIGA, nriga);
dst.put(RDOC_IDRIGA, idriga);
dst.zero(RDOC_MOVMAG);
const TString& memo = src.get(RDOC_DESCEST);
dst.put(RDOC_DESCEST, memo);
const TString& g1 = src.get(RDOC_RG1);
const TString& g1 = src.get(RDOC_RG1);
dst.put(RDOC_RG1, g1);
dst.put(RDOC_RG1, g1);
((TRiga_documento &) dst).load_memo();
// ((TRiga_documento &)dst).reset_fields((TAuto_variable_rectype &)dst, false);
((TRiga_documento &)dst).set_fields((TAuto_variable_rectype &)src);
@ -1659,7 +1659,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
const TString80 codcms(get(DOC_CODCMS));
const TString80 fascms(get(DOC_FASCMS));
const TString80 codcos(get(DOC_CODCOSTO));
/* if (get(DOC_TIPODOC).full() && tipo().causale().full())
{
const TCausale & caus = cached_causale(tipo().causale());
@ -1708,7 +1708,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
}
if (r.is_evadibile() && datacons.ok()) // on 27-9-2013 was if (r.is_evadibile() && is_ordine())
{
docevaso &= r.is_evasa();
docevaso &= r.is_evasa();
const TDate dcons = r.get_date(RDOC_DATACONS);
if (!dcons.ok())
r.put(RDOC_DATACONS, datacons);
@ -2278,45 +2278,45 @@ bool TDocumento::raggruppabile(const TDocumento& doc, TToken_string& campi) cons
void TDocumento::set_fields(TAuto_variable_rectype & rec)
{
if (tipo_valido())
if (tipo_valido())
{
TTipo_documento& tipo_doc = (TTipo_documento&)tipo(); // first_formula() is NOT const
const TString& tot_doc = tipo_doc.totale_doc();
TTipo_documento& tipo_doc = (TTipo_documento&)tipo(); // first_formula() is NOT const
const TString& tot_doc = tipo_doc.totale_doc();
for (const TFormula_documento* f = tipo_doc.first_formula(); f; f = tipo_doc.succ_formula())
for (const TFormula_documento* f = tipo_doc.first_formula(); f; f = tipo_doc.succ_formula())
{
TExpr_documento* exp = f->expr();
if (exp != nullptr) // Puo' succedere che sia NULL con dati incoerenti
{
if (tot_doc == f->name())
if (exp != nullptr) // Puo' succedere che sia NULL con dati incoerenti
{
if (tot_doc == f->name())
{
TString16 tot_doc_netto(tot_doc);
TString16 tot_doc_netto(tot_doc);
tot_doc_netto.insert("_");
const TFixed_string netto_def(exp->string());
TExpr_documento netto_exp(netto_def, _numexpr, this);
TExpr_documento netto_exp(netto_def, _numexpr, this);
add_field(new TDocumento_variable_field(tot_doc_netto, netto_exp));
add_field(new TDocumento_variable_field(tot_doc_netto, netto_exp));
if (netto_def == "IMPONIBILI()+IMPOSTE()")
{
TExpr_documento tot_exp("IMPONIBILI(1)+IMPOSTE(1)", _numexpr, this);
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
}
else
{
if (netto_def == "IMPONIBILI()+IMPOSTE()")
{
TExpr_documento tot_exp("IMPONIBILI(1)+IMPOSTE(1)", _numexpr, this);
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
}
else
{
TExpr_documento tot_exp(format("%s + _BOLLI(%s)", (const char *) tot_doc_netto,
(const char*)tot_doc_netto), _numexpr, this);
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
}
}
else
{
(const char*)tot_doc_netto), _numexpr, this);
add_field(new TDocumento_variable_field(tot_doc, tot_exp));
}
}
else
{
exp->set_doc(this);
add_field(new TDocumento_variable_field(f->name(), *exp));
}
}
}
add_field(new TDocumento_variable_field(f->name(), *exp));
}
}
}
for (TVariable_field* src_field = rec.first_variable_field();
src_field != nullptr; src_field = rec.succ_variable_field())
@ -2325,7 +2325,7 @@ void TDocumento::set_fields(TAuto_variable_rectype & rec)
if (src_field->expression() == nullptr)
put(fieldname, rec.get(fieldname));
}
}
}
}
real TDocumento::imponibile(bool spese, int ndec) const
@ -2918,23 +2918,23 @@ real TDocumento::ritenute(const char tipo, bool lordo, int ndec) const
return val;
}
int TDocumento::find_riga_ritenute(const TSpesa_prest * sp, const char tipo, int from_row)
int TDocumento::find_riga_ritenute(const char tipo, int from_row)
{
sp = nullptr;
const int nrows = rows();
int r = from_row;
bool found = false;
for (; r <= nrows; r++)
{
TRiga_documento & riga = row(r);
if (riga.is_spese() && riga.spesa().tipo() == tipo)
if (riga.is_spese() && riga.spesa().tipo_ritenuta() == tipo)
{
sp = (const TSpesa_prest *)& riga.spesa();
found = true;
break;
}
}
return sp == nullptr ? -1 : r ;
return found ? r : -1;
}
TPagamento& TDocumento::pagamento()
@ -3335,10 +3335,10 @@ void TDocumento::update_raee()
void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TSheet_field* sh, bool force)
{
const bool updated = get_bool(DOC_SPESEUPD);
const bool updated = get_bool(DOC_SPESEUPD);
if (!force && updated)
return;
if (!force && updated)
return;
const bool interactive = sh != NULL;
@ -3376,70 +3376,70 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old,
if (sp.read(s) != NOERR)
warning_box("Codice spesa '%s' assente", (const char*)s);
else
else
{
const TString4 tipo(sp.tipo_riga());
TRiga_documento& riga = new_row(tipo);
riga.put(RDOC_CODART, s);
riga.generata();
riga.put(RDOC_DESCR, sp.descrizione());
if (cod_iva_cli.blank())
riga.put(RDOC_CODIVA, sp.cod_iva());
else
riga.put(RDOC_CODIVA, cod_iva_cli);
switch (sp.tipo())
{
case 'Q':
{
riga.generata();
riga.put(RDOC_DESCR, sp.descrizione());
if (cod_iva_cli.blank())
riga.put(RDOC_CODIVA, sp.cod_iva());
else
riga.put(RDOC_CODIVA, cod_iva_cli);
switch (sp.tipo())
{
case 'Q':
{
real qta = sp.qta();
if (qta == ZERO)
qta = UNO;
riga.put("QTA", qta);
}
// Continua perche' e' quantita' e valore
case 'V':
{
const real cambio = get_real(DOC_CAMBIO);
const TString4 valuta = get(DOC_CODVAL);
real prezzo = sp.prezzo();
}
// Continua perche' e' quantita' e valore
case 'V':
{
const real cambio = get_real(DOC_CAMBIO);
const TString4 valuta = get(DOC_CODVAL);
real prezzo = sp.prezzo();
sppr_calc(sp, valuta, cambio, prezzo);
sppr_calc(sp, valuta, cambio, prezzo);
if (this->tipo().calcolo_lordo())
{
prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS);
riga.put(RDOC_PREZZOL, prezzo);
}
riga.put(RDOC_PREZZO, prezzo);
riga.put(RDOC_UMQTA, sp.um());
{
prezzo = riga.iva().lordo(prezzo, ALL_DECIMALS);
riga.put(RDOC_PREZZOL, prezzo);
}
riga.put(RDOC_PREZZO, prezzo);
riga.put(RDOC_UMQTA, sp.um());
}
break;
case 'P':
default:
riga.put(RDOC_QTA, sp.perc());
break;
case 'P':
default:
riga.put(RDOC_QTA, sp.perc());
break;
}
}
if (cod_iva_cli.empty())
riga.put(RDOC_CODIVA, sp.cod_iva());
else
riga.put(RDOC_CODIVA, cod_iva_cli);
riga.put(RDOC_CODCOSTO, sp.cdc());
riga.put(RDOC_CODCMS, sp.cms());
riga.put(RDOC_FASCMS, sp.fase());
riga.cms2tipodet();
riga.put(RDOC_CODCOSTO, sp.cdc());
riga.put(RDOC_CODCMS, sp.cms());
riga.put(RDOC_FASCMS, sp.fase());
riga.cms2tipodet();
if (interactive)
{
const int nrow = sh->insert(-1, FALSE);
riga.autoload(*sh);
if (interactive)
{
const int nrow = sh->insert(-1, FALSE);
riga.autoload(*sh);
sh->check_row(nrow);
}
}
}
}
}
put(DOC_SPESEUPD, true);
put(DOC_SPESEUPD, true);
}
void TDocumento::update_conai_qta()

View File

@ -619,21 +619,20 @@ bool TDocumento::add_dati_generali(TXmlItem & dati_generali)
dati_generali_doc.AddEnclosedText("Numero", complete_numdoc());
const real fiscali = ritenute('F');
const TSpesa_prest * fiscale = nullptr;
for (int r = find_riga_ritenute(fiscale, 'F'); r > 0; r = find_riga_ritenute(fiscale, 'F', r + 1))
for (int r = find_riga_ritenute('F'); r > 0; r = find_riga_ritenute('F', r + 1))
{
if (fiscali != ZERO && fiscale != nullptr) // ritenuta
const TSpesa_prest & fiscale = row(r).spesa();
if (fiscali != ZERO) // ritenuta
{
TXmlItem & ritenuta = dati_generali_doc.AddChild("DatiRitenuta");
TString tipo;
const TRiga_documento & rdoc = row(r);
tipo << fiscale->tipo_ritenuta();
ritenuta.AddEnclosedText("TipoRitenuta", tipo);
ritenuta.AddEnclosedTextFull("TipoRitenuta", fiscale.codice_tipo_ritenuta());
ritenuta.AddEnclosedValue("ImportoRitenuta", rdoc.ritenuta());
ritenuta.AddEnclosedAliquota("AliquotaRitenuta", fiscale->perc());
ritenuta.AddEnclosedInt("CausalePagamento", fiscale->quadroLA_770());
ritenuta.AddEnclosedAliquota("AliquotaRitenuta", fiscale.perc());
ritenuta.AddEnclosedTextFull("CausalePagamento", fiscale.quadroLA_770());
}
}
if (bolli_esenti_dovuti()) // <DatiBollo>
@ -644,35 +643,30 @@ bool TDocumento::add_dati_generali(TXmlItem & dati_generali)
bollo.AddEnclosedText("BolloVirtuale", "SI");
bollo.AddEnclosedValue("ImportoBollo", bolli_es);
}
const TSpesa_prest * previdenziale = nullptr;
for (int r = find_riga_ritenute(previdenziale, 'S'); r > 0; r = find_riga_ritenute(previdenziale, 'S',r +1))
for (int r = find_riga_ritenute('S'); r > 0; r = find_riga_ritenute('S',r +1))
{
if (previdenziale != nullptr) //cassa previdenziale
{
const real imponibile = prestazioni();//calc_ritenuta(rdoc.doc());
const real importo_cassa = imponibile * previdenziale->perc() / CENTO;
const TSpesa_prest & previdenziale = row(r).spesa();
const real imponibile = prestazioni();//calc_ritenuta(rdoc.doc());
const real importo_cassa = imponibile * previdenziale.perc() / CENTO;
// Inserisco il tutto nei dati riepilogo
TXmlItem & cassa = dati_generali_doc.AddChild("DatiCassaPrevidenziale");
TXmlItem & cassa = dati_generali_doc.AddChild("DatiCassaPrevidenziale");
cassa.AddEnclosedText("TipoCassa", previdenziale->codice_cassa_previdenziale());
cassa.AddEnclosedReal("AlCassa", previdenziale->perc());
cassa.AddEnclosedValue("ImportoContributoCassa", importo_cassa);
cassa.AddEnclosedValue("ImponibileCassa", imponibile); // qui
cassa.AddEnclosedText("TipoCassa", previdenziale.codice_cassa_previdenziale());
cassa.AddEnclosedReal("AlCassa", previdenziale.perc());
cassa.AddEnclosedValue("ImportoContributoCassa", importo_cassa);
cassa.AddEnclosedValue("ImponibileCassa", imponibile); // qui
const TCodiceIVA & i = cached_codIVA(previdenziale->cod_iva());
const TCodiceIVA & i = cached_codIVA(previdenziale.cod_iva());
cassa.AddEnclosedAliquota("AliquotaIVA", i.percentuale());
if (previdenziale->sogg_a_rit())
cassa.AddEnclosedText("Ritenuta", "SI");
cassa.AddEnclosedText("Natura", i.natura());
cassa.AddEnclosedAliquota("AliquotaIVA", i.percentuale());
if (previdenziale.sogg_a_rit())
cassa.AddEnclosedText("Ritenuta", "SI");
cassa.AddEnclosedText("Natura", i.natura());
TString rifamm = previdenziale->descrizione().sleft(30);
TString rifamm = previdenziale.descrizione().sleft(30);
cassa.AddEnclosedTextFull("RiferimentoAmministrazione", rifamm.trim());
}
cassa.AddEnclosedTextFull("RiferimentoAmministrazione", rifamm.trim());
}
/*if (false) //sconto qui Lo sconto in testata stato disabilitato in quanto su Campo influenza solo le righe merci mentre dovrebbe modificare tutte le righe
{
@ -1194,20 +1188,20 @@ const TString& TDocumento::descrizione(const TRiga_documento& rdoc)
{
if (rdoc.get_bool(RDOC_DESCLUNGA))
{
TString& tmp = get_tmp_string();
TString& tmp = get_tmp_string();
tmp << rdoc.get(RDOC_DESCR) << rdoc.get(RDOC_DESCEST);
tmp.replace('\n', ' ');
tmp.strip_double_spaces();
tmp.trim();
if (tmp.len() > 1000)
{
TString err;
tmp.replace('\n', ' ');
tmp.strip_double_spaces();
tmp.trim();
if (tmp.len() > 1000)
{
TString err;
err << "Il documento " << rdoc.doc().anno() << " " << rdoc.doc().codice_numerazione().codice() << " " << rdoc.doc().numero() << " ha la riga numero " << rdoc.numero() << " pi lunga di quanto supportato dal formato dell'agenzia delle entrate, verr troncata a 1000 caratteri";
get_xml_log()->log(1, err);
}
get_xml_log()->log(1, err);
}
return tmp.left(1000);
}
return rdoc.get(RDOC_DESCR);
@ -2064,8 +2058,8 @@ bool TDocumento::get_bank(TTipo_pag tipo, TString& iban, TString& abi, TString&
if (tipo == _bonfico)
return get_bank_presentazione(iban, abi, cab, istituto);
else
if (tipo == _ric_ban || tipo == _rid)
return get_bank_appoggio(iban, abi, cab, istituto);
if (tipo == _ric_ban || tipo == _rid)
return get_bank_appoggio(iban, abi, cab, istituto);
return false;
}
@ -2091,13 +2085,13 @@ bool TDocumento::get_bank_presentazione(TString& iban, TString& abi, TString& ca
key.add(codcf());
key.add("N");
key.add(1);
const TRectype& cfban = cache().get(LF_CFBAN, key);
const TRectype& cfban = cache().get(LF_CFBAN, key);
if (!cfban.empty())
{
abi = cfban.get(CFBAN_ABI);
cab = cfban.get(CFBAN_CAB);
found = abi.full() && cab.full();
iban = cfban.get(CFBAN_IBAN);
iban = cfban.get(CFBAN_IBAN);
if (found && iban.blank())
get_bnp_iban(abi, cab, -1, iban);
}
@ -2130,13 +2124,13 @@ bool TDocumento::get_bank_appoggio(TString& iban, TString& abi, TString& cab, TS
key.add(codcf());
key.add("V");
key.add(1);
const TRectype& cfban = cache().get(LF_CFBAN, key);
const TRectype& cfban = cache().get(LF_CFBAN, key);
if (!cfban.empty())
{
const TString& abi_cf = cfban.get(CFBAN_ABI);
const TString& cab_cf = cfban.get(CFBAN_CAB);
const bool found_cf = abi_cf.full() && cab_cf.full();
iban = cfban.get(CFBAN_IBAN);
iban = cfban.get(CFBAN_IBAN);
if (found_cf && iban.blank())
get_bnp_iban(abi_cf, cab_cf, -1, iban);
}
@ -2253,33 +2247,33 @@ bool TDocumento::add_allegati(TXmlItem & body)
if (get_fp_bool_var(FP_ALLEG_FAT))
{
if (!tipo().main_print_profile(rep, 2))
get_xml_log()->log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!");
else
{
//ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE}
// Costruisco la chiamata
TString commandline = "ve011 -2 ";
commandline << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione
TExternal_app interattivo(commandline);
if (interattivo.run() != NOERR)
{
TString msgerr = "Fallita generazione PDF documento ";
msgerr << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC);
error_box(msgerr);
}
if (!tipo().main_print_profile(rep, 2))
get_xml_log()->log(1, "Impossibile generare la fattura, non disponibile un profilo di stampa per questo tipo documento!");
else
{
TFilename pdf; pdf.tempdir();
pdf << SLASH << get(DOC_ANNO) << '_' << get(DOC_CODNUM) << '_' << get(DOC_NDOC) << ".pdf";
if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?"))
return false;
add_allegato(body, pdf, "Fattura di cortesia");
}
}
//ve1 -2 {CODNUM} {ANNO} {PROVV} {NDOC}(-{ANDOC}) {TIPO_ELABORAZIONE} {TIPO_STAMPA} {NUM_COPIE} {ARCHIVIAZIONE}
// Costruisco la chiamata
TString commandline = "ve011 -2 ";
commandline << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC) << " X P 1 D"; // X: stampa su disco, P: provvisorio, 1: 1 copia, D: disabilita archiviazione
TExternal_app interattivo(commandline);
if (interattivo.run() != NOERR)
{
TString msgerr = "Fallita generazione PDF documento ";
msgerr << get(DOC_CODNUM) << ' ' << get(DOC_ANNO) << ' ' << get(DOC_PROVV) << ' ' << get(DOC_NDOC);
error_box(msgerr);
}
else
{
TFilename pdf; pdf.tempdir();
pdf << SLASH << get(DOC_ANNO) << '_' << get(DOC_CODNUM) << '_' << get(DOC_NDOC) << ".pdf";
if (!pdf.exist() && !yesno_box("Attenzione! Non stato possibile creare il pdf, continuare?"))
return false;
add_allegato(body, pdf, "Fattura di cortesia");
}
}
}
TToken_string allegati(get(DOC_CARTACEI), '\n');
@ -2474,7 +2468,7 @@ bool TDocumento::generate_xml(TLog_report * log)
if (update)
{
put(DOC_PRG_INVIO, prg);
set_fp_var(FP_PRG_INVIO, prg);
set_fp_var(FP_PRG_INVIO, prg);
put(DOC_XML_NAME, fname);
}
if (get(DOC_STATO_SDI).blank())
@ -3119,7 +3113,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
put(DOC_MESELIQ, datarif.month());
const real fiscali = ritenute('F');
const TSpesa_prest * fiscale = nullptr;
TXmlItem * ritenuta = dati_generali_doc->FindFirstChild("DatiRitenuta");
int child = 0;
@ -3127,16 +3120,14 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
{
int riga_ritfisc = -1;
for (int r = find_riga_ritenute(fiscale, 'F'); riga_ritfisc < 0 && r > 0; r = find_riga_ritenute(fiscale, 'F', r + 1))
for (int r = find_riga_ritenute('F'); riga_ritfisc < 0 && r > 0; r = find_riga_ritenute('F', r + 1))
{
if (fiscale != nullptr) // ritenuta
{
TString tipo;
const TRiga_documento & rdoc = row(r);
const TSpesa_prest & fiscale = row(r).spesa();
TString tipo;
const TRiga_documento & rdoc = row(r);
if (ritenuta->GetEnclosedText("TipoRitenuta") == fiscale->codice_tipo_ritenuta())
riga_ritfisc = r;
}
if (ritenuta->GetEnclosedText("TipoRitenuta") == fiscale.codice_tipo_ritenuta())
riga_ritfisc = r;
}
if (riga_ritfisc < 0)
{
@ -3181,7 +3172,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
}
TXmlItem * cassaprev = dati_generali_doc->FindFirstChild("DatiCassaPrevidenziale");
const TSpesa_prest * cassa = nullptr;
child = 0;
for (TXmlItem * cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child); cassaprev != nullptr; cassaprev = dati_generali_doc->FindChild("DatiCassaPrevidenziale", child))
@ -3194,16 +3184,15 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
const bool soggrit = strsoggrit == "si";
for (int r = find_riga_ritenute(cassa, 'S'); riga_ritsoc < 0 && r > 0; r = find_riga_ritenute(cassa, 'S', r + 1))
for (int r = find_riga_ritenute('S'); riga_ritsoc < 0 && r > 0; r = find_riga_ritenute('S', r + 1))
{
if (cassa != nullptr) // ritenuta
{
TString tipo;
const TRiga_documento & rdoc = row(r);
const TSpesa_prest & cassa = row(r).spesa();
TString tipo;
const TRiga_documento & rdoc = row(r);
if (codicesdi == cassa.codice_cassa_previdenziale())
riga_ritsoc = r;
if (codicesdi == cassa->codice_cassa_previdenziale())
riga_ritsoc = r;
}
}
if (riga_ritsoc < 0)
{
@ -3262,7 +3251,6 @@ bool TDocumento::get_dati_generali(TXmlItem & dati_generali, real & totale_imp)
if (codiva.blank())
codiva = sp->cod_iva();
}
riga.put(RDOC_DESCR, sp->descrizione());
riga.put(RDOC_UMQTA, sp->um());
riga.put(RDOC_CODIVA, codiva);