原文:Small Fire · List ALV Demo · ABAP 子专栏 · Small Fire 技术笔记

程序实例

*&---------------------------------------
*& Report  ZWR_PI_LOG
*&----------------------------------------
REPORT  zwr_pi_log.
TABLES: lqua ,zpidoc.
TYPE-POOLS: slis.
DATA: lt_pidoc TYPE STANDARD TABLE OF zpidoc,
      ls_pidoc TYPE zpidoc .
"ALV Data"
DATA: gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat TYPE lvc_s_fcat,
      lw_layout TYPE lvc_s_layo.
"Select screen"
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: p_chk1 RADIOBUTTON GROUP zr01 DEFAULT 'X' USER-COMMAND zchg.
SELECTION-SCREEN COMMENT 3(8) text-002 FOR FIELD p_chk1.
SELECTION-SCREEN POSITION 12.
PARAMETERS: p_chk2 RADIOBUTTON GROUP zr01. " USER-COMMAND zchg."
SELECTION-SCREEN COMMENT 14(12) text-003 FOR FIELD p_chk2.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: p_lgnum TYPE lqua-lgnum OBLIGATORY.
PARAMETERS: p_status TYPE zpidoc-STATUS.
PARAMETERS: p_file LIKE rlgrap-filename MODIF ID z01.
SELECTION-SCREEN END OF BLOCK blk1.

SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-004.
PARAMETERS: p_werks TYPE aufk-werks DEFAULT '1040' MODIF ID z02.
SELECT-OPTIONS: s_matnr FOR matnr MODIF ID z02,
                s_seqnr FOR aufk-seqnr MODIF ID z02,
                s_ablad FOR afpo-ablad MODIF ID z02,
                s_plnbez FOR afko-plnbez MODIF ID z02,
                s_fevor FOR afko-fevor MODIF ID z02,
                s_dispo FOR afko-dispo MODIF ID z02,
                s_arbpl FOR /sapcem/kla_arb-arbpl MODIF ID z02,
                s_gstrp FOR afko-gstrp MODIF ID z02,
                s_gltrp FOR afko-gltrp MODIF ID z02,
                s_auart FOR aufk-auart MODIF ID z02,
                s_kdauf FOR afpo-kdauf MODIF ID z02,
                s_kdpos FOR afpo-kdpos MODIF ID z02.
SELECTION-SCREEN END OF BLOCK blk2.
" Screen Group control "
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF p_chk1 EQ 'X'.
      IF screen-group1 EQ 'Z02'.
        screen-input = 0.
        screen-invisible = 1.
        MODIFY SCREEN.
      ELSEIF screen-group1 EQ 'Z01'.
        screen-input = 1.
        screen-invisible = 0.
        MODIFY SCREEN.
      ENDIF.
    ELSE.
      IF screen-group1 EQ 'Z01'.
        screen-input = 0.
        screen-invisible = 1.
        MODIFY SCREEN.
      ELSEIF screen-group1 EQ 'Z02'.
        screen-input = 1.
        screen-invisible = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

"Event"
START-OF-SELECTION .
  "Pre-check"
  PERFORM frm_pre_check.
  "Extract data"
  PERFORM frm_extract_data.
  "ALV"
  PERFORM frm_display.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  FRM_PRE_CHECK
*&---------------------------------------------------------------------*
  FORM frm_pre_check .
  DATA:e_message TYPE char100.
  AUTHORITY-CHECK OBJECT 'XXXX'
           "ID 'ACTVT' FIELD '03'"
           ID 'LGNUM' FIELD p_lgnum.
  IF sy-subrc <> 0.
    CONCATENATE 'You have no authorization ' p_lgnum INTO e_message RESPECTING BLANKS.
    MESSAGE e_message TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  ENDFORM.                    " FRM_PRE_CHECK"
  *&---------------------------------------------------------------------*
  *&      Form  FRM_EXTRACT_DATA
  *&---------------------------------------------------------------------*
  FORM frm_extract_data .
   SELECT *
    FROM zpidoc
     INTO TABLE lt_pidoc
     WHERE lgnum EQ p_lgnum
      AND PIDOC  IN s_PIDOC.
  IF lt_pidoc IS INITIAL.
    MESSAGE 'No data.' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  ENDFORM.                    " FRM_EXTRACT_DATA"
  *&---------------------------------------------------------------------*
  *&      Form  FRM_DISPLAY
  *&---------------------------------------------------------------------*
  FORM frm_display .

  lw_layout-zebra = 'X'.
  lw_layout-col_opt = 'X'.
  lw_layout-cwidth_opt = 'X'.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'ZPIDOC_STRUCTURE'
  CHANGING
    ct_fieldcat            = gt_fieldcat
  EXCEPTIONS
    inconsistent_interface = 1
    program_error          = 2
    OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  DELETE gt_fieldcat WHERE fieldname EQ 'STATUS'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'FRM_SET_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc            = lw_layout
      it_fieldcat_lvc          = gt_fieldcat
      i_default                = 'X'
      i_save                   = 'X'
    TABLES
      t_outtab                 = lt_pidoc
    EXCEPTIONS
      program_error            = 1.

ENDFORM.                    " FRM_DISPLAY"
*&---------------------------------------------------------------------*
*&      Form  frm_set_status
*&---------------------------------------------------------------------*
  FORM frm_set_status USING extab TYPE slis_t_extab.
  DATA: lt_fcode TYPE STANDARD TABLE OF sy-ucomm.
    APPEND '&CHNG' TO lt_fcode.
    APPEND '&MODI' TO lt_fcode.
    APPEND '&XDPL' TO lt_fcode.
  SET PF-STATUS 'STANDARD_COPY' EXCLUDING LT_FCODE.

ENDFORM.                    "frm_set_status"
*&---------------------------------------------------------------------*
*&      Form  frm_user_command
*&---------------------------------------------------------------------*
  FORM frm_user_command USING r_ucomm     LIKE sy-ucomm
                       rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
    WHEN '&F03'.
      RETURN.
    WHEN  '&F15'.
      RETURN.
    WHEN  '&F15'.
      RETURN.
    WHEN OTHERS.
  ENDCASE.
  rs_selfield-refresh = 'X'.
ENDFORM.                    "frm_user_command"