Стараюсь в написанных мною отчётиках использовать ‘REUSE_ALV_GRID_DISPLAY’ почаще. Текст вызова кочует из программы в программу методом копи-паста. Но вот до раскраски дело обычно не доходило.
Спросил тут у сотрудника, который вроде как что-то недавно делал что-то подобное. А он мне ответил, что там всё так сложно и нетривиально.
Копнул, попробовал и сходу всё заработало. Запишу себе, чтоб не забыть.
В программу понадобилось внести:
1. Прописать в выходной внутренней таблице специальное поле:
data: begin of it_detail_line.
…
data: cellcolors TYPE lvc_t_scol.
data end of it_detail_line .
data: it_detail like it_detail_line OCCURS 0 WITH HEADER LINE.
2. Прописать это поле при вызове ALV
alv_layout-coltab_fieldname = ‘CELLCOLORS’.
…
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
…
IS_LAYOUT = alv_layout
…
3. Сделать раскраску по собственному условию
loop at it_detail.
…
Data ls_cellcolor TYPE lvc_s_scol.
clear it_detail-cellcolors.
if it_detail-d_wrbtr < 0.
ls_cellcolor-fname = ‘D_WRBTR’.
ls_cellcolor-color-col = ‘6’ .
ls_cellcolor-color-inv = ‘0’ .
ls_cellcolor-color-int = ‘0’ .
APPEND ls_cellcolor TO it_detail-cellcolors.
endif.
…
MODIFY it_detail.
endloop.
Запускаю и вижу, что раскрас произошел успешно.
Пошёл, пожалуй, стукну сотрудника чем-нибудь тяжёлым…