【ABAP】 ALV练习3

*&---------------------------------------------------------------------*
 *& Report ZLJH091202
 *&---------------------------------------------------------------------*
 *&要求使用ALV展现数据,数据自取,要求对第一列数据添加颜色,
 *&并且实现此列的热点单击,单击此列某条数据,
 *&实现ALV弹出展现所有此列数据相同的其他字段数据。
 *&如:此列为BUKRS,单击此列公司代码为2000的某条数据
 *&则取出所有公司代码为2000的数据ALV弹出展现。
 *&---------------------------------------------------------------------*
 REPORT ZLJH091202.
 **********************************************************************
 *定义
 **********************************************************************
 TYPE-POOLS:SLIS.
 
 TYPES:BEGIN OF TYP_01,
  ERNAM TYPE MARA-ERNAM,
  MATNR TYPE MARA-MATNR,
  MAKTX TYPE MAKT-MAKTX,
  CBOX  TYPE C,
  COLOR TYPE CHAR04,
  END OF TYP_01.
 
  DATA GT_01 TYPE STANDARD TABLE OF TYP_01.
 
  DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
  DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
 
  DATA GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
 
  DATA GT_OUT TYPE STANDARD TABLE OF TYP_01.
 
  DEFINE  FIELDCAT.
    GS_FIELDCAT-COL_POS   = &1.
    GS_FIELDCAT-FIELDNAME = &2.
    GS_FIELDCAT-SELTEXT_L = &3.
    APPEND GS_FIELDCAT TO GT_FIELDCAT.
  END-OF-DEFINITION.
 
 **********************************************************************
 *SELECTION SCREEN
 **********************************************************************
 
 
 **********************************************************************
 *AT SELECTION SCREEN
 **********************************************************************
 
 START-OF-SELECTION.
 SELECT MARA~ERNAM
       MARA~MATNR
       MAKT~MAKTX
  FROM MARA
  INNER JOIN MAKT ON MARA~MATNR = MAKT~MATNR AND MAKT~SPRAS = SY-LANGU
  INTO CORRESPONDING FIELDS OF TABLE GT_01 UP TO 50 ROWS.
  END-OF-SELECTION.
 
  IF GT_01 IS NOT INITIAL.
    PERFORM FRM_SHOW.
    ELSE.
     MESSAGE '无符合条件的数据' TYPE 'E' DISPLAY LIKE 'I'.
 
  ENDIF.
 
 *&---------------------------------------------------------------------*
 *&      Form  FRM_SHOW
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*
 FORM FRM_SHOW.
  PERFORM FRM_LAYOUT.
  PERFORM FRM_FIELDCAT.
  PERFORM FRM_ALV_DISPLAY.
  ENDFORM.
 
 *&---------------------------------------------------------------------*
 *&      Form  FRM_FIELDCAT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*
 FORM FRM_FIELDCAT.
  FIELDCAT '1' 'ERNAM' '创建者'.
  FIELDCAT '2' 'MATNR' '物料编号'.
  FIELDCAT '3' 'MAKTX' '物料描述'.
  LOOP AT GT_FIELDCAT INTO GS_FIELDCAT.
    IF GS_FIELDCAT-FIELDNAME = 'ERNAM'.
      GS_FIELDCAT-KEY = 'X'.
      MODIFY GT_FIELDCAT FROM GS_FIELDCAT INDEX SY-TABIX.
 
    ENDIF.
 
  ENDLOOP.
  ENDFORM.
 
 *&---------------------------------------------------------------------*
 *&      Form  FRM_ALV_DISPLAY
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*
  FORM FRM_ALV_DISPLAY.
    call function 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
 *       I_INTERFACE_CHECK                 = ' '
 *       I_BYPASSING_BUFFER                = ' '
 *       I_BUFFER_ACTIVE                   = ' '
       I_CALLBACK_PROGRAM                = SY-CPROG
       I_CALLBACK_PF_STATUS_SET          = 'FRM_STATUS'
       I_CALLBACK_USER_COMMAND           = 'FRM_USERCOMMAND'
 *       I_CALLBACK_TOP_OF_PAGE            = ' '
 *       I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
 *       I_CALLBACK_HTML_END_OF_LIST       = ' '
 *       I_STRUCTURE_NAME                  =
 *       I_BACKGROUND_ID                   = ' '
 *       I_GRID_TITLE                      =
 *       I_GRID_SETTINGS                   =
       IS_LAYOUT                         = GS_LAYOUT
       IT_FIELDCAT                       = GT_FIELDCAT
 *       IT_EXCLUDING                      =
 *       IT_SPECIAL_GROUPS                 =
 *       IT_SORT                           =
 *       IT_FILTER                         =
 *       IS_SEL_HIDE                       =
 *       I_DEFAULT                         = 'X'
 *       I_SAVE                            = ' '
 *       IS_VARIANT                        =
 *       IT_EVENTS                         =
 *       IT_EVENT_EXIT                     =
 *       IS_PRINT                          =
 *       IS_REPREP_ID                      =
 *       I_SCREEN_START_COLUMN             = 0
 *       I_SCREEN_START_LINE               = 0
 *       I_SCREEN_END_COLUMN               = 0
 *       I_SCREEN_END_LINE                 = 0
 *       I_HTML_HEIGHT_TOP                 = 0
 *       I_HTML_HEIGHT_END                 = 0
 *       IT_ALV_GRAPHICS                   =
 *       IT_HYPERLINK                      =
 *       IT_ADD_FIELDCAT                   =
 *       IT_EXCEPT_QINFO                   =
 *       IR_SALV_FULLSCREEN_ADAPTER        =
 *     IMPORTING
 *       E_EXIT_CAUSED_BY_CALLER           =
 *       ES_EXIT_CAUSED_BY_USER            =
      tables
        t_outtab                          = GT_01
 *     EXCEPTIONS
 *       PROGRAM_ERROR                     = 1
 *       OTHERS                            = 2
              .
    if sy-subrc <> 0.
 * Implement suitable error handling here
    endif.
 
 ENDFORM.
 
 *----------------------------------------------------------------------*
 *       FORM  FRM_USERCOMMAND
 *----------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        TEXT
 *  <--  p2        text
 *----------------------------------------------------------------------*
 FORM FRM_USERCOMMAND USING P_CODE TYPE SYUCOMM
                     CHANGING SEL TYPE SLIS_SELFIELD.DATA LT_TAB TYPE STANDARD TABLE OF TYP_01.
 CASE P_CODE.
   WHEN '&IC1'.
  READ TABLE GT_01 INTO DATA(GS_01INDEX SEL-tabindex.
 
  LOOP AT GT_01 INTO DATA(GS_02WHERE ERNAM = GS_01-ERNAM .
   APPEND GS_02 TO GT_OUT.
  ENDLOOP.
 
   DATA LT_FIELDCAT LIKE GT_FIELDCAT.
   LT_FIELDCAT = GT_FIELDCAT.
    DELETE LT_FIELDCAT INDEX 1.
 
   CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
     EXPORTING
       I_TITLE                       = '详细信息'
 *       I_SELECTION                   = 'X'
 *       I_ALLOW_NO_SELECTION          =
       I_ZEBRA                       = 'X'
 *       I_SCREEN_START_COLUMN         = 0
 *       I_SCREEN_START_LINE           = 0
 *       I_SCREEN_END_COLUMN           = 0
 *       I_SCREEN_END_LINE             = 0
 *       I_CHECKBOX_FIELDNAME          =
 *       I_LINEMARK_FIELDNAME          =
 *       I_SCROLL_TO_SEL_LINE          = 'X'
        i_tabname                     = 'MARA'
 *       I_STRUCTURE_NAME              =
       IT_FIELDCAT                   = LT_FIELDCAT
 *       IT_EXCLUDING                  =
 *       I_CALLBACK_PROGRAM            =
 *       I_CALLBACK_USER_COMMAND       =
 *       IS_PRIVATE                    =
 *     IMPORTING
 *       ES_SELFIELD                   =
 *       E_EXIT                        =
      tables
        t_outtab                      = GT_OUT
     EXCEPTIONS
       PROGRAM_ERROR                 = 1
       OTHERS                        = 2
              .
   IF sy-subrc <> 0.
 * Implement suitable error handling here
   ENDIF.
 WHEN 'BZ'.
  LOOP AT GT_01 INTO GS_01 WHERE CBOX = 'X'.
  ENDLOOP.
  IF SY-SUBRC <> 0.
  MESSAGE '请至少选择一行' TYPE 'I'.
  ELSE.
  LOOP AT GT_01 INTO GS_01 WHERE CBOX = 'X'.
    IF GS_01-COLOR IS NOT INITIAL.
    CLEAR GS_01-COLOR.
    ELSE.
    GS_01-COLOR = 'C610'.
    ENDIF.
 
    MODIFY GT_01 FROM GS_01 INDEX SY-TABIX.
 
  ENDLOOP.
  ENDIF.
 
 ENDCASE.
  SEL-REFRESH = 'X'.
 ENDFORM.
 
 *----------------------------------------------------------------------*
 *       FORM .......
 *----------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*
 FORM FRM_STATUS USING EXTAB.
  SET PF-STATUS 'MENU'.
  ENDFORM.
 *&---------------------------------------------------------------------*
 *&      Form  FRM_LAYOUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*
 FORM FRM_LAYOUT .GS_LAYOUT-INFO_FIELDNAME = 'COLOR'.GS_LAYOUT-box_fieldname    = 'CBOX'.GS_LAYOUT-key_hotspot = 'X'.ENDFORM.
【ABAP】 ALV练习
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
ABAP
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论