ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV

作者:SAPTAB 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图

原创 Tab Zhu [ SAP TAB ](javascript:void\(0\);)

**点击蓝字关注我们**

富强 民主 文明 和谐

自由 平等 公正 法制

爱国 敬业 诚信 友善

_**MB52

** _

**标准报表客制**

**不念过** **去**

**START**

**不畏将来**

之前有一个需求,客户使用的单位大多为采购单位,但是MB52中是物料主数据中的基本单位,所以需要对MB52进行处理。

相比于增强来说,使用submit去获取MB52的数据,然后在自己的报表中再去展示更好一点,也更加灵活。这里不仅仅限于MB52还有任何其他ALV报表都可以使用这个方法来做到客制的目的。

关键的代码是:

1 DATA lw_mb52 TYPE ty_mb52.

2 DATA lt_mb52 TYPE TABLE OF ty_mb52.

3 DATA ls_mb52 TYPE REF TO data.

4

5 “设置执行时不显示,只获取ALV数据

6 cl_salv_bs_runtime_info=>set(

7 display = abap_false

8 metadata = abap_false

9 data = abap_true ).

11 RANGES:lr_mtart FOR mara-mtart,

12 lr_matkl FOR mara-matkl,

13 lr_ekgrp FOR marc-ekgrp.

15 “MB52的程序

16 SUBMIT rm07mlbs

17 WITH matnr IN s_matnr

18 WITH werks IN s_werks

19 WITH lgort IN s_lgort

20 WITH charg IN s_charg

21 WITH mtart IN lr_mtart

22 WITH matkl IN lr_matkl

23 WITH ekgrp IN lr_ekgrp

24 WITH negativ = ''

25 WITH pa_sond = ''

26 WITH xmchb = 'X'

27 WITH nozero = 'X'

28 WITH novalues = ''

29 WITH pa_hsq = ''

30 WITH pa_flt = 'X'

31 WITH p_vari = ''

32 AND RETURN.

34 TRY .“可以获取MB52

35 cl_salv_bs_runtime_info=>get_data_ref( 36 IMPORTING r_data = ls_mb52 ).

38 ASSIGN ls_mb52->* TO <lt_mb52>.

40 CATCH cx_salv_bs_sc_runtime_info.

41 MESSAGE '无法获取ALV数据' TYPE 'E'.

42 ENDTRY.

44 cl_salv_bs_runtime_info=>clear_all( ).

我们可以通过DEBUG看一下:

<lt_mb52>为我们获取的内表数据,这个就是MB52非层次显示时候展示的数据

ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图

这样就可以将MB52获取的数据转移到内表中,供自己写ALV展示出来

通过MARM来获取物料的库存单位和采购单位

1 IF lt_mawk_tmp[] IS NOT INITIAL.

2 SELECT a~matnr a~bstme b~umrez AS umrez1 b~umren AS umren1 m~ausme AS wausm c~umrez AS umrez2 c~umren AS umren2

3 INTO TABLE lt_marm

4 FROM mara AS a

5 INNER JOIN marc AS m ON m~matnr = a~matnr

6 LEFT OUTER JOIN marm AS b ON b~matnr = a~matnr AND b~meinh = a~bstme

7 LEFT OUTER JOIN marm AS c ON c~matnr = m~matnr AND c~meinh = m~ausme

8 FOR ALL ENTRIES IN lt_mawk_tmp[]

9 WHERE a~matnr = lt_mawk_tmp-matnr 10 AND m~werks = lt_mawk_tmp-werks .

11 ENDIF.

然后用基本单位数量 * 分母 / 分子来计算采购单位数量

效果如下图所示:根据不同单位显示不同数量

ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图

注意:

因为MB52不输入任何条件直接执行时,会报警告

若我们在自己的界面不加以限制输入,则执行之后会停留在MB52的选择界面

ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图

所以我们加上输入限制,这个点需要注意一下。

1 IF s_werks IS INITIAL AND s_matnr IS INITIAL AND s_lgort IS INITIAL AND s_charg IS INITIAL.

2 MESSAGE s000(zmm) WITH '请输入任一条件' DISPLAY LIKE 'E'.

3 RETURN.

4 ENDIF.

整体代码(避免影响篇幅,点击 阅读原文 查看)

创建好 STATUS就可以使用了

**不念过** **去**

**END**

**不畏将来**

ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图
ABAP 随笔获取标准报表数据 MB52数据进行客制 ALV - 封面图

**SAP ABAP TAB**

微信号 : TAB_JXZHU

后台回复’ABAP‘领取学习资料哈

长按二维码关注我们

SAPTAB

关于作者:SAPTAB

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP随笔获取标准报表数据MB52数据进行客制ALV.md」整理生成,仅用于内部技术分享与学习交流。