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)
 {
 }