Patch level : 2.2 210
Files correlati : ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento Bug 0000522 La contabilizzazione analitica non considera l'indetraibilità sui dicumenti di acquisto git-svn-id: svn://10.65.10.50/trunk@13465 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cdcf43cc70
commit
ba935d2176
@ -473,6 +473,7 @@ class TContabilizzazione_analitica : public TElaborazione // velib04f
|
||||
|
||||
protected:
|
||||
bool search_costo_ricavo(const TRiga_documento& riga, TBill& conto);
|
||||
bool find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti);
|
||||
bool find_conti(const TRiga_documento& riga, TString_array& conti);
|
||||
void init();
|
||||
|
||||
|
112
ve/velib04f.cpp
112
ve/velib04f.cpp
@ -251,6 +251,57 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r,
|
||||
return conto.ok() && conto.find();
|
||||
}
|
||||
|
||||
bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_documento& riga, const TBill & bill, TString_array& conti)
|
||||
{
|
||||
const TString80 riga_cos = riga.codice_costo();
|
||||
const TString80 riga_cms = riga.codice_commessa();
|
||||
const TString16 riga_fsc = riga.fase_commessa();
|
||||
const bool riga_any = riga_cos.not_empty() || riga_cms.not_empty() || riga_fsc.not_empty();
|
||||
|
||||
if (_usepdcc)
|
||||
{
|
||||
TToken_string conto;
|
||||
|
||||
conto.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
|
||||
if (riga_any)
|
||||
{
|
||||
conto.add(riga_cos, 1);
|
||||
conto.add(riga_cms, 2);
|
||||
conto.add(riga_fsc, 3);
|
||||
}
|
||||
conto.add(100, 4);
|
||||
conti.add(conto);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cerca la ripartizione del conto
|
||||
const TRecord_array& rip = _rip.righe(bill);
|
||||
TToken_string conto;
|
||||
for (int i = 1; i <= rip.rows(); i++)
|
||||
{
|
||||
const TRectype& rigarip = rip.row(i);
|
||||
conto = rigarip.get(RRIP_CODCONTO);
|
||||
if (riga_any)
|
||||
{
|
||||
conto.add(riga_cos, 1);
|
||||
conto.add(riga_cms, 2);
|
||||
conto.add(riga_fsc, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
conto.add(rigarip.get(RRIP_CODCOSTO), 1);
|
||||
conto.add(rigarip.get(RRIP_CODCMS), 2);
|
||||
conto.add(rigarip.get(RRIP_CODFASE), 3);
|
||||
}
|
||||
conto.add(rigarip.get(RRIP_RIPARTO), 4);
|
||||
conti.add(conto);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return !conti.empty();
|
||||
}
|
||||
|
||||
bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti)
|
||||
{
|
||||
bool bArcticleFound = false;
|
||||
@ -367,6 +418,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
int annoes = 0;
|
||||
TString descr, msg, codcaus;
|
||||
bool dare = false;
|
||||
TCausale & caus = (TCausale &) doc2caus(doc);
|
||||
|
||||
if (numreg_cg > 0)
|
||||
{
|
||||
@ -375,7 +427,6 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
datacomp = mov_cg.get_date(MOV_DATACOMP);
|
||||
annoes = mov_cg.get_int(MOV_ANNOES);
|
||||
descr = mov_cg.get(MOV_DESCR);
|
||||
TCausale & caus = (TCausale &) doc2caus(doc);
|
||||
dare = !(caus.sezione_clifo() == 'D');
|
||||
}
|
||||
else
|
||||
@ -388,7 +439,6 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
descr = doc.tipo().descrizione();
|
||||
|
||||
const TString8 rif = doc.get(DOC_NUMDOCRIF);
|
||||
TCausale & caus = (TCausale &) doc2caus(doc);
|
||||
codcaus = caus.codice();
|
||||
const bool use_rif = caus.iva() == iva_acquisti && rif.not_empty();
|
||||
if (use_rif)
|
||||
@ -440,6 +490,8 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
|
||||
|
||||
TImporto totdoc; // Totale movimento analitico
|
||||
const TipoIVA tiva = caus.iva();
|
||||
TBill bill; caus.bill(RIGA_IVA_NON_DETRAIBILE, bill);
|
||||
|
||||
// Scandisco le righe del documento,
|
||||
for (int i = 1; i <= doc.physical_rows(); i++)
|
||||
@ -453,7 +505,60 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
// salto valori nulli
|
||||
const real qta = riga.get(RDOC_QTA);
|
||||
// const real valore = riga.valore(true, decimals);
|
||||
const real valore = riga.importo(true, false);
|
||||
real valore = riga.importo(true, false);
|
||||
|
||||
if (valore.is_zero())
|
||||
continue;
|
||||
|
||||
if (tiva != iva_vendite)
|
||||
{
|
||||
real pind = ZERO;
|
||||
if (tiva != nessuna_iva)
|
||||
{
|
||||
const int annodoc = doc.get_date(DOC_DATADOC).year();
|
||||
if (caus.reg().prorata100(annodoc))
|
||||
pind = CENTO;
|
||||
}
|
||||
if (pind == ZERO)
|
||||
pind = riga.tipo().perc_indetraibilita();
|
||||
if (pind > ZERO)
|
||||
{
|
||||
const real ivaind = (riga.imposta(false) * pind) / CENTO;
|
||||
if (bill.ok())
|
||||
{
|
||||
if (bill.is_analitico())
|
||||
{
|
||||
TString_array conti_ind;
|
||||
if (find_conti_iva_indetraibile(riga, bill, conti_ind)) //qui
|
||||
{
|
||||
TGeneric_distrib esso(ivaind, decimals);
|
||||
|
||||
init_distrib(conti_ind, esso);
|
||||
FOR_EACH_ARRAY_ROW(conti_ind, j, row_ind)
|
||||
{
|
||||
TRectype& rmov = mov.new_row();
|
||||
rmov.put(RMOVANA_ANNOES, annoes);
|
||||
rmov.put(RMOVANA_CODCONTO, row_ind->get(0));
|
||||
rmov.put(RMOVANA_CODCCOSTO,row_ind->get());
|
||||
rmov.put(RMOVANA_CODCMS, row_ind->get());
|
||||
rmov.put(RMOVANA_CODFASE, row_ind->get());
|
||||
rmov.put(RMOVANA_DESCR, riga.get(RDOC_DESCR));
|
||||
|
||||
TImporto imp(sezione, real(esso.get()));
|
||||
imp.normalize();
|
||||
rmov.put(RMOVANA_SEZIONE, imp.sezione());
|
||||
rmov.put(RMOVANA_IMPORTO, imp.valore());
|
||||
|
||||
totdoc += imp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
valore += ivaind;
|
||||
}
|
||||
}
|
||||
|
||||
if (valore.is_zero())
|
||||
continue;
|
||||
|
||||
@ -473,6 +578,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
||||
}
|
||||
|
||||
TGeneric_distrib esso(valore, decimals);
|
||||
|
||||
init_distrib(conti, esso);
|
||||
FOR_EACH_ARRAY_ROW(conti, i, row)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user