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:
|
protected:
|
||||||
bool search_costo_ricavo(const TRiga_documento& riga, TBill& conto);
|
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);
|
bool find_conti(const TRiga_documento& riga, TString_array& conti);
|
||||||
void init();
|
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();
|
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 TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti)
|
||||||
{
|
{
|
||||||
bool bArcticleFound = false;
|
bool bArcticleFound = false;
|
||||||
@ -367,6 +418,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
int annoes = 0;
|
int annoes = 0;
|
||||||
TString descr, msg, codcaus;
|
TString descr, msg, codcaus;
|
||||||
bool dare = false;
|
bool dare = false;
|
||||||
|
TCausale & caus = (TCausale &) doc2caus(doc);
|
||||||
|
|
||||||
if (numreg_cg > 0)
|
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);
|
datacomp = mov_cg.get_date(MOV_DATACOMP);
|
||||||
annoes = mov_cg.get_int(MOV_ANNOES);
|
annoes = mov_cg.get_int(MOV_ANNOES);
|
||||||
descr = mov_cg.get(MOV_DESCR);
|
descr = mov_cg.get(MOV_DESCR);
|
||||||
TCausale & caus = (TCausale &) doc2caus(doc);
|
|
||||||
dare = !(caus.sezione_clifo() == 'D');
|
dare = !(caus.sezione_clifo() == 'D');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -388,7 +439,6 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
descr = doc.tipo().descrizione();
|
descr = doc.tipo().descrizione();
|
||||||
|
|
||||||
const TString8 rif = doc.get(DOC_NUMDOCRIF);
|
const TString8 rif = doc.get(DOC_NUMDOCRIF);
|
||||||
TCausale & caus = (TCausale &) doc2caus(doc);
|
|
||||||
codcaus = caus.codice();
|
codcaus = caus.codice();
|
||||||
const bool use_rif = caus.iva() == iva_acquisti && rif.not_empty();
|
const bool use_rif = caus.iva() == iva_acquisti && rif.not_empty();
|
||||||
if (use_rif)
|
if (use_rif)
|
||||||
@ -440,6 +490,8 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
|
|
||||||
|
|
||||||
TImporto totdoc; // Totale movimento analitico
|
TImporto totdoc; // Totale movimento analitico
|
||||||
|
const TipoIVA tiva = caus.iva();
|
||||||
|
TBill bill; caus.bill(RIGA_IVA_NON_DETRAIBILE, bill);
|
||||||
|
|
||||||
// Scandisco le righe del documento,
|
// Scandisco le righe del documento,
|
||||||
for (int i = 1; i <= doc.physical_rows(); i++)
|
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
|
// salto valori nulli
|
||||||
const real qta = riga.get(RDOC_QTA);
|
const real qta = riga.get(RDOC_QTA);
|
||||||
// const real valore = riga.valore(true, decimals);
|
// 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())
|
if (valore.is_zero())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -473,6 +578,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
}
|
}
|
||||||
|
|
||||||
TGeneric_distrib esso(valore, decimals);
|
TGeneric_distrib esso(valore, decimals);
|
||||||
|
|
||||||
init_distrib(conti, esso);
|
init_distrib(conti, esso);
|
||||||
FOR_EACH_ARRAY_ROW(conti, i, row)
|
FOR_EACH_ARRAY_ROW(conti, i, row)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user