利用REUSE_ALV_HIERSEQ_LIST_DISPLAY进行多层输出(输出表结构的又一例)

本文介绍了一个使用ABAP编程语言获取SAP系统中表及其字段信息的示例程序。该程序首先列出所有可用的SAP表,然后进一步提取每个表的详细字段信息,并通过ALV列表显示出来。此示例适用于希望深入了解SAP表结构及字段特性的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2006年12月13日 10:36:00

1、在程序里包含SLIS
type-pools: slis.

2、声明主表和明细表

* Global structure of list
types: begin of t_table,
tabname like dd03l-tabname,
ddtext like dd02t-ddtext,
as4user like dd02l-as4user,
end of t_table.

types: begin of ud_struct,
position like dd03l-position,
tabname like dd03l-tabname,
fieldname like dd03l-fieldname,
ddtext like dd03t-ddtext,

keyflag like dd03l-keyflag,
rollname like dd03l-rollname,
domname like dd03l-domname,
datatype like dd03l-datatype,
ddleng like dd03l-leng,
checktable like dd03l-checktable,
decimals like dd03l-decimals,
eddtext like dd03t-ddtext,
dddtext like dd03t-ddtext,
end of ud_struct.
data: gt_outtabt type t_table occurs 0 with header line.
data: gt_outtabf type ud_struct occurs 0 with header line.

3、申明主表和明细表的名称变量
g_tabname_header type slis_tabname,
g_tabname_item type slis_tabname.

4、声明主表和明细表连接关键字变量
data: gs_keyinfo type slis_keyinfo_alv

5 、设置输出格式

6、具体完整样例
*&---------------------------------------------------------------------
*& Report ZGETTABLEFIELD *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

report zgettablefield .
* Data declaration
type-pools: slis.

* Global structure of list
types: begin of t_table,
tabname like dd03l-tabname,
ddtext like dd02t-ddtext,
as4user like dd02l-as4user,
end of t_table.

types: begin of ud_struct,
position like dd03l-position,
tabname like dd03l-tabname,
fieldname like dd03l-fieldname,
ddtext like dd03t-ddtext,

keyflag like dd03l-keyflag,
rollname like dd03l-rollname,
domname like dd03l-domname,
datatype like dd03l-datatype,
ddleng like dd03l-leng,
checktable like dd03l-checktable,
decimals like dd03l-decimals,
eddtext like dd03t-ddtext,
dddtext like dd03t-ddtext,
end of ud_struct.

tables: dd03l,dd02l.

data: gt_fieldcat type slis_t_fieldcat_alv.
data: gt_outtabt type t_table occurs 0 with header line.
data: gt_outtabf type ud_struct occurs 0 with header line.
data: gs_keyinfo type slis_keyinfo_alv,
g_tabname_header type slis_tabname,
g_tabname_item type slis_tabname.


data: g_repid like sy-repid.
data : begin of exclude occurs 5,
fcode like sy-ucomm,
end of exclude.
data p_ucomm like sy-ucomm.

select-options s_tname for dd02l-tabname default 'VBAK'.

*======================================================================*
* Initialization fieldcatalog
*======================================================================*
initialization.
g_repid = sy-repid.
g_tabname_header = 'GT_OUTTABT'.
g_tabname_item = 'GT_OUTTABF'.
* define keyinfo
clear gs_keyinfo.
gs_keyinfo-header01 = 'TABNAME'.
gs_keyinfo-item01 = 'TABNAME'.
gs_keyinfo-header02 = space.
gs_keyinfo-item02 = 'POSITION'.

*======================================================================*
* Ereignis : AT SELECTION-SCREEN OUTPUT (PBO-Zeitpunkt) *
*======================================================================*
at selection-screen output.
data exclude like rsexfcode occurs 0 with header line.
if sy-dynnr = 1000.
call function 'RS_SET_SELSCREEN_STATUS'
exporting
p_status = 'ZGETTBFD'
tables
p_exclude = exclude
exceptions
others = 1.
endif.
p_ucomm = space.

*======================================================================*
* Ereignis : AT SELECTION-SCREEN (PAI-Zeitpunkt) *
* letztes PAI-Ereignis *
*======================================================================*
at selection-screen.
p_ucomm = sy-ucomm.
case p_ucomm.
when 'STBL'.
set parameter id 'DTB' field s_tname.
* PERFORM AUTHORITY_CHECK USING 'SE11' .
call transaction 'SE11' and skip first screen.
endcase.

*======================================================================*
* Data selection
*======================================================================*
start-of-selection.
perform select_table tables gt_outtabt.
perform select_field tables gt_outtabf.
*======================================================================*
* Display list
*======================================================================*
end-of-selection.

perform fieldcat_init using gt_fieldcat[].
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
* i_callback_program = g_repid
* it_fieldcat = gt_fieldcat[]
* TABLES
* t_outtab = gt_outtabf.
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
i_callback_program = g_repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
* IT_EXCLUDING =
* it_special_groups = gt_sp_group[]
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* i_default = g_default
* i_save = g_save
* is_variant = g_variant
* it_events = gt_events[]
* IT_EVENT_EXIT =
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
is_keyinfo = gs_keyinfo
* IS_PRINT =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
tables
t_outtab_header = gt_outtabt
t_outtab_item = gt_outtabf.

************************************************************************
* Form Name : fieldcat_init
* Created by : DEV01
* Created on :
* Form Description:
* Set field's output layout
*----------------------------------------------------------------------*
*parameter description
*----------------------------------------------------------------------*
* >--- rt_fieldcat: return field's information
*----------------------------------------------------------------------*
* Modification Log:
* Date Programmer Description
*----------------------------------------------------------------------*
************************************************************************
form fieldcat_init
using rt_fieldcat type slis_t_fieldcat_alv.
data: ls_fieldcat type slis_fieldcat_alv.
data: pos type i value 1.
clear ls_fieldcat.
ls_fieldcat-fieldname = 'TABNAME'.
ls_fieldcat-tabname = g_tabname_header.
ls_fieldcat-ref_fieldname = 'TABNAME'.
ls_fieldcat-ref_tabname = 'DD03T'.
ls_fieldcat-key = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DDTEXT'.
ls_fieldcat-tabname = g_tabname_header.
ls_fieldcat-ref_fieldname = 'DDTEXT'.
ls_fieldcat-ref_tabname = 'DD02T'.
ls_fieldcat-key = 'X'.
append ls_fieldcat to rt_fieldcat.


* ls_fieldcat-fieldname = 'TABNAME'.
* ls_fieldcat-tabname = g_tabname_item.
* ls_fieldcat-ref_fieldname = 'TABNAME'.
* ls_fieldcat-ref_tabname = 'DD03T'.
* LS_FIELDCAT-KEY = 'X'.
* APPEND ls_fieldcat TO rt_fieldcat.
* CLEAR ls_fieldcat.

ls_fieldcat-fieldname = 'POSITION'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'POSITION'.
ls_fieldcat-ref_tabname = 'DD03L'.
ls_fieldcat-key = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'FIELDNAME'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'FIELDNAME'.
ls_fieldcat-ref_tabname = 'DD03T'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DDTEXT'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DDTEXT'.
ls_fieldcat-ref_tabname = 'DD03T'.
* LS_FIELDCAT-NO_OUT = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'KEYFLAG'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'KEYFLAG'.
ls_fieldcat-ref_tabname = 'DD03L'.
* LS_FIELDCAT-NO_OUT = 'X'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DATATYPE'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DATATYPE'.
ls_fieldcat-ref_tabname = 'DD03T'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DDLENG'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'LENG'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DECIMALS'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DECIMALS'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'CHECKTABLE'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'CHECKTABLE'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'ROLLNAME'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'ROLLNAME'.
ls_fieldcat-ref_tabname = 'DD03L'.
append ls_fieldcat to rt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-fieldname = 'DOMNAME'.
ls_fieldcat-tabname = g_tabname_item.
ls_fieldcat-ref_fieldname = 'DOMNAME'.
ls_fieldcat-ref_tabname = 'DD03L'.
* LS_FIELDCAT-NO_OUT = 'X'.
append ls_fieldcat to rt_fieldcat.
endform. "fieldcat_init
************************************************************************
* Form Name : select_table
* Created by : DEV01
* Created on :
* Form Description:
* Get Table's information
*----------------------------------------------------------------------*
*parameter description
*----------------------------------------------------------------------*
* >---rt_outtab: return field's information
*----------------------------------------------------------------------*
* Modification Log:
* Date Programmer Description
*----------------------------------------------------------------------*
************************************************************************
form select_table tables rt_outtab like gt_outtabt[].

select dd02l~tabname dd02t~ddtext dd02l~as4user
into (rt_outtab-tabname,rt_outtab-ddtext,rt_outtab-as4user)
from dd02l left join dd02t
on dd02l~tabname = dd02t~tabname
and dd02l~as4local = dd02t~as4local
and dd02l~as4vers = dd02t~as4vers
and dd02t~ddlanguage = sy-langu
where dd02l~tabname in s_tname
and dd02l~as4local = 'A'
order by dd02l~tabname.
append rt_outtab.
endselect.

endform. "SELECT_DATA
************************************************************************
* Form Name : select_field
* Created by : DEV01
* Created on :
* Form Description:
* Get Table field's information
*----------------------------------------------------------------------*
*parameter description
*----------------------------------------------------------------------*
* >---rt_outtab: return field's information
*----------------------------------------------------------------------*
* Modification Log:
* Date Programmer Description
*----------------------------------------------------------------------*
************************************************************************
form select_field tables
rt_outtab like gt_outtabf[].

select dd03l~position dd03l~tabname
dd03l~fieldname
dd03t~ddtext
dd03l~keyflag
dd03l~rollname
dd03l~domname
dd03l~datatype
dd03l~leng
dd03l~checktable dd03l~decimals

dd04t~ddtext dd01t~ddtext
into (rt_outtab-position, rt_outtab-tabname,
rt_outtab-fieldname, rt_outtab-ddtext,
rt_outtab-keyflag,rt_outtab-rollname,
rt_outtab-domname,rt_outtab-datatype,
rt_outtab-ddleng,rt_outtab-checktable,

rt_outtab-decimals,
rt_outtab-eddtext,rt_outtab-dddtext)
from dd03l left join dd03t
on dd03l~tabname = dd03t~tabname
and dd03l~fieldname = dd03t~fieldname
and dd03t~ddlanguage = sy-langu
left join dd04t
on dd03l~rollname = dd04t~rollname
and dd04t~ddlanguage = sy-langu
left join dd01t
on dd03l~domname = dd01t~domname
and dd01t~ddlanguage = sy-langu
where dd03l~tabname in s_tname
order by dd03l~tabname dd03l~position.
if rt_outtab-ddtext = space.
if rt_outtab-eddtext = space.
rt_outtab-ddtext = rt_outtab-dddtext.
else.
rt_outtab-ddtext = rt_outtab-eddtext.
endif.
endif.
append rt_outtab.
endselect.

endform. "SELECT_DATA

*&---------------------------------------------------------------------*
*& Form FUNCTION_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -- *----------------------------------------------------------------------*
form function_exclude tables p_exclude structure exclude.
* data : rcode like sy-subrc.
* clear p_exclude.
* refresh p_exclude.
* exclude-fcode = 'EERW'.
* append exclude.
* exclude-fcode = 'EXIT'.
* append exclude.
endform. " FUNCTION_EXCLUDE

相关连接:http://blog.youkuaiyun.com/CompassButton/archive/2005/02/05/281435.aspx



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1441016


<think>我们被要求提供REUSE_ALV_GRID_DISPLAY_LVC的简单示例代码。根据引用内容,我们知道REUSE_ALV_GRID_DISPLAY_LVC是SAP ABAP中用于显示ALV的一个函数模块。下面我们将提供一个简单的示例代码,包括定义数据结构、准备数据、设置布局和字段目录,然后调用函数显示ALV。 注意:由于我们无法实际运行ABAP代码,以下示例为典型的ABAP代码结构,供参考。 步骤: 1. 定义数据结构:通常使用一个结构structure(internal table)来存储要显示的数据。 2. 准备数据:将需要显示的数据填充到内中。 3. 设置布局(layout):控制ALV显示样式,比如列宽、颜色等。 4. 设置字段目录(field catalog):定义每个字段的显示属性,如列名、是否可编辑等。 5. 调用函数模块REUSE_ALV_GRID_DISPLAY_LVC显示ALV。 示例代码: ```abap REPORT z_alv_demo. * 定义数据结构 TYPES: BEGIN OF ty_data, carrid TYPE s_carr_id, " 航空公司代码 connid TYPE s_conn_id, " 航班连接号 fldate TYPE s_date, " 航班日期 price TYPE s_price, " 价格 currency TYPE s_currcode, " 货币 END OF ty_data. DATA: gt_data TYPE TABLE OF ty_data, " 数据内 gs_data TYPE ty_data. " 工作区 * 布局设置 DATA: gs_layout TYPE lvc_s_layo. * 字段目录 DATA: gt_fieldcat TYPE lvc_t_fcat, gs_fieldcat TYPE lvc_s_fcat. * 填充数据(这里仅作示例,实际中可能从数据库读取) START-OF-SELECTION. gs_data-carrid = 'AA'. gs_data-connid = '0017'. gs_data-fldate = '20230101'. gs_data-price = '500'. gs_data-currency = 'USD'. APPEND gs_data TO gt_data. CLEAR gs_data. gs_data-carrid = 'LH'. gs_data-connid = '0400'. gs_data-fldate = '20230102'. gs_data-price = '800'. gs_data-currency = 'EUR'. APPEND gs_data TO gt_data. * 设置布局 gs_layout-zebra = 'X'. " 启用斑马纹 gs_layout-cwidth_opt = 'X'. " 优化列宽 * 构建字段目录 PERFORM build_fieldcatalog. * 调用函数显示ALV CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat TABLES t_outtab = gt_data EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * 构建字段目录子程序 FORM build_fieldcatalog. DEFINE add_field. CLEAR gs_fieldcat. gs_fieldcat-fieldname = &1. gs_fieldcat-reptext = &2. gs_fieldcat-coltext = &2. gs_fieldcat-scrtext_l = &2. gs_fieldcat-scrtext_m = &2. gs_fieldcat-scrtext_s = &2. APPEND gs_fieldcat TO gt_fieldcat. END-OF-DEFINITION. add_field 'CARRID' 'Airline Code'. add_field 'CONNID' 'Connection No.'. add_field 'FLDATE' 'Flight Date'. add_field 'PRICE' 'Price'. add_field 'CURRENCY' 'Currency'. ENDFORM. ``` 说明: 1. 我们定义了一个内`gt_data`来存储要显示的数据,结构为`ty_data`。 2. 在`START-OF-SELECTION`事件中,我们填充了两条示例数据。 3. 布局设置`gs_layout`中,我们启用了斑马纹和优化列宽。 4. 通过子程序`build_fieldcatalog`构建字段目录,使用宏`add_field`简化重复操作,为每个字段设置列标题。 5. 调用函数`REUSE_ALV_GRID_DISPLAY_LVC`,传入程序名、布局、字段目录以及数据内。 注意:实际使用时,可能需要根据需求调整字段目录中的属性,比如设置字段为可编辑、隐藏某些字段等。 另外,引用[3]提到了行选择功能,如果需要,可以在布局中设置`sel_mode`属性(例如`gs_layout-sel_mode = 'A'`允许行选择),并在函数调用时添加`i_callback_pf_status_set`和`i_callback_user_command`来实现选择后的操作。 §§相关问题§§ 1. 如何实现REUSE_ALV_GRID_DISPLAY_LVC的行选择功能? 2. 如何在ALV中实现可编辑字段? 3. 如何为ALV添加自定义按钮并处理事件?</think>### REUSE_ALV_GRID_DISPLAY_LVC 简单示例代码 以下是使用 `REUSE_ALV_GRID_DISPLAY_LVC` 函数模块显示ALV的完整示例代码(ABAP): ```abap REPORT z_alv_demo. * 1. 定义数据结构 TYPES: BEGIN OF ty_data, matnr TYPE matnr, " 物料号 maktx TYPE maktx, " 物料描述 menge TYPE menge_d, " 数量 meins TYPE meins, " 单位 END OF ty_data. DATA: gt_data TYPE TABLE OF ty_data, " 数据内 gs_data TYPE ty_data. " 工作区 * 2. 准备数据(示例数据) START-OF-SELECTION. gs_data-matnr = '1000001'. gs_data-maktx = '螺钉'. gs_data-menge = 500. gs_data-meins = 'PC'. APPEND gs_data TO gt_data. gs_data-matnr = '1000002'. gs_data-maktx = '螺母'. gs_data-menge = 300. gs_data-meins = 'PC'. APPEND gs_data TO gt_data. * 3. 设置ALV参数 DATA: gt_fieldcat TYPE lvc_t_fcat, " 字段目录 gs_fieldcat TYPE lvc_s_fcat, " 字段描述 gs_layout TYPE lvc_s_layo. " 布局设置 * 构建字段目录 PERFORM build_fieldcatalog. * 设置布局属性 gs_layout-zebra = 'X'. " 启用斑马纹 gs_layout-cwidth_opt = 'X'. " 优化列宽 gs_layout-sel_mode = 'A'. " 允许行选择(引用[3]) * 4. 调用ALV函数 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid " 当前程序 is_layout_lvc = gs_layout " 布局设置 it_fieldcat_lvc = gt_fieldcat " 字段目录 TABLES t_outtab = gt_data " 输出数据 EXCEPTIONS program_error = 1 OTHERS = 2. * 构建字段目录子程序 FORM build_fieldcatalog. DEFINE add_field. CLEAR gs_fieldcat. gs_fieldcat-fieldname = &1. " 字段名 gs_fieldcat-reptext = &2. " 列标题 gs_fieldcat-col_opt = 'X'. " 自动优化列宽 APPEND gs_fieldcat TO gt_fieldcat. END-OF-DEFINITION. add_field 'MATNR' '物料号'. add_field 'MAKTX' '物料描述'. add_field 'MENGE' '数量'. add_field 'MEINS' '单位'. ENDFORM. ``` ### 关键点说明: 1. **数据结构定义**:通过 `TYPES` 定义要显示的数据结构 2. **字段目录**:使用 `LVC_S_FCAT` 结构控制列属性(列名、标题、宽度等) 3. **布局设置**: - `zebra = 'X'`:启用斑马纹交替背景色 - `sel_mode = 'A'`:启用行选择功能(引用[3]) 4. **函数调用**: - `i_callback_program`:指定调用程序 - `t_outtab`:传递要显示的数据内 ### 效果说明: 执行后将显示包含4列的ALV: 1. 物料号(MATNR) 2. 物料描述(MAKTX) 3. 数量(MENGE) 4. 单位(MEINS) 支持功能: - 列排序(点击列标题) - 列宽调整(拖动列边界) - 行选择(按Ctrl+选择多行) - 数据导出(通过工具栏按钮) > 注意:实际使用时需替换 `gt_data` 为您的业务数据,可通过 `SELECT` 语句从数据库中获取[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值