Данный пример подходит при реализации ALV классом CL_GUI_ALV_GRID.
Для того, что бы редактировать столбцы ALV-таблицы, обычно, нужно заполнить fieldcatalog-edit = 'X' для определенного fieldcatalog-fieldname. Но, если нужно, что бы на редактирование были открыты определенные строки или поля(ячейки) по какому либо условию, делается это так...
В выходную таблицу it_outtab нужно добавить поле cellstyles type lvc_t_styl.
begin of it_outtab occurs 0,
dprice_r like zcol-dprice_r,
dprice_r like zcol-dprice_r,
aufnr like aufk-aufnr,
cellstyles type lvc_t_styl,
end of it_outtab.
end of it_outtab.
Далее, при выполнении определенного условия мы либо открываем поля(ячейки) на редактирование, либо закрываем. В моем случае это поля dprice_r и aufnr.
...
data: ls_style type lvc_t_styl.
...
loop at it_outtab.
s_tabx = sy-tabix.
if it_outtab-dprice_r is not initial and it_outtab-aufnr is not initial.
ls_style-fieldname = 'AUFNR'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled."закрыть редактирование
append ls_style to it_outtab-cellstyles.
ls_style-fieldname = 'DPRICE_R'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled."закрыть редактирование
append ls_style to it_outtab-cellstyles.
else.
ls_style-fieldname = 'AUFNR'.
ls_style-style = cl_gui_alv_grid=>mc_style_enabled."открыть редактирование
append ls_style to it_outtab-cellstyles.
ls_style-fieldname = 'DPRICE_R'.
ls_style-style = cl_gui_alv_grid=>mc_style_enabled."открыть редактирование
append ls_style to it_outtab-cellstyles.
endif.
modify it_outtab index s_tabx transporting cellstyles.
endloop.
s_tabx = sy-tabix.
if it_outtab-dprice_r is not initial and it_outtab-aufnr is not initial.
ls_style-fieldname = 'AUFNR'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled."закрыть редактирование
append ls_style to it_outtab-cellstyles.
ls_style-fieldname = 'DPRICE_R'.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled."закрыть редактирование
append ls_style to it_outtab-cellstyles.
else.
ls_style-fieldname = 'AUFNR'.
ls_style-style = cl_gui_alv_grid=>mc_style_enabled."открыть редактирование
append ls_style to it_outtab-cellstyles.
ls_style-fieldname = 'DPRICE_R'.
ls_style-style = cl_gui_alv_grid=>mc_style_enabled."открыть редактирование
append ls_style to it_outtab-cellstyles.
endif.
modify it_outtab index s_tabx transporting cellstyles.
endloop.
...
Далее, в is_layout указываем is_layout-stylefname = 'CELLSTYLES'.
Запускаем ALV и смотрим на результат.
call method g_grid->set_table_for_first_display
exporting
is_variant = disvariant
i_save = 'A'
is_layout = is_layout
changing
it_outtab = it_outtab[]
it_fieldcatalog = it_fieldcatalog
exceptions
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4.
exporting
is_variant = disvariant
i_save = 'A'
is_layout = is_layout
changing
it_outtab = it_outtab[]
it_fieldcatalog = it_fieldcatalog
exceptions
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4.
Поля(ячейки) "Заказ" и "Выполненный объем" открыты/закрыты для редактирования согласно условиям.