SAP ALV 보고서 - 편집 가능한 ALV 구현 방법

전체 ALV 편집 가능 설정

레이아웃의 Edit 속성을 'X'로 설정합니다.

결과: 모든 필드를 편집할 수 있습니다.

코드 예시:

TYPES: BEGIN OF st_output,
         material_no TYPE mara-matnr,
         material_desc TYPE makt-maktx,
       END OF st_output.

DATA: gt_output_tab TYPE TABLE OF st_output.

DATA: gs_display_layout   TYPE lvc_s_layo,
      gt_column_catalog TYPE lvc_t_fcat.

gt_output_tab = VALUE #(
  ( material_no = 'MAT001' material_desc = '제품 A 설명' )
  ( material_no = 'MAT002' material_desc = '제품 B 설명' )
).

gs_display_layout-cwidth_opt = 'X'.
gs_display_layout-zebra = 'X'.
gs_display_layout-edit = 'X'.

gt_column_catalog = VALUE #(
  ( fieldname = 'MATERIAL_NO' ref_field = 'MATNR' ref_table = 'MARA' )
  ( fieldname = 'MATERIAL_DESC' ref_field = 'MAKTX' ref_table = 'MAKT' )
).

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = gs_display_layout
    it_fieldcat_lvc    = gt_column_catalog
    i_save             = 'A'
  TABLES
    t_outtab           = gt_output_tab
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

특정 열 편집 가능 설정

필드 카탈로그에서 특정 필드의 Edit 속성을 'X'로 지정합니다.

결과: 자재 번호는 편집 가능하고 자재 설명은 편집 불가능합니다.

코드 예시:

TYPES: BEGIN OF st_material_data,
         mat_number TYPE mara-matnr,
         description TYPE makt-maktx,
       END OF st_material_data.

DATA: gt_material_list TYPE TABLE OF st_material_data.

DATA: gs_grid_layout   TYPE lvc_s_layo,
      gt_field_catalog TYPE lvc_t_fcat.

gt_material_list = VALUE #(
  ( mat_number = 'MAT001' description = '자재 1 설명' )
  ( mat_number = 'MAT002' description = '자재 2 설명' )
).

gs_grid_layout-cwidth_opt = 'X'.
gs_grid_layout-zebra = 'X'.

gt_field_catalog = VALUE #(
  ( fieldname = 'MAT_NUMBER' ref_field = 'MATNR' ref_table = 'MARA' edit = 'X' )
  ( fieldname = 'DESCRIPTION' ref_field = 'MAKTX' ref_table = 'MAKT' )
).

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = gs_grid_layout
    it_fieldcat_lvc    = gt_field_catalog
    i_save             = 'A'
  TABLES
    t_outtab           = gt_material_list
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

셀 단위 편집 기능

1. ALV에 스타일 필드를 추가합니다(내부 테이블 개념)

2. 스타일 내에서 각 필드의 편집 가능 여부를 정의합니다

3. 레이아웃에서 스타일 필드 이름을 지정합니다

4. 레이아웃의 Edit 속성을 'X'로 설정합니다

결과: 첫 번째 행의 자재 번호는 편집 가능하고 설명은 편집 불가능하며, 두 번째 행은 반대됩니다.

코드 예시:

TYPES: BEGIN OF st_editable_data,
         material_code TYPE mara-matnr,
         material_text TYPE makt-maktx,
         cell_style TYPE lvc_t_styl,
       END OF st_editable_data.

DATA: gt_editable_records TYPE TABLE OF st_editable_data.

DATA: gs_configuration   TYPE lvc_s_layo,
      gt_column_def TYPE lvc_t_fcat.

DATA: lt_style_first_row TYPE lvc_t_styl,
      lt_style_second_row TYPE lvc_t_styl.

lt_style_first_row = VALUE #(
  ( fieldname = 'MATERIAL_CODE' style = cl_gui_alv_grid=>mc_style_enabled )
  ( fieldname = 'MATERIAL_TEXT' style = cl_gui_alv_grid=>mc_style_disabled )
).

lt_style_second_row = VALUE #(
  ( fieldname = 'MATERIAL_CODE' style = cl_gui_alv_grid=>mc_style_disabled )
  ( fieldname = 'MATERIAL_TEXT' style = cl_gui_alv_grid=>mc_style_enabled )
).

gt_editable_records = VALUE #(
  ( material_code = 'MAT001' material_text = '상품 1 설명' cell_style = lt_style_first_row )
  ( material_code = 'MAT002' material_text = '상품 2 설명' cell_style = lt_style_second_row )
).

gs_configuration-cwidth_opt = 'X'.
gs_configuration-edit = 'X'.
gs_configuration-stylefname = 'CELL_STYLE'.

gt_column_def = VALUE #(
  ( fieldname = 'MATERIAL_CODE' ref_field = 'MATNR' ref_table = 'MARA' )
  ( fieldname = 'MATERIAL_TEXT' ref_field = 'MAKTX' ref_table = 'MAKT' )
).

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program = sy-repid
    is_layout_lvc      = gs_configuration
    it_fieldcat_lvc    = gt_column_def
    i_save             = 'A'
  TABLES
    t_outtab           = gt_editable_records
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

태그: sap-alv abap-programming editable-grid sap-gui alv-display

8월 22일 20:41에 게시됨