Query to get opening, purchasing, receive, sales and closing quantity of items

Introduction

This post is about to get an opening, purchasing, receive, sales, and closing quantity of items query.

 

Script to get opening, purchasing, receive, sales and closing quantity of items.

SELECT *

FROM (SELECT   b.item_code, b.item_description item_description,

b.primary_uom, b.sub_inventory, b.LOCATOR,

b.opening_qty opening_qty, b.opening_value opening_value,

SUM (b.purchase_qty) purchase_qty,

SUM (b.purchasing_value) purchasing_value,

SUM (b.receive_qty) receive_qty,

SUM (b.receive_value) receive_value,

SUM (b.sales_qty) sales_qty, SUM (b.sale_value) sale_value,

SUM (b.other_plant_qty) other_plant_qty,

SUM (b.other_plant_value) other_plant_value,

(SUM (b.purchase_qty) + SUM (b.receive_qty) + b.opening_qty

)

– (ABS (SUM (b.sales_qty)) – SUM (b.other_plant_qty))

closing_qty,

(  (  (  SUM (b.purchase_qty)

+ SUM (b.receive_qty)

+ b.opening_qty

)

– (ABS (SUM (b.sales_qty)) – SUM (b.other_plant_qty))

)

* cmpnt_cost

) closing_value,

cmpnt_cost

FROM (SELECT a.item_code, a.item_description, a.primary_uom,

a.sub_inventory, a.LOCATOR,

NVL (a.opening_qty, 0) opening_qty,

(NVL (opening_qty, 0) * cmpnt_cost) opening_value,

a.purchase_qty,

NVL (purchase_qty, 0) * cmpnt_cost purchasing_value,

a.receive_qty,

NVL (receive_qty, 0) * cmpnt_cost receive_value,

a.sales_qty,

NVL (sales_qty, 0) * cmpnt_cost sale_value,

a.other_plant_qty,

NVL (other_plant_qty, 0)

* cmpnt_cost other_plant_value,

cmpnt_cost

FROM (SELECT   msib.segment1 item_code,

msib.description item_description,

msib.primary_uom_code primary_uom,

msi.secondary_inventory_name sub_inventory,

(SELECT SUM

(CASE

WHEN mmt1.transaction_type_id IN

(36,15,63,52,21)

THEN DECODE

(mmt1.primary_quantity

,

1, 0,

mmt1.primary_quantity

)

WHEN mmt1.transaction_type_id IN

(18, 12, 42, 43, 61,

33,35, 32, 34, 54,

62,21)

THEN mmt1.primary_quantity

ELSE 0

END

)

FROM mtl_material_transactions mmt1,

mtl_transaction_types mtt1

WHERE 1 = 1

AND mmt1.transaction_type_id =

mtt1.transaction_type_id

AND mmt1.organization_id =

msib.organization_id

AND mmt1.subinventory_code =

msi.secondary_inventory_name

AND mmt1.inventory_item_id =

msib.inventory_item_id

AND (mmt1.locator_id =

mil.inventory_location_id OR mil.inventory_location_id IS NULL)

AND TRUNC (mmt1.transaction_date) <

TRUNC (TO_DATE (:p_from_date)))

opening_qty,

mil.concatenated_segments LOCATOR,

TRUNC

(mmt.transaction_date)

transaction_date,

SUM

(CASE

WHEN mmt.transaction_type_id IN

(36)

THEN DECODE

(primary_quantity,

1, 0,

primary_quantity

)

WHEN mmt.transaction_type_id = 18

THEN primary_quantity

ELSE 0

END

) purchase_qty,

SUM

(CASE

WHEN mmt.subinventory_code LIKE

‘Staging_SI’

THEN

CASE

WHEN mmt.transaction_type_id IN

(12, 42, 43, 61,

15, 52)

THEN primary_quantity

ELSE 0

END

ELSE

CASE

WHEN mmt.transaction_type_id IN

(12, 42, 43, 61, 15)

THEN primary_quantity

ELSE 0

END

END

) receive_qty,

(SUM

(CASE

WHEN mmt.subinventory_code LIKE

‘Staging_SI’

THEN CASE

 

WHEN mmt.transaction_type_id IN

(33, 35)

THEN primary_quantity

ELSE 0

END

ELSE CASE

 

WHEN mmt.transaction_type_id IN

(33, 35, 52,21)

THEN primary_quantity

ELSE 0

END

END

)

) sales_qty,

(SELECT (SUM

(CASE

WHEN mmt1.transaction_type_id IN

(36, 15)

THEN DECODE

(mmt1.primary_quantity

,

1, 0,

mmt1.primary_quantity

)

WHEN mmt1.transaction_type_id IN

(18, 12, 42, 43, 61,

33, 35, 32, 34, 54,

62, 52)

THEN mmt1.primary_quantity

ELSE 0

END

)

)

FROM mtl_material_transactions mmt1,

mtl_transaction_types mtt1

WHERE 1 = 1

AND mmt1.transaction_type_id =

mtt1.transaction_type_id

AND mmt1.organization_id =

msib.organization_id

AND mmt1.subinventory_code =

mil.subinventory_code

AND mmt1.inventory_item_id =

msib.inventory_item_id

AND mmt1.subinventory_code = msi.secondary_inventory_name

AND mmt1.locator_id =

mil.inventory_location_id

AND TRUNC (mmt1.transaction_date) =

TRUNC (mmt.transaction_date))

closing_qty,

SUM

(CASE

WHEN mmt.subinventory_code LIKE

‘SLT_SI’

THEN CASE

 

WHEN mmt.transaction_type_id IN

(32, 34, 54, 62, 63)

THEN primary_quantity

ELSE 0

END

 

WHEN mmt.subinventory_code LIKE

‘RM_SI’

THEN CASE

 

WHEN mmt.transaction_type_id IN

(34, 54, 62, 63)

THEN primary_quantity

ELSE 0

END

 

ELSE CASE

 

WHEN mmt.transaction_type_id IN

(32, 34, 54, 62, 63,64)

THEN primary_quantity

ELSE 0

END

END

) other_plant_qty,

xx_item_costs

(msib.inventory_item_id,

msib.organization_id,

:p_to_date,

:p_from_date

) cmpnt_cost

FROM mtl_system_items_b msib,

mtl_secondary_inventories msi,

mtl_item_locations_kfv mil,

mtl_item_categories mic,

mtl_categories_kfv mcb,

org_organization_definitions ood,

mtl_material_transactions mmt,

mtl_transaction_types mtt

WHERE 1 = 1

AND ood.organization_id = msib.organization_id

AND msib.organization_id = msi.organization_id

AND msi.secondary_inventory_name(+) =

mmt.subinventory_code

AND mic.inventory_item_id =

msib.inventory_item_id

AND mic.organization_id = msib.organization_id

AND mic.category_id = mcb.category_id

AND msib.organization_id = :p_organization_id

AND msi.secondary_inventory_name =

NVL (:p_sub_inventory,

msi.secondary_inventory_name

)

AND (   mil.concatenated_segments =

NVL (:p_locator,

mil.concatenated_segments

)

OR mil.concatenated_segments IS NULL

)

AND mcb.segment1 =

NVL (:p_segment1, mcb.segment1)

AND mcb.segment2 =

NVL (:p_segment2, mcb.segment2)

AND mcb.segment3 =

NVL (:p_segment3, mcb.segment3)

AND mcb.segment4 =

NVL (:p_segment4, mcb.segment4)

AND ood.operating_unit = :p_org_id

AND mmt.transaction_type_id =

mtt.transaction_type_id

AND mmt.transaction_type_id IN

(18, 12, 42, 43, 61, 33, 35, 32, 34, 54,

62, 36, 15, 52, 63, 64,21)

AND mmt.organization_id = msib.organization_id(+)

AND mmt.subinventory_code = mil.subinventory_code(+)

AND mmt.locator_id = mil.inventory_location_id(+)

AND mmt.inventory_item_id = msib.inventory_item_id(+)

AND TRUNC (mmt.transaction_date)

BETWEEN TRUNC (TO_DATE (:p_from_date))

AND TRUNC (TO_DATE (:p_to_date))

AND category_set_id = 1

—  AND MMT.INVENTORY_ITEM_ID=24256

GROUP BY msib.segment1,

msib.description,

msib.primary_uom_code,

msi.secondary_inventory_name,

mil.concatenated_segments,

TRUNC (mmt.transaction_date),

msib.organization_id,

mil.subinventory_code,

mil.inventory_location_id,

msib.inventory_item_id) a) b

GROUP BY b.item_code,

b.item_description,

b.primary_uom,

b.sub_inventory,

b.LOCATOR,

b.opening_qty,

b.opening_value,

cmpnt_cost

HAVING (   b.opening_qty <> 0

OR SUM (b.purchase_qty) <> 0

OR SUM (b.receive_qty) <> 0

OR SUM (b.sales_qty) <> 0

OR SUM (b.other_plant_qty) <> 0

OR   (  SUM (b.purchase_qty)

+ SUM (b.receive_qty)

+ b.opening_qty

)

– (ABS (SUM (b.sales_qty)) – SUM (b.other_plant_qty)) <>

0

)

ORDER BY b.item_code, b.sub_inventory, b.LOCATOR)

UNION ALL

SELECT a.item_code, a.item_description, a.primary_uom, a.sub_inventory,

a.LOCATOR, NVL (a.opening_qty, 0) opening_qty, NVL(a.opening_qty * a.cmpnt_cost,0) opening_value,

NVL(a.purchase_qty,0) purchase_qty, NVL(a.purchasing_value,0) purchasing_value, NVL(a.receive_qty,0) receive_qty,

NVL(a.receive_value,0)receive_value,

NVL(a.sales_qty,0) sales_qty, NVL(a.sale_value,0)sale_value, NVL(a.other_plant_qty,0) other_plant_qty, NVL(a.other_plant_value,0)other_plant_value,

NVL (a.closing_qty, 0) closing_qty, NVL(a.closing_qty * a.cmpnt_cost,0) closing_value,

a.cmpnt_cost

FROM(SELECT   msib.segment1 item_code, msib.description item_description,

msib.primary_uom_code primary_uom,

msi.secondary_inventory_name sub_inventory,

mil.concatenated_segments LOCATOR,

(SELECT SUM

(CASE

WHEN mmt1.transaction_type_id IN

(36,15,52,63,21)

THEN DECODE (mmt1.primary_quantity,

1, 0,

mmt1.primary_quantity

)

WHEN mmt1.transaction_type_id IN

(18, 12, 42, 43, 61, 33, 35, 32, 34, 54,62)

THEN mmt1.primary_quantity

ELSE 0

END

)

FROM mtl_material_transactions mmt1, mtl_transaction_types mtt1

WHERE  1 = 1

AND mmt1.transaction_type_id = mtt1.transaction_type_id

AND mmt1.organization_id = msib.organization_id

AND mmt1.subinventory_code = msi.secondary_inventory_name

AND msi.organization_id = :p_organization_id

AND mmt1.inventory_item_id = msib.inventory_item_id

AND mmt1.locator_id = mil.inventory_location_id

AND mmt1.organization_id = :p_organization_id

AND TRUNC (mmt1.transaction_date) <

TRUNC (TO_DATE (:p_from_date)))

opening_qty,

NULL purchase_qty, NULL purchasing_value, NULL receive_qty,

NULL receive_value, NULL sales_qty, NULL sale_value,

NULL other_plant_qty, NULL other_plant_value,

(SELECT (SUM

(CASE

WHEN mmt1.transaction_type_id IN

(36, 15,21)

THEN DECODE

(mmt1.primary_quantity,

1, 0,

mmt1.primary_quantity

)

WHEN mmt1.transaction_type_id IN

(18, 12, 42, 43, 61,

33, 35, 32, 34, 54,

62,52)

THEN mmt1.primary_quantity

ELSE 0

END

)

)

FROM mtl_material_transactions mmt1,

mtl_transaction_types mtt1

WHERE 1 = 1

AND mmt1.transaction_type_id =

mtt1.transaction_type_id

AND mmt1.organization_id =msib.organization_id

AND mmt1.subinventory_code =mil.subinventory_code

AND mmt1.inventory_item_id = msib.inventory_item_id

AND mmt1.subinventory_code = msi.secondary_inventory_name

AND mmt1.locator_id = mil.inventory_location_id

AND TRUNC (mmt1.transaction_date) <= TRUNC (TO_DATE (:p_to_date)))closing_qty,

xx_item_costs (msib.inventory_item_id,

msib.organization_id,

:p_to_date,

:p_from_date

) cmpnt_cost

FROM mtl_secondary_inventories msi,

mtl_item_locations_kfv mil,

mtl_system_items_b msib,

org_organization_definitions ood,

mtl_item_categories mic,

mtl_categories_kfv mcb,

mtl_material_transactions mmt,

mtl_transaction_types mtt

WHERE 1 = 1

AND ood.organization_id = msib.organization_id

AND msib.organization_id = msi.organization_id

AND msi.secondary_inventory_name = mil.subinventory_code

AND msib.organization_id = :p_organization_id

AND ood.operating_unit = :p_org_id

AND mic.inventory_item_id = msib.inventory_item_id

AND mic.organization_id = msib.organization_id

AND mic.category_id = mcb.category_id

AND msi.secondary_inventory_name =

NVL (:p_sub_inventory, msi.secondary_inventory_name)

AND mil.concatenated_segments =

NVL (:p_locator, mil.concatenated_segments)

AND mcb.segment1 = NVL (:p_segment1, mcb.segment1)

AND mcb.segment2 = NVL (:p_segment2, mcb.segment2)

AND mcb.segment3 = NVL (:p_segment3, mcb.segment3)

AND mcb.segment4 = NVL (:p_segment4, mcb.segment4)

AND category_set_id = 1

AND msib.inventory_item_id NOT IN (

SELECT inventory_item_id

FROM mtl_material_transactions mmt

WHERE 1 = 1

AND TRUNC (mmt.transaction_date)

BETWEEN TRUNC (TO_DATE (:p_from_date))

AND TRUNC (TO_DATE (:p_to_date))

AND mmt.organization_id = :p_organization_id

AND mmt.subinventory_code= mil.subinventory_code)

AND mmt.transaction_type_id = mtt.transaction_type_id

AND mmt.subinventory_code =mil.subinventory_code

AND mmt.inventory_item_id = msib.inventory_item_id

AND mmt.subinventory_code = msi.secondary_inventory_name

AND mmt.locator_id = mil.inventory_location_id

— AND MMT.INVENTORY_ITEM_ID=24256

GROUP BY msib.segment1,

msib.description,

msib.primary_uom_code,

msib.inventory_item_id,

msib.organization_id,

msi.secondary_inventory_name,

mil.inventory_location_id,

msi.organization_id,

mil.subinventory_code,

mil.concatenated_segments)a

where ( a.opening_qty <> 0

OR a.closing_qty <> 0 )

What we expect in the script.

This script helps us to comprehend how to get opening, purchasing, receive, sales and closing quantity of items. Couple of tables which is being used aremtl_secondary_inventories,mtl_item_locations_kfv,  mtl_system_items_b,org_organization_definitions, mtl_item_categories,mtl_categories_kfv,mtl_material_transactions,mtl_transaction_types mtt etc.

 

Summary

This Post described the script how to get opening, purchasing, receive, sales and closing quantity of items in Oracle EBS R12.

 

Got any queries?

Do drop a note by writing us at doyen.ebiz@gmail.com or use the comment section below to ask your questions

 

 

 

 

Recent Posts