创建BOM的流程和注意事项

一、API字段列表(含义,是否必须,何种情况下必须)

参数名称

参数类型

数据类型

是否必输

默认值

描述

p_bo_identifier        

IN

VARCHAR2

N

BOM

Bo标识

p_api_version_number   

IN

NUMBER

N

1.0

api版本号

p_init_msg_list        

IN

BOOLEAN

N

FALSE

是否初始化消息队列

p_bom_header_rec       

IN

Bom_Bo_Pub.Bom_Head_Rec_Type

N

 

Bom头记录表

p_bom_revision_tbl     

IN

Bom_Bo_Pub.Bom_Revision_Tbl_Type

N

 

Bom版本记录表

p_bom_component_tbl    

IN

Bom_Bo_Pub.Bom_Comps_Tbl_Type

Y

 

Bom组件记录表

p_bom_ref_designator_tbl

IN

Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type

Y

 

Bom替代项记录表

p_bom_sub_component_tbl

IN

Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type

Y

 

Bom子组件记录表

p_bom_comp_ops_tbl     

IN

Bom_Bo_Pub.Bom_Comp_Ops_Tbl_Type

Y

 

Bom组件选项记录表

x_bom_header_rec       

OUT

Bom_Bo_Pub.bom_Head_Rec_Type

Y

 

Bom头记录表

x_bom_revision_tbl     

OUT

Bom_Bo_Pub.Bom_Revision_Tbl_Type

Y

 

Bom版本记录表

x_bom_component_tbl    

OUT

Bom_Bo_pub.Bom_Comps_Tbl_Type

Y

 

Bom组件记录表

x_bom_ref_designator_tbl

OUT

Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type

Y

 

Bom替代项记录表

x_bom_sub_component_tbl

OUT

Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type

Y

 

Bom子组件记录表

x_bom_comp_ops_tbl     

OUT

Bom_Bo_Pub.Bom_Comp_Ops_Tbl_Type

Y

 

Bom组件选项记录表

x_return_status        

OUT

VARCHAR2

N

 

返回状态

x_msg_count            

OUT

NUMBER

N

 

错误数量

p_debug                

IN

VARCHAR2

N

N

是否打开debug

p_output_dir           

IN

VARCHAR2

N

 

输出路径

p_debug_filename       

IN

VARCHAR2

N

BOM_BO_debug.log

debug名字

p_write_err_to_inttable

IN

VARCHAR2

N

N

 

p_write_err_to_conclog 

IN

VARCHAR2

N

N

是否将错误写入并发日志

p_write_err_to_debugfile

IN

VARCHAR2

N

N

是否将错误写入debug文件

bom_bo_pub.bom_head_rec_type

Parameter Name

Data Type

Reqd

INSERT

UPDATE

Value

Validation, Comments

assembly_item_name       

VARCHAR2(240)

Y

Y

N

 

物料

organization_code        

VARCHAR2(3)

Y

Y

N

 

库存组织

alternate_bom_code       

VARCHAR2(10)

N

N

N

 

替代项

common_assembly_item_name

VARCHAR2(240)

N

Y

N

 

 

common_organization_code 

VARCHAR2(3)

N

Y

N

 

 

assembly_comment         

VARCHAR2(240)

N

Y

Y

 

物料描述

assembly_type            

NUMBER

N

Y

N

 

物料类型

transaction_type         

VARCHAR2(30)

N

Y

Y

 

处理类型

return_status            

VARCHAR2(1)

N

Y

Y

 

返回状态

attribute_category       

VARCHAR2(30)

N

Y

Y

 

弹性域类别

attribute1               

VARCHAR2(150)

N

Y

Y

 

键弹性域字段1~15

attribute2               

VARCHAR2(150)

N

Y

Y

 

attribute3               

VARCHAR2(150)

N

Y

Y

 

attribute4               

VARCHAR2(150)

N

Y

Y

 

attribute5               

VARCHAR2(150)

N

Y

Y

 

attribute6               

VARCHAR2(150)

N

Y

Y

 

attribute7               

VARCHAR2(150)

N

Y

Y

 

attribute8               

VARCHAR2(150)

N

Y

Y

 

attribute9               

VARCHAR2(150)

N

Y

Y

 

attribute10              

VARCHAR2(150)

N

Y

Y

 

attribute11              

VARCHAR2(150)

N

Y

Y

 

attribute12              

VARCHAR2(150)

N

Y

Y

 

attribute13              

VARCHAR2(150)

N

Y

Y

 

attribute14              

VARCHAR2(150)

N

Y

Y

 

attribute15              

VARCHAR2(150)

N

Y

Y

 

original_system_reference

VARCHAR2(50)

N

Y

Y

 

 

delete_group_name        

VARCHAR2(10)

N

Y

Y

 

删除组名称

dg_description           

VARCHAR2(240)

N

Y

Y

 

 

row_identifier           

NUMBER

N

Y

Y

 

 

bom_implementation_date  

DATE

N

Y

N

 

 

enable_attrs_update      

VARCHAR2(1)

N

Y

Y

 

是否更新弹性域字段

structure_type_name      

VARCHAR2(80)

N

Y

Y

 

 

bom_bo_pub.bom_revision_tbl_type

Parameter Name

Data Type

Reqd

INSERT

UPDATE

Value

Validation, Comments

assembly_item_name      

VARCHAR2(240)

Y

Y

N

 

物料名称

organization_code       

VARCHAR2(3)

Y

Y

N

 

库存组织

revision                

VARCHAR2(3)

Y

Y

N

 

版本

revision_label          

VARCHAR2(80)

Y

Y

Y

 

版本标签

revision_reason         

VARCHAR2(30)

N

Y

Y

 

版本原因

alternate_bom_code      

VARCHAR2(10)

N

N

N

 

替代项

description             

VARCHAR2(240)

N

Y

Y

 

说明

start_effective_date    

DATE

N

N

N

 

起始有效时间

transaction_type        

VARCHAR2(30)

N

Y

Y

 

处理类型

return_status           

VARCHAR2(1)

N

Y

Y

 

返回状态

attribute_category      

VARCHAR2(30)

N

Y

Y

 

类别

attribute1              

VARCHAR2(150)

N

Y

Y

 

键弹性域字段1~15

attribute2              

VARCHAR2(150)

N

Y

Y

 

attribute3              

VARCHAR2(150)

N

Y

Y

 

attribute4              

VARCHAR2(150)

N

Y

Y

 

attribute5              

VARCHAR2(150)

N

Y

Y

 

attribute6              

VARCHAR2(150)

N

Y

Y

 

attribute7              

VARCHAR2(150)

N

Y

Y

 

attribute8              

VARCHAR2(150)

N

Y

Y

 

attribute9              

VARCHAR2(150)

N

Y

Y

 

attribute10             

VARCHAR2(150)

N

Y

Y

 

attribute11             

VARCHAR2(150)

N

Y

Y

 

attribute12             

VARCHAR2(150)

N

Y

Y

 

attribute13             

VARCHAR2(150)

N

Y

Y

 

attribute14             

VARCHAR2(150)

N

Y

Y

 

attribute15             

VARCHAR2(150)

N

Y

Y

 

original_system_reference

VARCHAR2(50)

N

Y

Y

 

 

row_identifier          

NUMBER

N

N

Y

 

 

bom_bo_pub.bom_comps_tbl_type

Parameter Name

Data Type

Reqd

INSERT

UPDATE             

Value

Validation, Comments

organization_code            

VARCHAR2(3)

Y

Y

N

 

库存组织

assembly_item_name           

VARCHAR2(240)

Y

Y

N

 

装配件名

start_effective_date         

DATE

Y

Y

N

 

有效日期开始时间

disable_date                 

DATE

N

Y

N

 

失效时间

operation_sequence_number    

NUMBER

Y

Y

N

 

工序号

component_item_name          

VARCHAR2(240)

Y

Y

Y

 

组件名

alternate_bom_code           

VARCHAR2(10)

N

N

N

 

替代项

new_effectivity_date         

DATE

N

N

N

 

新有效日期

new_operation_sequence_number

NUMBER

N

Y

Y

 

新工序号

item_sequence_number         

NUMBER

Y

Y

Y

 

物料序号

basis_type                   

NUMBER

N

Y

Y

 

基准

quantity_per_assembly        

NUMBER

N

Y

Y

 

数量

inverse_quantity             

NUMBER

N

Y

Y

 

用量倒数

planning_percent             

NUMBER

N

Y

N

 

计划%

projected_yield              

NUMBER

N

Y

Y

 

产出率

include_in_cost_rollup       

NUMBER

N

Y

Y

 

包括在累计成本中

wip_supply_type              

NUMBER

N

Y

Y

 

供应类型

so_basis                     

NUMBER

N

Y

Y

 

销售订单基准

optional                     

NUMBER

N

N

N

 

可选

mutually_exclusive           

NUMBER

N

N

N

 

互不相容

check_atp                    

NUMBER

N

Y

Y

 

检查ATP

shipping_allowed             

NUMBER

N

Y

Y

 

允许装运

required_to_ship             

NUMBER

N

Y

Y

 

要求装运

required_for_revenue         

NUMBER

N

Y

Y

 

要求确认收入

include_on_ship_docs         

NUMBER

N

Y

Y

 

包括在装运单中

quantity_related             

NUMBER

N

Y

Y

 

 

supply_subinventory          

VARCHAR2(10)

N

Y

Y

 

供应库存

location_name                

VARCHAR2(81)

N

Y

Y

 

货位

minimum_allowed_quantity     

NUMBER

N

Y

Y

 

最小允许数量

maximum_allowed_quantity     

NUMBER

N

Y

Y

 

最大允许数量

comments                     

VARCHAR2(240)

N

Y

Y

 

描述

attribute_category           

VARCHAR2(30)

N

Y

Y

 

弹性域类别

attribute1                   

VARCHAR2(150)

N

Y

Y

 

键弹性域字段1~15

attribute2                   

VARCHAR2(150)

N

Y

Y

 

attribute3                   

VARCHAR2(150)

N

Y

Y

 

attribute4                   

VARCHAR2(150)

N

Y

Y

 

attribute5                   

VARCHAR2(150)

N

Y

Y

 

attribute6                   

VARCHAR2(150)

N

Y

Y

 

attribute7                   

VARCHAR2(150)

N

Y

Y

 

attribute8                   

VARCHAR2(150)

N

Y

Y

 

attribute9                   

VARCHAR2(150)

N

Y

Y

 

attribute10                  

VARCHAR2(150)

N

Y

Y

 

attribute11                  

VARCHAR2(150)

N

Y

Y

 

attribute12                  

VARCHAR2(150)

N

Y

Y

 

attribute13                  

VARCHAR2(150)

N

Y

Y

 

attribute14                  

VARCHAR2(150)

N

Y

Y

 

attribute15                  

VARCHAR2(150)

N

Y

Y

 

from_end_item_unit_number    

VARCHAR2(30)

N

Y

Y

 

 

new_from_end_item_unit_number

VARCHAR2(30)

N

Y

Y

 

 

to_end_item_unit_number      

VARCHAR2(30)

N

Y

Y

 

 

return_status                

VARCHAR2(1)

N

Y

Y

 

返回状态

transaction_type             

VARCHAR2(30)

Y

Y

Y

 

处理类型

original_system_reference    

VARCHAR2(50)

N

Y

Y

 

 

delete_group_name            

VARCHAR2(10)

N

Y

Y

 

删除组名

dg_description               

VARCHAR2(240)

N

Y

Y

 

 

enforce_int_requirements     

VARCHAR2(80)

N

Y

Y

 

 

auto_request_material        

VARCHAR2(1)

N

Y

Y

 

自动请求物料

row_identifier               

NUMBER

N

Y

Y

 

行识别

suggested_vendor_name        

VARCHAR2(240)

N

Y

Y

 

建议供应商名

unit_price                   

NUMBER

N

Y

Y

 

单价

以上是创建BOM所需数据类型中的字段说明

二、创建BOM的时候需要注意的是:

A.普通BOM:

   1.头物料和组件是不是在同一个组织下存在。

   2.头物料存在BOM结构:

    1)当前期间下,是否存在同一组件,不存在则可创建;

    2)物料序号不允许重复

          获取当前最大的物料序号,MAX_ITEM_SEQUENCE_NUMBER=ITEM_SEQUENCE_NUMBER+10;

B.替代BOM:

   1.需要在系统中创建替代项:

   设置:物料清单管理=>设置=>替代项

   创建BOM的流程和注意事项_第1张图片

  2.在需要创建的组织中,头物料需要创建BOM结构(允许没有组件);

在文章的结尾会附上创建和更新的脚本

三、创建公用清单

一般我们都是在主BOM下创建BOM。然后创建公用清单,将BOM结构分配到对应的组织。

 

当然这里同创建BOM结构是相似的。要求在创建BOM结构时,头物料和组件要在对应的组织下存在。

创建共用清单:工具=>创建公用清单

创建BOM的流程和注意事项_第2张图片

以并发请求的形式创建共用清单:

fnd_request.submit_request('BOM',

                                                 'BOMPCMBM', --并发程序名称

                                                 '',

                                                 '',

                                                 FALSE,

                                                3,--公用清单的范围:1.单个组织;2.层次结构;3.所有组织

                                                NULL,--层次结构对应的值

                                                to_number(l_organization_id),--当前组织ID

                                                to_number(l_assembly_item_id),--物料ID

                                                NULL,--替代BOM(替代BOM需要创建公清单才给)

                                                to_number(l_organization_id),

                                                --公用清单的范围是"所有组织"的时候就给当前组织的ID,要是"单个组织"就给要分配的组织ID

                                               NULL,--单个组织需要给对应的物料ID

                                               NULL--是否启用属性更新(Y/N)

                                               );

四、以下是创建BOM的脚本

 

 

DECLARE
  -- API input variables 
  l_bom_header_rec         bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
  l_bom_revision_tbl       bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
  l_bom_component_tbl      bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
  l_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
  l_bom_sub_component_tbl  bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
  -- API output variables 
  x_bom_header_rec         bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
  x_bom_revision_tbl       bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
  x_bom_component_tbl      bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
  x_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
  x_bom_sub_component_tbl  bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
  x_message_list           error_handler.error_tbl_type;
  l_error_table            error_handler.error_tbl_type;
  l_output_dir             VARCHAR2(500) := '/usr/tmp/Test';
  l_debug_filename         VARCHAR2(60) := 'debug_07_16.dbg';
  l_return_status          VARCHAR2(1) := NULL;
  l_msg_count              NUMBER := 0;
  l_cnt                    NUMBER := 1;
  -- WHO columns 
  l_user_id        NUMBER := -1;
  l_resp_id        NUMBER := -1;
  l_application_id NUMBER := -1;
  l_row_cnt        NUMBER := 1;
  l_user_name      VARCHAR2(30) := '登录的用户名';
  l_resp_name      VARCHAR2(30) := '对应的职责关键字';
BEGIN
  -- Get the user_id 
  SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name = l_user_name;
  -- Get the application_id and responsibility_id 
  SELECT application_id,
         responsibility_id
    INTO l_application_id,
         l_resp_id
    FROM fnd_responsibility
   WHERE responsibility_key = l_resp_name;
  -- intiialize applications information 
  fnd_global.apps_initialize(l_user_id, l_resp_id, l_application_id); -- Mfg / Mfg & Dist Mgr / INV 
  dbms_output.put_line('Initialized applications context: ' || l_user_id || ' ' || l_resp_id || ' ' ||
                       l_application_id);
  l_bom_header_rec.assembly_item_name :=   'XXXXYYY'; --头物料
  l_bom_header_rec.organization_code  :=   '组织编码'; --BOM创建的组织
  l_bom_header_rec.assembly_type      :=  1;
  l_bom_header_rec.transaction_type   :=   'CREATE';
     /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
  l_bom_header_rec.return_status      :=  null;
  l_bom_header_rec.assembly_comment   :=   '123465486486NIHAODDDDD'; --头物料说明
  --l_bom_header_rec.alternate_bom_code := 'TD_CM94532'; --替代BOM
  l_cnt :=  1;
  -- initialize BOM components 
  -- component 1 
  /*若BOM不受版本控制,则不需要 l_bom_revision_tbl*/
  --------------------------BOM版本开始-------------------------------------
  l_bom_revision_tbl(l_cnt).assembly_item_name :=   'XXXXYYY'; --组件关联的头物料
  l_bom_revision_tbl(l_cnt).organization_code :=   '组织编码'; --BOM创建的组织
  l_bom_revision_tbl(l_cnt).attribute_category :=   '46548A9SFASDDDDAA';
  l_bom_revision_tbl(l_cnt).revision :=   '1';
  l_bom_revision_tbl(l_cnt).description :=   'nihao';
  l_bom_revision_tbl(l_cnt).transaction_type :=   'CREATE'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
  --------------------------BOM版本结束-----------------------------------------
  --------------------------组件信息--------------------------------------------
  l_bom_component_tbl(l_cnt).start_effective_date :=  sysdate;
    -- to_date('16-JUL-2010 19:30:39','DD-MON-YY HH24:MI:SS'); -- should match timestamp for UPDATE  生效时间
  l_bom_component_tbl(l_cnt).organization_code :=   组织编码';
  l_bom_component_tbl(l_cnt).assembly_item_name :=   'XXXXYYY';
  l_bom_component_tbl(l_cnt).component_item_name :=   'HSST01'; --组件
  l_bom_component_tbl(l_cnt).alternate_bom_code :=  null; --替代项(需要和头物料保持一致)
  l_bom_component_tbl(l_cnt).comments :=   'Created from BOM APIXXXAAA'; --说明
  l_bom_component_tbl(l_cnt).item_sequence_number :=   '40'; --物料序号
  l_bom_component_tbl(l_cnt).operation_sequence_number :=   '1'; --工序
  l_bom_component_tbl(l_cnt).transaction_type :=   'CREATE';
  /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
  l_bom_component_tbl(l_cnt).quantity_per_assembly :=  10; --组件数量
  l_bom_component_tbl(l_cnt).return_status :=  null;
  --------------------------组件信息--------------------------------------------
  -- initialize error stack for logging errors 
  error_handler.initialize;
  -- call API to create / update bill  
  dbms_output.put_line('=======================================================');
  dbms_output.put_line('Calling Bom_Bo_Pub.process_bom API');
  --调用API
  bom_bo_pub.process_bom(p_bo_identifier          => 'BOM',
                         p_api_version_number     => 1.0,
                         p_init_msg_list          => TRUE,
                         p_bom_header_rec         => l_bom_header_rec,
                         p_bom_revision_tbl       => l_bom_revision_tbl,
                         p_bom_component_tbl      => l_bom_component_tbl,
                         p_bom_ref_designator_tbl => l_bom_ref_designator_tbl,
                         p_bom_sub_component_tbl  => l_bom_sub_component_tbl,
                         x_bom_header_rec         => x_bom_header_rec,
                         x_bom_revision_tbl       => x_bom_revision_tbl,
                         x_bom_component_tbl      => x_bom_component_tbl,
                         x_bom_ref_designator_tbl => x_bom_ref_designator_tbl,
                         x_bom_sub_component_tbl  => x_bom_sub_component_tbl,
                         x_return_status          => l_return_status,
                         x_msg_count              => l_msg_count,
                         p_debug                  => 'Y',
                         p_output_dir             => l_output_dir,
                         p_debug_filename         => l_debug_filename);
  dbms_output.put_line('=======================================================');
  dbms_output.put_line('Return Status: ' || l_return_status);
  IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
    dbms_output.put_line('x_msg_count:' || l_msg_count);
    error_handler.get_message_list(x_message_list => l_error_table);
    dbms_output.put_line('Error Message Count :' || l_error_table.count);
    FOR i IN 1 .. l_error_table.count LOOP
      dbms_output.put_line(to_char(i) || ':' || l_error_table(i).entity_index || ':' || l_error_table(i)
                           .table_name);
      dbms_output.put_line(to_char(i) || ':' || l_error_table(i).message_text);
    END LOOP;
  END IF;
  dbms_output.put_line('=======================================================');
END;

更新BOM:

DECLARE
  -- API input variables 
  l_bom_header_rec         bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
  l_bom_revision_tbl       bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
  l_bom_component_tbl      bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
  l_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
  l_bom_sub_component_tbl  bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
  -- API output variables 
  x_bom_header_rec         bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
  x_bom_revision_tbl       bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
  x_bom_component_tbl      bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
  x_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
  x_bom_sub_component_tbl  bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
  x_message_list           error_handler.error_tbl_type;
  l_error_table            error_handler.error_tbl_type;
  l_output_dir             VARCHAR2(500) := '/usr/tmp/hdsp0044';
  l_debug_filename         VARCHAR2(60) := 'su_debug_07_16.dbg';
  l_return_status          VARCHAR2(1) := NULL;
  l_msg_count              NUMBER := 0;
  l_cnt                    NUMBER := 1;
  -- WHO columns 
  l_user_id        NUMBER := -1;
  l_resp_id        NUMBER := -1;
  l_application_id NUMBER := -1;
  l_row_cnt        NUMBER := 1;
  l_user_name      VARCHAR2(30) := 'MFG';
  l_resp_name      VARCHAR2(30) := 'MFG_AND_DIST_SUPER_USER_APS';
BEGIN
  -- Get the user_id 
  SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name = l_user_name;
  -- Get the application_id and responsibility_id 
  SELECT application_id,
         responsibility_id
    INTO l_application_id,
         l_resp_id
    FROM fnd_responsibility
   WHERE responsibility_key = l_resp_name;
  -- intiialize applications information 
  --模拟登陆
  fnd_global.apps_initialize(l_user_id, l_resp_id, l_application_id); -- Mfg / Mfg & Dist Mgr / INV 
  dbms_output.put_line('Initialized applications context: ' || l_user_id || ' ' || l_resp_id || ' ' ||
                       l_application_id);
  -- initialize BOM header 
  l_bom_header_rec.assembly_item_name := 'XXXXYYY'; --头物料
  l_bom_header_rec.organization_code  := '组织编码'; --创建BOM的组织
  l_bom_header_rec.assembly_type      := 1;
  l_bom_header_rec.transaction_type   := 'SYNC'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
  l_bom_header_rec.return_status      := NULL;
  l_bom_header_rec.assembly_comment   := '123465486486NIHAODDDDD'; --头物料的说明
  l_cnt                               := 1;
  --If you want update the bom then you must select the three segments as the header ,so you can success update the bom
  SELECT bic.item_num,
         bic.operation_seq_num,
         effectivity_date
    INTO l_bom_component_tbl(l_cnt).item_sequence_number,
         l_bom_component_tbl(l_cnt).operation_sequence_number,
         l_bom_component_tbl(l_cnt).start_effective_date
    FROM bom_inventory_components bic
   WHERE component_sequence_id = 142091;
  -- initialize BOM components 
  -- component 1 
  --Update bom revision 
  /*若BOM不受版本控制,则不需要 l_bom_revision_tbl*/
  --------------------------BOM版本开始-------------------------------------
  l_bom_revision_tbl(l_cnt).assembly_item_name := 'XXXXYYY'; --组件关联的头物料
  l_bom_revision_tbl(l_cnt).organization_code := '组织编码'; --创建BOM的组织
  l_bom_revision_tbl(l_cnt).attribute_category := '46548A9SFASDDDDAA';
  l_bom_revision_tbl(l_cnt).revision := '1';
  l_bom_revision_tbl(l_cnt).description := 'nihao';
  l_bom_revision_tbl(l_cnt).transaction_type := 'UPDATE'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
  --------------------------BOM版本结束-----------------------------------------
  --------------------------组件信息--------------------------------------------
  --Update bom component 
  l_bom_component_tbl(l_cnt).organization_code := '组织编码'; --创建BOM的组织
  l_bom_component_tbl(l_cnt).assembly_item_name := 'XXXXYYY'; --组件关联的头物料
  l_bom_component_tbl(l_cnt).component_item_name := 'HSST01'; --组件
  l_bom_component_tbl(l_cnt).alternate_bom_code := NULL;
  l_bom_component_tbl(l_cnt).comments := 'Created from BOM APIXXXAAA'; --物料说明
  l_bom_component_tbl(l_cnt).item_sequence_number := '40'; --物料序号
  l_bom_component_tbl(l_cnt).transaction_type := 'UPDATE'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
  l_bom_component_tbl(l_cnt).quantity_per_assembly := 10; --组件数量
  l_bom_component_tbl(l_cnt).return_status := NULL;
  --------------------------组件信息--------------------------------------------
  -- initialize error stack for logging errors 
  error_handler.initialize;
  -- call API to create / update bill  
  dbms_output.put_line('=======================================================');
  dbms_output.put_line('Calling Bom_Bo_Pub.process_bom API');
  --调用API
  bom_bo_pub.process_bom(p_bo_identifier          => 'BOM',
                         p_api_version_number     => 1.0,
                         p_init_msg_list          => TRUE,
                         p_bom_header_rec         => l_bom_header_rec,
                         p_bom_revision_tbl       => l_bom_revision_tbl,
                         p_bom_component_tbl      => l_bom_component_tbl,
                         p_bom_ref_designator_tbl => l_bom_ref_designator_tbl,
                         p_bom_sub_component_tbl  => l_bom_sub_component_tbl,
                         x_bom_header_rec         => x_bom_header_rec,
                         x_bom_revision_tbl       => x_bom_revision_tbl,
                         x_bom_component_tbl      => x_bom_component_tbl,
                         x_bom_ref_designator_tbl => x_bom_ref_designator_tbl,
                         x_bom_sub_component_tbl  => x_bom_sub_component_tbl,
                         x_return_status          => l_return_status,
                         x_msg_count              => l_msg_count,
                         p_debug                  => 'Y',
                         p_output_dir             => l_output_dir,
                         p_debug_filename         => l_debug_filename);
  dbms_output.put_line('=======================================================');
  dbms_output.put_line('Return Status: ' || l_return_status);
  IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
    dbms_output.put_line('x_msg_count:' || l_msg_count);
    error_handler.get_message_list(x_message_list => l_error_table);
    dbms_output.put_line('Error Message Count :' || l_error_table.count);
    FOR i IN 1 .. l_error_table.count LOOP
      dbms_output.put_line(to_char(i) || ':' || l_error_table(i).entity_index || ':' || l_error_table(i)
                           .table_name);
      dbms_output.put_line(to_char(i) || ':' || l_error_table(i).message_text);
    END LOOP;
  END IF;
  dbms_output.put_line('=======================================================');
END;

你可能感兴趣的:(EBS,技术)