無名经验总结与分享(SAP)            十年树木,百年树人

开发:报表公共单元(二)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

posted @ 2021-01-11 16:39  無名  阅读(107)  评论(0编辑  收藏  举报
Twttafku@163.com
十年树木,百年树人