Wednesday, March 8, 2017

BOM

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_INTERFACE
2. BOM_INVENTORY_COMPS_INTERFACE
3. BOM_REF_DESGS_INTERFACE
4. BOM_SUB_COMPS_INTERFACE
5. MTL_ITEM_REVISIONS_INTERFACE
Open Bills of Material Tables
1. bom_bill_of_materials
2. bom_inventory_components
3. bom_reference_designators
4. bom_substitute_components
5. mtl_item_revisions
Oracle Routing
Open Routing Interface
1. BOM_OP_ROUTINGS_INTERFACE
2. BOM_OP_SEQUENCES_INTERFACE
3. BOM_OP_RESOURCES_INTERFACE
4. MTL_RTG_ITEM_REVS_INTERFACE
Open Routing Tables
1. bom_operational_routings
2. bom_operation_sequences
3. 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



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.

                 BOM_BILL_OF_MTLS_INTERFACE
                 BOM_INVENTORY_COMPS_INTERFACE
Insert command :

            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
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;

No comments:

Post a Comment

Oracle Fusion - Cost Lines and Expenditure Item link in Projects

SELECT   ccd.transaction_id,ex.expenditure_item_id,cacat.serial_number FROM fusion.CST_INV_TRANSACTIONS cit,   fusion.cst_cost_distribution_...