details:   https://code.openbravo.com/erp/devel/pi/rev/92fe35392dd6
changeset: 29805:92fe35392dd6
user:      Atul Gaware <atul.gaware <at> openbravo.com>
date:      Tue Jul 19 19:51:14 2016 +0200
summary:   Fixes issue 33319: Performance problems in Create Shipments from 
Orders process

Problem was with use of view m_inout_candidate_v in the query.
Fix implements the data fetching logic in query itself.

details:   https://code.openbravo.com/erp/devel/pi/rev/734222ff0bdd
changeset: 29806:734222ff0bdd
user:      Atul Gaware <atul.gaware <at> openbravo.com>
date:      Tue Jul 19 20:20:24 2016 +0530
summary:   Fixes Issue 33320: Performance problems in Create Lines From process

Problem was with loading invoices and orders in the respective combos.
Changed both queries to improve the performance.

diffstat:

 src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Shipment_data.xsql |  
54 ++++++--
 src/org/openbravo/erpCommon/ad_forms/GenerateShipmentsmanual_data.xsql    |  
61 +++++++--
 2 files changed, 82 insertions(+), 33 deletions(-)

diffs (170 lines):

diff -r fcfdf220cf0e -r 734222ff0bdd 
src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Shipment_data.xsql
--- a/src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Shipment_data.xsql 
Fri Jul 15 08:49:04 2016 +0200
+++ b/src/org/openbravo/erpCommon/ad_actionButton/CreateFrom_Shipment_data.xsql 
Tue Jul 19 20:20:24 2016 +0530
@@ -12,7 +12,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2014 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2016 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -140,19 +140,33 @@
     <Sql>
       <![CDATA[
         SELECT o.C_ORDER_ID as ID, Ad_Column_Identifier(TO_CHAR('C_Order'), 
TO_CHAR(o.c_order_id), TO_CHAR(?)) AS NAME
-        FROM M_INOUT_CANDIDATE_V ic, C_ORDER o JOIN C_DOCTYPE dt ON 
o.c_doctype_id = dt.c_doctype_id AND dt.isreturn='N'
-        WHERE o.C_ORDER_ID = ic.C_ORDER_ID 
-        AND ic.AD_Client_ID IN ('1') 
-        AND ic.AD_Org_ID IN ('1') 
-        AND ic.C_BPartner_ID = ? 
-        GROUP BY o.C_ORDER_ID, o.DocumentNo, o.DateOrdered, o.GrandTotal 
+        FROM C_ORDER o
+        JOIN C_DOCTYPE dt
+        ON o.c_doctype_id = dt.c_doctype_id
+        WHERE o.docstatus = 'CO'
+        AND o.isdelivered = 'N'
+        AND o.AD_Client_ID IN ('1')
+        AND o.AD_Org_ID IN ('1')
+        AND o.C_BPartner_ID = ?
+        AND dt.isreturn = 'N'
+        AND dt.docbasetype = 'SOO'
+        AND dt.docsubtypeso NOT IN ('ON', 'OB')
+        AND EXISTS (
+          SELECT 1
+          FROM C_ORDERLINE ol
+          WHERE ol.c_order_id = o.c_order_id
+          AND ol.qtyordered <> ol.qtydelivered
+          AND ol.directship = 'N'
+          AND ol.m_product_id IS NOT NULL
+        )
+        GROUP BY o.C_ORDER_ID, o.DocumentNo, o.DateOrdered, o.GrandTotal
         ORDER BY NAME
       ]]>
     </Sql>
     <Field name="rownum" value="count"/>
     <Parameter name="language"/>
-    <Parameter name="adUserClient" type="replace" optional="true" 
after="ic.AD_Client_ID IN (" text="'1'"/>
-    <Parameter name="adOrgClient" type="replace" optional="true" 
after="ic.AD_Org_ID IN (" text="'1'"/>
+    <Parameter name="adUserClient" type="replace" optional="true" 
after="o.AD_Client_ID IN (" text="'1'"/>
+    <Parameter name="adOrgClient" type="replace" optional="true" 
after="o.AD_Org_ID IN (" text="'1'"/>
     <Parameter name="cBpartnerId"/>
   </SqlMethod>
   <SqlMethod name="selectFromPOTrl" type="preparedStatement" return="multiple">
@@ -407,17 +421,27 @@
     <Sql>
       <![CDATA[
         SELECT i.C_Invoice_ID AS ID, 
Ad_Column_Identifier(TO_CHAR('C_Invoice'), TO_CHAR(i.C_Invoice_ID), TO_CHAR(?)) 
AS NAME
-        FROM C_INVOICE i JOIN C_DOCTYPE dt ON i.c_doctype_id = dt.c_doctype_id 
AND dt.isreturn='N'
+        FROM C_INVOICE i
+        JOIN C_DOCTYPE dt
+        ON i.c_doctype_id = dt.c_doctype_id
         WHERE i.DocStatus IN ('CL','CO')
         AND i.AD_Client_ID IN ('1')
         AND i.AD_Org_ID IN ('1')
         AND i.IsSOTrx='Y'
         AND i.C_BPartner_ID = ?
-        AND EXISTS (SELECT 1                      
-                FROM C_INVOICELINE l LEFT JOIN M_INOUTLINE MI ON 
l.M_INOUTLINE_ID = MI.M_INOUTLINE_ID                        
-                WHERE l.C_INVOICE_ID = i.C_INVOICE_ID                
-                GROUP BY l.C_InvoiceLine_ID ,l.QtyInvoiced                
-                HAVING (l.QtyInvoiced-SUM(COALESCE(mi.MOVEMENTQTY,0))) <> 0 ) 
+        AND dt.isreturn = 'N'
+        AND EXISTS (
+          SELECT 1
+          FROM C_INVOICELINE il
+          WHERE il.C_INVOICE_ID = i.C_INVOICE_ID
+          AND ((il.M_INOUTLINE_ID IS NULL AND il.QtyInvoiced <> 0)
+          OR (il.M_INOUTLINE_ID IS NOT NULL AND EXISTS (
+            SELECT 1
+            FROM M_INOUTLINE iol
+            WHERE iol.M_INOUTLINE_ID = il.M_INOUTLINE_ID
+            AND (il.QtyInvoiced - iol.MOVEMENTQTY) <> 0
+          )))
+        )
         ORDER BY NAME
       ]]>
     </Sql>
diff -r fcfdf220cf0e -r 734222ff0bdd 
src/org/openbravo/erpCommon/ad_forms/GenerateShipmentsmanual_data.xsql
--- a/src/org/openbravo/erpCommon/ad_forms/GenerateShipmentsmanual_data.xsql    
Fri Jul 15 08:49:04 2016 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/GenerateShipmentsmanual_data.xsql    
Tue Jul 19 20:20:24 2016 +0530
@@ -12,7 +12,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2010 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2016 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -28,27 +28,52 @@
     <SqlMethodComment></SqlMethodComment>
     <Sql>
     <![CDATA[
-      SELECT C_Order_ID, o.Name as adorgname, COALESCE(dttrl.Name, dt.Name) as 
cdoctypename, DocumentNo, bp.Name as cbpartnername, DateOrdered, 
-      amountlines, TotalLines 
-      FROM M_InOut_Candidate_v ic, AD_Org o, C_BPartner bp, C_DocType dt left 
join C_DocType_trl dttrl on dt.C_DocType_ID=dttrl.C_DocType_ID AND 
dttrl.ad_language=?
-      WHERE ic.AD_Org_ID=o.AD_Org_ID
-      AND ic.C_BPartner_ID=bp.C_BPartner_ID
-      AND ic.C_DocType_ID=dt.C_DocType_ID
-      AND dt.isreturn='N'
-      AND ic.ad_client_id in ('1')
-      AND ic.ad_org_id in ('1')
+      SELECT o.C_Order_ID, org.Name as adorgname, COALESCE(dttrl.Name, 
dt.Name) as cdoctypename, o.DocumentNo, bp.Name as cbpartnername, 
o.DateOrdered, o.totallines as amountlines,
+      (
+        SELECT sum((ol.qtyordered - ol.qtydelivered) * ol.priceactual)
+        FROM c_orderline ol
+        WHERE ol.c_order_id = o.c_order_id
+        AND ol.qtyordered <> ol.qtydelivered
+        AND ol.directship = 'N'
+        AND ol.m_product_id IS NOT NULL
+      ) as TotalLines
+      FROM C_Order o
+      JOIN AD_Org org
+      ON o.AD_Org_ID = org.AD_Org_ID
+      JOIN C_BPartner bp
+      ON o.C_BPartner_ID = bp.C_BPartner_ID
+      JOIN C_DocType dt
+      ON o.C_DocType_ID = dt.C_DocType_ID
+      LEFT JOIN C_DocType_trl dttrl
+      ON dt.C_DocType_ID = dttrl.C_DocType_ID
+      AND dttrl.ad_language = ?
+      WHERE o.docstatus = 'CO'
+      AND o.isdelivered = 'N'
+      AND dt.isreturn = 'N'
+      AND dt.docbasetype = 'SOO'
+      AND dt.docsubtypeso NOT IN ('ON', 'OB')
+      AND EXISTS (
+        SELECT 1
+        FROM C_ORDERLINE ol
+        WHERE ol.c_order_id = o.c_order_id
+        AND ol.qtyordered <> ol.qtydelivered
+        AND ol.directship = 'N'
+        AND ol.m_product_id IS NOT NULL
+      )
+      AND o.ad_client_id IN ('1')
+      AND o.ad_org_id IN ('1')
       AND 1=1
-      AND 2=2 AND ic.ad_org_id in ('1')
-      ORDER BY o.Name,bp.Name,DateOrdered
+      AND 2=2 AND o.ad_org_id IN ('1')
+      ORDER BY org.Name, bp.Name, DateOrdered
       ]]></Sql>
     <Field name="rownum" value="count"/>
     <Parameter name="language"/>
-    <Parameter name="adUserClient" type="replace" optional="true" after="AND 
ic.ad_client_id in (" text="'1'"/>
-    <Parameter name="adUserOrg" type="replace" optional="true" after="AND 
ic.ad_org_id in (" text="'1'"/>
-    <Parameter name="parBPartner" optional="true" after="AND 1=1">AND 
ic.C_BPartner_ID= ?</Parameter>
-    <Parameter name="parDateFrom" optional="true" after="AND 1=1"><![CDATA[ 
AND ic.DateOrdered >= TO_DATE(?)]]></Parameter>
-    <Parameter name="parDateTo" optional="true" after="AND 1=1"><![CDATA[ AND 
ic.DateOrdered < TO_DATE(?)]]></Parameter>
-    <Parameter name="adOrgId" optional="true" type="replace" after="AND 2=2 
AND ic.ad_org_id in (" text="'1'"/>
+    <Parameter name="adUserClient" type="replace" optional="true" after="AND 
o.ad_client_id IN (" text="'1'"/>
+    <Parameter name="adUserOrg" type="replace" optional="true" after="AND 
o.ad_org_id IN (" text="'1'"/>
+    <Parameter name="parBPartner" optional="true" after="AND 1=1">AND 
o.C_BPartner_ID = ?</Parameter>
+    <Parameter name="parDateFrom" optional="true" after="AND 1=1"><![CDATA[ 
AND o.DateOrdered >= TO_DATE(?)]]></Parameter>
+    <Parameter name="parDateTo" optional="true" after="AND 1=1"><![CDATA[ AND 
o.DateOrdered < TO_DATE(?)]]></Parameter>
+    <Parameter name="adOrgId" optional="true" type="replace" after="AND 2=2 
AND o.ad_org_id IN (" text="'1'"/>
   </SqlMethod>
     <SqlMethod name="set" type="constant" return="multiple">
       <SqlMethodComment></SqlMethodComment>

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity planning
reports.http://sdm.link/zohodev2dev
_______________________________________________
Openbravo-commits mailing list
Openbravo-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to