details: https://code.openbravo.com/erp/devel/pi/rev/c05369b23139 changeset: 33230:c05369b23139 user: David Miguelez <david.miguelez <at> openbravo.com> date: Mon Jan 29 11:38:22 2018 +0100 summary: Fixes Issue 37742. Fixes performance in Return Material Receipt P&E
In view m_rm_receipt_pick_edit a new column has been added with the Business Partner from the Order. This new column is used in the filter of the Return Material P&E Tab. By doing so, additional cross joins with OrderLine and Order Tables are avoided. Also, the planner in Postgres is able to properly use the Business Partner index. diffstat: src-db/database/model/views/M_RM_RECEIPT_PICK_EDIT.xml | 2 +- src-db/database/sourcedata/AD_COLUMN.xml | 41 +++++++++++++++++- src-db/database/sourcedata/AD_TAB.xml | 2 +- 3 files changed, 42 insertions(+), 3 deletions(-) diffs (79 lines): diff -r 83aa5e45d4c8 -r c05369b23139 src-db/database/model/views/M_RM_RECEIPT_PICK_EDIT.xml --- a/src-db/database/model/views/M_RM_RECEIPT_PICK_EDIT.xml Sat Dec 16 18:40:56 2017 +0100 +++ b/src-db/database/model/views/M_RM_RECEIPT_PICK_EDIT.xml Mon Jan 29 11:38:22 2018 +0100 @@ -1,4 +1,4 @@ <?xml version="1.0"?> <database name="VIEW M_RM_RECEIPT_PICK_EDIT"> - <view name="M_RM_RECEIPT_PICK_EDIT"><![CDATA[SELECT ol.c_orderline_id AS m_rm_receipt_pick_edit_id, ol.ad_client_id, COALESCE(iol.ad_org_id, ol.ad_org_id) AS ad_org_id, ol.isactive, ol.created, ol.createdby, COALESCE(iol.updated, ol.updated) AS updated, ol.updatedby, iol.m_inout_id, CASE WHEN iol.m_inoutline_id IS NOT NULL THEN 'Y' ELSE 'N' END AS ob_selected, ol.c_orderline_id, ol.m_product_id, ol.c_uom_id, ol.m_attributesetinstance_id, (-1) * ol.qtyordered AS returned, (-1) * CASE WHEN uom_pref.property IS NOT NULL AND ol.c_uom_id IS NOT NULL THEN m_get_converted_aumqty(ol.m_product_id, ol.qtyordered - ol.qtydelivered, ol.c_aum) ELSE ol.qtyordered - ol.qtydelivered END AS pendingqty, (-1) * COALESCE(iol.aumqty, iol.movementqty) AS receivingqty, iol.m_condition_goods_id, iol.m_locator_id, o.documentno AS returnorderno, o.issotrx, ol.line, iol.m_inoutline_id, ol.c_aum, (-1) * ol.aumqty AS aumqty, (-1) * CASE WHEN uom_pref.property IS NOT NULL AND ol.c_uom_id IS NOT NULL THEN ol.qtyordered - ol.qtydelivered ELSE m_get_converted_aumqty(ol.m_product_id, ol.qtyordered - ol.qtydelivered, ol.c_aum) END AS pendingaumqty, CASE WHEN iol.m_inoutline_id IS NULL THEN COALESCE(ol.c_aum, ol.c_uom_id) ELSE COALESCE(iol.c_aum, iol.c_uom_id) END AS returneduom FROM c_orderline ol JOIN c_order o ON o.c_order_id = ol.c_order_id JOIN m_product p ON ol.m_product_id = p.m_product_id JOIN c_doctype dt ON dt.c_doctype_id = o.c_doctypetarget_id AND dt.isreturn = 'Y' LEFT JOIN (SELECT il2.m_inoutline_id, il2.ad_client_id, il2.ad_org_id, il2.isactive, il2.created, il2.createdby, il2.updated, il2.updatedby, il2.line, il2.description, il2.m_inout_id, il2.c_orderline_id, il2.m_locator_id, il2.m_product_id, il2.c_uom_id, il2.movementqty, il2.isinvoiced, il2.m_attributesetinstance_id, il2.isdescription, il2.quantityorder, il2.m_product_uom_id, il2.m_condition_goods_id, il2.c_aum, il2.aumqty FROM m_inoutline il2 JOIN m_inout i2 ON il2.m_inout_id = i2.m_inout_id AND i2.processed = 'N') iol ON iol.c_orderline_id = ol.c_orderline_id LEFT JOIN (SELECT pref.property FROM ad_preference pref WHERE pref.property = 'UomManagement' AND to_char(pref.value) = 'Y' AND pref.ad_client_id = '0' AND pref.ad_org_id = '0' AND pref.visibleat_client_id IS NULL AND pref.visibleat_org_id IS NULL AND pref.visibleat_role_id IS NULL AND pref.ad_user_id IS NULL) uom_pref ON 1 = 1 WHERE (ol.qtyordered - ol.qtydelivered) <> 0 AND o.docstatus = 'CO']]></view> + <view name="M_RM_RECEIPT_PICK_EDIT"><![CDATA[SELECT ol.c_orderline_id AS m_rm_receipt_pick_edit_id, ol.ad_client_id, COALESCE(iol.ad_org_id, ol.ad_org_id) AS ad_org_id, ol.isactive, ol.created, ol.createdby, COALESCE(iol.updated, ol.updated) AS updated, ol.updatedby, iol.m_inout_id, CASE WHEN iol.m_inoutline_id IS NOT NULL THEN 'Y' ELSE 'N' END AS ob_selected, ol.c_orderline_id, ol.m_product_id, ol.c_uom_id, ol.m_attributesetinstance_id, (-1) * ol.qtyordered AS returned, (-1) * CASE WHEN uom_pref.property IS NOT NULL AND ol.c_uom_id IS NOT NULL THEN m_get_converted_aumqty(ol.m_product_id, ol.qtyordered - ol.qtydelivered, ol.c_aum) ELSE ol.qtyordered - ol.qtydelivered END AS pendingqty, (-1) * COALESCE(iol.aumqty, iol.movementqty) AS receivingqty, iol.m_condition_goods_id, iol.m_locator_id, o.documentno AS returnorderno, o.issotrx, ol.line, iol.m_inoutline_id, ol.c_aum, (-1) * ol.aumqty AS aumqty, (-1) * CASE WHEN uom_pref.property IS NOT NULL AND ol.c_uom_id IS NOT NULL THEN ol.qtyordered - ol.qtydelivered ELSE m_get_converted_aumqty(ol.m_product_id, ol.qtyordered - ol.qtydelivered, ol.c_aum) END AS pendingaumqty, CASE WHEN iol.m_inoutline_id IS NULL THEN COALESCE(ol.c_aum, ol.c_uom_id) ELSE COALESCE(iol.c_aum, iol.c_uom_id) END AS returneduom, o.c_bpartner_id FROM c_orderline ol JOIN c_order o ON o.c_order_id = ol.c_order_id JOIN m_product p ON ol.m_product_id = p.m_product_id JOIN c_doctype dt ON dt.c_doctype_id = o.c_doctypetarget_id AND dt.isreturn = 'Y' LEFT JOIN (SELECT il2.m_inoutline_id, il2.ad_client_id, il2.ad_org_id, il2.isactive, il2.created, il2.createdby, il2.updated, il2.updatedby, il2.line, il2.description, il2.m_inout_id, il2.c_orderline_id, il2.m_locator_id, il2.m_product_id, il2.c_uom_id, il2.movementqty, il2.isinvoiced, il2.m_attributesetinstance_id, il2.isdescription, il2.quantityorder, il2.m_product_uom_id, il2.m_condition_goods_id, il2.c_aum, il2.aumqty FROM m_inoutline il2 JOIN m_inout i2 ON il2.m_inout_id = i2.m_inout_id AND i2.processed = 'N') iol ON iol.c_orderline_id = ol.c_orderline_id LEFT JOIN (SELECT pref.property FROM ad_preference pref WHERE pref.property = 'UomManagement' AND to_char(pref.value) = 'Y' AND pref.ad_client_id = '0' AND pref.ad_org_id = '0' AND pref.visibleat_client_id IS NULL AND pref.visibleat_org_id IS NULL AND pref.visibleat_role_id IS NULL AND pref.ad_user_id IS NULL) uom_pref ON 1 = 1 WHERE (ol.qtyordered - ol.qtydelivered) <> 0 AND o.docstatus = 'CO']]></view> </database> diff -r 83aa5e45d4c8 -r c05369b23139 src-db/database/sourcedata/AD_COLUMN.xml --- a/src-db/database/sourcedata/AD_COLUMN.xml Sat Dec 16 18:40:56 2017 +0100 +++ b/src-db/database/sourcedata/AD_COLUMN.xml Mon Jan 29 11:38:22 2018 +0100 @@ -256870,6 +256870,45 @@ <!--2CA46C14D66F4B7AA6550531F6D329E7--> <ALLOWED_CROSS_ORG_LINK><![CDATA[N]]></ALLOWED_CROSS_ORG_LINK> <!--2CA46C14D66F4B7AA6550531F6D329E7--></AD_COLUMN> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--><AD_COLUMN> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_COLUMN_ID><![CDATA[2CB6F5E1AE1543B5B7F740A0D6D918D4]]></AD_COLUMN_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <NAME><![CDATA[Business Partner]]></NAME> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <DESCRIPTION><![CDATA[Anyone who takes part in daily business operations by acting as a customer, employee, etc.]]></DESCRIPTION> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <HELP><![CDATA[A Business Partner is anyone with whom you transact. This can include a customer, vendor, employee or any combination of these.]]></HELP> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <COLUMNNAME><![CDATA[C_Bpartner_ID]]></COLUMNNAME> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_TABLE_ID><![CDATA[09C5EA393D0D41CEBB522DEC67534574]]></AD_TABLE_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_REFERENCE_ID><![CDATA[30]]></AD_REFERENCE_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_REFERENCE_VALUE_ID><![CDATA[800057]]></AD_REFERENCE_VALUE_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <FIELDLENGTH><![CDATA[32]]></FIELDLENGTH> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISKEY><![CDATA[N]]></ISKEY> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISPARENT><![CDATA[N]]></ISPARENT> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISMANDATORY><![CDATA[N]]></ISMANDATORY> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISUPDATEABLE><![CDATA[Y]]></ISUPDATEABLE> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <SEQNO><![CDATA[320]]></SEQNO> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISTRANSLATED><![CDATA[N]]></ISTRANSLATED> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_ELEMENT_ID><![CDATA[187]]></AD_ELEMENT_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <DEVELOPMENTSTATUS><![CDATA[RE]]></DEVELOPMENTSTATUS> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <POSITION><![CDATA[28]]></POSITION> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISTRANSIENT><![CDATA[N]]></ISTRANSIENT> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ALLOWSORTING><![CDATA[Y]]></ALLOWSORTING> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ALLOWFILTERING><![CDATA[Y]]></ALLOWFILTERING> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--> <ALLOWED_CROSS_ORG_LINK><![CDATA[N]]></ALLOWED_CROSS_ORG_LINK> +<!--2CB6F5E1AE1543B5B7F740A0D6D918D4--></AD_COLUMN> + <!--2CC98C761A3F460BB9D88F4E43DD3588--><AD_COLUMN> <!--2CC98C761A3F460BB9D88F4E43DD3588--> <AD_COLUMN_ID><![CDATA[2CC98C761A3F460BB9D88F4E43DD3588]]></AD_COLUMN_ID> <!--2CC98C761A3F460BB9D88F4E43DD3588--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -261051,7 +261090,7 @@ <!--3AE052A78717426CBCB4F828CC76A87E--> <ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE> <!--3AE052A78717426CBCB4F828CC76A87E--> <DEVELOPMENTSTATUS><![CDATA[RE]]></DEVELOPMENTSTATUS> <!--3AE052A78717426CBCB4F828CC76A87E--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> -<!--3AE052A78717426CBCB4F828CC76A87E--> <POSITION><![CDATA[28]]></POSITION> +<!--3AE052A78717426CBCB4F828CC76A87E--> <POSITION><![CDATA[27]]></POSITION> <!--3AE052A78717426CBCB4F828CC76A87E--> <ISTRANSIENT><![CDATA[N]]></ISTRANSIENT> <!--3AE052A78717426CBCB4F828CC76A87E--> <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE> <!--3AE052A78717426CBCB4F828CC76A87E--> <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW> diff -r 83aa5e45d4c8 -r c05369b23139 src-db/database/sourcedata/AD_TAB.xml --- a/src-db/database/sourcedata/AD_TAB.xml Sat Dec 16 18:40:56 2017 +0100 +++ b/src-db/database/sourcedata/AD_TAB.xml Mon Jan 29 11:38:22 2018 +0100 @@ -20229,7 +20229,7 @@ <!--FEFB495F59894AD6A1163D13ABE88833--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> <!--FEFB495F59894AD6A1163D13ABE88833--> <UIPATTERN><![CDATA[STD]]></UIPATTERN> <!--FEFB495F59894AD6A1163D13ABE88833--> <HQLWHERECLAUSE><![CDATA[COALESCE(e.goodsShipment.id, @MaterialMgmtShipmentInOut.id@) = @MaterialMgmtShipmentInOut.id@ -AND @MaterialMgmtShipmentInOut.businessPartner@ = e.orderLine.salesOrder.businessPartner.id]]></HQLWHERECLAUSE> +AND @MaterialMgmtShipmentInOut.businessPartner@ = e.businessPartner.id]]></HQLWHERECLAUSE> <!--FEFB495F59894AD6A1163D13ABE88833--> <HQLORDERBYCLAUSE><![CDATA[obSelected DESC, rMOrderNo, lineNo]]></HQLORDERBYCLAUSE> <!--FEFB495F59894AD6A1163D13ABE88833--> <SHOWPARENTBUTTONS><![CDATA[Y]]></SHOWPARENTBUTTONS> <!--FEFB495F59894AD6A1163D13ABE88833--> <DISABLE_PARENT_KEY_PROPERTY><![CDATA[N]]></DISABLE_PARENT_KEY_PROPERTY> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits