Aqui te pongo un ejemplo
Con dos opciones:
- Con un boton que muestre los datos marcados
- Haciendo doble click sobre un registro.
Lo primero es la funcion que muestra el alv create un form 'user_command'.
Y creas el siguiente form.
FORM alv_user_command USING p_r_ucomm LIKE sy-ucomm
p_rs_selfield TYPE slis_selfield.
DATA: d_contador TYPE i.
CASE p_r_ucomm.
WHEN '&IC1'. -> Esto es para el doble click
READ TABLE i_salida INDEX p_rs_selfield-tabindex. -> itab del ALV
SELECT * FROM ziber_ta_np02
WHERE kblnr = i_salida-belnr
AND refbukrs = i_salida-bukrs
AND kblpos = i_salida-blpos
AND refgjahr = i_salida-gjahr.
IF sy-subrc = 0.
MOVE-CORRESPONDING ziber_ta_np02 TO i_detalle.
i_detalle-gjahr = i_salida-gjahr.
i_detalle-belnr = i_salida-belnr.
i_detalle-blpos = i_salida-blpos.
i_detalle-pspnr = i_salida-pspnr.
i_detalle-fistl = i_salida-fistl.
i_detalle-fipos = i_salida-fipos.
i_detalle-geber = i_salida-geber.
i_detalle-lifnr = i_salida-lifnr.
i_detalle-wtges = i_salida-wtges.
i_detalle-belnro = ziber_ta_np02-belnr.
IF NOT ziber_ta_np02-augdt IS INITIAL.
i_detalle-ejerp = ziber_ta_np02-augdt.
ELSE.
i_detalle-ejerp = ''.
ENDIF.
i_detalle-importp = ziber_ta_np02-dmbtr.
APPEND i_detalle.
ENDIF.
ENDSELECT.
PERFORM alv_detalle.
WHEN '&VER'. -> Este seria tu caso. Todos los registros seleccionados
CLEAR i_detalle. REFRESH i_detalle.
READ TABLE i_salida INDEX p_rs_selfield-tabindex.
* recorremos todos los registros que esten marcados
LOOP AT i_salida WHERE marca = 'X'.
** cada vez que entre contamos para saber si al menos hay uno pinchado
d_contador = d_contador + 1.
SELECT * FROM ziber_ta_np02
WHERE kblnr = i_salida-belnr
AND refbukrs = i_salida-bukrs
AND kblpos = i_salida-blpos
AND refgjahr = i_salida-gjahr.
IF sy-subrc = 0.
MOVE-CORRESPONDING ziber_ta_np02 TO i_detalle.
i_detalle-gjahr = i_salida-gjahr.
i_detalle-belnr = i_salida-belnr.
i_detalle-blpos = i_salida-blpos.
i_detalle-pspnr = i_salida-pspnr.
i_detalle-fistl = i_salida-fistl.
i_detalle-fipos = i_salida-fipos.
i_detalle-geber = i_salida-geber.
i_detalle-lifnr = i_salida-lifnr.
i_detalle-wtges = i_salida-wtges.
i_detalle-belnro = ziber_ta_np02-belnr.
IF NOT ziber_ta_np02-augdt IS INITIAL.
i_detalle-ejerp = ziber_ta_np02-augdt.
ELSE.
i_detalle-ejerp = ''.
ENDIF.
i_detalle-importp = ziber_ta_np02-dmbtr.
APPEND i_detalle.
ENDIF.
ENDSELECT.
ENDLOOP.
*si no hay ningun reg seleccionado para visualizar, mensaje!
IF ( d_contador = 0 ).
MESSAGE i002(z_mensa).
* sino al ALV para visualizar el detalle.
ELSE.
PERFORM alv_detalle.
ENDIF.
ENDCASE.
ENDFORM. " alv_user_command
|