zoukankan      html  css  js  c++  java
  • SAP PP——MIGO生产订单入库增强检查报工数量

    效果:

    BADI:MB_MIGO_BADI

    1、类的属性里添加了可以存储行项目的变量

    2、IF_EX_MB_MIGO_BADI~LINE_MODIFY的方法被触发时将行项目数据传入GT_GOITEM中

    代码:

        IF cs_goitem-pps_aufnr IS NOT INITIAL AND cs_goitem-bwart = '101'.
          DELETE gt_goitem WHERE zeile = i_line_id.
          APPEND cs_goitem TO gt_goitem.
        ENDIF.

    3、IF_EX_MB_MIGO_BADI~CHECK_ITEM的方法中循环读取GT_GOITEM中的行项目数据做处理即可

    代码:

        TYPES: BEGIN OF ty_objnr,
                 objnr TYPE j_objnr,
               END OF ty_objnr,
               BEGIN OF ty_lgort,
                 lgort TYPE lgort_d,
               END OF ty_lgort.
    
        DATA: lr_objnr  TYPE RANGE OF jest-objnr,
              lr_lgort  TYPE RANGE OF mard-lgort,
              lrs_objnr LIKE LINE OF lr_objnr,
              lrs_lgort LIKE LINE OF lr_lgort.
    
        DATA: lt_mseg    TYPE TABLE OF mseg,
              lt_objnr   TYPE TABLE OF ty_objnr,
              lt_lgort   TYPE TABLE OF ty_lgort,
              lt_goitem  TYPE TABLE OF goitem,
              ls_goitem  TYPE goitem,
              ls_objnr   TYPE ty_objnr,
              ls_lgort   TYPE ty_lgort,
              ls_mseg    TYPE mseg,
              ls_bapiret TYPE bapiret2.
    
        DATA : l_aufpl     TYPE co_aufpl,
               l_wemng_in  TYPE co_wemng,
               l_wemng_out TYPE co_wemng,
               l_vornr     TYPE vornr,
               l_lmnga     TYPE co_wemng,
               l_rmnga     TYPE co_wemng,
               l_sumga     TYPE i,
               l_sumga_c   TYPE string,
               l_menge     TYPE co_wemng.
    
        IF sy-tcode = 'MIGO' AND gt_goitem IS NOT INITIAL.
    
          "不跑MRP仓库
          SELECT lgort INTO TABLE lt_lgort
                       FROM mdlg
                       WHERE berid = '2000_ND'.
    
          LOOP AT lt_lgort INTO ls_lgort.
            lrs_lgort-sign = 'I'.
            lrs_lgort-option = 'EQ'.
            lrs_lgort-low = ls_lgort-lgort.
            APPEND lrs_lgort TO lr_lgort. CLEAR lrs_lgort.
          ENDLOOP.
    
          lt_goitem = gt_goitem.
    
          SORT lt_goitem BY pps_aufnr lgort.
    
          READ TABLE gt_goitem INTO gs_goitem WITH KEY zeile = i_line_id.
    
          IF sy-subrc = 0.
    
            SELECT SINGLE aufpl  INTO l_aufpl
                       FROM afko
                       WHERE aufnr = gs_goitem-pps_aufnr.
    
            SELECT afvc~objnr INTO TABLE lt_objnr
                       FROM afvc
                       INNER JOIN jest ON jest~objnr = afvc~objnr
                       WHERE aufpl = l_aufpl
                       AND stat = 'I0013'
                       AND inact = space.
    
            LOOP AT lt_objnr INTO ls_objnr.
              lrs_objnr-sign = 'I'.
              lrs_objnr-option = 'EQ'.
              lrs_objnr-low = ls_objnr-objnr.
              APPEND lrs_objnr TO lr_objnr. CLEAR lrs_objnr.
            ENDLOOP.
    
            "最后大站
            IF lr_objnr[] IS NOT INITIAL.
    
              SELECT SINGLE MAX( vornr ) INTO l_vornr FROM afvc
                          WHERE aufpl = l_aufpl
                          AND objnr NOT IN lr_objnr
                          AND steus <> 'ZP10'.
            ELSE.
              SELECT SINGLE MAX( vornr ) INTO l_vornr FROM afvc
                          WHERE aufpl = l_aufpl
                          AND steus <> 'ZP10'.
            ENDIF.
    
            IF gs_goitem-lgort IN lr_lgort AND lr_lgort IS NOT INITIAL.
              "不良品报工
              SELECT SUM( rmnga ) INTO l_rmnga
                          FROM afru
                          WHERE aufnr = gs_goitem-pps_aufnr
                          AND rmnga > 0
                          AND stokz = ''
                          AND stzhl = '00000000'
                          AND meilr = 'X'.
    
              "不良品收货
              SELECT SUM( menge ) INTO l_wemng_in
                           FROM mseg
                           WHERE bwart = '101'
                           AND aufnr = gs_goitem-pps_aufnr
                           AND lgort IN lr_lgort.
    
              SELECT SUM( menge ) INTO l_wemng_out
                         FROM mseg
                         WHERE bwart = '102'
                         AND aufnr = gs_goitem-pps_aufnr
                         AND lgort IN lr_lgort.
    
              "可收不良品数量
              l_sumga = l_rmnga - l_wemng_in + l_wemng_out.
    
    
            ELSE.
              "良品报工
              SELECT SUM( lmnga ) INTO l_lmnga
                         FROM afru
                         WHERE aufnr = gs_goitem-pps_aufnr
                         AND vornr = l_vornr
                         AND lmnga > 0
                         AND stokz = ''
                         AND stzhl = '00000000'
                         AND meilr = 'X'.
    
              SELECT SUM( menge ) INTO l_wemng_in
                         FROM mseg
                         WHERE bwart = '101'
                         AND aufnr = gs_goitem-pps_aufnr
                         AND lgort NOT IN lr_lgort.
    
              SELECT SUM( menge ) INTO l_wemng_out
                         FROM mseg
                         WHERE bwart = '102'
                         AND aufnr = gs_goitem-pps_aufnr
                         AND lgort NOT IN lr_lgort.
    
              "可收良品数量
              l_sumga = l_lmnga - l_wemng_in + l_wemng_out.
    
            ENDIF.
    
            l_sumga_c = l_sumga.
    
            READ TABLE lt_goitem WITH KEY pps_aufnr = gs_goitem-pps_aufnr
                               lgort = gs_goitem-lgort
                               BINARY SEARCH
                               TRANSPORTING NO FIELDS.
            IF sy-subrc = 0.
              LOOP AT lt_goitem INTO ls_goitem FROM sy-tabix.
                IF ls_goitem-pps_aufnr NE gs_goitem-pps_aufnr
                  OR ls_goitem-lgort NE gs_goitem-lgort.
                  EXIT.
                ENDIF.
                l_menge = l_menge + ls_goitem-erfmg.
              ENDLOOP.
            ENDIF.
            IF l_menge > l_sumga.
              ls_bapiret-type       = 'E'.
              ls_bapiret-id         = '00'.
              ls_bapiret-number     = '001'.
              IF gs_goitem-lgort IN lr_lgort AND lr_lgort IS NOT INITIAL.
                CONCATENATE '工单' gs_goitem-pps_aufnr '入库数量大于报工数,只能再收'
                  l_sumga_c '个不良品' INTO ls_bapiret-message_v1.
              ELSE.
                CONCATENATE '工单' gs_goitem-pps_aufnr '入库数量大于报工数,只能再收'
                  l_sumga_c '个良品' INTO ls_bapiret-message_v1.
              ENDIF.
              APPEND ls_bapiret TO et_bapiret2.
            ENDIF.
          ENDIF.
    
        ENDIF.
    View Code

    4、最后在IF_EX_MB_MIGO_BADI~POST_DOCUMENT中将属性GT_GOITEM清空

    代码:

    CLEAR gt_goitem.
  • 相关阅读:
    linux tcpdump补充
    一个由有符号下标引起的bug
    leetcode-First Missing Positive
    Flutter移动电商实战 --(26)列表页_使用Provide控制子类-2
    Flutter移动电商实战 --(25)列表页_使用Provide控制子类-1
    Flutter移动电商实战 --(24)Provide状态管理基础
    Flutter移动电商实战 --(23)分类页_左侧类别导航制作
    Flutter移动电商实战 --(22)JSON解析和复杂数据模型转换技巧
    [翻译] NSDate-TimeAgo
    Replace-iOS
  • 原文地址:https://www.cnblogs.com/StephenAmell/p/13818996.html
Copyright © 2011-2022 走看看