SAP MIGO生产订单入库校验BADI增强MB_MIGO_BADI

SAP MIGO生产订单入库校验BADI增强MB_MIGO_BADI

1.创建BADI增强实施

  • SE19->创建BADI增强
    1
  • 输入增强实施名称
    2
    3
  • 激活增强实施
    4

2.修改增强实施

  • 导航到增强实施类
    5
  • 创建全局变量
    6
  • IF_EX_MB_MIGO_BADI~LINE_MODIFY 中传入数据
    7
  method IF_EX_MB_MIGO_BADI~LINE_MODIFY.
    if CS_GOITEM-BWART = '101' OR CS_GOITEM-BWART = '102' .  "移动类型101 102
      delete GT_GOITEM where ZEILE = I_LINE_ID.
      append CS_GOITEM to GT_GOITEM.
    endif.
  endmethod.

8

  • IF_EX_MB_MIGO_BADI~CHECK_ITEM 中做值校验
    9
  method IF_EX_MB_MIGO_BADI~CHECK_ITEM.
    data: WA_GOITEM type GOITEM.

    data: LV_FLAG type C,
          WA_AFRU type AFRU.

    data: LV_LMNGA     type AFRU-LMNGA,           "报工数量
          LV_VORNR     type AFVC-VORNR,           "最后工序的工序号
          LV_ERFMG_101 type MSEG-ERFMG,           "101收货入库数量
          LV_ERFMG_102 type MSEG-ERFMG.           "102冲销入库数量

    data: LS_BAPIRET type BAPIRET2.

    break JIEMM.
    if SY-TCODE = 'MIGO'.
      loop at GT_GOITEM into WA_GOITEM where ZEILE = I_LINE_ID and PPS_AUFNR is not initial and BWART = '101'.

        clear: WA_AFRU,LV_FLAG.
        select single * from AFRU
          into WA_AFRU
          where AUFNR = WA_GOITEM-PPS_AUFNR.
        if WA_AFRU-VORNR is initial.
          LV_FLAG = 'X'.                          "判断是整体报工还是工序报工
        endif.

        clear: LV_LMNGA,LV_VORNR.                 "取已报工数量
        case LV_FLAG.
          when 'X'.
            select sum( LMNGA )                   "整体报工已报工数量
              from AFRU
              into @LV_LMNGA
              where AUFNR = @WA_GOITEM-PPS_AUFNR  "订单
              and STOKZ = @SPACE                  "排除已被冲销和被取消的确认行
              and STZHL = @SPACE.
          when others.
            select B~VORNR                      "PP01订单类型的最后一道工序工序号
              from AFRU as A
              inner join AFVC as B on A~AUFPL = B~AUFPL
              where A~AUFNR = @WA_GOITEM-PPS_AUFNR
              and B~STEUS = 'PP01'
              order by B~VORNR descending
              into @LV_VORNR up to 1 rows.
            endselect.

            select sum( LMNGA )
             from AFRU
             into @LV_LMNGA                      "工序报工最后一道工序报工数量
             where AUFNR = @WA_GOITEM-PPS_AUFNR
             and VORNR = @LV_VORNR
             and STOKZ = @SPACE
             and STZHL = @SPACE.
        endcase.

        select sum( ERFMG ) from MSEG
          where AUFNR = @WA_GOITEM-PPS_AUFNR
          and MATNR = @WA_GOITEM-MATNR
          and BWART = '101'
          into @LV_ERFMG_101.

        select sum( ERFMG ) from MSEG
          where AUFNR = @WA_GOITEM-PPS_AUFNR
          and MATNR = @WA_GOITEM-MATNR
          and BWART = '102'
          into @LV_ERFMG_102.

        if ( LV_LMNGA - ( LV_ERFMG_101 - LV_ERFMG_102 ) ) < 0.
          LS_BAPIRET-TYPE       = 'E'.
          LS_BAPIRET-ID         = '00'.
          LS_BAPIRET-NUMBER     = '001'.
          LS_BAPIRET-MESSAGE_V1 = |生产订单:{ WA_GOITEM-PPS_AUFNR alpha = out }前期数量超收,请联系生产确认入库单|.
          append LS_BAPIRET to ET_BAPIRET2.
        else.
          if WA_GOITEM-ERFMG > LV_LMNGA - ( LV_ERFMG_101 - LV_ERFMG_102 ).
            LS_BAPIRET-TYPE       = 'E'.
            LS_BAPIRET-ID         = '00'.
            LS_BAPIRET-NUMBER     = '001'.
            LS_BAPIRET-MESSAGE_V1 = |生产订单:{ WA_GOITEM-PPS_AUFNR alpha = out }收货超过报工数量,目前可入库数量为{ LV_LMNGA - ( LV_ERFMG_101 - LV_ERFMG_102 ) }个|.
            append LS_BAPIRET to ET_BAPIRET2.
          endif.
        endif.

      endloop.
    endif.
  endmethod.

10

  • IF_EX_MB_MIGO_BADI~POST_DOCUMENT 中释放全局变量
    11
  method IF_EX_MB_MIGO_BADI~POST_DOCUMENT.
    CLEAR gt_goitem.
  endmethod.

12

3.生产订单MIGO过账效果

13

猜你喜欢

转载自blog.csdn.net/qq_30797051/article/details/120511338