Да уж, в общем это из разряда - я хренею с этого SAP-а и ABAP-а, полез копать тут этот класс, копал и выкопал, что в итоге, он использует для своей работы при полном экране вызов ФМ:
REUSE_ALV_GRID_DISPLAY, но при этом параметр I_HTML_HEIGHT_TOP, пацаны закоментировали, так что как бы мы тут класс не крутили, заголовком порулить не получиться.
Если пойти еще дальше, то в модуле
LSLVC_FULLSCREENF01, со строки 1469 есть такая подпрограмма:
*&--------------------------------------------------------------------*
*& Form set_salv_form_content_tol
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
form set_salv_form_content_tol.
===<вырезал лишнее>====
gt_grid-r_form_tol->set_content( lr_content ).
l_height = gt_grid-r_form_tol->get_height( ).
gt_grid-r_form_tol->display( ).
check gt_grid-splitter is not initial.
if i_grid_settings-coll_top_p is initial and
gt_grid-i_callback_html_top_of_page is initial and
gt_grid-i_callback_html_end_of_list is initial.
gt_grid-splitter->set_visible( abap_true ).
call method gt_grid-splitter->set_row_mode
exporting
mode = cl_gui_splitter_container=>mode_absolute.
if i_html_height_top is initial. "Y7AK007065
call method gt_grid-splitter->set_row_height
exporting
height = l_height
id = 1.
endif.
endif.
endform. "set_salv_form_content_tol
В общем этот код получает величину заполненной области и соответственно задает величину сплитера и далее, после кода
check gt_grid-splitter is not initial. код дальше игнорируется. Так вот можно написать неявный энхансмент в конце этого блока и фактически написать что-то типа:
call method gt_grid-splitter->set_row_mode
exporting
mode = cl_gui_splitter_container=>mode_absolute.
if i_html_height_top is initial. "Y7AK007065
call method gt_grid-splitter->set_row_height
exporting
height = <нужная нам величина>
id = 1.
endif.
При этом сделать можно так, завести параметр и перед вызовом gc_salv_table->display( ) поставить в этом параметр например наше значение, пусть будет 50. А в код получить значение этого параметра, если оно не равно 0, тогда вызвать приведенный выше код по установке высоты заголовка. Само собой после этого параметр через в памяти обнулить. Таким образом, при задании параметра будет выставляться нужная нам величина заголовка. А кто про параметр не знает, для того будет все отрабатывать как обычно, т.е. в энхансменте код должен выглядеть типа так:
GET PARAMETR 'ZZ_HEADER' VALUE zz_new_height.
IF zz_new_height <> space.
SET PARAMETR 'ZZ_HEADER' VALUE space.
call method gt_grid-splitter->set_row_mode
exporting
mode = cl_gui_splitter_container=>mode_absolute.
if i_html_height_top is initial. "Y7AK007065
call method gt_grid-splitter->set_row_height
exporting
height = zz_new_height
id = 1.
endif.
endif.
Должно сработать процентов на 99 без всяких проблем. Вообще-то если бы можно было в классе попасть в событие i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE', которое тоже закомментировано при вызове, то там бы вообще проблем небыло, так как в этом событии можно просто было бы написать приведенный выше вами код и все тоже работало бы:
DATA: lo_grid TYPE REF TO cl_gui_alv_grid,
f(14) VALUE 'SET_ROW_HEIGHT'.
* Get global ALV information from buffer
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_grid.
* Set size of ALV header, body & footer control
BREAK-POINT. "<0648171
CALL METHOD lo_grid->parent->parent->(f)
EXPORTING
id = 1
height = 5.
В общем не докрутили они этот класс немного. Извечный вопрос, зачем комментировать вызов, ну добавьте в класс эти переменные, надо кому, будут использовать, не надо... будут стоять в значениях по умолчанию. В общем извечный вопрос, где была голова
PS: Если решите использовать энхансмент, отпишитесь о результате. А впрочем пишите в любом случае как решили делать.