✒️ABAP / Los módulos de funciones POPUP Por Carlos Piles Rosell
ABAP Los módulos de funciones POPUP

Como veo que existen una amplia cantidad de apuntes esquemáticos de la teoría de las lecciones, y algunos muy buenos, a mí me gustaría colaborar con lo que mejor se me da: El código fuente de Programas testados, que amplíen siempre aquellos puntos mostrados en el tema.
En esta ocasión voy a presentar un programa que analiza todas la funciones POPUP y donde consultar la respuesta del usuario. Espero que os sea útil.
CODIGO FUENTE PARA LAS FUNCIONES POPUP
- *&---------------------------------------------------------------------*
- *& Report ZGZ57B_POPUP_EXAMPLES
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT zgz57b_popup_examples.
- SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
- PARAMETERS: p_d_text RADIOBUTTON GROUP grp2,
- p_yes_no RADIOBUTTON GROUP grp2,
- p_user RADIOBUTTON GROUP grp2,
- p_values RADIOBUTTON GROUP grp2,
- p_month RADIOBUTTON GROUP grp2,
- p_list RADIOBUTTON GROUP grp2,
- p_tablei RADIOBUTTON GROUP grp2,
- p_dbtbl RADIOBUTTON GROUP grp2,
- p_loss RADIOBUTTON GROUP grp2.
- * Utilizamos begin of line - comment - end of line como espaciador
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT 1(66) text-001.
- SELECTION-SCREEN END OF LINE.
- PARAMETERS: p_quit RADIOBUTTON GROUP grp2.
- SELECTION-SCREEN END OF BLOCK b4.
- IF NOT p_d_text IS INITIAL.
- PERFORM display_text.
- ENDIF.
- IF NOT p_user IS INITIAL.
- PERFORM userinfo.
- ENDIF.
- IF NOT p_values IS INITIAL.
- PERFORM get_values.
- ENDIF.
- IF NOT p_month IS INITIAL.
- PERFORM select_month.
- ENDIF.
- IF NOT p_list IS INITIAL.
- PERFORM decide_list.
- ENDIF.
- IF NOT p_tablei IS INITIAL.
- PERFORM table_display.
- ENDIF.
- IF NOT p_dbtbl IS INITIAL.
- PERFORM db_table_display.
- ENDIF.
- IF NOT p_yes_no IS INITIAL.
- PERFORM confirm.
- ENDIF.
- IF NOT p_loss IS INITIAL.
- PERFORM confirm_data_loss.
- ENDIF.
- IF NOT p_quit IS INITIAL.
- LEAVE.
- ENDIF.
- *&---------------------------------------------------------------------*
- *& Form CONFIRM
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM confirm . " Devuelve la seleccion en IMPORTING answer
- * Declaración de variables
- DATA: v_title(150) TYPE c,
- v_text_question(150) TYPE c,
- v_answer(1) TYPE c.
- CONCATENATE 'Se han modificado los datos del cliente. '
- 'Desea grabar los cambios?'
- INTO v_text_question
- SEPARATED BY space.
- v_title = 'Modificación de datos de Clientes'.
- CALL FUNCTION 'POPUP_TO_CONFIRM'
- EXPORTING
- titlebar = v_title
- text_question = v_text_question
- IMPORTING
- answer = v_answer
- EXCEPTIONS
- text_not_found = 1
- OTHERS = 2.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ELSEIF sy-subrc EQ 0.
- IF v_answer EQ '1'. "presiono el botón SI
- MESSAGE 'Ha Pulsado el Botón [ SI ]' TYPE 'I'.
- ELSEIF v_answer EQ '2'. "presiono el botón NO
- MESSAGE 'Ha Pulsado el Botón [ NO ]' TYPE 'I'.
- ELSEIF v_answer EQ 'A'. "presiono el botón CANCELAR
- MESSAGE 'Ha Pulsado el Botón [CANCELAR]' TYPE 'I'.
- ENDIF.
- WRITE: 'El valor devuelto por la funcion esta en V_ANSWER y vale:' , v_answer.
- ENDIF.
- ENDFORM. " CONFIRM
- *&---------------------------------------]------------------------------*
- *& Form CONFIRM_DATA_LOSS
- *&---------------------------------------------------------------------*
- *& text
- *&----------------------------------------------------------------------*
- *&
- *&----------------------------------------------------------------------*
- FORM confirm_data_loss . " Devuelve la seleccion en IMPORTING answer
- * Declaración de variables
- DATA: v_title(150) TYPE c,
- v_answer(1) TYPE c.
- v_title = 'Confirmación'.
- CALL FUNCTION 'POPUP_TO_CONFIRM_DATA_LOSS'
- EXPORTING
- defaultoption = 'J'
- titel = v_title
- IMPORTING
- answer = v_answer.
- IF v_answer EQ 'J'. "presiono el botón SI
- MESSAGE 'Ha Pulsado el Botón [ SI ]' TYPE 'I'.
- ELSEIF v_answer EQ 'N'. "presiono el botón NO
- MESSAGE 'Ha Pulsado el Botón [ NO ]' TYPE 'I'.
- ELSEIF v_answer EQ 'A'. "presiono el botón CANCELAR
- MESSAGE 'Ha Pulsado el Botón [CANCELAR]' TYPE 'I'.
- ENDIF.
- WRITE: 'El valor devuelto por la funcion esta en V_ANSWER y vale:' , v_answer.
- ENDFORM. " CONFIRM_DATA_LOSS
- *&---------------------------------------------------------------------*
- *& Form DECIDE_LIST
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM decide_list .
- * Declaración de variables
- DATA: ti_spopli TYPE STANDARD TABLE OF spopli,
- wa_spopli LIKE LINE OF ti_spopli,
- v_answer(1) TYPE c,
- v_selected TYPE i.
- CLEAR v_selected.
- REFRESH ti_spopli.
- CLEAR wa_spopli.
- MOVE 'Activo' TO wa_spopli-varoption.
- MOVE 'X' TO wa_spopli-selflag.
- APPEND wa_spopli TO ti_spopli.
- CLEAR wa_spopli.
- MOVE 'Inactivo' TO wa_spopli-varoption.
- MOVE 'X' TO wa_spopli-selflag.
- APPEND wa_spopli TO ti_spopli.
- CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
- EXPORTING
- cursorline = 1
- mark_flag = ' '
- mark_max = 1
- start_col = 70
- start_row = 10
- textline1 = 'Estado del usuario'
- titel = 'Usuarios'
- IMPORTING
- answer = v_answer
- TABLES
- t_spopli = ti_spopli
- EXCEPTIONS
- not_enough_answers = 1
- too_much_answers = 2
- too_much_marks = 3
- OTHERS = 4.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ELSEIF sy-subrc EQ 0.
- IF v_answer GE '1'. "presiono la tilde verde
- MESSAGE 'Ha Pulsado la < v > (tilde) verde [Aceptar]' TYPE 'I'.
- MOVE v_answer TO v_selected.
- ELSEIF v_answer EQ 'A'. "presiono X
- MESSAGE 'Ha Pulsado la < x > (aspa) roja [Cancelar]' TYPE 'I'.
- ENDIF.
- WRITE: 'El valor devuelto por la funcion esta en V_ANSWER y vale:' , v_answer.
- IF NOT v_selected IS INITIAL.
- CLEAR wa_spopli.
- READ TABLE ti_spopli INTO wa_spopli INDEX v_selected.
- WRITE:/ 'El valor de la opcion seleccionada es :' , wa_spopli-varoption.
- ENDIF.
- ENDIF.
- ENDFORM. " DECIDE_LIST
- *&---------------------------------------------------------------------*
- *& Form SELECT_MONTH
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM select_month . " Devuelve la seleccion en IMPORTING selected_month
- * Declaración de variables
- DATA: v_sel_mon TYPE isellist-month,
- v_today LIKE sy-datum,
- v_return_code TYPE c,
- v_yyyymm LIKE isellist-month.
- CLEAR: v_yyyymm,
- v_today.
- v_today = sy-datum.
- MOVE v_today(6) TO v_yyyymm.
- CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
- EXPORTING
- actual_month = v_yyyymm
- IMPORTING
- selected_month = v_sel_mon
- EXCEPTIONS
- factory_calendar_not_found = 1
- holiday_calendar_not_found = 2
- month_not_found = 3
- OTHERS = 4.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ELSE.
- IF v_sel_mon EQ '000000'. "presiono X
- MESSAGE 'Ha Pulsado la < x > (aspa) roja [Cancelar]' TYPE 'I'.
- ELSE. "presiono la tilde verde
- MESSAGE 'Ha Pulsado la < v > (tilde) verde [Aceptar]' TYPE 'I'.
- ENDIF.
- WRITE: 'El valor devuelto por la funcion esta en V_SEL_MON y vale:' , v_sel_mon.
- ENDIF.
- ENDFORM. " SELECT_MONTH
- *&---------------------------------------------------------------------*
- *& Form TABLE_DISPLAY
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM table_display . " Devuelve la seleccion en IMPORTING choise
- * Declaración de variables
- TYPES: BEGIN OF ty_clientes,
- nombre(10) TYPE c,
- telefono(12) TYPE c,
- fnacimiento(12) TYPE c,
- END OF ty_clientes.
- DATA: ti_clientes TYPE STANDARD TABLE OF ty_clientes,
- wa_clientes LIKE LINE OF ti_clientes,
- v_selected LIKE sy-tabix.
- REFRESH ti_clientes.
- CLEAR wa_clientes.
- wa_clientes-nombre = 'Ezequiel'.
- wa_clientes-telefono = '0114556654' .
- wa_clientes-fnacimiento = '11051980'.
- APPEND wa_clientes TO ti_clientes.
- CLEAR wa_clientes.
- wa_clientes-nombre = 'Augusto'.
- wa_clientes-telefono = '0114556654' .
- wa_clientes-fnacimiento = '30101979'.
- APPEND wa_clientes TO ti_clientes.
- CLEAR wa_clientes.
- wa_clientes-nombre = 'Laura'.
- wa_clientes-telefono = '0114556654' .
- wa_clientes-fnacimiento = '18091987'.
- APPEND wa_clientes TO ti_clientes.
- CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
- EXPORTING
- endpos_col = 80
- endpos_row = 15
- startpos_col = 1
- startpos_row = 1
- titletext = 'Listado de clientes'
- IMPORTING
- choise = v_selected
- TABLES
- valuetab = ti_clientes
- EXCEPTIONS
- break_off = 1
- OTHERS = 2.
- IF sy-subrc NE 0.
- MESSAGE 'Ha Pulsado el Botón [CANCELAR]' TYPE 'I'.
- ELSE.
- MESSAGE 'Ha Pulsado el Botón [SELECCIONAR]' TYPE 'I'.
- CLEAR wa_clientes.
- READ TABLE ti_clientes INTO wa_clientes INDEX v_selected.
- WRITE: 'El valor de la posicion seleccionada esta en V_SELECTED y vale: ' , v_selected.
- WRITE:/ 'El valor del registro seleccionado es :'.
- WRITE:/ wa_clientes-nombre,
- wa_clientes-telefono,
- wa_clientes-fnacimiento.
- ENDIF.
- ENDFORM. " TABLE_DISPLAY
- *&---------------------------------------------------------------------*
- *& Form DISPLAY_TEXT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM display_text . " Solamente tiene la opcion de CONTINUAR
- * Declaración de variables
- DATA: v_title(150) TYPE c.
- v_title = 'Información importante'.
- CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
- EXPORTING
- titel = v_title
- textline1 = 'A partir del 31/11 el APY pasa a ser calculado anualmente.'
- textline2 = 'El nuevo porcentaje de interes anualizado es del 9%.'
- start_column = 25
- start_row = 6.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ENDIF.
- ENDFORM. " DISPLAY_TEXT
- *&---------------------------------------------------------------------*
- *& Form GET_VALUES
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM get_values .
- * Declaración de variables
- DATA: ti_campos TYPE STANDARD TABLE OF sval,
- wa_campos LIKE LINE OF ti_campos,
- v_return_popup(1) TYPE c.
- REFRESH ti_campos.
- CLEAR wa_campos.
- wa_campos-tabname = 'ZTABLA_USUARIOS'.
- wa_campos-fieldname = 'DNI'.
- wa_campos-fieldtext = 'DNI'.
- APPEND wa_campos TO ti_campos.
- CLEAR wa_campos.
- wa_campos-tabname = 'ZTABLA_USUARIOS'.
- wa_campos-fieldname = 'NOMBRE_APE'.
- wa_campos-fieldtext = 'Nombre y Apellido'.
- wa_campos-field_obl = 'X'.
- APPEND wa_campos TO ti_campos.
- CLEAR wa_campos.
- wa_campos-tabname = 'ZTABLA_USUARIOS'.
- wa_campos-fieldname = 'ESTADO_USU'.
- wa_campos-fieldtext = 'Estado'.
- APPEND wa_campos TO ti_campos.
- CLEAR v_return_popup.
- CALL FUNCTION 'POPUP_GET_VALUES'
- EXPORTING
- no_value_check = ' '
- popup_title = 'Ingrese los datos del usuario'
- start_column = '14'
- start_row = '10'
- IMPORTING
- returncode = v_return_popup
- TABLES
- fields = ti_campos
- EXCEPTIONS
- error_in_fields = 1
- OTHERS = 2.
- IF sy-subrc NE 0.
- MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
- WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
- ELSEIF sy-subrc EQ 0.
- IF v_return_popup EQ ' '. "presiono la tilde verde
- MESSAGE 'Ha Pulsado la < v > (tilde) verde [Aceptar]' TYPE 'I'.
- ELSEIF v_return_popup EQ 'A'. "presiono X
- MESSAGE 'Ha Pulsado la < x > (aspa) roja [Cancelar]' TYPE 'I'.
- ENDIF.
- ENDIF.
- ENDFORM. " GET_VALUES
- *&---------------------------------------------------------------------*
- *& Form USERINFO
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM userinfo . " No devuelve la opcion ( tilde o aspa) seleccionada
- * Declaración de variables
- DATA: wa_vtbuser TYPE vtbuser.
- CLEAR wa_vtbuser.
- wa_vtbuser-cruser = sy-uname. " CHAR 12 0 Autor
- wa_vtbuser-dcrdat = sy-datum. " DATS 8 0 Fecha entrada
- wa_vtbuser-tcrtim = sy-uzeit. " TIMS 6 0 Hora de entrada
- wa_vtbuser-upuser = sy-uname. " CHAR 12 0 Modificado por
- wa_vtbuser-dupdat = sy-datum. " DATS 8 0 Fecha de modificación
- wa_vtbuser-tuptim = sy-uzeit. " TIMS 6 0 Hora de modificación
- CALL FUNCTION 'POPUP_TO_SHOW_USERINFO'
- EXPORTING
- user = wa_vtbuser.
- ENDFORM. " USERINFO
- *&---------------------------------------------------------------------*
- *& Form DB_TABLE_DISPLAY
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM db_table_display .
- * Declaración de variables
- TABLES: kna1.
- TYPES: BEGIN OF ty_clientes,
- kunnr LIKE kna1-kunnr ,
- sperr LIKE kna1-sperr ,
- name1 LIKE kna1-name1 ,
- ort01 LIKE kna1-ort01 ,
- END OF ty_clientes.
- DATA: ti_clientes TYPE STANDARD TABLE OF ty_clientes,
- wa_clientes LIKE LINE OF ti_clientes,
- v_selected LIKE sy-tabix.
- REFRESH ti_clientes.
- CLEAR wa_clientes.
- SELECT kunnr sperr name1 ort01
- FROM kna1
- INTO wa_clientes
- WHERE land1 = 'ES'.
- APPEND wa_clientes TO ti_clientes.
- ENDSELECT.
- CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
- EXPORTING
- endpos_col = 85
- endpos_row = 25
- startpos_col = 1
- startpos_row = 10
- titletext = 'Listado de clientes'
- IMPORTING
- choise = v_selected
- TABLES
- valuetab = ti_clientes
- EXCEPTIONS
- break_off = 1
- OTHERS = 2.
- IF sy-subrc NE 0.
- MESSAGE 'Ha Pulsado el Botón [CANCELAR]' TYPE 'I'.
- ELSE.
- MESSAGE 'Ha Pulsado el Botón [SELECCIONAR]' TYPE 'I'.
- CLEAR wa_clientes.
- READ TABLE ti_clientes INTO wa_clientes INDEX v_selected.
- WRITE: 'El valor de la posicion seleccionada esta en V_SELECTED y vale: ' , v_selected.
- WRITE:/ 'El valor del registro seleccionado es :'.
- WRITE:/ wa_clientes-kunnr,
- ' ',
- wa_clientes-name1,
- wa_clientes-ort01.
- ENDIF.
- ENDFORM. " DB_TABLE_DISPLAY
 
 
 
Sobre el autor
Publicación académica de Carlos Piles Rosell, en su ámbito de estudios para el Curso SAP ABAP.
Carlos Piles Rosell
Profesión: Analista de Sistemas y Programador - España - Legajo: GZ57B
✒️Autor de: 24 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: PartTime
























