SAP BC 表结构查询

发布于:2025-05-21 ⋅ 阅读:(17) ⋅ 点赞:(0)

*&---------------------------------------------------------------------*
*& REPORT ZRPT_BC_TABFLDS
*&
*&---------------------------------------------------------------------*
*& author ABAP00
*& date 20250520
*& from
*& Tcode
*&---------------------------------------------------------------------*
REPORT zrpt_bc_tabflds.

TABLES: dd02l, dd02t, dd03l, dd04l, dd04t.

SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS s_tabnam FOR dd02l-tabname.          "表名
  SELECT-OPTIONS s_fldnam FOR dd03l-fieldname.          "字段名称
  SELECT-OPTIONS S_Kflg FOR dd03l-keyflag.          "关键字
  SELECT-OPTIONS s_tabcls FOR dd02l-tabclass.
  "PARAMETERS pAS4VERS LIKE  dd02L-AS4VERS DEFAULT 'A'.
SELECTION-SCREEN END OF BLOCK 001.

TYPES:
  BEGIN OF typ_data,
    tabname   TYPE dd02l-tabname,          "表名
    t2txt     TYPE dd02t-ddtext,          "表中文描述
    fieldname TYPE dd03l-fieldname,          "字段名称
    keyflag   TYPE dd03l-keyflag,          "关键字
    position  TYPE dd03l-position,          "位置
    domname   TYPE dd03l-domname,          "域名
    memoryid  TYPE dd04l-memoryid,          "参数ID
    headlen   TYPE dd04l-headlen,          "抬头长度
    shlpname  TYPE dd04l-shlpname,          "搜素帮助
    datatype  TYPE dd04l-datatype,          "数据类型
    leng      TYPE dd04l-leng,          "长度
    decimals  TYPE dd04l-decimals,          "小数长度
    outputlen TYPE dd04l-outputlen,          "输出长度
    lowercase TYPE dd04l-lowercase,          "大小写
    signflag  TYPE dd04l-signflag,          "符号
    convexit  TYPE dd04l-convexit,          "转换例程
    t4txt     TYPE dd04t-ddtext,          "字段描述
  END OF typ_data.

DATA:
  stdatum     LIKE sy-datum,
  stuzeit     LIKE sy-uzeit,
  gt_data     TYPE TABLE OF typ_data,
  gs_data     TYPE typ_data,
  gt_fieldcat TYPE lvc_t_fcat,
  gs_fieldcat TYPE lvc_s_fcat,
  gs_layout   TYPE lvc_s_layo.

INITIALIZATION.
  %_s_tabnam_%_app_%-text = '表名'.
  %_S_Fldnam_%_APP_%-text = '字段名称'.
  %_S_Kflg_%_APP_%-text = '关键字'.

START-OF-SELECTION.
  stdatum = sy-datum.
  stuzeit = sy-uzeit.
  PERFORM get_data.
  PERFORM process_data.
  PERFORM writerptrunrecord.
  PERFORM display_data.

*&---------------------------------------------------------------------*
*&      FORM  GET_DATA
*&---------------------------------------------------------------------*
*       获取数据
*----------------------------------------------------------------------*
FORM get_data.
  SELECT
    l2~tabname          "表名
    t2~ddtext AS t2txt          "表中文描述
    l3~fieldname          "字段名称
    l3~keyflag          "关键字
    l3~position          "位置
    l3~domname          "域名
    l4~memoryid          "参数ID
    l4~headlen          "抬头长度
    l4~shlpname          "搜素帮助
    l4~datatype          "数据类型
    l4~leng          "长度
    l4~decimals          "小数长度
    l4~outputlen          "输出长度
    l4~lowercase          "大小写
    l4~signflag          "符号
    l4~convexit          "转换例程
    t4~ddtext AS t4txt          "字段描述
    INTO TABLE gt_data
    FROM dd02l AS l2
    INNER JOIN dd03l AS l3 ON l3~tabname = l2~tabname AND l3~as4local = l2~as4local AND l3~as4vers = l2~as4vers
    INNER JOIN dd04l AS l4 ON l4~rollname = l3~rollname AND l4~as4local = l3~as4local AND l4~as4vers = l3~as4vers
    LEFT JOIN dd04t AS t4 ON t4~rollname = l4~rollname AND t4~as4local = l4~as4local AND t4~as4vers = l4~as4vers AND t4~ddlanguage = SY-langu
  LEFT JOIN dd02t AS t2 ON t2~tabname = l2~tabname AND t2~as4local = l2~as4local AND t2~as4vers = l2~as4vers AND t2~ddlanguage = SY-langu
  WHERE l2~tabname IN s_tabnam AND l2~tabclass IN s_tabcls  and L2~AS4VERS = 'A'
      AND l3~fieldname IN S_FldNAM
      AND l3~keyflag IN S_Kflg.

    sort gt_data by tabname position.
ENDFORM.                    "GET_DATA
*&---------------------------------------------------------------------*
*&      FORM  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       获取数据
*----------------------------------------------------------------------*
FORM writerptrunrecord.

ENDFORM.                    "WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*&      FORM  PROCESS_DATA
*&---------------------------------------------------------------------*
*       处理数据
*----------------------------------------------------------------------*
FORM process_data.

ENDFORM.                    "PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM build_fieldcat USING p_fieldname   TYPE fieldname
                          p_qfieldname  TYPE lvc_qfname
                          p_cfieldname  TYPE lvc_cfname
                          p_ref_table   TYPE lvc_rtname
                          p_ref_field   TYPE lvc_rfname
                          p_convexit    TYPE convexit
                          p_emphasize   TYPE lvc_emphsz
                          p_scrtext_l   TYPE scrtext_l
                          p_no_zero     TYPE xflag.
  gs_fieldcat-fieldname     = p_fieldname.
  gs_fieldcat-qfieldname    = p_qfieldname.
  gs_fieldcat-cfieldname    = p_cfieldname.
  gs_fieldcat-ref_table     = p_ref_table.
  gs_fieldcat-ref_field     = p_ref_field.
  gs_fieldcat-convexit      = p_convexit.
  gs_fieldcat-emphasize     = p_emphasize.
  gs_fieldcat-scrtext_l     = p_scrtext_l.
  gs_fieldcat-no_zero   = p_no_zero.
  gs_fieldcat-colddictxt    = 'L'.
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR: gs_fieldcat.
ENDFORM.                    "BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      FORM  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       显示数据
*----------------------------------------------------------------------*
FORM display_data.
  PERFORM build_fieldcat USING 'TABNAME' '' '' '' '' '' '' '表名' ''.
  PERFORM build_fieldcat USING 'FIELDNAME' '' '' '' '' '' '' '字段名称' ''.
  PERFORM build_fieldcat USING 'KEYFLAG' '' '' '' '' '' '' '关键字' ''.
  PERFORM build_fieldcat USING 'POSITION' '' '' '' '' '' '' '位置' ''.
  PERFORM build_fieldcat USING 'DOMNAME' '' '' '' '' '' '' '域名' ''.
  PERFORM build_fieldcat USING 'MEMORYID' '' '' '' '' '' '' '参数ID' ''.
  PERFORM build_fieldcat USING 'HEADLEN' '' '' '' '' '' '' '抬头长度' ''.
  PERFORM build_fieldcat USING 'SHLPNAME' '' '' '' '' '' '' '搜素帮助' ''.
  PERFORM build_fieldcat USING 'DATATYPE' '' '' '' '' '' '' '数据类型' ''.
  PERFORM build_fieldcat USING 'LENG' '' '' '' '' '' '' '长度' ''.
  PERFORM build_fieldcat USING 'DECIMALS' '' '' '' '' '' '' '小数长度' ''.
  PERFORM build_fieldcat USING 'OUTPUTLEN' '' '' '' '' '' '' '输出长度' ''.
  PERFORM build_fieldcat USING 'LOWERCASE' '' '' '' '' '' '' '大小写' ''.
  PERFORM build_fieldcat USING 'SIGNFLAG' '' '' '' '' '' '' '符号' ''.
  PERFORM build_fieldcat USING 'CONVEXIT' '' '' '' '' '' '' '转换例程' ''.
  PERFORM build_fieldcat USING 'T4TXT' '' '' '' '' '' '' '字段描述' ''.

  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program      = sy-repid
"     I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV'
      i_callback_user_command = 'USER_COMMAND_ALV'
      it_fieldcat_lvc         = gt_fieldcat
      is_layout_lvc           = gs_layout
      i_default               = 'X'
      i_save                  = 'A'
    TABLES
      t_outtab                = gt_data
    EXCEPTIONS
      OTHERS                  = 1.
ENDFORM.                    "DISPLAY_DATA
**&---------------------------------------------------------------------*
**&      FORM  PF_STATUS_ALV
**&---------------------------------------------------------------------*
**       TEXT
**----------------------------------------------------------------------*
*FORM PF_STATUS_ALV USING RT_EXTAB TYPE SLIS_T_EXTAB .
*  SET PF-STATUS 'STATUS_ALV' EXCLUDING RT_EXTAB.
*ENDFORM.                    "PF_STATUS_ALV
*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND_ALV
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM user_command_alv USING r_ucomm     LIKE sy-ucomm
                            rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
    WHEN '&IC1'.
      CASE rs_selfield-fieldname.
        WHEN ''.
*          CHECK RS_SELFIELD-VALUE IS NOT INITIAL.
*          SET PARAMETER ID 'MBN' FIELD RS_SELFIELD-VALUE.
*          CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "USER_COMMAND_ALV


网站公告

今日签到

点亮在社区的每一天
去签到