PARAMETROS DE SELECCION.
========================
Son para introducir algunas delimitaciones a nuestro programa de modo que nuestro reporte solo se ejecute para ciertos datos que el usuario debera introducir en la pantalla.
PANTALLA DE SELECCION: Es un area dentro de los reportes en donde se especifican los parametros de seleccion por los cuales se va a ejecutar el programa. Se usan para restringir el procesamiento y la salida de los datos.Dentro de una pantalla de seleccion se pueden declarar dos tipos de objetos:
-PARAMETERS : Los cuales el usuario puede ingresar de manera individual.
Ejemplo:
PARAMETERS: fecha LIKE sy-datum OBLIGATORY DEFAULT sy-datum,
nombre(20) TYPE c OBLIGATORY.
ACLARACION: La long. maxima que puede tener el nombre de un PARAMETER es de 8 posiciones.
PARAMETERS: lista AS CHECKBOX. "Emitir Listado
PARAMETER: arg RADIOBUTTON GROUP btn1, "Argentino
col RADIOBUTTON GROUP btn1, "Colombiano
esp RADIOBUTTON GROUP btn1, "Español
otr RADIOBUTTON GROUP btn1, "Otra Nacionalidad
-SELECT-OPTIONS : En donde el usuario podra ingresar rango de valores, aparte de valores individuales.
Ejemplo:
DATA: v_clavep TYPE land1_gp.
SELECT-OPTION s_clavep FOR v_clavep. "Clave de Pais
INFO ADICIONAL.
==============
-Tabla KNA1 : Es una tabla base de datos estandar que corresponde al maestro de clientes. Guarda informacion tal como el numero de cliente, pais, nombe, cod. postal, etc.
CUADRO.
======
Se puede encuadrar los parametros de la pantalla de seleccion haciendo:
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN END OF BLOCK b1.
donde:
b1: nombre del marco.
text-001: Es el titulo de la pantalla de seleccion creada.
CLASES DE MENSAJES.
===================
El evento AT-SELECTION-SCREEN sirve para analizar y validar los valores ingresados en la pantalla de seleccion.
Para hacer esto se debe ingresar a la transaccion se91 y crear una clase de mensajes.
Ejemplo:
Ingresamos a la transaccion se91 y creamos la clase de mensajes llamada ZABAP_PANTALLA1. Alli escribo el texto del mensaje para cada codigo de mensaje por ejemplo e000. Con el codigo de mensaje y la clase de mensaje voy a mi programa y cuando quiero llamar al mensaje por algun motivo lo llamo de la siguiente forma:
AT SELECTION-SCREEN.
IF fecha_ingresada < sy-datum.
MESSAGE e000(ZABAP_PANTALLA1). "La fecha ingresada debe ser mayo a la fecha actual
ENDIF.
TIPOS DE MENSAJES.
=================
TIPO SIGNIFICADO COMPORTAMIENTO EL MENSAJE APARECE EN
S Status El programa continua sin interrupcion La linea de status.
I informacion El programa continua despues de la Una ventana de dialogo
interrupcion.
W Warning Depende del contexto del mensaje. Barra de status
E Error Depende del contexto del mensaje(puede Barra de status
causar la cancelacion del prog.)
A Terminacion El prog. termina despues Una ventana de dialogo
de un cuadro de dialogo
X Dump Error en tiempo de ejecucion tipo X Un Dump
EJERCICO.
ZABAP_PANTALLA_ESTMO99K_1
*&---------------------------------------------------------------------*
*& Report ZABAP_PANTALLA_ESTMO99K_1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZABAP_PANTALLA_ESTMO99K_1.
SELECTION-SCREEN BEGIN OF BLOCK pantalla1 WITH FRAME TITLE Prueba1.
PARAMETERS: fecha LIKE sy-datum OBLIGATORY.
SELECTION-SCREEN END OF BLOCK pantalla1.
AT SELECTION-SCREEN.
IF fecha < sy-datum.
MESSAGE e000(ZABAP_PANTALLA1). "La fecha ...
ENDIF.
INITIALIZATION.
START-OF-SELECTION.
ULINE.
WRITE: /'Dentro del programa'.
TOP-OF-PAGE.
WRITE:/'La fecha ingresada es : ',fecha.
END-OF-SELECTION.
EJERCICIO PROPUESTO.
===================
*&---------------------------------------------------------------------*
*& Report ZABAP_VUELOS_ESTMO99K
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZABAP_VUELOS_ESTMO99K.
DATA: V_CARRID(3) TYPE c,
V_CONNID(4) TYPE c.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE Prueba2.
PARAMETERS: P_CARRID LIKE V_CARRID. "Compañia aerea
SELECT-OPTIONS: S_CONNID FOR V_CONNID. "Codigo de vuelo
SELECTION-SCREEN END OF BLOCK B1.
INITIALIZATION.
AT SELECTION-SCREEN.
IF P_CARRID IS INITIAL OR S_CONNID IS INITIAL.
MESSAGE e001(ZABAP_PANTALLA1) WITH 'Debe completar los parammetros'.
ENDIF.
START-OF-SELECTION.
WRITE : /'Compañia aerea : ',P_CARRID.
WRITE : /'Codigo de vuelo : ',S_CONNID-LOW.
TOP-OF-PAGE.
WRITE : /'Codigos de los vuelos de las compañias'.
END-OF-SELECTION.
ZABAP_PANTALLA_PROG_ESTM099K_2
*& Report ZABAP_PANTALLA_PROG_ESTMO99K_2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
"LOGIN BASICO DE UN SISTEMA
REPORT ZABAP_PANTALLA_PROG_ESTMO99K_2.
DATA:
BEGIN OF usuarios OCCURS 10,
id TYPE i,
username(10) TYPE c,
password(10) TYPE c,
END OF usuarios.
usuarios-id = 1.
usuarios-username = 'Ricardo'.
usuarios-password = '12345'.
APPEND usuarios.
usuarios-id = 2.
usuarios-username = 'Luis'.
usuarios-password = '98765'.
APPEND usuarios.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE p_login.
"SELECT-OPTIONS: usu FOR usuarios-username OBLIGATORY. "Nombre de Usuario
PARAMETERS: usu LIKE usuarios-username, "Nombre de Usuario
contra LIKE usuarios-password OBLIGATORY. "Contraseña
SELECTION-SCREEN END OF BLOCK B2.
INITIALIZATION.
AT SELECTION-SCREEN.
IF usu = ''.
MESSAGE I000(ZABAP_PROG_ESTM099K).
ENDIF.
IF contra = ''.
MESSAGE I001(ZABAP_PROG_ESTM099K).
ENDIF.
START-OF-SELECTION.
"WRITE: /'El usuario seleccionado es : ',usu.
"WRITE: /'La contraseña ingresada es : ',contra.
LOOP AT usuarios.
IF usu EQ usuarios-username AND contra EQ usuarios-password.
WRITE: /'Bienvenido : ',usu.
WRITE: /'Su id de usuario es : ',usuarios-id.
ENDIF.
ENDLOOP.
WRITE: /'FUERA DEL LOOP'.
TOP-OF-PAGE.
WRITE : /'Login'.
ULINE.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Report ZABAP_TABLA_INTERNA_ESTMO99K_1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZABAP_TABLA_INTERNA_ESTMO99K_1.
*------------------------------------------------------------*
*TIPOS DE DATOS
*------------------------------------------------------------*
TYPES:
BEGIN OF ti_estudiante, "NUEVO TIPO DE DATOS LOCAL
id(5) TYPE n,
nombre(10) TYPE c,
apellido(15) TYPE c,
END OF ti_estudiante.
DATA:
lst_estudiantes TYPE ti_estudiante.
*------------------------------------------------------------*
*DECLARACION DE DATOS
*------------------------------------------------------------*
"Referenciando un tipo de datos local
DATA:
ti TYPE TABLE OF ti_estudiante.
START-OF-SELECTION.
lst_estudiantes-id = 1.
lst_estudiantes-nombre = 'Juan'.
lst_estudiantes-apellido = 'Alvarez'.
APPEND lst_estudiantes TO ti.
lst_estudiantes-id = 2.
lst_estudiantes-nombre = 'Lucas'.
lst_estudiantes-apellido = 'Benitez'.
APPEND lst_estudiantes TO ti.
lst_estudiantes-id = 3.
lst_estudiantes-nombre = 'Maria'.
lst_estudiantes-apellido = 'Mariño'.
APPEND lst_estudiantes TO ti.
lst_estudiantes-id = 5.
lst_estudiantes-nombre = 'julia'.
lst_estudiantes-apellido = 'Benitez'.
APPEND lst_estudiantes TO ti.
"MUESTRA LOS DATOS DE LA TABLA INTERNA
WRITE:'DATOS'.
ULINE.
LOOP AT ti INTO lst_estudiantes.
WRITE: /'Datos del alumno : ',lst_estudiantes-id,lst_estudiantes-nombre,lst_estudiantes-apellido.
ENDLOOP.
ULINE.
"MODIFICO EL ID DEL PRIMER ALUMNO, INDEX=1
lst_estudiantes-id = 4.
MODIFY ti INDEX 1 FROM lst_estudiantes TRANSPORTING id.
WRITE: /'MODIFICACION DE UN CAMPO DE UN REGISTRO'.
ULINE.
LOOP AT ti INTO lst_estudiantes.
WRITE: /'Datos del alumno : ',lst_estudiantes-id,lst_estudiantes-nombre,lst_estudiantes-apellido.
ENDLOOP.
ULINE.
"MUESTRO LOS DATOS DEL ALUMNO CON APELLIDO MARIÑO
WRITE: /'MUESTRO LOS DATOS DEL ALUMNO CON APELLIDO Benitez'.
WRITE: /'OJO SOLO MUESTRA EL PRIMER REGISTRO'.
ULINE.
READ TABLE ti INTO lst_estudiantes WITH KEY apellido = 'Benitez'.
WRITE: /'Datos del alumno : ',lst_estudiantes-id,lst_estudiantes-nombre,lst_estudiantes-apellido.
ULINE.
TOP-OF-PAGE.
WRITE : /'Tablas Internas (TI)'.
ULINE.
END-OF-SELECTION.