zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    Cron表达式,springboot定时任务
    go 语言中windows Linux 交叉编译
    SSM框架处理跨域问题
    golang gin解决跨域访问
    关于Integer类的值使用==比较
    IoC注解
    spring基础知识
    SQL SERVER大话存储结构(3)_数据行的行结构
    SQL SERVER
    MySQL-记一次备份失败的排查过程
  • 原文地址:https://www.cnblogs.com/rainysblog/p/12014322.html
Copyright © 2011-2022 走看看