abap函数(RFC接口)参数展示报表
版本更新,经过FAFA增加 EXL导出功能,我再把新语法改成了旧语法,老版本也能用了。
多层结构的,目前还没解决怎么弄。
结果展示
导出文档展示
在SMW0上传对象名称为“ZFUNNAM”的文档,内容为下
附上源代码
ZFUPARAREF

*&---------------------------------------------------------------------* *& Report ZFUNNAME *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZFUPARAREF. INCLUDE ZFUNNAME_SCL. INCLUDE ZFUNNAME_DATA. INCLUDE ZFUNNAME_FORM. INCLUDE ZFUNNAME_OLE. *---------------------FANTASY ON 20220614------------------------------ *---目前以知BUG 如果多层嵌套的结构或表 可能会标准函数读取不出来嵌套导致DUMP *---ZFUNNAME_SPARE为新函数代码 可以不DUMP但是解决不了多层嵌套的问题 INCLUDE ZFUNNAME_SPARE. *---------------------------------------------------------------------- AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_NAME. PERFORM FRM_F4_SEARCH. START-OF-SELECTION. PERFORM FRM_GET_DATA. END-OF-SELECTION. IF GT_OUTPUT IS NOT INITIAL. PERFORM FRM_DISPLAY_DATA. ELSE. MESSAGE '接口不存在' TYPE 'S' DISPLAY LIKE 'E'. ENDIF. *----------修改日志---------- *------1.0牙总 程序创建------ *------1.1FAFA EXL导出功能增加 BUG修改
INCLUDE ZFUNNAME_SCL.

*&---------------------------------------------------------------------* *& INCLUDE ZFUNNAME_SCL *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& 包含 ZIT0002_SCREEN *&---------------------------------------------------------------------* PARAMETERS: P_NAME TYPE HEADER_FB-NAME OBLIGATORY.
INCLUDE ZFUNNAME_DATA.

*&---------------------------------------------------------------------* *& 包含 ZIT0002_HEAD *&---------------------------------------------------------------------* *------------------------OLE所需变量------------------------------------ DATA GV_FILE TYPE LOCALFILE."文件完整路径 DATA:V_EXCEL TYPE OBJ_RECORD, V_WORKBOOK TYPE OBJ_RECORD, V_SHEET TYPE OBJ_RECORD, V_RANGE TYPE OBJ_RECORD, V_CELL1 TYPE OBJ_RECORD, V_CELL2 TYPE OBJ_RECORD, V_FONT TYPE OBJ_RECORD, V_BORDER TYPE OBJ_RECORD, V_ROW TYPE OBJ_RECORD, G_PICTURES TYPE OBJ_RECORD, G_SHAPERANGE TYPE OBJ_RECORD, G_SHAPE TYPE OBJ_RECORD, V_COLUMN TYPE OBJ_RECORD. *---------------------------------------------------------------- DATA: HEADER_GD TYPE HEADER_FB, TABLES_GD TYPE RSFB_PARA WITH HEADER LINE, IMPORT_GD TYPE RSFB_PARA WITH HEADER LINE, EXPORT_GD TYPE RSFB_PARA WITH HEADER LINE, CHANGE_GD TYPE RSFB_PARA WITH HEADER LINE, PNAME_GD TYPE TFDIR-PNAME. TYPES: BEGIN OF SY_OUTPUT, FNAMET TYPE FUPARAREF-STRUCTURE, "表名 FUNCNAME TYPE TFTIT-FUNCNAME, "函数名 STEXT TYPE TFTIT-STEXT, "函数描述 FNAMEIN TYPE FUPARAREF-STRUCTURE, "输入字段 STEXTIN TYPE FUNCT-STEXT, "输入字段描述 DTYPEIN TYPE DD03L-DATATYPE, "输入字段类型 LENGIN TYPE DD03L-LENG, "输入字段长度 DECIMIN TYPE DD03L-DECIMALS, "输入字段小数位 OPTIONALIN TYPE FUPARAREF-OPTIONAL, "是否为可选 FNAMEOUT TYPE FUPARAREF-STRUCTURE, "输出字段 STEXTOUT TYPE FUNCT-STEXT, "输出字段描述 DTYPEOUT TYPE DD03L-DATATYPE, "输出字段类型 LENGOUT TYPE DD03L-LENG, "输出字段长度 DECIMOUT TYPE DD03L-DECIMALS, "输出字段小数位 OPTIONALOUT TYPE FUPARAREF-OPTIONAL, "是否为可选 STEXTT TYPE FUNCT-STEXT, "描述 FNAMETP TYPE FUPARAREF-STRUCTURE, "表字段 DDTEXTTP TYPE DD04T-DDTEXT, "表字段描述 DTYPETP TYPE DD03L-DATATYPE, "表字段类型 LENGTP TYPE DD03L-LENG, "表字段长度 DECIMTP TYPE DD03L-DECIMALS, "表字段小数位 OPTIONALTP TYPE FUPARAREF-OPTIONAL, "是否为可选 SLBOX, END OF SY_OUTPUT. DATA: GT_OUTPUT TYPE TABLE OF SY_OUTPUT, GS_OUTPUT TYPE SY_OUTPUT. DATA: GS_LAYOUT TYPE LVC_S_LAYO, GT_FIELDCAT TYPE LVC_T_FCAT. DATA: GR_GRID TYPE REF TO CL_GUI_ALV_GRID.
INCLUDE ZFUNNAME_FORM.

*&---------------------------------------------------------------------* *& INCLUDE ZFUNNAME_FORM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& 包含 ZIT0002_FORM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& 包含 ZIT0002_FORM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_F4_SEARCH *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_F4_SEARCH . DATA LT_RETURN LIKE TABLE OF DDSHRETVAL. DATA: LT_TFTIT LIKE TABLE OF TFTIT. SELECT * INTO TABLE LT_TFTIT FROM TFTIT WHERE SPRAS EQ SY-LANGU AND FUNCNAME LIKE 'Z%'. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING RETFIELD = 'FUNCNAME' "返回的字段 DYNPPROG = SY-REPID "程序名 DYNPNR = SY-DYNNR "屏幕号 DYNPROFIELD = 'p_name' WINDOW_TITLE = '函数名' VALUE_ORG = 'S' TABLES VALUE_TAB = LT_TFTIT RETURN_TAB = LT_RETURN EXCEPTIONS PARAMETER_ERROR = 1 NO_VALUES_FOUND = 2 OTHERS = 3. IF SY-SUBRC <> 0. ENDIF. ENDFORM. "FRM_F4_SEARCH *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_GET_DATA . DATA: LT_DD03LT LIKE TABLE OF DD03L, LS_DD03LT LIKE DD03L, LT_DD03LI LIKE TABLE OF DD03L, LS_DD03LI LIKE DD03L, LS_DD03LI2 LIKE DD03L, LT_DD03LE LIKE TABLE OF DD03L, LS_DD03LE LIKE DD03L, LS_DD03L2E LIKE DD03L, LT_DD04LI LIKE TABLE OF DD04L, LS_DD04LI LIKE DD04L, LS_DD04LI2 LIKE DD04L, LT_DD04LE LIKE TABLE OF DD04L, LS_DD04LE LIKE DD04L, LS_DD04L2E LIKE DD04L. DATA: LT_TABLE LIKE TABLE OF DNTAB, LT_TABLEI LIKE TABLE OF DNTAB, LS_TABLEI LIKE DNTAB, LT_TABLEE LIKE TABLE OF DNTAB, LS_TABLEE LIKE DNTAB, LT_TABLET LIKE TABLE OF DNTAB. DATA: LS_TABLE TYPE DNTAB. DATA: LV_TABNAME TYPE DNTAB-TABNAME. DATA: DESC_STRUC TYPE REF TO CL_ABAP_STRUCTDESCR, GIT_FIELDS TYPE DDFIELDS. FIELD-SYMBOLS: <GFS_COMPONENT> TYPE DFIES. *---START ADD BY FANTASY ON 20220615 DATA LV_TABNAME3 LIKE DNTAB-TABNAME. *---END ADD BY FANTASY ON 20220615 **函数名称 DATA: LT_TFTIT LIKE TABLE OF TFTIT. SELECT * INTO TABLE LT_TFTIT FROM TFTIT WHERE SPRAS EQ SY-LANGU AND FUNCNAME EQ P_NAME. **函数参数及其参考 DATA: LT_FUPARAREF LIKE TABLE OF FUPARAREF, LS_FUPARAREF LIKE FUPARAREF. SELECT * INTO TABLE LT_FUPARAREF FROM FUPARAREF WHERE FUNCNAME EQ P_NAME. LOOP AT LT_FUPARAREF INTO LS_FUPARAREF. IF 'SY-' CO LS_FUPARAREF-STRUCTURE . REPLACE ALL OCCURRENCES OF 'SY-' IN LS_FUPARAREF-STRUCTURE WITH 'SYST-'. ENDIF. CASE LS_FUPARAREF-PARAMTYPE. WHEN 'I'. IF '-' CO LS_FUPARAREF-STRUCTURE. SPLIT LS_FUPARAREF-STRUCTURE AT '-' INTO LS_DD03LI-TABNAME LS_DD03LI-FIELDNAME. APPEND LS_DD03LI TO LT_DD03LI. CLEAR LS_DD03LI. ELSE. CLEAR: LT_TABLE[]. LV_TABNAME = LS_FUPARAREF-STRUCTURE. SELECT COUNT(*) FROM DD04L WHERE ROLLNAME EQ LV_TABNAME. IF SY-SUBRC NE 0. CALL FUNCTION 'NAMETAB_GET' EXPORTING LANGU = SY-LANGU TABNAME = LV_TABNAME TABLES NAMETAB = LT_TABLE EXCEPTIONS NO_TEXTS_FOUND = 1. APPEND LINES OF LT_TABLE[] TO LT_TABLEI[]. ELSE. LS_DD04LI-ROLLNAME = LS_FUPARAREF-STRUCTURE. APPEND LS_DD04LI TO LT_DD04LI. CLEAR LS_DD04LI. ENDIF. ENDIF. WHEN 'E'. IF '-' CO LS_FUPARAREF-STRUCTURE . SPLIT LS_FUPARAREF-STRUCTURE AT '-' INTO LS_DD03LE-TABNAME LS_DD03LE-FIELDNAME. APPEND LS_DD03LE TO LT_DD03LE. CLEAR LS_DD03LE. ELSE. CLEAR: LT_TABLE[]. LV_TABNAME = LS_FUPARAREF-STRUCTURE. SELECT COUNT(*) FROM DD04L WHERE ROLLNAME EQ LV_TABNAME. IF SY-SUBRC NE 0. CALL FUNCTION 'NAMETAB_GET' EXPORTING LANGU = SY-LANGU TABNAME = LV_TABNAME TABLES NAMETAB = LT_TABLE EXCEPTIONS NO_TEXTS_FOUND = 1. APPEND LINES OF LT_TABLE[] TO LT_TABLEE[]. ELSE. LS_DD04LE-ROLLNAME = LS_FUPARAREF-STRUCTURE. APPEND LS_DD04LE TO LT_DD04LE. CLEAR LS_DD04LE. ENDIF. ENDIF. WHEN 'T'. CLEAR: LT_TABLE[]. LV_TABNAME = LS_FUPARAREF-STRUCTURE. CALL FUNCTION 'NAMETAB_GET' EXPORTING LANGU = SY-LANGU TABNAME = LV_TABNAME TABLES NAMETAB = LT_TABLE EXCEPTIONS NO_TEXTS_FOUND = 1. APPEND LINES OF LT_TABLE[] TO LT_TABLET[]. WHEN OTHERS. ENDCASE. MODIFY LT_FUPARAREF FROM LS_FUPARAREF. CLEAR LS_FUPARAREF. ENDLOOP. DATA: LT_FUPARAREFI LIKE TABLE OF FUPARAREF, LT_FUPARAREFE LIKE TABLE OF FUPARAREF, LT_FUPARAREFT LIKE TABLE OF FUPARAREF. LT_FUPARAREFI = LT_FUPARAREF[]. LT_FUPARAREFE = LT_FUPARAREF[]. LT_FUPARAREFT = LT_FUPARAREF[]. DELETE LT_FUPARAREFI[] WHERE PARAMTYPE NE 'I'. DELETE LT_FUPARAREFE[] WHERE PARAMTYPE NE 'E'. DELETE LT_FUPARAREFT[] WHERE PARAMTYPE NE 'T'. DATA: LT_DD04L LIKE TABLE OF DD04L, LS_DD04L LIKE DD04L, LT_DD04L2 LIKE TABLE OF DD04L, LS_DD04L2 LIKE DD04L, LT_DD03L LIKE TABLE OF DD03L, LS_DD03L LIKE DD03L, LT_DD03L2 LIKE TABLE OF DD03L, LS_DD03L2 LIKE DD03L, LT_FUNCT LIKE TABLE OF FUNCT. IF LT_DD04LI[] IS NOT INITIAL. SELECT * INTO TABLE LT_DD04L FROM DD04L FOR ALL ENTRIES IN LT_DD04LI WHERE ROLLNAME EQ LT_DD04LI-ROLLNAME. ENDIF. IF LT_DD04LE[] IS NOT INITIAL. SELECT * INTO TABLE LT_DD04L2 FROM DD04L FOR ALL ENTRIES IN LT_DD04LE WHERE ROLLNAME EQ LT_DD04LE-ROLLNAME. ENDIF. IF LT_DD03LI[] IS NOT INITIAL. " SELECT * INTO TABLE LT_DD03L FROM DD03L FOR ALL ENTRIES IN LT_DD03LI WHERE TABNAME EQ LT_DD03LI-TABNAME AND FIELDNAME EQ LT_DD03LI-FIELDNAME. ENDIF. IF LT_DD03LE[] IS NOT INITIAL. SELECT * INTO TABLE LT_DD03L2 FROM DD03L FOR ALL ENTRIES IN LT_DD03LE WHERE TABNAME EQ LT_DD03LE-TABNAME AND FIELDNAME EQ LT_DD03LE-FIELDNAME. ENDIF. SELECT * INTO TABLE LT_FUNCT FROM FUNCT WHERE FUNCNAME EQ P_NAME. DATA: LV_TABIX_I TYPE SY-TABIX, LV_TABIX_I2 TYPE SY-TABIX, LV_TABIX_I3 TYPE SY-TABIX, LV_TABIX_I4 TYPE SY-TABIX, LV_TABIX_E TYPE SY-TABIX, LV_TABIX_E2 TYPE SY-TABIX, LV_TABIX_E3 TYPE SY-TABIX, LV_TABIX_E4 TYPE SY-TABIX, LV_TABIX_T TYPE SY-TABIX, LV_NUM TYPE SY-TABIX, LV_NUM2 TYPE SY-TABIX, LV_NUMI TYPE SY-TABIX, LV_NUMIT TYPE SY-TABIX, LV_NUME TYPE SY-TABIX, LV_NUMET TYPE SY-TABIX, LV_NUMT TYPE SY-TABIX, LV_TABIXTT TYPE SY-TABIX. DESCRIBE TABLE LT_DD03LI LINES LV_TABIX_I2. DESCRIBE TABLE LT_DD04LI LINES LV_TABIX_I3. DESCRIBE TABLE LT_TABLEI LINES LV_TABIX_I4. DESCRIBE TABLE LT_DD03L2 LINES LV_TABIX_E2. DESCRIBE TABLE LT_DD04L2 LINES LV_TABIX_E3. DESCRIBE TABLE LT_TABLEE LINES LV_TABIX_E4. DESCRIBE TABLE LT_TABLET LINES LV_TABIX_T. LV_TABIX_I = LV_TABIX_I2 + LV_TABIX_I3 + LV_TABIX_I4. LV_TABIX_E = LV_TABIX_E2 + LV_TABIX_E3 + LV_TABIX_E4. IF LV_TABIX_I GE LV_TABIX_E. LV_NUM = LV_TABIX_I. ELSE. LV_NUM = LV_TABIX_E. ENDIF. IF LV_NUM LT LV_TABIX_T. LV_NUM = LV_TABIX_T. ENDIF. DATA LS_FUNCT LIKE FUNCT. DATA: LS_TFTIT LIKE LINE OF LT_TFTIT. DO LV_NUM TIMES. LV_NUM2 = LV_NUM2 + 1. READ TABLE LT_TFTIT INTO LS_TFTIT INDEX 1. IF SY-SUBRC EQ 0. GS_OUTPUT-FUNCNAME = LS_TFTIT-FUNCNAME. GS_OUTPUT-STEXT = LS_TFTIT-STEXT. ENDIF. ** 输入参数 I IF LV_TABIX_I2 GE LV_NUM2. READ TABLE LT_DD03LI INTO LS_DD03LI2 INDEX LV_NUM2. READ TABLE LT_DD03L INTO LS_DD03L WITH KEY TABNAME = LS_DD03LI2-TABNAME FIELDNAME = LS_DD03LI2-FIELDNAME. IF SY-SUBRC EQ 0. *---START ADD BY FANTASY ON 20220615 LV_TABNAME3 = LS_DD03L-TABNAME. *---END ADD BY FANTASY ON 20220615 CONCATENATE LS_DD03L-TABNAME '-' LS_DD03L-FIELDNAME INTO GS_OUTPUT-FNAMEIN . * gs_output-fnamein = LS_DD03L-TABNAME && '-' && LS_DD03L-FIELDNAME. GS_OUTPUT-DTYPEIN = LS_DD03L-DATATYPE. GS_OUTPUT-LENGIN = LS_DD03L-LENG. GS_OUTPUT-DECIMIN = LS_DD03L-DECIMALS. ENDIF. ELSE. ADD 1 TO LV_NUMI. IF LV_TABIX_I3 GE LV_NUMI. READ TABLE LT_DD04LI INTO LS_DD04LI2 INDEX LV_NUMI. READ TABLE LT_DD04L INTO LS_DD04L WITH KEY ROLLNAME = LS_DD04LI2-ROLLNAME. IF SY-SUBRC EQ 0. LV_TABNAME3 = LS_DD04L-ROLLNAME. GS_OUTPUT-FNAMEIN = LS_DD04L-ROLLNAME. GS_OUTPUT-DTYPEIN = LS_DD04L-DATATYPE. GS_OUTPUT-LENGIN = LS_DD04L-LENG. GS_OUTPUT-DECIMIN = LS_DD04L-DECIMALS.. ENDIF. ELSE. ADD 1 TO LV_NUMIT. READ TABLE LT_TABLEI INTO LS_TABLEI INDEX LV_NUMIT. IF SY-SUBRC EQ 0. LV_TABNAME3 = LS_TABLEI-TABNAME. CONCATENATE LS_TABLEI-TABNAME '-' LS_TABLEI-FIELDNAME INTO GS_OUTPUT-FNAMEIN . * gs_output-fnamein = |{ LS_TABLEI-TABNAME }-{ LS_TABLEI-FIELDNAME }|. GS_OUTPUT-STEXTIN = LS_TABLEI-FIELDTEXT. GS_OUTPUT-DTYPEIN = LS_TABLEI-DATATYPE. IF LS_TABLEI-DDLEN EQ LS_TABLEI-INTLEN. GS_OUTPUT-LENGIN = LS_TABLEI-DDLEN / 2. ELSE. GS_OUTPUT-LENGIN = LS_TABLEI-DDLEN. ENDIF. GS_OUTPUT-DECIMIN = LS_TABLEI-DECIMALS. ENDIF. ENDIF. ENDIF. CLEAR: LS_DD03LI2,LS_DD03L,LS_DD04LI2,LS_DD04L. READ TABLE LT_FUPARAREFI INTO LS_FUPARAREF WITH KEY STRUCTURE = GS_OUTPUT-FNAMEIN. IF SY-SUBRC EQ 0. LV_TABIXTT = SY-TABIX. GS_OUTPUT-FNAMEIN = LS_FUPARAREF-PARAMETER. GS_OUTPUT-OPTIONALIN = LS_FUPARAREF-OPTIONAL. READ TABLE LT_FUNCT INTO LS_FUNCT WITH KEY PARAMETER = GS_OUTPUT-FNAMEIN. IF SY-SUBRC EQ 0. GS_OUTPUT-STEXTIN = LS_FUNCT-STEXT. ENDIF. DELETE LT_FUPARAREFI[] INDEX LV_TABIXTT. ELSE. *---START ADD BY FANTASY ON 20220615 READ TABLE LT_FUPARAREF INTO LS_FUPARAREF WITH KEY STRUCTURE = LV_TABNAME3 PARAMTYPE = 'I'. IF SY-SUBRC = 0. CONCATENATE LS_FUPARAREF-PARAMETER '-' LS_TABLEI-FIELDNAME INTO GS_OUTPUT-FNAMEIN . * gs_output-fnamein = |{ LS_FUPARAREF-PARAMETER }-{ LS_TABLEI-FIELDNAME }|. ENDIF. ENDIF. CLEAR LV_TABNAME3. *---END ADD BY FANTASY ON 20220615 **输出参数 E IF LV_TABIX_E2 GE LV_NUM2. READ TABLE LT_DD03LE INTO LS_DD03L2E INDEX LV_NUM2. READ TABLE LT_DD03L2 INTO LS_DD03L2 WITH KEY TABNAME = LS_DD03L2E-TABNAME FIELDNAME = LS_DD03L2E-FIELDNAME. IF SY-SUBRC EQ 0. *---START ADD BY FANTASY ON 20220615 LV_TABNAME3 = LS_DD03L2-TABNAME. *---END ADD BY FANTASY ON 20220615 CONCATENATE LS_DD03L2-TABNAME '-' LS_DD03L2-FIELDNAME INTO GS_OUTPUT-FNAMEOUT . * gs_output-fnameout = |{ LS_DD03L2-TABNAME }-{ LS_DD03L2-FIELDNAME }|. GS_OUTPUT-DTYPEOUT = LS_DD03L2-DATATYPE. GS_OUTPUT-LENGOUT = LS_DD03L2-LENG. GS_OUTPUT-DECIMOUT = LS_DD03L2-DECIMALS. ENDIF. ELSE. ADD 1 TO LV_NUME. IF LV_TABIX_E3 GE LV_NUME. READ TABLE LT_DD04LE INTO LS_DD04L2E INDEX LV_NUME. READ TABLE LT_DD04L2 INTO LS_DD04L2 WITH KEY ROLLNAME = LS_DD04L2E-ROLLNAME. IF SY-SUBRC EQ 0. GS_OUTPUT-FNAMEOUT = LS_DD04L2-ROLLNAME. GS_OUTPUT-DTYPEOUT = LS_DD04L2-DATATYPE. GS_OUTPUT-LENGOUT = LS_DD04L2-LENG. GS_OUTPUT-DECIMOUT = LS_DD04L2-DECIMALS. * DELETE lt_dd04l2 INDEX 1. ENDIF. ELSE. ADD 1 TO LV_NUMET. READ TABLE LT_TABLEE INTO LS_TABLEE INDEX LV_NUMET. IF SY-SUBRC EQ 0. *---START ADD BY FANTASY ON 20220615 LV_TABNAME3 = LS_TABLEE-TABNAME. *---END ADD BY FANTASY ON 20220615 CONCATENATE LS_TABLEE-TABNAME '-' LS_TABLEE-FIELDNAME INTO GS_OUTPUT-FNAMEOUT . * gs_output-fnameout = |{ LS_TABLEE-TABNAME }-{ LS_TABLEE-FIELDNAME }|. GS_OUTPUT-STEXTOUT = LS_TABLEE-FIELDTEXT. GS_OUTPUT-DTYPEOUT = LS_TABLEE-DATATYPE. IF LS_TABLEE-DDLEN EQ LS_TABLEE-INTLEN. GS_OUTPUT-LENGOUT = LS_TABLEE-DDLEN / 2. ELSE. GS_OUTPUT-LENGOUT = LS_TABLEE-DDLEN. ENDIF. GS_OUTPUT-DECIMOUT = LS_TABLEE-DECIMALS. ENDIF. ENDIF. ENDIF. CLEAR: LS_DD03L2E,LS_DD03L2,LS_DD04L2E,LS_DD04L2. READ TABLE LT_FUPARAREF INTO LS_FUPARAREF WITH KEY STRUCTURE = GS_OUTPUT-FNAMEOUT PARAMTYPE = 'E'. IF SY-SUBRC EQ 0. LV_TABIXTT = SY-TABIX. GS_OUTPUT-FNAMEOUT = LS_FUPARAREF-PARAMETER. GS_OUTPUT-OPTIONALOUT = LS_FUPARAREF-OPTIONAL. READ TABLE LT_FUNCT INTO LS_FUNCT WITH KEY PARAMETER = GS_OUTPUT-FNAMEOUT. IF SY-SUBRC EQ 0. GS_OUTPUT-STEXTOUT = LS_FUNCT-STEXT. ENDIF. DELETE LT_FUPARAREF[] INDEX LV_TABIXTT. ELSE. *---START ADD BY FANTASY ON 20220615 READ TABLE LT_FUPARAREF INTO LS_FUPARAREF WITH KEY STRUCTURE = LV_TABNAME3 PARAMTYPE = 'E'. IF SY-SUBRC = 0. CONCATENATE LS_FUPARAREF-PARAMETER '-' LS_TABLEE-FIELDNAME INTO GS_OUTPUT-FNAMEOUT . * gs_output-fnameout = |{ LS_FUPARAREF-PARAMETER }-{ LS_TABLEE-FIELDNAME }|. ENDIF. ENDIF. CLEAR LV_TABNAME3. *---END ADD BY FANTASY ON 20220615 **表格参数 T READ TABLE LT_TABLET INTO LS_TABLE INDEX LV_NUM2. IF SY-SUBRC EQ 0. GS_OUTPUT-FNAMET = LS_TABLE-TABNAME. GS_OUTPUT-FNAMETP = LS_TABLE-FIELDNAME. GS_OUTPUT-DTYPETP = LS_TABLE-DATATYPE. IF LS_TABLE-DDLEN EQ LS_TABLE-INTLEN. GS_OUTPUT-LENGTP = LS_TABLE-DDLEN / 2. ELSE. GS_OUTPUT-LENGTP = LS_TABLE-DDLEN. ENDIF. GS_OUTPUT-DECIMTP = LS_TABLE-DECIMALS. GS_OUTPUT-DDTEXTTP = LS_TABLE-FIELDTEXT. ENDIF. READ TABLE LT_FUPARAREF INTO LS_FUPARAREF WITH KEY STRUCTURE = GS_OUTPUT-FNAMET PARAMTYPE = 'T'. IF SY-SUBRC EQ 0. GS_OUTPUT-FNAMET = LS_FUPARAREF-PARAMETER. GS_OUTPUT-OPTIONALTP = LS_FUPARAREF-OPTIONAL. READ TABLE LT_FUNCT INTO LS_FUNCT WITH KEY PARAMETER = GS_OUTPUT-FNAMET. IF SY-SUBRC EQ 0. GS_OUTPUT-STEXTT = LS_FUNCT-STEXT. ENDIF. ENDIF. APPEND GS_OUTPUT TO GT_OUTPUT. CLEAR GS_OUTPUT. ENDDO. ENDFORM. "FRM_GET_DATA *&---------------------------------------------------------------------* *& Form FRM_DISPLAY_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM FRM_DISPLAY_DATA . PERFORM FRM_SET_LAYOUT. PERFORM FRM_SET_FIELDCAT. PERFORM FRM_ALV_DISPLAY TABLES GT_OUTPUT. ENDFORM. "FRM_DISPLAY_DATA *&---------------------------------------------------------------------* *& FORM FRM_SET_LAYOUT *&---------------------------------------------------------------------* *& text LATOUT *&---------------------------------------------------------------------* FORM FRM_SET_LAYOUT. CLEAR: GS_LAYOUT. GS_LAYOUT-BOX_FNAME = 'SLBOX'. GS_LAYOUT-ZEBRA = 'X'. GS_LAYOUT-CWIDTH_OPT = 'X'. ENDFORM. "FRM_SET_LAYOUT *&---------------------------------------------------------------------* *& FORM FRM_SET_FIELDCAT *&---------------------------------------------------------------------* *& text FIELDCAT *&---------------------------------------------------------------------* FORM FRM_SET_FIELDCAT. CLEAR: GT_FIELDCAT[]. DATA: LS_FIELDCAT TYPE LVC_S_FCAT. DEFINE SET_FIELDCAT. CLEAR: LS_FIELDCAT. LS_FIELDCAT-FIELDNAME = &1. LS_FIELDCAT-REF_FIELD = &2. LS_FIELDCAT-REF_TABLE = &3. LS_FIELDCAT-CONVEXIT = &4. LS_FIELDCAT-DO_SUM = &5. LS_FIELDCAT-SELTEXT = &6. LS_FIELDCAT-SCRTEXT_L = &6. LS_FIELDCAT-SCRTEXT_M = &6. LS_FIELDCAT-SCRTEXT_S = &6. LS_FIELDCAT-COLTEXT = &6. APPEND LS_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. *显示内容 SET_FIELDCAT 'FUNCNAME' 'FUNCNAME' 'TFTIT' '' '' '函数名'. SET_FIELDCAT 'STEXT' 'STEXT' 'TFTIT' '' '' '函数描述'. SET_FIELDCAT 'FNAMEIN' 'STRUCTURE' 'FUPARAREF' '' '' '输入字段'. SET_FIELDCAT 'STEXTIN' 'STEXT' 'FUNCT' '' '' '输入字段描述'. SET_FIELDCAT 'DTYPEIN' 'DATATYPE' 'DD03L' '' '' '输入字段类型'. SET_FIELDCAT 'LENGIN' 'LENG' 'DD03L' '' '' '输入字段长度'. SET_FIELDCAT 'DECIMIN' 'DECIMALS' 'DD03L' '' '' '输入字段小数位'. *---START ADD BY FANTASY ON 20220615 SET_FIELDCAT 'OPTIONALIN' 'OPTIONAL' 'FUPARAREF' '' '' '是否可选'. *---END ADD BY FANTASY ON 20220615 SET_FIELDCAT 'FNAMEOUT' 'STRUCTURE' 'FUPARAREF' '' '' '输出字段'. SET_FIELDCAT 'STEXTOUT' 'STEXT' 'FUNCT' '' '' '输出字段描述'. SET_FIELDCAT 'DTYPEOUT' 'DATATYPE' 'DD03L' '' '' '输出字段类型'. SET_FIELDCAT 'LENGOUT' 'LENG' 'DD03L' '' '' '输出字段长度'. SET_FIELDCAT 'DECIMOUT' 'DECIMALS' 'DD03L' '' '' '输出字段小数位'. *---START ADD BY FANTASY ON 20220615 * SET_FIELDCAT 'OPTIONALOUT' 'OPTIONAL' 'FUPARAREF' '' '' '是否可选'. *---END ADD BY FANTASY ON 20220615 SET_FIELDCAT 'FNAMET' 'STRUCTURE' 'FUPARAREF' '' '' '表'. SET_FIELDCAT 'STEXTT' 'STEXT' 'FUNCT' '' '' '表描述'. SET_FIELDCAT 'FNAMETP' 'STRUCTURE' 'FUPARAREF' '' '' '表字段'. SET_FIELDCAT 'DDTEXTTP' 'DDTEXT' 'DD04T' '' '' '表字段描述'. SET_FIELDCAT 'DTYPETP' 'DATATYPE' 'DD03L' '' '' '表字段类型'. SET_FIELDCAT 'LENGTP' 'LENG' 'DD03L' '' '' '表字段长度'. SET_FIELDCAT 'DECIMTP' 'DECIMALS' 'DD03L' '' '' '表字段小数位'. *---START ADD BY FANTASY ON 20220615 SET_FIELDCAT 'OPTIONALTP' 'OPTIONAL' 'FUPARAREF' '' '' '是否可选'. *---END ADD BY FANTASY ON 20220615 ENDFORM. "FRM_SET_FIELDCAT *&---------------------------------------------------------------------* *& FORM FRM_ALV_DISPLAY *&---------------------------------------------------------------------* *& text ALV *&---------------------------------------------------------------------* FORM FRM_ALV_DISPLAY TABLES IT_TABLE. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_PF_STATUS_SET = 'FRM_SET_PF_STATUS' I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' IS_LAYOUT_LVC = GS_LAYOUT IT_FIELDCAT_LVC = GT_FIELDCAT I_SAVE = 'U' TABLES T_OUTTAB = IT_TABLE EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. ENDIF. ENDFORM. "FRM_ALV_DISPLAY *---START ADD BY FANTASY ON 20220615 *&---------------------------------------------------------------------* *& FORM FRM_PF_STATUS *&---------------------------------------------------------------------* *& text 按键设置 *&---------------------------------------------------------------------* FORM FRM_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'STD'. ENDFORM. "FRM_SET_PF_STATUS *&---------------------------------------------------------------------* *& FORM FRM_UER_COMMMAN *&---------------------------------------------------------------------* *& text 按键控制 *&---------------------------------------------------------------------* FORM FRM_USER_COMMAND USING U_UCOMM LIKE SY-UCOMM U_SELFIELD TYPE SLIS_SELFIELD. DATA: LW_STBL TYPE LVC_S_STBL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING E_GRID = GR_GRID. CALL METHOD GR_GRID->CHECK_CHANGED_DATA. CASE U_UCOMM. WHEN 'ZEXCEL'. PERFORM FRM_DOWN_EXCEL. ENDCASE. U_SELFIELD-REFRESH = 'X'. U_SELFIELD-COL_STABLE = 'X'. U_SELFIELD-ROW_STABLE = 'X'. ENDFORM. "FRM_USER_COMMAND *---END ADD BY FANTASY ON 20220615
INCLUDE ZFUNNAME_SPARE. 无意义,就不放出来了。
最后:如果觉得有用,点个赞再走,如果有发现BUG,请通知我,如果更新了功能,也请分享下我。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」