此博客为原创博客,都是个人工作经历所得,转载请注明出处

PP篇7 生产替代料齐套后处理

扫描可关注本人技术分享公众号,与您一起学习新知!

  1. 对于计划订单和生产订单,

    当存在替代料的时候,完成齐套性检查后,按照可齐套量进行拆单,并删除不能齐套的替代料(有个删除规则)。不能齐套就按照优先级最高(库存最大)的组件安排生产,其他的组件删除。

  2. 计划订单齐套后处理

    选择所有PLAF-STLFX <> X(物料清单展开的固定标识) 的计划订单。

    2.1  判断如果PLAF- VFMNG (可齐套数量)>0,删除不齐套的替代料。删除COMMITED QUANTITY, (RESB-VMENG = 0)的组件行。

    2.2  如果PLAF- VFMNG (可齐套数量)=0,保留需求日期可用量较大的替代料 (删除计划订单组件)

    2.3  如果选择了按齐套拆解计划订单,则更改计划订单的数量为可齐套数量。
    重新批量执行MRP,批量进行ATP检查。

     

  3. 生产订单齐套后处理
    3.1,如果生产订单的AFPO- VFMNG (可齐套数量) <> 0, 删除掉RESB- VMENG (承诺数量)=0的替代料。
    3.2,如果生产订单的AFPO- VFMNG (可齐套数量) =0, 保留工单中可用量最大的替代料,删除掉其他替代料。(删除工单组件)

    3.3,如果选择了“按齐套结果分拆工单”,按照AFPO- VFMNG (可齐套数量)更新工单。

     

     


    下面分享需求里用到的主要功能:
    1,删除计划订单组件,删除生产订单组件 , 对应前台事务码分别是 MD12 , CO02
    2,修改计划订单总订单数量, 对应前台事务码 MD12
    3,修改工单总数量,                对应前台事务码 CO02



    1.删除订单组件用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         = 1
          OTHERS                = 2.
      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 = '更改计划订单的数量成功'(004).
  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 (可齐套数量)更新工单成功'(003).
      APPEND gs_data TO gt_data.
      CLEAR gs_data.
    ENDIF.
  ENDIF.
ENDFORM.

 

posted @ 2019-12-10 00:27  Rainystuday  阅读(992)  评论(0编辑  收藏  举报