✒️ABAP Los módulos de funciones POPUP
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 la Carrera Consultor 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
Certificación Académica de Carlos Piles