• MB52字段增加 显示物料库存报表


    需求:源系统中mb52无法满足,现在需要在原有的基础上对mb52所对应的程序进行修改增加字段

    需求分析

    1.我们以面向对象的方式进行对MB52对应的程序分析
    2.报表程序一本分为哪几部分
    3.哪些字段是需要展示的

    准备

    首先我们操作一下MB52大致就会有个思路.
    按照下面的选择(具体根据个人的业务需求来,这里只是演示)
    在这里插入图片描述
    然后呢就会出现alv报表.
    注意:如果你在复制该RM07MLBS后发现没有alv显示

    在这里插入图片描述
    发现是这样显示的.
    解决方案

    在这里插入图片描述

    我们MB52找到程序RM07MLBS
    使用SE93

    在这里插入图片描述

    我们不在原程序RM07MLBS中进行修改,而是直接复制一份使用.
    复制完成之后先以SE80那样的结构去熟悉一下程序代码,他有六千多行,没有必要每行都了解.挑重点就行.
    熟悉之后你会发现我们主要使用的是就这几个子程序:如下

    在这里插入图片描述

    前一个是宏定义,后一个就是alv输出了
    然后字段只需要在bestand中添加即可

    在这里插入图片描述
    到这里我们的字段就添加完成了,接下来就是宏定义了.

    宏定义

    找到macro_fill_fieldcat宏定义,我们主要看&1234这个对应的
    &1:字段名
    &2:表名
    &3:字段可见性

    在这里插入图片描述
    然后就添加添加字段的宏定义即可
    在这里插入图片描述

    宏定义我们就添加完成,接下来就是数据查询.

    数据查询

    数据查询的话就是两大步 查询数据和修改数据.
    注意:lv_index = sy-tabix 不需要加一
    在这里插入图片描述
    查询代码(根据个人业务去查询数据)

    IF bestand[] IS NOT INITIAL.
    *具体数据查询SQL逻辑
        SELECT  t134t~mtbez ,t134t~mtart FROM t134t
          INNER JOIN mara ON mara~mtart = t134t~mtart
          INTO TABLE @DATA(lt_mtbez)
          FOR ALL ENTRIES IN @bestand
          WHERE   t134t~mtart = @bestand-mtart .
    
        SELECT zbmcl ,zggxh ,groes ,matnr
          FROM mara
          INTO TABLE @DATA(lt_mara)
          FOR ALL ENTRIES IN @bestand
          WHERE matnr = @bestand-matnr.
    
        SELECT  wgbez,matkl FROM t023t
          INTO TABLE @DATA(lt_matkl)
          FOR ALL ENTRIES IN @bestand
          WHERE matkl = @bestand-matkl.
    
        SELECT  lgobe,lgort FROM t001l
          INTO TABLE @DATA(lt_lgobe)
          FOR ALL ENTRIES IN @bestand
          WHERE lgort = @bestand-lgort.
    
        SELECT  atwrt,mch1~charg FROM mch1
          INNER JOIN mchb ON mchb~charg = mch1~charg
          INNER JOIN ausp ON ausp~objek = mch1~cuobj_bm
          INTO TABLE @DATA(lt_atwrt)
          FOR ALL ENTRIES IN @bestand
          WHERE mch1~charg = @bestand-charg .
    
        SELECT sobkz FROM mkol
          INTO TABLE @DATA(lt_sobkz)
          WHERE sobkz = 0.
    
        LOOP AT lt_sobkz INTO DATA(ls_sobkz) WHERE sobkz = 0.
          SELECT  name1,lifnr FROM lfa1
               INTO TABLE @DATA(lt_name1)
               FOR ALL ENTRIES IN @bestand
               WHERE lifnr  = @bestand-lifnr.
        ENDLOOP.
      ENDIF.
    
    *把查询的数据修改到bestand
      LOOP AT bestand.
        lv_index = sy-tabix .
    *读取查询出来的数据内表,读取条件
        READ TABLE lt_mtbez INTO DATA(ls_mtbez) WITH KEY mtart = bestand-mtart .
        IF sy-subrc = 0.
          bestand-mtbez = ls_mtbez-mtbez.
        ENDIF.
        READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = bestand-matnr.
        IF  sy-subrc = 0.
          bestand-zbmcl = ls_mara-zbmcl.
          bestand-zggxh = ls_mara-zggxh.
          bestand-groes = ls_mara-groes.
        ENDIF.
        READ TABLE lt_matkl INTO DATA(ls_matkl) WITH KEY matkl = bestand-matkl.
        IF sy-subrc = 0.
          bestand-wgbez = ls_matkl-wgbez.
        ENDIF.
        READ TABLE lt_lgobe INTO DATA(ls_lgobe) WITH KEY lgort = bestand-lgort.
        IF  sy-subrc = 0.
          bestand-lgobe = ls_lgobe-lgobe.
        ENDIF.
        READ TABLE lt_atwrt INTO DATA(ls_atwrt) WITH KEY charg = bestand-charg.
        IF sy-subrc = 0.
          bestand-atwrt = ls_atwrt-atwrt.
        ENDIF.
        READ TABLE lt_name1 INTO DATA(ls_name1) WITH KEY lifnr = bestand-lifnr.
        IF sy-subrc = 0.
          bestand-name1 = ls_name1-name1.
        ENDIF.
    
    *把读取到的数据赋值给bestand具体字中
        MODIFY bestand INDEX lv_index.
      ENDLOOP.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    总结

    从理论上来讲,和我们开发的报表是一样的,只不过这个是系统给到功能比较强大
    但我们在对他进行修改的时候,发开的逻辑思维是一样的.先看程序的结构然后再做
    以上都是个人开发经验,欢迎留言区讨论!!!

  • 相关阅读:
    洛谷P6877 長いだけのネクタイ
    Code Former安装及使用
    拓世科技集团打造数字人营销解决方案,为车企提供新的“增长担当”
    rust 初识基础: 变量、数据类型、函数、所有权、枚举
    基于MindSpore的YOLOv3-DarkNet53网络实现
    读 | SA : The Hard Parts 之代码复用
    Newman+Jenkins实现接口自动化测试
    数据容器分类总结
    12、用户微服务
    OSPF笔记(四):OSPF五种报文和五种常见LSA
  • 原文地址:https://blog.csdn.net/weixin_49198221/article/details/126463115