看到这些东东是不是很烦,根本不知是什么,打包一个QUERY就会往请求号里添加无数个这样的元素
其实 打开QueryDesigner,选中任意一个元素,看高级选项那页,都会有这样一个ID号,包括Query本身的技术名 也对应着一个ID
这样看起来稍微有点关系了,但光凭一个ID号去判断他是哪个Query里的哪个元素,就比较费事,这里也先不多说了,还是简单粗暴点
逻辑基础:
RSRREPDIR 表中存放Query以及他们的ID号
RSZELTTXT表中存放各个元素的文本描述
E071表中存放请求号直接包含的所有对象
看效果
上代码:
同样,复制之后需要从FunctionGroup KKBL中复制一个 STANDARD_FULLSCREEN 状态条过来
REPORT ZREPDIR.
TABLES : E070 , E071 , RSZELTTXT, RSRREPDIR .
TYPE-POOLS: slis.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
"定义ALV显示的字段列及其描述等属性
gs_layout TYPE slis_layout_alv,
"定义ALV显示的整体布局控制
gs_print TYPE slis_print_alv,
"ALV打印格式
g_repid LIKE sy-repid.
"用于保存当前运行的程序名,"用来让ALV调用后返回主程序
DATA: v_stru_disvar TYPE disvariant,
"ALV显示格式
it_sort TYPE slis_t_sortinfo_alv WITH HEADER LINE,
"ALV排序内表
git_events TYPE slis_t_event, "ALV 事件
git_listheader TYPE slis_t_listheader. "ALV 表头
DATA l_tmp TYPE lvc_title.
DATA: BEGIN OF it_e070 OCCURS 0.
INCLUDE STRUCTURE e070.
DATA: END OF it_e070.
DATA: BEGIN OF it_e071 OCCURS 0,
TRKORR LIKE E071-TRKORR,
AS4POS LIKE E071-AS4POS,
PGMID LIKE E071-PGMID,
OBJECT LIKE E071-OBJECT,
OBJ_NAME LIKE RSRREPDIR-COMPUID,
OBJFUNC LIKE E071-OBJFUNC,
LOCKFLAG LIKE E071-LOCKFLAG,
GENNUM LIKE E071-GENNUM,
LANG LIKE E071-LANG,
ACTIVITY LIKE E071-ACTIVITY,
END OF it_e071.
DATA: BEGIN OF it_RSRREPDIR OCCURS 0,
COMPUID LIKE RSRREPDIR-COMPUID,
OBJVERS LIKE RSRREPDIR-OBJVERS,
INFOCUBE LIKE RSRREPDIR-INFOCUBE,
COMPID LIKE RSRREPDIR-COMPID,
TXTLG like RSZELTTXT-TXTLG,
TRKORR LIKE E071-TRKORR,
END OF it_RSRREPDIR.
DATA: BEGIN OF IT_RSZELTTXT OCCURS 0,
ELTUID LIKE RSZELTTXT-ELTUID,
OBJVERS LIKE RSZELTTXT-OBJVERS,
LANGU LIKE RSZELTTXT-LANGU,
TXTLG LIKE RSZELTTXT-TXTLG,
END OF IT_RSZELTTXT.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.
SELECT-OPTIONS P_USER FOR e070-AS4USER ."DEFAULT sy-uname.
SELECT-OPTIONS P_STS FOR e070-TRSTATUS ."DEFAULt 'D'.
SELECT-OPTIONS P_RST FOR E070-TRKORR .
SELECT-OPTIONS P_VSN FOR RSRREPDIR-OBJVERS DEFAULT 'A'.
SELECTION-SCREEN END OF BLOCK bk1.
INITIALIZATION.
FREE: it_RSRREPDIR ,IT_RSZELTTXT, IT_E070 , IT_E071 .
START-OF-SELECTION.
PERFORM frm_comment_build. "设置表头
PERFORM FRM_FETCH_DATA.
PERFORM frm_get_event. "设置自定义ALV事件处理程序
PERFORM init_layout. "设置ALV输出格式
PERFORM init_fieldcat. "设置ALV输出字段
PERFORM frm_output. "ALV输出
*&---------------------------------------------------------------------*
*& Form frm_comment_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_comment_build .
*ALV表头
DATA l_listheader TYPE slis_listheader.
DATA: v_title(60).
CLEAR: git_listheader, l_listheader.
l_listheader-typ = 'S'."M中号字体,H大号字体,S小号字体
v_title = '我的报表清单'.
l_listheader-info = v_title.
APPEND l_listheader TO git_listheader.
ENDFORM. " FRM_COMMENT_BUILD
************************************************************************
*&---------------------------------------------------------------------*
*& Form FRM_FETCH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_FETCH_DATA.
SELECT
b~TRKORR
b~AS4POS
b~PGMID
b~OBJECT
b~OBJ_NAME
b~OBJFUNC
b~LOCKFLAG
b~GENNUM
b~LANG
b~ACTIVITY
FROM E070 as a
JOIN e071 as b
on a~TRKORR = b~TRKORR
INTO CORRESPONDING FIELDS OF TABLE IT_E071
WHERE A~TRKORR IN P_RST
AND a~AS4USER IN P_USER
AND a~TRSTATUS IN P_STS
* AND a~TRFUNCTION = 'S'
AND B~OBJECT = 'ELEM'
ORDER BY b~OBJ_NAME
.
IF IT_E071[] is not INITIAL.
SELECT
COMPUID
OBJVERS
INFOCUBE
* GENUNIID
* COMPTYPE
COMPID
FROM RSRREPDIR
INTO CORRESPONDING FIELDS OF TABLE IT_RSRREPDIR
FOR ALL ENTRIES IN IT_E071
WHERE COMPUID = IT_E071-OBJ_NAME
AND OBJVERS IN P_VSN .
* ORDER BY COMPUID
ENDIF.
SORT IT_RSRREPDIR BY COMPUID .
*
IF IT_RSRREPDIR[] is not INITIAL.
SELECT *
FROM RSZELTTXT
INTO CORRESPONDING FIELDS OF TABLE IT_RSZELTTXT
FOR ALL ENTRIES IN IT_RSRREPDIR
WHERE ELTUID = IT_RSRREPDIR-COMPUID
AND LANGU = 'E'
.
ENDIF.
SORT IT_RSRREPDIR BY COMPID .
LOOP AT IT_RSRREPDIR.
READ TABLE IT_RSZELTTXT
with KEY ELTUID = IT_RSRREPDIR-COMPUID
OBJVERS = IT_RSRREPDIR-OBJVERS
.
IF sy-subrc = 0.
IT_RSRREPDIR-TXTLG = IT_RSZELTTXT-TXTLG .
modify IT_RSRREPDIR.
ENDIF.
READ TABLE it_e071
with KEY OBJ_NAME = IT_RSRREPDIR-COMPUID.
IF sy-subrc = 0.
IT_RSRREPDIR-TRKORR = it_e071-TRKORR .
modify IT_RSRREPDIR.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form frm_get_event
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_get_event .
DATA formname_top_of_page TYPE slis_formname VALUE 'FRM_TOP_OF_PAGE'.
DATA l_events TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = git_events
EXCEPTIONS
list_type_wrong = 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.
CLEAR l_events.
READ TABLE git_events
WITH KEY name = slis_ev_top_of_page INTO l_events.
IF sy-subrc = 0.
MOVE 'FRM_TOP_OF_PAGE' TO l_events-form.
MODIFY git_events FROM l_events INDEX sy-tabix.
ELSE.
l_events-form = 'FRM_TOP_OF_PAGE'.
l_events-name = slis_ev_top_of_page.
APPEND l_events TO git_events.
ENDIF.
ENDFORM. "frm_get_event
************************************************************************
*&---------------------------------------------------------------------*
*& 子函数 frm_top_of_page。
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
FORM frm_top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = git_listheader.
ENDFORM. "FRM_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form init_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM init_layout .
gs_layout-zebra = 'X'.
gs_layout-f2code = '&ETA'. "ALV双击事件
* GS_LAYOUT-DETAIL_POPUP = 'X'.
* GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "自动调整ALVL列宽
* gs_layout-box_fieldname = 'TAB'. "出现选择框
* GS_LAYOUT-EDIT = 'X'. "设置ALV可以编辑
* edit(1) type c, " for grid only
* edit_mode(1) type c, " for grid only
* GS_LAYOUT-TOTALS_ONLY = 'X'.
ENDFORM. " INIT_LAYOUT
************************************************************************
FORM init_fieldcat .
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'IT_RSRREPDIR'
* I_STRUCTURE_NAME = 'RSRREPDIR'
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = sy-repid
CHANGING
CT_FIELDCAT = GT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
if SY-SUBRC <> 0.
* message id SY-MSGID type SY-MSGTY number SY-MSGNO
* with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
LOOP AT GT_FIELDCAT.
* CASE GT_FIELDCAT-FIELDNAME.
* WHEN 'COMP_CODE'.
* GT_FIELDCAT-EDIT = 'X'.
* GT_FIELDCAT-OUTPUTLEN = '8'.
* WHEN OTHERS.
* ENDCASE.
* MODIFY GT_FIELDCAT.
ENDLOOP.
*
ENDFORM. "INIT_FIELDCAT
FORM frm_output .
*ALV输出
g_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
* I_STRUCTURE_NAME = 'ZDEFER_OUT'
i_save = 'X'
i_callback_user_command = 'FRM_USER_COMMAND'
i_callback_pf_status_set = 'FRM_PF_STATUS'
is_variant = v_stru_disvar
it_events = git_events[]
* it_sort = it_sort[] "字段排序后一样缩进
****** is_print = gs_print
TABLES
t_outtab = IT_RSRREPDIR[]
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.
ENDFORM. " FRM_OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
form FRM_USER_COMMAND using R_UCOMM like SY-UCOMM
RS_SELFIELD type SLIS_SELFIELD.
* RS_SELFIELD-refresh = 'X'.
endform. "FRM_USER_COMMAND
************************************************************************
FORM frm_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_FULLSCREEN' .
ENDFORM. "frm_pf_status