добрый
(надеюсь для остальных) день

вообщем такая вот проблемка... есть модальный экран, на нем контейнер, в который засунута АЛВ-таблица. Этот экран может вызыватсья с двух других экранов программы.
варианты проблемных ситуаций такие:
1) если по закрытии экрана с АЛВ не чистим/дестроим объект вида cl_gui_alv_grid с нашей АЛВ-шкой, то почему-то при вызове из экрана А оно работает, а при вызове из экрана Б АЛВ не рисуется ...
(если же сначала попрбовать вызвать с экрана Б то не ресуется потом с экрана А) закрываю модальное окно так: leave to screen 0.
2) если сделать free alvgrid. при закрытии экрана (соотвественно в ПБО потом опять вызывается создание объекта) , то АЛВ потом рисуется в обоих случаях, но данные не обновляются пока например на АЛВ-шке не нажмеш кнопку сортировка и т.п.
в дэбагере смотрел метод
Code:
call method alvgrid->refresh_table_display
EXCEPTIONS
finished = 1
others = 2.
вызывается.... (sy-subrc = 0).
3) а вот call method alvgrid->FREE. я наверно пользоваться неумею... после if alvgrid is initial. в "иначе" обходит, и соответственно падает...
вот код: вызов экрана call screen 110 start at 5 5.
переменные:
Code:
data: alvgrid type ref to cl_gui_alv_grid,
C_MAINCONT type ref to cl_gui_custom_container,
t_exclude type ui_functions ,
i_alv type lvc_t_fcat.
PBO:
Code:
if alvgrid is initial .
create object C_MAINCONT
EXPORTING
container_name = 'C_MAINCONT'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.
create object alvgrid
EXPORTING
i_parent = C_MAINCONT
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5.
perform fieldcat_initv changing i_alv .
call method alvgrid->set_table_for_first_display
EXPORTING
is_layout = st_lay "пустой
it_toolbar_excluding = t_exclude
CHANGING
it_outtab = i_tabl[]
it_fieldcatalog = i_alv
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4.
call method alvgrid->refresh_table_display
EXCEPTIONS
finished = 1
others = 2.
else .
call method alvgrid->refresh_table_display
EXCEPTIONS
finished = 1
others = 2.
endif .
потом заполняется статус
PAI:
Code:
MODULE USER_COMMAND_0110 INPUT.
CASE sy-UCOMM.
WHEN 'OK'.
perform save.
"call method alvgrid->FREE.
free alvgrid.
leave to screen 0.
WHEN 'CANCEL'.
"call method alvgrid->FREE.
free alvgrid.
leave to screen 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
п.с. может кто-то скажет хотябы какая из этих попыток неграмотна, чтобы я ее исключил...