✒️ABAP La pantalla de selección
ABAP La pantalla de selección
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 una pantalla de selección con bloque anidados. Espero que os sea útil.
- *&---------------------------------------------------------------------*
- *& Report Z*****_PANT_SELECCION_V1
- *&---------------------------------------------------------------------*
- *& Sustituir los ***** por el legajo de cada uno
- *&---------------------------------------------------------------------*
- REPORT z*****_pant_seleccion_v1.
- ****************************************************
- * <----- Copiar desde aqui
- ****************************************************
- CONSTANTS:
- ct_cab_esp(40) TYPE c VALUE 'Estado de cuentas entre',
- ct_cab_eng(40) TYPE c VALUE 'Account balance between',
- ct_y_esp(5) TYPE c VALUE 'y',
- ct_y_eng(5) TYPE c VALUE 'and',
- ct_debe_esp(10) TYPE c VALUE 'debe a',
- ct_debe_eng(10) TYPE c VALUE 'owes to',
- ct_cant_esp(40) TYPE c VALUE 'la cantidad de',
- ct_cant_eng(40) TYPE c VALUE 'the amount of',
- ct_dolar TYPE c VALUE '$',
- ct_euro TYPE c VALUE '€',
- ct_rate_esp(40) TYPE c VALUE 'con la cotización',
- ct_rate_eng(40) TYPE c VALUE 'with exchange rate',
- ct_date_esp(40) TYPE c VALUE 'a fecha',
- ct_date_eng(40) TYPE c VALUE 'on date'.
- DATA:
- lc_cambioeu_us TYPE p DECIMALS 5,
- lc_dolar_value TYPE p DECIMALS 2,
- lc_euro_value TYPE p DECIMALS 2,
- lc_formatofecha(10) TYPE c,
- lt_cambioeu_us(11) TYPE c,
- lt_dolar_value(11) TYPE c,
- lt_euro_value(11) TYPE c,
- lt_eur_usd_sort(22) TYPE c,
- lt_cab(120) TYPE c.
- *******************************************************
- INITIALIZATION.
- *******************************************************
- CLEAR:
- lc_cambioeu_us,
- lc_dolar_value,
- lc_euro_value ,
- lc_formatofecha,
- lt_cambioeu_us,
- lt_dolar_value,
- lt_euro_value,
- lt_eur_usd_sort,
- lt_cab.
- *******************************************************
- SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
- *******************************************************
- * Utilizamos begin of line - comment - end of line como espaciador
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT 1(66) text-006.
- SELECTION-SCREEN END OF LINE.
- * Subbloque de fecha y cotizacion
- SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
- PARAMETERS: p_fecha LIKE sy-datum OBLIGATORY DEFAULT sy-datum,
- p_rate TYPE p DECIMALS 5 DEFAULT lc_cambioeu_us OBLIGATORY .
- SELECTION-SCREEN END OF BLOCK b2.
- * Subbloque de Deudor y Acreedor
- SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
- PARAMETERS: p_deud(30) TYPE c OBLIGATORY,
- p_acree(30) TYPE c OBLIGATORY.
- SELECTION-SCREEN END OF BLOCK b3.
- * Subbloque de Monedas e Importes
- SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
- PARAMETERS: p_eu RADIOBUTTON GROUP grp2,
- p_us RADIOBUTTON GROUP grp2.
- PARAMETERS: p_euros TYPE p DECIMALS 2 ,
- p_dolar TYPE p DECIMALS 2.
- SELECTION-SCREEN END OF BLOCK b4.
- * Subbloque de Lenguajes
- SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-005.
- PARAMETERS: p_esp AS CHECKBOX DEFAULT 'x',
- p_ing AS CHECKBOX.
- SELECTION-SCREEN END OF BLOCK b5.
- *******************************************************
- SELECTION-SCREEN END OF BLOCK b1.
- *******************************************************
- *******************************************************
- START-OF-SELECTION.
- *******************************************************
- * Subrutina que formatea la fecha
- PERFORM formatear_fecha USING p_fecha '/' 1
- CHANGING lc_formatofecha.
- IF NOT p_eu IS INITIAL.
- * Si la moneda usada es el euro
- * convertir Euros -> Dolares
- lc_euro_value = p_euros.
- lc_dolar_value = lc_euro_value * p_rate.
- WRITE lc_euro_value TO lt_euro_value. " Pasa Numero a Caracter
- WRITE lc_dolar_value TO lt_dolar_value. " Pasa Numero a Caracter
- ELSE.
- * Si no, la moneda usada es el Dolar
- * convertir Dolares -> Euros
- lc_dolar_value = p_dolar.
- lc_euro_value = lc_dolar_value / p_rate.
- WRITE lc_euro_value TO lt_euro_value. " Pasa Numero a Caracter
- WRITE lc_dolar_value TO lt_dolar_value. " Pasa Numero a Caracter
- ENDIF.
- CONDENSE lt_dolar_value. " Quita los espacios sobrantes
- CONDENSE lt_euro_value. " Quita los espacios sobrantes
- CLEAR lt_eur_usd_sort.
- IF NOT p_eu IS INITIAL.
- * Si la moneda usada es Euro
- * poner primero valor € y luego valor $
- CONCATENATE lt_euro_value ct_euro
- '/' lt_dolar_value ct_dolar INTO lt_eur_usd_sort
- SEPARATED BY ' '.
- ELSE.
- * Si no, la moneda usada es Dolar
- * poner primero valor $ y luego valor €
- CONCATENATE lt_dolar_value ct_dolar
- '/' lt_euro_value ct_euro INTO lt_eur_usd_sort
- SEPARATED BY ' '.
- ENDIF.
- IF NOT p_esp IS INITIAL.
- * Si esta marcado el idioma Español
- * Componer cabecera en Español
- CLEAR lt_cab.
- CONCATENATE ct_cab_esp p_deud ct_y_esp p_acree
- ct_date_esp lc_formatofecha INTO lt_cab
- SEPARATED BY ' '.
- WRITE:/ lt_cab.
- ENDIF.
- * Si esta en dos idiomas separar la cabecera con una linea
- IF NOT p_ing IS INITIAL AND NOT p_esp IS INITIAL.
- ULINE.
- ENDIF.
- IF NOT p_ing IS INITIAL.
- * Si esta marcado el idioma Inglés
- * Componer Cabecera en Inglés
- CLEAR lt_cab.
- CONCATENATE ct_cab_eng p_deud ct_y_eng p_acree
- ct_date_eng lc_formatofecha INTO lt_cab
- SEPARATED BY ' '.
- WRITE:/ lt_cab.
- ENDIF.
- * Separador con linea en medio
- SKIP.
- ULINE.
- SKIP.
- IF NOT p_esp IS INITIAL.
- * Si esta marcado el idioma Español
- * Componer texto en IEspañol
- CLEAR lt_cab.
- CONCATENATE p_deud ct_debe_esp p_acree
- ct_cant_esp lt_eur_usd_sort INTO lt_cab
- SEPARATED BY ' '.
- WRITE:/ lt_cab.
- ENDIF.
- IF NOT p_ing IS INITIAL.
- * Si esta marcado el idioma Inglés
- * Componer texto en Inglés
- CLEAR lt_cab.
- CONCATENATE p_deud ct_debe_eng p_acree
- ct_cant_eng lt_eur_usd_sort INTO lt_cab
- SEPARATED BY ' '.
- WRITE:/ lt_cab.
- ENDIF.
- *&---------------------------------------------------------------------*
- *& Form FORMATEAR_FECHA
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * -->D_TEXT text fecha nativa (AAAAMMDD)
- * -->C_SEP text Separados a usar (.|/|-)
- * -->I_MODO int 0=AAAAMMDD 1=DDMMAAAA 2=MMDDAAAA
- * <--R_FORMATOFECHA text Fecha formateada con el separador C_SEP
- *----------------------------------------------------------------------*
- FORM formatear_fecha USING value(d_texto)
- value(c_sep)
- value(i_modo)
- CHANGING r_formatofecha.
- DATA: lc_year(4) TYPE c,
- lc_month(2) TYPE c,
- lc_day(2) TYPE c,
- lc_return(10) TYPE c.
- * Separamos Año, Mes y Dia
- WRITE d_texto(4) TO lc_year.
- WRITE d_texto+4(2) TO lc_month.
- WRITE d_texto+6(2) TO lc_day.
- CASE i_modo.
- WHEN 1. "DD MM AAAA con el separador
- CONCATENATE lc_day lc_month lc_year
- INTO lc_return
- SEPARATED BY c_sep.
- WHEN 2. "MM DD AAAA con el separador
- CONCATENATE lc_month lc_day lc_year
- INTO lc_return
- SEPARATED BY c_sep.
- WHEN OTHERS. "AAAA MM DD con el separador
- CONCATENATE lc_year lc_month lc_day
- INTO lc_return
- SEPARATED BY c_sep.
- ENDCASE.
- r_formatofecha = lc_return. "Colocamos el resultado en CHANGING
- ENDFORM. " FORMATEAR_FECHA
- ****************************************************
- * <----- Copiar hasta aqui
- ****************************************************
 
 
 
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