zoukankan      html  css  js  c++  java
  • 开发:报表公共单元(二)ALV表格显示

    FUNCTION ZLXS_ALV .
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  IMPORTING
    *"     REFERENCE(I_TITLE) TYPE  STRING
    *"     REFERENCE(FIELD_LIST) TYPE  STRING
    *"     VALUE(SORT_FIELD) TYPE  STRING OPTIONAL
    *"     VALUE(IS_VARI) TYPE  SLIS_VARI OPTIONAL
    *"     VALUE(IS_IMPORT) TYPE  STRING DEFAULT 'X'
    *"  TABLES
    *"      I_ITAB
    *"----------------------------------------------------------------------
    *表头字段名和中文描述处理定义
      DATA: T_STR(2048TYPE C,
            S_TMP(100TYPE C,
            STR_EN(30TYPE C,
            STR_CH(50TYPE C,
            S_I TYPE I,
            S_E TYPE I,
            S_POS TYPE I.

    *ALV 表格变量定义
      DATA: M_TITLE TYPE LVC_TITLE,
            MV TYPE I,
            MSTR(6TYPE C.

      M_TITLE = I_TITLE.
      MV LINES( I_ITAB ).
      MOVE MV TO MSTR.
      SHIFT MSTR LEFT DELETING LEADING SPACE.

      IF SY-LANGU '1'.
        CONCATENATE M_TITLE '(' MSTR '条记录)' INTO M_TITLE.
      ELSE.
        CONCATENATE M_TITLE '(' MSTR ' Record)' INTO M_TITLE.
      ENDIF.

      TYPE-POOLS SLIS.

      DATA POS TYPE I.
      DATA: I_FIELDCAT_ALV TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
                I_LAYOUT TYPE SLIS_LAYOUT_ALV,   "alv的格式
                I_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      W_REPID LIKE SY-REPID.

    * 定义排序字段
      DATA  IT_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.
      IF SORT_FIELD IS NOT INITIAL AND SORT_FIELD <> ''.
        IT_SORT-FIELDNAME = SORT_FIELD.
        IT_SORT-TABNAME = I_ITAB.
        APPEND IT_SORT.
      ENDIF.

      I_LAYOUT-ZEBRA 'X'.
      I_LAYOUT-DETAIL_POPUP 'X'.
      W_REPID = SY-REPID.
      I_LAYOUT-F2CODE '&ETA'.
      I_LAYOUT-NO_VLINE             ''.
      I_LAYOUT-COLWIDTH_OPTIMIZE    'X'.
      I_LAYOUT-DETAIL_INITIAL_LINES 'X'.
      IF SY-LANGU '1'.
        I_LAYOUT-DETAIL_TITLEBAR      '详细内容'.
      ELSE.
        I_LAYOUT-DETAIL_TITLEBAR      'Details'.
      ENDIF.
    *输出字段定义
      REFRESH I_FIELDCAT_ALV.
      POS 1.
      CLEAR I_FIELDCAT.

    *表头字段与中文描述, 必须按以下格式填写
      T_STR = FIELD_LIST.

      S_I STRLEN( T_STR .
      DO.
        SEARCH T_STR FOR '|'.

        IF SY-FDPOS 0.
          EXIT.
        ENDIF.

        " 截取字符, 返回 A,B
        S_POS = SY-FDPOS.
        S_TMP = T_STR+0(S_POS).

        " 去除已截取部份
        S_POS = SY-FDPOS + 1.
    *    T_STR = T_STR+S_POS(S_I).
        T_STR = T_STR+S_POS" ADD BY LH 20180927

        " 分离 A,B 字符
        SEARCH S_TMP FOR ','.

        S_POS = SY-FDPOS.
        STR_EN = S_TMP+0(S_POS).

        S_POS = SY-FDPOS + 1.
        S_E =  100 - S_POS .
        STR_CH = S_TMP+S_POS(S_E).
    *    CONCATENATE STR_CH '' INTO STR_CH.

        POS = POS + 1.
        I_FIELDCAT-COL_POS = POS.
        I_FIELDCAT-FIELDNAME = STR_EN.
        I_FIELDCAT-SELTEXT_L = STR_CH.
    *****  ********2010.05.12增设输出长度*****************
        I_FIELDCAT-OUTPUTLEN 60 .
    *  I_FIELDCAT-ddictxt = 'M'  .
    **************************************
        APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
      ENDDO.

      DATA: VARIANTE LIKE DISVARIANT.

      IF IS_VARI IS NOT INITIAL.
        VARIANTE-VARIANT = IS_VARI.
      ENDIF.


    *4.按钮
    *
    *  DATA: I_EVENTS TYPE SLIS_T_EVENT WITH HEADER LINE.
    *
    *事件:
    *

    *
    *出口程序触发事件对应子程序:
    *
    *FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab.
    *
    *FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.
    *


      DATA: IT_EVENT_TEST TYPE SLIS_T_EVENT_EXIT,
            IT_EVENT_TEST_WA TYPE SLIS_EVENT_EXIT.





      IT_EVENT_TEST_WA-UCOMM '&RNT_PREV'.
      IT_EVENT_TEST_WA-BEFORE 'X'.
    *  it_event_test_wa-after = 'X'.
      APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.

      IT_EVENT_TEST_WA-UCOMM '&VEXCEL'.
      IT_EVENT_TEST_WA-BEFORE 'X'.
    *  it_event_test_wa-after = 'X'.
      APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.

      IT_EVENT_TEST_WA-UCOMM '%PC'.
      IT_EVENT_TEST_WA-BEFORE 'X'.
    *  it_event_test_wa-after = 'X'.
      APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.


      IT_EVENT_TEST_WA-UCOMM '&XXL'.
      IT_EVENT_TEST_WA-BEFORE 'X'.
    *  it_event_test_wa-after = 'X'.
      APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.


    *  IT_EVENT_TEST_WA-UCOMM = '%VEXCEL'.
    *  IT_EVENT_TEST_WA-BEFORE = 'X'.
    **  it_event_test_wa-after = 'X'.
    *  APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.

      IT_EVENT_TEST_WA-UCOMM '&AQW'.
      IT_EVENT_TEST_WA-BEFORE 'X'.
    *  it_event_test_wa-after = 'X'.
      APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.




      IT_EVENT_TEST_WA-UCOMM '&XML'.
      IT_EVENT_TEST_WA-BEFORE 'X'.
    *  it_event_test_wa-after = 'X'.
      APPEND IT_EVENT_TEST_WA TO IT_EVENT_TEST.



    *输出ALV表
      IF IS_IMPORT 'X'.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            I_CALLBACK_PROGRAM      = W_REPID
            I_SAVE                  'A'
            I_GRID_TITLE            = M_TITLE
            IS_LAYOUT               = I_LAYOUT
            IS_VARIANT              = VARIANTE
            IT_SORT                 = IT_SORT[]
            IT_FIELDCAT             = I_FIELDCAT_ALV[]
    *        I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
    *        IT_EVENT_EXIT           = IT_EVENT_TEST
          TABLES
            T_OUTTAB                = I_ITAB.
      ELSE.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            I_CALLBACK_PROGRAM      = W_REPID
            I_SAVE                  'A'
            I_GRID_TITLE            = M_TITLE
            IS_LAYOUT               = I_LAYOUT
            IS_VARIANT              = VARIANTE
            IT_SORT                 = IT_SORT[]
            IT_FIELDCAT             = I_FIELDCAT_ALV[]
            I_CALLBACK_USER_COMMAND 'USER_COMMAND'
            IT_EVENT_EXIT           = IT_EVENT_TEST
          TABLES
            T_OUTTAB                = I_ITAB.
      ENDIF.
    ENDFUNCTION.


    *&---------------------------------------------------------------------*
    *&      Form  user_command
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->UCOMM      text
    *      -->SELFIELD   text
    *----------------------------------------------------------------------*
    FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.


    *  IF UCOMM = '%PC '.
    **  此处添加增强的代码
    *
    *    message '不允许导出' type 'E'.
    *  ENDIF.
      MESSAGE '不允许导出' TYPE 'E'.
      WRITE UCOMM.


    ENDFORM.                    "user_command

  • 相关阅读:
    作业5,6 2019/10/23
    作业1、2、3、4 2019/10/23
    实现Map传参Mybatis
    maven工程配置pom.xml实现mybatis的访问数据库操作
    测试
    Postman篇之命令行测试
    unittest框架
    测试
    测试
    测试
  • 原文地址:https://www.cnblogs.com/twttafku/p/14262891.html
Copyright © 2011-2022 走看看