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修改
View Code

INCLUDE ZFUNNAME_SCL.

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

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.
View Code

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
View Code

INCLUDE ZFUNNAME_SPARE. 无意义,就不放出来了。

最后:如果觉得有用,点个赞再走,如果有发现BUG,请通知我,如果更新了功能,也请分享下我。

posted @ 2020-12-01 11:27  蛀牙首领  阅读(546)  评论(0编辑  收藏  举报