Sei sulla pagina 1di 199

CURSO ABAP BASICO

www.bizpartner.biz

Solo puseIntroduccin
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 informtica 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
compaa. 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

Pgina 1 de 172

CURSO ABAP BASICO


www.bizpartner.biz
Presentacin
(SAP GUI)
1 . . .x

Sistema
SAP

(Presentacin, Aplicacin, Base de Datos).

TCP/IP
Panorama de un Sistema SAP
Aplicacin
(SAP)
1 . . .x
QAS

DEV

PRD

TCP/IP
Base de
datos
1

RPT

1.2 ABAP/4
Advanced Business Aplication Programming 4th
Generation
ABAP/4 es un lenguaje de programacin de 4a.
Generacin (4GL) orientado a cliente servidor tal como
su definicin especifica, al desarrollo de aplicaciones de
negocios. Todos los mdulos disponibles en SAP han
sido programados en este lenguaje de programacin.
Adems
podemos Fig. Fig.
1.02 1.03 escribir nuevas
aplicaciones en ABAP/4
c
o
m
o
complemento a las ya existentes o como apoyo a la
configuracin del sistema.

1.2.1 Caractersticas
El sistema R/3 tiene una arquitectura de software modular que permite trabajar con todas las
caractersticas de un software orientado a cliente servidor.
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 nivel mas bajo es el nivel de base de datos. Los datos son manejados con la ayuda de un sistema de
administracin de base de datos relacionales (RDBMS). 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 nivel 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 nivel 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
componentes. La distribucin horizontal de componentes de base de datos, sin embargo depende del tipo
de base de datos instalado.

1.3 Acceso a SAP


Todo comienza con el Logon, un pequeo selector de mquinas 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.

Lima-Per

Pgina 2 de 172

CURSO ABAP BASICO


www.bizpartner.biz

PROD: Mquina de produccin, all donde trabaja el cliente.

Fig. 1.04

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. Idioma (Language)
Con que idioma queremos acceder a SAP

Fig. 1.05

Lima-Per

Pgina 3 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

Fig. 1.06

1.4 ABAP WORKBENCH (S001)


El entorno de desarrollo para ABAP 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 como
Dictionary, Editor, Function Buider, etc. Otra forma de llegar a ellas es utilizando los cdigos de
transacciones, SE11, SE38, etc.

Lima-Per

Pgina 4 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Fig. 1.07

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 comandos /n o /o siempre que se quiera ejecutar en el mismo modo o en
otro modo. P.ej. /nse38 llama a la transaccin se38 (editor ABAP) dentro del mismo modo.

1.4.3 Principales herramientas de ABAP WORKBENCH


Browser (SE80)
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 (SE11)
El diccionario es la herramienta bsica para tener acceso a la construccin de tablas y estructuras de datos.
Editor ABAP (SE38)
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 ABAP.
Funciones (SE37)
Las funciones son herramientas que normalmente son independientes del entorno en el cual estamos
desarrollando, podran ser como las API de Windows, p.ej. conversiones de monedas, rutinas de validacin
de NIFs.

Lima-Per

Pgina 5 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Screen Painter (SE51)


Cuando necesitemos crear pantallas suficientemente complejas para poder interactuar con el usuario, vamos
a necesitar de esta herramienta.
Men Painter (SE41)
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 permitirn
trabajar mejor con nuestros programas, por ejemplo: diccionario de mensajes, BD Lgicas, transacciones, mens de
mbitos, anlisis de tiempo, etc.

1.4.4 El editor de ABAP


El Editor ABAP es la herramienta que va a usar para escribir los programas, clases, funciones mdulos, flujo lgico
de pantallas, etc.
Recordemos que ABAP es un leguaje interpretado. El editor de ABAP 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 ABAP, a partir de aqu se llama al programa con que
deseamos trabajar.
Puntos de mens ms interesantes:

Verificar

Activar

Ejecutar

Referencia de utilizacin

Anlisis de entorno

Manual online

Borrar

Copiar

Renombrar

Debugging

Ejecutar con variante

Variantes

Lima-Per

Pgina 6 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 nombres de programas de usuario que inicien con las letra Y y Z.
Sub objetos:
1.

Cdigo Fuente.

2.

Variante. 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.

3.

Atributos. Informacin referente al programa; Titulo, Tipo, Status, etc.

4.

Documentacin. Se refiere al texto que se muestra como informacin o ayuda.

5.

Elementos de texto. Son textos que podemos incluir en el programa de una forma abreviada.

Puntos del men


1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

Objeto Siguiente/Anterior
Visualizar/Modificar
Activo / Inactivo
Otro objeto
Verificar
Activar
Verifica-Ejecuta
Referencia de utilizacin
Visualizar lista de objetos
Visualizar ventana de navegacin
Imagen completa on/off
Ayuda para
Fijar/borrar breakpoint
Patron
Pretty Printer

Lima-Per

Pgina 7 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Fig. 1.09

Verificar.
Adems de poder verificar de una forma rpida, podemos hacer que nuestro editor sea 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.
Activar
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 pila.
Por 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 breakpoint
Fija un punto de parada al momento 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 propio editor quin nos
incluya la mascara de la misma. Este patrn se pueden modificar e incluso crear de nuevos.
Pretty-Printer

Lima-Per

Pgina 8 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

Cortar/Copiar/Pegar

2.

Deshacer/Rehacer

3.

Buscar/continuar busqueda

4.

Up/DownLoad

Finalmente una herramienta til es.


Ctrl. + < / Ctrl. + >
Comentar / Des comentar prrafo seleccionado.

Lima-Per

Pgina 9 de 172

CURSO ABAP BASICO


www.bizpartner.biz

1.5 Creacin de un programa ABAP


Al momento de crear un nuevo programa en ABAP lo primero que debemos hacer es ingresar un nombre de
programa. Como ya se menciono en SAP solo se permite nombres de programas de usuario 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.

Titulo

2.

Tipo

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

Fig. 1.11

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.

Lima-Per

Pgina 10 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Por el momento 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 Editor 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 quedar as:
REPORT ZBC_EJERCICIO1.
WRITE 'HOLA MUNDO'.

Lima-Per

Pgina 11 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Operaciones aritmticas y expresiones


2.1 Tipos

TIPOS DE DATOS

Carcter

Carcter (C)
Numeric carcter (N)
Date (D).

Temporal

Simples

Hexadecimal
Numrico

Time (T).

Byte field (X).


Integer (I).
Floating-point number (F).
Packed number (P).

Estucturas

Complejos

Tablas internas

TIPOS PREDEFINIDOS (Longitud variable)


Carcter
Hexadecimal

STRING
XSTRING

2.1.1 Definicin de tipos


Se pueden definir de tres formas:
Tipos predefinidos
Tipo de datos locales.
Tipo de datos de diccionario
Tipos predefinidos

CARACTERISTICAS DE LOS TIPOS CARCTER


CARACTER ( C )
1
2
3

Valor inicial:
Longitud de campo inicial: 1 byte.
Longitud de campo valido: 1 65535 bytes

Valor inicial: 0 0

CARCTER NUMERICO ( N )

Lima-Per

Pgina 12 de 172

CURSO ABAP BASICO


www.bizpartner.biz

2
3
4

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

Valor inicial: '00000000'

2
3
4

Longitud de campo inicial: 8 bytes.


Longitud de campo valido: 8 bytes
Formato: YYYYMMDD

TIME ( T )
1

Valor inicial: '000000'

2
3
4

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 inicial: 0
Longitud de campo inicial: 4 bytes
Longitud de campo valido: 4 bytes
Valor inicial: 0.
Los valores se encuentran en el rango: -2**31 a 2**31-1
Los valores resultantes de operaciones aritmticas (ej. Fracciones) son redondeados, no truncados.

NUMERO PUNTO FLOTANTE ( F )


1
2
3
4
5
6
7

Valor inicial: 0
Longitud de campo inicial: 8 bytes
Longitud de campo valido: 8 bytes
Los valores se encuentran en el rango: 1x10**-307 a 1x10**308
La exactitud aproximada es de 15 decimales (depende del floating point aritmethic del hardware).
Para efectos de aproximacin con decimales es mejor utilizar el tipo de dato P.
Puede utilizar P cuando necesita cubrir rangos muy amplios y no se requiere precisin en el
redondeo.

1
2
3
4
5

Valor inicial: 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 como Fixed point arithmetic, de lo contrario ser tratado
como entero.

NUMERO EMPAQUETADO ( P )

LONGITUD VARIABLE: STRING


1
2
3
4

Lima-Per

Es una secuencia de caracteres de longitud variable.


Puede contener cualquier carcter alfanumrico.
Valor inicial: cadena vaca de longitud cero.
Cuando se crea una cadena, solo una cabecera de cadena es creada.

Pgina 13 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Tipos de datos locales


Los programas pueden definir sus propios tipos de datos.
Se puede declarar tipos 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 ABAP.
Para ser compatibles con versiones anteriores se utiliza LIKE para referirse a tablas de base de datos y a estructuras
flat en el diccionario ABAP. Sin embargo es posible utilizar TYPE en las nuevas versiones.
Ejemplo X.1 Uso de TYPE.
TYPES: edad TYPE i,
estatura TYPE p DECIMALS 2,
codigo(3) TYPE c.
Se define el tipo de dato edad, que es del tipo predefinido I.
Se define el tipo de dato estatura, que es del tipo predefinido P con dos decimales.
Se define el tipo de dato codigo, que es del tipo predefinido C con una longitud de 3.

Ejemplo 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> ...,

Lima-Per

Pgina 14 de 172

CURSO ABAP BASICO


www.bizpartner.biz

..............
END OF <estructura>.
Ejemplo 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 tipo valor_spfli del mismo tipo que spfli (que es una tabla Standard).
Se define el tipo nombre_cliente de tipo C de ancho 20.
Se define la estructura direccion, con cuatro componentes: direccion, nombre, 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 tipo del campo cityfrom de la tabla spfli (referenciado por el tipo valor_spfli).
Ejemplo 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.

Ejemplo 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,

Lima-Per

Pgina 15 de 172

CURSO ABAP BASICO


www.bizpartner.biz

END OF listin.

Declaracin de datos
La sentencia DATA permite realizar la declaracin de datos.
DATA <campo> [ (<longitud>)] <tipo> [ <valor> ] [ <decimales> ]
Variante utilizada para declarar variables. El nombre de la variable <campo> no debe tener ms de 30 caracteres. Se
puede utilizar cualquier carcter a excepcin de: "+", ".", ",", ":", "(" y ")".
Adems el nombre 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 nombres significativos, que no requieran el uso de comentarios.
No utilizar el "guin" ya que podramos confundir la variable con un field-string.
Utilizar el "gui bajo" para nombres especiales.
No utilizar los caracteres especiales. Utilizar siempre una letra como primer carcter del nombre.
Con la opcin <tipo> se especifica el tipo de variable.
Con la opcin <decimales> se puede especificar el nmero de decimales para los campos de tipo P. El formato es el
siguiente: DECIMALS <num>, siendo <num> el nmero de dgitos despus del punto decimal. El nmero mximo
de decimales es de 14.

2.1.2 Tipos de operadores


Como cualquier lenguaje de programacin ABAP tiene la capacidad de realizar a los datos los clculos ms
complejos mediante un conjunto de operadores y un grupo de reglas bsicas.
Operadores aritmticos
OPERADOR

OPERADOR 1

OPERACION

ADD

Adicin

SUBSTRACT

Sustraccin

MULTIPLY

Multiplicacin

DIVIDE

Divisin

DIV

Divisin entera

MOV

Residuo de divisin entera

**

Potenciacin

Se utilizan de la siguiente manera:

Lima-Per

Pgina 16 de 172

CURSO ABAP BASICO


www.bizpartner.biz

OPERACIN

SENTENCIA

SENTENCIA

Adicin

<c> = <a> + <b>

ADD <a> TO <b>

Sustraccin

<c> = <a> - <b>

SUBSTRACT <a> FROM <b>

Multiplicacin

<c> = <a> * <b>

MULTIPLY <a> BY <b>

Divisin

<c> = <a> / <b>

DIVIDE <a> BY <b>

Divisin entera

<c> = <a> DIV <b>

Residuo de divisin

<c> = <a> MOD <b>

Potenciacin

<c> = <a> ** <b>

Funciona para cualquier formato de tipo numrico.


Si los operandos no son del mismo tipo, el sistema convierte el resultado al tipo 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

OPERADOR 2

OPERACION

EQ

<>

NE

<

LT

Menor que

<=

LE

Menor o igual que

>

GT

Mayor que

>=

GE

Mayor o igual que

Igual a
><

Diferente

Permite comparar dos objetos con diferentes tipos de datos.


Ambos operandos deben ser compatibles o convertibles.

Lima-Per

Pgina 17 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Tipos lgicos
OPERADOR

OPERACION

AND

OR

NOT

NEGACION

Permite combinar varias expresiones lgicas en una expresin simple.

2.1.3 Funciones matemticas


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

RESULTADO

ABS

VALOR ABSOLUTO

SIGN

SIGNO

CEIL

VALOR ENTERO MINIMO

FLOOR

VALOR ENTERO MAXIMO

TRUNC

ENTERO

FRAC

FRACCION

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


FUNCION

RESULTADO

ACOS, ASIN, ATAN, COS, SIN, TAN

FUNCIONES TRIGONOMETRICAS

COSH, SINH, TABH

FUNCIONES HIPERBOLICAS

EXP

EXPNOENCIAL CON BASE e

LOG

VALOR ENTERO MAXIMO

LOG10

LOGARITMO CON BASE 10

SQRT

RAIZ CUADRADA

2.1.4 Operaciones de salida/entrada simples


Para salida de datos: WRITE.

Lima-Per

Pgina 18 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 activa. La salida activa por defecto es la
pantalla. El campo <campo> puede ser cualquier objeto de dato, field-symbol o parmetro formal, o texto simblico.
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 por un espacio en blanco. 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

LONGITUD DE SALIDA

POSICIONAMIENTO

Longitud del campo

Justificado a la izquierda

Justificado a la izquierda

22

Justificado a la derecha

11

Justificado a la derecha

Longitud del campo

Justificado a la izquierda

2 * Longitud del campo (+1)

Justificado a la derecha

Justificado a la izquierda

2 * Longitud del campo

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 registro maestro de usuario.

Lima-Per

Pgina 19 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 <longitud>.
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 <longitud> 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 (*).
Entre otros formatos de write ms complejos, tenemos:
LEFT-JUSTIFIED
CENTERED
RIGHT-JUSTIFIED
UNDER <campo>
NO-GAP
USING EDIT MASK
<mscara>
USING NO EDIT MASK
NO-ZERO

WRITE <symbol> AS SYMBOL


WRITE <icono> AS ICON

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>.

WRITE <campo> AS CHECKBOX

Se escribe el campo <campo> con la caracterstica de


checkbox.

WRITE <campo> HOTSPOT

Cuando situemos el cursor por encima del campo, ste


cambiar a una mano, y con un solo click activaremos el

Lima-Per

Pgina 20 de 172

CURSO ABAP BASICO


www.bizpartner.biz

evento AT LINE-SELECTION.

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

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

el
el
el
el

registro
registro
registro
registro

maestro
maestro
maestro
maestro

de usuario.
de usuario.
de usuario.
de usuario.

Para campos numricos:


NO-SIGN

Salida sin signo.

DECIMALS <decimales>

<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 PARAMETERS.
PARAMETERS <parmetro> [ (<longitud)>].
[ TYPE <tipo> | LIKE <campo> ]
[ DECIMALS <decimales> ] [ DEFAULT <valor> ]
[ MEMORY ID <memoria>] [ MODIF ID <grupo> ]
[ MATCHCODE OBJECT <objeto> ] [ AS MATCHCODE STRUCTURE]
[ NO-DISPLAY ] [ LOWER CASE ] [ OBLIGATORY ] [ FOR TABLE <tabla> ]
[ AS CHECKBOX ] [ RADIOBUTTON GROUP <grupo> ]
[ VALUE-REQUEST ] [ HELP REQUEST ].
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 nombre del campo.

Lima-Per

Pgina 21 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 como veremos en el apartado
correspondiente a esta sentencia.
Se puede utilizar los parmetros de seleccin, por ejemplo, para que el usuario limite los valores desde y hasta para
una posterior lectura de la base de datos. Si las condiciones de seleccin son ms complejas que indicar un valor
desde y hasta, es preferible utilizar la sentencia SELECT-OPTIONS.
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 momento de presentar la pantalla de seleccin.
Recordemos que el evento INITIALIZATION 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 valor que aparece por defecto.
LOWER-CASE -> 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 tipo de parmetro con la opcin LIKE y
referenciamos un campo del diccionario de datos, la clusula LOWER CASE 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 (?).
Ejemplo 2.1 Uso de WRITE.
REPORT ZT.
WRITE 'Trabajando con ABAP.
REPORT ZT.
WRITE ' Trabajando ' &
' con ' &
'ABAP'.

Ejemplo 2.2 Uso de WRITE.


REPORT 1.

DATA SUM TYPE I.


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

Ejemplo 2.3 Uso de WRITE.

Lima-Per

Pgina 22 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

Ejemplo 2.4 Uso de WRITE.


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

Ejemplo 2.5 Uso de WRITE.


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

Ejemplo 2.6 Uso de WRITE.


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

Ejemplo 2.7 Uso de WRITE.


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

Lima-Per

Pgina 23 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Ejemplo 2.8 Uso de WRITE.


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

Ejemplo 2.9 Uso de WRITE.


REPORT 1.
data f1(4) type p value 1.
write 14 f1.
write 'Z'.
write /14 '1234'.

Ejemplo 2.10 Uso de WRITE.


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

Lima-Per

Pgina 24 de 172

CURSO ABAP BASICO


www.bizpartner.biz

REPORT 1.
data f1(4) type n value 1234.
data f2(6) type n value 123456.
data f3(8) type n value 12345678.
data f4(10) type n value 1234567890.
write f1.
write / f4.
write / '1234567890123456789'.
write / f2.
write / f3.
write / f4.
write / f1.

Ejemplo 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.

Ejemplo 2.13 Uso de WRITE.


REPORT 1.
data f1(4) type p value 1234.
write: / '----+----1----+--',
/ '12345678901234567'.
skip.
write /1 'X'.
write 'YZ'.
write 2 'YZ'.
write 3 'ABC'.
write 4 f1.
write 7 f1.
write 'Z'.

Ejemplo 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.

Lima-Per

Pgina 25 de 172

CURSO ABAP BASICO


www.bizpartner.biz

write /(2) 'XYZ'.


write /(4) 'XYZ'.
write 'ABC'.
write /5(4) f1.
write at /p(l) f1.

Ejemplo 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-gap, f1 no-gap, ''''.
Ejemplo 2.16 Uso de WRITE.
REPORT 1.
data: f1(4) value 'ABCD',
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___'.

Ejemplo 2.17 Uso de WRITE.


report 1.
data: f2 type i value '1234-'.

Lima-Per

Pgina 26 de 172

CURSO ABAP BASICO


www.bizpartner.biz

write / f2.
f2 = f2 + 2000.
write / f2.

Ejemplo 2.18 Uso de WRITE.


report 1.
data: f2 type i value '-1278'.
write / f2.
f2 = f2 + 2000.
write / f2.

Ejemplo 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.

Ejemplo 2.20 Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente
desea saber cuanto deber pagar finalmente por su compra.
REPORT ZPROBLEMA_01.
PARAMETERS: total TYPE P DECIMALS 3 DEFAULT ''.
total = total * ( 85 / 100 ).
WRITE: / La cantidad a pagar con el 15% de descuento es :, total.

Lima-Per

Pgina 27 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Ejemplo 2.21 Un vendedor recibe 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 recibir en el mes tomando en cuenta su sueldo base y comisiones.
REPORT ZPROBLEMA_02.
PARAMETERS: sueldo TYPE P DECIMALS 2 DEFAULT ''.
DATA: primer TYPE P DECIMALS 2,
segundo TYPE P DECIMALS 2,
tercer TYPE P DECIMALS 2.
primer = sueldo * ( 10 / 100 ).
sueldo = sueldo + primer.
segundo = sueldo * ( 10 / 100 ).
sueldo = sueldo + segundo.
tercer = sueldo * ( 10 / 100 ).
sueldo = sueldo + tercer.
SKIP.
write: / 'El primer mes recibira de comision
:', primer,
/ 'El segundo mes recibira de comision
:', segundo,
/ 'El tercer mes recibira de comision
:', tercer,
/ 'El monto acumulado al terminar los 3 meses es :', sueldo.

Lima-Per

Pgina 28 de 172

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

02
l

03

04
n

05
u

06
m

07
e

08
r

09
o

10

11

12

13

14
1

15
2

16
.

17
3

18
4

19
5

20
.

21
6

22
7

23
8

24
,

25
8

26
9

27
-

28

29
E

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

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

02
l

03

04
n

05
u

06
m

07
e

08
r

09
o

10

11
1

12
2

13
.

14
3

15
4

16
5

17
.

18
6

19
7

20
8

21
,

22
8

23
9

24
-

25

26

27

28

29
E

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 '8.89'.

Lima-Per

Pgina 29 de 172

CURSO ABAP BASICO


www.bizpartner.biz

WRITE '1234567890123456789012345678901234567890123456'.
WRITE: / 'El numero', NUMERO,'Es empaquetado'.

01
E

02
l

03

04
n

05
u

06
m

07
e

08
r

09
o

10

11

12

13

14

15

16

17

18

19

20

21

22

23
8

24
,

25
8

26
9

27

28

29
E

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

02
l

03

04
n

05
u

06
m

07
e

08
r

09
o

10

11

12

13

14

15

16

17

18

19

20

21

22

23
5

24
,

25
0

26
0

27

28

29
E

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 .
WRITE '1234567890123456789012345678901234567890123456'.
WRITE /5(40) 'Eliminando registros'.

Lima-Per

Pgina 30 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

21
t

22
r

23
o

24
s

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

18
g

19
i

20
s

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

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

16
l

17
i

18
m

19
i

20
n

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

35

36

37

38

39

40

Lima-Per

Pgina 31 de 172

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

02
l

03

04
t

05
e

06
x

07
P

08
E

09
R

10
U

11
A

12
e

13

14
v

15
a

16

17
a

18

19
s

20
e

21
r

22

23
s

24
o

25
b

26
r

27
e

28
e

29
s

30
c

31
r

32
i

33
t

34
o

35

36

37

38

39

40

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

02
l

03

04
t

05
e

06
x

07
P

08
E

09
R

10
U

11
A

12
N

13
O

14

15

16

17

18

19

20

21

22

23

24

25

26
r

27
e

28
e

29
s

30
c

31
r

32
i

33
t

34
o

35

36

37

38

39

40

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

ZCAPITULO_14_05

DATA: A TYPE I,
B TYPE I,
N TYPE P DECIMALS 3.

Lima-Per

Pgina 32 de 172

CURSO ABAP BASICO


www.bizpartner.biz

A = 2.
B = 13.
N = A / B.
* Parte a.
WRITE '01234567890123456789'.
WRITE /(14) N.
* Parte b.
WRITE /8 N LEFT-JUSTIFIED.

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 SKIP.

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 '|'.

Lima-Per

Pgina 33 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SKIP TO LINE 3.
DO 4 TIMES.
NEW-LINE.
POSITION 18.
WRITE '|'.
ENDDO.

Analice el funcionamiento de:


POSITION
NEW-LINE
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.

Lima-Per

Pgina 34 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ENDDO.
SKIP TO LINE 2.
ULINE AT 12(1).

Analice el funcionamiento de SY-VLINE.

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.

Lima-Per

Pgina 35 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

COLORES
The options COLOR, INTENSIFIED, and INVERSE of the FORMAT statement influence the colors of the output list.
To set colors in the program, use:
Syntax
FORMAT COLOR <n> [ON] INTENSIFIED [ON|OFF] INVERSE [ON|OFF].
To set colors at runtime, use:
Syntax
FORMAT COLOR = <c> INTENSIFIED = <int> INVERSE = <inv>.

These formatting options do not apply to horizontal lines created by ULINE. They have the following functions:

COLOR sets the color of the line background. If, in addition, INVERSE 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 specification. 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_BACKGROUND

<c>

Color

Intended for

depends on GUI

background

or COL_HEADING

gray-blue

headers

or COL_NORMAL

light gray

list bodies

or COL_TOTAL

yellow

totals

or COL_KEY

blue-green

key columns

Lima-Per

Pgina 36 de 172

CURSO ABAP BASICO


www.bizpartner.biz

or COL_POSITIVE

green

positive threshold value

or COL_NEGATIVE

red

negative threshold value

or COL_GROUP

violet

Control levels

The default setting is COLOR OFF.

INTENSIFIED determines the color palette for the line background.


With one exception (COLOR OFF), the color palette for the line background specified 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 with the exception of
COLOR OFF).

INVERSE affects the foreground color.


With one exception (COLOF OFF), the system takes the COLOR specified from an inverse color palette and uses it as
foreground color. The background color remains unchanged. For COLOR OFF, INVERSE has no effect, since this would
set the foreground and the background to the same color.
The following statements have the same effect:
FORMAT INTENSIFIED ON. and SUMMARY.

FORMAT INTENSIFIED OFF and DETAIL.


However, SAP recommends that you always use the FORMAT 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 SHOWCOLO 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. col = 'COL_BACKGROUND '.
WHEN 1. col = 'COL_HEADING '.
WHEN 2. col = 'COL_NORMAL '.
WHEN 3. col = 'COL_TOTAL
'.
WHEN 4. col = 'COL_KEY
'.
WHEN 5. col = 'COL_POSITIVE '.
WHEN 6. col = 'COL_NEGATIVE '.
WHEN 7. col = 'COL_GROUP
'.
ENDCASE.
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

Pgina 37 de 172

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.

Lima-Per

Pgina 38 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

If the country key you specified does not exist, the system sets SY-SUBRC to 4 and formats for all
subsequent WRITE statements the decimal characters as period '.' and date specifications as
MM/DD/YY.
REPORT ZH_CADENAS1.
write sy-datum.
DATA: FECHA TYPE D.
FECHA = SY-DATUM.
write / fecha.

XDEZP

US X

FORMATO
XXX.XXX,XX

Otro

XXX,XXX.XX

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

DATFM

FORMATO

DD.MM.AAAA

MM/DD/AAAA

AAAA.MM.DD

AAAA/MM/DD

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

Pgina 39 de 172

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

Pgina 40 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Estructuras de control
En ABAP, como en todos los lenguajes estructurados, disponemos de una serie de instrucciones para subdividir el
programa en bloques lgicos; se ejecutarn cuando se cumpla una cierta condicin.

3.1 Condicionales simples


Para introducir una condicin, utilizaremos la sentencia:
IF... ELSE... ENDIF
que podr aparecer en distintas modalidades.
IF <Cond.>.

ENDIF.

IF <Cond.>.

ELSE.

ENDIF.

IF <Cond.>.

ELSEIF.

ELSEIF.

ELSE.

ENDIF.

Tambin podremos utilizar operadores especiales:


Para chequear rangos:
IF <f1> BETWEEN <f2> AND <f3>.
Para chequear valores:

Lima-Per

Pgina 41 de 172

CURSO ABAP BASICO


www.bizpartner.biz

IF <f1> IS INITAL.

3.2 Condicionales complejas


Si queremos ejecutar diferentes instrucciones en funcin del contenido de un campo, podemos utilizar la sentencia
CASE.
CASE <campo>.
WHEN <valor1>.

WHEN <valor2>.

WHEN OTHERS.

ENDCASE.
Por ltimo, 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.
Cmo 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 WHILE.

3.3.1 Do
Permite ejecutar un bloque de instrucciones tantas veces como se especifique.
DO <n> TIMES.

ENDDO.
En la variable del sistema SY-INDEX tendremos un contador del nmero de repeticiones.
Es posible anidar sentencias DO. En ese caso, el SY-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.

Lima-Per

Pgina 42 de 172

CURSO ABAP BASICO


www.bizpartner.biz

De la misma forma que la instruccin DO, WHILE permite anidar bucles.

3.4 Sentencias de control


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 evento 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
END-OF-SELECTION.

el

report

(programa)

en

ejecucin,

pero

antes

ejecutaremos

el

3.4.4 Leave
Con LEAVE finalizaremos el report (programa) en ejecucin, sin ejecutar el evento END-OF-SELECTION.

Ejemplo 3.1 Se necesita un sistema para un supermercado, en el cual si el monto de la 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 efectiva es del 10% y en
caso de que no rebase los $1000 no tendr beneficio.
REPORT ZPROBLEMA_03.
PARAMETERS: Cantidad TYPE P DECIMALS 3 DEFAULT ''.
DATA: Monto_aux TYPE P DECIMALS 3.
Monto_aux = Cantidad.
IF Cantidad GT 5000.
Cantidad = Cantidad * ( 70 / 100 ).
WRITE: / 'El Monto de Compra es :', Monto_aux,
/ 'El Monto a Pagar es :', Cantidad.
ELSE.
IF ( Cantidad GT 3000 ) AND ( Cantidad LE 5000 ).
Cantidad = Cantidad * ( 80 / 100 ).
WRITE: / 'El Monto de Compra es :', Monto_aux,
/ 'El Monto a Pagar es :', Cantidad.
ELSE.
IF ( Cantidad GT 1000 ) AND ( Cantidad LE 3000 ).
Cantidad = Cantidad * ( 90 / 100 ).

Lima-Per

Pgina 43 de 172

evento

CURSO ABAP BASICO


www.bizpartner.biz

WRITE: / 'El Monto de Compra es :', Monto_aux,


/ 'El Monto a Pagar es :', Cantidad.
ELSE.
IF ( Cantidad GE 1000 ) AND ( Cantidad LE 3000 ).
WRITE: / 'El Monto a Pagar es :', Monto_aux.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

Ejemplo 3.2 Necesitamos saber si una persona es joven o vieja basndonos en su edad. Joven
es aquella menor de 45 aos.
REPORT ZPROBLEMA_04.
PARAMETERS: Edad TYPE I DEFAULT ''.
IF Edad GE 45.
WRITE: / 'Usted es considerada una persona Vieja'.
ELSE.
WRITE: / ' Usted es considerada una persona Joven'.
ENDIF.

Ejemplo 3.3 Dado un numero entero realice la siguiente operacin:


S = 1 + x + x2 + x3 + + x7

Lima-Per

Pgina 44 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

Ejemplo 3.4 Determinar los nmeros divisibles por 3 y por 7 entre un rango de valores que son
entrados por el usuario.
REPORT ZEJEMPLO3_4 .
PARAMETERS: INICIO TYPE I DEFAULT 0,
FINAL TYPE I DEFAULT 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.
SKIP TO LINE I.
WRITE INICIO.
ENDIF.
IF RES2 = 0.
J = J + 1.
SKIP TO LINE J.
WRITE AT 40 INICIO.
ENDIF.
INICIO = INICIO + 1.
ENDWHILE.

Lima-Per

Pgina 45 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SKIP TO LINE 3.
WRITE 'DIVISIBLES POR 7' COLOR COL_HEADING.
POSITION 40.
WRITE 'DIVISIBLES POR 3' COLOR COL_HEADING.
ULINE.

CLEAR Y CHECK NOT


CHECK logexp.
CHECK evaluates the subsequent logical expression. 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.

Lima-Per

Pgina 46 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

No muestra nada

CHECK NOT NUMERO IS INITIAL.


WRITE: / 'CONTINUA'.

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 entra en el campo <campo>, entonces
SY-SUBRC = 0, si por el contrario, es necesario el truncamiento, entonces
SY-SUBRC = 4.

REPORT Z_DGCC47.
DATA: C1(10) VALUE 'Dav',

Lima-Per

Pgina 47 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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.

Lima-Per

Pgina 48 de 172

CURSO ABAP BASICO


www.bizpartner.biz

4.4 Shift
Se utiliza para desplazar el contenido de un campo alfanumrico.
Disponemos de distintas variantes en funcin del modo de desplazamiento.
SHIFT <campo> [ BY <n> PLACES ] [ { LEFT | RIGHT | CIRCULAR } ].
Desplaza el contenido del campo <campo> <n> posiciones.El significado de las clusulas es el siguiente:

BY -> 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 por la derecha.

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.

SHIFT <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 mismo que en la variante anterior. Si el string se encuentra en el campo <campo>,
SY-SUBRC es 0, en caso contrario es 4.
SHIFT <campo> LEFT DELETING LEADING <string>.
SHIFT <campo> RIGHT DELETING LEADING <string>.
Realiza un desplazamiento hasta que el primer o ltimo carcter cumpla 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?

Lima-Per

Pgina 49 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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.

Lima-Per

Pgina 50 de 172

CURSO ABAP BASICO


www.bizpartner.biz

STRING = T.
SHIFT STRING BY 6 PLACES CIRCULAR.
WRITE / STRING.

abcdefghij
bcdefghij
defghij
abcdefg
ghijabcdef
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) VALUE 'abcdefghij',
STRING LIKE T,
STR1(4) VALUE 'cdef',
STR2(4) VALUE 'klmn',
STR3(2) VALUE 'kl',
STR4(6) VALUE 'klmnop',
LEN TYPE I VALUE 2.
STRING = T.
WRITE STRING.
REPLACE STR1 WITH STR2 INTO STRING.
WRITE / STRING.

Lima-Per

abcdefghij
abklmnghij
abklmnefgh

Pgina 51 de 172

CURSO ABAP BASICO


www.bizpartner.biz

STRING = T.
REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.
WRITE / STRING.

abklghij
abklmnopgh

STRING = T.
REPLACE STR1 WITH STR3 INTO STRING.
WRITE / STRING.
STRING = T.
REPLACE STR1 WITH STR4 INTO STRING.
WRITE / STRING.

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 } CASE.
Con la opcin UPPER, las letras minsculas de <campo> se convierten en maysculas. Y con la opcin LOWER las
letras maysculas se convierten en minsculas.
Para utilizar reglas de conversin se utiliza la siguiente sintaxis.
TRANSLATE <campo> USING <regla>.
Esta sentencia reemplaza todos los caracteres de <campo> que cumplan la regla 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> ].

Lima-Per

Pgina 52 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 con espacios
sobrescritas. Si al menos una posicin del campo <campo1>
SY-SUBRC ser 0. En caso contrario ser 4. Si <campo1> es
longitud que <campo2>, slo los caracteres correspondientes a
<campo2> podrn ser actualizados en <campo1>.

en blanco sern
es sustituida,
superior a la
la longitud de

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) VALUE 'A C E G I ',
STRING LIKE T,
L(10) VALUE '1234567890',
S(2) VALUE 'AI'.
STRING = T.
WRITE STRING.
OVERLAY STRING WITH L.
WRITE / STRING.
STRING = T.
OVERLAY STRING WITH L ONLY S.
WRITE / STRING.

Lima-Per

Pgina 53 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ACEGI
A2C4E6G8I0
1CEG9
4.8 Search
Se utiliza para buscar una cadena de caracteres en un campo alfanmerico.
SEARCH 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 toma el valor 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

Pgina 54 de 172

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: / 'SEARCH 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: / 'SEARCH 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: / 'SEARCH 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: / 'SEARCH text FOR "*gue"'.
WRITE: / 'sy-subcr:', sy-subrc, / 'sy-fdpos:', sy-fdpos.
ULINE.

Lima-Per

Pgina 55 de 172

CURSO ABAP BASICO


www.bizpartner.biz

4.9 Comparacin de cadenas de caracteres

<f1> CO <f2> (Contains Only)

f1 slo contiene caracteres de f2. En caso 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.
Negacin de la anterior.

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

<f1> CA <f2> (Contains Any)

f1 contiene como mnimo algn carcter de f2. Si


es cierta SY-FDPOS contiene el offset 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


SY-FDPOS es cierta contiene el offset donde
empieza f2 en f1, y si es falsa contiene la longitud
de f1.
negacin de la anterior.

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


f1 corresponde al patrn f2. En el patrn podemos
utilizar :
+ como cualquier carcter, * como cualquier
cadena de caracteres, # para utilizar los caracteres
+,*,# en la
comparacin. Si la condicin es cierta SY-FDPOS

Lima-Per

Pgina 56 de 172

CURSO ABAP BASICO


www.bizpartner.biz

<f1> CP <f2> (Contains Pattern)

contiene el offset de f2 en f1 y si es falsa contiene


la longitudde f1.
(Contains No Pattern) :

negacin de la anterior.

<f1> NP <f2>

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.

report ztx1004.
* operator: co
write / '''AABB'' co ''AB'''.
if 'AABB' co 'AB'.
write 'True'. else. write 'False'. endif.
Lima-Per

Pgina 57 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

report ztx1001.
data: begin of s1,
x value 'X',
y value 'Y',
z value 'Z',

Lima-Per

Pgina 58 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
"COMPARANDO CAMPOS CADENA BYTE POR BYTE
write: / 's1 = s2'.
else.
write: / 's1 <> s2'.
endif.
if 0 = ' '.
write: / '0 = '' '''.
else.
write: / '0 <> '' '''.
endif.

report ztx1009.
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 from s-c1 next s-c2.
write f1.
enddo.
write / ''.
do 3 times varying f1 from s-c1 next s-c3.
write f1.
enddo.

Lima-Per

Pgina 59 de 172

CURSO ABAP BASICO


www.bizpartner.biz

report ztx1006.
write: / 'HOLA'.
exit.
write: / 'AQUI'.

Ejemplo 4.1 Disear un programa que permita leer dos cadenas: cad[50] y cad2[20], luego
imprimir la cadena concatenada.
REPORT ZPROBLEMA_01.
PARAMETERS: cad1(50) TYPE c DEFAULT '',
cad2(20) TYPE c DEFAULT ''.
DATA linea TYPE string.
CONCATENATE cad1 cad2 INTO linea.
WRITE / linea.
* SI SE QUIERE UN ESPACIO ENTRE LAS CADENAS, SE PUEDE AGREGAR
* DE LA SIGUIENTE MANERA:
* CONCATENATE CAD1 CAD2 INTO LINEA SEPARATED BY SPACE.

Lima-Per

Pgina 60 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Ejemplo 4.2 Disear un programa que permita leer dos cadenas de diferente longitud, luego las dos
cadenas mostrarlo en forma concatenada, convertirlo a maysculas, mostrar en forma invertida y
finalmente mostrarlo en su estado de origen (al estado en que se realiz la conversin a
maysculas).
REPORT ZPROBLEMA_02.
PARAMETERS: cad1(50) TYPE c DEFAULT '',
cad2(20) TYPE c DEFAULT ''.
DATA linea TYPE string.
CONCATENATE cad1 cad2 INTO linea.
TRANSLATE linea TO UPPER CASE.
DATA len TYPE i.
len = STRLEN( linea ).
WRITE: / 'La longitud de la cadena es: ', len.
SKIP.
WRITE: / 'La concatenacin en Maysculas es: ', linea.
DATA: cont TYPE i VALUE 0,
linea1 TYPE string.
DO len TIMES.
CONCATENATE linea+cont(1) linea1 INTO linea1.

Lima-Per

Pgina 61 de 172

CURSO ABAP BASICO


www.bizpartner.biz

cont = cont + 1.
ENDDO.
SKIP.
WRITE: / 'La cadena invertida en maysculas es: ', linea1.
DATA: count TYPE i VALUE 0,
linea2 TYPE string.
DO len TIMES.
CONCATENATE linea1+count(1) linea2 INTO linea2.
count = count + 1.
ENDDO.
SKIP.
WRITE / 'Uso de la sentencia DO para mostrar la cadena'.
WRITE: / 'en su estado original: ', linea2.

Ejemplo 4.3 Disear un programa que permita leer una cadena cad1 de longitud mxima 50 y
crear una cad2[50], luego:
Copiar informacin de cad1 en cad2.
Imprimir a partir del tercer carcter y hasta el final, los caracteres de cad2.
Imprimir solo los 3 primeros caracteres de cad2.
ZPROBLEMA_04
PARAMETERS: cad1(50) TYPE c DEFAULT ''.
DATA cad2(50) TYPE c.
TRANSLATE cad1 TO LOWER CASE.
WRITE: / 'La cadena ingresada fue: ', cad1.
SKIP.
MOVE cad1 TO cad2.
TRANSLATE cad2 TO LOWER CASE.
WRITE: / 'La cadena 2 es: ', cad2.
SKIP.
Lima-Per

Pgina 62 de 172

CURSO ABAP BASICO


www.bizpartner.biz

WRITE: / 'Primeros 3 caracteres de cad2: ', cad2+0(3).


SKIP.
WRITE: / 'Impresin a partir tercer caracter de cad2: ', cad2+3.

Lima-Per

Pgina 63 de 172

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 SY- y ya hemos utilizado alguna de ellas como
SY-SUBRC que nos da el cdigo de retorno de una instruccin o SY-TABIX que contiene la lnea de proceso de
una tabla interna.

Nombre de Variable

Descripcin

SY-INDEX

Cantidad de repeticiones de bucles

SY-PAGNO

RUNTIME: Pgina actual en creacin de lista

SY-TABIX

RUNTIME: Lnea actual de una tabla interna

SY-TFILL

Cantidad actual de entradas en la tabla interna

SY-TLOPC

Utilizacin interna

SY-TMAXL

Cantidad mxima de entradas en la tabla interna

SY-TOCCU

Parmetro occurs en tablas internas

SY-TTABC

Nmero de la ltima lnea de tabla interna leda

SY-TSTIS

Utilizacin interna

SY-TTABI

Offset de tablas internas en el rea de roll

SY-DBCNT

Cantidad elementos en conjunto tratado para operaciones BD

SY-FDPOS

Lugar de hallazgo de un string

SY-COLNO

Columna actual en la creacin de la lista

SY-LINCT

Cantidad de lneas de lista

SY-LINNO

Lnea actual en la creacin de una lista

SY-LINSZ

Longitud de lnea de la lista

SY-PAGCT

Lmite de pgina de lista en instruccin REPORT

SY-MACOL

Cantidad de columnas de instruccin SET MARGIN

SY-MAROW

Cantidad de lneas de instruccin SET MARGIN

Lima-Per

Pgina 64 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-TLENG

Tamao de la lnea de una tabla interna

SY-SFOFF

Utilizacin interna

SY-WILLI

Nmero de la lnea de ventana actual

SY-LILLI

Nmero de la lnea de lista actual

SY-SUBRC

Valor de retorno tras determinadas sentencias ABAP/4

SY-FLENG

Utilizacin interna (longitud de campo)

SY-CUCOL

Posicin del cursor (columna)

SY-CUROW

Posicin del cursor (lnea)

SY-LSIND

Nmero de la lista de bifurcacin

SY-LISTI

Nmero de la lnea de lista actual

SY-STEPL

Nmero de la lnea LOOP en step dynpro

SY-TPAGI

Indicador para almacenar tabla interna en bloque paging

SY-WINX1

Coordenada de ventana (columna izquierda)

SY-WINY1

Coordenada ventana (lnea izquierda)

SY-WINX2

Coordenada ventana (columna derecha)

SY-WINY2

Coordenada de ventana (lnea derecha)

SY-WINCO

Posicin de cursor en la ventana (columna)

Nombre de Variable

Descripcin

SY-WINRO

Posicin de cursor en la ventana (lnea)

SY-WINDI

Indice de la lnea de ventana actual

SY-SROWS

Lneas en la pantalla

SY-SCOLS

Columnas en la pantalla

SY-LOOPC

Cantidad de lneas LOOP en steploop de dynpro

SY-FOLEN

Utilizacin interna (longitud de salida de campo)

Lima-Per

Pgina 65 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-FODEC

Utilizacin interna (campo posiciones decimales)

SY-TZONE

Diferencia de tiempo con 'Hora media de Greenwich' (UTC)

SY-DAYST

Horario de verano activo ?

SY-FTYPE

Utilizacin interna (tipo de campo)

SY-APPLI

Aplicaciones SAP

SY-FDAYW

Da de semana en el calendario de fbrica

SY-CCURS

Tipo cambio/Campo resultado CURRENCY CONVERT

SY-CCURT

Tipo de cambio en tabla de aplicacin CURRENCY CONVERSION

SY-DEBUG

Utilizacin interna

SY-CTYPE

Tipo de cambio 'M','B','G' de CURRENCY CONVERSION

SY-INPUT

Utilizacin interna

SY-LANGU

Clave de idioma para entrar al Sistema SAP

SY-MODNO

Cantidad de modos alternativos

SY-BATCH

Batch activo (X)

SY-BINPT

Batch input activo (X)

SY-CALLD

Call modo activo (X)

SY-DYNNR

Nmero de la imagen en pantalla actual

SY-DYNGR

Grupo de dynpros del dynpro actual

SY-NEWPA

Utilizacin interna

SY-PRI40

Utilizacin interna

7SY-RSTRT

Utilizacin interna

SY-WTITL

Indicador para cabecera estndar de pgina

SY-CPAGE

Nmero de pgina actual

SY-DBNAM

Base de datos lgica en report ABAP/4

Lima-Per

Pgina 66 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-MANDT

Nmero de mandante para acceder al Sistema SAP

SY-PREFX

Prefijo ABAP/4 para jobs batch

SY-FMKEY

Men de cdigos de funciones actual

SY-PEXPI

IMPRIMIR: Tiempo de permanencia en SPOOL

SY-PRINI

Utilizacin interna

SY-PRIMM

IMPRESION: Salida inmediata

Nombre de Variable

Descripcin

SY-PRREL

IMPRESION: Borrar tras salida

SY-PLAYO

Utilizacin interna

SY-PRBIG

IMPRIMIR: Portada de seleccin

SY-PLAYP

Utilizacin interna

SY-PRNEW

IMPRESION: Nueva orden SPOOL (lista)

SY-PRLOG

Utilizacin interna

SY-PDEST

IMPRIMIR: Dispositivo de salida

SY-PLIST

IMPRESION: Nombre de la orden SPOOL (nombre de lista)

SY-PAUTH

Utilizacin interna

SY-PRDSN

IMPRIMIR: Nombre del set de datos SPOOL

SY-PNWPA

Utilizacin interna

SY-CALLR

IMPRIMIR: ID para funciones de dilogo

SY-REPI2

Utilizacin interna

SY-RTITL

IMPRIMIR: Ttulo de report del programa de impresin

SY-PRREC

IMPRIMIR: Destinatario

SY-PRTXT

IMPRIMIR: Texto para portada

SY-PRABT

IMPRIMIR: Departamento en la portada

Lima-Per

Pgina 67 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-LPASS

Utilizacin interna

SY-NRPAG

Utilizacin interna

SY-PAART

IMPRESION: Edicin

SY-PRCOP

IMPRIMIR: Cantidad de ejemplares

SY-BATZS

SUBMIT batch: Inmediatamente

SY-BSPLD

SUBMIT fondo: Salida de lista en SPOOL

SY-BREP4

SUBMIT fondo: Nombre de raz del report de llamada

SY-BATZO

SUBMIT fondo: Unico

SY-BATZD

SUBMIT fondo: Diario

SY-BATZW

SUBMIT fondo: Semanal

SY-BATZM

SUBMIT fondo: Mensual

SY-CTABL

Tabla de tipo de cambio en CURRENCY CONVERSION

SY-DBSYS

SYSTEM: Sistema de base de datos

SY-DCSYS

SYSTEM: Sistema de dilogo

SY-MACDB

PROGRAM: Nombre del fichero para el acceso con matchcode

SY-SYSID

SYSTEM: Identificador del Sistema SAP

SY-OPSYS

SYSTEM: Sistema operative

SY-PFKEY

RUNTIME: Status de teclas-F actual

SY-SAPRL

SISTEMA: Release SAP

Nombre de Variable

Descripcin

SY-TCODE

SESSION: Cdigo de transaccin actual

SY-UCOMM

INTERACT.: Indicar funcin en el cdigo OK

SY-CFWAE

Utilizacin interna

SY-CHWAE

Utilizacin interna

Lima-Per

Pgina 68 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-SPONO

RUNTIME: Nmero SPOOL para salida de una lista

SY-SPONR

RUNTIME: Nmero SPOOL de instruccin TRANSFER

SY-WAERS

T001: Moneda de sociedad tras leer segmento B

SY-CDATE

Fecha de tipo de cambio de CURRENCY CONVS.

SY-DATUM

SYSTEM: Fecha del da

SY-SLSET

Nombre de SELECTON-SETS

SY-SUBTY

ABAP: Forma de llamada en SUBMIT

SY-SUBCS

INTERNO: Status call del report

SY-GROUP

INTERNO: Concatenacin

SY-FFILE

INTERNO: Flatfile (USING/GENERATING DATASET)

SY-UZEIT

SYSTEM: Hora

SY-DSNAM

RUNTIME: Nombre del set de datos para salida en SPOOL

SY-REPID

PROGRAM: Nombre de un programa ABAP/4

SY-TABID

Utilizacin interna

SY-TFDSN

RUNTIME: Nombre del set de datos para extractos de datos

SY-UNAME

SESSION: Nombre de usuario segn entrada a SAP

SY-LSTAT

INTERACT.: Informacin de status por nivel de lista

SY-ABCDE

CONSTANT: Alfabeto (A,B,C,...)

SY-MARKY

Letra de lnea actual para MARK

SY-SFNAM

Sin utilizar

SY-TNAME

Nombre de la tabla interna despus de un acceso

SY-MSGLI

INTERACT.: Lnea de mensaje (lnea 23)

SYTITLE

PROGRAM: Ttulo del programa ABAP/4

SY-ENTRY

Utilizacin interna

SY-LISEL

INTERACT.: Lnea seleccionada

Lima-Per

Pgina 69 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-ULINE

CONSTANT: Lnea de subrayado (____________...)

SY-XCODE

Cdigo OK ampliado

SY-CPROG

RUNTIME: Programa principal

SY-XPROG

Utilizacin interna (programa SYSTEM-EXIT)

SY-XFORM

Utilizacin interna (form SYSTEM-EXIT)

SY-LDBPG

PROGRAM: Programa ABAP/4 de base de datos para SY-DBNAM

SY-TVAR0

RUNTIME: Var. de texto para elementos de texto ABAP/4

Nombre de Variable

Descripcin

SY-TVAR1

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR2

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR3

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR4

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR5

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR6

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR7

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR8

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-TVAR9

RUNTIME: Variable de texto para elementos de texto ABAP/4

SY-MSGID

ID de mensaje

SY-MSGTY

Tipo de mensaje (E,I,W,etc.)

SY-MSGNO

Nmero del mensaje

SY-MSGV1

Variable en mensaje

SY-MSGV2

Variable en mensaje

SY-MSGV3

Variable en mensaje

Lima-Per

Pgina 70 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SY-MSGV4

Variable en mensaje

SY-ONCOM

INTERNO: On Commit Flag

SY-VLINE

CONSTANT: raya vertical

SY-WINSL

INTERACT.: Lnea en ventana seleccionada

SY-STACO

INTERACT.: Lista visualizada a partir de la columna

SY-STARO

INTERACT.: Lista visualizada a partir de lnea

SY-DATAR

Indicador: Datos recibidos

SY-HOST

Nombre de la mquina

SY-LOCDB

Existe base de datos local

SY-LOCOP

Operacin local en base de datos

SY-DATLO

Fecha local, en relacin con el usuario

SY-TIMLO

Hora local, en relacin con el usuario

SY-TSTLO

Cronomarcador (fecha y hora), en relacin con el usuario

SY-ZONLO

Huso horario del usuario

SY-DATUT

Fecha global, en relacin con UTC

SY-TIMUT

Hora global, en relacin con UTC

SY-TSTUT

Cronomarcador (fecha y hora), en relacin con UTC

Lima-Per

Pgina 71 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Tablas internas

5.1 Registros
Declaramos registros de la siguiente manera:
DATA: BEGIN 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 <tabla> <tipo> [ WITH HEADER LINE ].
En la opcin <tipo> 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 mismo nombre. En funcin de la sentencia que estemos utilizando, el sistema sabe
si queremos emplear el rea de trabajo o la tabla.

DATA <tabla> <tipo> 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
mismo 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: BEGIN OF <tabla> OCCURS <n>,
....
END OF <tabla>.

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.
Ejemplo X.2 Tabla interna.
TYPES: BEGIN OF ESTRUCTURA,
COLUMNA1 TYPE I,
COLUMNA2 TYPE I,
COLUMNA3 TYPE I,

Lima-Per

Pgina 72 de 172

CURSO ABAP BASICO


www.bizpartner.biz

END OF LINE.
DATA: TABLITA TABLE OF ESTRUCTURA WITH HEADER LINE.

Ejemplo X.2 Tabla interna.


DATA: BEGIN OF TIPO_CLIENTE,
NOMBRE(20),
EDAD TYPE I,
END OF TIPO_CLIENTE,
PERSONA LIKE TIPO_CLIENTE OCCURS 20 WITH HEADER LINE.

Ejemplo 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 <indicetabla> ( WHERE <cond>).
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 que 0.

Lima-Per

Pgina 73 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Dentro del LOOP, la variable SY-TABIX contiene el ndice de la entrada que est procesando en ese momento.
Tambin es posible hacer un:
LOOP AT<intab> FROM <inicio> TO <fin>.

ENDLOOP.
Donde <inicio> y <fin> son ndices de la tabla interna.

Ejemplo X.2 Tablas internas con INTO TABLE.


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 STANDARD TABLE OF EST_TABLA WITH HEADER LINE.
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.

Ejemplo X.2 Tablas internas con SELECT


REPORT ZTABLAS02_ANIBAL
TABLES SFLIGHT.

.ENDSELECT.
.

TYPES: BEGIN OF EST_TABLA,


CARRID LIKE SFLIGHT-CARRID,

Lima-Per

Pgina 74 de 172

CURSO ABAP BASICO


www.bizpartner.biz
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 valor de n (tipo entero) nos devuelve el nmero de lineas llenas de la tabla. El tiempo de ejecucin de DESCRIBE
TABLE es aproximadamente de 4 microsegundos.
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.
DESCRIBE TABLE tabla1 LINES v_count.
WRITE: 'Nmero de registros: ', v_count.

Tambien se puede usar la variable interna SY-TFILL, pero tendr efecto solo cuando se invoque despus
de haber realizado un loop a la tabla interna.

Lima-Per

Pgina 75 de 172

CURSO ABAP BASICO


www.bizpartner.biz
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.

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 cambios.
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>

Lima-Per

Pgina 76 de 172

CURSO ABAP BASICO


www.bizpartner.biz

<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 mismo nombre, 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 componentes a su vez tablas internas. El
contenido de <tabla2> se sobrescribe.

OBSERVACION
MANEJO DE MOVE CON [] SE MUEVEN TODOS. EJEMPLO
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'.
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.

Lima-Per

Pgina 77 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 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,
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'.
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.

Lima-Per

Pgina 78 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ULINE.
LOOP AT TABLA2.
WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO,
TABLA2-TERCER_CAMPO.
ENDLOOP.

Si. Pero se recorta el tercer 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'.
APPEND TABLA1.
MOVE TABLA1[] TO TABLA2[].
LOOP AT TABLA1.
WRITE: / TABLA1-PRIMER_CAMPO,
TABLA1-SEGUNDO_CAMPO,
TABLA1-TERCER_CAMPO.
ENDLOOP.

Lima-Per

Pgina 79 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 mismos.
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'.
TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'.
TABLA1-TERCER_CAMPO = 'TERCER DATO2'.
APPEND TABLA1.
MOVE TABLA1[] TO TABLA2[].

Lima-Per

Pgina 80 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 (siempre 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.
Resultado:

HOLA BCN.

VAR1
R I V E R L A N D

B C N .

VAR2
H O L A
MOVE VAR1+10(4) TO VAR2+5(4).
VAR2
Lima-Per

Pgina 81 de 172

CURSO ABAP BASICO


www.bizpartner.biz

H O L A

B C N .

MOVE-CORRESPONDING

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.

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 VALUE. las constantes no se pueden iniciar.
En una tabla interna se inicia el rea de trabajo de la tabla interna, y no su contenido.

Lima-Per

Pgina 82 de 172

CURSO ABAP BASICO


www.bizpartner.biz

CLEAR <tabla> | <tabla> [].


Con la <tabla> inicializamos la lnea de cabecera de la tabla. Con <tabla> [ ] vaciamos el contenido de la tabla
interna.
Ejemplo X.2 Uso de CLEAR.
DATA: TEXTo(10)
VALUE 'Hello',
NUMERO TYPE I VALUE 12345,
BEGIN OF PLAYER,
NUMERO(10) VALUE 'John',
TELEFONO(8) TYPE N VALUE '08154711',
DINERO TYPE P VALUE 30000,
END OF PLAYER.
CLEAR: TEXTO, NUMERO, PLAYER.
Tendremos:
TEXTO = ' '
NUMERO = 0
PLAYER-NOMBRE = ' '
PLAYER-TELEFONO = '00000000'
PLAYER-DINERO = 0

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

5.3.4 Free
Se utiliza para liberar el espacio de memoria que se reserva despus de utilizar las sentencias REFRESH o CLEAR.
FREE <tabla>.
Ejemplo X.2 Uso de WRITE.
REPORT EJEMPLO.
DATA: BEGIN OF EL_REGISTRO,
COLUMNA1,
COLUMNA2,
END OF EL_REGISTRO.
DATA INDICE_TABLA LIKE TABLE OF EL_REGISTRO.
EL_REGISTRO-COLUMNA1 = 'A'.
EL_REGISTRO-COLUMNA2 = 'B'.
APPEND EL_REGISTRO TO INDICE_TABLA.
REFRESH INDICE_TABLA.
IF INDICE_TABLA IS INITIAL.

Lima-Per

Pgina 83 de 172

CURSO ABAP BASICO


www.bizpartner.biz

WRITE 'TABLA ESTA VACIA'.


FREE INDICE_TABLA.
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
mismo 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 mismo nmero de lneas entonces las comparaciones se realizan lnea por lnea, componente
por componente

Ejemplo X.2 Uso de WRITE.


REPORT ZZZ.
DATA: BEGIN OF REGISTRO,
COLUMNA1 TYPE I,
COLUMNA2 TYPE I,
END OF REGISTRO.
DATA: ITAB LIKE TABLE OF REGISTRO,
JTAB LIKE TABLE OF REGISTRO.
DO 3 TIMES.
REGISTRO-COLUMNA1 = SY-INDEX.
REGISTRO-COLUMNA2 = SY-INDEX ** 2.
APPEND REGISTRO TO ITAB.
ENDDO.
MOVE ITAB TO JTAB.
REGISTRO-COLUMNA1 = 10.
REGISTRO-COLUMNA2 = 20.
APPEND REGISTRO TO ITAB.
IF ITAB GT JTAB.
WRITE / 'ITAB ES MAYOR QUE JTAB'.
ENDIF.

Lima-Per

Pgina 84 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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


DATA: BEGIN OF TABLA OCCURS 10,
COLUMNA1 TYPE I,
COLUMNA2 TYPE I,
END OF TABLA.
DO 30 TIMES.
TABLA-COLUMNA1 = SY-INDEX.
TABLA-COLUMNA2 = SY-INDEX * SY-INDEX.
APPEND TABLA.
ENDDO.
LOOP AT TABLA.
WRITE: / SY-TABIX, TABLA-COLUMNA2.
ENDLOOP.
ULINE.
LOOP AT TABLA WHERE COLUMNA2 BETWEEN 200 AND 300.
WRITE: / SY-TABIX, TABLA-COLUMNA2.
ENDLOOP.
ULINE.
LOOP AT TABLA FROM 10 TO 25 WHERE COLUMNA2 > 400.
WRITE: / SY-TABIX, TABLA-COLUMNA2.
ENDLOOP.
ULINE.
LOOP AT TABLA WHERE COLUMNA2 > 400.
WRITE: / SY-TABIX, TABLA-COLUMNA2.
ENDLOOP.
ULINE.
LOOP AT TABLA WHERE COLUMNA2 = 123.
WRITE: / SY-TABIX, TABLA-COLUMNA2.
ENDLOOP.
WRITE / SY-SUBRC. "sy-subrc = 4 cuando no encuentra el registro.
ULINE.
READ TABLE TABLA INDEX 7.
WRITE: / SY-SUBRC, SY-TABIX, TABLA-COLUMNA2.

Lima-Per

Pgina 85 de 172

CURSO ABAP BASICO


www.bizpartner.biz

READ TABLE TABLA INDEX 31.


WRITE: / SY-SUBRC.

"con indice 31 no existe.

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> BY <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

Lima-Per

Pgina 86 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

O
1
4
9

1
2
3

COLLECT
Aade o suma la lnea de cabecera de una tabla interna comparando los campos de tipo carcter. Sumar todos los
campos de tipo P, F, I.
El collect funciona no con un campo "clave", pero debes tener la precaucion 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 mismo 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 READ e
INSERT o MODIFY.

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 TABLE <tabint>.

Lima-Per

Pgina 87 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

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

Lima-Per

Pgina 88 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Tiger
Duck

80.
30.

Observaciones sobre collect y append.


REPORT EJEMPLO.
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,
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.

Lima-Per

Pgina 89 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ENDLOOP.

WRITE : /21 TABLITA-COUNTRYFR,


51 TABLITA-FLTIME.

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.

AHORA CON OTRO


CAMPO MAS:
COUNTRYFR
CITYFROM

LOOP AT TABLITA.
WRITE : /21 TABLITA-COUNTRYFR,
35 TABLITA-CITYFROM,
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,
AIRPFROM LIKE SPFLI-AIRPFROM,
END OF Z_SPFLI.
DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE.

Lima-Per

Pgina 90 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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,

Lima-Per

Pgina 91 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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
AHORA CON OTRO
HEADER LINE.
CAMPO MAS:
COUNTRYFR
SELECT COUNTRYFR CITYFROM FLTIME Into
CITYFROM
TABLITA From SPFLI.
FLTIME
* APPEND TABLITA.
COLLECT TABLITA.

ENDSELECT.
Lima-Per

Pgina 92 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

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

Pgina 93 de 172

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?
NO FUNCIONA: PORQUE?
REPORT

ZEJTABLASINTERNAS.

DATA: BEGIN OF TABLA,

Lima-Per

//SIMILAR AL PROBLEMA ANTERIOR,

Pgina 94 de 172

CURSO ABAP BASICO


www.bizpartner.biz

COLUMNA1 TYPE C,
COLUMNA2 TYPE I,
END OF TABLA.

//SOLO LE QUITAMOS OCCURS 10


//DESPUES DE BEGIN 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.

MENSAJE 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 TABLITA, 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.

5.7 Lectura de una tabla interna


Podemos buscar un registro concreto en una tabla sin necesidad de recorrerla.
READ TABLE <intab>.

Lima-Per

Pgina 95 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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-SUBRC.

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 TABLE <intab> WHIT KEY <clave>.
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> BINARY SEARCH.
Una lectura directa de un registro de la tabla la podemos realizar con:
READ TABLE <intab> INDEX <num>.

Insercin de registros

Se utiliza INSERT para insertar lneas en una tabla interna antes de una posicin determinada.
INSERT <tabla> [ INDEX <ndice> ].
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.
INSERT LINES OF <tabla1> [ FROM <n1> ] [ TO <n2> ] INTO <tabla2> [ INDEX <ndice> ]
Si no se especifican las clusulas FROM <n1> y TO <n2> 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. <n1> 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.
El sistema inserta la lnea tratada en el bucle. Despus de ejecutarse la sentencia 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 rpido 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, siempre y cuando la vista haga referencia a una sola tabla.

Lima-Per

Pgina 96 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

Ejemplo 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.

Lima-Per

Pgina 97 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

78345908

7500.

Carlos Rojas

84560937

6500.

Ejemplo 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.

Lima-Per

Pgina 98 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

Ejemplo 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.
TABLA-PESO = 62.
APPEND TABLA.
SORT TABLA.

Lima-Per

"Ordenacion por primer campo = PAIS

Pgina 99 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

Modificacin de registros

Para sustituir lneas de una tabla interna utilizamos la sentencia MODIFY


MODIFY <tabla> [ FROM <rea-trabajo> ] [ INDEX <ndice> ].
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 reemplazar ser la existente con el ndice <ndice>. Si el
sistema puede realizar la modificacin, la variable 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.

Lima-Per

Pgina 100 de 172

CURSO ABAP BASICO


www.bizpartner.biz

DATA ITAB LIKE TABLE OF LINE.


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
MNA2 = 10 ** 2.
MODIFY TABLA FROM LINEA INDEX 2.
LOOP AT TABLA INTO LINEA.
Lima-Per

Pgina 101 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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.

Lima-Per

Pgina 102 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
DELETE <tabla>.
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.
DELETE <tabla> 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.
DELETE <TABLA> [ FROM <n1> ] [ TO <n2> ] [ WHERE <condicin> ].
Sentencia utilizada para borrar registros de una tabla de la base de datos. Con esta 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.
Si utilizamos la sentencia sin la clusula WHERE, el sistema borrar todas las lneas de la tabla <tabla> cuyo ndice
est comprendido entre <n1> y <n2>.
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 cumplen la condicin
especificada en <condicin>. En <condicin> se puede utilizar cualquier expresin lgica. El primer operando debe

Lima-Per

Pgina 103 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 ninguna 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.
DELETE TABLE ARTICULO.
LOOP AT ARTICULO.
WRITE:/ ARTICULO-ID,
ARTICULO-DESCRIPTION,
ARTICULO-PRECIO.
ENDLOOP.

Lima-Per

Pgina 104 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

REPORT ZPROCESO_40 .

Lima-Per

Pgina 105 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

REPORT ZPROCESO_41 .
************************************************************************
* BORRANDO REGISTROS CON:
*
DELETE itab.
*
DELETE itab FROM idx1 TO idx2 [expresion logica].

Lima-Per

Pgina 106 de 172

CURSO ABAP BASICO


www.bizpartner.biz

************************************************************************
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
* 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.

Lima-Per

Pgina 107 de 172

CURSO ABAP BASICO


www.bizpartner.biz

11

Niveles de ruptura Sentencias AT

Las sentencias AT permiten controlar el procesamiento de una tabla interna, dentro de un LOOP. Slo se
usan por tanto dentro de bucles LOOP.
Permiten ejecutar condicionalmente un bloque de sentencias, dentro del bucle, segn se cumpla o no una u
otra condicin. Estas son:
ATNEW, AT END OF, AT FIRST, AT LAST.
AT FIRST.

ENDAT.

Realiza las instrucciones que hay a continuacin


del AT FIRST para la primera entrada de la tabla.

AT LAST.

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 inicio de nivel de ruptura.

AT END OF <campo>.

ENDAT.

Realiza las instrucciones que hay a continuacin


del AT END para cada final de nivel 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 ).
Ser necesario que la tabla interna est ordenada en el mismo orden que la utilizacin de los niveles de ruptura.
La utilizacin conjunta de todas estas instrucciones ser:
SORT <intab> BY <c1> <c2>.
LOOP AT <intab>.
AT FIRST
... (SUM) ...
ENDAT.
AT NEW <cl>.
... (SUM)
ENDAT.
AT NEW <c2>.
... (SUM)
ENDAT.
.......... Proceso Normal de la tabla
AT END OF <c2>.
... (SUM) ...
ENDAT.
AT END OF <c1>.
... (SUM) ...
ENDAT.

Lima-Per

Pgina 108 de 172

CURSO ABAP BASICO


www.bizpartner.biz

AT LAST
(SUM)
ENDAT.
ENDLOOP.

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.

Lima-Per

Pgina 109 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Vease tambin: LOOP, EXTRACT.

Lima-Per

Pgina 110 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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.
Lima-Per

Pgina 111 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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.
Lima-Per

Pgina 112 de 172

CURSO ABAP BASICO


www.bizpartner.biz

WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.


ENDLOOP.

Lima-Per

Pgina 113 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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.

Lima-Per

Pgina 114 de 172

CURSO ABAP BASICO


www.bizpartner.biz

AT NEW .. ENDAT
Definicin
La sentencia AT NEW .. 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 para
el campo especificado se va a producir un nuevo valor
Sintaxis:
AT NEW <campo>.
<bloque-sentencias>
ENDAT.
La sentencia AT NEW se cierra con ENDAT, identificando de esta forma un bloque de proceso.
En un bloque AT .. 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 NEW 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 .. 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.
ENDLOOP.

Lima-Per

Pgina 115 de 172

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).

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.

Lima-Per

Pgina 116 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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:


PRIMERO FILTRO VALORES UNICOS PARA UN CAMPO
DETERMINADO Y LUEGO VOY SELECCIONANDO ESTOS
PARA UNA ACCION DETERMINADA. GENERALMENTE
HACIENDO USO DE: CASE END CASE.

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
LOOP AT EST_TABLITA.
AT NEW CONNID.

Lima-Per

FLDATE'.

Pgina 117 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ENDAT.
ENDLOOP.

WRITE: / EST_TABLITA-CONNID,
07 EST_TABLITA-SEATSOCC,
21 EST_TABLITA-FLDATE.

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.

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'.

Lima-Per

Pgina 118 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

Pgina 119 de 172

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 hotspot (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
14
15
16
17
18
19
20
21
22
23

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'.
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.

Lima-Per

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

Pgina 120 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
Acondicione el programa anterior (el de muelles) con la utilizacin de HIDE.
Join de tablas
JOIN DE DOS TABLAS
REPORT ZANI2 .
TABLES: SCARR, SPFLI, SFLIGHT.
TYPES: BEGIN OF EST_JUNTOS,

Lima-Per

Pgina 121 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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-OPTIONS: S_CARRID FOR SCARR-CARRID,
S_CONNID FOR SPFLI-CONNID.
START-OF-SELECTION.
SELECT SCARR~CARRID SPFLI~CONNID SPFLI~COUNTRYFR
INTO TABLE TABLITA
FROM SCARR JOIN SPFLI
ON SCARR~CARRID = SPFLI~CARRID
WHERE SCARR~CARRID IN S_CARRID AND
SPFLI~CONNID IN S_CONNID.
LOOP AT TABLITA.
WRITE : /11 TABLITA-CARRID,
31 TABLITA-CONNID,
51 TABLITA-COUNTRYFR.
ENDLOOP.

Resultado del ejercicio

Lima-Per

Pgina 122 de 172

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.

Lima-Per

Inicia la ventana 500


Crea el campo
Inicia el bloque b1 (dentro del
screen 500)

Pgina 123 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SELECTION-SCREEN : END OF BLOCK b1,


Finaliza el bloque b1
SKIP,
BEGIN OF BLOCK b2
Inicia el bloque b2 (dentro del
WITH FRAME TITLE text-030 NO INTERVALS. screen 500)
*la sentencia NO INTERVALS hace que el bloque se cree con el menor tamao posible.
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

Pgina 124 de 172

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

Pgina 125 de 172

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
2. Numero de conexin de vuelo
3. Ciudad de partida.
4. Ciudad de destino.
Programa:

Lima-Per

Pgina 126 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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' CENTERED.
ENDLOOP.

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

Lima-Per

Pgina 127 de 172

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

Pgina 128 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Select conceptos generales


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.

Lima-Per

Pgina 129 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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


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.

Lima-Per

Pgina 130 de 172

CURSO ABAP BASICO


www.bizpartner.biz

USO DE APPEND CON TABLAS


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.

Lima-Per

Pgina 131 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.


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'.

Lima-Per

Pgina 132 de 172

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.
ENDLOOP.
ULINE.
LOOP AT TABLA2.
WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO.
ENDLOOP.

REPORT ZMOVECORR1
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

Pgina 133 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Move-corresponding
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

Pgina 134 de 172

CURSO ABAP BASICO


www.bizpartner.biz

OTRA FORMA DE USO CORRESPONDING FIELDS EN LUGAR DE


MOVE-CORRESPONDING (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
MOVE-CORRESPONDING (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

TABLES: SFLIGHT.
TYPES: BEGIN OF EST_FLIGHT,
CARRID LIKE SFLIGHT-CARRID ,
CONNID
LIKE SFLIGHT-CONNID,

Lima-Per

Pgina 135 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.
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,

Lima-Per

Pgina 136 de 172

CURSO ABAP BASICO


www.bizpartner.biz

W_SFLIGHT-FLDATE.
WRITE '***********'
.
WRITE: / K_SFLIGHT-CARRID COLOR COL_KEY,
K_SFLIGHT-CONNID,
K_SFLIGHT-FLDATE,
K_SFLIGHT-SEATSMAX.
ENDIF.

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.

Lima-Per

Pgina 137 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ETC.
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

Pgina 138 de 172

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.

Lima-Per

Pgina 139 de 172

CURSO ABAP BASICO


www.bizpartner.biz

APARENTEMENTE, SIEMPRE EL MOVE-CORRESPONDING


CON APPEND.

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.

Lima-Per

Pgina 140 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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
DIFERENTES
PARA
LAS
OPERACIONES CON COLLECT.

Append collect modify

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

Lima-Per

Pgina 141 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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


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.

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

TYPES: I_FLIGHT TYPE FLIGHT OCCURS 10.

Lima-Per

Pgina 142 de 172

CURSO ABAP BASICO


www.bizpartner.biz

DATA: WA_FLIGHT
IT_FLIGHT

TYPE FLIGHT,
TYPE I_FLIGHT.

PARAMETERS: P_CARRID TYPE SFLIGHT-CARRID.

SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC


INTO CORRESPONDING FIELDS OF TABLE IT_FLIGHT
WHERE CARRID = P_CARRID.

FROM

SFLIGHT

* ALMENOS UN REGISTRO ES SELECIONADO


IF

SY-SUBRC = 0.

* 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.

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 misma (llamada recursiva).
Sintaxis:
PERFORM <subrutina> [ TABLES <parmetros_actuales> ]
[ USING <parmetro_actuales> ]
[ CHANGING <parmetro_actuales> ].
TABLES -> Los parmetros definidos con esta clusula slo pueden ser tablas internas, con o sin lnea de cabecera.

Lima-Per

Pgina 143 de 172

CURSO ABAP BASICO


www.bizpartner.biz

USING -> Los parmetros definidos con esta clusula pueden ser de cualquier tipo de dato, incluidas las tablas
internas. Se suelen utilizar como parmetros de entrada a la subrutina.
CHANGING -> Los parmetros definidos con esta clusula pueden ser de cualquier tipo de dato, incluidas las
tablas internas. Se suelen utilizar como parmetro 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.
NUM1 = 2. NUM2 = 4.
PERFORM SUMA USING NUM1 NUM2 CHANGING SUM.
NUM1 = 7. NUM2 = 11.
PERFORM SUMA USING NUM1 NUM2 CHANGING SUM.
FORM SUMA USING ADD_NUM1 ADD_NUM2 CHANGING ADD_SUM.
ADD_SUM = ADD_NUM1 + ADD_NUM2.
PERFORM PRESENTAR USING ADD_NUM1 ADD_NUM2 ADD_SUM.
ENDFORM.
FORM PRESENTAR USING OUT_NUM1 OUT_NUM2 OUT_SUM.
WRITE: / 'Suma de', OUT_NUM1, 'y', OUT_NUM2, 'es', OUT_SUM.
ENDFORM.

Elaborar un programa mediante el uso de las sentencias FORM y PERFORM para que nos arroje como
resultado el cuadrado de la suma de 2 nmeros.

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

Lima-Per

Pgina 144 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ENDFORM.

Digitando el siguiente cdigo se obtiene el mismo resultado del problema 2.


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

REPORT CC.
DO 2 TIMES.
PERFORM SY-INDEX OF SUB1 SUB2.
ENDDO.
FORM SUB1.
WRITE / 'Subroutine 1'.
ENDFORM.
FORM SUB2.
WRITE / 'Subroutine 2'.
ENDFORM.

Lima-Per

Pgina 145 de 172

CURSO ABAP BASICO


www.bizpartner.biz

REPORT CC.
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.
FORM ADDIT
USING ADD_NUM1
ADD_NUM2
CHANGING 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.

REPORT CC.
DATA: NUM TYPE I VALUE 5,
FAC TYPE I VALUE 0.
PERFORM FACT USING NUM CHANGING FAC.
WRITE: / 'Factorial of', NUM, 'is', FAC.

Lima-Per

Pgina 146 de 172

CURSO ABAP BASICO


www.bizpartner.biz

FORM FACT
USING VALUE(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 CC.
DATA: OP1 TYPE I, OP2 TYPE I, RES TYPE I.
OP1 = 3.
OP2 = 4.
PERFORM MULTIP USING OP1 OP2 CHANGING RES.
WRITE: / 'After subroutine:',
/ 'RES=' UNDER 'RES=', RES.
FORM MULTIP
USING VALUE(O1)
VALUE(O2)
CHANGING VALUE(R).
R = O1 * O2.
WRITE: / 'Inside subroutine:',
/ 'R=', R, 'RES=', RES.
ENDFORM.

REPORT CC.
TYPES: BEGIN OF LINE,
NAME(10) TYPE C,
AGE(2) TYPE N,
COUNTRY(3) TYPE C,
END OF LINE.
DATA WHO TYPE LINE.
WHO-NAME = 'Karl'. WHO-AGE = '10'. WHO-COUNTRY = 'D'.
PERFORM COMPONENTS CHANGING WHO.
WRITE: / WHO-NAME, WHO-AGE, WHO-COUNTRY.

Lima-Per

Pgina 147 de 172

CURSO ABAP BASICO


www.bizpartner.biz

FORM COMPONENTS CHANGING VALUE(PERSON) TYPE LINE.


WRITE: / PERSON-NAME, PERSON-AGE, PERSON-COUNTRY.
PERSON-NAME = 'Mickey'.
PERSON-AGE = '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.

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

Lima-Per

Pgina 148 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

CONSIDERACIONES: FUNCIONA IGUAL 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 CHANGING, FUNCIONA IGUAL

Lima-Per

Pgina 149 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

CONSIDERACIONES: FUNCIONA IGUAL 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 CHANGING, FUNCIONA IGUAL

REPORT

ZEJ7 MESSAGE-ID CU.

DATA: NUM1 TYPE I,


NUM2 TYPE I,
SUM TYPE I.

Lima-Per

Pgina 150 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

CONSIDERACIONES: PASO POR VALOR 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.

Lima-Per

Pgina 151 de 172

CURSO ABAP BASICO


www.bizpartner.biz

WHILE F_NUM GE 1.
F_FACT = F_FACT * F_NUM.
F_NUM = F_NUM - 1.
ENDWHILE.
ENDFORM.

CONSIDERACIONES: PASO POR VALOR 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

Pgina 152 de 172

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.

Lima-Per

Pgina 153 de 172

CURSO ABAP BASICO


www.bizpartner.biz

El nombre del grupo de funcin personalizado debe empezar con Z. Crearemos el grupo de funcin:
ZANIBAL3.

Clic en Schem.

Presionamos el botn Local Objeto, con lo que tenemos el grupo de funcin creado.
Como confirmacin en la barra de status aparece el mensaje: Function Group ZANIBAL3 created.
3.

PRIMER EJEMPLO DE FUNCION


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.
Lima-Per

Pgina 154 de 172

CURSO ABAP BASICO


www.bizpartner.biz

En la paleta Import van todos los parmetros que sern pasados por valor (si desea activar esta
opcin haga un check en Pass Value) desde el Editor de Abap para su procesamiento, 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 Editor de Abap, no es necesario especificar su tipo.

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

Lima-Per

Pgina 155 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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:

4. SEGUNDO EJEMPLO DE FUNCION

Lima-Per

Pgina 156 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 CADENARES solo se muestra cuando se corre desde el programa principal.
5. TERCER EJEMPLO DE FUNCION
Crearemos una funcin al que definimos datos previamente.
Aqu podemos probar desde FUNCTION BUILDER.

Lima-Per

Pgina 157 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Llamndolo desde un reporte creado mediante la transaccin SE38.

Mostrndonos:

FUNCION: WS_DOWNLOAD
To write data from an internal table to the presentation server without using a user dialog, use the function
module WS_DOWNLOAD. The most important parameters are listed below. For more information, refer
to the function module documentation in the Function Builder (Transaction
SE37).
Important Import Parameters

Lima-Per

Pgina 158 de 172

CURSO ABAP BASICO


www.bizpartner.biz

Parameter

Function

BIN_FILESIZE
CODEPAGE
FILENAME
FILETYPE
MODE

File length for binary files


Only for download under DOS: Value IBM
Filename
File type
Write mode (blank = overwrite, A = append)

Use the FILETYPE parameter to specify the transfer 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 separated with line breaks.

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

EJERCICIO. Bajar una tabla interna 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

Pgina 159 de 172

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

Lima-Per

= 'C:\prueba_hoy.txt'

Pgina 160 de 172

CURSO ABAP BASICO


www.bizpartner.biz

filetype
TABLES
data_tab

= 'ASC'
= TABLITA.

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 WBTABLE. 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,

Lima-Per

Pgina 161 de 172

CURSO ABAP BASICO


www.bizpartner.biz

t_REGISTRO-FMEAL,
t_REGISTRO-ARCITY,
t_REGISTRO-ARDATE,
t_REGISTRO-ARTIME.
ENDLOOP.

Lima-Per

Pgina 162 de 172

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.

TRANSACCIN 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

Pgina 163 de 172

CURSO ABAP BASICO


www.bizpartner.biz

13.

TABLA RELACIONADA
Esta transaccin llena la tabla WBTABLE de estructura:

14.

CREANDO UNA BATCH INPUT A LA TUTT


1.

SHDB

2.
3.
4.
5.

Grabar nueva:
o Crear (F5)
Nombrar la grabacin (Z_TUTT_XX01)
Especificar el cdigo de transaccin (TUTT)
Iniciar grabacin Start recording:

Lima-Per

Pgina 164 de 172

CURSO ABAP BASICO


www.bizpartner.biz

6. Se presenta la pantalla de la transaccin TuTT.

7. Completar los datos y grabar


8. Finalmente volver

Back (F3) .

Aparece la ventana de grabacion de la BI

Lima-Per

Pgina 165 de 172

CURSO ABAP BASICO


www.bizpartner.biz

9. Grabar
15.

Save (Ctrl+S)

PROGRAMA

REPORT Z_AOSB_BATCH1
.
TYPES: BEGIN OF Ty_CAMPOS,
FLID LIKE WBTABLE-FLID,
LVCITY LIKE WBTABLE-LVCITY,
LVDATE LIKE WBTABLE-LVDATE,
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,
ARDATE LIKE WBTABLE-ARDATE,
ARTIME LIKE WBTABLE-ARTIME,
END OF Ty_CAMPOS.
DATA: ARCHIVO LIKE RLGRAP-FILENAME,
TIPO LIKE RLGRAP-FILETYPE.
DATA: t_REGISTRO TYPE Ty_CAMPOS OCCURS 10 WITH HEADER LINE.
*----------------------Tablas para el Batch Input----------------------*
DATA: T_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: T_MESSTAB 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_REGISTRO.
PERFORM TUTT_LLENA_DYNPRO_FIELD USING t_REGISTRO.
ENDLOOP.
CALL TRANSACTION 'TUTT'
USING T_BDCDATA
MODE 'N'
UPDATE 'A'
MESSAGES INTO T_MESSTAB.
*----------------------------------------------------------------------*
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 'TUTPROG' '0100'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'WBTABLE-CHRTR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=CREA'.

Lima-Per

Pgina 166 de 172

CURSO ABAP BASICO


www.bizpartner.biz

PERFORM BDC_FIELD USING 'WBTABLE-FLID' t_REGISTRO-FLID.


PERFORM BDC_FIELD USING 'WBTABLE-LVCITY' t_REGISTRO-LVCITY.
PERFORM BDC_FIELD USING 'WBTABLE-ARCITY' t_REGISTRO-ARCITY.
PERFORM BDC_FIELD USING 'WBTABLE-LVDATE' t_REGISTRO-LVDATE.
PERFORM BDC_FIELD USING 'WBTABLE-ARDATE' t_REGISTRO-ARDATE.
PERFORM BDC_FIELD USING 'WBTABLE-LVTIME' t_REGISTRO-LVTIME.
PERFORM BDC_FIELD USING 'WBTABLE-ARTIME' t_REGISTRO-ARTIME.
PERFORM BDC_FIELD USING 'WBTABLE-REGLR' t_REGISTRO-REGLR.
PERFORM BDC_FIELD USING 'WBTABLE-CHRTR' t_REGISTRO-CHRTR.
PERFORM BDC_FIELD USING 'WBTABLE-MOVIE' t_REGISTRO-MOVIE.
PERFORM BDC_FIELD USING 'WBTABLE-SNACK' t_REGISTRO-SNACK.
PERFORM BDC_FIELD USING 'WBTABLE-FMEAL' t_REGISTRO-FMEAL.
ENDFORM.
*----------------------------------------------------------------------*
FORM LEE_LAYOUT.
ARCHIVO = 'C:\TEMP\ABC.DAT'.
TIPO = 'DAT'.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = ARCHIVO
FILETYPE = TIPO
TABLES
DATA_TAB = t_REGISTRO.
ENDFORM.

16.

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

Debe realizar los ajustes necesarios para que la fecha cargue correctamente.
17.

INSTRUCCIN CALL TRANSACTION


CALL TRANSACTION <transaction>
USING <tabint>
MODE <modo_ejec>
UPDATE <tipo_actual>.
Donde:

Lima-Per

Pgina 167 de 172

CURSO ABAP BASICO


www.bizpartner.biz

<tabint> Tabla interna (con estructura BDCDATA).


<modo_ejec> Modo de ejecucin. Puede ser:
A Ejecucin visible.
N Ejecucin invisible.
E Ejecucin visualizando solo errores.
<tipo_actual> Tipo de actualizacin en base de datos. Puede ser:
S Actualizacin sincrnica (inmediata).
A Actualizacin asncrona (Graba solo cuando termina la transaccin).
18.

EJERCICIOS
A. Realice el Batch Input de tal manera que los campos MOVIE, SNACK y FMEAL no sean levantados.
B. Agregue un reporte al Batch Input.
C. Levante los vuelos que partan de THF y lleguen a CDG.

Rangos
ASPECTOS TEORICOS

Campo
SIGN

OPTION

Lima-Per

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.

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).
Pgina 168 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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).

LOW

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).

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 ZANI31

TABLES : SCARR.
TYPES : BEGIN OF EST_CARR,
CARRID LIKE SCARR-CARRID,
CARRNAME LIKE SCARR-CARRNAME,
END OF EST_CARR.
DATA : T_SCARR TYPE TABLE OF EST_CARR WITH HEADER LINE.
DATA : N(2) TYPE N.
RANGES: R_RANGO FOR SCARR-CARRID.
R_RANGO-SIGN = 'I'.
R_RANGO-OPTION = 'BT'.
R_RANGO-LOW = 'GA'.
R_RANGO-HIGH = 'PQ'.
APPEND R_RANGO.
WRITE:/10 'ITEM

NUMMATERIAL

STOCK DISP'.

SELECT SCARR~CARRID SCARR~CARRNAME


INTO TABLE T_SCARR FROM SCARR
WHERE SCARR~CARRID IN R_RANGO.
N = 0.
LOOP AT T_SCARR.
N = N + 1.
WRITE : /11 N,
20 T_SCARR-CARRID,
33 T_SCARR-CARRNAME.
ENDLOOP.

Lima-Per

Pgina 169 de 172

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 comenzar a escribir en la pgina
actual. Se activa 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

Lima-Per

ZPROG2.

Pgina 170 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 ******'.

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 ******'.

Lima-Per

Pgina 171 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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 ******'.

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 LIST-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

Pgina 172 de 172

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

Pgina 173 de 172

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.

Lima-Per

Pgina 174 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

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.

Lima-Per

Pgina 175 de 172

CURSO ABAP BASICO


www.bizpartner.biz

SKIP.
DO 6 TIMES.
WRITE / sy-index.
ENDDO.

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'.

Lima-Per

Pgina 176 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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)

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.

Lima-Per

Pgina 177 de 172

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 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

Pgina 178 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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'.

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

Pgina 179 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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.

Lima-Per

Pgina 180 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ENDDO.
WRITE: / 'Next Loop:'.
NEW-PAGE LINE-COUNT 6.
DO 6 TIMES.
WRITE / sy-index.
ENDDO.

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

Pgina 181 de 172

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

Pgina 182 de 172

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

Pgina 183 de 172

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.

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.

Lima-Per

Pgina 184 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ULINE.
WRITE: 'End of Page', sy-pagno.
START-OF-SELECTION.
DO 100 TIMES.
DO 4 TIMES.
WRITE / sy-index.
ENDDO.
ENDDO.

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

Pgina 185 de 172

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.

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>].

Lima-Per

Pgina 186 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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

Pgina 187 de 172

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

Pgina 188 de 172

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.

REPORT sapmztst NO STANDARD PAGE HEADING

Lima-Per

Pgina 189 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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'.

Lima-Per

Pgina 190 de 172

CURSO ABAP BASICO


www.bizpartner.biz

WRITE 'in'.
write_frame 'ABAP'.
WRITE 'output lists.'.

FALTA GRID CON TABLA STANDAR


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
Operaciones con corresponding
REPORT

ZDAS3Y

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

.
RATE,
VALUE '0.6667',
VALUE '1.0',
VALUE '7.0',

DATA: BEGIN OF MONEY,

Lima-Per

Pgina 191 de 172

CURSO ABAP BASICO


www.bizpartner.biz

USA TYPE I VALUE 100,


FRG TYPE I VALUE 200,
AUT TYPE I VALUE 300,
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.

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.

REPORT ZDAS3Y
DATA: BEGIN OF RATE,
USA TYPE P VALUE '20',

Lima-Per

Pgina 192 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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

Pgina 193 de 172

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.

Sql

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

INSERT INTO ZSPFLI VALUES WA.

Lima-Per

Pgina 194 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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.

Lima-Per

Pgina 195 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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.

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.

Lima-Per

Pgina 196 de 172

CURSO ABAP BASICO


www.bizpartner.biz

ENDSELECT.

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.
2.
3.
4.

Crear un programa ejecutable (Report)


Crear un screen (100).
Colocar un custom container y ponerle nombre ALV_CONTAINER
Colocar un Pushbutton. Poner como en text Exit y en el functioncode EXIT

REPORT z_alv_grid .
TABLES: zsflight.

Lima-Per

Pgina 197 de 172

CURSO ABAP BASICO


www.bizpartner.biz

*------------------------------------------------------------------* 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
*&-----------------------------------------------------------------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.
Lima-Per

Pgina 198 de 172

CURSO ABAP BASICO


www.bizpartner.biz

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

Pgina 199 de 172

Potrebbero piacerti anche