BAPI_PRODORD_CREATE 生产订单创建
BAPI_PRODORD_CHANGE 生产订单修改
BAPI_PRODORD_SET_DELETION_FLAG 生产订单删除
PERFORM frm_create_co01 USING 'I'. " I Insert U Update D Delete
*&---------------------------------------------------------------------*
*& Form frm_create_co01
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_co01 USING iv_updkz TYPE updkz_d.
DEFINE df_ins.
IF &2 IS NOT INITIAL.
&1 = &2.
&3 = &4.
ENDIF.
END-OF-DEFINITION.
" 新建
DATA: ls_orderdata TYPE bapi_pp_order_create,
ls_fsh_prodord_season TYPE fsh_s_bapi_prodord_season.
" 修改
DATA: ls_orderdata_u TYPE bapi_pp_order_change,
ls_orderdatax_u TYPE bapi_pp_order_changex.
" 删除
DATA: lt_orderdata_d TYPE TABLE OF bapi_order_key,
lt_return TYPE TABLE OF bapi_order_return.
" 通用
DATA: ls_return TYPE bapiret2,
lv_aufnr TYPE aufnr.
CASE iv_updkz.
WHEN 'I'. " 新建
ls_orderdata = VALUE #(
material = 'MATNR18' " 物料18长度
material_long = 'MATNR' " 物料(如果物料不算前置0长度超过18, 需要往material_long放值)
goods_recipient = 'WEMPF' " 收货方
unloading_point = 'ABLAD' " 卸货点
storage_location = 'LGORT' " 库存地点
plant = 'WERKS' " 工厂
order_type = 'AUART' " 订单类型
basic_start_date = 'GSTRP' " 基本开始日期
basic_end_date = 'GLTRP' " 基本结束日期
quantity = 'GAMNG' " 数量
quantity_uom = 'GMEIN' " 单位
mrp_controller = 'DISPO' " MRP控制员
order_priority = 'APRIO' " 优先级
profit_center = 'PRCTR' " 利润中心
routing_type = 'PLNTY' " 任务清单类型
routing_group = 'PLNNR' " 任务清单组码
routing_counter = 'PLNAL' " 组计算器
prod_version = 'VERID' " 版本
).
CALL FUNCTION 'BAPI_PRODORD_CREATE'
EXPORTING
orderdata = ls_orderdata
IMPORTING
return = ls_return
order_number = lv_aufnr.
IF ls_return-type CA 'EAX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CONCATENATE '生产订单创建失败' lv_zmsg ls_return-message INTO DATA(lv_zmsg) SEPARATED BY '/'.
ELSE.
IF lv_aufnr IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
CONCATENATE '生产订单' lv_aufnr '创建成功' INTO lv_zmsg SEPARATED BY '/'..
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
lv_zmsg = '生产订单创建失败, 返回消息丢失'.
ENDIF.
ENDIF.
WHEN 'U'. " 修改
lv_aufnr = 'AUFNR'.
df_ins ls_orderdata_u-basic_start_date 'GSTRP ' ls_orderdatax_u-basic_start_date abap_true. " 基本开始日期
df_ins ls_orderdata_u-basic_end_date 'GLTRP ' ls_orderdatax_u-basic_end_date abap_true. " 基本完成日期
df_ins ls_orderdata_u-quantity 'GAMNG ' ls_orderdatax_u-quantity abap_true. " 总订单数量
df_ins ls_orderdata_u-scrap_quantity 'GASMG ' ls_orderdatax_u-scrap_quantity abap_true. " 订单中的总报废数量
df_ins ls_orderdata_u-quantity_uom 'GMEIN ' ls_orderdatax_u-quantity_uom abap_true. " 全部订单项通用单位
df_ins ls_orderdata_u-prod_version 'VERID ' ls_orderdatax_u-prod_version abap_true. " 生产版本
df_ins ls_orderdata_u-explosion_date 'AUFLD ' ls_orderdatax_u-explosion_date abap_true. " BOM展开/工艺路线转换的日期
df_ins ls_orderdata_u-order_priority 'APRIO ' ls_orderdatax_u-order_priority abap_true. " 订单优先级
df_ins ls_orderdata_u-mrp_controller 'DISPO ' ls_orderdatax_u-mrp_controller abap_true. " MRP 控制员
df_ins ls_orderdata_u-business_area 'GSBER ' ls_orderdatax_u-business_area abap_true. " 业务范围
df_ins ls_orderdata_u-profit_center 'PRCTR ' ls_orderdatax_u-profit_center abap_true. " 利润中心
df_ins ls_orderdata_u-sequence_number 'SEQNR ' ls_orderdatax_u-sequence_number abap_true. " 序号顺序
df_ins ls_orderdata_u-stock_type 'INSMK ' ls_orderdatax_u-stock_type abap_true. " 库存类型
df_ins ls_orderdata_u-gr_proc_time 'WEBAZ ' ls_orderdatax_u-gr_proc_time abap_true. " 以天计的收货处理时间
df_ins ls_orderdata_u-storage_location 'LGORT ' ls_orderdatax_u-storage_location abap_true. " 存储地点
df_ins ls_orderdata_u-mrp_distr_key 'VERTL ' ls_orderdatax_u-mrp_distr_key abap_true. " MRP 分配代码
df_ins ls_orderdata_u-goods_recipient 'WEMPF ' ls_orderdatax_u-goods_recipient abap_true. " 收货方
df_ins ls_orderdata_u-unloading_point 'ABLAD ' ls_orderdatax_u-unloading_point abap_true. " 卸货点
df_ins ls_orderdata_u-additional_days 'ADTDAYS' ls_orderdatax_u-additional_days abap_true. " 附加天数
df_ins ls_orderdata_u-stock_segment 'SCAT16 ' ls_orderdatax_u-stock_segment abap_true. " 库存细分
df_ins ls_orderdata_u-stk_seg_long 'SCAT40 ' ls_orderdatax_u-stk_seg_long abap_true. " 库存细分
df_ins ls_orderdata_u-basic_scheduling_type 'TERMKZ ' ls_orderdatax_u-basic_scheduling_type abap_true. " 计划类型
CALL FUNCTION 'BAPI_PRODORD_CHANGE'
EXPORTING
number = lv_aufnr
orderdata = ls_orderdata_u
orderdatax = ls_orderdatax_u
IMPORTING
return = ls_return.
IF ls_return-type = 'EAX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CONCATENATE '生产订单变更失败' lv_zmsg ls_return-message INTO lv_zmsg SEPARATED BY '/'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
CONCATENATE '生产订单变更成功' lv_zmsg INTO lv_zmsg SEPARATED BY '/'..
ENDIF.
WHEN 'D'. " 删除
lt_orderdata_d = VALUE #( ( order_number = 'AUFNR' ) ).
CALL FUNCTION 'BAPI_PRODORD_SET_DELETION_FLAG'
IMPORTING
return = ls_return
TABLES
orders = lt_orderdata_d
detail_return = lt_return.
LOOP AT lt_return INTO DATA(wa_return) WHERE type CA 'EAX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CONCATENATE '生产订单删除失败' lv_zmsg wa_return-message INTO lv_zmsg SEPARATED BY '/'.
ENDLOOP.
IF ls_return-type CA 'EAX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CONCATENATE lv_zmsg ls_return-message INTO lv_zmsg SEPARATED BY '/'..
ENDIF.
IF lv_zmsg IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
lv_zmsg = '生产订单删除成功'.
ENDIF.
ENDCASE.
ENDFORM.
ABAP DEMO CO01 生产订单创建_修改_删除
于 2023-12-26 19:52:21 首次发布