четверг, 24 января 2013 г.

Открытие на редактирование определенных полей(ячеек) в определенных строках ALV

   Данный пример подходит при реализации 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,
     aufnr like aufk-aufnr,
cellstyles type lvc_t_styl,
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.
...
Далее, в 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.
Поля(ячейки) "Заказ" и "Выполненный объем" открыты/закрыты для редактирования согласно условиям.