前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP随笔-获取标准报表数据(MB52)数据进行客制ALV

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

作者头像
Tab Zhu
发布2022-06-23 15:24:36
7960
发布2022-06-23 15:24:36
举报
文章被收录于专栏:TAB的coding生活

获取标准报表数据(MB52)数据进行客制ALV

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

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

关键的代码是:

代码语言:javascript
复制
 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 ).
10 
11   RANGES:lr_mtart FOR mara-mtart,
12          lr_matkl FOR mara-matkl,
13          lr_ekgrp FOR marc-ekgrp.
14 
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.
33 
34   TRY .“可以获取MB52
35       cl_salv_bs_runtime_info=>get_data_ref(
36         IMPORTING r_data = ls_mb52 ).
37 
38       ASSIGN ls_mb52->* TO <lt_mb52>.
39 
40     CATCH  cx_salv_bs_sc_runtime_info.
41       MESSAGE '无法获取ALV数据'  TYPE  'E'.
42   ENDTRY.
43 
44   cl_salv_bs_runtime_info=>clear_all( ).

我们可以通过DEBUG看一下:

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

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

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

代码语言:javascript
复制
 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.

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

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

注意:

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

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

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAP TAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取标准报表数据(MB52)数据进行客制ALV
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档