ALV Object CL_SALV_TABLE не поддерживает редактируемых ячеек, редактируемых столбцов или строк. Но если нельзя, но очень надо, то можно...
report z_test_lna.
* класс для обработки действий пользователя
class lcl_handle_events definition deferred.
* Объявляем объект типа cl_salv_table, который выведет наши данные в виде ALV
data: gc_alv_table type ref to cl_salv_table.
data: gc_columns type ref to cl_salv_columns_table.
data: gc_colwork type ref to cl_salv_column_table.
* Таблица с данными для вывода в ALV
data: begin of gt_mkpf occurs 10,
checkbox,
mblnr type mkpf-mblnr,
mjahr type mkpf-mjahr,
vgart type mkpf-vgart,
blart type mkpf-blart,
blaum type mkpf-blaum,
bldat type mkpf-bldat,
budat type mkpf-budat,
cpudt type mkpf-cpudt,
cputm type mkpf-cputm,
aedat type mkpf-aedat,
usnam type mkpf-usnam,
tcode type mkpf-tcode,
frath type mkpf-frath,
end of gt_mkpf.
data wa_mkpf like line of gt_mkpf.
*----------------------------------------------------------------------*
* CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
class lcl_handle_events definition.
public section.
methods:
on_link_click for event link_click of cl_salv_events_table
importing row column.
endclass. "lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
class lcl_handle_events implementation.
method on_link_click.
* Тут весь секрет)
if row <> 0.
if column = 'CHECKBOX'.
read table gt_mkpf into wa_mkpf index row.
if sy-subrc eq 0.
case wa_mkpf-checkbox.
when 'X'.
clear wa_mkpf-checkbox.
when others.
wa_mkpf-checkbox = 'X'.
endcase.
endif.
modify gt_mkpf from wa_mkpf index row transporting checkbox.
gc_alv_table->refresh( ). "Нужно для обработки изменения в экране.
else.
break-point.
gc_alv_table->refresh( ). "Нужно для обработки изменения в экране.
endif.
else.
"...
endif.
endmethod. "on_single_click
endclass. "lcl_handle_events IMPLEMENTATION
data: gr_events type ref to lcl_handle_events.
data: gc_events type ref to cl_salv_events_table.
start-of-selection.
* Выбираем данные
select * into corresponding fields of table gt_mkpf from mkpf
where mblnr = '10490000000'.
* Статический метод класса для создания объекта и связывания с нашей таблицей
cl_salv_table=>factory( importing r_salv_table = gc_alv_table
changing t_table = gt_mkpf[] ).
* Получим каталог полей таблицы
gc_columns = gc_alv_table->get_columns( ).
* Получим поле по имени
gc_colwork ?= gc_columns->get_column( 'CHECKBOX' ).
* Объявляем наш checkbox как checkbox-ссылка
gc_colwork->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
*Создание объекта обработки
create object gr_events.
* Получить события для таблицы
gc_events = gc_alv_table->get_event( ).
set handler gr_events->on_link_click for gc_events.
* Вывести ALV-таблицу на экран
gc_alv_table->display( ).
результат
report z_test_lna.
* класс для обработки действий пользователя
class lcl_handle_events definition deferred.
* Объявляем объект типа cl_salv_table, который выведет наши данные в виде ALV
data: gc_alv_table type ref to cl_salv_table.
data: gc_columns type ref to cl_salv_columns_table.
data: gc_colwork type ref to cl_salv_column_table.
* Таблица с данными для вывода в ALV
data: begin of gt_mkpf occurs 10,
checkbox,
mblnr type mkpf-mblnr,
mjahr type mkpf-mjahr,
vgart type mkpf-vgart,
blart type mkpf-blart,
blaum type mkpf-blaum,
bldat type mkpf-bldat,
budat type mkpf-budat,
cpudt type mkpf-cpudt,
cputm type mkpf-cputm,
aedat type mkpf-aedat,
usnam type mkpf-usnam,
tcode type mkpf-tcode,
frath type mkpf-frath,
end of gt_mkpf.
data wa_mkpf like line of gt_mkpf.
*----------------------------------------------------------------------*
* CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
class lcl_handle_events definition.
public section.
methods:
on_link_click for event link_click of cl_salv_events_table
importing row column.
endclass. "lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
class lcl_handle_events implementation.
method on_link_click.
* Тут весь секрет)
if row <> 0.
if column = 'CHECKBOX'.
read table gt_mkpf into wa_mkpf index row.
if sy-subrc eq 0.
case wa_mkpf-checkbox.
when 'X'.
clear wa_mkpf-checkbox.
when others.
wa_mkpf-checkbox = 'X'.
endcase.
endif.
modify gt_mkpf from wa_mkpf index row transporting checkbox.
gc_alv_table->refresh( ). "Нужно для обработки изменения в экране.
else.
break-point.
gc_alv_table->refresh( ). "Нужно для обработки изменения в экране.
endif.
else.
"...
endif.
endmethod. "on_single_click
endclass. "lcl_handle_events IMPLEMENTATION
data: gr_events type ref to lcl_handle_events.
data: gc_events type ref to cl_salv_events_table.
start-of-selection.
* Выбираем данные
select * into corresponding fields of table gt_mkpf from mkpf
where mblnr = '10490000000'.
* Статический метод класса для создания объекта и связывания с нашей таблицей
cl_salv_table=>factory( importing r_salv_table = gc_alv_table
changing t_table = gt_mkpf[] ).
* Получим каталог полей таблицы
gc_columns = gc_alv_table->get_columns( ).
* Получим поле по имени
gc_colwork ?= gc_columns->get_column( 'CHECKBOX' ).
* Объявляем наш checkbox как checkbox-ссылка
gc_colwork->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
*Создание объекта обработки
create object gr_events.
* Получить события для таблицы
gc_events = gc_alv_table->get_event( ).
set handler gr_events->on_link_click for gc_events.
* Вывести ALV-таблицу на экран
gc_alv_table->display( ).
результат
Комментариев нет:
Отправить комментарий