Quando é feito o agrupamento no ALV de subtotal, como na imagem abaixo.
No meu caso eu tenho um botão q é executado dependendo dos itens selecionados, da forma normal eu teria q selecionar as linhas sem subtotal para que o método GET_SELECTED_ROWS selecionasse as linhas corretas. Mas existe uma forma de selecionar apenas a linhas de subtotal, dessa forma se as linhas estivessem comprimidas é possível selecionar somente as linhas de subtotal sem precisar expandí-las.
Para isso utilizar o método GET_SUBTOTALS em parceria com a GET_SELECTED_ROWS.
Quando é selecionado uma linha de subtotal o método GET_SELECTED_ROWS retorna 2 tabelas.
Na tabela ET_INDEX_ROWS o campo ROWTYPE vem preenchido, nos itens normais esse campo vem em branco.
Então tenho o seguinte, tem que pegar as linhas selecionadas que tem o campo ROWTYPE preenchido, nessas linhas o campo INDEX não se refere a linha da tabela interna do ALV da tela, esse INDEX é referente ao indice da tabela ET_GROUPLEVELS do método GET_SUBTOTALS.
Essa tabela ET_GROUPLEVELS carregado.
O INDEX é o indice da tabela interna.
O INDEX_FROM é a linha do ALV inicial do SUBTOTAL
O INDEX_TO é a linha do ALV final do SUBTOTAL.
a principio meu código ficou assim.
DATA: lo_c00 TYPE REF TO data,
lo_c01 TYPE REF TO data,
lo_c02 TYPE REF TO data,
lo_c03 TYPE REF TO data,
lo_c04 TYPE REF TO data,
lo_c05 TYPE REF TO data,
lo_c06 TYPE REF TO data,
lo_c07 TYPE REF TO data,
lo_c08 TYPE REF TO data,
lo_c09 TYPE REF TO data.
DATA lt_grp TYPE lvc_t_grpl.
DATA: lw_grp TYPE lvc_s_grpl,
lw_row TYPE lvc_s_row,
lw_row_aux TYPE lvc_s_row.
CLEAR lt_grp.
CALL METHOD o_alv->get_subtotals
IMPORTING
ep_collect00 = lo_c00
ep_collect01 = lo_c01
ep_collect02 = lo_c02
ep_collect03 = lo_c03
ep_collect04 = lo_c04
ep_collect05 = lo_c05
ep_collect06 = lo_c06
ep_collect07 = lo_c07
ep_collect08 = lo_c08
ep_collect09 = lo_c09
et_grouplevels = lt_grp.
LOOP AT ft_row INTO lw_row
WHERE rowtype IS NOT INITIAL.
READ TABLE lt_grp INTO lw_grp INDEX lw_row-index.
CHECK sy-subrc = 0.
DO.
CLEAR lw_row_aux.
lw_row_aux-index = lw_grp-index_from.
APPEND lw_row_aux TO ft_row.
IF lw_grp-index_from >= lw_grp-index_to.
EXIT.
ENDIF.
ADD 1 TO lw_grp-index_from.
ENDDO.
ENDLOOP.
DELETE ft_row
WHERE rowtype IS NOT INITIAL.