Oracle Apps BOM basic Technical Interview Questions
1. How many Types of BOM item types are there?
Four
2. An alternate manufacturing process you can use to produce an assembly.
Alternate Routing
3. A set of items, bills, and routing can be deleted using?
Delete group
4. A list of component items associated with a parent item and information about how each item related to the parent item is?
Bill of Material
5. An assembly that uses the bill of material of another assembly as its bill is called as
Common Bill of Material
6. An alternate list of component items you can use to produce an assembly is called as
Alternate Bill of Material
7. The number of units of a resource available in a department is?
Capacity Units
8. Select the correct BOM item type among the following?
A. standard Bill
B. Model Bill,
C. Option Class
D. Planning Items
9. A routing that uses the routing of another assembly as its routing is called as
Common Routing
10. A business rule that restricts the entities to delete is called as
Deletion Constraint
11. An area within your organization that consists of one or more people, machines, or
Suppliers is called as
Department
12. A group of departments is called?
Department Class
13. A prototype part, material, sub assembly, assembly, or product you have not yet released to production.
Engineering item
14. A resource whose capacity can be shared with other departments is called as
Multi Department Resource
15. The time required to receive a purchased item into inventory from the initial supplier receipt, such as the time required to deliver an order from the receiving dock to its final destination is?
Post processing lead time
16. The time required to place a purchase order or create a discrete job or repetitive schedule is called as
Pre-processing lead time
17. The time required to procure or manufacture an item is called as
Processing lead time
18. An optional identifier you can assign to a component on a bill is called as
Reference Designator
19. Anything of value, except material and cash, required to manufacture, cost, and
Schedule products is called as
Resource
20. A scheduled period of work for a department within an organization is called as
Shift
21. A group of capacity modifications for resource shifts to simulate, plan, or schedule
Capacity is called as
Simulation Set
22. A calendar that identifies available workdays for one or more organizations is?
Workday Calendar
23. Dates that define plant or shift workday variations, including holidays, scheduled maintenance, or extended downtime is called as
Workday Exceptions
24. The amount of a resource consumed at an operation is called as
Usage Rate
25. The frozen standard unit cost for a resource is called as
Standard Rate
26. Subdivision of an organization, representing either a physical area or a logical
Grouping of items, such as a storeroom or receiving dock is called as
Sub inventory
Interface and respective Tables Used in Oracle BOM and WIP
Following are Interface and there respective tables Used in Oracle BOM and WIP
Oracle Bill of Material
Open Bills of Material Interface
1. BOM_BILL_OF_MTLS_INTERFACE2. BOM_INVENTORY_COMPS_INTERFACE3. BOM_REF_DESGS_INTERFACE4. BOM_SUB_COMPS_INTERFACE5. MTL_ITEM_REVISIONS_INTERFACE
Open Bills of Material Tables
1. bom_bill_of_materials2. bom_inventory_components3. bom_reference_designators4. bom_substitute_components5. mtl_item_revisions
Oracle Routing
Open Routing Interface
1. BOM_OP_ROUTINGS_INTERFACE2. BOM_OP_SEQUENCES_INTERFACE3. BOM_OP_RESOURCES_INTERFACE4. MTL_RTG_ITEM_REVS_INTERFACE
Open Routing Tables
1. bom_operational_routings2. bom_operation_sequences3. bom_operation_resources
Oracle Bills of Material (BOM) Tables
Oracle Bills of Material (BOM) Tables
bom_bill_of_materials
bom_inventory_components
bom_reference_designators
bom_substitute_components
mtl_item_revisions
bom_operational_routings
bom_operation_sequences
bom_operation_resources
BOM_BILL_OF_MTLS_INTERFACE
BOM_INVENTORY_COMPS_INTERFACE
BOM_REF_DESGS_INTERFACE
BOM_SUB_COMPS_INTERFACE
MTL_ITEM_REVISIONS_INTERFACE
BOM_OP_ROUTINGS_INTERFACE
BOM_OP_SEQUENCES_INTERFACE
BOM_OP_RESOURCES_INTERFACE
MTL_RTG_ITEM_REVS_INTERFACE
bom_inventory_components
bom_reference_designators
bom_substitute_components
mtl_item_revisions
bom_operational_routings
bom_operation_sequences
bom_operation_resources
BOM_BILL_OF_MTLS_INTERFACE
BOM_INVENTORY_COMPS_INTERFACE
BOM_REF_DESGS_INTERFACE
BOM_SUB_COMPS_INTERFACE
MTL_ITEM_REVISIONS_INTERFACE
BOM_OP_ROUTINGS_INTERFACE
BOM_OP_SEQUENCES_INTERFACE
BOM_OP_RESOURCES_INTERFACE
MTL_RTG_ITEM_REVS_INTERFACE
Mandatory columns needed to insert data into BOM Interface tables
Mandatory columns needed to insert data into BOM Interface tables
Here is a snippet of code which tells about the mandatory columns needed to insert the data into BOM Interface tables.
There are two BOM Interface tables, which needs to be populated in order to create BOM.
INSERT INTO bom_bill_of_mtls_interface(
assembly_item_id
,organization_id
,bill_sequence_id
,item_number
,item_description
,last_update_date
,last_updated_by
,creation_date
,created_by
,last_update_login
,transaction_type
,process_flag
)
VALUES( <assembly_item_id>
,<organization_id>
,<bill_sequence_id>
,<assembly_item_number>
,<description>
,SYSDATE
,<user_id>
,SYSDATE
,user_id
,user_id
,<CREATE or UPDATE> -- If it is update, then bill sequence id is required, else NULL
,1
);
INSERT INTO BOM_INVENTORY_COMPS_INTERFACE
( component_item_id
,assembly_item_id
,organization_id
,item_num
,operation_seq_num
,effectivity_date
,transaction_type
,process_flag
,bill_sequence_id
,component_sequence_id
,item_description
,basis_type
,component_quantity
,component_yield_factor
,implementation_date
,supply_subinventory
,wip_supply_type
,so_basis
,check_atp
,planning_factor
,low_quantity
,high_quantity
,last_update_date
,last_updated_by
,creation_date
,created_by
,last_update_login
,component_remarks
)
values
(
<component_item_id>
,<assembly_item_id>
,<organization_id>
,<item_seq_num>
,<operation_sequence>
,SYSDATE
,<CREATE or UPDATE> -- If it is update, then Component sequence id is required, else NULL
,1
,<bill_sequence_id> -- If transaction type is UPDATE, then this value is required else NULL
,<comp_sequence_id> -- If transaction type is UPDATE, then this value is required else NULL
,<com_description>
,DECODE(basis_type,1,NULL,2)
,<component_quantity>
,<component_yield_factor>
,<implementation_date>
,<supply_subinventory>
,<l_wip_supply_type> -- lookup code from MFG_LOOKUPS where lookup_type = 'WIP_SUPPLY'
,<so_basis>
,DECODE(check_atp,'Y',1,'N',2)
,<planning_factor>
,<low_quantity>
,<high_quantity>
,SYSDATE
,user_id
,SYSDATE
,user_id
,user_id
,'BOM Migration'
);
Once data is successfully loaded, then call the standard oracle concurrent program : Bill and Routing Interface to upload the data from interface tables to Base tables.
There are two BOM Interface tables, which needs to be populated in order to create BOM.
BOM_BILL_OF_MTLS_INTERFACEInsert command :
BOM_INVENTORY_COMPS_INTERFACE
INSERT INTO bom_bill_of_mtls_interface(
assembly_item_id
,organization_id
,bill_sequence_id
,item_number
,item_description
,last_update_date
,last_updated_by
,creation_date
,created_by
,last_update_login
,transaction_type
,process_flag
)
VALUES( <assembly_item_id>
,<organization_id>
,<bill_sequence_id>
,<assembly_item_number>
,<description>
,SYSDATE
,<user_id>
,SYSDATE
,user_id
,user_id
,<CREATE or UPDATE> -- If it is update, then bill sequence id is required, else NULL
,1
);
INSERT INTO BOM_INVENTORY_COMPS_INTERFACE
( component_item_id
,assembly_item_id
,organization_id
,item_num
,operation_seq_num
,effectivity_date
,transaction_type
,process_flag
,bill_sequence_id
,component_sequence_id
,item_description
,basis_type
,component_quantity
,component_yield_factor
,implementation_date
,supply_subinventory
,wip_supply_type
,so_basis
,check_atp
,planning_factor
,low_quantity
,high_quantity
,last_update_date
,last_updated_by
,creation_date
,created_by
,last_update_login
,component_remarks
)
values
(
<component_item_id>
,<assembly_item_id>
,<organization_id>
,<item_seq_num>
,<operation_sequence>
,SYSDATE
,<CREATE or UPDATE> -- If it is update, then Component sequence id is required, else NULL
,1
,<bill_sequence_id> -- If transaction type is UPDATE, then this value is required else NULL
,<comp_sequence_id> -- If transaction type is UPDATE, then this value is required else NULL
,<com_description>
,DECODE(basis_type,1,NULL,2)
,<component_quantity>
,<component_yield_factor>
,<implementation_date>
,<supply_subinventory>
,<l_wip_supply_type> -- lookup code from MFG_LOOKUPS where lookup_type = 'WIP_SUPPLY'
,<so_basis>
,DECODE(check_atp,'Y',1,'N',2)
,<planning_factor>
,<low_quantity>
,<high_quantity>
,SYSDATE
,user_id
,SYSDATE
,user_id
,user_id
,'BOM Migration'
);
Once data is successfully loaded, then call the standard oracle concurrent program : Bill and Routing Interface to upload the data from interface tables to Base tables.
Exploding BOM - bompxinq.exploder_userexit
The main purpose of exploding BOM is to get the details from the temporary table that oracle uses to hold data. Its session based. So once you are out of that session the data is gone. BOM_SMALL_EXPL_TEMP is the table used to hold the data in a session.
Data cannot be retrived be querying the View from FORM --> HELP-->Record History.
Hence explode the BOM for the Item you needed data.
There are many ways of holding the data.You can write to a file, print report so on..Its upto you.
In this post i used a table BOM_SMALL_EXPL_TEMP1 to hold the data. Remember its not a temporary table, its a copy of BOM_SMALL_EXPL_TEMP with all the columns.
I too found it difficult to find the values to explode BOM. So i have explored the standard oracle form to find out what columns its uses to explode. All the comments after assignments are the standard oracle Block.FieldName (Block Name -> B_BILL_OF_MATLS). So you can pass the values of your Appliction if needed.
Version : 12.0.6
Once you are done compiling execute the following command to insert the data into the table you have created in the above case its BOM_SMALL_EXPL_TEMP1.
Begin
EAM_BOM_EXPLODE(p_item_id);
End;
/
select * from BOM_SMALL_EXPL_TEMP1;
Data cannot be retrived be querying the View from FORM --> HELP-->Record History.
Hence explode the BOM for the Item you needed data.
There are many ways of holding the data.You can write to a file, print report so on..Its upto you.
In this post i used a table BOM_SMALL_EXPL_TEMP1 to hold the data. Remember its not a temporary table, its a copy of BOM_SMALL_EXPL_TEMP with all the columns.
I too found it difficult to find the values to explode BOM. So i have explored the standard oracle form to find out what columns its uses to explode. All the comments after assignments are the standard oracle Block.FieldName (Block Name -> B_BILL_OF_MATLS). So you can pass the values of your Appliction if needed.
Version : 12.0.6
create or replace Procedure EAM_BOM_EXPLODE
( p_item_id in number ) /* The BOM assembly which you want to explode */
is
v_group_id NUMBER;
x_error_message VARCHAR2 (2000);
x_error_code NUMBER;
sess_id number;
l_rec_count number;
begin
fnd_global.apps_initialize(<>,<>,<>);
delete from BOM_SMALL_EXPL_TEMP1;
commit;
SELECT bom_explosion_temp_s.NEXTVAL
INTO v_group_id
FROM DUAL;
SELECT bom_explosion_temp_session_s.NEXTVAL
INTO sess_id
FROM Dual ;
bompxinq.exploder_userexit(
Verify_Flag => 0,
Org_Id => **ORG_ID**,
Order_By => 1,--:B_Bill_Of_Matls.Bom_Bill_Sort_Order_Type,
Grp_Id => v_group_id,
Session_Id => 0,
Levels_To_Explode => 20, --:B_Bill_Of_Matls.Levels_To_Explode,
Bom_Or_Eng => 1, -- :Parameter.Bom_Or_Eng,
Impl_Flag => 1, --:B_Bill_Of_Matls.Impl_Only,
Plan_Factor_Flag => 2, --:B_Bill_Of_Matls.Planning_Percent,
Explode_Option => 3, --:B_Bill_Of_Matls.Bom_Inquiry_Display_Type,
Module => 2,--:B_Bill_Of_Matls.Costs,
Cst_Type_Id => 0,--:B_Bill_Of_Matls.Cost_Type_Id,
Std_Comp_Flag => 2,
Expl_Qty => 1,--:B_Bill_Of_Matls.Explosion_Quantity,
Item_Id => p_item_id,--:B_Bill_Of_Matls.Assembly_Item_Id,
Alt_Desg => null,--:B_Bill_Of_Matls.Alternate_Bom_Designator,
Comp_Code => null,
Unit_Number_From => 0, --NVL(:B_Bill_Of_Matls.Unit_Number_From, :CONTEXT.UNIT_NUMBER_FROM),
Unit_Number_To => 'ZZZZZZZZZZZZZZZZZ', --NVL(:B_Bill_Of_Matls.Unit_Number_To, :CONTEXT.UNIT_NUMBER_TO),
Rev_Date => sysdate, --:B_Bill_Of_Matls.Disp_Date,
Show_Rev => 1, -- yes
Material_Ctrl => 2, --:B_Bill_Of_Matls.Material_Control,
Lead_Time => 2, --:B_Bill_Of_Matls.Lead_Time,
err_msg => x_error_message, --err_msg
error_code => x_error_code); --error_code
select count(*) into l_rec_count from
--BOM_EXPLOSION_TEMP temp
BOM_SMALL_EXPL_TEMP temp where temp.group_id = v_group_id;
DBMS_OUTPUT.PUT_LINE('l_rec_count = '||l_rec_count);
insert into BOM_SMALL_EXPL_TEMP1 select * from BOM_SMALL_EXPL_TEMP;
commit;
DBMS_OUTPUT.PUT_LINE(x_error_message);
DBMS_OUTPUT.PUT_LINE(x_error_code);
DBMS_OUTPUT.PUT_LINE('grp_id = '||v_group_id);
DBMS_OUTPUT.PUT_LINE('sess_id = '||sess_id);
End;
Once you are done compiling execute the following command to insert the data into the table you have created in the above case its BOM_SMALL_EXPL_TEMP1.
Begin
EAM_BOM_EXPLODE(p_item_id);
End;
/
select * from BOM_SMALL_EXPL_TEMP1;