Beruflich Dokumente
Kultur Dokumente
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.
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 ).
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.