전체 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.