From 385b30da974cba1cb2876086438adb45f7a9f4fa Mon Sep 17 00:00:00 2001 From: guy <guy@c028cbd2-c16b-5b4b-a496-9718f37d4682> Date: Fri, 1 Jul 2005 13:03:24 +0000 Subject: [PATCH] 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 --- ve/velib04f.cpp | 103 +++++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 50 deletions(-) diff --git a/ve/velib04f.cpp b/ve/velib04f.cpp index 976f3f25e..0652e6b88 100755 --- a/ve/velib04f.cpp +++ b/ve/velib04f.cpp @@ -251,18 +251,22 @@ error_type TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documen return _error; } - 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); - - bool ok = false; TString80 contanal; - if (riga.is_articolo()) { 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); } else @@ -279,61 +283,59 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri if (tabanal != NULL) { const TRectype& spp = cache().get(tabanal, riga.get(RDOC_CODART)); - ok = !spp.empty(); + bArcticleFound = !spp.empty(); contanal = spp.get(tipocf == 'F' ? "S2" : "S1"); } } - if (ok) - { - 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 (!bArcticleFound) // Se l'anagrtafica non esiste va bene cosi' + return true; - 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 - if (search_costo_ricavo(riga, bill) != no_error) - { - 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; + 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); } - 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); } } + 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) @@ -419,9 +421,8 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis continue; TString_array conti; - bool ok = find_conti(riga, conti); - - if (conti.empty()) + const bool ok = find_conti(riga, conti); + if (!ok) { 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)); viswin->add_line(msg); } + can_write = false; 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(); mov.put(MOVANA_SEZIONE, totdoc.sezione()); @@ -490,12 +492,13 @@ bool TContabilizzazione_analitica::elabora(TLista_documenti& doc_in, TLista_docu return true; } -TContabilizzazione_analitica::TContabilizzazione_analitica() : TElaborazione(NULL) +TContabilizzazione_analitica::TContabilizzazione_analitica() + : TElaborazione(NULL), _error(no_error) { } TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec) - : TElaborazione(rec) + : TElaborazione(rec), _error(no_error) { }