FAGLL03H 增加自定义字段二

作者:ABAP三叔 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, CO, Data Engineering, FI, MM, PP, SD, 开发, 数据工程, 物料管理, 生产, 财务, 销售分销
FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

前言

FAGLL03H总账行项目浏览器(总账视图)是财务模块比较常用的一个报表,在项目中经常有增加自定义字段的需求。

自定义字段分两种类型:

1. 取报表中某个字段的文本描述,直接用字段值到文本表中即可取到值

2. 需要写自定义逻辑取值,通常需要关联多张表才可以取到值

本文将介绍第二种类型的增强方法。

需求描述

FAGLL03H报表中行项目中有物料号,在mara表中有增强的自定义字段物料大小类,现在客户需要取物料的大类描述 。

FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

增强实现

1 .SE11对SGLPOS_N_GL_CT和SGLPOS_N_CT附加结构,增加物料大类描述字段,如下图

FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

2 .执行事务码HDBVIEWS,重新生成并修复视图。

注意:请求传输到测试机和生产机后,都需要执行此事务码

FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

3.SE18创建BADI "FAGL_LIB"的实施

FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

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 ,字段名称为"大类描述",如下

FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

勾选 ZMAT_CATE_TXT ,然后点击上方的✅,结果如下

FAGLL03H 增加自定义字段二 - 封面图
FAGLL03H 增加自定义字段二 - 封面图

总结

回过头来对比

FAGLL03H报表增加自定义字段的两种方式,方式一从文本表中取值相对来说还是简单一些,不需要对结构体附加字段,也不需要写取值逻辑;方式二通用性比较高,使用起来比较灵活

ABAP三叔

关于作者:ABAP三叔

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

来源说明:本文内容由「FAGLL03H增加自定义字段二.md」整理生成,仅用于内部技术分享与学习交流。