Автор Тема: REUSE_ALV_LIST_DISPLAY disable checkbox  (Прочитано 4957 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
REUSE_ALV_LIST_DISPLAY disable checkbox
« : Декабрь 19, 2012, 05:32:57 pm »
Подскажите, есть транзакция VKM3, нужно при некоторых условиях делать чекбокс недоступным.
как бы это сделать, дабы не ломать сильно код и не прописывать "style  TYPE lvc_t_styl" таблицу которая объявлена как
Код: You are not allowed to view links. Register or Login
DATA:    BEGIN OF POSTAB OCCURS 200.
        INCLUDE STRUCTURE VBKRED.
DATA:      ABGRU_NEW LIKE VBAP-ABGRU,
           SBGRP_NEW LIKE VBAK-SBGRP,
           COL(3)   TYPE C.            " Farbfeld fќr ALV
DATA:    END   OF POSTAB.

притом что грид выводится через "REUSE_ALV_LIST_DISPLAY"

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 761
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: REUSE_ALV_LIST_DISPLAY disable checkbox
« Ответ #1 : Декабрь 20, 2012, 01:08:53 am »
You are not allowed to view links. Register or Login
Подскажите, есть транзакция VKM3, нужно при некоторых условиях делать чекбокс недоступным.
{skip}
притом что грид выводится через "REUSE_ALV_LIST_DISPLAY"
Вопрос в том когда возникают эти условия, т.е. я предполагаю, что условия возникают до показа данных в ALV? Если это так, тогда задача сводится к тому, чтобы понять где перед вызовом ALV можно вклинится и изменить данные таблицы. Решается довольно просто. Ищем вывод этого ALV, это код в инклуде RVKREALV со строки 530 написано следующее:
Код: You are not allowed to view links. Register or Login
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 за наше счастливое детство и явные и не очень явные точки расширения системы. Жить стало проще, но зараза сложнее, так как криворуких абаперов всех не перестреляешь, а это открывает для них такие широкие перспективы, что за систему становится страшно  8)

Оффлайн Sed0Y

  • ECC 7.0 (ERP/CRM), EHP
  • Newbie
  • *
  • Сообщений: 121
  • Репутация: +7/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: REUSE_ALV_LIST_DISPLAY disable checkbox
« Ответ #2 : Декабрь 20, 2012, 10:51:39 am »
И снова - Спасибо!
оказалось проще чем я думал.