前言
FAGLL03H总账行项目浏览器(总账视图)是财务模块比较常用的一个报表,在项目中经常有增加自定义字段的需求。
自定义字段分两种类型:
本文将介绍第二种类型的增强方法。
需求描述
FAGLL03H报表中行项目中有物料号,在mara表中有增强的自定义字段物料大小类,现在客户需要取物料的大类描述 。
增强实现
1 .SE11对SGLPOS_N_GL_CT和SGLPOS_N_CT附加结构,增加物料大类描述字段,如下图
2 .执行事务码HDBVIEWS,重新生成并修复视图。
注意:请求传输到测试机和生产机后,都需要执行此事务码
4.修改类ZCL_IM_FAGL_LIG的IF_FAGL_LIB~SELECT_DATA方法,根据物料号到对照表中取大类描述,实现代码如下
METHOD if_fagl_lib~select_data. FIELD-SYMBOLS: <fs> TYPE any. FIELD-SYMBOLS <ls_data> TYPE any. FIELD-SYMBOLS <ld_data> TYPE any.
TYPES: BEGIN OF lty_matnr, matnr TYPE matnr, zmat_cate_txt TYPE ztmd001c-zmat_cate_txt, END OF lty_matnr.
DATA: ls_component LIKE LINE OF it_component. DATA lr_data TYPE REF TO data. DATA lo_descr TYPE REF TO cl_abap_typedescr. DATA lo_str_descr_in TYPE REF TO cl_abap_structdescr. DATA ls_abap_comp_descr TYPE abap_compdescr.
DATA: lv_matnr TYPE mara-matnr, lv_text TYPE ztmd001c-zmat_cate_txt. DATA: lt_matnr TYPE HASHED TABLE OF lty_matnr WITH UNIQUE KEY matnr, ls_matnr LIKE LINE OF lt_matnr. DATA: lr_matnr TYPE RANGE OF matnr, lwa_matnr LIKE LINE OF lr_matnr.CREATE DATA lr_data LIKE LINE OF ct_data. ASSIGN lr_data->* TO <ls_data>.
* Get structure description of data table CALL METHOD cl_abap_structdescr=>describe_by_data EXPORTING p_data = <ls_data> RECEIVING p_descr_ref = lo_descr.
lo_str_descr_in ?= lo_descr. READ TABLE lo_str_descr_in->components TRANSPORTING NO FIELDS WITH KEY name = 'MATNR'. CHECK sy-subrc = 0. LOOP AT ct_data ASSIGNING <ls_data>. ASSIGN COMPONENT 'MATNR' OF STRUCTURE <ls_data> TO <ld_data>. CHECK sy-subrc = 0 AND <ld_data> IS NOT INITIAL. lwa_matnr-sign = 'I'. lwa_matnr-option = 'EQ'. lwa_matnr-low = <ld_data>. ASSIGN COMPONENT 'ZMAT_CATE_TXT' OF STRUCTURE <ls_data> TO <ld_data>. CHECK sy-subrc = 0. COLLECT lwa_matnr INTO lr_matnr. ENDLOOP. CHECK lr_matnr[] IS NOT INITIAL. SELECT DISTINCT matnr, zmat_cate_txt INTO TABLE @lt_matnr FROM ztmd001c AS a JOIN mara AS b ON a~zmat_cate = b~zmat_cate WHERE matnr IN @lr_matnr.
LOOP AT ct_data ASSIGNING <ls_data>. ASSIGN COMPONENT 'MATNR' OF STRUCTURE <ls_data> TO <ld_data>. CHECK sy-subrc = 0 AND <ld_data> IS NOT INITIAL. lv_matnr = <ld_data>. ASSIGN COMPONENT 'ZMAT_CATE_TXT' OF STRUCTURE <ls_data> TO <ld_data>. CHECK sy-subrc = 0. READ TABLE lt_matnr INTO ls_matnr WITH TABLE KEY matnr = lv_matnr. IF sy-subrc = 0. <ld_data> = ls_matnr-zmat_cate_txt. ENDIF. ENDLOOP. ENDMETHOD.效果展示
激活增强后, FAGLL03H报表的右侧多出一列 ZMAT_CATE_TXT ,字段名称为"大类描述",如下
勾选 ZMAT_CATE_TXT ,然后点击上方的✅,结果如下
总结
回过头来对比
FAGLL03H报表增加自定义字段的两种方式,方式一从文本表中取值相对来说还是简单一些,不需要对结构体附加字段,也不需要写取值逻辑;方式二通用性比较高,使用起来比较灵活
。