扫描可关注本人技术分享公众号,与您一起学习新知!
- 对于计划订单和生产订单,
当存在替代料的时候,完成齐套性检查后,按照可齐套量进行拆单,并删除不能齐套的替代料(有个删除规则)。不能齐套就按照优先级最高(库存最大)的组件安排生产,其他的组件删除。
- 计划订单齐套后处理
选择所有PLAF-STLFX <> X(物料清单展开的固定标识) 的计划订单。
2.1 判断如果PLAF- VFMNG (可齐套数量)>0,删除不齐套的替代料。删除COMMITED QUANTITY, (RESB-VMENG = 0)的组件行。
2.2 如果PLAF- VFMNG (可齐套数量)=0,保留需求日期可用量较大的替代料 (删除计划订单组件)
2.3 如果选择了按齐套拆解计划订单,则更改计划订单的数量为可齐套数量。
重新批量执行MRP,批量进行ATP检查。 - 生产订单齐套后处理
3.1,如果生产订单的AFPO- VFMNG (可齐套数量) <> 0, 删除掉RESB- VMENG (承诺数量)=0的替代料。
3.2,如果生产订单的AFPO- VFMNG (可齐套数量) =0, 保留工单中可用量最大的替代料,删除掉其他替代料。(删除工单组件)3.3,如果选择了“按齐套结果分拆工单”,按照AFPO- VFMNG (可齐套数量)更新工单。
下面分享需求里用到的主要功能:
1,删除计划订单组件,删除生产订单组件 , 对应前台事务码分别是 MD12 , CO02
2,修改计划订单总订单数量, 对应前台事务码 MD12
3,修改工单总数量, 对应前台事务码 CO021.删除订单组件用BAPI:
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DD01
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_RESBKEYS
*&---------------------------------------------------------------------*
FORM frm_deal_dd01 TABLES pt_resbkeys TYPE coxt_t_resbdel.
DATA: lt_return TYPE STANDARD TABLE OF bapiret2,
lv_error TYPE flag. CHECK pt_resbkeys[] IS NOT INITIAL.
* BAPI to delete the components of Production Order
CALL FUNCTION 'CO_XT_COMPONENTS_DELETE'
EXPORTING
it_resbkeys_to_delete = pt_resbkeys[]
IMPORTING
e_error_occurred = lv_error
TABLES
ct_bapireturn = lt_return
EXCEPTIONS
delete_failed =
OTHERS = .
IF lv_error IS INITIAL.
PERFORM change_flag_set(saplcozv).
* CALL FUNCTION 'CO_IT_SET_FLG_ITAB_NEW'.
CALL FUNCTION 'CO_XT_ORDER_PREPARE_COMMIT'.
COMMIT WORK AND WAIT.
LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<gf_data>) WHERE aufnr = gs_key-aufnr
OR plnum = gs_key-plnum.
<gf_data>-ctype = gc_s.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CLEAR: gv_cmsg.
LOOP AT lt_return INTO DATA(ls_return1) WHERE type CA 'EAX'.
MESSAGE ID ls_return1-id
TYPE ls_return1-type
NUMBER ls_return1-number
WITH ls_return1-message_v1
ls_return1-message_v2
ls_return1-message_v3
ls_return1-message_v4
INTO DATA(lv_message).
gv_ctype = gc_e.
gv_cmsg = |{ lv_message };{ gv_cmsg }|.
CLEAR: lv_message.
ENDLOOP.
LOOP AT gt_data ASSIGNING <gf_data> WHERE aufnr = gs_key-aufnr
OR plnum = gs_key-plnum. <gf_data>-ctype = gc_e.
<gf_data>-cmsg = gv_cmsg.
ENDLOOP.
ENDIF.
ENDFORM.这步现在测试,删除生产订单OK ,删除计划订单也没有报错,但是没有删除成功, 正在找问题,
放开CALL FUNCTION 'CO_IT_SET_FLG_ITAB_NEW'.
再测试一次
需求数量 和 可用性检查数量 的对比
已经走完commit work 但还是不能删除成功
本来 103102-0000HL-09 这一行应该被删除,
2,修改计划订单总订单数量
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_PL
*&---------------------------------------------------------------------*
*& 更改计划订单的数量 为可齐套数量
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_deal_pl .
DATA:ls_headerdata TYPE bapiplaf_i2,
ls_headerdatax TYPE bapiplaf_i2x,
ls_return TYPE bapireturn1. ls_headerdata-total_plord_qty = gs_data-qtmng.
ls_headerdatax-total_plord_qty = 'X'.
**FIXED_SCRAP_QTY "计划报废数量 字段AVMNG
CALL FUNCTION 'BAPI_PLANNEDORDER_CHANGE'
EXPORTING
plannedorder = gs_data-plnum
headerdata = ls_headerdata
headerdatax = ls_headerdatax
IMPORTING
return = ls_return.
IF ls_return-type CA 'EXA'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE ID ls_return-id
TYPE ls_return-type
NUMBER ls_return-number
WITH ls_return-message_v1
ls_return-message_v2
ls_return-message_v3
ls_return-message_v4
INTO DATA(lv_message).
gs_data-ctype = gc_e.
gs_data-cmsg = lv_message.
gs_data-sffc = abap_true.
APPEND gs_data TO gt_data.
CLEAR gs_data.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_data-sffc = abap_true.
gs_data-ctype = gc_s.
gs_data-cmsg = '更改计划订单的数量成功'().
ENDIF.
ENDFORM.
3.修改工单总数量,
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DD02
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_deal_dd02 .
DATA: ls_orderdata LIKE bapi_pp_order_change, "修改结构
ls_orderdatax LIKE bapi_pp_order_changex,
ls_order_status LIKE bapi_order_status,
lv_otype LIKE bapi_order_copy-order_type,
lv_bapiflag LIKE bapiflag-bapiflag,
ls_return LIKE bapiret2. IF p_dd02 EQ abap_true.
ls_orderdata-quantity = gs_data-qtmng.
ls_orderdatax-quantity = 'X'.
CALL FUNCTION 'BAPI_PRODORD_CHANGE'
EXPORTING
number = gs_data-aufnr
orderdata = ls_orderdata
orderdatax = ls_orderdatax
IMPORTING
return = ls_return
order_type = lv_otype
order_status = ls_order_status
master_data_read = lv_bapiflag.
IF ls_return-type CA 'EXA'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE ID ls_return-id
TYPE ls_return-type
NUMBER ls_return-number
WITH ls_return-message_v1
ls_return-message_v2
ls_return-message_v3
ls_return-message_v4
INTO DATA(lv_message).
gs_data-ctype = gc_e.
gs_data-cmsg = lv_message.
gs_data-sffc = abap_true.
APPEND gs_data TO gt_data.
CLEAR gs_data.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gs_data-sffc = abap_true.
gs_data-ctype = gc_s.
gs_data-cmsg = '按照afpo-vfmng (可齐套数量)更新工单成功'().
APPEND gs_data TO gt_data.
CLEAR gs_data.
ENDIF.
ENDIF.
ENDFORM.