Подскажите, есть транзакция VKM3, нужно при некоторых условиях делать чекбокс недоступным.
{skip}
притом что грид выводится через "REUSE_ALV_LIST_DISPLAY"
Вопрос в том когда возникают эти условия, т.е. я предполагаю, что условия возникают до показа данных в ALV? Если это так, тогда задача сводится к тому, чтобы понять где перед вызовом ALV можно вклинится и изменить данные таблицы. Решается довольно просто. Ищем вывод этого ALV, это код в инклуде
RVKREALV со строки 530 написано следующее:
FORM reuse_alv_list_display.
PERFORM set_tooltip.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
* I_BUFFER_ACTIVE = 'X'
* I_INTERFACE_CHECK = ' '
i_callback_program = k_repid
i_callback_pf_status_set = k_status
i_callback_user_command = k_user_command
* I_STRUCTURE_NAME = 'VBUK'
is_layout = kr_layout
it_fieldcat = kr_fieldcat[]
* IT_EXCLUDING =
it_special_groups = kr_sp_group
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = k_save
is_variant = k_variant
it_events = kr_events[]
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
it_except_qinfo = gt_exc
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = postab.
Как видим результирующая таблица выводится
postab. ну а дальше идем в формирование лейаута таблицы, чуток выше строка 470: FORM layout_build USING u_kr_layout TYPE slis_layout_alv, где видим, что чек-бокс это поле u_kr_layout-box_fieldname = 'SELKZ'. " Checkbox, дальше в отладке смотрим что если в этом поле значение = "F", то чек-бокс выводится недоступным для изменения, что нам и нужно. Поэтому возвращаемся в подпрограмму формирования вызова: FORM reuse_alv_list_display, и дальше дело техники, называемой использование не явной точки расширения, читать тут: You are not allowed to view links.
Register or
Login в общем виде в начале подпрограммы вставляем свое расширения и в нем в цикле идем по таблице
postab и для нужных нам записей в поле
postab-SELKZ ставим значение
"F", после чего на экране такие записи будут выведены не доступными для изменений. Пример на рисунке ниже. Как говорится работы на 30 минут с одним перерывом на кофе...
PS: На первом рисунке, я просто в отладчике поменял поля (расширение как-то делать не хотелось, это вы уже там сами), а далее показал, что записи 3 и 5 таки вывелись с недоступным чек-боксом. Так сказать спасибо разработчикам ECC 6.0 за наше счастливое детство и явные и не очень явные точки расширения системы. Жить стало проще, но зараза сложнее, так как криворуких абаперов всех не перестреляешь, а это открывает для них такие широкие перспективы, что за систему становится страшно