前言
MB5B过账日期的库存报表,这个报表是MM模块使用频率非常高的一个报表,而物料主数据经常会存在增加自定义字段的情况。
本文就以取MARA表的自定义字段为例,介绍MB5B报表的增强方法。
需求描述
在MARA表中增加的自定义字段有“品牌”、“系列”、“大类”、“小类”、“年份”、“季节”、“渠道”六个字段,这六个字段也只是存的KEY值,描述在另外的对照表中
。见下图
现在需要在MB5B 报表中取出物料对应的这六个字段的描述。
增强实现
1.创建结构体 zsmara_ txt ,用来存放六个字段的描述。
2.se38打开报表RM07MLDD,找到stype_belege结构定义的结尾,创建隐式增强,增加mara表中的六个字段。
2.2 增强代码如下:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(87) Typ STYPE_BELEGE, End*$*$-Start: (1)---------------------------------------------------------------------------------$*$*ENHANCEMENT 3 ZENH_MB5B. "active versionTYPES: zbrand_txt TYPE zsmara_txt-zbrand_txt, zseries_txt TYPE zsmara_txt-zseries_txt, zmat_cate_txt TYPE zsmara_txt-zmat_cate_txt, zsm_cate_txt TYPE zsmara_txt-zsm_cate_txt, zyear_txt TYPE zsmara_txt-zyear_txt, zseason_txt TYPE zsmara_txt-zseason_txt, zchannel_txt TYPE zsmara_txt-zchannel_txt.ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------------------------------------------$*$*
3.在stype_totals_header 结构定义的结尾 前创建隐式增强。代码如下:
ENHANCEMENT 5 ZENH_MB5B. "active version"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(88) Typ STYPE_TOTALS_HEADER, End, Enhancement ZENH_MB5B, Start STYPES: zbrand_txt LIKE makt-maktx, zseries_txt TYPE zsmara_txt-zseries_txt, zmat_cate_txt TYPE zsmara_txt-zmat_cate_txt, zsm_cate_txt TYPE zsmara_txt-zsm_cate_txt, zyear_txt TYPE zsmara_txt-zyear_txt, zseason_txt TYPE zsmara_txt-zseason_txt, zchannel_txt TYPE zsmara_txt-zchannel_txt."""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(89) Typ STYPE_TOTALS_HEADER, End, Enhancement ZENH_MB5B, End
4\. 在 stype_totals_flat 结构定义的结尾 前创建隐式增强。 代码如下 :
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(3) Typ STYPE_TOTALS_FLAT, End S*$*$-Start: (3)---------------------------------------------------------------------------------$*$*ENHANCEMENT 7 ZENH_MB5B. "active version
TYPES: zbrand_txt TYPE zsmara_txt-zbrand_txt, zseries_txt TYPE zsmara_txt-zseries_txt, zmat_cate_txt TYPE zsmara_txt-zmat_cate_txt, zsm_cate_txt TYPE zsmara_txt-zsm_cate_txt, zyear_txt TYPE zsmara_txt-zyear_txt, zseason_txt TYPE zsmara_txt-zseason_txt, zchannel_txt TYPE zsmara_txt-zchannel_txt.ENDENHANCEMENT.*$*$-End: (3)---------------------------------------------------------------------------------$*$*5.在包含文件RM07MLBD_FORM_02的listausgabe1子例程代码开始处创建隐式增强,代码如下:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form LISTAUSGABE1, Start A*$*$-Start: (1)---------------------------------------------------------------------------------$*$*ENHANCEMENT 4 ZENH_MB5B. "active versionDATA lt_fieldcat TYPE slis_t_fieldcat_alv.DATA lv_lines TYPE i.lv_lines = lines( fieldcat ).CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-repid* I_INTERNAL_TABNAME = i_structure_name = 'ZSMARA_TXT'* I_CLIENT_NEVER_DISPLAY = 'X'* I_INCLNAME =* I_BYPASSING_BUFFER =* I_BUFFER_ACTIVE = CHANGING ct_fieldcat = lt_fieldcat* EXCEPTIONS* INCONSISTENT_INTERFACE = 1* PROGRAM_ERROR = 2* OTHERS = 3 .IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.LOOP AT lt_fieldcat INTO DATA(ls_fieldcat). lv_lines += 1. ls_fieldcat-col_pos = lv_lines. ls_fieldcat-tabname = g_s_fieldcat-tabname. ls_fieldcat-sp_group = 'S'. CLEAR ls_fieldcat-ref_tabname. APPEND ls_fieldcat TO fieldcat.ENDLOOP.DATA: BEGIN OF lt_mara OCCURS 0, matnr TYPE mara-matnr, zbrand TYPE mara-zbrand, zseries TYPE mara-zseries, zmat_cate TYPE mara-zmat_cate, zsm_cate TYPE mara-zsm_cate, zyear TYPE mara-zyear, zseason TYPE mara-zseason, zchannel TYPE mara-zchannel, END OF lt_mara.DATA: BEGIN OF lt_ztmm015a OCCURS 0, fieldname TYPE ztmm015a-fieldname, ddkey TYPE ztmm015a-ddkey, ddtext TYPE ztmm015a-ddtext, END OF lt_ztmm015a.DATA: lt_ztmd001b TYPE STANDARD TABLE OF ztmd001b.DATA: lt_ztmd001c TYPE STANDARD TABLE OF ztmd001c.IF g_t_belege1[] IS NOT INITIAL. SELECT matnr zbrand zseries zmat_cate zsm_cate zyear zseason zchannel INTO TABLE lt_mara FROM mara FOR ALL ENTRIES IN g_t_belege1 WHERE matnr = g_t_belege1-matnr. SORT lt_mara BY matnr.* 码表:渠道/季节/年份 SELECT fieldname ddkey ddtext INTO TABLE lt_ztmm015a FROM ztmm015a WHERE ( fieldname = 'ZCHANNEL' OR fieldname = 'ZSEASON' OR fieldname = 'ZYEAR' ) AND langu = sy-langu.*品牌/系列 SELECT * INTO TABLE lt_ztmd001b FROM ztmd001b. SORT lt_ztmd001b BY zbrand zseries.*大类/小类 SELECT * INTO TABLE lt_ztmd001c FROM ztmd001c. SORT lt_ztmd001c BY zmat_cate zsm_cate.
LOOP AT g_t_belege1 ASSIGNING FIELD-SYMBOL(<fs_data>). READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = <fs_data>-matnr BINARY SEARCH. CHECK sy-subrc = 0. IF ls_mara-zbrand IS NOT INITIAL. READ TABLE lt_ztmd001b INTO DATA(ls_ztmd001b) WITH KEY zbrand = ls_mara-zbrand BINARY SEARCH. <fs_data>-zbrand_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmd001b-zbrand_txt ELSE ls_mara-zbrand ). ENDIF. IF ls_mara-zseries IS NOT INITIAL. READ TABLE lt_ztmd001b INTO ls_ztmd001b WITH KEY zbrand = ls_mara-zbrand zseries = ls_mara-zseries BINARY SEARCH. <fs_data>-zseries_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmd001b-zseries_txt ELSE ls_mara-zseries ). ENDIF. IF ls_mara-zmat_cate IS NOT INITIAL. READ TABLE lt_ztmd001c INTO DATA(ls_ztmd001c) WITH KEY zmat_cate = ls_mara-zmat_cate BINARY SEARCH. <fs_data>-zmat_cate_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmd001c-zmat_cate_txt ELSE ls_mara-zmat_cate ). ENDIF. IF ls_mara-zsm_cate IS NOT INITIAL. READ TABLE lt_ztmd001c INTO ls_ztmd001c WITH KEY zmat_cate = ls_mara-zmat_cate zsm_cate = ls_mara-zsm_cate BINARY SEARCH. <fs_data>-zsm_cate_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmd001c-zsm_cate_txt ELSE ls_mara-zsm_cate ). ENDIF. IF ls_mara-zchannel IS NOT INITIAL. READ TABLE lt_ztmm015a INTO DATA(ls_ztmm015a) WITH KEY fieldname = 'ZCHANNEL' ddkey = ls_mara-zchannel. <fs_data>-zchannel_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmm015a-ddtext ELSE ls_mara-zchannel ). ENDIF. IF ls_mara-zseason IS NOT INITIAL. READ TABLE lt_ztmm015a INTO ls_ztmm015a WITH KEY fieldname = 'ZSEASON' ddkey = ls_mara-zseason. <fs_data>-zseason_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmm015a-ddtext ELSE ls_mara-zseason ). ENDIF. IF ls_mara-zyear IS NOT INITIAL. READ TABLE lt_ztmm015a INTO ls_ztmm015a WITH KEY fieldname = 'ZYEAR' ddkey = ls_mara-zyear. <fs_data>-zyear_txt = COND #( WHEN sy-subrc = 0 THEN ls_ztmm015a-ddtext ELSE ls_mara-zyear ). ENDIF. ENDLOOP.ENDIF.ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------------------------------------------$*$*6.在报表RM07MLBD的alv_hierseq_list_totals子例程开始处创建隐式增强,代码如下:
...