Информация выводится посредством REUSE_ALV_GRID_DISPLAY. На событие slis_ev_data_changed повешена процедура DATA_CHANGED, в которой изменяется цвет ячейки, если измененное количество больше количества в соседней ячейке.
Для того, чтобы поменялся цвет в конце DATA_CHANGED, я вызываю метод CALL METHOD l_grid->refresh_table_display. Отрабатывает все хорошо, если не делать предварительно сортировку.
А если сделать, то цвет поменяется в нужной ячейке, а вот количество - нет.
Пример:
Изменила количество в row_id=3
В DATA_CHANGED в строке row_id=3 изменился цвет.
Сделался refresh, и строка переместилась, к примеру, на 1-ую строчку.
Количество изменилось в той строчке, которая находится на 3-ей позиции, а не в той, которая изначально была на 3-ем месте.
Вопрос:
Можно ли где-то вызвать CALL METHOD l_grid->refresh_table_display, в другом месте (после изменения количества), и если да - то где?
Code:
REFRESH: events.
events_line-name = slis_ev_data_changed.
events_line-form = 'DATA_CHANGED'.
APPEND events_line TO events.
gset-edt_cll_cb = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_mself
it_fieldcat = lt_fdcat "i_callback_user_command = 'ALV_GRID_UCOMM'
i_save = 'A'
i_callback_pf_status_set = 'F_STAT_STANDARD'
i_callback_user_command = 'USER_COMMAND'
is_layout = x_layout
i_grid_settings = gset
IT_EVENTs = events[]
TABLES
t_outtab = gt_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
FORM data_changed USING
rr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA: w_itab TYPE LINE OF lvc_t_modi,
itab TYPE lvc_t_modi,
ix LIKE sy-tabix.
itab[] = rr_data_changed->mt_mod_cells[].
DATA: l_grid TYPE REF TO cl_gui_alv_grid.
DATA: znum TYPE lips-lfimg.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_grid.
FIELD-SYMBOLS <wa2> LIKE LINE OF gt_tab.
LOOP AT itab INTO w_itab.
ix = sy-tabix.
CASE w_itab-fieldname.
WHEN 'KMOV'.
READ TABLE gt_tab ASSIGNING <wa2> INDEX w_itab-row_id.
CALL FUNCTION 'MOVE_CHAR_TO_NUM'
EXPORTING
chr = w_itab-value
IMPORTING
num = znum
EXCEPTIONS
convt_no_number = 1
convt_overflow = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
IF znum > <wa2>-kulab.
<wa2>-color = 'C612'.
ELSE.
<wa2>-color = ''.
ENDIF.
MODIFY gt_tab INDEX w_itab-row_id FROM <wa2>.
w_itab-value = ''.
MODIFY itab FROM w_itab.
ENDCASE.
ENDLOOP.
CALL METHOD l_grid->refresh_table_display.