PDA

Ver la Versión Completa : REUSE_ALV_GRID_DISPLAY y CheckBox


jamiguel77
16/01/15, 21:54:32
Hola Amigos se que es un tema muy hablado en los foros, pero creanme no encuentro un ejemplo como tal que explique un poco mas, que codigo.

hice un programa donde lleno una tabla interna con datos, y los muestro con este alv:

REUSE_ALV_GRID_DISPLAY

en dicha tabla interna tengo una columna que me indica si se selecciono la columna (es la primer columna).

Pego un poco del codigo donde defino el campo que sera un checkbox:

wa_fieldcat-fieldname = 'SEL'.
wa_fieldcat-seltext_m = 'Seleccionar'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-checkbox = 'X'.
wa_fieldcat-col_pos = 1.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = sy-repid
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* is_layout = it_layout
IT_FIELDCAT = it_fieldcat[]
TABLES
T_OUTTAB = data
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.



Mi programa es un Report no es una Dynpro.

El proceso es:

Mediante un selection Screen, pido ciertos parametros, el conjunto de datos los meto en una tabla interna y luego los muestro en un ALV.

Mi duda es, como detecto esos registros seleccionados?

pongo un boton en la pantalla que diga, grabar? y ahi detecto los marcados? o en que momento?

En teoria:


I_CALLBACK_USER_COMMAND = 'USER_COMMAND'


En teoria deberia mandar llamar al form, pero cuando? cuando el usuario va dando clicks en la columna del checkbox? o cuando el usuario se sale de la pantalla mediante el boton BACK o cuando?


FORM user_command USING r_ucomm LIKE sy-ucomm "#EC CALLED
rs_selfield TYPE slis_selfield.
DATA:
lv_file TYPE string,
FILENAME TYPE string,
PATH TYPE string,
FILEPATH TYPE string.
BREAK-POINT.


Nunca entra(o se detiene en esa parte) en que evento entra a esta Form.

Con los registros seleccionados quiero llenar otra tabla interna.

Existe otro Alv que me ayude mas? si es asi, cual es?

Gracias.

sconoredhot
19/01/15, 10:47:45
Hola,


No va a pasar por ahi cuando el usuario vaya seleccionando los registros.

Si, para mi deberías colocar un boton en el status que diga Grabar o algo asi, y dentro de ese form pones:

Case p_ucomm.
When '&GRABAR'-
y aqui haces la lógica que necesitas.

Por otro lado, en el layout le debes indicar que hay un check para los seleccionados:

gw_layout-box_tabname = '<TABLA_INTERNA>'.
gw_layout-box_fieldname = '<CAMPO_CHECK>'.