• 已开发程序查询


      REPORT zmail.
      TABLES: trdir, tstc.
    
      DATA: BEGIN OF gs_data,
              sel   TYPE boolean,     " 用于选择多行
              name  TYPE trdir-name,  " 程序名
              subc  TYPE trdir-subc,  " 程序类型
              rstat TYPE trdir-rstat, " 状态
              tcode TYPE tstc-tcode,  " 事务码
              ttext TYPE tstct-ttext, " 事务码描述
              cnam  TYPE trdir-cnam,  " 创建者
              cdat  TYPE trdir-cdat,  " 创建日期
              unam  TYPE trdir-unam,  " 最后修改人
              udat  TYPE trdir-udat,  " 修改日期
            END OF gs_data.
      DATA: gt_data LIKE TABLE OF gs_data. " ALV显示內表
      DATA: line TYPE i." ALV行数
      " 选择屏幕
      SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
      SELECT-OPTIONS: s_name  FOR trdir-name,            " 程序名
                      s_tcode FOR  tstc-tcode,           " 事务码
                      s_cnam  FOR  trdir-cnam,           " 创建者
                      s_unam  FOR  trdir-unam,           " 最后修改人
                      s_subc  FOR  trdir-subc DEFAULT 1, " 程序类型
                      s_rstat FOR  trdir-rstat.          " 状态
      SELECTION-SCREEN END OF BLOCK b1.
    
      INITIALIZATION.
        %_s_name_%_app_%-text = '程序名'.
        %_s_tcode_%_app_%-text = '事务码'.
        %_s_cnam_%_app_%-text = '创建者'.
        %_s_unam_%_app_%-text = '最后修改人'.
        %_s_subc_%_app_%-text = '程序类型'.
        %_s_rstat_%_app_%-text = '状态'.
        " F8事件
    
      AT SELECTION-SCREEN.
        DATA p_prog TYPE programm .
        DATA: l_rc(5).
        p_prog = sy-repid.
        PERFORM copy_status_diff_progs_new IN PROGRAM saplsmpe IF FOUND
        USING 'X' 'SAPLKKBL' p_prog 'STANDARD_FULLSCREEN' 'STATUS_ALV'
        CHANGING l_rc.
    
      START-OF-SELECTION.
        IF s_name[]  IS INITIAL AND " 程序名
           s_cnam[]  IS INITIAL AND " 创建者
           s_unam[]  IS INITIAL AND " 最后修改人
           s_subc[]  IS INITIAL AND " 程序类型
           s_tcode[] IS INITIAL AND " 事务码
           s_rstat[] IS INITIAL.    " 状态
    
          MESSAGE '请至少输入一个条件!' TYPE 'S' DISPLAY LIKE 'E'.
          EXIT.
        ENDIF.
        PERFORM get_data.
        IF gt_data[] IS INITIAL.
          MESSAGE '无符合条件的记录' TYPE 'S' DISPLAY LIKE 'E'.
          EXIT.
        ENDIF.
        PERFORM alv_data.
    *&---------------------------------------------------------------------*
    *&      Form  get_data
    *&---------------------------------------------------------------------*
    *       text  获取数据
    *----------------------------------------------------------------------*
      FORM get_data.
        DATA: BEGIN OF ls_tstc,
                tcode TYPE tstc-tcode,
                ttext TYPE tstct-ttext,
              END OF ls_tstc.
    
        DATA: lt_tstc LIKE TABLE OF ls_tstc.
        " 输入事务码时
        IF s_tcode[] IS NOT INITIAL.
          SELECT
            a~tcode
            b~name
            b~subc
            b~rstat
            b~cnam
            b~cdat
            b~unam
            b~udat
            c~ttext
            INTO CORRESPONDING FIELDS OF TABLE gt_data
            FROM tstc AS a
            INNER JOIN trdir AS b ON a~pgmna = b~name
            INNER JOIN tstct AS c ON a~tcode = c~tcode
            WHERE a~tcode IN s_tcode
            AND   b~name  IN s_name   " 程序名
            AND   b~cnam  IN s_cnam   " 创建者
            AND   b~unam  IN s_unam   " 最后修改人
          AND   b~subc  IN s_subc   " 程序类型
          AND   b~rstat IN s_rstat. " 状态
        ELSE.
          " 没有输入事务码时
          SELECT
            a~name
            a~subc
            a~rstat
            a~cnam
            a~cdat
            a~unam
            a~udat
            b~tcode
            INTO CORRESPONDING FIELDS OF TABLE gt_data
            FROM trdir AS a
            LEFT JOIN tstc AS b ON a~name  = b~pgmna
            WHERE a~name  IN s_name   " 程序名
            AND   a~cnam  IN s_cnam   " 创建者
            AND   a~unam  IN s_unam   " 最后修改人
          AND   a~subc  IN s_subc   " 程序类型
          AND   a~rstat IN s_rstat. " 状态
    
          IF gt_data[] IS NOT INITIAL.
            " 查询事务码描述文本
            SELECT
              tcode
              ttext
              INTO CORRESPONDING FIELDS OF TABLE lt_tstc
              FROM tstct
            FOR ALL ENTRIES IN gt_data
            WHERE tcode = gt_data-tcode.
            SORT lt_tstc BY tcode." 先排序
            LOOP AT gt_data INTO gs_data.
              READ TABLE lt_tstc INTO ls_tstc WITH KEY tcode = gs_data-tcode BINARY SEARCH.
              IF sy-subrc EQ 0.
                gs_data-ttext = ls_tstc-ttext.
                MODIFY gt_data FROM gs_data TRANSPORTING ttext.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ENDIF.
        " 统计內表行数
        DESCRIBE TABLE gt_data LINES line.
        " 排序
        SORT gt_data BY cnam cdat.
      ENDFORM.                    "get_data
    *&---------------------------------------------------------------------*
    *&      Form  alv_data
    *&---------------------------------------------------------------------*
    *       text 显示ALV数据
    *----------------------------------------------------------------------*
      FORM alv_data.
        DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
              layout   TYPE slis_layout_alv.
        PERFORM get_layout CHANGING layout.   " alv布局
        PERFORM get_fieldcat TABLES fieldcat. " 控制报表显示哪些栏位
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            i_callback_program       = sy-repid             " 程序名
            is_layout                = layout               " 布局
            i_callback_pf_status_set = 'STATUS_ALV'      " STATUS
            i_callback_user_command  = 'USER_COMMAND_FORM'  " 定义按钮的功能
            it_fieldcat              = fieldcat[]           " alv栏目(显示字段)内表
          TABLES
            t_outtab                 = gt_data              " 将内表数据赋给ALV
          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.                    "alv_data
    *&---------------------------------------------------------------------*
    *&      Form  get_layout
    *&---------------------------------------------------------------------*
    *       text  ALV布局设置
    *----------------------------------------------------------------------*
    *      -->C_LAYOUT   text
    *----------------------------------------------------------------------*
      FORM get_layout CHANGING c_layout TYPE slis_layout_alv.
        CLEAR: c_layout.
        c_layout-colwidth_optimize = 'X'." 宽度自动调节
        c_layout-box_fieldname = 'SEL'.  " 选择多行
        c_layout-zebra = 'X'.            " 颜色交替显示
      ENDFORM.                    "get_layout
    *&---------------------------------------------------------------------*
    *&      Form  USER_COMMAND_FORM
    *&---------------------------------------------------------------------*
    *       text  自定义按钮功能
    *----------------------------------------------------------------------*
    *      -->R_UCOMM      text
    *      -->RS_SELFIELD  text
    *----------------------------------------------------------------------*
      FORM user_command_form USING r_ucomm     LIKE sy-ucomm
                                   rs_selfield TYPE slis_selfield.
        READ TABLE gt_data INTO gs_data INDEX rs_selfield-tabindex.
        IF sy-subrc EQ 0 AND gs_data-tcode IS NOT INITIAL.
          CASE r_ucomm.
            WHEN '&IC1'. " 双击事件
              CALL TRANSACTION gs_data-tcode. " 调用事务码,运行程序
            WHEN OTHERS.
          ENDCASE.
        ENDIF.
      ENDFORM.                    "USER_COMMAND_FORM
    *&---------------------------------------------------------------------*
    *&      Form  get_fieldcat
    *&---------------------------------------------------------------------*
    *       text 显示字段
    *----------------------------------------------------------------------*
    *      -->CT_TAB     text
    *----------------------------------------------------------------------*
      FORM get_fieldcat TABLES ct_tab TYPE slis_t_fieldcat_alv.
        DATA: fcat TYPE slis_fieldcat_alv.
        DEFINE add_fcat.
          CLEAR fcat.
          fcat-fieldname       = &1. " 字段名
          fcat-seltext_l       = &2. " 显示字段文本
          fcat-seltext_m       = &2.
          fcat-seltext_s       = &2.
          fcat-key             = &3. " 主键
          fcat-hotspot         = &4. " 链接
          fcat-checkbox        = &5. " 复选框
          fcat-edit            = &6. " 是否可修改
          fcat-ref_tabname     = &7. " 参考表
          fcat-ref_fieldname   = &8. " 参考表字段
          APPEND fcat TO ct_tab.
        END-OF-DEFINITION.
        add_fcat 'NAME'  '程序名'      ''  ''  ''  ''  ''  ''.
        add_fcat 'SUBC'  '程序类型'    ''  ''  ''  ''  'TRDIR'  'SUBC'.
        add_fcat 'RSTAT' '状态'        ''  ''  ''  ''  'TRDIR'  'RSTAT'.
        add_fcat 'TCODE' '事务码'      ''  ''  ''  ''  ''  ''.
        add_fcat 'TTEXT' '事务码描述'  ''  ''  ''  ''  ''  ''.
        add_fcat 'CNAM'  '创建者'  ''  ''  ''  ''  ''  ''.
        add_fcat 'CDAT'  '创建日期'    ''  ''  ''  ''  ''  ''.
        add_fcat 'UNAM'  '最后修改人'  ''  ''  ''  ''  ''  ''.
        add_fcat 'UDAT'  '修改日期'    ''  ''  ''  ''  ''  ''.
      ENDFORM.                    "get_fieldcat
    *&---------------------------------------------------------------------*
    *&      Form  pfstatus_form
    *&---------------------------------------------------------------------*
    *       text  STATUS
    *----------------------------------------------------------------------*
    *      -->RT_EXTAB   text
    *----------------------------------------------------------------------*
      FORM status_alv USING rt_extab TYPE slis_t_extab.
        SET TITLEBAR 'TITLE_BAR' WITH line. " 标题
        SET PF-STATUS 'STATUS_ALV' EXCLUDING rt_extab.
    *    SET PF-STATUS 'STATUS_ALV'.         " 工具条
      ENDFORM.                    "pfstatus_form </span>
  • 相关阅读:
    32位系统最大只能支持4GB内存之由来
    无线传感器网络中的节点定位技术
    Python 面向对象编程(一)
    Eclipse+PyDev+Django+Mysql搭建Python web开发环境
    Python中的函数(二)
    关于raw_input()和sys.stdin.readline()的区别
    Python中的函数(三)
    将Sublime Text 2搭建成一个好用的IDE
    Windows Phone 7 Tips (1)
    Expression Blend 知识锦分享
  • 原文地址:https://www.cnblogs.com/ckstock/p/11623398.html
Copyright © 2020-2023  润新知