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

*&---------------------------------------------------------------------*
*& 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 - POOLS slis .                                  "ALV Declarations
*Data Declaration
*----------------
TYPES BEGIN  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 .

DATA it_ekko  TYPE  STANDARD  TABLE  OF  t_ekko  INITIAL  SIZE  0 ,
      wa_ekko  TYPE  t_ekko .

*ALV data declarations
DATA fieldcatalog  TYPE  slis_t_fieldcat_alv  WITH  HEADER  LINE .
DATA it_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

猜你喜欢

转载自blog.csdn.net/champaignwolf/article/details/80345423
alv