Está en la página 1de 5

Simplemente solicite al usuario un texto y lo imprima en pantalla

SELECTION-SCREEN BEGIN OF BLOCK PRUEBA WITH FRAME TITLE TEXT-T01. PARAMETERS: TEXTO(30) TYPE C. SELECTION-SCREEN END OF BLOCK PRUEBA.

El SELECTION-SCREEN BEGIN OF BLOCK, nos permite definir un espacio en donde van a ir los parmetros de entrada de nuestro programa. PRUEBA, es el nombre que le estamos asignando al bloque de parmetros. WITH FRAME TITLE, significa que el rea de los parmetros de seleccin va a estar rodeados por un marco y TITLE, significa que va a contar con un ttulo definido por nosotros, en este caso TEXT-T01. TEXT-T01, lo podemos separar en dos partes TEXT, que nos indica que es un texto del sistema y T01, es el nombre de dicho texto.
*=====================================================* * START-OF-SELECTION * *=====================================================* START-OF-SELECTION. WRITE: TEXTO.

El START-OF-SELECTION, nos indica que va a comenzar la ejecucin de nuestro programa, es aqu donde colocamos toda la lgica. WRITE: TEXTO, significa que vamos a escribir en la pantalla, el valor que hemos ingresado en el parmetro de entrada TEXTO.
*

PARAMETERS Son parmetros simples que aceptan solamente un valor. SELECT-OPTIONS Son parmetros compuestos que aceptan un rango de valores. Ahora, si queremos cambiar el texto que muestra nuestro parmetro, deberemos de ingresar al siguiente men. GotoText ElementsSelection Texts.

Declaracin de Variables y Tablas Internas


Para poder declarar variables, utilizamos la sentencia DATA, DATA: TEXTO TYPE C. Aqu estamos diciendo que vamos a crear una variable llamada TEXTO, y que va a ser de tipo C (Caracter). Adems, podemos especificar su tamao. DATA: TEXTO(30) TYPE C. Adicionalmente, podemos utilizar campos de tablas para poder hacer la declaracin de variables DATA: V_CARRID TYPE SPFLI-CARRID. estamos declarando una variable que va a ser exactamente igual que el campo CARRID de la tabla SPFLI. Ahora veamos las tablas internas Las tablas internas, son tablas temporales que existen solamente en el mbito del programa que las cre y permiten almacenar informacin para luego poder manipularla sin tener que acceder mltiples veces a la base de datos. TYPES: BEGIN OF TY_TABLA, END OF TY_TABLA. debemos crear un TYPE, es decir, un tipo de tabla interna y luego, utilizando el DATA, creamos una tabla interna que haga referencia a nuestro tipo de tabla. DATA: T_TABLA TYPE STANDARD TABLE OF TY_TABLA. Adems de crear tablas internas, de la manera que hemos visto, podemos tambin incluir estructuras completas de Base de Datos. Esto podemos hacerlo de dos maneras, dependiendo de si queremos o no incluir campos adicionales. 1) DATA: T_SPFLI TYPE STANDARD TABLE OF SPFLI. TYPES: BEGIN OF TY_SPFLI. INCLUDE STRUCTURE SPFLI. TYPES: TEST TYPE STRING. TYPES: END OF TY_SPFLI. DATA: T_SPFLI TYPE STANDARD TABLE OF TY_SPFLI.

2) Claro, si queremos crear una tabla interna que tenga datos propios, lo hacemos de la siguiente forma. TYPES: BEGIN OF TY_TEST, NOMBRE(30) TYPE C, EDAD TYPE I, END OF TY_TEST. DATA: TEST TYPE STANDARD TABLE OF TY_TEST. .-.-

Seleccin de Datos
TYPES: BEGIN OF TY_TEST, ID(3) TYPE C, NOMBRE TYPE STRING, EDAD TYPE I, END OF TY_TEST. DATA: TEST TYPE STANDARD TABLE OF TY_TEST. DATA: TEST_H TYPE HASHED TABLE OF TY_TEST WITH UNIQUE KEY ID. DATA: TEST_S TYPE SORTED TABLE OF TY_TEST WITH UNIQUE KEY ID.

Declaramos una variable llamada NOMBRE del tipo del campo NOM_PROG de la tabla ZPROGRAMAS. Hacemos un SELECT SINGLE para obtener un registro cuyo campo ID_PROG sea igual a 001. En Tablas internas:
TYPES: BEGIN OF TY_PROGRAMAS, NOM_PROG TYPE ZPROGRAMAS-NOM_PROG, END OF TY_PROGRAMAS. DATA: T_PROGRAMAS TYPE STANDARD TABLE OF TY_PROGRAMAS. SELECT NOM_PROG INTO TABLE T_PROGRAMAS FROM ZPROGRAMAS.

En esta caso, creamos un TYPE, luego una tabla interna y finalmente leemos todas las instancias del campo NOM_PROG dentro de nuestra tabla interna.

INNER JOINS
NOMBRE TYPE ZLENGUAJES_PROG-NOMBRE, ENTORNO TYPE ZLENGUAJES_PROG-ENTORNO, NOM_PROG TYPE ZPROGRAMAS-NOM_PROG, END OF TY_PROGRAMAS. DATA: T_PROGRAMAS TYPE STANDARD TABLE OF TY_PROGRAMAS. SELECT NOMBRE ENTORNO NOM_PROG INTO TABLE T_PROGRAMAS FROM ( ZLENGUAJES_PROG INNER JOIN ZPROGRAMAS ON ZLENGUAJES_PROG~ID = ZPROGRAMAS~ID ).

Ahora, supongamos que tenemos un campo ms en nuestra tabla interna, pero no queremos seleccionarlo, entonces, el SELECT va a estar incompleto y los registros pueden guardarse donde no les corresponde. Esto lo podemos solucionar utilizando un INTO CORRESPONDING FIELDS, que lo que hace es almacenar los registros en los campos correspondientes, aunque claro, esto afecta el performance de nuestros programas, as que lo mejor es evitarlos. 85
DATA: T_PROGRAMAS TYPE STANDARD TABLE OF TY_PROGRAMAS. SELECT NOMBRE ENTORNO NOM_PROG INTO TABLE T_PROGRAMAS FROM ( ZLENGUAJES_PROG INNER JOIN ZPROGRAMAS ON ZLENGUAJES_PROG~ID = ZPROGRAMAS~ID ).

Ahora, supongamos que tenemos un campo ms en nuestra tabla interna, pero no queremos seleccionarlo, entonces, el SELECT va a estar incompleto y los registros pueden guardarse donde no les corresponde. Esto lo podemos solucionar utilizando un INTO CORRESPONDING FIELDS, que lo que hace es almacenar los registros en los campos correspondientes, aunque claro, esto afecta el performance de nuestros programas, as que lo mejor es evitarlos.
TYPES: BEGIN OF TY_PROGRAMAS, NOMBRE TYPE ZLENGUAJES_PROG-NOMBRE, ENTORNO TYPE ZLENGUAJES_PROG-ENTORNO, CONEX_SAP TYPE ZLENGUAJES_PROG-CONEX_SAP, NOM_PROG TYPE ZPROGRAMAS-NOM_PROG, END OF TY_PROGRAMAS. DATA: T_PROGRAMAS TYPE STANDARD TABLE OF TY_PROGRAMAS. SELECT NOMBRE ENTORNO NOM_PROG INTO CORRESPONDING FIELDS OF TABLE T_PROGRAMAS FROM ( ZLENGUAJES_PROG INNER JOIN ZPROGRAMAS ON ZLENGUAJES_PROG~ID = ZPROGRAMAS~ID ).

Lectura de datos de Tablas Internas


Para eso, contamos con dos opciones. Estamos hablando de los Field-Symbols. Para los que han programado alguna vez en C++, los Fields-Symbols, son muy parecidos a los punteros, es decir, almacenas la direccin en memoria de una variable. Por lo general, los utilizamos para crear cabeceras de tablas internas. FIELD-SYMBOLS: <FS_TABLA> LIKE LINE OF T_TABLA.

Con esto, creamos una referencia a la tabla T_TABLA, la cual contiene nicamente una lnea de cabecera, con lo cual ganamos mucho performance al hacer lecturas de tablas internas. LOOP AT
TYPES: BEGIN OF TY_PROGRAMAS, NOMBRE TYPE ZLENGUAJES_PROG-NOMBRE, ENTORNO TYPE ZLENGUAJES_PROG-ENTORNO, NOM_PROG TYPE ZPROGRAMAS-NOM_PROG, END OF TY_PROGRAMAS. DATA: T_PROGRAMAS TYPE STANDARD TABLE OF TY_PROGRAMAS. FIELD-SYMBOLS: <FS_PROGRAMAS> LIKE LINE OF T_PROGRAMAS. SELECT NOMBRE ENTORNO NOM_PROG INTO TABLE T_PROGRAMAS FROM ( ZLENGUAJES_PROG INNER JOIN ZPROGRAMAS ON ZLENGUAJES_PROG~ID = ZPROGRAMAS~ID ). LOOP AT T_PROGRAMAS ASSIGNING <FS_PROGRAMAS>. WRITE:/ <FS_PROGRAMAS>-NOM_PROG. ENDLOOP.

lo que hacemos es leer cada uno de los registros almacenados en nuestra tabla interna, y al asignar cada uno de estos registros a nuestro Field-Symbol, lo que estamos haciendo es pasar simplemente la cabecera de ese registro, por lo cual la lectura de la tablas es mucho ms veloz. Finalmente, utilizando un WRITE imprimimos el contenido del campo NOM_PROG. El smbolo / nos sirve para dejar un espacio hacia abajo luego de haber impreso el valor (Equivales a hacer un ENTER). READ TABLE
TYPES: BEGIN OF TY_PROGRAMAS, NOMBRE TYPE ZLENGUAJES_PROG-NOMBRE, ENTORNO TYPE ZLENGUAJES_PROG-ENTORNO, NOM_PROG TYPE ZPROGRAMAS-NOM_PROG, END OF TY_PROGRAMAS. DATA: T_PROGRAMAS TYPE STANDARD TABLE OF TY_PROGRAMAS. FIELD-SYMBOLS: <FS_PROGRAMAS> LIKE LINE OF T_PROGRAMAS. SELECT NOMBRE ENTORNO NOM_PROG INTO TABLE T_PROGRAMAS FROM ( ZLENGUAJES_PROG INNER JOIN ZPROGRAMAS ON ZLENGUAJES_PROG~ID = ZPROGRAMAS~ID ). READ TABLE T_PROGRAMAS INDEX 1 ASSIGNING <FS_PROGRAMAS>. WRITE:/ <FS_PROGRAMAS>-NOM_PROG. READ TABLE T_PROGRAMAS WITH KEY NOMBRE = 'PHP' ASSIGNING <FS_PROGRAMAS>. WRITE:/ <FS_PROGRAMAS>-NOM_PROG.

al utilizar un READ TABLE, leemos un solo registro de nuestra tabla, como podemos ver, podemos utilizar un Indice o tambin un Campo para leer el contenido y asignarlo a nuestro Field-Symbol.