Archivo
Tipos de Popup en SAP – Parte 4 – POPUP ALV GRID
Caso: Encontré un POPUP para visualizar en ALV GRID la información de una tabla interna, adjunto link directo de la fuente ya que fue probado y quedó funcionando.
Fuente: https://blogs.sap.com/2014/05/07/very-simple-alv-in-pop-up-window/
POPUP_TO_DECIDE_LIST
Caso: se desea crear un popup para que el usuario seleccione una opción entre varias.
Solución: Usando la función POPUP_TO_DECIDE_LIST puedo hacerlo.
DATA: li_spopli TYPE STANDARD TABLE OF spopli,
wa_spopli TYPE spopli,
lv_result TYPE char1.
START-OF-SELECTION.
CLEAR: wa_spopli.
wa_spopli-varoption = ‘Opción 1’.
APPEND wa_spopli TO li_spopli.
CLEAR: wa_spopli.
wa_spopli-varoption = ‘Opción 2’.
APPEND wa_spopli TO li_spopli.
CLEAR: wa_spopli.
wa_spopli-varoption = ‘Opción 3’.
APPEND wa_spopli TO li_spopli.
CALL FUNCTION ‘POPUP_TO_DECIDE_LIST’
EXPORTING
titel = ‘POPUP – Radio Buttons’
textline1 = ‘Seleccione una opción’
IMPORTING
answer = lv_result
TABLES
t_spopli = li_spopli
EXCEPTIONS
not_enough_answers = 1
too_much_answers = 2
too_much_marks = 3
OTHERS = 4.
IF sy-subrc EQ 0.
IF lv_result NE ‘A’.
READ TABLE li_spopli INTO wa_spopli INDEX lv_result.
WRITE:/ ‘Se seleccionó: ‘, wa_spopli-varoption.
ELSE.
WRITE:/ ‘No ha realizado ninguna selección’.
ENDIF.
ENDIF.
Tipos de Popup en SAP – Parte 2
Caso: Se busca mostrar los distintos tipos de POPUP para poder elegir el correcto cada vez que necesitemos uno.
1. POPUP_FOR_INTERACTION
CALL FUNCTION ‘POPUP_FOR_INTERACTION’
EXPORTING
headline = ‘Título (máx 60 caracteres)’
text1 = ‘Texto 1 (máx 60 caracteres)’
text2 = ‘Texto 2 (máx 60 caracteres)’
text3 = ‘Texto 3 (máx 60 caracteres)’
text4 = ‘Texto 4 (máx 60 caracteres)’
text5 = ‘Texto 5 (máx 60 caracteres)’
text6 = ‘Texto 6 (máx 60 caracteres)’
ticon = ‘I’ " Ícono a mostrar
button_1 = ‘SI’
button_2 = ‘NO’
button_3 = ‘CERRAR’
IMPORTING
button_pressed = lv_answer. " Devuelve 1, 2, 3 o 0 si no presionó ningun botón
Uso: similar al popup_to_confirm
Ventajas: fácil uso para informar algo al usuario y obtener una decisión.
Desventajas: no se puede definir la posición ni el tamaño del popup, no permite personalización de botones (son muy simples)
2. REUSE_ALV_POPUP_TO_SELECT
TYPE-POOLS: slis.
TYPES: BEGIN OF ty_output,
checkbox TYPE c,
material TYPE matnr,
fecha TYPE sy-datum,
END OF ty_output.
DATA: lt_output TYPE STANDARD TABLE OF ty_output,
ls_output TYPE ty_output,
lt_fcat TYPE slis_t_fieldcat_alv,
ls_fcat TYPE slis_fieldcat_alv,
lv_sel TYPE slis_selfield,
lt_excl TYPE slis_t_extab,
ls_excl TYPE slis_extab,
lv_exit TYPE c.
"Creamos Catalogo de Datos
CLEAR ls_fcat.
ls_fcat-row_pos = ‘1’.
ls_fcat-col_pos = ‘1’.
ls_fcat-fieldname = ‘CHECKBOX’.
ls_fcat-tabname = ‘LT_OUTPUT’.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-row_pos = ‘1’.
ls_fcat-col_pos = ‘2’.
ls_fcat-fieldname = ‘MATERIAL’.
ls_fcat-tabname = ‘LT_OUTPUT’.
ls_fcat-seltext_m = ‘Material’.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-row_pos = ‘1’.
ls_fcat-col_pos = ‘3’.
ls_fcat-fieldname = ‘FECHA’.
ls_fcat-tabname = ‘LT_OUTPUT’.
ls_fcat-seltext_m = ‘Fecha’.
APPEND ls_fcat TO lt_fcat.
"Creamos Exclusiones de Toolbar
ls_excl-fcode = ‘&ALL’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&SAL’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&ETA’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘%SC’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘%SC+’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&OUP’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&ODN’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&ILT’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&OL0’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&CRB’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&CRL’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&CRR’. APPEND ls_excl TO lt_excl.
ls_excl-fcode = ‘&CRE’. APPEND ls_excl TO lt_excl.
ls_output-material = ‘EV1957-00005’.
ls_output-fecha = ‘20131111’.
APPEND ls_output TO lt_output.
ls_output-material = ‘VT7000-12100’.
ls_output-fecha = ‘20131112’.
APPEND ls_output TO lt_output.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
i_title = ‘Titulo (máx 35 caracteres)’
i_selection = ‘X’ " (X) = permite seleccionar, ( ) = sólo visualizar
i_allow_no_selection = ‘S’ " Allow copy although nothing is selected
i_zebra = ‘X’ " Modo Zebra para registros
i_screen_start_column = 5 " Posición ALV
i_screen_start_line = 5 "
i_screen_end_column = 100 "
i_screen_end_line = 10 "
i_checkbox_fieldname = ‘CHECKBOX’ " Campo de selección
* i_linemark_fieldname = " color para una línea
* i_scroll_to_sel_line = ‘X’ " remarca una línea
i_tabname = ‘LT_OUTPUT’ " Tabla de salida
* i_structure_name = " Nombre estructura
it_fieldcat = lt_fcat " Catálogo de campos
it_excluding = lt_excl " Excluir botones
* i_callback_program = " Name of the calling program
* i_callback_user_command = " USER_COMMAND handling form routine name
* is_private = " Internal private use only
IMPORTING
es_selfield = lv_sel " Info de la selección para una selección simple
e_exit = lv_exit " Queda en ‘X’ cuando el usuario aprieta Cancelar
TABLES
t_outtab = lt_output " Tabla de entrada/salida
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Error
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* Si no puso cancelar…
IF lv_exit NE ‘X’.
ENDIF.
ENDIF.
Uso: Permite definir un ALV simple y dar al usuario la posibilidad de visualizar o seleccionar los registros
Ventajas: fácil uso para que el usuario elija datos de un ALV simple
Desventajas: Poca personalización del ALV para otros eventos
3. POPUP_GET_VALUES
DATA: lt_fields TYPE TABLE OF sval,
lw_fields TYPE sval,
lc_return TYPE c.
CLEAR lw_fields.
lw_fields-tabname = ‘MARA’.
lw_fields-fieldname = ‘MATNR’.
*lw_fields-comp_tab = ‘MARA’.
*lw_fields-comp_field = ‘MATNR’.
lw_fields-field_attr = ’01’. " Atributo para visualización del campo en el dynpro
" ( ) grado de visibilidad normal, listo para entrada
" 01 visible, listo para entrada
" 02 grado de visibilidad normal, no listo para entrada
" 03 visible, no listo para entrada
" 04 No visualizar
lw_fields-value = ‘EV1957-00005’. " Valor por defecto
lw_fields-field_obl = ‘X’. " Obligatorio indicar un valor
lw_fields-fieldtext = ‘Material’. " Texto descriptivo izquierdo
APPEND lw_fields TO lt_fields.
CLEAR lw_fields.
lw_fields-tabname = ‘EKET’.
lw_fields-fieldname = ‘EINDT’.
*lw_fields-comp_tab = ‘EKET’.
*lw_fields-comp_field = ‘EINDT’.
lw_fields-field_attr = ’01’.
lw_fields-value = sy-datum.
lw_fields-field_obl = ‘X’.
lw_fields-fieldtext = ‘Fecha’.
APPEND lw_fields TO lt_fields.
CALL FUNCTION ‘POPUP_GET_VALUES’
EXPORTING
* no_value_check = ‘ ‘ " Desactiva verificaciones del correspondiente tipo de datos
popup_title = ‘Título (máx 60 caracteres)’
start_column = ‘5’
start_row = ‘5’
IMPORTING
returncode = lc_return
TABLES
fields = lt_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Error
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CHECK lc_return IS INITIAL.
LOOP AT lt_fields INTO lw_fields.
* Obtengo el dato ingresado
ENDLOOP.
ENDIF.
Uso: Permite mostrar una serie de campos para que el usuario ingrese datos y luego poder tomarlos
Ventajas: fácil uso para que el usuario elija datos simples
Desventajas: Es muy simple, se debe hacer referencia a una tabla
4. POPUP_TO_DISPLAY_TEXT
CALL FUNCTION ‘POPUP_TO_DISPLAY_TEXT’
EXPORTING
titel = ‘Título (máx 70 caracteres)’
textline1 = ‘Texto 1 (máx 70 caracteres)’
textline2 = ‘Texto 1 (máx 70 caracteres)’
start_column = 25
start_row = 6.
Uso: Permite mostrar un popup informativo con dos líneas de texto
Ventajas: popup simple informativo y posee parámetros para ubicarlo en la pantalla
Desventajas: muy simple
Tipos de Popup en SAP – Parte 1
Caso: Se busca mostrar los distintos tipos de POPUP para poder elegir el correcto cada vez que necesitemos uno.
1. POPUP_TO_INFORM
CALL FUNCTION ‘POPUP_TO_INFORM’
EXPORTING
titel = ‘Título (máx 35 caracteres)’
txt1 = ‘Texto 1 (máx 80 caracteres)’
txt2 = ‘Texto 2 (máx 80 caracteres)’
TXT3 = ‘Texto 3 (máx 80 caracteres)’
TXT4 = ‘Texto 4 (máx 80 caracteres)’.
Uso: múltiple
Ventajas: fácil uso para informar algo al usuario.
Desventajas: no se puede definir la posición ni el tamaño del popup, no posee botones
2. POPUP_TO_SHOW_USERINFO, POPUP_TO_DISPLAY_USERDATA
DATA: e_vtbuser TYPE vtbuser.
e_vtbuser-cruser = sy-uname. " CHAR 12 0 Autor
e_vtbuser-dcrdat = sy-datum. " DATS 8 0 Fecha entrada
e_vtbuser-tcrtim = sy-uzeit. " TIMS 6 0 Hora de entrada
e_vtbuser-upuser = sy-uname. " CHAR 12 0 Modificado por
e_vtbuser-dupdat = sy-datum. " DATS 8 0 Fecha de modificación
e_vtbuser-tuptim = sy-uzeit. " TIMS 6 0 Hora de modificación
CALL FUNCTION ‘POPUP_TO_SHOW_USERINFO’
EXPORTING
title = ‘Título (máx 10 caracteres)’
user = e_vtbuser.
Uso: para mostrar un LOG de modificaciones de registros, por ejemplo. También puede usarse, con utilización similar, POPUP_TO_DISPLAY_USERDATA
Ventajas: fácil uso para informar usuario y fecha/hora de modificación. Puede mostrarse el cuadro de Registro o el de Última modif. si se requiere (es decir sólo una de los dos)
Desventajas: no se puede definir la posición ni el tamaño del popup, no posee botones
3. POPUP_TO_CONFIRM
DATA: lv_answer TYPE c,
lt_spar TYPE TABLE OF spar.
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar = ‘Título (máx 35 caracteres)’
* diagnose_object = ‘ZPRUEBA_POPUP’ " Si lo defino aquí, el objeto de documentación aparece en el popup arriba de la pregunta
text_question = ‘Pregunta (máx 400 caracteres)’
text_button_1 = ‘Si'(001) " Texto botón 1
icon_button_1 = ‘ICON_UNLOCKED’ " Ícono botón 1
text_button_2 = ‘No'(002) " Texto botón 2
icon_button_2 = ‘ICON_FAILURE’ " Ícono botón 2
default_button = ‘1’ " Botón por defecto
display_cancel_button = ‘X’ " Mostrar botón Cancelar
userdefined_f1_help = ‘ZPRUEBA_POPUP’ " Botón Info – Documentación que debe crearse por la SE61 como texto en diálogo (tipo DT)
start_column = 25 " Columna comienzo POPUP
start_row = 6 " Fila comienzo POPUP
popup_type = ‘ICON_MESSAGE_CRITICAL’ " Nombre del ícono que aparece a la izquierda, sólo puede ser:
" ICON_MESSAGE_QUESTION (default), ICON_MESSAGE_INFORMATION, ICON_MESSAGE_WARNING
" ICON_MESSAGE_ERROR, ICON_MESSAGE_CRITICAL o NO_ICON
iv_quickinfo_button_1 = ‘Texto info botón 1 (máx.132 caracteres)’ " Quickinfo del botón 1 (cuando paso el mouse sobre el botón)
iv_quickinfo_button_2 = ‘Texto info botón 2 (máx.132 caracteres)’ " Quickinfo del botón 2
IMPORTING
answer = lv_answer " Respuesta
* TABLES
* parameter = lt_spar " The internal table contains the parameters which are to be put in the diagnosis and query text.
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Error
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
* Seleccionó algo…
CASE lv_answer.
WHEN ‘1’. " Si
MESSAGE i001(00) WITH ‘Presionó el Si’.
WHEN ‘2’. " No
MESSAGE i001(00) WITH ‘Presionó el No’.
WHEN ‘A’. " Cancelar
MESSAGE i001(00) WITH ‘Presionó el Cancelar’.
ENDCASE.
ENDIF.
Uso: para mostrar un POPUP de decisión, para que el usuario elija seguir o no el flujo de programa.
Ventajas: fácil uso, varios parámetros opcionales para hacerlo intuitivo al usuario, ubicar el popup en pantalla, etc.
Desventajas: ninguna de interés para lo que se necesita
Mostrar tabla interna en un POPUP ALV
Caso: se busca mostrar en un POPUP un ALV, para visualizar datos de una tabla interna (en mi caso, era el resultado de la ejecución de una BAPI que hace más de un asiento contable).
TYPES BEGIN OF t_asientos.
TYPES belnr TYPE belnr_d.
TYPES bukrs TYPE bukrs.
TYPES gjahr TYPE gjahr.
TYPES belnr_anul TYPE belnr_d.
TYPES bukrs_anul TYPE bukrs.
TYPES gjahr_anul TYPE gjahr.
TYPES END OF t_asientos.
DATA: gt_asientos TYPE TABLE OF t_asientos,
lt_fcat TYPE slis_t_fieldcat_alv.
PERFORM crear_catalogo_popup TABLES lt_fcat.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = sy-repid
it_fieldcat = lt_fcat
I_CALLBACK_USER_COMMAND = ‘USER_COMMAND_POPUP’
i_screen_start_column = 30
i_screen_start_line = 7
i_screen_end_column = 100
i_screen_end_line = 20
TABLES
t_outtab = gt_asientos
EXCEPTIONS
program_error = 1
OTHERS = 2.
*&———————————————————————*
*& Form CREAR_CATALOGO
*&———————————————————————*
* Crea el catálogo de campos para el ALV POPUP
*———————————————————————-*
FORM crear_catalogo_popup TABLES pt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: ls_fieldcat TYPE slis_fieldcat_alv.
REFRESH pt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = ‘BELNR’.
ls_fieldcat-tabname = ‘GT_ASIENTOS’.
ls_fieldcat-seltext_m = ‘Doc.Provisión’.
ls_fieldcat-hotspot = ‘X’.
APPEND ls_fieldcat TO pt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = ‘GJAHR’.
ls_fieldcat-tabname = ‘GT_ASIENTOS’.
ls_fieldcat-seltext_m = ‘Período’.
APPEND ls_fieldcat TO pt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = ‘BELNR_ANUL’.
ls_fieldcat-tabname = ‘GT_ASIENTOS’.
ls_fieldcat-seltext_m = ‘Doc.Anulación’.
ls_fieldcat-hotspot = ‘X’.
APPEND ls_fieldcat TO pt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = ‘GJAHR_ANUL’.
ls_fieldcat-tabname = ‘GT_ASIENTOS’.
ls_fieldcat-seltext_m = ‘Período’.
APPEND ls_fieldcat TO pt_fieldcat.
ENDFORM. «crear_catalogo_popup
*&———————————————————————*
*& Form user_command
*&———————————————————————*
* User command del popup
*———————————————————————-*
FORM user_command_popup USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lw_asientos TYPE t_asientos.
CASE rs_selfield-fieldname.
WHEN ‘BELNR’.
READ TABLE gt_asientos INTO lw_asientos WITH KEY belnr = rs_selfield-value.
SET PARAMETER ID ‘BLN’ FIELD lw_asientos-belnr.
SET PARAMETER ID ‘BUK’ FIELD lw_asientos-bukrs.
SET PARAMETER ID ‘GJR’ FIELD lw_asientos-gjahr.
CALL TRANSACTION ‘FB03’ AND SKIP FIRST SCREEN.
WHEN ‘BELNR_ANUL’.
READ TABLE gt_asientos INTO lw_asientos WITH KEY belnr_anul = rs_selfield-value.
SET PARAMETER ID ‘BLN’ FIELD lw_asientos-belnr_anul.
SET PARAMETER ID ‘BUK’ FIELD lw_asientos-bukrs_anul.
SET PARAMETER ID ‘GJR’ FIELD lw_asientos-gjahr_anul.
CALL TRANSACTION ‘FB03’ AND SKIP FIRST SCREEN.
WHEN OTHERS.
ENDCASE.
ENDFORM. «user_command
El resultado es algo así:
Debugger de Popup – Como hacer debug a un popup
Para hacer un debug a una ventana popup, hay que crearse un archivo TXT con el siguiente texto:
[FUNCTION]
Command=/H
Title=Debugger
Type=SystemCommand
Y cuando aparezca el popup arrastrar (hacer drag and drop) el archivo txt generado sobre la ventana popup y listo!