现在的位置: 首页 > 综合 > 正文

ALV 中根据条件设置某个cell 是否可编辑

2013年07月13日 ⁄ 综合 ⁄ 共 7212字 ⁄ 字号 评论关闭

*&---------------------------------------------------------------------*
*& Report  Z_TEST_ZS13
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_TEST_ZS13.

*&---------------------------------------------------------------------*
*& Report  ZDEMO_ALVGRID_EDIT                                          *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& Example of a simple ALV Grid Report                                 *
*& ...................................                                 *
*&                                                                     *
*& The basic ALV grid, Enhanced to display specific fields as          *
*& editable depending on field value                                   *
*&---------------------------------------------------------------------*

TABLES:     ekko.

TYPE-POOLSslis.                                 "ALV Declarations
*Data Declaration
*----------------
TYPESBEGIN OF t_ekko,
  ebeln TYPE ekpo-ebeln,
  ebelp TYPE ekpo-ebelp,
  statu TYPE ekpo-statu,
  aedat TYPE ekpo-aedat,
  matnr TYPE ekpo-matnr,
  menge TYPE ekpo-menge,
  meins TYPE ekpo-meins,
  netpr TYPE ekpo-netpr,
  peinh TYPE ekpo-peinh,
  field_style  TYPE lvc_t_styl"FOR DISABLE
 END OF t_ekko.

DATAit_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
      wa_ekko TYPE t_ekko.

*ALV data declarations
DATAfieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATAit_fieldcat TYPE lvc_t_fcat,     "slis_t_fieldcat_alv WITH HEADER LINE,
      wa_fieldcat TYPE lvc_s_fcat,

      gd_tab_group TYPE slis_t_sp_group_alv,
      gd_layout    TYPE lvc_s_layo,     "slis_layout_alv,
      gd_repid     LIKE sy-repid.

************************************************************************
*Start-of-selection.
START-OF-SELECTION.

  PERFORM data_retrieval.
  PERFORM set_specific_field_attributes.
  PERFORM build_fieldcatalog.
  PERFORM build_layout.
  PERFORM display_alv_report.

*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM build_fieldcatalog.

  wa_fieldcat-fieldname   'EBELN'.
  wa_fieldcat-scrtext_m   'Purchase Order'.
  wa_fieldcat-col_pos     0.
  wa_fieldcat-outputlen   10.
  wa_fieldcat-emphasize   'X'.
  wa_fieldcat-key         'X'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'EBELP'.
  wa_fieldcat-scrtext_m   'PO Item'.
  wa_fieldcat-col_pos     1.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'STATU'.
  wa_fieldcat-scrtext_m   'Status'.
  wa_fieldcat-col_pos     2.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'AEDAT'.
  wa_fieldcat-scrtext_m   'Item change date'.
  wa_fieldcat-col_pos     3.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'MATNR'.
  wa_fieldcat-scrtext_m   'Material Number'.
  wa_fieldcat-col_pos     4.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'MENGE'.
  wa_fieldcat-scrtext_m   'PO quantity'.
  wa_fieldcat-col_pos     5.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'MEINS'.
  wa_fieldcat-scrtext_m   'Order Unit'.
  wa_fieldcat-col_pos     6.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'NETPR'.
  wa_fieldcat-scrtext_m   'Net Price'.
*设置单价字段可编辑
  wa_fieldcat-edit        'X'.
  wa_fieldcat-col_pos     7.
  wa_fieldcat-outputlen   15.
  wa_fieldcat-datatype     'CURR'.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.

  wa_fieldcat-fieldname   'PEINH'.
  wa_fieldcat-scrtext_m   'Price Unit'.
  wa_fieldcat-col_pos     8.
  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR  wa_fieldcat.
ENDFORM.                    " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.
* Set layout field for field attributes(i.e. input/output)
  gd_layout-stylefname 'FIELD_STYLE'.
  gd_layout-zebra             'X'.
ENDFORM.                    " BUILD_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
FORM display_alv_report.
  gd_repid sy-repid.

*  call function 'REUSE_ALV_GRID_DISPLAY'
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
       EXPORTING
            i_callback_program      gd_repid
*            i_callback_user_command = 'USER_COMMAND'
            is_layout_lvc               gd_layout
            it_fieldcat_lvc             it_fieldcat
            i_save                  'X'
       TABLES
            t_outtab                it_ekko
       EXCEPTIONS
            program_error           1
            OTHERS                  2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    " DISPLAY_ALV_REPORT

*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM data_retrieval.
  SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
   UP TO 10 ROWS
    FROM ekpo
    INTO  CORRESPONDING FIELDS OF TABLE it_ekko.

ENDFORM.                    " DATA_RETRIEVAL

*&---------------------------------------------------------------------*
*&根据条件设置字段是否可编辑
*&---------------------------------------------------------------------*
*       populate FIELD_STYLE table with specific field attributes
*----------------------------------------------------------------------*
form set_specific_field_attributes .
  DATA ls_stylerow TYPE lvc_s_styl .
  DATA lt_styletab TYPE lvc_t_styl .
* Populate style variable (FIELD_STYLE) with style properties
* The NETPR field/column has been set to editable in the fieldcatalog...
* The following code sets it to be disabled(display only) if 'NETPR'
* is gt than 10.
  LOOP AT it_ekko INTO wa_ekko.
    IF wa_ekko-netpr GT 10.
      ls_stylerow-fieldname 'NETPR' .
      ls_stylerow-style cl_gui_alv_grid=>mc_style_disabled.
                                             "set field to disabled
      APPEND ls_stylerow  TO wa_ekko-field_style.
*可以按上面的代码添加多个字段的是否可修改
      MODIFY it_ekko FROM wa_ekko.
    ENDIF.
  ENDLOOP.

endform.                    " set_specific_field_attributes

抱歉!评论已关闭.