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.
  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/StephenAmell/p/13818996.html
Copyright © 2011-2022 走看看