Была такая же проблема, с переполнением памяти, последний патч-левел все исправил.
Однако, если в гриде несколько тысяч строк и для нахождения доп. информации по строке будем рефрешить весь грид, то даже при "плавном" обновлении:
Code:
stable-row = 'X'.
stable-col = 'X'.
CALL METHOD grid->refresh_table_display( is_stable = stable ))
будет неприятное передергивание всего экрана, даже на мощном компе. Поэтому, правильнее делать нахождение зависимых полей в событии data_changed грида.
Вот пример (при вводе табельного номера, подтягивается ФИО):
Code:
METHOD handle_data_changed.
DATA:
ls_good_cell TYPE lvc_s_modi,
l_subrc TYPE sysubrc,
l_msg_dummy TYPE char1,
l_zzpernr_txt TYPE char1024.
FIELD-SYMBOLS:
<mod_cell> TYPE lvc_s_modi.
* обработка изменений ячеек
LOOP AT er_data_changed->mt_good_cells INTO ls_good_cell.
READ TABLE er_data_changed->mt_mod_cells ASSIGNING <mod_cell>
WITH KEY row_id = ls_good_cell-row_id
fieldname = ls_good_cell-fieldname.
CASE ls_good_cell-fieldname.
WHEN 'BDATU'.
* .....
WHEN 'ZZPERNR'.
* при изменении табельного номера (ZZPERNR), подтягиваем ФИО (ZZPERNR_TXT)
PERFORM get_zzpernr_txt USING ls_good_cell-value
CHANGING l_zzpernr_txt
l_subrc.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_good_cell-row_id
i_tabix = space
i_fieldname = 'ZZPERNR_TXT'
i_value = l_zzpernr_txt.
IF l_subrc NE 0
AND ls_good_cell-value NE '00000000'.
<mod_cell>-error = 'X'.
MESSAGE e001(00) WITH 'Табельный №' ls_good_cell-value 'не существует' INTO l_msg_dummy.
ENDIF.
ENDCASE.
CHECK <mod_cell>-error NE space.
* добавляем сообщение в лог
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = sy-msgid
i_msgty = sy-msgty
i_msgno = sy-msgno
i_msgv1 = sy-msgv1
i_msgv2 = sy-msgv2
i_msgv3 = sy-msgv3
i_msgv4 = sy-msgv4
i_fieldname = ls_good_cell-fieldname
i_row_id = ls_good_cell-row_id
i_tabix = space.
ENDLOOP.
ENDMETHOD. "handle_data_changed