Grabar variante de visualizacion en un ALV
Guardar y recuperar variantes del layout de un ALV.
Hay que poner este codigo, agregar un boton al STATUS GUI y un par de parametros a la funcion de ALV.
En los parametros de seleccion:
Variables:
Codigo:
Para que determinados campos no se muestren en la salida del ALV, pero que esten disponibles para poder agregarlos a la visualizacion , cuando se arma el fieldcat, a esos campos hay que setearles lo siguiente:
Y en el "STATUS GUI" (se edita por medio de la SE80) tiene que haber un boton que haga referencia al codigo de funcion &OL0
En la funcion de ALV hay que pasar los sig parametros:
Hay que poner este codigo, agregar un boton al STATUS GUI y un par de parametros a la funcion de ALV.
En los parametros de seleccion:
SELECTION-SCREEN BEGIN OF BLOCK header2 WITH FRAME TITLE text-002.
PARAMETERS: p_layout LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK header2.
Variables:
DATA: gx_variant LIKE disvariant.
DATA: g_variant LIKE disvariant.
DATA: g_variant_save VALUE 'U'.
DATA: g_variant_flag.
Codigo:
AT SELECTION-SCREEN OUTPUT.
CLEAR g_variant.
g_variant-report = sy-repid.
g_variant-username = sy-uname.
IF p_layout IS INITIAL AND
g_variant_flag IS INITIAL.
PERFORM get_default_variant_f14 USING p_layout.
g_variant_flag = 'X'.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layout.
PERFORM variant_inputhelp_f14 USING p_layout.
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*&---------------------------------------------------------------------*
*& Form variant_inputhelp_f14
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_LAYOUT text
*----------------------------------------------------------------------*
FORM variant_inputhelp_f14 USING p_variant LIKE g_variant-variant.
* Esta rutina funciona como un search help recuperando los layouts
* creados por el usuario
DATA h_exit.
CLEAR gx_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save = g_variant_save
IMPORTING
e_exit = h_exit
es_variant = gx_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc IS INITIAL AND h_exit IS INITIAL.
g_variant-variant = gx_variant-variant.
p_variant = gx_variant-variant.
ELSE.
MESSAGE ID sy-msgid TYPE 'S'
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "variant_inputhelp_f14
*&---------------------------------------------------------------------*
*& Form get_default_variant_f14
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_VARIANT text
*----------------------------------------------------------------------*
FORM get_default_variant_f14 USING p_variant LIKE g_variant-variant.
* Recupera datos para luego poder recuperar los diferentes layouts....
gx_variant = g_variant.
CLEAR gx_variant-variant.
CLEAR gx_variant-text.
IF NOT p_variant IS INITIAL.
gx_variant-variant = p_variant.
ENDIF.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = g_variant_save
CHANGING
cs_variant = gx_variant
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 3
OTHERS = 4.
CASE sy-subrc.
WHEN 0.
p_variant = gx_variant-variant.
WHEN 2.
CLEAR p_variant.
ENDCASE.
ENDFORM. "get_default_variant_f14
Para que determinados campos no se muestren en la salida del ALV, pero que esten disponibles para poder agregarlos a la visualizacion , cuando se arma el fieldcat, a esos campos hay que setearles lo siguiente:
ln_catlg_campos-no_out = 'X'.
Y en el "STATUS GUI" (se edita por medio de la SE80) tiene que haber un boton que haga referencia al codigo de funcion &OL0
En la funcion de ALV hay que pasar los sig parametros:
*&---------------------------------------------------------------------*
*& Form llamar_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM llamar_alv .
g_user_command = 'USER_COMM'.
CLEAR g_variant.
g_variant-variant = p_layout.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = g_user_command
i_structure_name = 'T_SALIDA'
is_layout = g_layout
it_fieldcat = gt_catlg_campos
i_save = 'U'
is_variant = g_variant
TABLES
t_outtab = t_salida
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " llamar_alv