Patch level : 2.2
Files correlati : Ricompilazione Demo : [ ] Commento : Corretta selezione righe documento da conatabilizzare analiticamente git-svn-id: svn://10.65.10.50/trunk@13246 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
0427d93bb4
commit
385b30da97
103
ve/velib04f.cpp
103
ve/velib04f.cpp
@ -251,18 +251,22 @@ error_type TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documen
|
|||||||
return _error;
|
return _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti)
|
bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TString_array& conti)
|
||||||
{
|
{
|
||||||
|
TBill bill; // Cerco il conto contabile
|
||||||
|
if (search_costo_ricavo(riga, bill) != no_error)
|
||||||
|
return true;
|
||||||
|
if (!bill.is_analitico())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
bool bArcticleFound = false;
|
||||||
|
|
||||||
const char tipocf = riga.doc().get_char(DOC_TIPOCF);
|
const char tipocf = riga.doc().get_char(DOC_TIPOCF);
|
||||||
|
|
||||||
bool ok = false;
|
|
||||||
TString80 contanal;
|
TString80 contanal;
|
||||||
|
|
||||||
if (riga.is_articolo())
|
if (riga.is_articolo())
|
||||||
{
|
{
|
||||||
const TRectype& anamag = cache().get(LF_ANAMAG, riga.get(RDOC_CODARTMAG));
|
const TRectype& anamag = cache().get(LF_ANAMAG, riga.get(RDOC_CODARTMAG));
|
||||||
ok = !anamag.empty();
|
bArcticleFound = !anamag.empty();
|
||||||
contanal = anamag.get(tipocf == 'F' ? ANAMAG_CONTOINDA : ANAMAG_CONTOINDV);
|
contanal = anamag.get(tipocf == 'F' ? ANAMAG_CONTOINDA : ANAMAG_CONTOINDV);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -279,61 +283,59 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
|
|||||||
if (tabanal != NULL)
|
if (tabanal != NULL)
|
||||||
{
|
{
|
||||||
const TRectype& spp = cache().get(tabanal, riga.get(RDOC_CODART));
|
const TRectype& spp = cache().get(tabanal, riga.get(RDOC_CODART));
|
||||||
ok = !spp.empty();
|
bArcticleFound = !spp.empty();
|
||||||
contanal = spp.get(tipocf == 'F' ? "S2" : "S1");
|
contanal = spp.get(tipocf == 'F' ? "S2" : "S1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok)
|
if (!bArcticleFound) // Se l'anagrtafica non esiste va bene cosi'
|
||||||
{
|
return true;
|
||||||
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 (contanal.blank()) // Non ho trovato il conto in anagrafica ...
|
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 (contanal.blank()) // Non ho trovato il conto in anagrafica ...
|
||||||
|
{
|
||||||
|
// Cerca la ripartizione del conto
|
||||||
|
const TRecord_array& rip = _rip.righe(bill);
|
||||||
|
TToken_string conto;
|
||||||
|
for (int i = 1; i <= rip.rows(); i++)
|
||||||
{
|
{
|
||||||
TBill bill; // Cerco il conto contabile
|
const TRectype& rigarip = rip.row(i);
|
||||||
if (search_costo_ricavo(riga, bill) != no_error)
|
conto = rigarip.get(RRIP_CODCONTO);
|
||||||
{
|
|
||||||
const TRecord_array& rip = _rip.righe(bill.gruppo(), bill.conto(), bill.sottoconto());
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TToken_string conto = contanal;
|
|
||||||
if (riga_any)
|
if (riga_any)
|
||||||
{
|
{
|
||||||
conto.add(riga_cos, 1);
|
conto.add(riga_cos, 1);
|
||||||
conto.add(riga_cms, 2);
|
conto.add(riga_cms, 2);
|
||||||
conto.add(riga_fsc, 3);
|
conto.add(riga_fsc, 3);
|
||||||
}
|
}
|
||||||
conto.add(100, 4);
|
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);
|
conti.add(conto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Ho trovato il conto in anagrafica ...
|
||||||
|
TToken_string conto = contanal;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
return ok;
|
return !conti.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TContabilizzazione_analitica::init_distrib(TString_array& conti, TGeneric_distrib& distrib)
|
void TContabilizzazione_analitica::init_distrib(TString_array& conti, TGeneric_distrib& distrib)
|
||||||
@ -419,9 +421,8 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
TString_array conti;
|
TString_array conti;
|
||||||
bool ok = find_conti(riga, conti);
|
const bool ok = find_conti(riga, conti);
|
||||||
|
if (!ok)
|
||||||
if (conti.empty())
|
|
||||||
{
|
{
|
||||||
if (viswin != NULL)
|
if (viswin != NULL)
|
||||||
{
|
{
|
||||||
@ -429,6 +430,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
msg.format(FR("*** Riga %d: Manca il conto analitico dell'articolo '%s'"), i, (const char*)riga.get(RDOC_CODART));
|
msg.format(FR("*** Riga %d: Manca il conto analitico dell'articolo '%s'"), i, (const char*)riga.get(RDOC_CODART));
|
||||||
viswin->add_line(msg);
|
viswin->add_line(msg);
|
||||||
}
|
}
|
||||||
|
can_write = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,7 +455,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (can_write)
|
if (can_write && mov.rows() > 0)
|
||||||
{
|
{
|
||||||
totdoc.normalize();
|
totdoc.normalize();
|
||||||
mov.put(MOVANA_SEZIONE, totdoc.sezione());
|
mov.put(MOVANA_SEZIONE, totdoc.sezione());
|
||||||
@ -490,12 +492,13 @@ bool TContabilizzazione_analitica::elabora(TLista_documenti& doc_in, TLista_docu
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TContabilizzazione_analitica::TContabilizzazione_analitica() : TElaborazione(NULL)
|
TContabilizzazione_analitica::TContabilizzazione_analitica()
|
||||||
|
: TElaborazione(NULL), _error(no_error)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec)
|
TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec)
|
||||||
: TElaborazione(rec)
|
: TElaborazione(rec), _error(no_error)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user