SAP ABAP ALV常用语法


************************************************************************
*   DEFINE CLASS EVENT
************************************************************************
DATA: GT_EVENTS TYPE SLIS_T_EVENT,
      GS_EVENTS TYPE SLIS_ALV_EVENT.
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.

CLASS GCL_EVENT_HANDLER DEFINITION."类定义
  PUBLIC SECTION.
    METHODS:
      HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
        IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS. "gcl_event_handler DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*       类实现
*----------------------------------------------------------------------*
CLASS GCL_EVENT_HANDLER IMPLEMENTATION."类实现
  METHOD HANDLE_DATA_CHANGED.
    DATA: LV_STBL TYPE LVC_S_STBL.

    PERFORM HANDLE_DATA_CHANGED ."检查或自动赋值等

    IF E_MODIFIED = 'X'."数据有更改才会X
      LV_STBL-ROW = 'X'." 基于行的稳定刷新
      LV_STBL-COL = 'X'." 基于列稳定刷新
      CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY
        EXPORTING
          IS_STABLE = LV_STBL.
    ENDIF.
  ENDMETHOD.
ENDCLASS. "gcl_event_handler IMPLEMENTATION

DATA: GS_LAYOUT   TYPE LVC_S_LAYO,
      GT_FIELDCAT TYPE LVC_T_FCAT,
      GV_TITLE    TYPE LVC_TITLE.

  GV_TITLE = '抬头'.

  GS_LAYOUT-SEL_MODE   ='A'."单元格区域选择
  GS_LAYOUT-ZEBRA      ='X'."斑马线
  GS_LAYOUT-CWIDTH_OPT ='X'."最佳列宽
  GS_LAYOUT-BOX_FNAME  ='SEL'."设置选择字段

  GT_FIELDCAT = VALUE #( BASE GT_FIELDCAT 
                        ( FIELDNAME = ''    "字段名
                          COLTEXT   = ''    "列标题
                          SCRTEXT_L = ''    "长字段标签
                          REF_TABLE = ''    "参考表/结构
                          REF_FIELD = ''    "参考字段
                          CHECKBOX  = ''    "作为复选框输出(需搭配EDIT参数使用)
                          KEY       = ''    "关键字段(滚动时列位置不变,且自动移动至左侧
                          NO_ZERO   = ''    "不输出前导0
                          ICON      = ''    "作为图标输出
                          EDIT      = ''    "编辑
                        )
                       ).

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      I_STRUCTURE_NAME       = 'ZMMS_R004'    "结构或表
    CHANGING
      CT_FIELDCAT            = GT_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.

**增加ALV事件
  CLEAR: GS_EVENTS.
  GS_EVENTS-NAME = 'CALLER_EXIT'.
  GS_EVENTS-FORM = 'FRM_REGISTER_EVENTS'.
  APPEND GS_EVENTS TO GT_EVENTS.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM          = SY-REPID
      I_GRID_TITLE                = GV_TITLE
      IS_LAYOUT_LVC               = GS_LAYOUT
      IT_FIELDCAT_LVC             = GT_FIELDCAT[]
      I_CALLBACK_PF_STATUS_SET    = 'FRM_STATUS_SET'
      I_CALLBACK_USER_COMMAND     = 'FRM_USER_COMMAND'
      I_CALLBACK_HTML_TOP_OF_PAGE = 'FRM_TOP_OF_PAGE'
      IT_EVENTS                   = GT_EVENTS[]
      I_SAVE                      = 'A'    "保存布局 A:全局和特定用户
    TABLES
      T_OUTTAB                    = GT_DATA.

FORM FRM_STATUS_SET USING U_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'PF_1000'.
ENDFORM.

FORM FRM_USER_COMMAND USING U_UCOMM TYPE SY-UCOMM
                      P_RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: LO_GRID TYPE REF TO CL_GUI_ALV_GRID.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LO_GRID.
  CALL METHOD LO_GRID->CHECK_CHANGED_DATA.

*  P_RS_SELFIELD-REFRESH = ABAP_TRUE.

  CASE U_UCOMM.
    WHEN 'XXXX'."
    WHEN '&IC1'."双击
      READ TABLE GT_DATA INTO GS_DATA INDEX P_RS_SELFIELD-TABINDEX.
      IF SY-SUBRC = 0.
        IF P_RS_SELFIELD-FIELDNAME EQ 'EBELN' OR P_RS_SELFIELD-FIELDNAME EQ 'EBELP'.

          IF GS_DATA-EBELN IS NOT INITIAL.
            SET PARAMETER ID 'BES' FIELD GS_DATA-EBELN.
            CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN."采购订单
          ENDIF.

        ELSEIF P_RS_SELFIELD-FIELDNAME EQ 'VBELN' AND GS_DATA-LFART EQ 'EL'.

          IF GS_DATA-ZLOG_ID IS NOT INITIAL.
            SET PARAMETER ID 'VL' FIELD GS_DATA-VBELN.
            CALL TRANSACTION 'VL33N' AND SKIP FIRST SCREEN."内向交货单
          ENDIF.

        ELSEIF P_RS_SELFIELD-FIELDNAME EQ 'VBELN' AND GS_DATA-LFART EQ 'NL*'.

          IF GS_DATA-ZLOG_ID IS NOT INITIAL.
            SET PARAMETER ID 'VL' FIELD GS_DATA-VBELN.
            CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN."外向交货单
          ENDIF.

        ELSEIF P_RS_SELFIELD-FIELDNAME EQ 'MATNR'.

          IF GS_DATA-MATNR IS NOT INITIAL.
            SET PARAMETER ID 'MAT' FIELD GS_DATA-MATNR.
            CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN."物料主数据
          ENDIF.

        ELSEIF P_RS_SELFIELD-FIELDNAME EQ 'MBLNR'.    "物料凭证MIGO

          CALL FUNCTION 'MIGO_DIALOG'
            EXPORTING
              I _ ACTION            = 'A04'         "显示
              I _ REFDOC            = 'R02'         "物料配置
              I _ MBLNR             = GS_DATA-MBLNR "物料凭证
              I _ MJAHR             = GS_DATA-MJAHR "凭证年度
            EXCEPTIONS
              ILLEGAL _ COMBINATION = 1
              OTHERS                = 2.

        ENDIF.
      ENDIF.

    WHEN OTHERS.
  ENDCASE.

  CALL METHOD LO_GRID->GET_FRONTEND_LAYOUT
    IMPORTING
      ES_LAYOUT = GS_LAYOUT.

  GS_LAYOUT-CWIDTH_OPT = 'X'.

  CALL METHOD LO_GRID->SET_FRONTEND_LAYOUT
    EXPORTING
      IS_LAYOUT = GS_LAYOUT.

  CALL METHOD LO_GRID->REFRESH_TABLE_DISPLAY
    EXPORTING
      IS_STABLE = VALUE LVC_S_STBL( ROW = 'X' COL = 'X' ).

ENDFORM.

FORM FRM_TOP_OF_PAGE USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.

  DATA: LV_TEXT TYPE SDYDO_TEXT_ELEMENT.

  DATA(LV_LINES1) = LINES( GT_DATA[] )."总条目数

  DATA(LT_DATA) = GT_DATA[].
  DELETE LT_DATA WHERE STATU NE ICON_LED_RED.
  DATA(LV_LINES2) = LINES( LT_DATA[] )."红灯条目数

  LT_DATA[] = GT_DATA[].
  DELETE LT_DATA WHERE STATU NE ICON_LED_YELLOW.
  DATA(LV_LINES3) = LINES( LT_DATA[] )."黄灯条目数

  LT_DATA[] = GT_DATA[].
  DELETE LT_DATA WHERE STATU NE ICON_LED_GREEN.
  DATA(LV_LINES4) = LINES( LT_DATA[] )."绿灯条目数

  LV_TEXT = |共| && LV_LINES1 && |条数据,其中:|.
  LV_TEXT = LV_TEXT && |红灯| && LV_LINES2 && |条、|.
  LV_TEXT = LV_TEXT && |黄灯| && LV_LINES3 && |条、|.
  LV_TEXT = LV_TEXT && |绿灯| && LV_LINES4 && |条。|.

  CALL METHOD DOCUMENT->ADD_TEXT
    EXPORTING
      TEXT      = LV_TEXT
      SAP_STYLE = CL_DD_AREA=>HEADING.

  CALL METHOD DOCUMENT->NEW_LINE.
  LV_TEXT = |状态灯 红色:失效日期<=30天、黄色:30天<失效日期<=60天、绿色:失效日期>60天|.
  CALL METHOD DOCUMENT->ADD_TEXT
    EXPORTING
      TEXT         = LV_TEXT
      SAP_EMPHASIS = CL_DD_AREA=>SMALL.

ENDFORM.

FORM FRM_REGISTER_EVENTS USING P_EXIT TYPE SLIS_DATA_CALLER_EXIT.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = G_GRID.

* 设置回车事件
  CALL METHOD G_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.
  CALL METHOD G_GRID->SET_READY_FOR_INPUT
    EXPORTING
      I_READY_FOR_INPUT = 1.

* 设置光标焦点移开被修改单元格后触发事件
  CALL METHOD G_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.


  DATA: GR_EVENT_HANDLER TYPE REF TO GCL_EVENT_HANDLER.
  CREATE OBJECT GR_EVENT_HANDLER.

  SET HANDLER GR_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID.

ENDFORM.

1、GS_LAYOUT-SEL_MODE有四种取值A,B,C或D
A:多行多列选择。有选择块,通过前面的选择块选择行,但不可以选择单元格区域。
B:单行选择。没有前面的选择块,单击任一单元格,就选中单元格所在的行。
C:多行选择。没有选择块,可以拖动选择多行。
D:单元格区域选择,可以按住鼠标拖动选择单元格区域,也可以通过选择块选择多行。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值