You are on page 1of 230

CURSO ABAP BASICO

www.bizpartner.biz

Introduccin

1.1 El sistema SAP R/3


SAP es un sistema ERP (Enterprise Resource Planning). SAP es un sistema de informacin que gestiona de manera integrada, "on -line", todas las reas funcionales de la empresa. El Sistema SAP se basa en el concepto de combinar todas las actividades de negocio y los procesos tcnicos de una empresa en una solucin informt ica simple, integrada, robusta y fiable. El sistema SAP R/ 3 tiene un conjunto de normas estndares en el rea de software de negocios. El sistema SAP R/3 ofrece soluciones estndares para las necesidades enteras de informacin de una co mpaa. El sistema SAP R/3 consiste en funciones integradas en las siguientes reas:

Fig. 1.01

El sistema R/3 opera utilizando el principio cliente / servidor aplicado a varios niveles. Es altamente modular y se aplica fundamentalmente por medio del software, de forma que los modos de iteracin entre los diversos clientes y servidores puedan ser controlados. R/3 = Real Time (Tiempo Real) / 3 capas.

Lima-Per

Pg ina 1 de 230

CURSO ABAP BASICO


www.bizpartner.biz

(Presentacin, Aplicacin, Base de Datos).


Presentacin (SAP GUI) 1 . . .x

TCP/IP

Aplicacin (SAP) 1 . . .x

Sistema SAP

TCP/IP Base de datos 1

Fig. 1.02

Panoram a de un Sistema SAP

DEV

QAS

PR D

RPT

Fig. 1.03

1.2 ABAP/4
Advanced Business Aplication Programming 4th Generat ion ABAP/4 es un lenguaje de programacin de 4a. Generacin (4GL) orientado a cliente servidor tal co mo su definicin especifica, al desarrollo de ap licaciones de negocios. Todos los mdulos disponibles en SAP han sido programados en este lenguaje de programacin. Adems podemos escribir nuevas aplicaciones en ABAP/4 como comp lemento a las ya existentes o como apoyo a la configuracin del sistema. 1.2.1 Caractersticas El sistema R/3 t iene una arquitectura de software modular que permite trabajar con todas las caractersticas de un software orientado a cliente servidor.

Lima-Per

Pg ina 2 de 230

CURSO ABAP BASICO


www.bizpartner.biz

El sistema R/ 3 permite presentaciones, aplicaciones y almacenamiento de datos para diferentes computadoras. Esta es la base que permite la escalabilidad de el sistema R/3 El n ivel mas bajo es el n ivel de base de datos. Los datos son manejados con la ayuda de un sistema de administracin de base de datos relacionales (RDBM S). Adems de los datos maestros y datos de transaccin, programas y los meta datos que describe el Sistema R/3 son almacenados y administrados aqu. Los programas ABAP corren en el n ivel de aplicacin, las aplicaciones proporcionadas por SAP y las creadas. Los programas ABAP trabajan con los datos llamados desde la base de datos y los nuevos datos almacenados.

El tercer nivel es el n ivel de presentacin (SAPGUI). Este nivel contiene la interfase del usuario que permite el acceso del usuario a la aplicacin, ingresando nuevos datos y recibiendo el resultado de un proceso determinado. La distribucin tcnica del software es independiente de la ubicacin fsica del hardware. Las aplicaciones y los niveles de presentacin de los componentes pueden ser divididos entre cualquier nmero de co mponentes. La distribucin horizontal de co mponentes de base de datos, sin embargo depende del tipo de base de datos instalado.

1.3 Acceso a SAP


Todo comien za con el Logon, un pequeo selector de mqu inas donde vamos a poder trabajar. En la figura 1.04 vemos que nuestro logon est preparado para trabajar en distintas mquinas de diferentes localidades, as mismo cada mquina est preparada para una tarea especfica. As pues, podemos tener tres tipos de mquinas (que son las que recomienda SAP): DEV: Mquina de desarrollo donde se hacen las pruebas y los programas QAS: Mquina de control de calidad donde se da el visto bueno a las pruebas. PROD: Mquina de produccin, all donde trabaja el cliente.

Fig. 1.04

Lima-Per

Pg ina 3 de 230

CURSO ABAP BASICO


www.bizpartner.biz

En este programa, podemos acceder a las mquinas mediante el Logon o cambiar sus propiedades tcnicas, as como crear o borrar entradas. A partir de aqu y pulsando sobre el Logon accederemos a SAP. En la pantalla de la figura 1.02 podemos ver como es exactamente la primera pantalla de SAP. El acceso a SAP est compuesto por cuatro campos claves de entrada: 1. Mandate (Client) Identifica claramente con que tipo de informacin vamos a trabajar. 2. Usuario (User) El usuario con el cul vamos a acceder 3. Clave (Password) Palabra Clave relacionada con el usuario 4. Idi oma (Language) Con que idio ma queremos acceder a SAP

Fig. 1.05 Con los datos correctos accedemos a SAP. Para este curso trabajamos con el SAP System Data WebAS 6.20. La p rimera pantalla que nos aparece se muestra en la Figura 1.06, en ella podemos apreciar: 1. 2. 3. 4. 5. 6. 7. Barra de men. Herramientas estndar. Barra de Titulo. Herramientas de la aplicacin. Barra de estado. Lnea de co mandos. Area de navegacion.

Lima-Per

Pg ina 4 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Fig. 1.06

1.4 ABAP WORKBENCH (S001)


El entorno de desarrollo para A BAP y sus componentes de programacin estn contenidos en el ABAP Workbench. En la figura 1.04 se pueden distinguir algunas herramientas del entorno de desarrollo de ABAP co mo Dict ionary, Ed itor, Function Buider, etc. Ot ra forma de llegar a ellas es utilizando los cdigos de transacciones, SE11, SE38, etc.

Fig. 1.07

Lima-Per

Pg ina 5 de 230

CURSO ABAP BASICO


www.bizpartner.biz

1.4.1 Modo de trabajo


Un modo de trabajo es una ventana de SAP abierta. Solamente pueden abrirse 6 modos por cada Logon que se realice. Cada modo tiene su propia memoria de trabajo pero comparte una nica zona de memoria por Logon, cada Logon es independiente entre si. Esto es importante saberlo sobre todo cuando se quiera utilizar las memorias intermedias de los programas.

1.4.2 Transaccin
Las Transacciones son mtodos abreviados de llamar a los programas o en el caso de los Modul Pool, son la nica forma de llamarlos. Adems estas se utilizan para hacer de intermediario entre los mens y los programas. Pueden ser introducidas directamente en la lnea de co mandos /n o /o siempre que se quiera ejecutar en el mis mo modo o en otro modo. P.ej. /nse38 llama a la transaccin se38 (editor ABAP) dentro del mismo modo.

1.4.3 Principales herramie ntas de ABAP WORKBENCH


Browser (S E80) Con este sencillo navegador vamos a poder trabajar con todos y cada uno de los diferentes objetos que posee SAP: tablas, vistas, listados, informes, trasacciones... Dictionary (S E11) El d iccionario es la herramienta bsica para tener acceso a la construccin de tablas y estructuras de datos. Editor AB AP (S E38 ) Este nos es el editor de cdigo fuente de cada uno de los programas de SAP. Recuerde que todas las funcionalidades de SAP esta desarrollado en ABA P. Funciones (S E37) Las funciones son herramientas que normalmente son independientes del entorno en el cual estamos desarrollando, podran ser co mo las API de Windows, p.ej. conversiones de monedas, rutinas de validacin de NIFs. Screen Painter (S E51) Cuando necesitemos crear pantallas suficientemente co mplejas para poder interactuar con el usuario, vamos a necesitar de esta herramienta. Men Painter (S E41) El Men Painter es la nica herramienta que nos permite disear el entorno de trabajo de la parte superior de las ventanas, es decir, mens, pf-status y botones directos. Adems, dentro de los diferentes mens vamos a poder encontrar otro tipo de herramientas que nos permit irn trabajar mejor con nuestros programas, por ejemp lo: d iccionario de mensajes, BD Lgicas, transacciones, mens de mbitos, anlisis de tiempo, etc.

Lima-Per

Pg ina 6 de 230

CURSO ABAP BASICO


www.bizpartner.biz

1.4.4 El editor de ABAP


El Ed itor ABAP es la herramienta que va a usar para escribir los programas, clases, funciones mdulos, flu jo lgico de pantallas, etc. Recordemos que ABAP es un leguaje interpretado. El editor de A BAP nos permite visualizar el cdigo fuente, crear nuestros propios programas y editar algunos programas existentes. En la figura 2.01 se muestra la pantalla de entrada del Editor de A BAP, a partir de aqu se llama al programa con que deseamos trabajar. Puntos de mens ms interesantes: Verificar Acti var Ejecutar Referencia de utilizacin Anlisis de entorno Manual online Borrar Copi ar Renombrar Debugging Ejecutar con variante Vari antes

Fig. 1.08

El campo de nombre de programa admite el carcter asterisco (*) para bsqueda, se activa con la tecla de funcin F4. En SAP solo se permite no mbres de programas de usuario que inicien con las letra Y y Z.

Lima-Per

Pg ina 7 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Sub objetos:
1. 2.

Cdig o Fuente. Vari ante. Cuando en un programa queremos que se introduzcan valores predeterminados y no nuevos del usuario, se utilizarn variantes. Las variantes tendrn los valores que se pueden introducir. Atri butos. Informacin referente al p rograma; Titu lo, Tipo, Status, etc. Documentaci n. Se refiere al texto que se muestra como informacin o ayuda. Elementos de texto. Son textos que podemos incluir en el programa de una forma abreviada.

3. 4. 5.

Puntos del men 1. Objeto Siguiente/Anterior 2. Visualizar/Modificar 3. Activo / Inactivo 4. Otro objeto 5. Verificar 6. Activar 7. Verifica-Ejecuta 8. Referencia de utilizacin 9. Visualizar lista de objetos 10. Visualizar ventana de navegacin 11. Imagen comp leta on/off 12. Ayuda para 13. Fijar/borrar breakpoint 14. Patron 15. Pretty Printer

Fig. 1.09

Lima-Per

Pg ina 8 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Verificar. Adems de poder verificar de una forma rp ida, podemos hacer que nuestro editor se a capaz de encontrar variables que no se utilizan, cadenas fijas, break-points, etc. Esta forma es muy til para cuando queramos eliminar los Warnings de compilacin. Acti var Activa el programa. Es la versin activa del programa la que utiliza el sistema. Verifica-Ejecuta Ejecuta el cdigo actual para verificar su funcionamiento. Referencia de utilizacin Se usa para saber desde donde se llama o desde donde se utiliza lo que estamos apuntando (texto seleccionado). Visualizar ventana de navegacin La pila no es ms que un sitio de almacenamiento para nuestra navegacin, es decir, cuando hacemos doble-click en un perform y nos lleva a la lnea donde est descrito la situacin donde estbamos antes queda almacenada en la p ila. Po r lo tanto estamos hablando de una pila LIFO (Last In First Out). Ayuda para Muestra documento de ayuda para la sentencia que estamos apuntando (texto seleccionado). Fijar/ borrar break point Fija un punto de parada al mo mento de ejecutar el cdigo. Solo se utiliza si la versin esta activa. Patrn Nos permiten insertar cdigo fuente de una forma genrica pero adaptada a nuestras necesidades. Por ejemplo, si queremos incluir una funcin a nuestro programa utilizaremos el patrn para que sea el p ropio editor quin nos incluya la mascara de la mis ma. Este patrn se pueden modificar e incluso crear de nuevos. Pretty-Printer Una vez que nuestro programa est terminado, utilizaremos esta opcin para que nos lo deje ms "bonito" en su estructura. Esta opcin nos identar las sentencias y nos pondr comentarios en los procedimientos para poder documentarlos. Veamos los botones del rea de edicin: 1. 2. 3. 4. Cortar/ Copiar/Pegar Deshacer/Rehacer Buscar/continuar busqueda Up/Down Load

Finalmente una herramienta til es. Ctrl. + < / Ctrl. + > Co mentar / Des comentar prrafo seleccionado.

Lima-Per

Pg ina 9 de 230

CURSO ABAP BASICO


www.bizpartner.biz

1.5 Creacin de un programa ABAP


Al mo mento de crear un nuevo programa en ABAP lo primero que debemos hacer es ingresar un nombre de programa. Co mo ya se menciono en SAP solo se permite nombres de programas de usua rio que inicien con las letra Y y Z. Una vez que hemos ingresado un nombre valido y dado clic en crear programa, el SAP nos lleva a la ventana de atributos del programa para ingresar algunos datos bsicos.

Fig. 1.10

Hay que ingresar obligatoriamente: 1. 2. Titul o Ti po

Por ahora debe bastar con decir que vamos a crear un programa ejecutable. As que con estos datos le damos Grabar.

Fig. 1.11

Lima-Per

Pg ina 10 de 230

CURSO ABAP BASICO


www.bizpartner.biz

A continuacin nos lleva a la ventana para crear una entrada en el catalogo de objetos. Aqu el dato ms importante es la Clase de desarrollo. Por el mo mento tambin debe bastar con decir que si grabamos como objeto local no nos pedir ms datos. Un objeto local solo podr utilizarse en el mbito de desarrollo, para poder pasarlo a control de calidad o produccin es posible luego modificar este punto.

Fig. 1.11

Hecho esto ingresamos al Ed itor ABAP en un programa nuevo. Por defecto aparece la lnea de programa REPORT. La sentencia mas elemental es la de escritura WRITE. Ingresando la sentencia WRITE debe q uedar as: REPORT ZB C_ EJ ERCICIO1. WRITE ' HOLA MUNDO' .

Operaciones aritmticas y expresiones

2.1 Tipos

TIPOS DE DATOS

Carcter (C)

Lima-Per

Pg ina 11 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Numeric carcter (N) Carcter Date (D). Temporal Time (T).

Simples
Hexadecimal Byte field (X). Integer (I). Floating-point number (F). Packed number (P).

Numrico

Estucturas

Complejos
Tablas internas

TIPOS PREDEFINIDOS (Longitud variable)


Carcter STRING

Hexadecimal

XSTRING

2.1.1 Definicin de ti pos Se pueden definir de tres formas: Tipos predefinidos Tipo de datos locales. Tipo de datos de diccionario

Lima-Per

Pg ina 12 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ti pos predefini dos

CARACTERISTICAS DE LOS TIPOS CARCTER


CARACTER ( C )
1 2 3 Valor in icial: Longitud de campo inicial: 1 byte. Longitud de campo valido: 1 65535 bytes

CARCTER NUMERICO ( N )
1 2 3 4 Valor in icial: 0 0 Longitud de campo inicial: 1 byte Longitud de campo valido: 1 65535 bytes Solo puede contener caracteres numricos (0 .. 9), pero internamente no son representados como nmeros.

DATE ( D )
1 2 3 4 Valor inicial: '00000000' Longitud de campo inicial: 8 bytes. Longitud de campo valido: 8 bytes Formato: YYYYMMDD

TIME ( T )
1 2 3 4 Valor inicial: '000000' Longitud de campo inicial: 6 bytes. Longitud de campo valido: 6 bytes Formato: HHMMSS

CARACTERISTICAS DE LOS TIPOS NUMERICOS


NUMERO ENTERO ( I )
1 2 3 4 5 Valor in icial: 0 Longitud de campo inicial: 4 bytes Longitud de campo valido: 4 bytes Valor in icial: 0. Los valores se encuentran en el rango: -2**31 a 2**31-1 Los valores resultantes de operaciones arit mticas (ej. Fracciones) son redondeados, no truncados.

NUMERO PUNTO FLOTANTE ( F )


1 2 Valor in icial: 0 Longitud de campo inicial: 8 bytes

Lima-Per

Pg ina 13 de 230

CURSO ABAP BASICO


www.bizpartner.biz

3 4 5 6 7

Longitud de campo valido: 8 bytes Los valores se encuentran en el rango: 1x10**-307 a 1x10**308 La exactitud apro ximada es de 15 decimales (depende del floating point arit methic del hardware). Para efectos de aproximacin con decimales es mejo r utilizar el tipo de dato P. Puede utilizar P cuando necesita cubrir rangos muy amp lios y no se requiere precisin en el redondeo.

NUMERO EMPAQUETADO ( P )
1 2 3 4 5 Valor in icial: 0 Longitud de campo inicial: 8 bytes Longitud de campo valido: 1-16 bytes Permite trabajar con decimales. Es necesario tener el atributo del programa co mo Fixed point arith metic, de lo contrario ser tratado como entero.

LONGITUD VARIABLE: STRING


1 2 3 4 Es una secuencia de caracteres de longitud variable. Puede contener cualquier carcter alfanumrico. Valor in icial: cadena vaca de longitud cero. Cuando se crea una cadena, solo una cabecera de cadena es creada.

Ti pos de datos locales Los programas pueden definir sus propios tipos de datos. Se puede declarar t ipos de datos locales refirindose a un tipo de datos existentes o construyendo un nuevo tipo. Se puede definir datos de tipos locales usando:

TYPES <t> ... [TYPE <type>|LIKE <obj>] ...


Se utiliza TYPE para referirse a un tipo de datos predefinido, a un tipo local o a un tipo que se encuentra en el diccionario A BAP. Para ser compatibles con versiones anteriores se utiliza LIKE para referirse a tablas de base de datos y a estructuras flat en el diccionario A BAP. Sin embargo es posible utilizar TYPE en las nuevas versiones.

Ejempl o X.1 Uso de TYPE. TYPES: edad TYPE i, estatura TYPE p DECIMALS 2, codigo(3) TYPE c. Se define el t ipo de dato edad, que es del tipo predefinido I.

Lima-Per

Pg ina 14 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Se define el t ipo de dato estatura, que es del tipo predefin ido P con dos decimales. Se define el t ipo de dato codigo, que es del tipo predefin ido C con una longitud de 3.

Ejempl o X.2 Uso de TYPE. DATA contador TYPE I. TYPES: compannia TYPE spfli-carrid, no_vuelos LIKE contador. Se define el tipo de datos no_vuelos enlazado al tipo de datos contador que es de tipoI. Por consiguiente no_vuelos es de tipo I. Se define el tipo de datos compannia igual al tipo de datos de spfli -carrid (que es un campo de la tabla spfli).

Los tipos locales de datos complejos estan referenciados a tipos de datos existentes. Para construir un nuevo tipo de estructura compleja, tenemos este modelo: TYPES: BEGIN OF <estructura>, .............. <ti> ..., .............. END OF <estructura>.

Ejempl o X.2 Estructuras complejas. TYPES: valor_spfli TYPE spfli, nombre_cliente(20) TYPE c, BEGIN OF direccion, nombre TYPE nombre_cliente, calle(30) TYPE c, ciudad TYPE valor_spfli-cityfrom, END OF direccion, pueblo TYPE direccion-ciudad.

Se define el t ipo valor_spfli del mis mo tipo que spfli (que es una tabla Standard). Se define el t ipo nombre_cliente de tipo C de ancho 20. Se define la estructura direccion, con cuatro componentes: direccion, no mbre, calle y ciudad. Donde nombre es del tipo nombre_cliente (que ha sido declarado previamente), Calle es de tipo C con ancho de 30 y ciudad es del mismo t ipo del campo cityfro m de la tabla spfli (referenciado por el tipo valor_spfli).

Lima-Per

Pg ina 15 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o X.2 Estructuras complejas. TYPES: BEGIN OF estructura1, col1 TYPE i, BEGIN OF estructura2, col1 TYPE i, col2 TYPE i, END OF estructura2, END OF estructura1. TYPES mi_tipo TYPE estructura1-estructura2-col2.

Ejempl o X.2 Estructuras complejas. TYPES: nombre_cliente(20) TYPE c, calle(30) TYPE c, zip_code(10) TYPE n, ciudad(30) TYPE c, telefono(20) TYPE n, fecha LIKE sy-datum. TYPES: BEGIN of direccion, nombre TYPE nombre_cliente, codigo TYPE zip_code, pueblo TYPE ciudad, la_calle TYPE calle, END OF direccion. TYPES: BEGIN of listin, dire TYPE direccion, tel TYPE telefono, END OF listin.

Declaracin de datos
La sentencia DATA permite realizar la declaracin de datos. DATA <campo> [ (<longitud>)] <ti po> [ <val or> ] [ <deci males> ] Variante utilizada para declarar variables. El no mbre de la variable <campo> no debe tener ms de 30 caracteres. Se puede utilizar cualquier carcter a excepcin de: "+", ".", ",", ":", "(" y ")". Adems el no mbre no puede estar slo compuesto de dgitos numricos, ni coincidir con los objetos de datos predefinidos, ni con las palabras reservadas. Veamos algunas recomendaciones: Utilizar no mbres significat ivos, que no requieran el uso de comentarios. No utilizar el "guin" ya que podramos confundir la variab le con un field-string. Utilizar el "gui bajo" para nombres especiales.

Lima-Per

Pg ina 16 de 230

CURSO ABAP BASICO


www.bizpartner.biz

No utilizar los caracteres especiales. Utilizar siempre una letra co mo primer carcter del no mbre. Con la opcin <tipo> se especifica el t ipo de variable. Con la opcin <decimales> se puede especificar el n mero de decimales para los campos de tipo P. El formato es el siguiente: DECIMA LS <nu m>, siendo <num> el n mero de dgitos despus del punto decimal. El n mero mximo de decimales es de 14.

2.1.2 Tipos de operadores


Co mo cualquier lenguaje de programacin ABAP tiene la capacidad de realizar a los datos los clculos ms co mplejos med iante un conjunto de operadores y un grupo de reglas bsicas. Operadores ari tmticos OPERADOR + * / DIV MOV ** OPERADOR 1 ADD SUBSTRA CT MULTIPLY DIVIDE Adicin Sustraccin Multiplicacin Div isin Div isin entera Residuo de divisin entera Potenciacin OPERACION

Se utilizan de la siguiente manera: OPERACIN Adicin Sustraccin Multiplicacin Div isin Div isin entera Residuo de divisin Potenciacin SENTENCIA <c> = <a> + <b> <c> = <a> - <b> <c> = <a> * <b> <c> = <a> / <b> <c> = <a> DIV <b> <c> = <a> M OD <b > <c> = <a> ** <b> SENTENCIA ADD <a> TO <b> SUBSTRA CT <a> FROM <b > MULTIPLY <a> BY <b > DIVIDE <a> BY <b>

Funciona para cualquier formato de tipo nu mrico.

Lima-Per

Pg ina 17 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Si los operandos no son del mismo t ipo, el sistema convierte el resultado al t ipo de dato ms alto en el nivel jerrquico. Para asignar el resultado de una calculo matemtico, se utiliza la sentencia COMPUTE o el operador de asignacin (=). COMPUTE <N> = <expresin> El uso de COMPUTE es opcional.

Operadores relacionales OPERADOR = <> < <= > >= OPERADOR 1 EQ NE LT LE GT GE >< OPERADOR 2 Igual a Diferente Menor que Menor o igual que Mayor que Mayor o igual que OPERACION

Permite co mparar dos objetos con diferentes tipos de datos. Ambos operandos deben ser compatibles o convertibles.

Tipos lgicos
OPERADOR AND OR NOT OPERACION Y O NEGA CION

Permite co mbinar varias expresiones lgicas en una expresin simp le.

2.1.3 Funciones mate mticas


Las funciones siguientes solamente se aplican para los tipos predefinidos F, I, y P:

FUNCION ABS

RES ULTADO VA LOR A BSOLUTO

Lima-Per

Pg ina 18 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SIGN CEIL FLOOR TRUNC FRA C

SIGNO VA LOR ENTERO M INIMO VA LOR ENTERO MAXIMO ENTERO FRA CCION

Las funciones siguientes solamente se aplican para los tipos float F.

FUNCION ACOS, ASIN, ATAN, COS, SIN, TAN COSH, SINH, TA BH EXP LOG LOG10 SQRT

RES ULTADO FUNCIONES TRIGONOM ETRICAS FUNCIONES HIPERBOLICAS EXPNOENCIAL CON BASE e VA LOR ENTERO MAXIMO LOGA RITMO CON BASE 10 RAIZ CUADRADA

2.1.4 Ope raciones de salida/entrada simples


Para salida de datos: WRITE. Para entrada de datos: PARAMETERS. Existen otras sentencias que permiten el ingreso y salida de datos.

Write
Saca datos por pantalla.

WRITE [ AT ][ / ][ <posicin> ] [ <longitud> ] <campo> [ <opciones> ].

Esta sentencia saca el campo <campo> en su formato estndar por la salida act iva. La salida activa por defecto es la pantalla. El campo <campo> puede ser cu alquier objeto de dato, field -symbol o parmet ro formal, o texto simb lico. En la pantalla normalmente los campos de salida estn justificados a la izquierda. Utilizando varias sentencias WRITE los campos de salida aparecen uno detrs de otro separados po r un espacio en blanco.

Lima-Per

Pg ina 19 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Sino hay suficiente espacio para un campo de salida en la lnea actual, el sistema provoca un salto de lnea. Los campos numricos F, I y P estn justificados a la derecha rellenados con espacios en blanco por la izquierda. Si hay suficiente espacio se escriben los separadores de miles. Estos separados van desapareciendo en funcin del espacio disponible en salida.

El formato de los campos en la pantalla depende de su tipo

TIPO C D F I N P T X

LONGITUD DE SALIDA Longitud del campo 8 22 11 Longitud del campo 2 * Longitud del campo (+1) 6 2 * Longitud del campo

POSICIONAMIENTO Justificado a la izquierda Justificado a la izquierda Justificado a la derecha Justificado a la derecha Justificado a la izquierda Justificado a la derecha Justificado a la izquierda Justificado a la izquierda

Si el campos es del tipo P y tiene posiciones decimales, la longitud de salida se incrementa en 1. Con los tipos de datos D, el formato interno del campo difiere del formato de salida. Para campos de tipo D, el sistema lee el formato de salida especificado en el reg istro maestro de usuario. Posibles formatos de salida son DD/MM/ YY o MM/DD/ YYYY, donde, DD es el da, MM es el mes y YYYY es el ao. Se puede dar formato al campo de salida con las opciones /, <offset> y <l ongitud>. Con / forzamos un salto de lnea antes de la salida. <posicin> es un nmero o una variable de hasta tres dgitos de longitud que sirve para indicar la posicin en el dispositivo de salida. <longitud> es un nmero o una variable de hasta tres dgitos de longitud que sirve para indicar la longitud de salida del campo. Si <posicion> y <l ongitud> son literales numricos la clusula es AT es opcional. Si utilizamos la opcin <posicin>, el campo saldr en esa posicin aunque no haya espacio, o haya sido utiliza esa posicin por otro campo. Si <longitud> es menor que el campo de salida, si ste es alfanumrico se trunca y si es numrico se rellena por la izquierda con un asterisco (*).

Lima-Per

Pg ina 20 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Entre otros formatos de write ms comp lejos, tenemos:

LEFT-JUSTIFIED CENTERED RIGHT-JUSTIFIED UNDER <campo> NO-GAP USING EDIT MASK <mscara> USING NO EDIT MASK NO-ZERO

Salida justificada a la izquierda. Salida centrada. Salida justificada a la derecha. La salida se posiciona bajo el campo <campo>. El espacio en blanco posterior a la salida se omite. Se especifica un formato de salida. Desactiva el formato que puede tener un campo del diccionario de datos. Si un campo tiene ceros, se reemplazan por espacios en blanco. En campos de tipo C y N, los ceros a la izquierda se reemplaza automticamente Si escribe el grfico <smbolo>. Para poder utilizar esta opcin es necesario incluir en el programa Se escribe el icono <icono>. Para poder utilizar esta opcin es necesario incluir en el programa la siguiente sentencia: INCLUDE <ICON>. Se escribe el campo <campo> con la caracterstica de checkbox. Cuando situemos el cursor por encima del campo, ste cambiar a una mano, y con un solo click activaremos el evento AT LINESELECTION.

WRITE <symbol> AS SYMBOL WRITE <icono> AS ICON

WRITE <campo> AS CHECKBOX WRITE <campo> HOTSPOT

DD/MM/YY MM/DD/YY DD/MM/YYYY MM/DD/YYYY DDMMYY MMDDYY YYMMDD

El separador se define El separador se define El separador se define El separador se define Sin separadores. Sin separadores. Sin separadores.

en el en el en el en el

registro registro registro registro

maestro de usuario. maestro de usuario. maestro de usuario. maestro de usuario.

Lima-Per

Pg ina 21 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Para campos numricos: NO-SIGN DECIMALS <decimales> Salida sin signo. <decimales> especifica el nmero de dgitos despus del punto. En campos de tipo F, <exponente> especifica el exponente. campos de tipo P, se multiplican por 10 elevado a a <r>. Formato sobre la base de datos de la moneda <moneda> definida en la tabla TCURX. El nmero de decimales se fija sobre la base de la unidad <unidad> especificada en la tabla T006 para los campos de tipo P.

EXPONENT <exponente>

ROUND <r> CURRENCY <moneda> UNIT <unidad>

Parameters
Si queremos dar la posibilidad al usuario de introducir valores en variables en la pantalla de seleccin, debemos definir dichas variables con la sentencia PARAM ETERS. PARAMETERS <parmetro> [ (<longitud)>]. [ TYPE <ti po> | LIKE <campo> ] [ DECIMALS <deci males> ] [ DEFA ULT <val or> ] [ MEMORY ID <memori a>] [ MODIF ID <grupo> ] [ MATCHCODE OBJ ECT <objeto> ] [ AS MATCHCODE S TRUCTUR E] [ NO-DISPLAY ] [ LOWER CAS E ] [ OB LIGATORY ] [ FOR TAB LE <tabl a> ] [ AS CHECKBOX ] [ RADIOB UTTON GROUP <grupo> ] [ VALUE-REQUES T ] [ HELP REQUES T ]. Cuando el usuario arranque el programa aparece una pantalla de seleccin con el parmetro <parmetro>, con longitud la especificada en <longitud>, o la longitud por defecto del campo si la clusula no se define. Por defecto la descripcin que aparece a la izquierda del campo es el no mbre del campo. El objeto parcial de programa Elementos de texto, la opcin Textos de seleccin nos permite asociar al parmetro un texto significativo. Otra posibilidad es la utilizacin de la sentencia SELECTION-SCREEN co mo veremos en el apartado correspondiente a esta sentencia. Se puede utilizar los parmetros de seleccin, por ejemp lo, para que el usuario limite los valores desde y hasta para una posterior lectura de la base de datos. Si las cond iciones de seleccin son ms complejas que indicar un valor desde y hasta, es preferib le utilizar la sentencia SELECT-OPTIONS.

Lima-Per

Pg ina 22 de 230

CURSO ABAP BASICO


www.bizpartner.biz

DEFAULT -> <valor> puede ser un literal o el nombre de un campo. Si especificamos el nombre de un campo el valor por defecto en el parmetro ser el valor del campo en el mo mento de presentar la pantalla de seleccin. Recordemos que el evento INITIA LIZATION se ejecuta antes de la presentacin de la pantalla de seleccin, en l se puede actualizar el valor del campo especificado. El usuario puede modificar el valo r que aparece por defecto. LOWER-CAS E -> El sistema no convierte el valor del parmetro a maysculas, es decir, respeta la entrada del usuario, sea con caracteres en maysculas y/o minsculas. Si definimos el t ipo de pa rmetro con la opcin LIKE y referenciamos un campo del diccionario de datos, la clusula LOW ER CA SE no se puede utilizar. OBLIGATORY -> Obliga a introducir un valor al usuario en el parmetro. Para significar el hecho de la obligatoriedad, el sistema presenta el campo con el signo de interrogacin (?).

Ejempl o 2.1 Uso de WRITE. REPORT ZT. WRITE ' Trabajando con ABAP. REPORT ZT. WRITE ' Trabajando ' & ' con ' & 'ABAP'.

Ejempl o 2.2 Uso de WRITE. REPORT 1. DATA S UM TYPE I. SUM = S UM + 1. SUM = S UM + 2. SUM = S UM + 3. SUM = S UM + 4. WRITE: / 'S UMATORIA: ', S UM.

REPORT 1. DATA S UM TYPE I. SUM = S UM + : 1, 2 , 3, 4. WRITE: / 'S UMATORIA: ', S UM.

Lima-Per

Pg ina 23 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.3 Uso de WRITE.

REPORT 1. DATA NUMERITO TYPE P DECIMALS 2. NUMERITO = 3 / 4. WRITE: / 'VALOR: ', NUMERITO.

Ejempl o 2.4 Uso de WRITE. REPORT 1. DATA NUMERITO TYPE P DECIMALS 4. NUMERITO = 3 / 4. WRITE: / 'VALOR: ', NUMERITO.

Ejempl o 2.5 Uso de WRITE.

REPORT 1. DATA NUMERITO TYPE P DECIMALS 1. NUMERITO = 3 / 4. WRITE: / 'VALOR: ', NUMERITO.

Ejempl o 2.6 Uso de WRITE. REPORT 1. DATA NUMERITO TYPE N. NUMERITO = 3 / 4. WRITE: / 'VALOR: ', NUMERITO.

Lima-Per

Pg ina 24 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.7 Uso de WRITE. REPORT 1. DATA NUMERITO TYPE F. NUMERITO = 3 / 4. WRITE: / 'VALOR: ', NUMERITO.

Ejempl o 2.8 Uso de WRITE. REPORT 1. DATA NUM ERITO TYPE I. NUM ERITO = 3 / 4. WRITE: / 'VA LOR: ', NUM ERITO.

Ejempl o 2.9 Uso de WRITE. REPORT 1. data f1(4) type p val ue 1. write 14 f1. write ' Z'. write /14 '1234'.

Lima-Per

Pg ina 25 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.10 Uso de WRITE. REPORT 1. data f1(4) type p val ue 1234. data f2(6) type p val ue 123456. data f3(8) type p val ue 12345678. data f4(10) type p value 1234567890. write f1. write / f4. write / '1234567890123456789'. write / f2. write / f3. write / f4. write / f1.

Ejempl o 2.11 Uso de WRITE. REPORT 1. data f1(4) type n val ue 1234. data f2(6) type n val ue 123456. data f3(8) type n val ue 12345678. data f4(10) type n value 1234567890. write f1. write / f4. write / '1234567890123456789'. write / f2. write / f3. write / f4. write / f1.

Ejempl o 2.12 Uso de WRITE. report ztx1404. data f1(4) type c value ' ABCD'. write: / '----+----1----+--', / '12345678901234567'. write / f1(2). write / f1+1(2). write: / (2) f1 +2(1), f1.

Lima-Per

Pg ina 26 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.13 Uso de WRITE. REPORT 1. data f1(4) type p val ue 1234. write: / ' ----+----1----+--', / '12345678901234567'. skip. write /1 'X'. write ' YZ'. write 2 ' YZ' . write 3 ' ABC'. write 4 f1. write 7 f1. write ' Z'.

Ejempl o 2.14 Uso de WRITE. report 1. data: f1(4) type p value 1234, p type i value 5, l type i value 8. write: / '----+----1----+--', / '12345678901234567'. skip. write /(2) 'XYZ'. write /(4) 'XYZ'. write 'A BC'. write /5(4) f1. write at /p(l) f1.

Lima-Per

Pg ina 27 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.15 Uso de WRITE. report ztx1406. data f1(4) value ' ABCD'. write: '123456789012'. write: / f1, f1, / f1 no-gap, f1, / '''', f1, '''', / '''', 2 f1, 6 '''', / '''' no-g ap, f1 no-gap, ''''.

Ejempl o 2.16 Uso de WRITE. REPORT 1. data: f1 (4) value 'AB CD', f2 type i value '1234-'. write: / '12345678901234', / ' 5. ', f1, / ' 6. ', (6) f1 using edit mask '_:__:_', / ' 7. ', f1 using edit mask 'LL_:__', / ' 8. ', f1 using edit mask 'RR_:__', / ' 9. ', f2 using edit mask 'LLV______', / '10. ', f2 using edit mask 'RRV______', / '11. ', f2 using edit mask 'RRV___,___', / '12. ', f2 using edit mask 'LLV___,___', / '13. ', f1 using edit mask 'V___'.

Lima-Per

Pg ina 28 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.17 Uso de WRITE. report 1. data: f2 type i val ue '1234-'. write / f2. f2 = f2 + 2000. write / f2.

Ejempl o 2.18 Uso de WRITE. report 1. data: f2 type i val ue '-1278'. write / f2. f2 = f2 + 2000. write / f2.

Ejempl o 2.19 Uso de WRITE. report 1. DATA: X TYPE P DECIMALS 3 VALUE '1.267', Y TYPE F VALUE '125.456E2'. WRITE: / x DECIMALS 0, / x DECIMALS 2, / x DECIMALS 5, / y DECIMALS 1, / y DECIMALS 5, / y DECIMALS 20.

Lima-Per

Pg ina 29 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.20 Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cuanto deber pag ar final mente por su compra. REPORT ZPROBLEMA_01. PARAM ETERS: total TYPE P DECIMALS 3 DEFA ULT ''. total = total * ( 85 / 100 ). WRITE: / La cantidad a pagar con el 15% de descuento es :, total.

Lima-Per

Pg ina 30 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 2.21 Un vendedor reci be un sueldo base ms un 10% extra por comisin de sus ventas, el vendedor desea saber cuanto dinero obtendr por concepto de comisiones por las tres ventas que realiza en el mes y el total que reci bir en el mes tomando en cuenta su sueldo base y comisiones. REPORT ZPROB LEMA_02. PARAMETERS : suel do TYPE P DECIMALS 2 DEFAULT ''. DATA: pri mer TYPE P DECIMALS 2, segundo TYPE P DECIMALS 2, tercer TYPE P DECIMALS 2. pri mer = suel do * ( 10 / 100 ). sueldo = sueldo + primer. segundo = suel do * ( 10 / 100 ). sueldo = sueldo + segundo. tercer = suel do * ( 10 / 100 ). sueldo = sueldo + tercer. SKIP. write: / ' El pri mer mes reci bira de comision :', pri mer, / ' El segundo mes reci bira de comision :', segundo, / ' El tercer mes reci bira de comision :', tercer, / ' El monto acumul ado al terminar l os 3 meses es :', suel do.

Lima-Per

Pg ina 31 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_16 . DATA NUMERO TYPE P DECIMALS 2 VALUE '-12345678.89'. WRITE '1234567890123456789012345678901234567890123456'. WRITE: / 'El numero', NUMERO,'Es empaquetado'.

01 E 21 6 41 d

02 l 22 7 42 o

03

04 n 24 ,

05 u 25 8

06 m 26 9

07 e 27 -

08 r 28

09 o 29 E

10

11

12

13

14 1 34 p

15 2 35 a

16 . 36 q

17 3 37 u

18 4 38 e

19 5 39 t

20 . 40 a

23 8

30 s

31

32 e

33 m

La longitud total de NUMERO por ser de tipo P es: 2 * 8 + 1 = 17. Debido a que la longitud por defecto de los campos empaquetados (P) es de ocho.

REPORT ZPROCESO_16 . DATA NUMERO TYPE P DECIMALS 2 VALUE '-12345678.89'. WRITE '1234567890123456789012345678901234567890123456'. WRITE: / 'El numero', NUMERO left-justified ,'Es empaquetado'.

01 E 21 , 41 d

02 l 22 8 42 o

03

04 n 24 -

05 u 25

06 m 26

07 e 27

08 r 28

09 o 29 E

10

11 1 31

12 2 32 e

13 . 33 m

14 3 34 p

15 4 35 a

16 5 36 q

17 . 37 u

18 6 38 e

19 7 39 t

20 8 40 a

23 9

30 s

Lima-Per

Pg ina 32 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_16 . DATA NUMERO TYPE P DECIMALS 2 VALUE '8.89'. WRITE '1234567890123456789012345678901234567890123456'. WRITE: / 'El numero', NUMERO,'Es empaquetado'.

01 E 21

02 l 22

03

04 n 24 ,

05 u 25 8

06 m 26 9

07 e 27

08 r 28

09 o 29 E

10

11

12

13

14

15

16

17

18

19

20

23 8

30 s

31

32 e

33 m

34 p

35 a

36 q

37 u

38 e

39 t

40 a

41 d

42 o

REPORT ZPROCESO_16 . DATA NUMERO TYPE P DECIMALS 2 VALUE '5'. WRITE '1234567890123456789012345678901234567890123456'. WRITE: / 'El numero', NUMERO,'Es empaquetado'.

01 E 21

02 l 22

03

04 n 24 ,

05 u 25 0

06 m 26 0

07 e 27

08 r 28

09 o 29 E

10

11

12

13

14

15

16

17

18

19

20

23 5

30 s

31

32 e

33 m

34 p

35 a

36 q

37 u

38 e

39 t

40 a

41 d

42 o

Lima-Per

Pg ina 33 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_16 . WRITE '1234567890123456789012345678901234567890123456'. WRITE /5(40) 'Eliminando registros'.

01

02

03

04

05 E 25

06 l 26

07 i 27

08 m 28

09 i 29

10 n 30

11 a 31

12 n 32

13 d 33

14 o 34

15

16 r 36

17 e 37

18 g 38

19 i 39

20 s 40

21 t

22 r

23 o

24 s

35

REPORT ZPROCESO_16 . WRITE '1234567890123456789012345678901234567890123456'. WRITE /5(14) 'Eliminando registros'.

01

02

03

04

05 E

06 l

07 i

08 m

09 i

10 n

11 a

12 n

13 d

14 o

15

16 r

17 e

18 g

19 i

20 s

REPORT ZPROCESO_16 . WRITE '1234567890123456789012345678901234567890123456'. WRITE /5(30) 'Eliminando registros' right-justified.

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15 E 35

16 l 36

17 i 37

18 m 38

19 i 39

20 n 40

21 a

22 n

23 d

24 o

25

26 r

27 e

28 g

29 i

30 s

31 t

32 r

33 o

34 s

Lima-Per

Pg ina 34 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_16 . DATA PALABRA(10) VALUE 'PERUANO'. WRITE '1234567890123456789012345678901234567890123456'. WRITE: / 'El texto que va a ser sobreescrito'. write at 7(5) PALABRA.

01 E 21 r

02 l 22

03

04 t 24 o

05 e 25 b

06 x 26 r

07 P 27 e

08 E 28 e

09 R 29 s

10 U 30 c

11 A 31 r

12 e 32 i

13

14 v 34 o

15 a 35

16

17 a 37

18

19 s 39

20 e 40

23 s

33 t

36

38

REPORT ZPROCESO_16 . DATA PALABRA(10) VALUE 'PERUANO'. WRITE '1234567890123456789012345678901234567890123456'. WRITE: / 'El texto que va a ser sobreescrito'. write at 7(19) PALABRA.

01 E 21

02 l 22

03

04 t 24

05 e 25

06 x 26 r

07 P 27 e

08 E 28 e

09 R 29 s

10 U 30 c

11 A 31 r

12 N 32 i

13 O 33 t

14

15

16

17

18

19

20

23

34 o

35

36

37

38

39

40

Lima-Per

Pg ina 35 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Escribir un programa que muestre la divisin de dos nme ros enteros en un nmero real con 3 decimales: a) Que la ultima posicin del decimal sea la posicin 13. b) Que el prime r lugar entero aparezca en la posicin 8.
REPORT ZCAPITULO_14_05 .

DATA: A TYPE I, B TYPE I, N TYPE P DECIMALS 3. A = 2. B = 13. N = A / B. * Parte a. WRITE '01234567890123456789'. WRITE /(14) N. * Parte b. WRITE /8 N LEFT-JUSTIFIED.

Lima-Per

Pg ina 36 de 230

CURSO ABAP BASICO


www.bizpartner.biz

2.1.5 Uline y Skip


Podemos imprimir una lnea de Subrayados con la sentencia ULINE. Tendr las mismas propiedades que el WRITE.

ULINE /(<offset>)(<Iong>).
Para saltar una o varias lneas utilizaremos S KIP.

SKIP <n>.
Por defecto el salto ser de una nica lnea.

report ZPROBLEMA_04. SKIP TO LINE 3. ULINE AT 2(1). WRITE 4 '-'. WRITE 6 '--'. WRITE 9 '---'. ULINE AT 12(4). SKIP TO LINE 1. POSITION 18. WRITE '|'. SKIP TO LINE 3. DO 4 TIMES. NEW-LINE. POSITION 18. WRITE '|'. ENDDO.

Analice el funcionamiento de: POSITION NEW-LINE

Lima-Per

Pg ina 37 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROBLEMA_04. WRITE '---'. WRITE /2 '| |'. ULINE AT /5(8). SKIP TO LINE 4. DO 3 TIMES. WRITE '|'. NEW-LINE. ENDDO. SKIP TO LINE 5. WRITE '---------'. SKIP TO LINE 4. ULINE AT 6(10). WRITE 15 '|' .

report ZPROBLEMA_04. WRITE WRITE WRITE ' |'. /'-------'. /' |'.

SKIP TO LINE 1. DO 3 TIMES. WRITE 12 sy-vline. NEW-LINE. ENDDO. SKIP TO LINE 2. ULINE AT 12(1).

Analice el funcionamiento de SY-VLINE.

Lima-Per

Pg ina 38 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 39 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Otros usos de Write

Include
Report ZEEE. INCLUDE <symbol>. INCLUDE <icon>. WRITE: / 'Phone Symbol:', SYM_PHONE AS SYMBOL. SKIP. WRITE: / 'Alarm Icon: ', icon_alarm AS ICON.

Report ZEEE. DATA: flag1(1) TYPE c VALUE ' ', flag2(1) TYPE c VALUE 'X', flag3(5) TYPE c VALUE 'Xenon'. WRITE: / 'Flag 1 ', flag1 AS CHECKBOX, / 'Flag 2 ', flag2 AS CHECKBOX, / 'Flag 3 ', flag3 AS CHECKBOX.

Under
REPORT ZEEE. DATA: h1(10) TYPE c VALUE ' Number', h2(10) TYPE c VALUE ' Square', h3(10) TYPE c VALUE ' Cube', n1 TYPE i, n2 TYPE i, n3 TYPE i,x TYPE i. TOP-OF-PAGE. x = sy-colno + 8. POSITION x. WRITE h1. x = sy-colno + 8. POSITION x. WRITE h2. x = sy-colno + 8. POSITION x. WRITE h3. x = sy-colno + 16. POSITION x. WRITE sy-pagno. ULINE. START-OF-SELECTION. DO 10 TIMES. n1 = sy-index. n2 = sy-index ** 2. n3 = sy-index ** 3. NEW-LINE. WRITE: n1 UNDER h1, n2 UNDER h2, n3 UNDER h3. ENDDO.

Lima-Per

Pg ina 40 de 230

CURSO ABAP BASICO


www.bizpartner.biz

COLORES
The options COLOR, INTENSIFIED, and INV ERSE of the FORMAT statement influence the colors of the output list. To set colors in the program, use: Syntax FO RMAT COLOR <n> [ON] INTENSIFIED [O N|O FF] INVERSE [O N|O FF]. To set colors at runtime, use: Syntax FO RMAT COLOR = <c> INTENSIFIED = <int> INVERSE = <inv>. These formatting options do not apply to horizontal lines created by ULINE. They have the follow ing functions:

COLOR sets the color of the line background. If, in addition, INV ERSE ON is set, the system changes the foreground color instead of the background color. For <n> you can set either a color number or a color specif ication. Instead of color number 0, however, you must use OFF. If you set the color numbers at runtime, all values of <c> that are less than zero or greater than seven, lead to undefined results. The following table summarizes the different possibilities:

<n> OFF or COL_BA CKGROUND 1 2 3 4 5 6 7 or COL_HEADING or COL_NORMAL or COL_TOTAL or COL_KEY or COL_P OSITIVE or COL_NEGA TIVE or COL_GROUP
The default setting is COLOR OFF.

<c> 0 1 2 3 4 5 6 7

Color depends on GUI gray-blue light gray yellow blue-green green red violet

Intended for background headers list bodies totals key columns positive threshold value negative threshold value Cont rol levels

INTENSIFIED deter mines the color palette for the line background. With one exception (COLOR OFF), the color palette for the line background specif ied above can be intensified or normal. The default setting is INTENSIFIED ON. For COLOR OFF, the system changes the foreground color instead of the background color. If, in addition, INVERSE ON is set, then INTENSIFIED OFF has no effect (again w ith the exception of COLOR OFF).

INVERSE affects the foreground color. With one exception (COLOF OFF), the system takes the COLOR specif ied from an inverse color palette and uses it as foreground color. The background color remains unchanged. For COLOR OFF, INV ERSE has no effect, since this would set the foreground and the background to the same color. The follow ing statements have the same effect: FO RMAT INTENSIFIED O N. and SUMMARY.

FORMA T INTE NS IFIED OFF and DETAIL.

Lima-Per

Pg ina 41 de 230

CURSO ABAP BASICO


www.bizpartner.biz

However, SAP recommends that you always use the FORMA T statement, since it makes programs easier to read. The following examples show the colors possible in lists and how to use them. For another demonstration of colors in lists, call the executable program S HOWCOLO in any system.

Muestra las diferentes combinaciones de formato de colores REPORT ZBC_JUAN004. DATA i TYPE i VALUE 0. DATA col(15) TYPE c. WHILE i < 8. CASE i. WHEN 0. WHEN 1. WHEN 2. WHEN 3. WHEN 4. WHEN 5. WHEN 6. WHEN 7. ENDCASE. col col col col col col col col = = = = = = = = 'COL_BACKGROUND 'COL_HEADING 'COL_NORMAL 'COL_TOTAL 'COL_KEY 'COL_POSITIVE 'COL_NEGATIVE 'COL_GROUP '. '. '. '. '. '. '. '.

FORMAT INTENSIFIED COLOR = i. WRITE: /(4) i, AT 7 sy-vline, col, sy-vline, col INTENSIFIED OFF, sy-vline, col INVERSE. i = i + 1. ENDWHILE.

Lima-Per

Pg ina 42 de 230

CURSO ABAP BASICO


www.bizpartner.biz

FECHAS CON SET COUNTRY


Define el formato del punto decimal y el formato de la fecha para todas las sentencias de escritura (WRITE) que se utilicen a continuacin, de acuerdo con la parametrizacin que se haya realizado sobre la tabla T005X.

SET COUNTRY <pas>.


Con <pas> identificamos el cdigo de pas a utilizar en la sentencia. Si el pas existe en la tabla de pases T005X, el cdigo de retorno de la sentencia es 0, en caso contrario, es 4. Si pas tiene el valor SPACE se formatea la salida al formato especificado en el registro maestro del usuario. El efecto de esta sentencia no se limita a la ejecucin de un programa, sino que su efecto se extiende a toda el rea de trabajo del usuario.

Todos los valores posibles solo para los campos XDEZP y DATFM. Porque existen ms registros:

Lima-Per

Pg ina 43 de 230

CURSO ABAP BASICO


www.bizpartner.biz

If t he country key you specified does not exist, the system sets SY -SUBRC to 4 and formats for all subsequent WRITE statements the decimal characters a s period '.' and date specifications a s MM/DD/ YY.

REPORT ZH_CADENAS1. write sy-datum. DATA: FECHA TYPE D. FECHA = SY-DATUM. write / fecha.

XDEZP XXX.XXX,XX US X DATFM


1 2 4 5 DD.MM.AAAA MM/DD/AAAA AAAA.MM.DD AAAA/MM/DD

FORMATO Otro El usual (miles: ,) (decimales: .) FORMATO

XXX,XXX.XX

Se muestra todos los pases con valores diferentes de 1 en DATFM, todos los dems tienen e valor de 1. La lista esta ordenada ascendentemente:

Lima-Per

Pg ina 44 de 230

CURSO ABAP BASICO


www.bizpartner.biz

EJEMPLO REPORT demo_list_set_country LINE-SIZE 40. DATA: num TYPE p DECIMALS 3 VALUE '123456.789'. ULINE. WRITE: / 'INITIAL:'. WRITE: / num, sy-datum. ULINE. SET COUNTRY 'US'. WRITE: / 'US, SY-SUBRC:', sy-subrc. WRITE: / num, sy-datum. ULINE. SET COUNTRY 'GB'. WRITE: / 'GB, SY-SUBRC:', sy-subrc. WRITE: / num, sy-datum. ULINE. SET COUNTRY 'DE'. WRITE: / 'DE, SY-SUBRC:', sy-subrc. WRITE: / num, sy-datum. ULINE. SET COUNTRY 'XYZ'. WRITE: / 'XYZ, SY-SUBRC:', sy-subrc. WRITE: / num, sy-datum. ULINE. SET COUNTRY space. WRITE: / 'SPACE, SY-SUBRC:', sy-subrc. WRITE: / num, sy-datum. ULINE.

Lima-Per

Pg ina 45 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Estructuras de control

En A BAP, co mo en todos los lenguajes estructurados, disponemos de una serie de instrucciones para subdividir el p rograma en bloques lgicos; se ejecutarn cuando se cumpla una cierta condicin.

3.1 Condicionales simples


Para introducir una condicin, utilizaremos la sentencia: IF... ELS E... ENDIF que podr aparecer en distintas modalidades.

IF <Cond.>. ENDIF.

IF <Cond.>. ELS E. ENDIF.

IF <Cond.>. ELS EIF. ELS EIF. ELS E. ENDIF.

Tamb in podremos utilizar operadores especiales: Para chequear rangos: IF <f1> B ETWEEN <f2> AND <f3 >. Para chequear valores: IF <f1> IS INITAL.

3.2 Condicionales complejas


Si queremos ejecutar diferentes instrucciones en funcin del contenido de un campo, podemos utilizar la sentencia CAS E. CAS E <campo>. WHEN <val or1>. WHEN <val or2>.

Lima-Per

Pg ina 46 de 230

CURSO ABAP BASICO


www.bizpartner.biz

WHEN OTHERS . ENDCAS E. Por lt imo, existe la instruccin condicional: ON CHANGE OF ... ENDON que permitir la ejecucin de un bloque de instrucciones, si se ha producido un cambio de valor de un cierto campo durante el acceso a base de datos o una tabla interna. C mo procesar una tabla interna o un acceso a base de datos, ya lo veremos ms adelante. ON CHANGE OF <campo>. ENDON.

3.3 Bucles
Para realizar procesos repetitivos, utilizaremos DO y WHIL E.

3.3.1 Do
Permite ejecutar un bloque de instrucciones tantas veces como se especifique. DO <n> TIMES . ENDDO. En la variable del sistema S Y-INDEX tendremos un contador del nmero de repeticiones. Es posible anidar sentencias DO. En ese caso, el S Y-INDEX har referencia al bucle en proceso.

3.3.2 While
Permite ejecutar un bloque de instrucciones mientras se cumpla una condicin.

WHILE <cond>. ENDWHILE.


De la mis ma forma que la instruccin DO, WHILE permite an idar bucles.

3.4 Sentencias de control

Lima-Per

Pg ina 47 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Las sentencias descritas a continuacin se utilizarn para terminar el procesamiento de un bucle o proceso.

3.4.1 Check <cond>


Realiza un chequeo de <cond> de forma que si dentro de un bucle la condicin es falsa, saltar todas las instrucciones que siguen al CHECK e iniciar la siguiente pasada al bucle. Fuera de un bucle si la condicin es falsa, saltar todas las instrucciones que siguen al CHECK hasta el final del ev ento o programa en proceso.

3.4.2 Exit
Dentro de un bucle saldr del bucle y fuera de un bucle saldr del programa. Si la instruccin EXIT est dentro de varios bucles anidados, nicamente saldr del bucle en proceso.

3.4.3 Stop
Con STOP finalizaremos el report (programa) en ejecucin, pero antes ejecutaremos el evento END-OFSELECTION.

3.4.4 Leave
Con LEA VE finalizaremos el report (programa) en ejecucin, sin ejecutar el evento END-OFSELECTION.

Lima-Per

Pg ina 48 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 3.1 Se necesita un sistema para un supermercado, en el cual si el monto de l a compra del cliente es mayor de $5000 se le har un descuento del 30% , si es menor o igual a $5000 pero mayor que $3000 ser del 20% , si no rebasa los $3000 pero si los $1000 la rebaja efecti va es del 10% y en caso de que no rebase los $1000 no tendr beneficio. REPORT ZPROB LEMA_03. PARAMETERS : Canti dad TYPE P DECIMALS 3 DEFAULT ''. DATA: Monto_ aux TYPE P DECIMALS 3. Monto_aux = Canti dad. IF Canti dad GT 5000. Canti dad = Canti dad * ( 70 / 100 ). WRITE: / ' El Monto de Compra es :', Monto_aux, / ' El Monto a Pagar es :', Canti dad. ELS E. IF ( Canti dad GT 3000 ) AND ( Canti dad LE 5000 ). Canti dad = Canti dad * ( 80 / 100 ). WRITE: / ' El Monto de Compra es :', Monto_aux, / ' El Monto a Pag ar es :' , Canti dad. ELS E. IF ( Canti dad GT 1000 ) AND ( Canti dad LE 3000 ). Canti dad = Canti dad * ( 90 / 100 ). WRITE: / ' El Monto de Compra es :', Monto_ aux, / ' El Monto a Pagar es :', Canti dad. ELS E. IF ( Canti dad GE 1000 ) AND ( Canti dad LE 3000 ). WRITE: / ' El Monto a Pagar es :', Monto_aux. ENDIF. ENDIF. ENDIF. ENDIF.

Lima-Per

Pg ina 49 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 3.2 Necesitamos saber si una persona es joven o vieja basndonos en su edad. J oven es aquella menor de 45 aos. REPORT ZPROB LEMA_04. PARAMETERS : Eda d TYPE I DEFAULT ''. IF Edad GE 45. WRITE: / ' Usted es consi derada una persona Vieja'. ELS E. WRITE: / ' Usted es considerada una persona J oven'. ENDIF.

Lima-Per

Pg ina 50 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 3.3 Dado un numero entero realice la siguiente operacin: S = 1 + x + x2 + x3 + + x7

REPORT Z_PROB1. PARAMETERS : Numero TYPE I DEFA ULT ''. DATA: S TYPE I. ***************************** **Inicializando Sumador 'S'** ***************************** S = 0. WHILE S Y-INDEX LE 8. S = S + Numero ** ( S Y-INDEX - 1 ). ENDWHILE. WRITE: 'La suma de las potencias de', Numero, 'es:', S.

Lima-Per

Pg ina 51 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 3.4 Determinar los nmeros di visibles por 3 y por 7 entre un rango de val ores que son entrados por el usuario. REPORT ZEJ EMPLO3_4 . PARAMET ERS: INICIO TYPE I DEFAULT 0, FINAL TYPE I DEFA ULT 0. DATA: RES1 TYPE I, RES2 TYPE I, I TYPE I VALUE 5 , J TYPE I VALUE 5. WHILE INICIO <= FINAL. RES1 = INICIO MOD 7. RES2 = INICIO MOD 3. IF RES1 = 0. I = I + 1. S KIP TO LINE I. WRITE INICIO. ENDIF. IF RES2 = 0. J = J + 1. S KIP TO LINE J. WRITE AT 40 INICIO. ENDIF. INICIO = INICIO + 1. ENDWHIL E. SKIP TO LINE 3 . WRITE 'DIVIS IB LES POR 7' COLOR COL_ HEADING. POS ITION 40. WRITE 'DIVIS IB LES POR 3' COLOR COL_ HEADING. ULINE.

Lima-Per

Pg ina 52 de 230

CURSO ABAP BASICO


www.bizpartner.biz

CLEAR Y CHECK NOT CHECK logexp.


CHECK evaluates the subsequent logical ex pression. If it is true, the processing continues with the next statement. CHECK with a negative outcome terminates the current loop pass and goes back to the beginning of the loop to start the next pass, if there is one. Examples of loop structures are: DO WHILE LOOP SELECT ... ... ... ... ENDDO ENDWHILE ENDLOOP ENDSELECT

REPORT ZEJ5 DATA NUMERO TYPE I. CLEAR NUMERO.

DO 2 TIMES. CHECK NOT NUMERO IS INITIAL. WRITE: / 'El cursor esta en la linea', (2) NUMERO. ENDDO. WRITE: / 'FUERA'.

REPORT ZEJ5. DATA NUMERO TYPE I. NUMERO = 7. CHECK NOT NUMERO IS INITIAL. WRITE: / 'CONTINUA'.

REPORT ZEJ5. DATA NUMERO TYPE I. CLEAR NUMERO. CHECK NOT NUMERO IS INITIAL. WRITE: / 'CONTINUA'.

No muestra nada

Lima-Per

Pg ina 53 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Cadenas de caracteres

4.1 Concatenate
Se utiliza para concatenar varios campos alfanumricos en uso solo. CONCATENATE <c1> ... <cn> INTO <campo> [ SEPARATED BY <s> ]. Esta sentencia concatena los campos campos <c1> ... <cn> en el campo <campo>. Los espacios en blanco se ignoran durante la operacin. Con la clusula SEPARATED BY se puede especificar un campo alfanumrico (el campo <s>) que ser utilizado como separador entre los campos <c1> ... <cn>. Si el resultado de la concatenacin entonces SY-SUBRC = 0, si por el truncamiento, entonces SY-SUBRC = 4. entra en el campo <campo>, contrario, es necesario el

REPORT Z_DGCC47. DATA: C1(10) VALUE 'Dav', C2(10) VALUE 'id Carba', C3(10) VALUE 'llido', STRING(20). CONCATENATE C1 C2 C3 INTO STRING. WRITE: STRING. CONCATENATE C1 C2 C3 INTO STRING SEPARATED BY '.'. WRITE / STRING.

David Carballido Dav.id Carba.llido

4.2 Condense
Para borrar espacios en blanco superfluos en campos alfanumricos. CONDENSE <campo> [ NO-GAPS ]. Borra cualquier secuencia de espacios en blanco, dejando slo uno que exista entre palabras existentes en <campo>. Los espacios en blanco por la izquierda tambin desaparecen.

Lima-Per

Pg ina 54 de 230

CURSO ABAP BASICO


www.bizpartner.biz

4.3 Split
Divide un campo alfanumrico en varios campos, gracias a algn separador.
SPLIT <campo> AT <delimitador> INTO <c1> ... <cn>.

Esta sentencia utiliza el campo indicado en <delimitador> para separar los campos <c1> ... <cn> el contenido del campo <campo>. Si no hay especificado los suficientes campos para poder separar todo el contenido del campo <campo>, sobre el ltimo se rellena el resto del campo <campo>. Si todos los campos destino son lo suficientemente grandes como para almacenar las partes de <campo>, SY-SUBRC vale 0. En caso contrario SY-SUBRC vale 4.

REPORT ZH_CADENAS2 . DATA: PAISES(50) VALUE 'Per, Chile, Bolivia, Brasil', CAD1(30), CAD2(30), CAD3(30), SEPARADOR(2) VALUE ','. SPLIT PAISES AT SEPARADOR INTO CAD1 CAD2. WRITE CAD1. WRITE / CAD2.

4.4 Shift
Se utiliza para desplazar el contenido de un campo alfanumrico. Disponemos de distintas variantes en funcin del modo de desplazamiento. S HIFT <campo> [ B Y <n> PLACES ] [ { LEFT | RIGHT | CIRCULAR } ]. Desplaza el contenido del campo <campo> <n> posiciones.El significado de las clusulas es el siguiente: B Y -> Si se omite, el desplazamiento es de una posicin. Si <n> es cero o negativo no se realiza ningn desplazamiento. Si <n> excede de la longitud del campo <campo>, el desplazamiento se rellena con espacios en blanco. <n> puede ser una variable. LEFT -> el desplazamiento se realiza hacia la izquierda, con relleno de espacios en blanco p or la derecha.

Lima-Per

Pg ina 55 de 230

CURSO ABAP BASICO


www.bizpartner.biz

RIGHT -> El desplazamiento se realiza hacia la derecha, con relleno de espacios en blanco por la izquierda. CIRCULAR -> El desplazamiento se realiza haca la izquierda. Los caracteres que desaparecen por la izquierda aparecen por la derecha.

S HIFT <campo> UP TO <string> [ { LEFT | RIGHT | CIRCULAR } ]. Realiza un desplazamiento del contenido de un campo hasta un string dado. El sistema busca el string <string> en el campo <campo>. Si el string est contenido en el campo <campo> se realizar el desplazamiento hasta alcanzar el string. De no contener <campo> el string <string> no se realizar ningn desplazamiento. <string> puede ser una variable. El modo de desplazamiento es el mis mo que en la variante anterior. Si el string se enc uentra en el campo <campo>, SY-SUBRC es 0, en caso contrario es 4. SHIFT <campo> LEFT DELETING LEADING <string>. SHIFT <campo> RIGHT DEL ETING LEADING <string>. Realiza un desplazamiento hasta que el primer o ltimo carcter cu mpla cierto criterio. Esta sentencia desplaza el contenido del campo <campo > hasta que el primer carcter de la izquierda (primera sentencia) o el ltimo carcter de la derecha (segunda sentencia) satisface cierta condicin. El desplazamiento se rellena con espacios en blanco. <string> puede ser una variable.

REPORT ZFSDF. *CAMBIAR A T(8), QUESUCEDE? DATA: T(10) VALUE 'ABCDEFGH', cadena LIKE T. cadena = T. WRITE cadena. SHIFT cadena. WRITE / cadena. cadena = T. SHIFT cadena BY 3 PLACES LEFT. WRITE / cadena. cadena = T. SHIFT cadena BY 3 PLACES RIGHT. WRITE / cadena. cadena = T. SHIFT cadena BY 3 PLACES CIRCULAR. WRITE / cadena. REPORT ZH_CADENAS2 . DATA PALABRA(10) TYPE C. PALABRA = 'ABCDEFGH'. WRITE PALABRA.

Lima-Per

Pg ina 56 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SHIFT PALABRA. WRITE / PALABRA. SHIFT PALABRA. WRITE / PALABRA.

DIRECTO, NO NECESITA ALMACENARSE EN OTRA VARIABLE, EL RESULTADO DE SHIFT.

REPORT Z_DGCC47. DATA: t(10) VALUE 'abcdefghij', STRING LIKE T. STRING = T. WRITE STRING. SHIFT STRING. WRITE / STRING. STRING = T. SHIFT STRING BY 3 PLACES LEFT. WRITE / STRING. STRING = T. SHIFT STRING BY 3 PLACES RIGHT. WRITE / STRING. STRING = T. SHIFT STRING BY 6 PLACES CIRCULAR. WRITE / STRING.

abcdefghij bcdefghij defghij abcdefg ghijabcdef

Lima-Per

Pg ina 57 de 230

CURSO ABAP BASICO


www.bizpartner.biz

4.5 Replace
Reemplaza cierta parte de un string por otro string. REPLACE <string1> WITH <string2> INTO <campo> [ LENGTH <longitud> ]. El sistema busca en el campo <campo> la primera ocurrencia del string <string1> para sustituirla por el string <string2>. Con la clusula LENGTH slo se sustituir los caracteres indicados en <longitud>. Si no se especifica la clusula LENGTH la sustituicin del string <string1> ser completa. Si el string <string1> se encuentra en el campo <campo> es sustituido por <string2> y la variable del sistema SY-SUBRC toma el valor 0. En caso contrario, no se reemplaza nada y SY -SUBRC toma el valor 4. <string1>, <string2> y <longitud> pueden ser variables. REPORT ZH_CADENAS2 . DATA: CADENA(8) value 'ABCDEFGH', CAD1(4) VALUE 'WXYZ', CAD3(4) VALUE 'DEFG', CAD2(4) VALUE '1234'. WRITE: 'INICIAL: ',CADENA. REPLACE CAD1 WITH CAD2 INTO CADENA. WRITE: / SY-SUBRC, CADENA. REPLACE CAD3 WITH CAD2 INTO CADENA. WRITE: / SY-SUBRC, CADENA. *QUE VALOR NOS RETORNA: SY-SUBRC?.

REPORT Z_DGCC49 . DATA: T(10) VA LUE 'abcdefghij', STRING LIKE T, STR1(4) VA LUE 'cdef', STR2(4) VA LUE 'klmn ', STR3(2) VA LUE 'kl', STR4(6) VA LUE 'klmnop', LEN TYPE I VA LUE 2. STRING = T. WRITE STRING. REPLA CE STR1 WITH STR2 INTO STRING. WRITE / STRING. STRING = T. REPLA CE STR1 WITH STR2 INTO STRING LENGTH LEN. WRITE / STRING. STRING = T. REPLA CE STR1 WITH STR3 INTO STRING. WRITE / STRING. STRING = T. REPLA CE STR1 WITH STR4 INTO STRING. WRITE / STRING.

abcdefghij abklmnghij abklmnefgh abklghij abklmnopgh

Lima-Per

Pg ina 58 de 230

CURSO ABAP BASICO


www.bizpartner.biz

4.6 Translate
Se utiliza para convertir caracteres de mayscula a minscula o viceversa, o para realizar sustituciones de caracteres a travs de ciertas reglas. TRANSLATE <campo> TO { UPPER | LOWE } CAS E. Con la opcin UPPER, las let ras minsculas de <campo> se convierten en maysculas. Y con la opcin LOW ER las letras maysculas se convierten en minsculas. Para utilizar reglas de conversin se utiliza la siguiente sintaxis. TRANSLATE <campo> US ING <regla>. Esta sentencia reemplaza todos los caracteres de <campo> que cump lan la reg la de sustitucin <regla>. La regla de sustitucin contiene pares de letras, la primera de ellas indica el carcter a sustituir, la segunda indica el carcter de sustitucin. <regla> puede ser una variable.

REPORT ZFSDF. DATA: TEMPORAL(10) VALUE 'AbCdEfGAIJ', CADENA LIKE TEMPORAL, REGLA(20) VALUE 'A1b2C3D4E5f6G7H8I9j0'. CADENA = TEMPORAL. WRITE / CADENA. TRANSLATE CADENA TO UPPER CASE. WRITE / CADENA. CADENA = TEMPORAL. TRANSLATE CADENA USING REGLA. WRITE / CADENA.

4.7 Overlay
Se utiliza para sobrescribir un campo alfanumrico con otro campo. OVERLAY <campo1> WITH <campo2> [ ONLY <string> ]. Esta sentencia sobrescribe todas las posiciones del campo <campo1> que contengan las letras de <string> con el contenido del campo <campo2>. <campo2> permanece sin cambios. Si omitimos la clusula ONLY, slo las posiciones c on espacios en blanco sern sobrescritas. Si al menos una posicin del campo <campo1> es sustituida, SY-SUBRC ser 0. En caso contrario ser 4. Si <campo1> es superior a la longitud que <campo2>, slo los caracteres

Lima-Per

Pg ina 59 de 230

CURSO ABAP BASICO


www.bizpartner.biz

correspondientes a la longitud de <campo2> podrn ser actualizados en <campo1>.

REPORT ZH_CADENAS2 . DATA: CAD1(30) VALUE 'LI A S C TAL E RU', CAD2(30) VALUE 'X M E API D PEHG'. WRITE: 'CAD1: ', CAD1. WRITE: / 'CAD2: ', CAD2. OVERLAY CAD1 WITH CAD2. WRITE: / ' *** OVERLAY CAD1 WITH CAD2 ***'. WRITE: / 'CAD1: ', CAD1. WRITE: / 'CAD2: ', CAD2.

REPORT Z_DGCC48 . DATA: T(10) VA LUE 'A C E G I ', STRING LIKE T, L(10) VA LUE '1234567890', S(2) VA LUE 'AI'. STRING = T. WRITE STRING. OVERLA Y STRING WITH L. WRITE / STRING. STRING = T. OVERLA Y STRING WITH L ONLY S. WRITE / STRING.

ACEGI A2C4E6G8I0 1C EG9

Lima-Per

Pg ina 60 de 230

CURSO ABAP BASICO


www.bizpartner.biz

4.8 Search
Se utiliza para buscar una cadena de caracteres en un campo alfan merico. S EARCH string FROM string _ buscar [OPCIONES ]. Esta sentencia busca en el campo <string> la secuenca de caracteres <string_buscar>. Si se encuentra, la variable del sistema SY-SUBRC vale 0 y SY-FDPOS to ma el valo r del offset del string encontrado. En caso contrario, SY-SUBRC vale 4. El string <str> puede contener caracteres con cierto significado particular. REPORT ZH_CADENAS2 .

DATA: TEMPORAL(30) VALUE 'World Business Partner.', STRING LIKE TEMPORAL. STRING = TEMPORAL. write '123456789012345678'. write / STRING. SKIP. SEARCH STRING FOR 'f'. WRITE: / 'f', SY-SUBRC, SY-FDPOS. STRING = TEMPORAL. SEARCH STRING FOR 'ness'. WRITE: / 'ness ', SY-SUBRC, SY-FDPOS.

REPORT EJEMPLO. DATA STRING(30) VALUE 'David Carballido Cordova.'. WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'. ULINE /1(26). SEARCH STRING FOR 'x'. WRITE: / 'x', SY-SUBRC UNDER 'SY-SUBRC',SY-FDPOS UNDER 'SY-FDPOS'. SEARCH STRING FOR 'lli'. WRITE: / 'lli', SY-SUBRC UNDER 'SY-SUBRC',SY-FDPOS UNDER 'SY-FDPOS'.

Lima-Per

Pg ina 61 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_16 . DATA: text TYPE string. text = 'La sede de San Miguel queda en la avenida La Marina'. WRITE:/ 'Search in:', '"La sede de San Miguel queda en la avenida La Marina"'. ************************************************************************ "Si la busqueda es exitosa entonces sy-subcr = 0 y sy-fdpos = posicion.* "En caso contrario sy-subcr = 4.* ************************************************************************ SKIP. SEARCH text FOR 'queda '. "Busqueda exacta, espacios blancos al final de s2 son ignorados.* WRITE: / 'SEA RCH text FOR "queda "'. WRITE: / 'sy-subcr:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. SEARCH text FOR '.sede .'. "Busqueda que toma en cuenta los blancos que hay al final de s2.* WRITE: / 'SEA RCH text FOR ".sede ."'. WRITE: / 'sy-subcr:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. SEARCH text FOR 'mar*'. "Busca la cadena que comience con s2.* WRITE: / 'SEA RCH text FOR " mar*"'. WRITE: / 'sy-subcr:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. SEARCH text FOR '*gue'. " Busca la cadena que termine con s2.* WRITE: / 'SEA RCH text FOR "*gue"'. WRITE: / 'sy-subcr:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE.

Lima-Per

Pg ina 62 de 230

CURSO ABAP BASICO


www.bizpartner.biz

4.9 Comparacin de cadenas de caracteres


f1 slo contiene caracteres de f2. En cas o de ser cierta SY-FDPOS contiene la longitud de f1, y si es falsa contiene el offset del primer carcter que no cumple la condicin.

<f1> CO <f2> (Contains Onl y)

<f1> CN <f2 > (Contains Not Only)

negacin de la anterior.

<f1> CA <f2 > (Contains Any)

f1 contiene co mo mnimo algn carcter de f2. Si es cierta SY-FDPOS contiene el o ffset del primer carcter de f1 que est en f2, y si es falsa contiene la longitud de f1.

<f1> NA <f2 > (Contains Not Any)

negacin de la anterior.

<f1> CS <f2> (Contains String)

f1 contiene la cadena f2. Si la condicin SYFDPOS es cierta contiene el offset donde empieza f2 en f1, y si es falsa contiene la longitud de f1.

<f1> NS <f2> (Contains No String)

negacin de la anterior.

f1 corresponde al patrn f2. En el patrn podemos utilizar : + co mo cualquier carcter, * co mo cualquier cadena de caracteres, # para utilizar los caracteres +,*,# en la

Lima-Per

Pg ina 63 de 230

CURSO ABAP BASICO


www.bizpartner.biz

<f1> CP <f2> (Contains Pattern)

comparacin. Si la condicin es cierta S Y-FDPOS contiene el offset de f2 en f1 y si es falsa contiene la longitudde f1.

(Contains No Pattern) : <f1> NP <f2>

negacin de la anterior.

report ztx1003. * operator: co write / '''AABB'' co ''AB'''. if 'AABB' co 'AB'. write 'True'. else. write 'False'. endif. write / '''ABCD'' co ''ABC'''. if 'ABCD' co 'ABC'. write 'True'. else. write 'False'. endif. * operator: cn write / '''AABB'' cn ''AB'''. if 'AABB' cn 'AB'. write 'True'. else. write 'False'. endif. write / '''ABCD'' cn ''ABC'''. if 'ABCD' cn 'ABC'. write 'True'. else. write 'False'. endif. * operator: ca write / '''AXCZ'' ca ''AB'''. if 'AXCZ' ca 'AB'. write 'True'. else. write 'False'. endif. write / '''ABCD'' ca ''XYZ'''. if 'ABCD' ca 'XYZ'. write 'True'. else. write 'False'. endif. * operator: na write / '''AXCZ'' na ''ABC'''. if 'AXCZ' na 'ABC'. write 'True'. else. write 'False'. endif. write / '''ABCD'' na ''XYZ'''. if 'ABCD' na 'XYZ'. write 'True'. else. write 'False'. endif.

Lima-Per

Pg ina 64 de 230

CURSO ABAP BASICO


www.bizpartner.biz

report ztx1004. * operator: co write / '''AABB'' co ''AB'''. if 'AABB' co 'AB'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. write / '''ABCD'' co ''ABC'''. if 'ABCD' co 'ABC'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. * operator: cn write / '''AABB'' cn ''AB'''. if 'AABB' cn 'AB'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. write / '''ABCD'' cn ''ABC'''. if 'ABCD' cn 'ABC'. write 'True'. else. write 'False'. endif. * operator: ca write / '''AXCZ'' ca ''AB'''. if 'AXCZ' ca 'AB'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. write / '''ABCD'' ca ''XYZ'''. if 'ABCD' ca 'XYZ'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. * operator: na write / '''AXCZ'' na ''ABC'''. if 'AXCZ' na 'ABC'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. write / '''ABCD'' na ''XYZ'''. if 'ABCD' na 'XYZ'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos.

Lima-Per

Pg ina 65 de 230

CURSO ABAP BASICO


www.bizpartner.biz

report zt x1001. data: begin of s1, x value 'X', y value 'Y', z value 'Z', end of s1, begin of s2, x value 'X', z value 'Z', end of s2. if s1-x = s2-x. write: / s1-x, '=', s2-x. else. write: / s1-x, '<>', s2-x. endif. if s1-x between s2-x and s2-z. write: / s1-X, 'ESTA ENTRE', s2-x, 'and', s2-z. else. write: / s1-X, 'NO ESTA ENTRE', s2-x, 'and', s2-z. endif. if s1 = s2. "COMPA RANDO CAMPOS CADENA BYTE POR BYTE write: / 's1 = s2'. else. write: / 's1 <> s2'. endif. if 0 = ' '. write: / '0 = '' '''. else. write: / '0 <> '' '''. endif.

Lima-Per

Pg ina 66 de 230

CURSO ABAP BASICO


www.bizpartner.biz

report zt x1009. data: f1, begin of s, c1 value 'A', c2 value 'B', c3 value 'C', c4 value 'D', c5 value 'E', c6 value 'F', end of s. write / ''. do 6 times varying f1 fro m s-c1 next s-c2. write f1. enddo. write / ''. do 3 times varying f1 fro m s -c1 next s-c3. write f1. enddo.

report zt x1006. write: / 'HOLA'. exit. write: / 'AQUI'.

Lima-Per

Pg ina 67 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 4.1 Disear un programa que permita leer dos cadenas: cad[50] y cad2[20], luego impri mir la cadena concatenada. REPORT ZPROB LEMA_01. PARAMETERS : cad1(50) TYPE c DEFA ULT '', cad2(20) TYPE c DEFAULT ''. DATA linea TYPE string. CONCATENATE cad1 cad2 INTO linea. WRITE / linea.

* SI S E QUIERE UN ES PACIO ENTRE LAS CADENAS, S E PUEDE AGREGAR * DE LA SIGUIENT E MANERA: * CONCATENATE CAD1 CAD2 INTO LINEA S EPARATED B Y SPACE.

Lima-Per

Pg ina 68 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 4.2 Disear un programa que permi ta leer dos cadenas de diferente longitud, lueg o las dos cadenas mostrarlo en forma concatenada, convertirlo a maysculas, mostrar en forma inverti da y final mente mostrarlo en su estado de origen (al estado en que se realiz la conversin a maysculas). REPORT ZPROB LEMA_02. PARAMETERS : cad1(50) TYPE c DEFA ULT '', cad2(20) TYPE c DEFAULT ''. DATA linea TYPE string. CONCATENATE cad1 cad2 INTO linea. TRANSLATE linea TO UPPER CAS E. DATA len TYPE i. len = S TRLEN( linea ). WRITE: / 'La l ongitud de la cadena es: ', len. SKIP. WRITE: / 'La concatenaci n en Maysculas es: ', linea. DATA: cont TYPE i VALUE 0, linea1 TYPE string. DO len TIMES. CONCATENATE li nea+cont(1) linea1 INTO linea1. cont = cont + 1. ENDDO. SKIP. WRITE: / 'La cadena inverti da en maysculas es: ', linea1. DATA: count TYPE i VALUE 0 , linea2 TYPE string. DO len TIMES. CONCATENATE li nea1+count(1) linea2 INTO linea2. count = count + 1. ENDDO. SKIP. WRITE / ' Us o de la sentencia DO para mostrar la cadena'. WRITE: / 'en su estado original: ', linea2.

Lima-Per

Pg ina 69 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o 4.3 Disear un programa que permita leer una cadena cad1 de longitud mxi ma 50 y crear una cad2 [50], luego: Copi ar informaci n de cad1 en cad2 . Imprimir a partir del tercer carcter y hasta el fi nal, los caracteres de cad2. Imprimir sol o los 3 pri meros caracteres de cad2 . ZPROB LEMA_04 PARAMETERS : cad1(50) TYPE c DEFA ULT ''. DATA cad2(50) TYPE c. TRANSLATE cad1 TO LOWER CAS E. WRITE: / 'La cadena ingresada fue: ', cad1 . SKIP. MOVE cad1 TO cad2. TRANSLATE cad2 TO LOWER CAS E. WRITE: / 'La cadena 2 es: ', cad2. SKIP. WRITE: / 'Primeros 3 caracteres de cad2: ', cad2 +0(3). SKIP. WRITE: / ' Impresin a partir tercer caracter de cad2 : ', cad2 +3.

Lima-Per

Pg ina 70 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Variables del sistema


ABAP/4 tiene algunas variables internas que se van actualizando automticamente y que pueden ser utilizados en los programas. Todas ellas empiezan por el prefijo S Y- y ya hemos utilizado alguna de ellas como SY-SUBRC que nos da el cdigo de retorno de una instruccin o SY-TA BIX que contiene la lnea de proceso de una tabla interna.

Nombre de Variable
SY-INDEX SY-PA GNO SY-TABIX SY-TFILL SY-TLOPC SY-TMAXL SY-TOCCU SY-TTABC SY-TSTIS SY-TTABI SY-DBCNT SY-FDPOS SY-COLNO SY-LINCT SY-LINNO SY-LINSZ SY-PA GCT SY-MA COL SY-MA ROW SY-TLENG

Descripcin
Cantidad de repeticiones de bucles RUNTIM E: Pg ina actual en creacin de lista RUNTIM E: Lnea actual de una tabla interna Cantidad actual de entradas en la tabla interna Utilizacin interna Cantidad mxima de entradas en la tabla interna Parmetro occurs en tablas internas N mero de la lt ima lnea de tabla interna leda Utilizacin interna Offset de tablas internas en el rea de ro ll Cantidad elementos en conjunto tratado para operaciones BD Lugar de hallazgo de un string Colu mna actual en la creacin de la lista Cantidad de lneas de lista Lnea actual en la creacin de una lista Longitud de lnea de la lista Lmite de pgina de lista en instruccin REPORT Cantidad de colu mnas de instruccin SET MA RGIN Cantidad de lneas de instruccin SET MA RGIN Tamao de la lnea de una tabla interna

Lima-Per

Pg ina 71 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SY-SFOFF SY-W ILLI SY-LILLI SY-SUBRC SY-FLENG SY-CUCOL SY-CUROW SY-LSIND SY-LISTI SY-STEPL SY-TPA GI SY-W INX1 SY-W INY1 SY-W INX2 SY-W INY2 SY-W INCO

Utilizacin interna N mero de la lnea de ventana actual N mero de la lnea de lista actual Valor de retorno tras determinadas sentencias ABAP/4 Utilizacin interna (longitud de campo) Posicin del cursor (colu mna) Posicin del cursor (lnea) N mero de la lista de bifurcacin N mero de la lnea de lista actual N mero de la lnea LOOP en step dynpro Indicador para almacenar tabla interna en bloque paging Coordenada de ventana (columna izquierda) Coordenada ventana (lnea izquierda) Coordenada ventana (columna derecha) Coordenada de ventana (lnea derecha) Posicin de cursor en la ventana (columna)

Nombre de Variable
SY-W INRO SY-W INDI SY-SROWS SY-SCOLS SY-LOOPC SY-FOLEN SY-FODEC SY-TZONE SY-DA YST

Descripcin
Posicin de cursor en la ventana (lnea) Indice de la lnea de ventana actual Lneas en la pantalla Colu mnas en la pantalla Cantidad de lneas LOOP en steploop de dynpro Utilizacin interna (longitud de salida de campo) Utilizacin interna (campo posiciones decimales) Diferencia de tiempo con 'Hora med ia de Greenwich' (UTC) Horario de verano activo ?

Lima-Per

Pg ina 72 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SY-FTYPE SY-A PPLI SY-FDA YW SY-CCURS SY-CCURT SY-DEBUG SY-CTYPE SY-INPUT SY-LA NGU SY-M ODNO SY-BATCH SY-BINPT SY-CA LLD SY-DYNNR SY-DYNGR SY-NEWPA SY-PRI40 7SY-RSTRT SY-WTITL SY-CPA GE SY-DBNAM SY-MA NDT SY-PREFX SY-FMKEY SY-PEXPI SY-PRINI SY-PRIMM

Utilizacin interna (t ipo de campo) Aplicaciones SAP Da de semana en el calendario de fbrica Tipo cambio/Campo resultado CURRENCY CONVERT Tipo de cambio en tabla de aplicacin CURRENCY CONVERSION Utilizacin interna Tipo de cambio 'M ','B','G' de CURRENCY CONVERSION Utilizacin interna Clave de idio ma para entrar al Sistema SAP Cantidad de modos alternativos Batch activo (X) Batch input activo (X) Call modo activo (X) N mero de la imagen en pantalla actual Grupo de dynpros del dynpro actual Utilizacin interna Utilizacin interna Utilizacin interna Indicador para cabecera estndar de pgina N mero de pgina actual Base de datos lgica en report ABAP/ 4 N mero de mandante para acceder al Sistema SA P Prefijo ABAP/ 4 para jobs batch Men de cdigos de funciones actual IMPRIMIR: Tiempo de permanencia en SPOOL Utilizacin interna IMPRESION: Salida in med iata

Lima-Per

Pg ina 73 de 230

Nombre de Variable
SY-PRREL SY-PLA YO
www.bizpartner.biz

Descripcin
IMPRESION: Borrar tras salida

CURSO Utilizacin interna

ABAP BASICO

SY-PRBIG SY-PLA YP SY-PRNEW SY-PRLOG SY-PDEST SY-PLIST SY-PAUTH SY-PRDSN SY-PNWPA SY-CA LLR SY-REPI2 SY-RTITL SY-PRREC SY-PRTXT SY-PRABT SY-LPASS SY-NRPA G SY-PAART SY-PRCOP SY-BATZS SY-BSPLD SY-BREP4 SY-BATZO SY-BATZD SY-BATZW SY-BATZM SY-CTABL SY-DBSYS SY-DCSYS SY-MA CDB Lima-Per SY-SYSID

IMPRIMIR: Portada de seleccin Utilizacin interna IMPRESION: Nueva orden SPOOL (lista) Utilizacin interna IMPRIMIR: Dispositivo de salida IMPRESION: No mbre de la orden SPOOL (nombre de lista) Utilizacin interna IMPRIMIR: No mbre del set de datos SPOOL Utilizacin interna IMPRIMIR: ID para funciones de dilogo Utilizacin interna IMPRIMIR: Ttulo de report del programa de imp resin IMPRIMIR: Destinatario IMPRIMIR: Texto para portada IMPRIMIR: Departamento en la portada Utilizacin interna Utilizacin interna IMPRESION: Edicin IMPRIMIR: Cantidad de ejemp lares SUBMIT batch: In mediatamente SUBMIT fondo: Salida de lista en SPOOL SUBMIT fondo: No mbre de raz del report de llamada SUBMIT fondo: Unico SUBMIT fondo: Diario SUBMIT fondo: Semanal SUBMIT fondo: Mensual Tabla de tipo de cambio en CURRENCY CONVERSION SYSTEM: Sistema de base de datos SYSTEM: Sistema de d ilogo PROGRAM : No mbre del fichero para el acceso con matchcode Pg ina 74 de 230 SYSTEM: Identificador del Sistema SAP

CURSO ABAP BASICO


www.bizpartner.biz

Nombre de Variable
SY-TCODE SY-UCOMM SY-CFWAE SY-CHWAE SY-SPONO SY-SPONR SY-WA ERS SY-CDATE SY-DATUM SY-SLSET SY-SUBTY SY-SUBCS SY-GROUP SY-FFILE SY-UZEIT SY-DSNAM SY-REPID SY-TABID SY-TFDSN SY-UNAME SY-LSTAT SY-A BCDE SY-MA RKY SY-SFNAM SY-TNAM E

Descripcin
SESSION: Cdigo de transaccin actual INTERA CT.: Indicar funcin en el cdigo OK Utilizacin interna Utilizacin interna RUNTIM E: N mero SPOOL para salida de una lista RUNTIM E: N mero SPOOL de instruccin TRANSFER T001: Moneda de sociedad tras leer segmento B Fecha de tipo de camb io de CURRENCY CONVS. SYSTEM: Fecha del d a No mbre de SELECTON-SETS ABAP: Forma de llamada en SUBMIT INTERNO: Status call del report INTERNO: Concatenacin INTERNO: Flatfile (USING/ GENERA TING DATASET) SYSTEM: Hora RUNTIM E: No mb re del set de datos para salida en SPOOL PROGRAM : No mbre de un programa A BAP/4 Utilizacin interna RUNTIM E: No mb re del set de datos para extractos de datos SESSION: No mbre de usuario segn entrada a SAP INTERA CT.: Informacin de status por nivel de lista CONSTANT: A lfabeto (A,B,C,...) Letra de lnea actual para MA RK Sin utilizar No mbre de la tabla interna despus de un acceso

Lima-Per

Pg ina 75 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SY-M SGLI SYTITLE SY-ENTRY SY-LISEL SY-ULINE SY-XCODE SY-CPROG SY-XPROG SY-XFORM SY-LDBPG SY-TVA R0

INTERA CT.: Lnea de mensaje (lnea 23) PROGRAM : Ttulo del programa A BAP/4 Utilizacin interna INTERA CT.: Lnea seleccionada CONSTANT: Lnea de subrayado (____________...) Cdigo OK amp liado RUNTIM E: Programa principal Utilizacin interna (p rograma SYSTEM -EXIT) Utilizacin interna (form SYSTEM -EXIT) PROGRAM : Programa A BAP/4 de base de datos para SY-DBNAM RUNTIM E: Var. de texto para elementos de texto ABAP/4

Nombre de Variable

Descripcin

SY-TVA R1 SY-TVA R2 SY-TVA R3 SY-TVA R4 SY-TVA R5 SY-TVA R6 SY-TVA R7 SY-TVA R8 SY-TVA R9 SY-M SGID SY-M SGTY SY-M SGNO SY-M SGV1 SY-M SGV2

RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 RUNTIM E: Variable de texto para elementos de texto ABAP/ 4 ID de mensaje Tipo de mensaje (E,I,W,etc.) N mero del mensaje Variable en mensaje Variable en mensaje

Lima-Per

Pg ina 76 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SY-M SGV3 SY-M SGV4 SY-ONCOM SY-VLINE SY-W INSL SY-STA CO SY-STA RO SY-DATAR SY-HOST SY-LOCDB SY-LOCOP SY-DATLO SY-TIM LO SY-TSTLO SY-ZONLO SY-DATUT SY-TIM UT SY-TSTUT

Variable en mensaje Variable en mensaje INTERNO: On Co mmit Flag CONSTANT: raya vertical INTERA CT.: Lnea en ventana seleccionada INTERA CT.: Lista visualizada a partir de la colu mna INTERA CT.: Lista visualizada a partir de lnea Indicador: Datos recibidos No mbre de la mquina Existe base de datos local Operacin local en base de datos Fecha local, en relacin con el usuario Hora local, en relacin con el usuario Crono marcador (fecha y hora), en relacin con el usuario Huso horario del usuario Fecha global, en relacin con UTC Hora global, en relacin con UTC Crono marcador (fecha y hora), en relacin con UTC

Tablas internas

5.1 Registros
Declaramos registros de la siguiente manera: DATA: B EGIN OF <registro>, .... END OF <registro>. Se utiliza la sentencia DATA y ser marca el principio y el final de la agrupacin con las clusulas BEGIN OF y END OF. Existe una variante para declarar tablas internas DATA <tabl a> <ti po> [ WITH HEADER LINE ].

Lima-Per

Pg ina 77 de 230

CURSO ABAP BASICO


www.bizpartner.biz

En la opcin <t ipo> se puede referenciar un tipo de dato de tabla interna con la clusula TYPE o una tabla interna con la clusula LIKE. El objeto de dato <tabla> ser creado con la misma estructura que la referenciada en <tipo>. Si utilizamos la clusula WITH HEADER LINE la tabla interna se crea con el rea de trabajo <tabla>. El rea de trabajo y la tabla interna tienen el mis mo nomb re. En funcin de la sentencia que estemos utilizando, el sistema sabe si queremos emplear el rea de trabajo o la tabla.

DATA <tabla> <ti po> OCCURS <n> [ WITH HEADER LINE ]. La sentencia anterior crea la tabla interna <tabla> por el uso de la clusula OCCURS. en la opcin <tipo> se especifica una estructura. Las lneas de la tabla interna tendrn la estructura referenciada en <tipo>. <n> tiene el mis mo significado que para los tipos de datos de tablas internas, visto en la sentencia types.

Si utilizamos la clusula WITH HEADER LINE la tabla se crea con el rea de trabajo <tabla>.
DATA: B EGIN OF <tabla> OCCURS <n>, .... END OF <tabl a>.

Con la sentencia anterior definimos la tabla interna <tabla>. Los componentes de la lnea de la tabla interna se definen entre las clusula BEGIN OF y END OF. Esta sentencia siempre crea un rea de trabajo. <n> tiene el mismo significado que el visto anteriormente.
Ejempl o X.2 Tabla interna. TYPES: B EGIN OF ES TRUCTURA, COLUMNA1 TYPE I, COLUMNA2 TYPE I, COLUMNA3 TYPE I, END OF LINE. DATA: TAB LITA TAB LE OF ES TRUCTURA WITH HEADER LINE.

Ejempl o X.2 Tabla interna. DATA: B EGIN OF TIPO_CLIENTE, NOMBRE(20 ), EDAD TYPE I, END OF TIPO_ CLIENTE, PERSONA LIKE TIPO_ CLIENTE OCCURS 20 WITH HEADER LINE.

Lima-Per

Pg ina 78 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o X.2 Tabla interna. TYPES: BEGIN OF W_TABLA, CODIGO_RUTA(4) TYPE C, TARIFA TYPE I, PARTIDA(15) TYPE C, "CIUDAD DE PARTIDA HORA_PARTIDA TYPE T, FECHA_PARTIDA TYPE D, LLEGADA(15) TYPE C, HORA_LLEGADA TYPE T, FECHA_LLEGADA TYPE D, END OF W_TABLA. TYPES: T_TABLA TYPE TABLE OF W_TABLA. DATA: TABLA TYPE T_TABLA WITH HEADER LINE.

5.2 Recorrido de una tabla interna


Podemos recorrer una tabla interna con la instruccin LOOP .. ENDLOOP LOOP AT <indicetabl a> ( WHERE <cond>). ENDLOOP. En cada iteracin coloca la lnea de la tabla que se est procesando en la lnea de cabecera. Podemos restringir el p roceso de una tabla con una condicin WHERE. Si no existe ningn registro de la tabla que cump la la condicin especificada en la clusula WHERE, la variable del sistema S Y-S UBRC ser d istinta que 0. Dentro del LOOP, la variable S Y-TAB IX contiene el nd ice de la entrada que est procesando en ese mo mento. Tamb in es posible hacer un: LOOP AT<intab> FROM <inicio> TO <fin>. ENDLOOP. Donde <in icio> y <fin > son ndices de la tabla interna. Ejempl o X.2 Tablas internas con INTO TABLE. REPORT ZTABLAS01_ANIB AL. TABLES S FLIGHT. TYPES: B EGIN OF ES T_ TAB LA, CARRID LIKE S FLIGHT-CARRID, CONNID LIKE S FLIGHT-CONNID, FLDATE LIKE S FLIGHT-FLDATE,

Lima-Per

Pg ina 79 de 230

CURSO ABAP BASICO


www.bizpartner.biz

END OF ES T_TAB LA. *DATA TAB LITA TYPE STANDARD TAB LE OF ES T_ TAB LA WITH HEADER LINE. DATA TABLITA TYPE TAB LE OF ES T_ TAB LA WITH HEAD ER LINE. SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TAB LE TAB LITA. LOOP AT TABLITA. WRITE: / TABLITA-CARRID, TAB LITA-CONNID, TAB LITA-FLDATE. ENDLOOP.

Ejempl o X.2 Tablas internas con SELECT .ENDSELECT.


REPORT ZTABLAS02_ANIBAL TABLES SFLIGHT. TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE. SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDSELECT. .

NUMERO DE REGISTROS DE UNA TABLA INTERNA


DESCRIBE TABLE <Ttabla interna> LINES n.
El valo r de n (t ipo entero) nos devuelve el n mero de lineas llenas de la tabla. El t iempo de ejecucin de DESCRIBE TA BLE es apro ximadamente de 4 microsegundos.
REPORT ZTABLAS09_ANIBAL . DATA v_count TYPE i. TYPES: BEGIN OF ESTRUCTURA1 ,

Lima-Per

Pg ina 80 de 230

CURSO ABAP BASICO


www.bizpartner.biz

PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'. APPEND TABLA1. DESCRIBE TABLE tabla1 LINES v_count. WRITE: 'Nmero de registros: ', v_count.

Tambien se puede usar la variable interna S Y-TFILL, pero tendr efecto solo cuando se invoque despus de haber realizado un loop a la tabla int erna.
REPORT ZTABLAS09_ANIBAL . DATA v_count TYPE i. TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'. APPEND TABLA1. WRITE: / 'Nmero de registros, antes del loop: ', sy-tfill. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO, TABLA1-TERCER_CAMPO. ENDLOOP. WRITE: / 'Nmero de registros, despues del loop: ', sy-tfill.

Lima-Per

Pg ina 81 de 230

CURSO ABAP BASICO


www.bizpartner.biz

5.3 Operaciones con tablas internas


5.3.1 Move
Asigna un literal o el contenido de un campo fuente sobre un campo . MOVE <c1 > [ + <o1> ] [ (<l1>) ] TO <c2> [ + <o2 > ] [ (<l2>) ]. Esta sentencia transporta el contenido del campo <c1>, el cual puede se cualquier objeto de dato, sobre el campo <c2>, el cual debe ser una variable. <c2> no puede ser una constante o un literal. El contenido de <c1> permanece sin camb ios. MOVE <campo1 > TO <campo2> PERCENTAGE <p> [ RIGHT ]. Copia el porcentaje <p> izquierdo del campo <campo1> sobre <campo2>. Sin indicamos la clusula RIGHT ser la parte derecha del campo <campo1> la que ser movida al campo <campo2>. MOVE <campo1 > TO <campo2> <tabla1> y <tabla2> son las reas de trabajo de las tablas internas. Si una tabla interna tiene rea de trabajo, rea y tabla tienen el mis mo no mbre, para poder distinguirlos se utilizan los corchetes ( [ ] ). Con los corchetes ser el contenido de la tabla interna el que se copiar, en lugar del rea de trabajo. La sentencia MOVE copia el contenido de la primera tabla interna (o rea de trabajo) especificada sobre la segunda tabla interna ( o rea de trabajo). Las tablas utilizadas pueden tener como co mponentes a su vez tablas internas. El contenido de <tabla2> se sobrescribe.

OBSERVACION
MANEJ O DE MOVE CON [] S E MUEV EN TODOS. EJ EMPLO REPORT ZTABLAS09_ANIBAL .

TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. DATA TABLA2 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO3'.

Lima-Per

Pg ina 82 de 230

CURSO ABAP BASICO


www.bizpartner.biz

TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'. APPEND TABLA1. MOVE TABLA1[] TO TABLA2[]. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO. ENDLOOP. ULINE. LOOP AT TABLA2. WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO. ENDLOOP.

Variante:
Que sucede cuando el ancho de uno de los campos de la tabla destino es menor qe el campo origen correspondiente? Funciona?
REPORT ZTABLAS09_ANIBAL .

TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WI TH HEADER LINE. *DATA TABLA2 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TYPES: BEGIN OF ESTRUCTURA2 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(4) TYPE C, END OF ESTRUCTURA2. DATA ESTRUCTURA2A TYPE ESTRUCTURA2. DATA TABLA2 LIKE TABLE OF ESTRUCTURA2A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'.

Lima-Per

Pg ina 83 de 230

CURSO ABAP BASICO


www.bizpartner.biz

APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO3'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'. APPEND TABLA1. MOVE TABLA1[] TO TABLA2[]. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO, TABLA1-TERCER_CAMPO. ENDLOOP. ULINE. LOOP AT TABLA2. WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO, TABLA2-TERCER_CAMPO. ENDLOOP.

Si. Pero se recorta el te rcer campo.

Cuando en el destino hay un campo dems.


REPORT ZTABLAS09_ANIBAL .

TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. *DATA TABLA2 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TYPES: BEGIN OF ESTRUCTURA2 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, CUARTO_CAMPO(7) TYPE C, END OF ESTRUCTURA2. DATA ESTRUCTURA2A TYPE ESTRUCTURA2. DATA TABLA2 LIKE TABLE OF ESTRUCTURA2A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'.

Lima-Per

Pg ina 84 de 230

CURSO ABAP BASICO


www.bizpartner.biz

APPEND TABLA1. MOVE TABLA1[] TO TABLA2[]. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO, TABLA1-TERCER_CAMPO. ENDLOOP. ULINE. LOOP AT TABLA2. WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO, TABLA2-TERCER_CAMPO, TABLA2-CUARTO_CAMPO. ENDLOOP.

El campo destino queda vacio. Siempre y cuando los otros campos tengan el mismo ancho en las dos tablas.

Cuando existe un campo demas en la tabla destino, y los anchos no son los mis mos. Puede generar error.
REPORT ZTABLAS09_ANIBAL .

TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. *DATA TABLA2 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TYPES: BEGIN OF ESTRUCTURA2 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(4) TYPE C, CUARTO_CAMPO(7) TYPE C, END OF ESTRUCTURA2. DATA ESTRUCTURA2A TYPE ESTRUCTURA2. DATA TABLA2 LIKE TABLE OF ESTRUCTURA2A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'.

Lima-Per

Pg ina 85 de 230

CURSO ABAP BASICO


www.bizpartner.biz

TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'. APPEND TABLA1. MOVE TABLA1[] TO TABLA2[]. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO, TABLA1-TERCER_CAMPO. ENDLOOP. ULINE. LOOP AT TABLA2. * WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO, * TABLA2-TERCER_CAMPO, TABLA2-CUARTO_CAMPO. WRITE: / TABLA2-CUARTO_CAMPO. ENDLOOP.

El campo vacio se llena con los valores sobrantes del campo anterior (sie mpre que el ancho sea mas angosto que su equivalente en la tabla origen).

Equivalentes

MOVE <var1> TO <var2>. <f4>=<f3>=<f2>=<f1>

<var2> = <var1>. MOVE <F1> TO <f2>. MOVE <F2> TO <f3>. MOVE <F3> TO <f4>. Tambin es posible referenciar o asignar valores a una parte de la variable utilizando el offset.
VARIABLE+offset(longitud)

Ejemplo:

DATA: VARI(15) VALUE 'RIVERLAND BCN.', VAR2(15) VALUE 'HOLA'. MOVE VARI+10(4) TO VAR2+5(4). WRITE VAR2. HOLA BCN.

Resultado:

VAR1 R I V E R L A N D VAR2 H O L A

B C N .

Lima-Per

Pg ina 86 de 230

CURSO ABAP BASICO


www.bizpartner.biz

MOVE VAR1+10(4) TO VAR2+5(4). VAR2 H O L A B C N .

MOVE-CORRESPON DING

Se utiliza para copiar los datos de un componente field-string sobre otro componente field-string.
Sintaxis:

MOVE-CORRESPONDING <string1> TO <string2>.

Asigna el contenido de los componentes del registro <string1> sobre los componentes del registro <string2> que se llamen igual. Por cada para de nombres coincidentes el sistema ejecuta una sentencia MOVE, adems realiza todos los tipo de conversin necesarios de forma separada.

Ejemplo: DATA: BEGIN OF ADDRESS, FIRSTNAME(20) VALUE 'Fred', SURNAME(20) VALUE 'Flintstone', INITIALS(4) VALUE 'FF', STREET(20) VALUE 'Cave Avenue, NUMBER TYPE I VALUE '11'. POSTCODE TYPE N VALUE '98765'. CITY(20) VALUE 'Bedrock', END OF ADDRESS. DATA: BEGIN OF NAME, SURNAME(20), FIRSTNAME(20), INITIALS(4), TITLE(10) VALUE 'Mister', END OF NAME. MOVE-CORRESPONDING ADDRESS TO NAME.

Lima-Per

Pg ina 87 de 230

CURSO ABAP BASICO


www.bizpartner.biz

5.3.2 Clear
Con la sentencia CLEAR se puede inicializar, o la lnea de cabecera de la tabla, o el contenido de la tabla. CLEAR <campo>. Esta sentencia inicia el contenido del objeto de datos <campo> a sus valores iniciales por defecto. Se puede distinguir entre los siguientes casos: Tipos de datos elementales. El sistema inicia el valor del campo <campo > a su valor por defecto, no el valor inicial asignado con la sentencia DATA, con la clusula VA LUE. las constantes no se pueden iniciar. En una tabla interna se inicia el rea de trabajo de la tabla interna, y no su contenido. CLEAR <tabla> | <tabl a> []. Con la <tabla> inicializamos la lnea de cabecera de la tabla. Co n <tabla> [ ] vaciamos el contenido de la tabla interna.

Ejempl o X.2 Uso de CLEA R. DATA: TEXTo(10) VALUE ' Hello', NUMERO TYPE I VALUE 12345, B EGIN OF PLAYER, NUMERO(10) VALUE 'John', TEL EFONO(8) TYPE N VALUE '08154711', DINERO TYPE P VALUE 30000, END OF PLAYER. CLEAR: TEXTO, NUMERO, PLAYER. Tendremos: TEXTO = ' ' NUMERO = 0 PLAYER-NOMBRE = ' ' PLAYER-TEL EFONO = '00000000' PLAYER-DINERO = 0

5.3.3 Refresh
Se utiliza para in icializar una tabla, con o sin lnea de cabecera. REFR ES H <tabla>. Despus de procesar el sistema esta sentencia, la tabla interna no contiene ninguna lnea.

5.3.4 Free

Lima-Per

Pg ina 88 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Se utiliza para liberar el espacio de memo ria que se reserva despus de utilizar las sentencias REFRESH o CLEA R. FREE <tabl a>. Ejempl o X.2 Uso de WRITE. REPORT EJ EMPLO. DATA: B EGIN OF EL_ REGIS TRO, COLUMNA1, COLUMNA2, END OF EL_REGIS TRO. DATA INDICE_ TABLA LIKE TABLE OF EL_REGIS TRO. EL_ REGIS TRO-COLUMNA1 = 'A'. EL_ REGIS TRO-COLUMNA2 = 'B'. APPEND EL_ REGIS TRO TO INDICE_ TABLA. REFRES H INDICE_ TAB LA. IF INDICE_TAB LA IS INITIAL. WRITE ' TAB LA ES TA VACIA'. FREE INDICE_ TAB LA. ENDIF.

5.4 Comparacin entre tablas internas


Se puede utilizar los siguientes operandos entre tablas internas. EQ, =, NE, <>, ><, GE, >=, LE, <=, GT, >, LT, <. Considerando que en las tablas internas con cabecera de linea, el cuerpo y la linea de cabecera tienen el mis mo nombre. En estos casos si se desea direccionar el cuerpo de la tabla en una comparacin debe utilizarse ([]) despus del nombre de la tabla. En las comparaciones primero hay que considerar el numero de lneas que estas contienen. Si dos tablas tienen el mis mo numero de lneas entonces las comparaciones se realizan lnea por lnea, co mponente por componente

Ejempl o X.2 Uso de WRITE. REPORT ZZZ. DATA: B EGIN OF REGIS TRO, COLUMNA1 TYPE I, COLUMNA2 TYPE I, END OF REGIS TRO. DATA: ITAB LIKE TAB LE OF REGIS TRO, JTAB LIKE TABLE OF REGIS TRO. DO 3 TIMES . REGISTRO-COLUMNA1 = S Y-INDEX.

Lima-Per

Pg ina 89 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REGISTRO-COLUMNA2 = S Y-INDEX ** 2. APPEND REGIS TRO TO ITAB. ENDDO. MOVE ITAB TO J TAB. REGISTRO-COLUMNA1 = 10. REGISTRO-COLUMNA2 = 20. APPEND REGIS TRO TO ITAB. IF ITAB GT J TAB . WRITE / ' ITAB ES MAYOR QUE J TAB'. ENDIF.

TRABAJANDO CON LOOP... ENDLOOP Y READ TABLE....


DATA: B EGIN OF TABLA OCCURS 10, COLUMNA1 TYPE I, COLUMNA2 TYPE I, END OF TAB LA. DO 30 TIMES. TAB LA-COLUMNA1 = S Y-INDEX. TAB LA-COLUMNA2 = S Y-INDEX * S Y-INDEX. APPEND TABLA. ENDDO.

Lima-Per

Pg ina 90 de 230

CURSO ABAP BASICO


www.bizpartner.biz

LOOP AT TA BLA. WRITE: / SY-TABIX, TA BLA-COLUM NA2. ENDLOOP. ULINE. LOOP AT TA BLA WHERE COLUM NA2 BETW EEN 200 AND 300. WRITE: / SY-TABIX, TA BLA-COLUM NA2. ENDLOOP. ULINE. LOOP AT TA BLA FROM 10 TO 25 WHERE COLUMNA 2 > 400. WRITE: / SY-TABIX, TA BLA-COLUM NA2. ENDLOOP. ULINE. LOOP AT TA BLA WHERE COLUM NA2 > 400. WRITE: / SY-TABIX, TA BLA-COLUM NA2. ENDLOOP. ULINE. LOOP AT TA BLA WHERE COLUM NA2 = 123. WRITE: / SY-TABIX, TA BLA-COLUM NA2. ENDLOOP. WRITE / SY-SUBRC. "sy-subrc = 4 cuando no encuentra el reg istro. ULINE. READ TABLE TA BLA INDEX 7. WRITE: / SY-SUBRC, SY-TABIX, TA BLA-COLUM NA2. READ TABLE TA BLA INDEX 31. WRITE: / SY-SUBRC. "con indice 31 n o existe.

Lima-Per

Pg ina 91 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 92 de 230

CURSO ABAP BASICO


www.bizpartner.biz

5.5 Ordenamiento
Para ordenar una tabla interna utilizamos SORT. SORT <intab>. Esta instruccin realiza una ordenacin por la estructura de la tabla sin tener en cuenta los campos P,I,F. Para ordenar por el campo(s) que necesitemos (sea del tipo que sea): SORT <intab> B Y <campo1> .... <campo n>. Si no se indica lo contrario, la ordenacin por defecto es ascendente. Con la clusula BY los campos se ordenarn de acuerdo con los componentes especificados <campo1> ... <campon>. Para ordenar descendentemente se escribe DESCENDING.

5.6 Llenado de una tabla interna APPEND


Aade un registro a una tabla interna con los valores que tengamos en el rea de trabajo. Aade registros al final de una tabla interna. APPEND <intab>.
DATA: BEGIN OF TABLA OCCURS 10, COLUMNA1 TYPE C, COLUMNA2 TYPE I, END OF TABLA. APPEND INITIAL LINE TO TABLA. DO 3 TIMES. TABLA-COLUMNA1 = SY-INDEX. TABLA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLA. ENDDO. LOOP AT TABLA. WRITE:/ TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP.

1 2 3

O 1 4 9

Lima-Per

Pg ina 93 de 230

CURSO ABAP BASICO


www.bizpartner.biz

COLLECT
Aade o suma la lnea de cabecera de una tabla interna co mparando los campos de tipo carcter. Su mar todos los campos de tipo P, F, I. El collect funciona no con un campo "clave", pero debes tener la p recaucion de: Poner todos los campos "clave" los primeros de la tabla interna, p ej: el n de factura, la fecha, etc y los ultimos campos de la tabla interna sera los campos a sumarizar. Hacer un sort de la tabla interna antes de recorrerla y hacer el collect. debes ordenar los registros de la tabla interna con el mis mo patron que quieras que luego te sumarize los campos. p ej: sort itab by n_factura fecha ....

El problema de esta instruccin es que es bastante lenta. Se puede sustituir por las instrucciones REA D e INSERT o M ODIFY. Podemos llenar una tabla interna con el contenido de una tabla de base de datos. Siempre que la tabla interna tenga la misma estructura que la tabla de base de datos. SELECT * FROM <tab> INTO TAB LE <tabint>. Se debe usar solo la declaracin COLLECT si se desea crear tablas sumarizadas. Si se usa otras declaraciones para insertar entradas a la tabla, se podra tener entradas duplicadas.
REPORT EJEMPLO. DATA: BEGIN OF TABLA OCCURS 10, COL1(3) TYPE C, COL2(2) TYPE N, COL3 TYPE I, END OF TABLA. TABLA-COL1 = 'abc'. TABLA-COL2 = '12'. TABLA-COL3 = 3. COLLECT TABLA. TABLA-COL1 = 'def'. TABLA-COL2 = '34'. TABLA-COL3 = 5. COLLECT TABLA. TABLA-COL1 = 'abc'. TABLA-COL2 = '12'. TABLA-COL3 = 7. COLLECT TABLA. LOOP AT TABLA. WRITE:/ TABLA-COL1, TABLA-COL2, TABLA-COL3. ENDLOOP.

abc def

12 34

10 5

Lima-Per

Pg ina 94 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT EJEMPLO. TYPES: BEGIN OF COMPANY, N AME(20) TYPE C, SALES TYPE I, END OF COMPAN Y. DATA: COMP TYPE COMPANY OCCURS 10 WITH HEADER LINE. * Ingresamos valores al rea de trabajo y luego a la tabla interna. COMP-N AME = 'Tiger'. COMP-SALES = 20. COLLECT COMP. COMP-N AME = 'Duck'. COMP-SALES = 30. COLLECT COMP. COMP-N AME = 'Tiger'. COMP-SALES = 60. COLLECT COMP. LOOP AT COMP. WRITE:/ COMP-N AME, COMP-SALES. ENDLOOP.

Tiger Duck

80. 30.

Observaciones sobre collect y append.


REPORT EJEMPLO. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTR YFR, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT COUNTRYFR FLTIME Into TABLITA From SPFLI. Append TABLITA. *****COLLECT TABLITA. ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 51 TABLITA-FLTIME. ENDLOOP.

Lima-Per

Pg ina 95 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT COUNTRYFR FLTIME Into TABLITA From SPFLI. **** Append TABLITA. COLLECT TABLITA. ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 51 TABLITA-FLTIME. ENDLOOP.

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR, CITYFROM LIKE SPFLI-CITYFROM, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT COUNTRYFR CITYFROM FLTIME Into TABLITA From SPFLI. * Append TABLITA. COLLECT TABLITA. ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 35 TABLITA-CITYFROM, 51 TABLITA-FLTIME. ENDLOOP.

AHORA CON OTRO CAMPO MAS: COUNTRYFR CITYFROM

Lima-Per

Pg ina 96 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR, CITYFROM LIKE SPFLI-CITYFROM, FLTIME LIKE SPFLI-FLTIME, AIRPFROM LIKE SPFLI-AIRPFROM, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT COUNTRYFR CITYFROM FLTIME AIRPFROM Into TABLITA From SPFLI. * Append TABLITA. COLLECT TABLITA. ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 35 TABLITA-CITYFROM, 51 TABLITA-FLTIME, 71 TABLITA-AIRPFROM. ENDLOOP.

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT COUNTRYFR FLTIME Into TABLITA From SPFLI. **** Append TABLITA. ENDSELECT.
COLLECT TABLITA.

LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 51 TABLITA-FLTIME. ENDLOOP.

Lima-Per

Pg ina 97 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT COUNTRYFR FLTIME Into TABLITA From SPFLI.
APPEND TABLITA.

*****COLLECT TABLITA. ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 51 TABLITA-FLTIME. ENDLOOP.

Lima-Per

Pg ina 98 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLICOUNTRYFR, CITYFROM LIKE SPFLI-CITYFROM, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. AHORA CON OTRO DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH CAMPO MAS: HEADER LINE. COUNTRYFR CITYFROM SELECT COUNTRYFR CITYFROM FLTIME Into TABLITA From SPFLI. FLTIME * APPEND TABLITA.
COLLECT TABLITA.

ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR, 35 TABLITA-CITYFROM, 51 TABLITA-FLTIME. ENDLOOP.

Lima-Per

Pg ina 99 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Report ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, CARRID LIKE SPFLI-COUNTRYFR, COUNTRYFR LIKE SPFLI-COUNTRYFR, FLTIME LIKE SPFLI-FLTIME, CITYFROM LIKE SPFLI-CITYFROM, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE. SELECT CARRID COUNTRYFR FLTIME CITYFROM Into TABLITA From SPFLI. *APPEND TABLITA.
COLLECT TABLITA.

ENDSELECT. LOOP AT TABLITA. WRITE : /21 TABLITA-CARRID, 35 TABLITA-COUNTRYFR, 51 TABLITA-FLTIME, 71 TABLITA-CITYFROM. ENDLOOP.

Lima-Per

Pg ina 100 de 230

CURSO ABAP BASICO


www.bizpartner.biz

PROGRAMA:
REPORT ZEJTABLASINTERNAS .

DATA: BEGIN OF TABLA OCCURS 10, COLUMNA1 TYPE C, COLUMNA2 TYPE I, END OF TABLA. *APPEND INITIAL LINE TO TABLA. DO 3 TIMES. TABLA-COLUMNA1 = SY-INDEX. TABLA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLA. ENDDO. LOOP AT TABLA. WRITE: / TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP.

CON: APPEND INITIAL LINE TO TABLA.

SI EN LUGAR DE: LOOP AT TABLA, ESCRIBO: LOOP AT TABLA INTO LINEA. GENERA ERROR, POR QUE?

Lima-Per

Pg ina 101 de 230

CURSO ABAP BASICO


www.bizpartner.biz

NO FUNCIONA: PORQUE?
REPORT ZEJTABLASINTERNAS. //SIMILAR AL PROBLEMA ANTERIOR, //SOLO LE QUITAMOS OCCURS 10 //DESPUES DE BEGIN OF TABLA.

DATA: BEGIN OF TABLA, COLUMNA1 TYPE C, COLUMNA2 TYPE I, END OF TABLA.

DO 3 TIMES. TABLA-COLUMNA1 = SY-INDEX. TABLA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLA. ENDDO. LOOP AT TABLA. WRITE: / TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP.

MENSAJ E DE ERROR: TABLITA is not an internal table the OCCURS n specification is missing.

EXPLICACION Y SOLUCION: TABLITA ya no es una tabla, solo es una estructura. Se necesita un dato tipo tabla TABLITA1 que se enlace a la estructura TAB LITA, mediante:
DATA TABLITA1 LIKE TABLE OF TABLITA. Adems APPEND sufre una modificacin, se debe agregar la estructura a la tabla, mediante: APPEND TABLITA TO TABLITA1. El loop se hace a la tabla dentro de la estructura, mediante: LOOP AT TABLITA1 INTO TABLITA. REPORT ZEJTABLASINTERNAS.

DATA: BEGIN OF TABLITA, COLUMNA1 TYPE C, COLUMNA2 TYPE I, END OF TABLITA. DATA TABLITA1 LIKE TABLE OF TABLITA. DO 3 TIMES. TABLITA-COLUMNA1 = SY-INDEX. TABLITA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLITA TO TABLITA1. ENDDO. LOOP AT TABLITA1 INTO TABLITA. WRITE: / TABLITA-COLUMNA1, TABLITA-COLUMNA2. ENDLOOP.

Lima-Per

Pg ina 102 de 230

CURSO ABAP BASICO


www.bizpartner.biz

5.7 Lectura de una tabla interna


Podemos buscar un registro concreto en una tabla sin necesidad de reco rrerla. READ TABLE <intab>. Para ello, en primer lugar rellenaremos la lnea de cabecera con la clave de bsqueda y luego haremos el READ. El resultado de la bsqueda lo tendremos en SY-S UB RC.

Si: SY-SUBRC = 0 , la bsqueda ha sido positiva.


Si: SY-SUBRC <> 0 , no ha encontrado el registro solicitado. Existen otras extensiones a la instruccin READ que necesitarn que la tabla est ordenada. Podemos buscar por clave con: READ TAB LE <intab> WHIT KEY <cl ave>. No necesita llenar la lnea de cabecera. Buscar desde el inicio de la tabla qu carcter a carcter coincida con la clave. Es posible una bsqueda an ms rpida con una bsqueda binaria. READ TABLE <intab> WITH KEY <clave> B INARY S EARCH. Una lectura d irecta de un registro de la tabla la podemos realizar con: READ TABLE <intab> INDEX <num>.

5.8

Insercin de registros
INS ERT <tabl a> [ INDEX <ndice> ].

Se utiliza INSERT para insertar lneas en una tabla interna antes de una posicin determinada.

INDEX , inserta una lnea antes de la posicin indicada en <ndice> y la nueva tiene el ndice <ndice>. Si se produce algn error al insertar la lnea la variable SY-SUBRC valdr 4, en caso contrario valdr 0. Si la sentencia se utiliza sin la clusula INDEX slo se podr utilizar en un LOOP .. ENDLOOP. El sistema insertara la lnea antes de la lnea tratada en el bucle. INS ERT LINES OF <tabl a1> [ FROM <n1 > ] [ TO <n2> ] INTO <tabla2 > [ INDEX <ndice> ] Si no se especifican las clusulas FROM <n1> y TO <n 2> la tabla <tabla1> se inserta entera sobre la tabla <tabla2>. Especificando estas clusulas se puede indicar la primera y la ltima lnea que se va insertar. <n 1> y <n2> son ndice de la tabla interna. Si especificamos la clusula INDEX <ndice>, la lnea se insertar antes de la lnea con el ndice <ndice>. Si la sentencia INSERT se utiliza sin la clusula INDEX slo se podr ser utilizada en un bucle LOOP .. ENDLOOP.

Lima-Per

Pg ina 103 de 230

CURSO ABAP BASICO


www.bizpartner.biz

El sistema inserta la lnea tratada en el bucle. Despus de ejecutarse la sen tencia la variable del sistema SY-TABIX tiene el ndice de la ltima lnea aadida. Dependiendo del tamao de la tabla interna que hay que copiar, con este mtodo el proceso en 20 veces ms rp ido que insertarlas lnea a lnea. La sentencia INSERT puede ser utilizada para insertar una o varias lneas (a partir de una tabla interna) en una tabla de la base de datos. Si no sabemos si la clave primaria existe, se debe utilizar la sentencia MODIFY. Se puede utilizar una vista como especificacin de tabla, siemp re y cuando la vista haga referencia a una sola tabla.
DATA : BEGIN OF TABLA OCCURS 10, COLUMNA1 TYPE C, COLUMNA2 TYPE I, END OF TABLA. INSERT INITIAL LINE INTO TABLA INDEX 1. TABLA-COLUMNA1 ='A'. TABLA-COLUMNA1 ='B'. TABLA-COLUMNA2 = 3. TABLA-COLUMNA2 = 5. INSERT TABLA INDEX 2. INSERT TABLA INDEX 2.

LOOP AT TABLA. WRITE:/ TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP.

B A

0 5 3

REPORT SS1. DATA: BEGIN OF TABLA OCCURS 10, COLUMNA1 TYPE C, COLUMNA2 TYPE I, END OF TABLA. TABLA-COLUMNA1 = 'A'. TABLA-COLUMNA2 = 3. INSERT TABLA INDEX 1. TABLA-COLUMNA1 = 'B'. TABLA-COLUMNA2 = 5. INSERT TABLA INDEX 2. LOOP AT TABLA. WRITE: / TABLA-COLUMNA1, 11 TABLA-COLUMNA2. ENDLOOP.

Lima-Per

Pg ina 104 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o de Read Table

REPORT EJEMPLO. DATA: BEGIN OF CLIENTE OCCURS 10, NOMBRE(15) TYPE C, DNI(8) TYPE C, SALDO TYPE I, END OF CLIENTE. CLIENTE-NOMBRE ='Alex Ramirez'.CLIENTE-DNI = '23498764'. CLIENTE-SALDO = 4500. COLLECT CLIENTE. CLIENTE-NOMBRE ='Carlos Rojas'.CLIENTE-DNI = '84560937'. CLIENTE-SALDO = 6500. COLLECT CLIENTE. CLIENTE-NOMBRE ='Alfredo Segovia'.CLIENTE -DNI = '78345908'. CLIENTE-SALDO = 7500. COLLECT CLIENTE. CLIENTE-NOMBRE ='Alberto Rojas'.CLIENTE-DNI = '67548093'. CLIENTE-SALDO = 8500. COLLECT CLIENTE.
*Lee el registro de la tabla interna CLIENTE y lo coloca en el rea de trabajo CLIENTE. *para luego ser mostrado por pantalla con el WRITE.

READ TABLE CLIENTE INDEX 3. WRITE: CLIENTE-NOMBRE, CLIENTE-DNI, CLIENTE-SALDO. READ TABLE CLIENTE WITH TABLE KEY

NOMBRE = 'Carlos Rojas' DNI = '84560937'.

WRITE:/ CLIENTE-NOMBRE, CLIENTE-DNI, CLIENTE-SALDO.

Alfredo Segovia Carlos Rojas

78345908 84560937

7500. 6500.

Lima-Per

Pg ina 105 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o de Sum
REPORT EJEMPLO. DATA: BEGIN OF LINEA, COL1 TYPE I, COL2 TYPE I, END OF LINEA, TABLA LIKE LINEA OCCURS 10. DO 3 TIMES. LINEA-COL1 = SY-INDEX. LINEA-COL2 = SY-INDEX ** 2. APPEND LINEA TO TABLA. ENDDO. LOOP AT TABLA INTO LINEA. "Area de trabajo LINEA. WRITE: / LINEA-COL1, LINEA-COL2. ENDLOOP. ULINE. LOOP AT TABLA INTO LINEA. "Area de trabajo LINEA. WRITE: / LINEA-COL1, LINEA-COL2. SUM. "Presenta el registro y la suma total por linea. WRITE: / LINEA-COL1, LINEA-COL2. ENDLOOP.

Lima-Per

Pg ina 106 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejempl o de Sort
REPORT ZPROCESO_42 . DATA: BEGIN OF TABLA OCCURS 10, PAIS(3) TYPE C, NOMBRE(10) TYPE C, EDAD TYPE I, PESO TYPE P DECIMALS 2, END OF TABLA.

TABLA-PAIS = 'USA'. TABLA-NOMBRE = 'Peter'. TABLA-EDAD = 20. TABLA-PESO = 70. APPEND TABLA. TABLA-PAIS = 'ES'. TABLA-NOMBRE = 'Jos'. TABLA-EDAD = 25. TABLA-PESO = 74. APPEND TABLA. TABLA-PAIS = 'GB'. TABLA-NOMBRE = 'Juan'. TABLA-EDAD = 18. TABLA-PESO = 55. APPEND TABLA. TABLA-PAIS = 'MEX'. TABLA-NOMBRE = 'Maria'. TABLA-EDAD = 32. TABLA-PESO = 56. APPEND TABLA. TABLA-PAIS = 'ITL'. TABLA-NOMBRE = 'Giovanna'. TABLA-EDAD = 28.

Lima-Per

Pg ina 107 de 230

CURSO ABAP BASICO


www.bizpartner.biz

TABLA-PESO = 62. APPEND TABLA. SORT TABLA. "Ordenacion por primer campo = PAIS WRITE / 'Ordenacion por pais.'. LOOP AT TABLA. WRITE: / TABLA-PAIS, TABLA-NOMBRE, TABLA-EDAD, TABLA-PESO. ENDLOOP. SKIP. SORT TABLA DESCENDING BY EDAD. WRITE / 'Ordenacion por edad.'. LOOP AT TABLA. WRITE: / TABLA-PAIS, TABLA-NOMBRE, TABLA-EDAD, TABLA-PESO. ENDLOOP.

5.9

Modificacin de registros
MODIFY <tabl a> [ FROM <rea-trabajo> ] [ INDEX <ndice> ].

Para sustituir lneas de una tabla interna utilizamos la sentencia MODIFY

El rea de trabajo <rea -trabajo> sustituye a la lnea de la tabla interna. En el caso de tablas internas con lneas de cabecera, la clusula FROM es opcional. Si utilizamos la clusula INDEX, la lnea que hay que reemp lazar ser la existente con el ndice <ndice>. Si el sistema puede realizar la modificacin, la variab le del sistema SY-SUBRC es 0. Si la tabla interna tiene menos lneas que las indicadas en <ndice>, la modificacin no se realiza y SY-SUBRC vale 4. Si no utilizamos la clusula INDEX, la sentencia solo puede ser procesada en un bucle LOOP .. ENDLOOP. En este caso la lnea que se modificara ser la que se este tratando.

REPORT EJEMPLO. DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE TABLE OF LINE.

Lima-Per

Pg ina 108 de 230

CURSO ABAP BASICO


www.bizpartner.biz

DO 3 TIMES. LINE-COL1 = SY-INDEX. LINE-COL2 = SY-INDEX ** 2. APPEND LINE TO ITAB. ENDDO. LOOP AT ITAB INTO LINE. IF SY-TABIX = 2. LINE-COL1 = SY-TABIX * 10. LINE-COL2 = ( SY-TABIX * 10 ) ** 2. MODIFY ITAB FROM LINE. ENDIF. ENDLOOP. LOOP AT ITAB INTO LINE. WRITE: / SY-TABIX, LINE-COL1, LINE-COL2. ENDLOOP.

1 2 3

1 20 3

1 400 9

REPORT EJEMPLO. DATA: BEGIN OF LINEA, COLUMNA1 TYPE I, COLUMNA2 TYPE I, END OF LINEA, TABLA LIKE LINEA OCCURS 10. DATA: LIN TYPE I, OCC TYPE I.

DO 3 TIMES. LINEA-COLUMNA1 = SY-INDEX. LINEA-COLUMNA2 = SY-INDEX ** 2. APPEND LINEA TO TABLA. ENDDO. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP. ULINE. LINEA-COLUMNA1 = 10. LINEA-COLU

Lima-Per

Pg ina 109 de 230

CURSO ABAP BASICO


www.bizpartner.biz

MNA2 = 10 ** 2. MODIFY TABLA FROM LINEA INDEX 2. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP.

REPORT ZPROCESO_42 . DATA: BEGIN OF LINEA, COLUMNA1 TYPE I, COLUMNA2 TYPE I, END OF LINEA,

*TABLA LIKE LINEA OCCURS 10. TABLA LIKE LINEA OCCURS 10 WITH HEADER LINE. DATA: LIN TYPE I, OCC TYPE I.

DO 3 TIMES. TABLA-COLUMNA1 = SY-INDEX. TABLA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLA.

Lima-Per

Pg ina 110 de 230

CURSO ABAP BASICO


www.bizpartner.biz

ENDDO. LOOP AT TABLA. WRITE: / SY-TABIX, TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP. ULINE. TABLA-COLUMNA1 = 10. TABLA-COLUMNA2 = 10 ** 2. MODIFY TABLA INDEX 2. LOOP AT TABLA. WRITE: / SY-TABIX, TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP.

5.10 Eliminando registros


Para borrar lneas de una tabla interna contamos con la sentencia DELETE. Varios formatos de la sentencia nos permiten borrar lneas de una forma diferente. DELET E <tabl a>. El sistema slo puede procesar esta sentencia dentro de un bucle LOOP .. ENDLOOP. La sentencia DELETE borra la lnea que estemos tratando en el bucle. DEL ET E <tabl a> INDEX <ndice>. Con la clusula INDEX, el sistema borra la lnea con el ndice <ndice> en la tabla interna <tabla>. Despus de borrar la lnea, el ndice de la siguiente lnea es decrementado en 1. Si la operacin es completada, la variable SY-SUBRC vale 0. Si la lnea con el ndice <ndice> no existe, SY-SUBRC vale 4. DELET E <TABLA> [ FROM <n1> ] [ TO <n2> ] [ WHER E <condicin> ]. Sentencia utilizada para borrar registros de una tabla de la base de datos. Con est a sentencia se puede borrar una o varias lneas de una tabla. Slo se pueden borrar lneas de una tabla a travs de una vista si sta slo hace referencia a una nica tabla. Se debe indicar al menos una de las tres clusulas.

Lima-Per

Pg ina 111 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Si utilizamos la sentencia s in la clusula WHERE, el sistema borrar todas las lneas de la tabla <tabla> cuyo ndice est comprendido entre <n1> y <n 2>.

Si no utilizamos la clusula FROM, el sistema borrar desde la primera lnea. Si no utilizamos la clusula TO, el sistema borrar hasta la ltima lnea. Con la clusula WHERE el sistema slo borrar aquellas lnea de la tabla <tabla> que cump len la condicin especificada en <condicin>. En <condicin> se puede utilizar cualquier exp resin lgica. El primer operando debe ser un componente de la estrucutra de lnea de la tabla interna. Si el sistema borra al menos una lnea la variable SY-SUBRC valdr 0, si no borra n inguna valdr 4.

REPORT EJEMPLO. DATA: BEGIN OF ARTICULO ID(4) DESCRIPTION(30) PRECIO END OF ARTICULO.

OCCURS 10, TYPE C, TYPE C, TYPE I,

ARTICULO-ID = '001'.ARTICULO-DESCRIPTION = 'MONITOR'. ARTICULO-PRECIO = '150'.COLLECT ARTICULO. ARTICULO-ID = '001'.ARTICULO-DESCRIPTION = 'TECLADO'. ARTICULO-PRECIO = '5'.COLLECT ARTICULO. ARTICULO-ID = '001'.ARTICULO-DESCRIPTION = 'CPU'. ARTICULO-PRECIO = '200'.COLLECT ARTICULO. ARTICULO-ID = '002'.ARTICULO-DESCRIPTION = 'DVD'. ARTICULO-PRECIO = '200'.COLLECT ARTICULO. ARTICULO-ID = '002'.ARTICULO-DESCRIPTION = 'VIDEO CAMARA'. ARTICULO-PRECIO = '450'.COLLECT ARTICULO. ARTICULO-ID = '003'.ARTICULO-DESCRIPTION = 'EQUIPO STEREO'. ARTICULO-PRECIO = '800'.COLLECT ARTICULO. ARTICULO-ID = '003'.ARTICULO-DESCRIPTION = 'TELEVISOR'. ARTICULO-PRECIO = '1000'.COLLECT ARTICULO. LOOP AT ARTICULO. WRITE:/ ARTICULO-ID, ARTICULO-DESCRIPTION, ARTICULO-PRECIO. ENDLOOP. SKIP 2. *Eliminando algunos registros de la tabla interna. DELETE TABLE ARTICULO WITH TABLE KEY ID = '003' DESCRIPTION = 'TELEVISOR'. LOOP AT ARTICULO. WRITE:/ ARTICULO-ID, ARTICULO-DESCRIPTION, ARTICULO-PRECIO. ENDLOOP. SKIP 2.

Lima-Per

Pg ina 112 de 230

CURSO ABAP BASICO


www.bizpartner.biz

DELETE TABLE ARTICULO. LOOP AT ARTICULO. WRITE:/ ARTICULO-ID, ARTICULO-DESCRIPTION, ARTICULO-PRECIO. ENDLOOP. SKIP 2. DELETE ARTICULO INDEX 5. LOOP AT ARTICULO. WRITE:/ ARTICULO-ID, ARTICULO-DESCRIPTION, ARTICULO-PRECIO. ENDLOOP.

REPORT EJEMPLO. DATA: BEGIN OF LINEA_1, COL1 TYPE I, COL2 TYPE I, END OF LINEA_1, TABLA_1 LIKE LINEA_1 OCCURS 10. DO 40 TIMES. LINEA_1-COL1 = SY-INDEX. LINEA_1-COL2 = SY-INDEX ** 2. APPEND LINEA_1 TO TABLA_1. ENDDO. DELETE TABLA_1 FROM 3 TO 38 WHERE COL2 > 20. LOOP AT TABLA_1 INTO LINEA_1. WRITE: / LINEA_1-COL1, LINEA_1-COL2. ENDLOOP.

Lima-Per

Pg ina 113 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_40 . DATA: BEGIN OF LINEA, COLUMNA1 TYPE I, COLUMNA2 TYPE I, END OF LINEA, TABLA LIKE LINEA OCCURS 10.

DO 15 TIMES. LINEA-COLUMNA1 = SY-INDEX. LINEA-COLUMNA2 = SY-INDEX ** 2. APPEND LINEA TO TABLA. ENDDO. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP. ULINE. LOOP AT TABLA INTO LINEA. IF LINEA-COLUMNA1 < 11. DELETE TABLA. ENDIF. ENDLOOP. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP.

Lima-Per

Pg ina 114 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZPROCESO_41 . ************************************************************************ * BORRANDO REGISTROS CON: * DELETE itab. * DELETE itab FROM idx1 TO idx2 [expresion logica]. ************************************************************************ DATA: BEGIN OF LINEA, COLUMNA1 TYPE I, COLUMNA2 TYPE I, END OF LINEA, TABLA LIKE LINEA OCCURS 10. DO 5 TIMES. LINEA-COLUMNA1 = SY-INDEX. LINEA-COLUMNA2 = SY-INDEX ** 2. APPEND LINEA TO TABLA. ENDDO. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP. ULINE. SKIP. DELETE TABLA INDEX: 2, 3, 4. ************************************************************************ * EL INDICE 4 NO SE ENCUENTRA PORQUE LOS INDICES SE CHANCAN EN CADA

Lima-Per

Pg ina 115 de 230

CURSO ABAP BASICO


www.bizpartner.biz

* BORRADO Y ESTAN SIEMPRE EN ORDEN. ************************************************************************ WRITE: / 'sy-subrc', SY-SUBRC. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP. ULINE. SKIP.

5.11 Niveles de ruptura


En el tratamiento de un LOOP podemos utilizar sentencias de control de ruptura : AT FIRST. ENDAT.

Realiza las instrucciones que hay a continuacin del AT FIRST para la primera entrada de la tabla.

AT LAS T. ENDAT.

Realiza las instrucciones que hay a continuacin del AT LAST para la ltima entrada de la tabla.

AT NEW <campo>. ENDAT.

Realiza las instrucciones que hay a continuacin del AT NEW para cada in icio de n ivel de ruptura.

AT END OF <campo>. ENDAT.

Realiza las instrucciones que hay a continuacin del AT END para cada final de n ivel de ruptura.

Si utilizamos la instruccin SUM dentro de un AT ... ENDAT, realizar la suma de todos los campos P,I,F de ese nivel de ruptura ( para el clculo de subtotales ). El resultado lo encontraremos en el rea de trabajo de la tabla.

Lima-Per

Pg ina 116 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ser necesario que la tabla interna est ordenada en el mismo o rden que la utilizacin de los niveles de ruptura.

La utilizacin conjunta de todas estas instrucciones ser: SORT <intab> B Y <c1 > <c2 >. LOOP AT <intab>. AT FIRST ... (S UM) ... ENDAT. AT NEW <cl>. ... (S UM) ENDAT. AT NEW <c2>. ... (S UM) ENDAT. .......... Proceso Normal de l a tabl a AT END OF <c2>. ... (S UM) ... ENDAT. AT END OF <c1>. ... (S UM) ... ENDAT. AT LAS T (S UM) ENDAT.

Lima-Per

Pg ina 117 de 230

CURSO ABAP BASICO


www.bizpartner.biz

ENDLOOP.

Lima-Per

Pg ina 118 de 230

CURSO ABAP BASICO


www.bizpartner.biz

At line-selection
Para permitir al usuario seleccionar una lnea de un listado y realizar alguna accin, se puede escribir un bloque de proceso en el programa para el evento AT LINE-SELECTION.

Sintaxis:
AT LINE-SELECTION.. <bloque-de-proceso>
Este evento define un bloque de proceso que se activa cuando seleccionamos una lnea del informe. Este evento se utiliza en los informes interactivos cuando generan salidas secundarias. El usuario podr activar este evento a travs de las siguientes acciones: 1. En el men "edicin", se elige la opcin "seleccionar" o presionando la tecla de funcin F2. 2. Realizando un doble-click sobre la lnea o un solo click sobre un hots pot (ver las opciones sentencia WRITE). Despus de posicionar el cursor sobre una lnea y realizar alguna de las acciones anteriores, el evento AT LINE-SELECTION se activa.
1 2 3 4 5 6 7 8 9 10 11 12 13 REPORT ZANI23 WRITE 'MENU' COLOR COL_HEADING. ULINE /(4). WRITE / 'Confirmacion OT'. WRITE / 'Alistar MP'. WRITE / 'Chequear OP'. WRITE / 'Recibo Muelles'. WRITE / 'Liberar Operario'. AT LINE-SELECTION. CASE SY-LISEL. WHEN 'Confirmacion OT'. .

Lima-Per

Pg ina 119 de 230

CURSO ABAP BASICO


www.bizpartner.biz

14 15 16 17 18 19 20 21 22 23

WRITE 'Aparece el mensaje: WHEN 'Alistar MP'. WRITE 'Aparece el mensaje: WHEN 'Chequear OP'. WRITE 'Aparece el mensaje: WHEN 'Recibo Muelles'. WRITE 'Aparece el mensaje: WHEN 'Liberar Operario'. WRITE 'Aparece el mensaje: ENDCASE.

Confirmacion OT'. Alistar MP'. Chequear OP'. Recibo Muelles'. Liberar Operario'.

Analice el funcionamiento de:

SY-LISEL Tecla F2 Qu sucede si despus de la primera lnea escribimos: FORMAT

HOTSPOT ON.

HIDE
1 2 3 4 5 6 7 8 9 10 11 REPORT ZEJ4 DATA NUMERO TYPE I. DO 7 TIMES. WRITE: / 'Linea', (2) SY-INDEX. NUMERO = SY-INDEX. ENDDO. AT LINE-SELECTION. WRITE: / 'El cursor esta en la linea', (2) NUMERO. .

El mismo mensaje se muestra al dar clic sobre cualquier lnea.

Entre las lneas 6 y 7 escriba: HIDE NUMERO. Analice lo que sucede.

EJERCICIO.

Lima-Per

Pg ina 120 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Acondicione el programa anterior (el de muelles) con la utilizacin de HIDE.

Lima-Per

Pg ina 121 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Join de tablas JOIN DE DOS TABLAS


REPORT ZANI2 . TABLES: SCARR, SPFLI, SFLIGHT. TYPES: BEGIN OF EST_JU NTOS, CARRID LIKE SCARR-CARRID, CONNID LIKE SPFLI-CONNID, COUNTRYFR LIKE SPFLI-COUNTRYFR, END OF EST_JU NTOS. DATA: TABLITA TYPE TABLE OF EST_JU NTOS WITH HEADER LINE. SELECT-OPTIONS: S_CA RRID FOR SCARR-CARRID, S_CONNID FOR SPFLI-CONNID. START-OF-SELECTION. SELECT SCARR~CA RRID SPFLI~CONNID SPFLI~COUNTRYFR INTO TABLE TABLITA FROM SCARR JOIN SPFLI ON SCARR~CARRID = SPFLI~CARRID WHERE SCARR~CARRID IN S_CARRID AND

Lima-Per

Pg ina 122 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SPFLI~CONNID IN S_CONNID. LOOP AT TABLITA. WRITE : /11 TABLITA-CARRID, 31 TABLITA-CONNID, 51 TABLITA-COUNTRYFR. ENDLOOP.

Resultado del eje rcicio

Lima-Per

Pg ina 123 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 124 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Selection-screen
*Programa que hace uso de los SELECTION-SCREEN. REPORT ZBCSELECTIONSCREENS. SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW TITLE text-011. PARAMETERS p_input(16) TYPE C. SELECTION-SCREEN : SKIP, BEGIN OF BLOCK b1 WITH FRAME TITLE text -020. PARAMETERS: check1 AS CHECKBOX, check2 AS CHECKBOX, check3 AS CHECKBOX. SELECTION-SCREEN : END OF BLOCK b1, SKIP, BEGIN OF BLOCK b2 WITH FRAME TITLE text -030 NO *la sentencia NO INTERVALS hace que el bloque posible. Inicia la ventana 500 Crea el campo Inicia el bloque b1 (dentro de l screen 500)

Finaliza el bloque b1 Inicia el bloque b2 (dentro del INTERVALS. screen 500) se cree con el menor tamao

Lima-Per

Pg ina 125 de 230

CURSO ABAP BASICO


www.bizpartner.biz

PARAMETERS : radio1 RADIOBUTTON GROUP rad DEFAULT 'X', radio2 RADIOBUTTON GROUP rad, radio3 RADIOBUTTON GROUP rad. SELECTION-SCREEN : END OF BLOCK b2, Finaliza el bloque b2 END OF SCREEN 500. Finaliza la ventana 500 *Crea la ventana 105 SELECTION-SCREEN : BEGIN OF SCREEN 105 AS WINDOW TITLE text-003. SELECTION-SCREEN COMMENT /15(15) text -007. SELECTION-SCREEN : END OF SCREEN 105. *Crea la ventana 106 SELECTION-SCREEN : BEGIN OF SCREEN 106 AS WINDOW TITLE text-003. SELECTION-SCREEN COMMENT /15(15) text -008. SELECTION-SCREEN : END OF SCREEN 106. START-OF-SELECTION. *Llama a la ventana 500. CALL SELECTION-SCREEN 500 STARTING AT 10 10. *Si el 1er radiobutton es seleccionado, llama a la ventana 105. IF radio1 = 'X'. CALL SELECTION-SCREEN 105 STARTING AT 10 10. ENDIF. *Llama a la ventana 500. IF radio2 = 'X'. *Si el 1er radiobutton es seleccionado, llama a la ventana 105. CALL SELECTION-SCREEN 106 STARTING AT 10 10. ENDIF.

En las sentencias text -<numero> hacemos doble clic.

Nos dira que no existe el objeto, y preguntara si deseamos crearlo, aceptamos y nos mostrara una pantalla (de no haber guardado el programa antes preguntara si deseamos guardarlo, aceptamos).

Lima-Per

Pg ina 126 de 230

CURSO ABAP BASICO


www.bizpartner.biz

En el numero correspondiente colocamos el texto.

Luego guardamos los cambios

y activamos

Hacemos el mismo proceso para los demas. Resultado.

Lima-Per

Pg ina 127 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Select-options Trabajando con la tabla SPFLI. Escoger el cdigo de aerolnea (o cdigos de aerolneas), de un listado de los cdigos de aerolneas. Y mostrar la siguiente informacin referente al cdigo de aerolnea (o cdigos de aerolneas): 1. Cdigo de aerolnea

Lima-Per

Pg ina 128 de 230

CURSO ABAP BASICO


www.bizpartner.biz

2. Numero de conexin de vuelo 3. Ciudad de partida. 4. Ciudad de destino. Programa:


REPORT ZEJ3. TABLES: SPFLI. TYPES: BEGIN OF EST_SPFLI, CARRID LIKE SPFLI-CARRID, CONNID LIKE SPFLI-CONNID, CITYFROM LIKE SPFLI-CITYFROM, CITYTO LIKE SPFLI-CITYTO, END OF EST_SPFLI. DATA: TABLITA TYPE TABLE OF EST_SPFLI WITH HEADER LINE. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID. START-OF-SELECTION. SELECT SPFLI~CARRID SPFLI~CONNID SPFLI~CITYFROM SPFLI~CITYTO INTO TABLE TABLITA FROM SPFLI WHERE SPFLI~CARRID IN S_CARRID. WRITE : /01 31 61 91 'Codigo 'Numero 'Ciudad 'Ciudad de de de de aerolinea', conexion de vuelo', partida', destino'.

LOOP AT TABLITA. WRITE : / TABLITA-CARRID UNDER 'Codigo de aerolinea', TABLITA-CONNID UNDER 'Numero de conexion de vuelo', (20) TABLITA-CITYFROM UNDER 'Ciudad de partida' RIGHT -JUSTIFIED, TABLITA-CITYTO UNDER 'Ciudad de destino' CENTERE D. ENDLOOP.

Lista con los cdigos de las aerolneas, mediante el uso de select-options. Para poder ser seleccionado por el usuario.

Lima-Per

Pg ina 129 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Reporte de acuerdo a la seleccin previa.

Investigue si el listado de los cdigos de las aerolneas tienen relacin directa con la tabla SPFLI.

Lima-Per

Pg ina 130 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Select conceptos generales

Lima-Per

Pg ina 131 de 230

CURSO ABAP BASICO


www.bizpartner.biz

UTILIZANDO SELECT SIN ENDSELECT


REPORT ZTABLAS01_ANIBAL. TABLES SFLIGHT. TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE. SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TABLE TABLITA. LOOP AT TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDLOOP.

UTILIZANDO SELECT .ENDSELECT


REPORT ZTABLAS02_ANIBAL TABLES SFLIGHT. TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE. SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDSELECT. .

TABLAS CON OCCURS


REPORT ZTABLAS04_ANIBAL TABLES SFLIGHT. . .

DATA: BEGIN OF TABLITA OCCURS 10 , CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF TABLITA. SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TABLE TABLITA. LOOP AT TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDLOOP.

USO DE APPEND CON ESTRUCTURAS, NO CON TABLAS


Lima-Per Pg ina 132 de 230

CURSO ABAP BASICO


www.bizpartner.biz

USO DE INTO
REPORT ZTABLAS07_ANIBAL TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. .

DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A. "SIN CABECERA DE LINEA ESTRUCTURA1A-PRIMER_CAMPO = 'PRIMER DATO1'. ESTRUCTURA1A-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. ESTRUCTURA1A-TERCER_CAMPO = 'TERCER DATO1'. APPEND ESTRUCTURA1A TO TABLA1. ESTRUCTURA1A-PRIMER_CAMPO = 'PRIMER DATO2'. ESTRUCTURA1A-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. ESTRUCTURA1A-TERCER_CAMPO = 'TERCER DATO2'. APPEND ESTRUCTURA1A TO TABLA1. ESTRUCTURA1A-PRIMER_CAMPO = 'PRIMER DATO3'. ESTRUCTURA1A-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. ESTRUCTURA1A-TERCER_CAMPO = 'TERCER DATO3'. APPEND ESTRUCTURA1A TO TABLA1. LOOP AT TABLA1 INTO ESTRUCTURA1A. WRITE: / ESTRUCTURA1A-PRIMER_CAMPO, ESTRUCTURA1A-SEGUNDO_CAMPO. ENDLOOP.

USO DE APPEND CON TABLAS

Lima-Per

Pg ina 133 de 230

CURSO ABAP BASICO


www.bizpartner.biz

VARIANTE DE LO ANTERIOR REPORT ZTABLAS08_ANIBAL TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. .

DATA ESTRUCTURA1A TYPE ESTRUCTURA1. * CON CABECERA DE LINEA DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO3'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'. APPEND TABLA1. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO. ENDLOOP.

MANEJO DE MOVE, CON [] SE MUEVEN TODOS.

Lima-Per

Pg ina 134 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZTABLAS09_ANIBAL TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1.

"CON CABECERA DE LINEA DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. DATA TABLA2 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'. APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO3'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'. APPEND TABLA1. MOVE TABLA1[] TO TABLA2[]. LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO. ENDLOOP. ULINE. LOOP AT TABLA2. WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO. ENDLOOP.

REPORT

ZMOVECORR1

Lima-Per

Pg ina 135 de 230

CURSO ABAP BASICO


www.bizpartner.biz

TABLES: SFLIGHT. DATA: W_SFLIGHT TYPE SFLIGHT. START-OF-SELECTION. SELECT SINGLE * FROM SFLIGHT INTO CORRESPONDING FIELDS OF W_SFLIGHT WHERE CARRID = 'AZ'. *LOOP AT W_SFLIGHT. // NO MUESTRA NADA CON LOOP IF sy-subrc = 0. WRITE: / W_SFLIGHT-CARRID COLOR COL_KEY, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDIF. *ENDLOOP.

NO FUNCIONA CON LOOP - ENDLOOP POR SER UNICO.

Lima-Per

Pg ina 136 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Move-corresponding

Lima-Per

Pg ina 137 de 230

CURSO ABAP BASICO


www.bizpartner.biz

MOVE-CORRESPONDING EN UNA TABLA INTERNA


REPORT ZTABLAS03_ANIBAL TABLES SFLIGHT. TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE. SELECT * FROM SFLIGHT. MOVE-CORRESPONDING SFLIGHT TO TABLITA. APPEND TABLITA. ENDSELECT. LOOP AT TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDLOOP. .

SI LE QUITAMOS SELECT, Y QUEDAMOS SOLAMENTE CON: MOVE-CORRESPONDING SFLIGHT TO TABLITA. APPEND TABLITA. MUESTRA:

MUESTRA CUALQUIER VALOR, APARENTEMENTE PORQUE LA POSICION ESTA INDETERMINADA.

Lima-Per

Pg ina 138 de 230

CURSO ABAP BASICO


www.bizpartner.biz

OTRA FORMA DE USO CORRESPONDING FIELDS EN LUGAR DE MOVECORRESPONDING (SIN APPEND). CON ENDSELECT.
REPORT ZTABLAS05_ANIBAL TABLES SFLIGHT. TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE. .

SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDSELECT. OTRA FORMA DE USO CORRESPONDING FIELDS EN LUGAR DE MOVECORRESPONDING (SIN APPEND). SIN ENDSELECT.
REPORT ZTABLAS06_ANIBAL TABLES SFLIGHT. TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE. .

SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE TABLITA.


LOOP AT TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID, TABLITA-FLDATE. ENDLOOP.

REPORT

ZMOVECORR

Lima-Per

Pg ina 139 de 230

CURSO ABAP BASICO


www.bizpartner.biz

TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT. DATA: w_sFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT SINGLE * FROM SFLIGHT INTO CORRESPONDING FIELDS OF W_SFLIGHT WHERE CARRID = 'AZ'. *WHERE SEATSOCC = 262 AND CARRID = 'LH'. //PARA SER MAS PRECISOS IF sy-subrc = 0. WRITE: / W_SFLIGHT-CARRID COLOR COL_KEY, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDIF.

TABLA CON STRUCTURA CREADA. NO CON DATA: W_SFLIGHT TYPE SFLIGHT.

Lima-Per

Pg ina 140 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZMOVECORR TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT.

DATA: w_sFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT SINGLE * FROM SFLIGHT INTO CORRESPONDING FIELDS OF W_SFLIGHT * WHERE CARRID = 'AZ'. WHERE SEATSOCC = 262 AND CARRID = 'LH'. IF sy-subrc = 0. move-corresponding W_SFLIGHT to K_SFLIGHT. WRITE: / W_SFLIGHT-CARRID COLOR COL_KEY, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. SKIP. WRITE: / K_SFLIGHT-CARRID COLOR COL_KEY, K_SFLIGHT-CONNID, K_SFLIGHT-FLDATE, K_SFLIGHT-SEATSMAX. move-corresponding K_SFLIGHT to W_SFLIGHT. SKIP. WRITE: / W_SFLIGHT-CARRID COLOR COL_KEY, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. WRITE '***********' . WRITE: / K_SFLIGHT-CARRID COLOR COL_KEY, K_SFLIGHT-CONNID, K_SFLIGHT-FLDATE, K_SFLIGHT-SEATSMAX. ENDIF.

Lima-Per

Pg ina 141 de 230

CURSO ABAP BASICO


www.bizpartner.biz

SELEECIONAR UNOS CUANTOS REGISTROS DE LA TABLA SFLIGHT, DE ACUERDO A UNA CONDICION Y PASARLOS A UNA TABLA1. LUEGO MEDIANTE MOVECORRESPONDING PASAR DE TABLA1 A TABLA2, MEDIANTE UNA CONDICION.
REPORT ZMOVECORR TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT. DATA: W_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE W_SFLIGHT. IF sy-subrc = 0. LOOP AT W_SFLIGHT. WRITE: / W_SFLIGHT-CARRID, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDLOOP. ENDIF. .

ETC.

Lima-Per

Pg ina 142 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZMOVECORR TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT.

DATA: W_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE W_SFLIGHT WHERE CARRID = 'AA' AND CONNID = '0017'. IF sy-subrc = 0. LOOP AT W_SFLIGHT. WRITE: / W_SFLIGHT-CARRID, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDLOOP. ENDIF.

NO HAY MAS

Lima-Per

Pg ina 143 de 230

CURSO ABAP BASICO


www.bizpartner.biz REPORT ZMOVECORR TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT. DATA: W_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE W_SFLIGHT WHERE CARRID = 'AA'. IF sy-subrc = 0. LOOP AT W_SFLIGHT WHERE CONNID = '0017'. move-corresponding W_SFLIGHT to K_SFLIGHT. append K_SFLIGHT. ENDLOOP. ENDIF. WRITE / 'ES W_SFLIGHT'. LOOP AT W_SFLIGHT. WRITE: / W_SFLIGHT-CARRID, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDLOOP. WRITE / 'ES K_SFLIGHT'. LOOP AT K_SFLIGHT. WRITE: / K_SFLIGHT-CARRID, K_SFLIGHT-CONNID, K_SFLIGHT-FLDATE. ENDLOOP. .

APARENTEMENTE, SIEMPRE EL MOVECORRESPONDING CON APPEND.

Lima-Per

Pg ina 144 de 230

CURSO ABAP BASICO


www.bizpartner.biz

APPEND Y COLLECT OPTIMIZADO


REPORT ZMOVECORR3. TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, PRICE LIKE SFLIGHT-PRICE, SEATSOCC LIKE SFLIGHT-SEATSOCC, END OF EST_FLIGHT. DATA: W_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: Z_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE W_SFLIGHT WHERE CARRID = 'AA'. IF sy-subrc = 0. LOOP AT W_SFLIGHT. move-corresponding W_SFLIGHT to K_SFLIGHT. append K_SFLIGHT. move-corresponding W_SFLIGHT to Z_SFLIGHT. collect Z_SFLIGHT. ENDLOOP. ENDIF. WRITE: / 'TABLA K: USO DE APPEND'. LOOP AT K_SFLIGHT. WRITE: / SY-TABIX, K_SFLIGHT-CARRID, K_SFLIGHT-CONNID, K_SFLIGHT-SEATSOCC, K_SFLIGHT-PRICE. ENDLOOP. WRITE: / 'TABLA Z: USO DE COLLECT'. LOOP AT Z_SFLIGHT. WRITE: / SY-TABIX, Z_SFLIGHT-CARRID, Z_SFLIGHT-CONNID, Z_SFLIGHT-SEATSOCC, Z_SFLIGHT-PRICE. ENDLOOP.

DE ACUERDO A LOS CAMPOS QUE COLOQUEMOS EN LAS TABLAS INTERNAS, OBTENDREMOS VALORES DIFER ENTES PARA LAS OPERACIONES CON COLLECT.

Lima-Per

Pg ina 145 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 146 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Append collect modify

EJERCICIO DE MODIFY
Para trabajar con la tabla SFLIGHT.
Seleccionar un carrid.

Mostrar la informacin correspondiente al carrid seleccionado que contenga los datos correspondientes a: 1. ID-AEROLINEA 2. NUMERO DE AEROLNEA 3. FECHA DE VUELO 4. NUMERO DE ASIENTOS OCUPADOS 5. NUMERO DE ASIENTOS MAXIMO 6. PORCENTAJE DE ASIENTOS OCUPADOS

Ordenado por PORCENTAJE DE ASIENTOS OCUPADOS

Lima-Per

Pg ina 147 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZCAPITULO_12_07 . TYPES: BEGIN OF FLIGHT, CARRID(2) TYPE C, CONNID TYPE N, FLDATE TYPE D, SEATSMAX TYPE I, SEATSOCC TYPE I, PORCENTAJE TYPE P DECIMALS 2, END OF FLIGHT. TYPES: I_FLIGHT TYPE FLIGHT OCCURS 10. DATA: WA_FLIGHT IT_FLIGHT TYPE FLIGHT, TYPE I_FLIGHT.

"ID_AEREOLINEA "NUMERO_AEREOLINEA "FECHA_VUELO "NUMERO_ASIENTOS_MAXIMO "NUMERO_ASIENTOS_OCUPADOS "PORCENTAGE_ASIENTOS_OCUPADOS

PARAMETERS: P_CARRID TYPE SFLIGHT-CARRID.

SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC INTO CORRESPONDING FIELDS OF TABLE IT_FLIGHT WHERE CARRID = P_CARRID.
* ALMENOS UN REGISTRO ES SELECIONADO IF SY-SUBRC = 0.

FROM

SFLIGHT

* CALCULO DEL PORCENTAJE EN UN LOOP Y MODIFICAMOS LA TABLA INTERNA PARA * COMPLETAR LA 6 TA. COLUMNA DE LA TABLA INTERNA LOOP AT IT_FLIGHT INTO WA_FLIGHT. WA_FLIGHT-PORCENTAJE = WA_FLIGHT-SEATSOCC * 100 / WA_FLIGHT-SEATSMAX. MODIFY IT_FLIGHT FROM WA_FLIGHT. ENDLOOP. SORT IT_FLIGHT BY PORCENTAJE. WRITE: /005 021 044 059 086 110 'ID_AEREOLINEA', 'NUMERO_AEREOLINEA', 'FECHA_VUELO', 'NUMERO_ASIENTOS_OCUPADOS', 'NUMERO_ASIENTOS_MAXIMO', 'PORCENTAGE_ASIENTOS_OCUPADOS'.

* LOOP SOBRE LA TABLA INTERNA PARA ESCRIBIR CONTENIDO DE REGISTROS * SOBRE LA LISTA LOOP AT IT_FLIGHT INTO WA_FLIGHT. WRITE: /012 WA_FLIGHT-CARRID, 28 WA_FLIGHT-CONNID, 46 WA_FLIGHT-FLDATE, 60 WA_FLIGHT-SEATSOCC, 88 WA_FLIGHT-SEATSMAX, 106 WA_FLIGHT-PORCENTAJE,'%'. ENDLOOP. ENDIF.

Lima-Per

Pg ina 148 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 149 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Quiebres

LOOP
De SAP ABAP en castellano, la enciclopedia libre. Podemos recorrer una tabla interna con la instruccin LOOP ... ENDLOOP. En cada iteracin coloca la lnea de la tabla que se est procesando en la lnea de cabecera. Podemos restringir el proceso de una tabla con una condicin WHERE. Si no existe ningn registro de la tabla que cumpla la condicin especificada en la clusula WHERE, la variable del sistema SY-SUBRC ser distinta de 0. Dentro del LOOP la variable SY-TABIX contiene el ndice de la entrada que est procesando en ese momento. FROM <inicio> TO <final>: recorrer la tabla desde el registro nmero >inicio> hasta el registro nmero <final>.

Sintaxis
LOOP AT <tabla> (WHERE <cond>) ............. ENDLOOP. LOOP AT <tabla> FROM <inicio> TO ............. ENDLOOP.

<final>.

Niveles de ruptura

AT FIRST: realiza las instrucciones que hay a continuacin del AT FIRST para la primera entrada en la tabla. AT LAST: realiza las instrucciones que hay a continuacin del AT LAST para la ltima entrada en la tabla. AT NEW <campo>: realiza las instrucciones que hay a continuacin del AT NEW para cada nueva entrada del contenido del campo. AT END <campo>: realiza las instrucciones que hay a continuacin del AT END para cada final de contenido del campo.

Si utilizamos la instruccin SUM dentro de una AT ... ENDAT realizar la suma de todos los campos P, I, F de ese nivel de ruptura ( para el clculo de subtotales ). El resultado lo encontraremos en la cabecera de la tabla. Ser necesario que la tabla interna est ordenada en el mismo orden que la utilizacin de los niveles de ruptura.
AT AT AT AT FIRST. .... ENDAT. LAST. .... ENDAT. NEW <campo>. .... ENDAT.. END OF <campo>. .... ENDAT.

Lima-Per

Pg ina 150 de 230

CURSO ABAP BASICO


www.bizpartner.biz

AT <fg> .. ENDAT Definicin La sentencia AT <fg> .. ENDAT slo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP para extractos, e identifica un bloque de proceso. La sentencia se ejecuta cuando se detecta que cambia algn valor en el field-group. Sintaxis: AT <zfg> { WITH <fg1> }. <bloque-sentencias> ENDAT. La setencia AT <fg> se cierra con ENDAT, identificando de esta forma un bloque de proceso. La clusula WITH se utiliza para indicar que la sentencia AT se debe ejecutar si para el field- group <fg> le sigue el field-group <fg1>. Ejemplo 1: DATA: NAME(30), SALES TYPE I. FIELD-GROUPS: HEADER, INFOS. INSERT: NAME INTO HEADER, SALES INTO INFOS. ... LOOP. AT NEW NAME. NEW-PAGE. ENDAT. ... AT END OF NAME. WRITE: / NAME, SUM(SALES). ENDAT. ENDLOOP. Vease tambin: LOOP, EXTRACT. AT END OF .. ENDAT Definicin La sentencia AT END OF .. ENDAT slo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta cuando se detecta que cambia algn valor para el campo especificado.

Lima-Per

Pg ina 151 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Sintaxis: AT END OF <campo>. <bloque-sentencias> ENDAT. La sentencia AT END OF se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT END OF .. ENDAT el rea de trabajo no se rellena con la lnea actual de la tabla interna. Todos los campos que no forman parte de la clave estndar de la tabla toman el valor inicial. Para la condicin de lnea END OF <campo> el sistema sobrescribe todos los campos de la clave estndar, que se encuentran a la derecha del campo <campo> con asterisco (*). No se debe utilizar la sentencia AT END OF .. ENDAT en combinacin con la sentencia LOOP .. ENDLOOP con las clusulas FROM, TO o WHERE. Ejemplo 1: DATA: BEGIN OF COMPANIES OCCURS 20, NAME(30), PRODUCT(20), SALES TYPE I, END OF COMPANIES. ... LOOP AT COMPANIES. AT NEW NAME. NEW-PAGE. WRITE / COMPANIES-NAME. ENDAT. WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES. AT END OF NAME. SUM. WRITE: / COMPANIES-NAME, COMPANIES-SALES. ENDAT. ENDLOOP.

Vease tambin: LOOP. AT FIRST .. ENDAT Definicin La sentencia AT FIRST .. ENDAT slo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta con el primer valor o primer registro de la sentencia LOOP .. ENDLOOP.

Lima-Per

Pg ina 152 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Sintaxis: AT FIRST. <bloque-sentencias> ENDAT. La sentencia AT FIRST se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT FIRST .. ENDAT el rea de trabajo no se rellena con la lnea actual de la tabla interna. Todos los campos que no forman parte de la clave estndar de la tabla toman el valor inicial. Para la condicin de lnea FIRST el sistema sobrescribe todos los campos de la clave estndar, que se encuentran a la derecha del campo <campo> con asterisco (*). No se debe utilizar la sentencia AT FIRST .. ENDAT en combinacin con la sentencia LOOP .. ENDLOOP con las clusulas FROM, TO o WHERE. Ejemplo 1: DATA: BEGIN OF COMPANIES OCCURS 20, NAME(30), PRODUCT(20), SALES TYPE I, END OF COMPANIES. ... LOOP AT COMPANIES. AT FIRST. NEW-PAGE. WRITE / COMPANIES-BUKRS. ENDAT. WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES. ENDLOOP. Vease tambin: LOOP. AT LAST .. ENDAT Definicin La sentencia AT LAST .. ENDAT slo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta con el ltimo valor o ltimo registro de la sentencia LOOP .. ENDLOOP. Sintaxis: AT LAST. <bloque-sentencias> ENDAT.

Lima-Per

Pg ina 153 de 230

CURSO ABAP BASICO


www.bizpartner.biz

La sentencia AT LAST se cierra con ENDAT, identificando de esta forma un bloque de proceso. En un bloque AT LAST .. ENDAT el rea de trabajo no se rellena con la lnea actual de la tabla interna. Todos los campos que no forman parte de la clave estndar de la tabla toman el valor inicial. Para la condicin de lnea LAST el sistema sobrescribe todos los campos de la clave estndar, que se encuentran a la derecha del campo <campo> con asterisco (*). No se debe utilizar la sentencia AT LAST .. ENDAT en combinacin con la sentencia LOOP .. ENDLOOP con las clusulas FROM, TO o WHERE. Ejemplo 1: DATA: BEGIN OF COMPANIES OCCURS 20, NAME(30), PRODUCT(20), SALES TYPE I, END OF COMPANIES. ... LOOP AT COMPANIES. AT NEW NAME. NEW-PAGE. ENDAT. WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES. AT LAST. SUM. WRITE: / COMPANIES-NAME, COMPANIES-SALES. ENDAT. ENDLOOP. Vease tambin: LOOP.

Lima-Per

Pg ina 154 de 230

CURSO ABAP BASICO


www.bizpartner.biz

MANEJO DE AT NEW
REPORT ZEJ4 . DATA: BEGIN OF EST_TABLITA OCCURS 10, CARRID like SFLIGHT-CARRID, CONNID like SFLIGHT-CONNID, FLDATE like SFLIGHT-FLDATE, SEATSMAX like SFLIGHT-SEATSMAX, SEATSOCC like SFLIGHT-SEATSOCC, SEATSOCC_B like SFLIGHT-SEATSOCC_B, SEATSOCC_F like SFLIGHT-SEATSOCC_F, SEATSMAX_B like SFLIGHT-SEATSMAX_B, SEATSMAX_F like SFLIGHT-SEATSMAX_F, PRICE like SFLIGHT-PRICE, END OF EST_TABLITA. Select CARRID CONNID FLDATE SEATSMAX SEATSOCC SEATSMAX_B SEATSOCC_B SEATSMAX_F SEATSOCC_F PRICE into TABLE EST_TABLITA from SFLIGHT. WRITE: 'CARRID SETSOCC FLDATE'. LOOP AT EST_TABLITA. AT NEW CARRID. WRITE: / EST_TABLITA-CARRID, 07 EST_TABLITA-SEATSOCC, 21 EST_TABLITA-FLDATE. ENDAT. ENDLOOP.

Muestra solo un valor de CARRID, de los tantos que pueden haber. OJO, SOLO UNO. Dentro del bucle AT NEW .. ENDAT. Solo se muestra apropiadamente el campo al que se le aplica AT NEW (CARRID), los dems campos se indeterminan (SETSOCC y FLDATE).

Lima-Per

Pg ina 155 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZEJ4 . DATA: BEGIN OF EST_TABLITA OCCURS 10, CARRID like SFLIGHT-CARRID, CONNID like SFLIGHT-CONNID, FLDATE like SFLIGHT-FLDATE, SEATSMAX like SFLIGHT-SEATSMAX, SEATSOCC like SFLIGHT-SEATSOCC, SEATSOCC_B like SFLIGHT-SEATSOCC_B, SEATSOCC_F like SFLIGHT-SEATSOCC_F, SEATSMAX_B like SFLIGHT-SEATSMAX_B, SEATSMAX_F like SFLIGHT-SEATSMAX_F, PRICE like SFLIGHT-PRICE, END OF EST_TABLITA. Select CARRID CONNID FLDATE SEATSMAX SEATSOCC SEATSMAX_B SEATSOCC_B SEATSMAX_F SEATSOCC_F PRICE into TABLE EST_TABLITA from SFLIGHT. *WRITE: 'CARRID SETSOCC FLDATE'. LOOP AT EST_TABLITA. AT NEW CARRID. CASE EST_TABLITA-CARRID. WHEN 'AA'. WRITE:/ 'INGRESO A: AA'. WHEN 'LH'. WRITE:/ 'INGRESO A: LH'. WHEN 'DL'. WRITE:/ 'INGRESO A: DL'. WHEN OTHERS. WRITE:/ 'OTRO INGRESO'. ENDCASE. ENDAT. ENDLOOP.

ESTA ES LA FORMA DE USARLO: PRIM ERO FILTRO VA LORES UNICOS PARA UN CAMPO DETERMINADO Y LUEGO VOY SELECCIONANDO ESTOS PARA UNA ACCION DETERM INA DA. GENERALM ENTE HACIENDO USO DE: CASE END CASE.

Lima-Per

Pg ina 156 de 230

CURSO ABAP BASICO


www.bizpartner.biz

DATA: BEGIN OF EST_TABLITA OCCURS 10, CARRID like SFLIGHT-CARRID, CONNID like SFLIGHT-CONNID, FLDATE like SFLIGHT-FLDATE, SEATSMAX like SFLIGHT-SEATSMAX, SEATSOCC like SFLIGHT-SEATSOCC, SEATSOCC_B like SFLIGHT-SEATSOCC_B, SEATSOCC_F like SFLIGHT-SEATSOCC_F, SEATSMAX_B like SFLIGHT-SEATSMAX_B, SEATSMAX_F like SFLIGHT-SEATSMAX_F, PRICE like SFLIGHT-PRICE, END OF EST_TABLITA. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC SEATSMAX_B SEATSOCC_B SEATSMAX_F SEATSOCC_F PRICE INTO TABLE EST_TABLITA from SFLIGHT.

SORT EST_TABLITA BY CONNID.


WRITE: 'CONNID SETSOCC FLDATE'. LOOP AT EST_TABLITA. AT NEW CONNID. WRITE: / EST_TABLITA-CONNID, 07 EST_TABLITA-SEATSOCC, 21 EST_TABLITA-FLDATE. ENDAT. ENDLOOP.

ES MEJOR REALIZAR UN ORDENAMIENTO PREVIO AL CAMPO AL QUE SE LE VA A APLICAR: AT NEW ENDAT. PARA GARANTIZAR QUE VAMOS A TENER VALORES UNICOS. PORQUE VA A EFECTUARSE CAMBIOS (EN ESTE CASO MOSTRASE EL CAMPO CONNID), CADA VEZ QUE ENCUENTRE UN NUEVO VALOR CON RESPECTO AL ANTERIOR. PARA EL PRIMER EJERCICIO COINCIDIO QUE EL CAMPO CARRID ESTABA ORDENADO, POR ESO NO SE TUVO PROBLEMAS CON EL RESULTADO.

Lima-Per

Pg ina 157 de 230

CURSO ABAP BASICO


www.bizpartner.biz

DATA: BEGIN OF EST_TABLITA OCCURS 10, CARRID like SFLIGHT-CARRID, CONNID like SFLIGHT-CONNID, FLDATE like SFLIGHT-FLDATE, SEATSMAX like SFLIGHT-SEATSMAX, SEATSOCC like SFLIGHT-SEATSOCC, SEATSOCC_B like SFLIGHT-SEATSOCC_B, SEATSOCC_F like SFLIGHT-SEATSOCC_F, SEATSMAX_B like SFLIGHT-SEATSMAX_B, SEATSMAX_F like SFLIGHT-SEATSMAX_F, PRICE like SFLIGHT-PRICE, END OF EST_TABLITA. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC SEATSMAX_B SEATSOCC_B SEATSMAX_F SEATSOCC_F PRICE INTO TABLE EST_TABLITA from SFLIGHT. LOOP AT EST_TABLITA. AT NEW CARRID. CASE EST_TABLITA-CARRID. WHEN 'AA'. WRITE:/ 'INGRESO A: AA'. WHEN 'LH'. WRITE:/ 'INGRESO A: LH'. WHEN 'DL'. WRITE:/ 'INGRESO A: DL'. WHEN OTHERS. WRITE:/ 'OTRO INGRESO'. ENDCASE. ENDAT. WRITE: / EST_TABLITA-CARRID, 11 EST_TABLITA-SEATSOCC. ENDLOOP.

ETC.

Lima-Per

Pg ina 158 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 159 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Mdulos Form-Perform
Nos permite realizar una llamada a una subrutina. Se puede realizar llamadas a subrutinas desde un subrutina, incluso es posible que una subrutina se llame as mis ma (llamada recursiva). Sintaxis: PERFORM <subrutina> [ TAB LES <parmetros_actuales> ] [ US ING <parmetro_actuales> ] [ CHANGING <parmet ro_actuales> ]. TABLES -> Los parmetros definidos con esta clusula slo pueden ser tablas internas, con o sin lnea de cabecera. US ING -> Los parmetros definidos con esta clusula pueden ser de cualquier tipo de dato, incluidas las tablas internas. Se suelen utilizar co mo parmetros de entrada a la subrutina. CHANGING -> Los parmetros defin idos con esta clusula pueden ser de cualquier tipo de dato, incluidas las tablas internas. Se suelen utilizar co mo parmet ro de salida de la subrutina.

EJEMPLOS
Elaborar un programa mediante el uso de las sentencias FORM y PERFORM para que nos arroje el resultado de la suma de 2 nmeros. REPORT ZPROBLEMA_01. DATA: NUM1 TYPE I, NUM2 TYPE I, SUM TYPE I. NUM 1 = 2. NUM2 = 4. PERFORM SUMA USING NUM1 NUM 2 CHA NGING SUM . NUM 1 = 7. NUM2 = 11. PERFORM SUMA USING NUM1 NUM 2 CHA NGING SUM . FORM SUMA USING ADD_NUM1 ADD_NUM2 CHANGING ADD_SUM. A DD_SUM = ADD_NUM1 + ADD_ NUM 2. PERFORM PRESENTAR USING ADD_NUM1 A DD_ NUM 2 ADD_SUM. ENDFORM . FORM PRESENTAR USING OUT_ NUM 1 OUT_NUM 2 OUT_SUM. W RITE: / 'Su ma de', OUT_NUM1, 'y', OUT_NUM 2, 'es', OUT_SUM . ENDFORM .

Lima-Per

Pg ina 160 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Elaborar un progra ma mediante el uso de las sentencias FORM y PERFORM para que nos arroje como resul tado el cuadrado de la suma de 2 nmeros.

REPORT ZPROBLEMA_02. DATA: NUM 1 TYPE I, NUM2 TYPE I, SUM TYPE I. NUM 1 = 5. NUM2 = 7. PERFORM SUMA USING NUM1 NUM 2 CHA NGING SUM . WRITE: / 'El cuadrado de la suma de los numeros', NUM1, 'y', NUM 2, 'es', SUM. FORM SUMA USING A B CHANGING C. C = A + B. PERFORM CUA DRADO USING C. ENDFORM . FORM CUADRADO USING X. X = X ** 2. ENDFORM .

Digitando el siguiente cdigo se obtiene el mismo resul tado del problema 2.

REPORT ZPROBLEMA_02. DATA: NUM 1 TYPE I, NUM2 TYPE I, C TYPE I, SUM TYPE I. NUM 1 = 5. NUM2 = 7. PERFORM SUMA USING NUM1 NUM 2 CHA NGING SUM . C = SUM * SUM . WRITE: / 'El cuadrado de la suma de los numeros', NUM1, 'y', NUM 2, 'es', C. FORM SUMA USING A B CHANGING C. C = A + B. ENDFORM .

Lima-Per

Pg ina 161 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT CC. DO 2 TIM ES. PERFORM SY-INDEX OF SUB1 SUB2. ENDDO. FORM SUB1. W RITE / 'Subroutine 1'. ENDFORM . FORM SUB2. W RITE / 'Subroutine 2'. ENDFORM .

REPORT CC. DATA: NUM 1 TYPE I, NUM 2 TYPE I, SUM TYPE I. NUM 1 = 2. NUM2 = 4. PERFORM ADDIT USING NUM1 NUM2 CHA NGING SUM . NUM 1 = 7. NUM2 = 11. PERFORM ADDIT USING NUM1 NUM2 CHA NGING SUM . FORM ADDIT USING ADD_NUM1 ADD_NUM2 CHANGING A DD_SUM. ADD_SUM = ADD_NUM1 + A DD_NUM 2. PERFORM OUT USING A DD_ NUM 1 ADD_NUM 2 ADD_SUM. ENDFORM . FORM OUT USING OUT_NUM1 OUT_NUM2 OUT_SUM . W RITE: / 'Su m of', OUT_ NUM 1, 'and', OUT_NUM2, 'is', OUT_SUM . ENDFORM .

Lima-Per

Pg ina 162 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT CC. DATA: NUM TYPE I VA LUE 5, FAC TYPE I VA LUE 0. PERFORM FA CT USING NUM CHANGING FAC. WRITE: / 'Factorial o f', NUM, 'is', FA C. FORM FACT USING VA LUE(F_ NUM ) CHANGING F_FA CT. F_FACT = 1. W HILE F_NUM GE 1. F_FACT = F_FA CT * F_NUM. F_NUM = F_NUM - 1. ENDWHILE. ENDFORM .

REPORT CC. DATA: OP1 TYPE I, OP2 TYPE I, RES TYPE I. OP1 = 3. OP2 = 4. PERFORM MULTIP USING OP1 OP2 CHA NGING RES. WRITE: / 'After subroutine:', / 'RES=' UNDER 'RES=', RES. FORM M ULTIP USING VA LUE(O1) VA LUE(O2) CHANGING VA LUE(R). R = O1 * O2. W RITE: / 'Inside subroutine:', / 'R=', R, 'RES=', RES. ENDFORM .

Lima-Per

Pg ina 163 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT CC. TYPES: BEGIN OF LINE, NAM E(10) TYPE C, A GE(2) TYPE N, COUNTRY(3) TYPE C, END OF LINE. DATA WHO TYPE LINE. WHO-NAM E = 'Karl'. WHO-A GE = '10'. WHO-COUNTRY = 'D'. PERFORM COMPONENTS CHANGING WHO. WRITE: / W HO-NAM E, WHO-A GE, WHO-COUNTRY. FORM COMPONENTS CHA NGING VA LUE(PERSON) TYPE LINE. WRITE: / PERSON-NAME, PERSON-A GE, PERSON-COUNTRY. PERSON-NAM E = 'M ickey'. PERSON-A GE = '60'. PERSON-COUNTRY = 'USA'. ENDFORM .

REPORT CC. DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITAB LIKE STANDARD TABLE OF LINE. PERFORM FILL CHANGING ITAB. PERFORM OUT USING ITAB. FORM FILL CHANGING F_ITAB LIKE ITAB. DATA F_LINE LIKE LINE OF F_ITAB. DO 3 TIMES. F_LINE-COL1 = SY-INDEX. F_LINE-COL2 = SY-INDEX ** 2. APPEND F_LINE TO F_ITAB. ENDDO. ENDFORM. FORM OUT USING VALUE(F_ITAB) LIKE ITAB. DATA F_LINE LIKE LINE OF F_ITAB. LOOP AT F_ITAB INTO F_LINE. WRITE: / F_LINE-COL1, F_LINE-COL2. ENDLOOP. ENDFORM.

Lima-Per

Pg ina 164 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT CC. DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I, END OF LINE. DATA ITA B LIKE STANDA RD TABLE OF LINE. PERFORM FILL CHANGING ITA B. PERFORM OUT USING ITA B. FORM FILL CHANGING F_ITAB LIKE ITAB. DATA F_ LINE LIKE LINE OF F_ITA B. DO 3 TIM ES. F_ LINE-COL1 = SY-INDEX. F_ LINE-COL2 = SY-INDEX ** 2. APPEND F_ LINE TO F_ITA B. ENDDO. ENDFORM . FORM OUT USING VA LUE(F_ITA B) LIKE ITAB. DATA F_ LINE LIKE LINE OF F_ITA B. LOOP AT F_ITA B INTO F_ LINE. W RITE: / F_ LINE-COL1, F_ LINE-COL2. ENDLOOP. ENDFORM .

Lima-Per

Pg ina 165 de 230

CURSO ABAP BASICO


www.bizpartner.biz

CONSIDERACIONES: FUNCIONA IGUA L CHANGING QUE USING.

REPORT

ZEJ7 MESSAGE-ID CU.

DATA: NUM1 TYPE I, NUM2 TYPE I, RES TYPE P DECIMALS 2. NUM1 = 3. NUM2 = 4. PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES. NUM1 = 5. NUM2 = 0. PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES. NUM1 = 2. NUM2 = 3. PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES. *CON CUALQUIERA DE LOS DOS FORM TRABAJA IGUAL. *FORM DIVIDE USING N1 N2 CHANGING R. FORM DIVIDE USING N1 N2 R. CHECK N2 NE 0. R = N1 / N2. WRITE: / N1, '/', N2, '=', R. ENDFORM.

SIN CHA NGING, FUNCIONA IGUA L

DATA: NUM1 TYPE I, NUM2 TYPE I, RES TYPE P DECIMALS 2. NUM1 = 3. NUM2 = 4. PERFORM DIVIDE USING NUM1 NUM2 RES. NUM1 = 5. NUM2 = 0. PERFORM DIVIDE USING NUM1 NUM2 RES. NUM1 = 2. NUM2 = 3. PERFORM DIVIDE USING NUM1 NUM2 RES. *FORM DIVIDE USING N1 N2 CHANGING R. FORM DIVIDE USING N1 N2 R. CHECK N2 NE 0. R = N1 / N2. WRITE: / N1, '/', N2, '=', R. ENDFORM.

Lima-Per

Pg ina 166 de 230

CURSO ABAP BASICO


www.bizpartner.biz

CONSIDERACIONES: FUNCIONA IGUA L CHANGING QUE USING.


REPORT ZEJ7 MESSAGE-ID CU.

DATA: NUM1 TYPE I, NUM2 TYPE I, SUM TYPE I. NUM1 = 2. NUM2 = 4. PERFORM ADDIT USING NUM1 NUM2 CHANGING SUM. NUM1 = 7. NUM2 = 11. PERFORM ADDIT USING NUM1 NUM2 CHANGING SUM. *LOS DOS FORM FUNCIONAN IGUAL *FORM ADDIT USING ADD_NUM1 ADD_NUM2 CHANGING ADD_SUM. FORM ADDIT USING ADD_NUM1 ADD_NUM2 ADD_SUM. ADD_SUM = ADD_NUM1 + ADD_NUM2. PERFORM OUT USING ADD_NUM1 ADD_NUM2 ADD_SUM. ENDFORM. FORM OUT USING OUT_NUM1 OUT_NUM2 OUT_SUM. WRITE: / 'Sum of', OUT_NUM1, 'and', OUT_NUM2, 'is', OUT_SUM. ENDFORM.

SIN CHA NGING, FUNCIONA IGUA L


REPORT ZEJ7 MESSAGE-ID CU.

DATA: NUM1 TYPE I, NUM2 TYPE I, SUM TYPE I. NUM1 = 2. NUM2 = 4. PERFORM ADDIT USING NUM1 NUM2 SUM. NUM1 = 7. NUM2 = 11. PERFORM ADDIT USING NUM1 NUM2 SUM. *FORM ADDIT USING ADD_NUM1 ADD_NUM2 CHANGING ADD_SUM. FORM ADDIT USING ADD_NUM1 ADD_NUM2 ADD_SUM. ADD_SUM = ADD_NUM1 + ADD_NUM2. PERFORM OUT USING ADD_NUM1 ADD_NUM2 ADD_SUM. ENDFORM. FORM OUT USING OUT_NUM1 OUT_NUM2 OUT_SUM. WRITE: / 'Sum of', OUT_NUM1, 'and', OUT_NUM2, 'is', OUT_SUM. ENDFORM.

Lima-Per

Pg ina 167 de 230

CURSO ABAP BASICO


www.bizpartner.biz

CONSIDERACIONES: PASO POR VA LOR Y POR REFERENCIA.


POR DEFECTO ES POR REFERENCIA.

REPORT

ZEJ7 MESSAGE-ID CU.

DATA: NUM TYPE I VALUE 5, FAC TYPE I VALUE 0. PERFORM FACT USING NUM CHANGING FAC. WRITE: / 'Factorial of', NUM, 'is', FAC. FORM FACT USING VALUE(F_NUM) CHANGING F_FACT. *FORM FACT USING F_NUM CHANGING F_FACT. F_FACT = 1. WHILE F_NUM GE 1. F_FACT = F_FACT * F_NUM. F_NUM = F_NUM - 1. ENDWHILE. ENDFORM.

REPORT

ZEJ7 MESSAGE-ID CU.

DATA: NUM TYPE I VALUE 5, FAC TYPE I VALUE 0. PERFORM FACT USING NUM CHANGING FAC. WRITE: / 'Factorial of', NUM, 'is', FAC. *FORM FACT USING VALUE(F_NUM) CHANGING F_FACT. FORM FACT USING F_NUM CHANGING F_FACT. F_FACT = 1. WHILE F_NUM GE 1. F_FACT = F_FACT * F_NUM. F_NUM = F_NUM - 1. ENDWHILE. ENDFORM.

Lima-Per

Pg ina 168 de 230

CURSO ABAP BASICO


www.bizpartner.biz

CONSIDERACIONES: PASO POR VA LOR Y POR REFERENCIA USO DE TYPE.


REPORT ZEJ7 MESSAGE-ID CU.

DATA: NUM TYPE I VALUE 5, FAC TYPE I VALUE 0. PERFORM FACT USING NUM CHANGING FAC. WRITE: / 'Factorial of', NUM, 'is', FAC. *FUNCIONA CON TYPE I, PERO NO CON TYPE P.

FORM FACT USING VALUE(F_NUM) CHANGING F_FACT TYPE I.


*FORM FACT USING F_NUM CHANGING F_FACT. F_FACT = 1. WHILE F_NUM GE 1. F_FACT = F_FACT * F_NUM. F_NUM = F_NUM - 1. ENDWHILE. ENDFORM.

REPORT

ZEJ7 MESSAGE-ID CU.

DATA: NUM TYPE I VALUE 5, FAC TYPE P VALUE '1.3'. PERFORM FACT USING NUM CHANGING FAC. WRITE: / 'Factorial of', NUM, 'is', FAC. * AQUI FUNCIONA PARA TYPE P, PERO NO PARA TYPE I

FORM FACT USING VALUE(F_NUM) CHANGING F_FACT TYPE P.


*FORM FACT USING F_NUM CHANGING F_FACT. F_FACT = 1. WHILE F_NUM GE 1. F_FACT = F_FACT * F_NUM. F_NUM = F_NUM - 1. ENDWHILE. ENDFORM.

Lima-Per

Pg ina 169 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Example: Local Modularization in Programs


DATA res_seats TYPE saplane-seatsmax. PARAMETERS: pa_type TYPE saplane-planetype, pa_occ TYPE saplane-seatsmax. PERFORM get_free_seats USING pa_type pa_occ CHANGING res_seats.

WRITE res_seats. ********************************************************************** FORM get_free_seats USING p_planetype TYPE saplane-planetype p_seatsocc TYPE saplane-seatsmax CHANGING value(p_seatsfree) TYPE saplane-seatsmax. SELECT SINGLE seatsmax FROM saplane INTO p_seatsfree WHERE planetype = p_planetype. p_seatsfree = p_seatsfree - p_seatsocc. ENDFORM.
SAP AG 1999

Lima-Per

Pg ina 170 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 171 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Funciones
1. OBJETIVO Mostrar el manejo de funciones mediante ejercicios.

2.

CREACIN DE UN GRUPO DE FUNCION Trabajamos con la transaccin SE37 Seleccionamos: Goto Function groups Create group.

El no mbre del grupo de funcin personalizado debe empezar con Z. Crearemos el grupo de funcin: ZANIBA L3.

Clic en Schem.

Presionamos el botn Local Objeto, con lo que tenemos el grupo de funcin creado. Co mo confirmacin en la barra de status aparece el mensaje: Function Group ZANIBA L3 created.

Lima-Per

Pg ina 172 de 230

CURSO ABAP BASICO


www.bizpartner.biz

3.

PRIMER EJEMPLO DE FUNCI ON Crearemos una funcin que invierta una cadena. Trabajando con la transaccin SE37

Se coloca el nombre del mdulo de funcin (se antepone la letra Z), luego pulsar Create. Luego se coloca el nombre del grupo de funcin ( Function Group) ZANIBAL3 y se escribe un texto explicativo. En la paleta Import van todos los parmetros que sern pasados por valor (si des ea acti var esta opcin haga un check en Pass Value) desde el Editor de Abap para su proces amient o, no es necesario especificar su tipo.

En la paleta Export van todos los parmetros que sern devueltos por valor (si desea activar esta opcin haga un check en Pass Value) hacia el Edit or de Abap, no es necesario especificar su tipo.

Luego en la paleta Source code se especificar el cdigo fuente de que realizar la funcin.

Lima-Per

Pg ina 173 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Luego en la paleta Source code se especificar el cdigo fuente de que realizar la funcin.

Para finalizar, hay que guardarlo y activarlo. En el editor de Abap el cdigo ser el siguiente.
DATA: LINEA1 TYPE STRING VALUE 'Montenegro', LINEA2 TYPE STRING. CALL FUNCTION 'ZFUNCION_STRING' EXPORTING TEXT1 = LINEA1 IMPORTING TEXT2 = LINEA2. WRITE: / 'La cadena original es:', LINEA1, / 'La cadena invertida es:', LINEA2.

La salida en el Reporte ser como se muestra:

Lima-Per

Pg ina 174 de 230

CURSO ABAP BASICO


www.bizpartner.biz

4.

SEGUNDO EJEMP LO DE FUNCION Crearemos una funcin que no tiene datos definidos previamente.

Cuando se muestra la funcin desde FUNCTION BUILDER no muestra nada el valor de CADENARES. Llamndolo desde un reporte creado mediante la transaccin SE38.

El resultado final de CADENA RES solo se muestra cuando se corre desde el programa principal.

Lima-Per

Pg ina 175 de 230

CURSO ABAP BASICO


www.bizpartner.biz

5.

TERCER EJEMPLO DE FUNCION Crearemos una funcin al que definimos datos previamente. Aqu podemos probar desde FUNCTION BUILDER.

Llamndolo desde un reporte creado mediante la transaccin SE38.

Mostrndonos:

Lima-Per

Pg ina 176 de 230

CURSO ABAP BASICO


www.bizpartner.biz

FUNCION: WS_DOWNLOAD
To write data from an internal table to the present ation server without using a user dialog, use the function module WS_DOWNLOA D. The most impo rtant parameters are listed below. For more information, refer to the function module document ation in the Function Builder (Transaction SE37). Important Import Parameters Parameter BIN_FILESIZE CODEPAGE FILE NAME FILE TYPE MODE Function File lengt h for binary files Only for download under DOS: Value IBM Filename File type Write mode (blank = overwrit e, A = append)

Use the FILE TYPE parameter to specify the trans fer mode. Possible values:

BIN
Binary files: You must specify the file length. The internal table must consist of a single column with data type X.

ASC
ASCII files:

DAT
Excel files: The columns are separated using tabs. The lines are separat ed with line breaks.

WK1
Excel and Lotus files: The files are saved in a WK1 spreadsheet.

Lima-Per

Pg ina 177 de 230

CURSO ABAP BASICO


www.bizpartner.biz

EJERCICIO. Bajar una tabla inte rna creada mediante APPEND.


REPORT ZANI18 DATA: BEGIN OF t OCCURS 0, a(3) type c, z(3) type c, END OF t. t-a = 'b'. t-z = 'b12'. APPEND t. t-a = 'b1'. t-z = 'gg2'. APPEND t. t-a = 'b2'. t-z = 'rr2'. APPEND t. t-a = 'b3'. t-z = '342'. APPEND t. CALL FUNCTION 'WS_DOWNLOAD' EXPORTING filename = 'C:\prueba_hoy.txt' filetype = 'ASC' TABLES data_tab = t. .

Lima-Per

Pg ina 178 de 230

CURSO ABAP BASICO


www.bizpartner.biz

WS_DOWNLOAD
6. OBJETIVO Lograr que el alumno realice la descarga de datos desde una tabla que se encuentra en SAP hacia un archivo de su PC..

7.

PROGRAMA EJEMPLO
.

REPORT ZANI18 TABLES: SCARR, SPFLI, SFLIGHT. TYPES: BEGIN OF EST_JUNTOS, CARRID LIKE SCARR-CARRID, CONNID LIKE SPFLI-CONNID, COUNTRYFR LIKE SPFLI-COUNTRYFR, END OF EST_JUNTOS.

DATA: TABLITA TYPE TABLE OF EST_JUNTOS WITH HEADER LINE. SELECT SCARR~CARRID SPFLI~CONNID SPFLI~COUNTRYFR INTO TABLE TABLITA FROM SCARR JOIN SPFLI ON SCARR~CARRID = SPFLI~CARRID. CALL FUNCTION 'WS_DOWNLOAD' EXPORTING filename filetype TABLES data_tab

= 'C:\prueba_hoy.txt' = 'ASC' = TABLITA.

Lima-Per

Pg ina 179 de 230

CURSO ABAP BASICO


www.bizpartner.biz

WS_UPLOAD
8. OBJETIVO Lograr que el alumno realice la descarga de datos desde una tabla que se encuentra en SAP hacia un archivo de su PC..

9.

PROGRAMA EJEMPLO Levantando informacin tomando como base la estructura de la tabla estndar WBTAB LE. Revise el funcionamiento de los campos tiempo y hora.

REPORT Z_WS_UPLOAD TYPES: BEGIN OF Ty_CAMPOS, FLID LIKE WBTABLE-FLID, LVCITY LIKE WBTABLE-LVCITY, LVTIME LIKE WBTABLE-LVTIME, REGLR LIKE WBTABLE-REGLR, CHRTR LIKE WBTABLE-CHRTR, MOVIE LIKE WBTABLE-MOVIE, SNACK LIKE WBTABLE-SNACK, FMEAL LIKE WBTABLE-FMEAL, ARCITY LIKE WBTABLE-ARCITY, ARTIME LIKE WBTABLE-ARTIME, LVDATE LIKE WBTABLE-LVDATE, ARDATE LIKE WBTABLE-ARDATE, END OF Ty_CAMPOS. DATA: ARCHIVO LIKE RLGRAP-FILENAME, TIPO LIKE RLGRAP-FILETYPE.

DATA: t_REGISTRO TYPE Ty_CAMPOS OCCURS 10 WITH HEADER LINE. ARCHIVO = 'C:\TEMP\ABC.DAT'. TIPO = 'DAT'. CALL FUNCTION 'WS_UPLOAD' EXPORTING FILENAME = ARCHIVO FILETYPE = TIPO TABLES DATA_TAB = t_REGISTRO. LOOP AT t_REGISTRO. WRITE: / t_REGISTRO-FLID, t_REGISTRO-LVCITY, t_REGISTRO-LVDATE, t_REGISTRO-LVTIME, t_REGISTRO-REGLR, t_REGISTRO-CHRTR, t_REGISTRO-MOVIE, t_REGISTRO-SNACK, t_REGISTRO-FMEAL, t_REGISTRO-ARCITY, t_REGISTRO-ARDATE, t_REGISTRO-ARTIME. ENDLOOP.

Lima-Per

Pg ina 180 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 181 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Batch input
10. OBJETIVO Lograr que el alumno realice la carga masiva de datos empleando una transaccin estndar de SAP.

11.

TRANS ACCIN STANDAR Vamos a realizar Batch Input a la transaccin estndar TUTT: Tutorial de Workbench.

12.

INFORMACIN TCNICA DE CAMPOS Para analizar con que campos estn relacionados las cajas de ingreso de informacin, presionamos f1 sobre estos e ingresamos a su informacin tcnica.

Lima-Per

Pg ina 182 de 230

CURSO ABAP BASICO


www.bizpartner.biz

13.

TABLA RELACIONADA Esta transaccin llena la tabla WB TABLE de estructura:

14. 1. 2. 3. 4. 5.

CREANDO UNA B ATCH INPUT A LA TUTT SHDB Grabar nueva: o Crear (F5) No mbrar la g rabacin (Z_TUTT_XX01) Especificar el cdigo de transaccin (TUTT) Iniciar grabacin Start recording:

Lima-Per

Pg ina 183 de 230

CURSO ABAP BASICO


www.bizpartner.biz

6.

Se presenta la pantalla de la transaccin TuTT.

7. 8.

Completar los datos y grabar Finalmente volver Back (F3) .

Aparece la ventana de grabacion de la BI

9.

Grabar

Save (Ctrl+S)

Lima-Per

Pg ina 184 de 230

CURSO ABAP BASICO


www.bizpartner.biz

15.

PROGRAMA

REPORT Z_AOSB_BATCH1 . TYPES: BEGIN OF Ty_CAMPOS, FLID LIKE WBTABLE-FLID, LVCITY LIKE WBTABLE-LVCIT Y, LVDATE LIKE WBT ABLE-LVDATE, LVTIME LIKE WBTABLE-LVTIME, REGLR LIKE WBT ABLE-REGLR, CHRT R LIKE WBTABLE-CHRT R, MOVIE LIKE WBT ABLE-MOVIE, SNACK LIKE WBTABLE-SNACK, FMEAL LIKE WBTABLE-FMEAL, ARCITY LIKE WBT ABLE-ARCITY, ARDATE LIKE WBTABLE-ARDATE, ARTIME LIKE WBTABLE-ART IME, END OF Ty_CAMPOS. DAT A: ARCHIVO LIKE RLGRAP-FILENAME, TIPO LIKE RLGRAP -FILETYPE. DAT A: t_REGIST RO T YPE Ty_CAMPOS OCCURS 10 WITH HEADER LINE. *----------------------Tablas para el Batch Input ----------------------* DAT A: T_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE. DAT A: T_MESST AB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE. *----------------------------------------------------------------------* * LEER LAYOUT Y CARGARLO EN TABLA INTERNA. PERFORM LEE_LAYOUT. * HACER LOOP A LA TABLA INTERNA LOOP AT t_REGIST RO. PERFORM TUTT_LLENA_DYNPRO_FIELD USING t_REGIST RO. ENDLOOP. CALL TRANSACTION 'T UTT' USING T_BDCDATA MODE 'N' UPDATE 'A' MESSAGES INTO T_MESST AB. *----------------------------------------------------------------------* FORM BDC_DYNPRO USING PROGRAM DYNPRO. CLEAR T_BDCDATA. T_BDCDATA-PROGRAM = PROGRAM. T_BDCDATA-DYNPRO = DYNPRO. T_BDCDATA-DYNBEGIN = 'X'. APPEND T_BDCDATA. ENDFORM. *----------------------------------------------------------------------* FORM BDC_FIELD USING FNAM FVAL. CLEAR T_BDCDATA. T_BDCDATA-FNAM = FNAM. T_BDCDATA-FVAL = FVAL. APPEND T_BDCDATA. ENDFORM. *----------------------------------------------------------------------* FORM TUTT_LLENA_DYNPRO_FIELD USING AUART . PERFORM BDC_DYNPRO USING 'T UTPROG' '0100'. PERFORM BDC_FIELD USING 'BDC_CURSOR' 'W BTABLE-CHRT R'. PERFORM BDC_FIELD USING 'BDC_OKCODE' '=CREA'. PERFORM BDC_FIELD USING 'WBTABLE-FLID' t_REGIST RO-FLID. PERFORM BDC_FIELD USING 'WBTABLE-LVCITY' t_REGIST RO-LVCIT Y. PERFORM BDC_FIELD USING 'WBTABLE-ARCIT Y' t_REGIST RO-ARCITY. PERFORM BDC_FIELD USING 'WBTABLE-LVDATE' t_REGIST RO-LVDATE. PERFORM BDC_FIELD USING 'WBTABLE-ARDATE' t_REGIST RO-ARDATE. PERFORM BDC_FIELD USING 'WBTABLE-LVTIME' t_REGIST RO-LVTIME. PERFORM BDC_FIELD USING 'WBTABLE-ARTIME' t_REGIST RO-ARTIME. PERFORM BDC_FIELD USING 'WBTABLE-REGLR' t_REGIST RO-REGLR. PERFORM BDC_FIELD USING 'WBTABLE-CHRT R' t_REGIST RO-CHRTR. PERFORM BDC_FIELD USING 'WBTABLE-MOVIE' t_REGIST RO-MOVIE. PERFORM BDC_FIELD USING 'WBTABLE-SNACK' t_REGIST RO-SNACK. PERFORM BDC_FIELD USING 'WBTABLE-FMEAL' t_REGIST RO-FMEAL. ENDFORM. *----------------------------------------------------------------------* FORM LEE_LAYOUT. ARCHIVO = 'C:\TEMP\ABC.DAT'. TIPO = 'DAT'.

Lima-Per

Pg ina 185 de 230

CURSO ABAP BASICO


www.bizpartner.biz CALL FUNCTION 'W S_UPLOAD' EXPORTING FILENAME = ARCHIVO FILETYPE = TIPO TABLES DAT A_TAB = t_REGIST RO. ENDFORM.

16.

ARCHIVO DE CARGA Se debe generar el archivo de texto: A BC.DAT en base a la tabla estndar WBTABLE:

Debe realizar los ajustes neces arios para que la fecha cargue correctamente. 17. INSTRUCCIN CALL TRANSACTION CALL TRANSA CTION <transaction> USING <tabint> MODE <modo_ejec> UPDATE <tipo_actual>. Donde: <tabint> Tabla interna (con estructura BDCDATA). <modo_ejec> Modo de ejecucin. Puede ser: A Ejecucin visib le. N Ejecucin invisible. E Ejecucin visualizando solo errores. <ti po_actual> Tipo de actualizacin en base de datos. Puede ser: S Actualizacin sincrnica (in mediata). A Actualizacin asncrona (Graba solo cuando termina la transaccin). 18. EJERCICIOS A. Realice el Batch Input de tal manera que los campos MOVIE, SNA CK y FM EA L no sean levantados. B. Agregue un reporte al Batch Input. C. Levante los vuelos que partan de THF y lleguen a CDG.

Lima-Per

Pg ina 186 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 187 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Rangos ASPECTOS TEORICOS

Campo
SIGN

Significado
Tipo alfanumrico de longitud 1. Es un flag que se utiliza para indicar si la condicin es inclusiva o exclusiva. Los valores posibles son I y E. I: se utiliza para el criterio de inclusin. E: se utiliza para el criterio de exclusin.

OPTION

Tipo alfanumrico de longitud 2. Contiene el operador de seleccin. Los operadores validos de seleccin son: EQ: igual a (no se puede utilizar el campo HIGH). NE: no igual a (no se puede utilizar el campo HIGH). GE: mayor o igual que (no se puede utilizar el campo HIGH). GT: mayor que (no se puede utilizar el campo HIGH). LE: menor o igual que (no se puede utilizar el campo HIGH). LT: menor que (no se puede utilizar el campo HIGH). CP: contiene el <patrn>. Los caracteres especiales son <+> y <*> (no se puede utilizar el campo HIGH). NP: no contiene el <patrn>. Los caracteres especiales son <+> y <*> (no se puede utilizar el campo HIGH). BT: entre los valores (se utilizan los campos LOW y HIGH). NB: no entre los valores (se utilizan los campos LOW y HIGH).

LOW

El tipo de dato LOW es el mismo que el campo referenciado en la sentencia RANGES con la clusula FOR. Si el campo HIGH esta vaci, LOW indica un valor sencillo. Si el campo HIGH tiene algn valor, LOW y HIGH marcan los lmites del criterio de seleccin (puede existir sola).

HIGH

El tipo de dato HIGH es el mismo que el campo referenciado en la sentencia RANGES con la clusula FOR. HIGH siempre se utiliza en combinacin con el campo LOW (no puede estar sin el campo LOW).

Lima-Per

Pg ina 188 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Trabajando con la tabla SCARR


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 REPORT ZA NI31 TABLES : SCARR. TYPES : BEGIN OF ES T_CARR, CARRID LIKE SCARR-CA RRID, CARRNAME LIKE SCA RR-CA RRNAME, END OF EST_CA RR. DA TA : T_SCA RR TYPE TABLE OF ES T_CARR WITH HEA DER LINE. DA TA : N(2) TYPE N. RANGES: R_RA NGO FOR SCARR-CA RRID. R_RANGO-SIGN = 'I'. R_RANGO-OPTION = 'BT'. R_RANGO-LOW = 'GA'. R_RANGO-HIGH = 'PQ'. APPEND R_RANGO. WRITE:/10 'ITEM NUMMA TERIAL STOCK DISP'. .

SELECT SCARR~CA RRID SCARR~CA RRNAME INTO TABLE T_S CARR FROM S CARR WHERE SCARR~CA RRID IN R_RA NGO. N = 0. LOOP A T T_S CARR. N = N + 1. WRITE : /11 N, 20 T_S CARR-CA RRID, 33 T_S CARR-CA RRNAME. ENDLOOP.

Lima-Per

Pg ina 189 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 190 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Formato de reportes
TOP-OF-PAGE Define un bloque de proceso que se activa cuando el sistema detecta que vamos a comen zar a escribir en la pgina actual. Se act iva en cada inicio de pagina por defecto siempre hay uno al iniciar el programa. NEW-PAGE Fuerza al sistema a crear una nueva pgina
REPORT ZPROG2 WRITE 'CABECERA DEL INFORME'. .

REPORT ZPROG2. TOP-OF-PAGE. WRITE 'CABECERA DEL INFORME'.

No muestra nada.
REPORT ZPROG2. WRITE 'ANTES DE CABECERA'. TOP-OF-PAGE. WRITE 'CABECERA DEL INFORME'.

REPORT ZPROG2. WRITE 'ANTES DE CABECERA'. NEW-PAGE. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'.

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP-OF-PAGE ******'.

Lima-Per

Pg ina 191 de 230

CURSO ABAP BASICO


www.bizpartner.biz REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE 'SEGUNDA LINEA - SECUENCIA NORMAL'. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP -OF-PAGE ******'.

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE / 'SEGUNDA LINEA - SECUENCIA NORMAL'. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP -OF-PAGE ******'.

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE 'SEGUNDA LINEA - SECUENCIA NORMAL'. NEW-PAGE. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP-OF-PAGE ******'.

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE 'SEGUNDA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE 'TERCERA LINEA - SECUENCIA NORMAL'. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP -OF-PAGE ******'.

Lima-Per

Pg ina 192 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Creating Complex Lists


Lists are the output medium for structured, formatted data from ABAP programs. Each program can produce up to 21 lists, one basic list and 20 secondary lists. The basic list is the standard screen of an executable program (report). You can display the basic list in a transaction using the LEAVE TO LIS T-PROCESSING statement. This section deals with creating lists in general. That means, most of the statements described here apply to basic as well as to secondary lists. By default, the system transfers the output of a program to the basic list. In most cases, the basic list is the only list of a program. For this reason, the examples in this section mainly deal with the basic list.

REPORT demo_list_standard. TABLES spfli. SKIP. ULINE AT /(62). SELECT * FROM spfli WHERE connid GE 0017 AND connid LE 0400. WRITE: / sy-vline, spfli-connid, sy-vline, (15) spfli-cityfrom, 26 sy-vline, 31 spfli-cityto, 51 sy-vline, 62 sy-vline, / sy-vline, 8 sy-vline, spfli-deptime UNDER spfli-cityfrom, 26 sy-vline, spfli-arrtime UNDER spfli-cityto, 51 sy-vline, spfli-fltime, 62 sy-vline. LINE AT /(62). ENDSELECT.

Lima-Per

Pg ina 193 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_page_heading NO STANDARD PAGE HEADING. *REPORT demo_list_page_heading. TOP-OF-PAGE. WRITE: sy-title, 40 'Page', sy-pagno. ULINE. WRITE: / 'SAP AG', 29 'Walldorf, ',sy-datum, / 'Neurottstr. 16', / '69190 Walldorf/Baden'. ULINE. START-OF-SELECTION. DO 5 TIMES. WRITE / sy-index. ENDDO.

No va hasta el final se recorta.

REPORT demo_list_page_heading. TOP-OF-PAGE. WRITE: sy-title, 40 'Page', sy-pagno. ULINE. WRITE: / 'SAP AG', 29 'Walldorf, ',sy-datum, / 'Neurottstr. 16', / '69190 Walldorf/Baden'. ULINE. START-OF-SELECTION. DO 5 TIMES. WRITE / sy-index. ENDDO.

Lima-Per

Pg ina 194 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_page_heading line-size 44. TOP-OF-PAGE. WRITE: sy-title, 40 'Page', sy-pagno. ULINE. WRITE: / 'SAP AG', 29 'Walldorf, ',sy-datum, / 'Neurottstr. 16', / '69190 Walldorf/Baden'. ULINE. START-OF-SELECTION. DO 5 TIMES. WRITE / sy-index. ENDDO.

REPORT demo_list_line_size LINE -SIZE 40. WRITE: 'SY-LINSZ:', sy-linsz. ULINE. DO 20 TIMES. WRITE sy-index. ENDDO.

REPORT sapmztst. SKIP 5. WRITE '*****'.

Lima-Per

Pg ina 195 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT sapmztst. SET BLANK LINES OFF. DO 25 TIMES. WRITE / ' '. ENDDO. WRITE '*****'.

REPORT sapmztst. SET BLANK LINES ON. DO 5 TIMES. WRITE / ' '. ENDDO. WRITE '*****'.

REPORT sapmztst. DO 5 TIMES. WRITE / ' '. ENDDO. WRITE '*****'.

REPORT demo_list_line_count LINE-SIZE 40 LINE-COUNT 4. WRITE: 'SY-LINCT:', sy-linct. SKIP. DO 6 TIMES. WRITE / sy-index. ENDDO.

Lima-Per

Pg ina 196 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_end_of_page LINE-SIZE 40 LINE-COUNT 6(2) NO STANDARD PAGE HEADING. TOP-OF-PAGE. WRITE: 'Page with Header and Footer'. ULINE AT /(27). END-OF-PAGE. ULINE. WRITE: /30 'Page', sy-pagno. START-OF-SELECTION. DO 6 TIMES. WRITE / sy-index. ENDDO.

CUANDO AD ICIONO PIE DE PAGINA CON: 6(2) NECESARIAMENTE DEBO ESCRIBIR NO STANDARD PAGE HEADING.
REPORT demo_list_end_of_page LINE-SIZE 40 LINE-COUNT 10(2) NO STANDARD PAGE HEADING. TOP-OF-PAGE. WRITE: 'Page with Header and Footer'. ULINE AT /(27). END-OF-PAGE. ULINE. WRITE: /30 'Page', sy-pagno. START-OF-SELECTION. DO 6 TIMES. WRITE / sy-index. ENDDO.

CARECE DE SENTIDO EL PIE DE PAGINA POR

10(2)

Lima-Per

Pg ina 197 de 230

CURSO ABAP BASICO


www.bizpartner.biz

NEW-PAGE
REPORT demo_list_new_page LINE-SIZE 40. TOP-OF-PAGE. WRITE: 'TOP-OF-PAGE', sy-pagno. ULINE AT /(17). START-OF-SELECTION. DO 2 TIMES. WRITE / 'Loop:'. DO 3 TIMES. WRITE / sy-index. ENDDO. NEW-PAGE. ENDDO.

REPORT demo_list_reserve LINE-SIZE 40 LINE-COUNT 8(2). END-OF-PAGE. ULINE. START-OF-SELECTION. DO 4 TIMES. WRITE / sy-index. ENDDO. DO 2 TIMES. WRITE / sy-index. ENDDO. RESERVE 3 LINES. WRITE: / 'LINE 1', / 'LINE 2', / 'LINE 3'.

Lima-Per

Pg ina 198 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_reserve LINE-SIZE 40 LINE-COUNT 8(2). END-OF-PAGE. ULINE. START-OF-SELECTION. DO 4 TIMES. WRITE / sy-index. ENDDO. DO 2 TIMES. WRITE / sy-index. ENDDO. *RESERVE 3 LINES. *WRITE: / 'LINE 1', */ 'LINE 2', */ 'LINE 3'.

REPORT demo_list_reserve LINE-SIZE 40 LINE-COUNT 14(2). END-OF-PAGE. ULINE. START-OF-SELECTION. DO 4 TIMES. WRITE / sy-index. ENDDO. DO 2 TIMES. WRITE / sy-index. ENDDO. *RESERVE 3 LINES. *WRITE: / 'LINE 1', */ 'LINE 2', */ 'LINE 3'.

Lima-Per

Pg ina 199 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_reserve LINE-SIZE 40 LINE-COUNT 8(2). END-OF-PAGE. ULINE. START-OF-SELECTION. DO 4 TIMES. WRITE / sy-index. ENDDO. DO 2 TIMES. WRITE / sy-index. ENDDO. *RESERVE 3 LINES. WRITE: / 'LINE 1', / 'LINE 2', / 'LINE 3'.

REPORT demo_list_new_page_options LINE-SIZE 40. WRITE: 'Page A', sy-pagno. NEW-PAGE NO-TITLE. WRITE: 'Page B', sy-pagno. NEW-PAGE NO-HEADING. WRITE: 'Page C', sy-pagno. NEW-PAGE WITH-TITLE. WRITE: 'Page D', sy-pagno. NEW-PAGE WITH-HEADING. WRITE: 'Page E', sy-pagno.

Lima-Per

Pg ina 200 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Page length of individual pages


NEW-PAGE LINE-COUNT <length>.

REPORT demo_list_new_page_line_c_1 LINE-SIZE 40 LINE-COUNT 0(1). END-OF-PAGE. ULINE. START-OF-SELECTION. NEW-PAGE LINE-COUNT 5. DO 4 TIMES. WRITE / sy-index. ENDDO. WRITE: / 'Next Loop:'. NEW-PAGE LINE-COUNT 6. DO 6 TIMES. WRITE / sy-index. ENDDO.

Lima-Per

Pg ina 201 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_new_page_line_c_2 NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 0(2). TOP-OF-PAGE. WRITE: 'Top of Page', sy-pagno, 'SY-SROWS:', sy-srows. ULINE. END-OF-PAGE. ULINE. WRITE: 'End of Page', sy-pagno. START-OF-SELECTION. *NEW-PAGE LINE-COUNT SY-SROWS. DO 100 TIMES. WRITE / sy-index. ENDDO.

????

Lima-Per

Pg ina 202 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_new_page_line_c_2 NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 0(2). TOP-OF-PAGE. WRITE: 'Top of Page', sy-pagno, 'SY-SROWS:', sy-srows. ULINE. END-OF-PAGE. ULINE. WRITE: 'End of Page', sy-pagno. START-OF-SELECTION. NEW-PAGE LINE-COUNT SY-SROWS. DO 100 TIMES. WRITE / sy-index. ENDDO.

Lima-Per

Pg ina 203 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Page Width of List Levels


You cannot change the width of individual pages within a list level. You can only change the width of all pages of a new list level. To do so, use the NEW -PAGE statement: Syntax NEW-PAGE LINE-SIZE <width>.

REPORT demo_list_scroll_1 NO STANDARD PAGE HEADING LINE-SIZE 40. TOP-OF-PAGE. WRITE: 'Top of Page', sy-pagno, 'SY-SROWS:', sy-srows. ULINE. START-OF-SELECTION. DO 10 TIMES. WRITE / sy-index. ENDDO. DO 3 TIMES. SCROLL LIST FORWARD. ENDDO.

Lima-Per

Pg ina 204 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_scroll_1 NO STANDARD PAGE HEADING LINE-SIZE 40. TOP-OF-PAGE. WRITE: 'Top of Page', sy-pagno, 'SY-SROWS:', sy-srows. ULINE. START-OF-SELECTION. DO 40 TIMES. WRITE / sy-index. ENDDO. DO 3 TIMES. SCROLL LIST FORWARD. ENDDO.

Lima-Per

Pg ina 205 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_scroll_2 NO STANDARD PAGE HEADING LINE-SIZE 40 LINE-COUNT 8(2). DATA: pag TYPE i VALUE 15, lin TYPE i VALUE 4. TOP-OF-PAGE. WRITE: 'Top of Page', sy-pagno. ULINE. END-OF-PAGE. ULINE. WRITE: 'End of Page', sy-pagno. START-OF-SELECTION. DO 100 TIMES. DO 4 TIMES. WRITE / sy-index. ENDDO. ENDDO.

Lima-Per

Pg ina 206 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_scroll_3 NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', sy -pagno, 'SY-SCOLS:', sy-scols. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE sy-index. ENDDO. SCROLL LIST RIGHT.

Lima-Per

Pg ina 207 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_scroll_3 NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', sy -pagno, 'SY-SCOLS:', sy-scols. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE sy-index. ENDDO. *SCROLL LIST RIGHT.

Lima-Per

Pg ina 208 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Scrolling by Columns
To scroll a list horizontally by columns, the SCROLL statement offers several options. A column in this case means one character of the list line. Scrolling to Specific Columns To scroll to specific columns, use the TO COLUMN option of the SCROLL statement: Syntax SCROLL LIST TO COLUMN <col> [INDEX <idx>].
REPORT demo_list_scroll_4 NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', sy-pagno, 'SY-SCOLS:', sy-scols. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE sy-index. ENDDO. SCROLL LIST TO COLUMN 178.

Lima-Per

Pg ina 209 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_scroll_3 NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', sy-pagno, 'SY-SCOLS:', sy-scols. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE sy-index. ENDDO. SCROLL LIST RIGHT.

Lima-Per

Pg ina 210 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Scrolling by Columns
To scroll a list horizontally by columns, the SCROLL statement offers several options. A column in this case means one character of the list line. Scrolling to Specific Columns To scroll to specific columns, use the TO COLUMN option of the SCROLL statement: Syntax SCROLL LIST TO COLUMN <col> [INDEX <idx>].
REPORT demo_list_scroll_4 NO STANDARD PAGE HEADING LINE-SIZE 200. TOP-OF-PAGE. WRITE: AT 161 'Top of Page', sy -pagno, 'SY-SCOLS:', sy-scols. ULINE. START-OF-SELECTION. DO 200 TIMES. WRITE sy-index. ENDDO. SCROLL LIST TO COLUMN 178.

Lima-Per

Pg ina 211 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT sapmztst NO STANDARD PAGE HEADING LINE-COUNT 3 LINE-SIZE 140. START-OF-SELECTION. DO 3 TIMES. WRITE: / 'SY-INDEX:'. DO 10 TIMES. WRITE sy-index. ENDDO. ENDDO. NEW-LINE NO-SCROLLING. ULINE AT 20(20). NEW-LINE NO-SCROLLING. WRITE AT 20 '| **** Fixed! **** |'. NEW-LINE NO-SCROLLING. ULINE AT 20(20). DO 3 TIMES. WRITE: / 'SY-INDEX:'. DO 10 TIMES. WRITE sy-index. ENDDO. ENDDO.

Lima-Per

Pg ina 212 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT sapmztst NO STANDARD PAGE HEADING LINE-COUNT 3 LINE-SIZE 140. START-OF-SELECTION. DO 3 TIMES. WRITE: /10 'SY-INDEX:'. DO 10 TIMES. WRITE sy-index. ENDDO. ENDDO. SET LEFT SCROLL-BOUNDARY COLUMN 20. DO 3 TIMES. WRITE: / 'SY-INDEX:'. DO 10 TIMES. WRITE sy-index. ENDDO. ENDDO. SET LEFT SCROLL-BOUNDARY COLUMN 10.

Lima-Per

Pg ina 213 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT demo_list_edges NO STANDARD PAGE HEADING. INCLUDE <line>. WRITE line_bottom_right_corner AS LINE. WRITE line_top_right_corner AS LINE. WRITE line_top_left_corner AS LINE.

REPORT demo_list_write_frame NO STANDARD PAGE HEADING LINE-SIZE 60. DATA: x TYPE i, y TYPE i, l TYPE i. DEFINE write_frame. x = sy-colno. y = sy-linno. write: '|' no-gap, &1 no-gap, '|' no-gap. l = sy-colno - x. y = y - 1. skip to line y. position x. uline at x(l). y = y + 2. skip to line y. position x. uline at x(l). y = y - 1. x = sy-colno. skip to line y. position x. END-OF-DEFINITION. SKIP. WRITE 'Demonstrating'. write_frame 'dynamic frames'. WRITE 'in'. write_frame 'ABAP'. WRITE 'output lists.'.

FALTA GRID CON TABLA STANDAR

Lima-Per

Pg ina 214 de 230

CURSO ABAP BASICO


www.bizpartner.biz

NO STANDARD PAGE HEADING.


REPORT demo_list_end_of_page LINE-SIZE 40 LINE-COUNT 6(2) NO STANDARD PAGE HEADING.

PERMITE ELIMINAR EL ENCABEZADO DEL REPORTE

LINE-COUNT 6

6
LINE-COUNT 6(2)

4 2

Lima-Per

Pg ina 215 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 216 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Operaciones con corresponding


REPORT ZDAS3Y RATE, VALUE '0.6667', VALUE '1.0', VALUE '7.0', MONEY, VALUE 100, VALUE 200, VALUE 300, .

DATA: BEGIN OF USA TYPE P FRG TYPE P AUT TYPE P END OF RATE. DATA: BEGIN OF USA TYPE I FRG TYPE I AUT TYPE I END OF MONEY.

ADD-CORRESPONDING MONEY TO RATE. WRITE / MONEY-USA. WRITE / MONEY-FRG. WRITE / MONEY-AUT. WRITE / '******'. WRITE / RATE-USA. WRITE / RATE-FRG. WRITE / RATE-AUT.

Lima-Per

Pg ina 217 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZDAS3Y DATA: BEGIN OF RATE, USA TYPE P VALUE '0.6667', FRG TYPE P VALUE '1.0', AUT TYPE P VALUE '7.0', END OF RATE. DATA: BEGIN OF MONEY, USA TYPE I VALUE 100, FRG TYPE I VALUE 200, AUT TYPE I VALUE 300, END OF MONEY. MULTIPLY-CORRESPONDING MONEY BY RATE. WRITE / RATE-USA. WRITE / RATE-FRG. WRITE / RATE-AUT. WRITE / '***********'. WRITE / MONEY-USA. WRITE / MONEY-FRG. WRITE / MONEY-AUT.

Lima-Per

Pg ina 218 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZDAS3Y DATA: BEGIN OF RATE, USA TYPE P VALUE '20', FRG TYPE P VALUE '15', AUT TYPE P VALUE '70', END OF RATE. DATA: BEGIN OF MONEY, USA TYPE P DECIMALS 2 VALUE 100, FRG TYPE P DECIMALS 2 VALUE 200, AUT TYPE P DECIMALS 2 VALUE 300, END OF MONEY. DIVIDE-CORRESPONDING MONEY BY RATE. WRITE / RATE-USA. WRITE / RATE-FRG. WRITE / RATE-AUT. WRITE / '***********'. WRITE / MONEY-USA. WRITE / MONEY-FRG. WRITE / MONEY-AUT.

Lima-Per

Pg ina 219 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT ZDAS3Y DATA: BEGIN OF USA TYPE P FRG TYPE P AUT TYPE P END OF RATE. DATA: BEGIN OF USA TYPE P FRG TYPE P AUT TYPE P END OF MONEY.

. RATE, VALUE '20', VALUE '15', VALUE '70', MONEY, DECIMALS 2 VALUE 100, DECIMALS 2 VALUE 200, DECIMALS 2 VALUE 300,

SUBTRACT-CORRESPONDING MONEY FROM RATE. WRITE / RATE-USA. WRITE / RATE-FRG. WRITE / RATE-AUT. WRITE / '***********'. WRITE / MONEY-USA. WRITE / MONEY-FRG. WRITE / MONEY-AUT.

Lima-Per

Pg ina 220 de 230

CURSO ABAP BASICO


www.bizpartner.biz

REPORT DAS. DATA: BEGIN OF DIRECCION, NOMBRE(20) VALUE 'Carlos', APELLIDO(20) VALUE 'Salcedo', INICIALES(4) VALUE 'CS', CALLE(20) VALUE 'Los Pinos 235', NUMERO TYPE I VALUE '11', CODIGOPOSTAL TYPE N VALUE '9', CIUDAD(20) VALUE 'Lima', END OF DIRECCION. DATA: BEGIN OF DATOS, APELLIDO(20) VALUE 'Gallardo', NOMBRE(20), INICIALES(4), TITULO(10) VALUE 'Ingeniero', END OF DATOS.

MOVE-CORRESPONDING DIRECCION TO DATOS.


WRITE: / DATOS-APELLIDO, DATOS-NOMBRE, DATOS-INICIALES, DATOS-TITULO.

Lima-Per

Pg ina 221 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 222 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Sql

INSERT
REPORT ZDSA TABLES SPFLI. DATA WA TYPE SPFLI. WA-CARRID = 'LH'. WA-CITYFROM = 'WASHINGTON'. INSERT INTO ZSPFLI VALUES WA. .

UPDATE
TABLES SPFLI. DATA WA TYPE SPFLI. MOVE 'AA' TO WA-CARRID. MOVE '0064' TO WA-CONNID. MOVE 'WASHINGTON' TO WA-CITYFROM. UPDATE SPFLI FROM WA.

DELETE
TABLES SPFLI. DATA: BEGIN OF WA, CARRID TYPE SPFLI-CARRID, CONNID TYPE SPFLI-CONNID, END OF WA. MOVE 'AA' TO WA-CARRID. MOVE '0064' TO WA-CONNID. DELETE SPFLI FROM WA. MOVE 'LH' TO SPFLI-CARRID. MOVE '0017' TO SPFLI-CONNID. DELETE SPFLI.

Lima-Per

Pg ina 223 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Ejemplos SQL
REPORT ZDSA DATA: CARRID TYPE SFLIGHT-CARRID, MINIMUM TYPE P DECIMALS 2, MAXIMUM TYPE P DECIMALS 2. SELECT CARRID MIN( PRICE ) MAX( PRICE ) INTO (CARRID, MINIMUM, MAXIMUM) FROM SFLIGHT GROUP BY CARRID. WRITE: / CARRID, MINIMUM, MAXIMUM. ENDSELECT. .

REPORT ZDSA DATA WA TYPE SFLIGHT. SELECT CONNID INTO WA-CONNID FROM SFLIGHT WHERE CARRID = 'LH' GROUP BY CONNID HAVING SUM( SEATSOCC ) > 300. WRITE: / WA-CARRID, WA-CONNID. ENDSELECT.

Lima-Per

Pg ina 224 de 230

CURSO ABAP BASICO


www.bizpartner.biz

DATA: BEGIN OF WA, CARRID TYPE SFLIGHT-CARRID, CONNID TYPE SFLIGHT-CONNID, MIN TYPE I, END OF WA. SELECT CARRID CONNID MIN( SEATSOCC ) AS MIN INTO CORRESPONDING FIELDS OF WA FROM SFLIGHT GROUP BY CARRID CONNID ORDER BY CARRID MIN DESCENDING. WRITE: / WA-CARRID, WA-CONNID, WA-MIN. ENDSELECT.

REPORT ZDSA DATA: BEGIN OF WA, CARRID TYPE SFLIGHT-CARRID, CONNID TYPE SFLIGHT-CONNID, MIN TYPE I, END OF WA. SELECT CARRID CONNID MIN( SEATSOCC ) AS MIN INTO CORRESPONDING FIELDS OF WA FROM SFLIGHT GROUP BY CARRID CONNID ORDER BY CARRID MIN DESCENDING. WRITE: / WA-CARRID, WA-CONNID, WA-MIN. ENDSELECT.

Lima-Per

Pg ina 225 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 226 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Alv

ALV GRID CONTROL Ejemplo de una pantalla con ALV grid:

Ejemplo sencillo de como implementar ALV grid


Este ejemplo usa la tabla ZSFLIGHT. Es equivalente a SFLIGHT. Pasos: 1. Crear un programa ejecutable (Report) 2. Crear un screen (100). 3. Colocar un custom container y ponerle nombre ALV_CONTAINER 4. Colocar un Pushbutton. Poner como en text Exit y en el functioncode EXIT REPORT z_alv_grid . TABLES: zsflight. *------------------------------------------------------------------* G L O B A L I N T E R N A L T A B L E S *------------------------------------------------------------------DATA: gi_sflight TYPE STANDARD TABLE OF sflight. *------------------------------------------------------------------* G L O B A L D A T A *------------------------------------------------------------------DATA: ok_code LIKE sy-ucomm, g_wa_sflight LIKE sflight. * Declare reference variables to the ALV grid and the container DATA: go_grid TYPE REF TO cl_gui_alv_grid, go_custom_container TYPE REF TO cl_gui_custom_container. *------------------------------------------------------------------* S T A R T - O F - S E L E C T I O N. *------------------------------------------------------------------START-OF-SELECTION. SET SCREEN '100'. *&-----------------------------------------------------------------*& Module USER_COMMAND_0100 INPUT

Lima-Per

Pg ina 227 de 230

CURSO ABAP BASICO


www.bizpartner.biz

*&-----------------------------------------------------------------MODULE user_command_0100 INPUT. CASE ok_code. WHEN 'EXIT'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. " USER_COMMAND_0100 INPUT *&-----------------------------------------------------------------*& Module STATUS_0100 OUTPUT *&-----------------------------------------------------------------MODULE status_0100 OUTPUT. * Create objects IF go_custom_container IS INITIAL. CREATE OBJECT go_custom_container EXPORTING container_name = 'ALV_CONTAINER'. CREATE OBJECT go_grid EXPORTING i_parent = go_custom_container. PERFORM load_data_into_grid. ENDIF. ENDMODULE. " STATUS_0100 OUTPUT *&-----------------------------------------------------------------*& Form load_data_into_grid *&-----------------------------------------------------------------FORM load_data_into_grid. * Read data from table SFLIGHT SELECT * FROM zsflight INTO TABLE gi_sflight. * Load data into the grid and display them CALL METHOD go_grid->set_table_for_first_display EXPORTING i_structure_name = 'SFLIGHT' CHANGING it_outtab = gi_sflight. ENDFORM. " load_data_into_grid

Lima-Per

Pg ina 228 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 229 de 230

CURSO ABAP BASICO


www.bizpartner.biz

Lima-Per

Pg ina 230 de 230

You might also like