230
CURSO ABAP BASICO www.bizpartner.biz Lima-Perú Página 1 de 230 Introducción 1.1 El sistema SAP R/3 SAP es un sistema ERP (Enterprise Resource Planning). SAP es un sistema de información 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 técnicos de una empresa en una solución informática simple, integrada, robusta y fiable. El sistema SAP R/3 tiene un conjunto de normas estándares en el área de software de negocios. El sistema SAP R/3 ofrece soluciones estándares para las necesidades enteras de información de una compañía. El sistema SAP R/3 consiste en funciones integradas en las siguientes áreas: 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 iteración entre los diversos clientes y servidores puedan ser controlados. R/3 = Real Time (Tiempo Real) / 3 capas. Fig. 1.01

Curso ABAP Basico

Embed Size (px)

Citation preview

Page 1: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 1 de 230

Introducción

1.1 El sistema SAP R/3

SAP es un sistema ERP (Enterprise Resource Planning).

SAP es un sistema de información 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 técnicos de una empresa en una solución informát ica simple, integrada, robusta y

fiable.

El sistema SAP R/3 tiene un conjunto de normas estándares en el área de software de negocios. El sistema

SAP R/3 ofrece soluciones estándares para las necesidades enteras de información de una compañía. El

sistema SAP R/3 consiste en funciones integradas en las siguientes áreas:

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 iteración entre

los diversos clientes y servidores puedan ser controlados.

R/3 = Real Time (Tiempo Real) / 3 capas.

Fig. 1.01

Page 2: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 2 de 230

(Presentación, Aplicación, Base de Datos).

1.2 ABAP/4

Advanced Business Aplication Programming 4th Generat ion

ABAP/4 es un lenguaje de programación de 4a. Generación (4GL) orientado a cliente servidor tal como

su definición especifica, al desarrollo de ap licaciones de negocios. Todos los módulos disponibles en SAP

han sido programados en este lenguaje de programación.

Además podemos escribir nuevas aplicaciones en ABAP/4 como complemento a las ya existentes o como

apoyo a la configuración del sistema.

1.2.1 Características

El sistema R/3 t iene una arquitectura de software modular que permite trabajar con todas las

características de un software orientado a cliente servidor.

Sistema SAP

Presentación (SAP GUI)

1 . . .x

TCP/IP

TCP/IP

Aplicación (SAP)

1 . . .x

Base de

datos

1

Fig. 1.02

DEV

QAS

PR

D

RPT

Panorama de un Sistema SAP

Fig. 1.03

Page 3: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 3 de 230

El sistema R/3 permite presentaciones, aplicaciones y almacenamiento de datos para diferentes

computadoras. Esta es la base que permite la escalabilidad de el sistema R/3

El n ivel mas bajo es el n ivel de base de datos. Los datos son manejados con la ayuda de un sistema de

administración de base de datos relacionales (RDBMS). Además de los datos maestros y datos de

transacción, programas y los meta datos que describe el Sistema R/3 son almacenados y administrados

aquí.

Los programas ABAP corren en el n ivel de aplicación, las aplicaciones proporcionadas por SAP y las

creadas. Los programas ABAP trabajan con los datos llamados desde la base de datos y los nuevos datos

almacenados.

El tercer nivel es el n ivel de presentación (SAPGUI). Este nivel contiene la interfase del usuario que

permite el acceso del usuario a la aplicación, ingresando nuevos datos y recibiendo el resultado de un

proceso determinado.

La distribución técnica del software es independiente de la ubicación física del hardware. Las

aplicaciones y los niveles de presentación de los componentes pueden ser divididos entre cualquier

número de componentes. La distribución 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 pequeño selector de máquinas donde vamos a poder trabajar. En la

figura 1.04 vemos que nuestro logon está preparado para trabajar en distintas máquinas de diferentes

localidades, así mismo cada máquina está preparada para una tarea específica.

Así pues, podemos tener tres tipos de máquinas (que son las que recomienda SAP):

DEV: Máquina de desarrollo donde se hacen las pruebas y los programas

QAS: Máquina de control de calidad donde se da el visto bueno a las pruebas.

PROD: Máquina de producción, allí donde trabaja el cliente.

Fig. 1.04

Page 4: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 4 de 230

En este programa, podemos acceder a las máquinas mediante el Logon o cambiar sus propiedades

técnicas, 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 información vamos a trabajar.

2. Usuario (User)

El usuario con el cuál vamos a acceder

3. Clave (Password)

Palabra Clave relacionada con el usuario

4. Idioma (Language)

Con que idioma queremos acceder a SAP

Con los datos correctos accedemos a SAP. Para este curso trabajamos con el SAP System Data WebAS

6.20. La p rimera pantalla que nos aparece se muestra en la Figura 1.06, en ella podemos apreciar:

1. Barra de menú.

2. Herramientas estándar.

3. Barra de Titulo.

4. Herramientas de la aplicación.

5. Barra de estado.

6. Línea de comandos.

7. Area de navegacion.

Fig. 1.05

Page 5: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 5 de 230

1.4 ABAP WORKBENCH (S001)

El entorno de desarrollo para ABAP y sus componentes de programación están contenidos en el ABAP

Workbench.

En la figura 1.04 se pueden distinguir algunas herramientas del entorno de desarrollo de ABAP como

Dict ionary, Ed itor, Function Buider, etc. Otra forma de llegar a ellas es utilizando los códigos de

transacciones, SE11, SE38, etc.

Fig. 1.06

Fig. 1.07

Page 6: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 6 de 230

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 Transacción

Las Transacciones son métodos abreviados de llamar a los programas o en el caso de los Modul Pool, son

la única forma de llamarlos. Además estas se utilizan para hacer de intermediario entre los menús y los

programas. Pueden ser introducidas directamente en la línea de comandos /n o /o siempre que se quiera

ejecutar en el mis mo modo o en otro modo. P.ej. /nse38 llama a la transacción se38 (editor ABAP) dentro

del mismo modo.

1.4.3 Principales herramientas de ABAP WORKBENCH

Browser (S E80)

Con este sencillo navegador vamos a poder trabajar con todos y cada uno de los diferentes

objetos que posee SAP: tablas, vistas, listados, informes, trasacciones...

Dictionary (S E11)

El d iccionario es la herramienta básica para tener acceso a la construcción de tablas y estructuras

de datos.

Editor ABAP (S E38)

Este nos es el editor de código fuente de cada uno de los programas de SAP. Recuerde que todas

las funcionalidades de SAP esta desarrollado en ABAP.

Funciones (S E37)

Las funciones son herramientas que normalmente son independientes del entorno en el cual

estamos desarrollando, podrían ser como las API de Windows, p.ej. conversiones de monedas,

rutinas de validación de NIFs.

Screen Painter (S E51)

Cuando necesitemos crear pantallas suficientemente complejas para poder interactuar con el

usuario, vamos a necesitar de esta herramienta.

Menú Painter (S E41)

El Menú Painter es la única herramienta que nos permite diseñar el entorno de trabajo de la parte

superior de las ventanas, es decir, menús, pf-status y botones directos.

Además, dentro de los diferentes menús vamos a poder encontrar otro tipo de herramientas que nos

permit irán trabajar mejor con nuestros programas, por ejemplo: d iccionario de mensajes, BD Lógicas,

transacciones, menús de ámbitos, análisis de tiempo, etc.

Page 7: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 7 de 230

1.4.4 El editor de ABAP

El Editor ABAP es la herramienta que va a usar para escribir los programas, clases, funciones módulos,

flu jo lógico de pantallas, etc.

Recordemos que ABAP es un leguaje interpretado. El editor de ABAP nos permite visualizar el código

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 menús más interesantes:

Verificar

Activar

Ejecutar

Referencia de utilización

Análisis de entorno

Manual online

Borrar…

Copiar…

Renombrar…

Debugging

Ejecutar con variante

Variantes

El campo de nombre de programa admite el carácter asterisco (*) para búsqueda, se activa con la tecla de

función F4. En SAP solo se permite nombres de programas de usuario que inicien con las letra Y y Z.

Fig. 1.04

Fig. 1.08

Page 8: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 8 de 230

Sub objetos:

1. Código Fuente.

2. Variante. Cuando en un programa queremos que se introduzcan valores predeterminados y no

nuevos del usuario, se utilizarán variantes. Las variantes tendrán los valores que se pueden

introducir.

3. Atributos. Información referente al p rograma; Titu lo, Tipo, Status, etc.

4. Documentación. Se refiere al texto que se muestra como información o ayuda.

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

Puntos del menú

1. Objeto Siguiente/Anterior

2. Visualizar/Modificar

3. Activo / Inactivo

4. Otro objeto…

5. Verificar

6. Activar

7. Verifica-Ejecuta

8. Referencia de utilización

9. Visualizar lista de objetos

10. Visualizar ventana de navegación

11. Imagen completa on/off

12. Ayuda para

13. Fijar/borrar breakpoint

14. Patron

15. Pretty Printer

Fig. 1.09

Page 9: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 9 de 230

Verificar.

Además de poder verificar de una forma ráp ida, 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 compilación.

Activar

Activa el programa. Es la versión activa del programa la que utiliza el sistema.

Verifica-Ejecuta

Ejecuta el código actual para verificar su funcionamiento.

Referencia de utilización

Se usa para saber desde donde se llama o desde donde se utiliza lo que estamos apuntando (texto

seleccionado).

Visualizar ventana de navegación

La pila no es más que un sitio de almacenamiento para nuestra navegación, es decir, cuando hacemos

doble-click en un perform y nos lleva a la línea donde está descrito la situación donde estábamos antes

queda almacenada en la p ila. 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 break point

Fija un punto de parada al momento de ejecutar el código. Solo se utiliza si la versión esta activa.

Patrón

Nos permiten insertar código fuente de una forma genérica pero adaptada a nuestras necesidades. Por

ejemplo, si queremos incluir una función a nuestro programa utilizaremos el patrón para que sea el p ropio

editor quién nos incluya la mascara de la mis ma. Este patrón se pueden modificar e incluso crear de

nuevos.

Pretty-Printer

Una vez que nuestro programa esté terminado, utilizaremos esta opción para que nos lo deje más "bonito"

en su estructura. Esta opción nos identará las sentencias y nos pondrá comentarios en los procedimientos

para poder documentarlos.

Veamos los botones del área de edición:

1. Cortar/Copiar/Pegar

2. Deshacer/Rehacer

3. Buscar/continuar busqueda

4. Up/DownLoad

Finalmente una herramienta útil es.

Ctrl. + < / Ctrl. + >

Comentar / Des comentar párrafo seleccionado.

Page 10: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 10 de 230

1.5 Creación 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 usua rio que inicien

con las letra Y y Z.

Una vez que hemos ingresado un nombre valido y dado clic en crear programa, el SAP nos lleva a la

ventana de atributos del programa para ingresar algunos datos básicos.

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

Fig. 1.11

Page 11: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 11 de 230

A continuación nos lleva a la ventana para crear una entrada en el catalogo de objetos.

Aquí el dato más importante es la Clase de desarrollo.

Por el momento también debe bastar con decir que si grabamos como objeto local no nos pedirá más

datos.

Un objeto local solo podrá utilizarse en el ámbito de desarrollo, para poder pasarlo a control de calidad o

producción es posible luego modificar este punto.

Hecho esto ingresamos al Ed itor ABAP en un programa nuevo. Por defecto aparece la línea de programa

REPORT.

La sentencia mas elemental es la de escritura WRITE. Ingresando la sentencia WRITE debe q uedar así:

REPORT ZBC_EJERCICIO1.

WRITE 'HOLA MUNDO'.

Operaciones aritméticas y expresiones

2.1 Tipos

TIPOS DE DATOS

Carácter (C)

Fig. 1.11

Page 12: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 12 de 230

Simples

Carácter

Numeric carácter (N)

Temporal

Date (D).

Time (T).

Hexadecimal

Byte field (X).

Numérico

Integer (I).

Floating-point number (F).

Packed number (P).

Complejos

Estucturas

Tablas internas

TIPOS PREDEFINIDOS (Longitud variable)

Carácter

STRING

Hexadecimal

XSTRING

2.1.1 Definición de tipos

Se pueden definir de tres formas:

Tipos predefinidos

Tipo de datos locales.

Tipo de datos de diccionario

Page 13: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 13 de 230

Tipos predefinidos

CARACTERISTICAS DE LOS TIPOS CARÁCTER

CARACTER ( C )

1 Valor in icial: „ … „

2 Longitud de campo inicial: 1 byte.

3 Longitud de campo valido: 1 – 65535 bytes

CARÁCTER NUMERICO ( N )

1 Valor in icial: „0 … 0‟

2 Longitud de campo inicial: 1 byte

3 Longitud de campo valido: 1 – 65535 bytes

4 Solo puede contener caracteres numéricos (0 .. 9), pero internamente no son representados como

números.

DATE ( D )

1 Valor inicial: '00000000'

2 Longitud de campo inicial: 8 bytes.

3 Longitud de campo valido: 8 bytes

4 Formato: YYYYMMDD

TIME ( T )

1 Valor inicial: '000000'

2 Longitud de campo inicial: 6 bytes.

3 Longitud de campo valido: 6 bytes

4 Formato: HHMMSS

CARACTERISTICAS DE LOS TIPOS NUMERICOS

NUMERO ENTERO ( I )

1 Valor in icial: 0

2 Longitud de campo inicial: 4 bytes

3 Longitud de campo valido: 4 bytes

4 Valor in icial: 0.

5 Los valores se encuentran en el rango: -2**31 a 2**31-1

6 Los valores resultantes de operaciones aritméticas (ej. Fracciones) son redondeados, no truncados.

NUMERO PUNTO FLOTANTE ( F )

1 Valor in icial: 0

2 Longitud de campo inicial: 8 bytes

Page 14: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 14 de 230

3 Longitud de campo valido: 8 bytes

4 Los valores se encuentran en el rango: 1x10**-307 a 1x10**308

5 La exactitud aproximada es de 15 decimales (depende del floating point aritmethic del hardware).

6 Para efectos de aproximación con decimales es mejo r utilizar el tipo de dato P.

7 Puede utilizar P cuando necesita cubrir rangos muy amplios y no se requiere precisión en el

redondeo.

NUMERO EMPAQUETADO ( P )

1 Valor in icial: 0

2 Longitud de campo inicial: 8 bytes

3 Longitud de campo valido: 1-16 bytes

4 Permite trabajar con decimales.

5 Es necesario tener el atributo del programa como Fixed point arithmetic, de lo contrario será tratado

como entero.

LONGITUD VARIABLE: STRING

1 Es una secuencia de caracteres de longitud variable.

2 Puede contener cualquier carácter alfanumérico.

3 Valor in icial: cadena vacía de longitud cero.

4 Cuando se crea una cadena, solo una cabecera de cadena es creada.

Tipos de datos locales

Los programas pueden definir sus propios tipos de datos.

Se puede declarar t ipos de datos locales refiriéndose 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 t ipo de dato edad, que es del tipo predefinido I.

Page 15: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 15 de 230

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

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

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

..............

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 t ipo valor_spfli del mis mo tipo que spfli (que es una tabla Standard).

Se define el t ipo nombre_cliente de tipo C de ancho 20.

Se define la estructura direccion, con cuatro componentes: direccion, 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 t ipo del campo cityfrom de la tabla spfli (referenciado por el tipo valor_spfli).

Page 16: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 16 de 230

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,

END OF listin.

Declaración de datos

La sentencia DATA permite realizar la declaración de datos.

DATA <campo> [ (<longitud>)] <tipo> [ <valor> ] [ <decimales> ]

Variante utilizada para declarar variables. El nombre de la variable <campo> no debe tener más de 30

caracteres. Se puede utilizar cualquier carácter a excepción de: "+", ".", ",", ":", "(" y ")".

Además el nombre no puede estar sólo compuesto de dígitos numéricos, ni coincidir con los objetos de

datos predefinidos, ni con las palabras reservadas. Veamos algunas recomendaciones:

Utilizar nombres significat ivos, que no requieran el uso de comentarios.

No utilizar el "guión" ya que podríamos confundir la variab le con un field-string.

Utilizar el "guió bajo" para nombres especiales.

Page 17: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 17 de 230

No utilizar los caracteres especiales. Utilizar siempre una letra como primer carácter del nombre.

Con la opción <tipo> se especifica el t ipo de variable.

Con la opción <decimales> se puede especificar el número de decimales para los campos de tipo P. El

formato es el siguiente: DECIMALS <num>, siendo <num> el número de dígitos después del punto

decimal. El número máximo de decimales es de 14.

2.1.2 Tipos de operadores

Como cualquier lenguaje de programación ABAP tiene la capacidad de realizar a los datos los cálculos

más complejos mediante un conjunto de operadores y un grupo de reglas básicas.

Operadores ari tméticos

OPERADOR

OPERADOR 1

OPERACION

+ ADD Adición

- SUBSTRACT Sustracción

* MULTIPLY Multiplicación

/ DIVIDE Div isión

DIV Div isión entera

MOV Residuo de división entera

** Potenciación

Se utilizan de la siguiente manera:

OPERACIÓN

SENTENCIA

SENTENCIA

Adición <c> = <a> + <b> ADD <a> TO <b>

Sustracción <c> = <a> - <b> SUBSTRACT <a> FROM <b>

Multiplicación <c> = <a> * <b> MULTIPLY <a> BY <b>

División <c> = <a> / <b> DIVIDE <a> BY <b>

División entera <c> = <a> DIV <b>

Residuo de división <c> = <a> MOD <b>

Potenciación <c> = <a> ** <b>

Funciona para cualquier formato de tipo numérico.

Page 18: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 18 de 230

Si los operandos no son del mismo t ipo, el sistema convierte el resultado al t ipo de dato más alto en el

nivel jerárquico.

Para asignar el resultado de una calculo matemático, se utiliza la sentencia COMPUTE o el operador de

asignación (=).

COMPUTE <N> = <expresión>

El uso de COMPUTE es opcional.

Operadores relacionales

OPERADOR

OPERADOR 1

OPERADOR 2

OPERACION

= EQ Igual a

<> NE >< Diferente

< LT Menor que

<= LE Menor o igual que

> GT Mayor que

>= GE Mayor o igual que

Permite comparar dos objetos con diferentes tipos de datos.

Ambos operandos deben ser compatibles o convertibles.

Tipos lógicos

OPERADOR

OPERACION

AND Y

OR O

NOT NEGACION

Permite combinar varias expresiones lógicas en una expresión simple.

2.1.3 Funciones matemáticas

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

FUNCION

RES ULTADO

ABS VALOR ABSOLUTO

Page 19: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 19 de 230

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

RES ULTADO

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.

Para entrada de datos: PARAMETERS.

Existen otras sentencias que permiten el ingreso y salida de datos.

Write

Saca datos por pantalla.

WRITE [ AT ][ / ][ <posición> ] [ <longitud> ] <campo> [ <opciones> ].

Esta sentencia saca el campo <campo> en su formato estándar por la salida act iva. La salida activa por

defecto es la pantalla. El campo <campo> puede ser cualquier objeto de dato, field -symbol o parámetro

formal, o texto simbólico.

En la pantalla normalmente los campos de salida están justificados a la izquierda. Utilizando varias

sentencias WRITE los campos de salida aparecen uno detrás de otro separados po r un espacio en blanco.

Page 20: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 20 de 230

Sino hay suficiente espacio para un campo de salida en la línea actual, el sistema provoca un salto de

línea.

Los campos numéricos F, I y P están 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

función del espacio disponible en salida.

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

TIPO

LONGITUD DE SALIDA

POSICIONAMIENTO

C

D

F

I

N

P

T

X

Longitud del campo

8

22

11

Longitud del campo

2 * Longitud del campo (+1)

6

2 * Longitud del campo

Justificado a la izquierda

Justificado a la izquierda

Justificado a la derecha

Justificado a la derecha

Justificado a la izquierda

Justificado a la derecha

Justificado a la izquierda

Justificado a la izquierda

Si el campos es del tipo P y tiene posiciones decimales, la longitud de salida se incrementa en 1. Con los

tipos de datos D, el formato interno del campo difiere del formato de salida. Para campos de tipo D, el

sistema lee el formato de salida especificado en el reg istro maestro de usuario.

Posibles formatos de salida son

DD/MM/YY o MM/DD/YYYY, donde, DD es el día, MM es el mes y YYYY es el año.

Se puede dar formato al campo de salida con las opciones /, <offset> y <longitud>.

Con / forzamos un salto de línea antes de la salida.

<posición> es un número o una variable de hasta tres dígitos de longitud que sirve para indicar la

posición en el dispositivo de salida.

<longitud> es un número o una variable de hasta tres dígitos de longitud que sirve para indicar la

longitud de salida del campo.

Si <posicion> y <longitud> son literales numéricos la cláusula es AT es opcional.

Si utilizamos la opción <posición>, el campo saldrá en esa posición aunque no haya espacio, o haya sido

utiliza esa posición por otro campo.

Si <longitud> es menor que el campo de salida, si éste es alfanumérico se trunca y si es numérico se

rellena por la izquierda con un asterisco (*).

Page 21: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 21 de 230

Entre otros formatos de write más complejos, tenemos:

LEFT-JUSTIFIED Salida justificada a la izquierda.

CENTERED Salida centrada.

RIGHT-JUSTIFIED Salida justificada a la derecha.

UNDER <campo> La salida se posiciona bajo el campo <campo>.

NO-GAP El espacio en blanco posterior a la salida se

omite.

USING EDIT MASK

<máscara>

Se especifica un formato de salida.

USING NO EDIT MASK Desactiva el formato que puede tener un campo

del diccionario de datos.

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

automáticamente

WRITE <symbol> AS

SYMBOL

Si escribe el gráfico <símbolo>. Para poder

utilizar esta opción es necesario incluir en el

programa

WRITE <icono> AS ICON Se escribe el icono <icono>. Para poder utilizar

esta opción es necesario incluir en el programa

la siguiente sentencia: INCLUDE <ICON>.

WRITE <campo> AS

CHECKBOX

Se escribe el campo <campo> con la

característica 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 evento AT LINE-

SELECTION.

DD/MM/YY El separador se define en el registro maestro de usuario.

MM/DD/YY El separador se define en el registro maestro de usuario.

DD/MM/YYYY El separador se define en el registro maestro de usuario.

MM/DD/YYYY El separador se define en el registro maestro de usuario.

DDMMYY Sin separadores.

MMDDYY Sin separadores.

YYMMDD Sin separadores.

Page 22: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 22 de 230

Para campos numéricos:

NO-SIGN

Salida sin signo.

DECIMALS <decimales> <decimales> especifica el número de dígitos

después del punto.

EXPONENT <exponente> En campos de tipo F, <exponente> especifica el

exponente.

ROUND <r>

campos de tipo P, se multiplican por 10 elevado a

a <r>.

CURRENCY <moneda> Formato sobre la base de datos de la moneda

<moneda> definida en la tabla TCURX.

UNIT <unidad> El número de decimales se fija sobre la base de

la unidad <unidad> especificada en la tabla T006

para los campos de tipo P.

Parameters

Si queremos dar la posibilidad al usuario de introducir valores en variables en la pantalla de selección,

debemos definir dichas variables con la sentencia PARAMETERS.

PARAMETERS <parámetro> [ (<longitud)>].

[ TYPE <tipo> | LIKE <campo> ]

[ DECIMALS <decimales> ] [ DEFAULT <valor> ]

[ MEMORY ID <memoria>] [ MODIF ID <grupo> ]

[ MATCHCODE OBJECT <objeto> ] [ AS MATCHCODE S TRUCTURE]

[ NO-DISPLAY ] [ LOWER CAS E ] [ OBLIGATORY ] [ FOR TABLE <tabla> ]

[ AS CHECKBOX ] [ RADIOBUTTON GROUP <grupo> ]

[ VALUE-REQUES T ] [ HELP REQUES T ].

Cuando el usuario arranque el programa aparece una pantalla de selección con el parámetro <parámetro>,

con longitud la especificada en <longitud>, o la longitud por defecto del campo si la cláusula no se

define.

Por defecto la descripción que aparece a la izquierda del campo es el nombre del campo.

El objeto parcial de programa Elementos de texto, la opción Textos de selección nos permite asociar al

parámetro un texto significativo.

Otra posibilidad es la utilización de la sentencia SELECTION-SCREEN como veremos en el apartado

correspondiente a esta sentencia.

Se puede utilizar los parámetros de selección, 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 selección son más complejas

que indicar un valor desde y hasta, es preferib le utilizar la sentencia SELECT-OPTIONS.

Page 23: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 23 de 230

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 parámetro será el valor del campo en el momento de presentar la pantalla

de selección. Recordemos que el evento INITIALIZATION se ejecuta antes de la presentación de la

pantalla de selección, en él se puede actualizar el valor del campo especificado. El usuario puede

modificar el valo r que aparece por defecto.

LOWER-CAS E -> El sistema no convierte el valor del parámetro a mayúsculas, es decir, respeta la

entrada del usuario, sea con caracteres en mayúsculas y/o minúsculas. Si definimos el t ipo de pa rámetro

con la opción LIKE y referenciamos un campo del diccionario de datos, la cláusula LOW ER CASE no se

puede utilizar.

OBLIGATORY -> Obliga a introducir un valor al usuario en el parámetro. Para significar el hecho de la

obligatoriedad, el sistema presenta el campo con el signo de interrogación (?).

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 S UM TYPE I.

SUM = S UM + 1.

SUM = S UM + 2.

SUM = S UM + 3.

SUM = S UM + 4.

WRITE: / 'S UMATORIA: ', S UM.

REPORT 1.

DATA S UM TYPE I.

SUM = S UM + : 1, 2 , 3, 4.

WRITE: / 'S UMATORIA: ', S UM.

Page 24: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 24 de 230

Ejemplo 2.3 Uso de WRITE.

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.

Page 25: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 25 de 230

Ejemplo 2.7 Uso de WRITE.

REPORT 1.

DATA NUMERITO TYPE F.

NUMERITO = 3 / 4.

WRITE: / 'VALOR: ', NUMERITO.

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

Page 26: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 26 de 230

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.

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.

Page 27: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 27 de 230

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.

write /(2) 'XYZ'.

write /(4) 'XYZ'.

write 'ABC'.

write /5(4) f1.

write at /p(l) f1.

Page 28: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 28 de 230

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

Page 29: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 29 de 230

Ejemplo 2.17 Uso de WRITE.

report 1.

data: f2 type i value '1234-'.

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.

Page 30: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 30 de 230

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.

Page 31: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 31 de 230

Ejemplo 2.21 Un vendedor recibe un sueldo base más un 10% extra por comisión 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.

Page 32: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 32 de 230

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l n u m e r o 1 2 . 3 4 5 .

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

6 7 8 , 8 9 - E s e m p a q u e t a

41 42

d 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 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l n u m e r o 1 2 . 3 4 5 . 6 7 8

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

, 8 9 - E s e m p a q u e t a

41 42

d o

Page 33: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 33 de 230

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l n u m e r o

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

8 , 8 9 E s e m p a q u e t a

41 42

d o

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l n u m e r o

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

5 , 0 0 E s e m p a q u e t a

41 42

d o

Page 34: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 34 de 230

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l i m i n a n d o r e g i s

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

t r o s

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l i m i n a n d o r e g i s

REPORT ZPROCESO_16 . WRITE '1234567890123456789012345678901234567890123456'.

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l i m i n

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

a n d o r e g i s t r o s

Page 35: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 35 de 230

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l t e x P E R U A e v a a s e

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

r s o b r e e s c r i t o

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

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

E l t e x P E R U A N O

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

r e e s c r i t o

Page 36: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 36 de 230

Escribir un programa que muestre la división de dos números enteros en un

número real con 3 decimales:

a) Que la ultima posición del decimal sea la posición 13.

b) Que el primer lugar entero aparezca en la posición 8.

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

Page 37: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 37 de 230

2.1.5 Uline y Skip

Podemos imprimir una línea de Subrayados con la sentencia ULINE. Tendrá las mismas propiedades que

el WRITE.

ULINE /(<offset>)(<Iong>).

Para saltar una o varias líneas utilizaremos S KIP.

SKIP <n>.

Por defecto el salto será de una única línea.

report ZPROBLEMA_04.

SKIP TO LINE 3. ULINE AT 2(1).

WRITE 4 '-'. WRITE 6 '--'.

WRITE 9 '---'. ULINE AT 12(4).

SKIP TO LINE 1. POSITION 18.

WRITE '|'. SKIP TO LINE 3.

DO 4 TIMES. NEW-LINE. POSITION 18.

WRITE '|'. ENDDO.

Analice el funcionamiento de:

POSITION

NEW-LINE

Page 38: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 38 de 230

REPORT ZPROBLEMA_04.

WRITE '---'. WRITE /2 '| |'.

ULINE AT /5(8). SKIP TO LINE 4.

DO 3 TIMES. WRITE '|'. NEW-LINE. ENDDO.

SKIP TO LINE 5. WRITE '---------'. SKIP TO LINE 4.

ULINE AT 6(10). WRITE 15 '|' .

report ZPROBLEMA_04.

WRITE ' |'. WRITE /'-------'. WRITE /' |'.

SKIP TO LINE 1. DO 3 TIMES.

WRITE 12 sy-vline. NEW-LINE. ENDDO.

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

Analice el funcionamiento de SY-VLINE.

Page 39: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 39 de 230

Page 40: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 40 de 230

Otros usos de Write

Include

Report ZEEE. INCLUDE <symbol>. INCLUDE <icon>.

WRITE: / 'Phone Symbol:', SYM_PHONE AS SYMBOL. SKIP. WRITE: / 'Alarm Icon: ', icon_alarm AS ICON.

Report ZEEE. DATA: flag1(1) TYPE c VALUE ' ',

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

/ 'Flag 2 ', flag2 AS CHECKBOX, / 'Flag 3 ', flag3 AS CHECKBOX.

Under REPORT ZEEE. DATA: h1(10) TYPE c VALUE ' Number', h2(10) TYPE c VALUE ' Square',

h3(10) TYPE c VALUE ' Cube', n1 TYPE i, n2 TYPE i, n3 TYPE i,x TYPE i.

TOP-OF-PAGE. x = sy-colno + 8. POSITION x. WRITE h1. x = sy-colno + 8. POSITION x. WRITE h2.

x = sy-colno + 8. POSITION x. WRITE h3. x = sy-colno + 16. POSITION x. WRITE sy-pagno. ULINE.

START-OF-SELECTION. DO 10 TIMES.

n1 = sy-index. n2 = sy-index ** 2. n3 = sy-index ** 3. NEW-LINE. WRITE: n1 UNDER h1,

n2 UNDER h2, n3 UNDER h3.

ENDDO.

Page 41: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 41 de 230

COLORES

The options COLOR, INTENSIFIED, and INV ERSE of the FORMAT statement influence the colors of the output list.

To set colors in the program, use:

Syntax

FO RMAT COLOR <n> [ON] INTENSIFIED [O N|O FF] INVERSE [O N|O FF].

To set colors at runtime, use:

Syntax

FO RMAT COLOR = <c> INTENSIFIED = <int> INVERSE = <inv>.

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

COLOR sets the color of the line background. If, in addition, INV ERSE ON is set, the system changes the foreground color instead of the background color.

For <n> you can set either a color number or a color specif ication. Instead of color number 0, however, you

must use OFF. If you set the color numbers at runtime, all values of <c> that are less than zero or greater than seven, lead to undefined results. The following table summarizes the different possibilities:

<n> <c> Color Intended for

OFF or COL_BACKGROUND 0 depends on GUI background

1 or COL_HEADING 1 gray-blue headers

2 or COL_NORMAL 2 light gray list bodies

3 or COL_TOTAL 3 yellow totals

4 or COL_KEY 4 blue-green key columns

5 or COL_POSITIVE 5 green positive threshold value

6 or COL_NEGATIVE 6 red negative threshold value

7 or COL_GROUP 7 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 specif ied above can be intensif ied or normal. The default setting is INTENSIFIED ON. For COLOR OFF, the system changes the

foreground color instead of the background color. If , in addition, INVERSE ON is set, then INTENSIFIED OFF has no effect (again w ith the exception of COLOR OFF).

INVERSE affects the foreground color.

With one exception (COLOF OFF), the system takes the COLOR specif ied from an inverse color palette and uses it as foreground color. The background color remains unchanged. For COLOR OFF, INV ERSE has no effect, since this would set the foreground and the background to the same color.

The follow ing statements have the same effect:

FO RMAT INTENSIFIED O N. and SUMMARY.

FORMAT INTENSIFIED OFF and DETAIL.

Page 42: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 42 de 230

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.

Page 43: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 43 de 230

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

continuación, de acuerdo con la parametrización que se haya realizado

sobre la tabla T005X.

SET COUNTRY <país>.

Con <país> identificamos el código de país a utilizar en la sentencia.

Si el país existe en la tabla de países T005X, el código de retorno de

la sentencia es 0, en caso contrario, es 4. Si país 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

ejecución de un programa, sino que su efecto se extiende a toda el

área de trabajo del usuario.

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

más registros:

Page 44: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 44 de 230

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 FORMATO

XXX.XXX,XX Otro

US X XXX,XXX.XX El usual (miles: ,) (decimales: .)

DATFM FORMATO

1 DD.MM.AAAA

2 MM/DD/AAAA

4 AAAA.MM.DD

5 AAAA/MM/DD

Se muestra todos los países con valores diferentes de 1 en DATFM, todos los demás tienen e valor de 1. La lista esta ordenada ascendentemente:

Page 45: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 45 de 230

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.

Page 46: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 46 de 230

Estructuras de control

En ABAP, como en todos los lenguajes estructurados, disponemos de una serie de instrucciones para

subdividir el p rograma en bloques lógicos; se ejecutarán cuando se cumpla una cierta condición.

3.1 Condicionales simples

Para introducir una condición, utilizaremos la sentencia:

IF... ELS E... ENDIF

que podrá aparecer en distintas modalidades.

IF <Cond.>.

ENDIF.

IF <Cond.>.

ELS E.

ENDIF.

IF <Cond.>.

ELS EIF.

ELS EIF.

ELS E.

ENDIF.

También podremos utilizar operadores especiales:

Para chequear rangos:

IF <f1> BETWEEN <f2> AND <f3>.

Para chequear valores:

IF <f1> IS INITAL.

3.2 Condicionales complejas

Si queremos ejecutar diferentes instrucciones en función del contenido de un campo, podemos utilizar la

sentencia CAS E.

CAS E <campo>.

WHEN <valor1>.

WHEN <valor2>.

Page 47: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 47 de 230

WHEN OTHERS .

ENDCAS E.

Por últ imo, existe la instrucción condicional:

ON CHANGE OF ... ENDON

que permitirá la ejecución de un bloque de instrucciones, si se ha producido un cambio de valor de un

cierto campo durante el acceso a base de datos o una tabla interna.

Cómo procesar una tabla interna o un acceso a base de datos, ya lo veremos más 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 S Y-INDEX tendremos un contador del número de repeticiones.

Es posible anidar sentencias DO. En ese caso, el S Y-INDEX hará referencia al bucle en proceso.

3.3.2 While

Permite ejecutar un bloque de instrucciones mientras se cumpla una condición.

WHILE <cond>.

ENDWHILE.

De la mis ma forma que la instrucción DO, WHILE permite an idar bucles.

3.4 Sentencias de control

Page 48: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 48 de 230

Las sentencias descritas a continuación se utilizarán 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 condición es falsa, saltará todas las

instrucciones que siguen al CHECK e iniciará la siguiente pasada al bucle. Fuera de un bucle si la

condición es falsa, saltará todas las instrucciones que siguen al CHECK hasta el final del ev ento o

programa en proceso.

3.4.2 Exit

Dentro de un bucle saldrá del bucle y fuera de un bucle saldrá del programa.

Si la instrucción EXIT está dentro de varios bucles anidados, únicamente saldrá del bucle en proceso.

3.4.3 Stop

Con STOP finalizaremos el report (programa) en ejecución , pero antes ejecutaremos el evento END-OF-

SELECTION.

3.4.4 Leave

Con LEAVE finalizaremos el report (programa) en ejecución, sin ejecutar el evento END-OF-

SELECTION.

Page 49: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 49 de 230

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.

ELS E.

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.

ELS E.

IF ( Cantidad GT 1000 ) AND ( Cantidad LE 3000 ).

Cantidad = Cantidad * ( 90 / 100 ).

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

/ 'El Monto a Pagar es :', Cantidad.

ELS E.

IF ( Cantidad GE 1000 ) AND ( Cantidad LE 3000 ).

WRITE: / 'El Monto a Pagar es :', Monto_aux.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

Page 50: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 50 de 230

Ejemplo 3.2 Necesitamos saber si una persona es “joven” o “vieja” basándonos en su edad. Joven es

aquella menor de 45 años.

REPORT ZPROBLEMA_04.

PARAMETERS : Edad TYPE I DEFAULT ''.

IF Edad GE 45.

WRITE: / 'Usted es considerada una persona Vieja'.

ELS E.

WRITE: / ' Usted es considerada una persona Joven'.

ENDIF.

Page 51: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 51 de 230

Ejemplo 3.3 Dado un numero entero realice la siguiente operación:

S = 1 + x + x2 + x

3 + … + x

7

REPORT Z_PROB1.

PARAMETERS : Numero TYPE I DEFAULT ''.

DATA: S TYPE I.

*****************************

**Inicializando Sumador 'S'**

*****************************

S = 0.

WHILE S Y-INDEX LE 8.

S = S + Numero ** ( S Y-INDEX - 1 ).

ENDWHILE.

WRITE: 'La suma de las potencias de', Numero, 'es:', S.

Page 52: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 52 de 230

Ejemplo 3.4 Determinar los números 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.

S KIP TO LINE I.

WRITE INICIO.

ENDIF.

IF RES2 = 0.

J = J + 1.

S KIP TO LINE J.

WRITE AT 40 INICIO.

ENDIF.

INICIO = INICIO + 1.

ENDWHILE.

SKIP TO LINE 3 .

WRITE 'DIVIS IBLES POR 7' COLOR COL_HEADING.

POS ITION 40.

WRITE 'DIVIS IBLES POR 3' COLOR COL_HEADING.

ULINE.

Page 53: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 53 de 230

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

WHILE ... ENDWHILE

LOOP ... ENDLOOP

SELECT ... ENDSELECT

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

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

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

¡ No muestra nada ¡

Page 54: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 54 de 230

Cadenas de caracteres

4.1 Concatenate

Se utiliza para concatenar varios campos alfanuméricos 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 operación.

Con la cláusula SEPARATED BY se puede especificar un campo

alfanumérico (el campo <s>) que será utilizado como separador entre

los campos <c1> ... <cn>.

Si el resultado de la concatenación 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', 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 alfanuméricos.

CONDENSE <campo> [ NO-GAPS ].

Borra cualquier secuencia de espacios en blanco, dejando sólo uno que

exista entre palabras existentes en <campo>. Los espacios en blanco

por la izquierda también desaparecen.

Page 55: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 55 de 230

4.3 Split

Divide un campo alfanumérico en varios campos, gracias a algún separador.

SPLIT <campo> AT <delimitador> INTO <c1> ... <cn>.

Esta sentencia utiliza el campo indicado en <delimitador> para separar los campos <c1> ... <cn> el

contenido del campo <campo>. Si no hay especificado los suficientes campos para poder separar todo el

contenido del campo <campo>, sobre el último se rellena el resto del campo <campo>. Si todos los

campos destino son lo suficientemente grandes como para almacenar las partes de <campo>, SY-SUBRC

vale 0. En caso contrario SY-SUBRC vale 4.

REPORT ZH_CADENAS2 . DATA: PAISES(50) VALUE 'Perú, Chile, Bolivia, Brasil',

CAD1(30), CAD2(30),

CAD3(30), SEPARADOR(2) VALUE ','. SPLIT PAISES AT SEPARADOR INTO CAD1 CAD2.

WRITE CAD1. WRITE / CAD2.

4.4 Shift

Se utiliza para desplazar el contenido de un campo alfanumérico.

Disponemos de distintas variantes en función del modo de desplazamiento.

S HIFT <campo> [ BY <n> PLACES ] [ { LEFT | RIGHT | CIRCULAR } ].

Desplaza el contenido del campo <campo> <n> posiciones.El significado de las cláusulas es el siguiente:

BY -> Si se omite, el desplazamiento es de una posición. Si <n> es cero o negativo no se realiza

ningún desplazamiento. Si <n> excede de la longitud del campo <campo>, el desplazamiento se

rellena con espacios en blanco. <n> puede ser una variable.

LEFT -> el desplazamiento se realiza hacia la izquierda, con relleno de espacios en blanco p or

la derecha.

Page 56: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 56 de 230

RIGHT -> El desplazamiento se realiza hacia la derecha, con relleno de espacios en blanco por

la izquierda.

CIRCULAR -> El desplazamiento se realiza hacía la izquierda. Los caracteres que desaparecen por la izquierda aparecen por la derecha.

S HIFT <campo> UP TO <string> [ { LEFT | RIGHT | CIRCULAR } ].

Realiza un desplazamiento del contenido de un campo hasta un string dado. El sistema busca el string

<string> en el campo <campo>. Si el string está contenido en el campo <campo> se realizará el

desplazamiento hasta alcanzar el string.

De no contener <campo> el string <string> no se realizará ningún desplazamiento. <string> puede ser una

variable. El modo de desplazamiento es el mis mo que en la variante anterior. Si el string se enc uentra en el campo <campo>, SY-SUBRC es 0, en caso contrario es 4.

SHIFT <campo> LEFT DELETING LEADING <string>.

SHIFT <campo> RIGHT DELETING LEADING <string>.

Realiza un desplazamiento hasta que el primer o último carácter cumpla cierto criterio. Esta sentencia

desplaza el contenido del campo <campo> hasta que el primer carácter de la izquierda (primera sentencia)

o el último carácter de la derecha (segunda sentencia) satisface cierta condición. El desplazamiento se rellena con espacios en blanco. <string> puede ser una variable.

REPORT ZFSDF. *CAMBIAR A T(8), QUESUCEDE? DATA: T(10) VALUE 'ABCDEFGH',

cadena LIKE T. cadena = T.

WRITE cadena. SHIFT cadena. WRITE / cadena.

cadena = T. SHIFT cadena BY 3 PLACES LEFT.

WRITE / cadena. cadena = T. SHIFT cadena BY 3 PLACES RIGHT.

WRITE / cadena. cadena = T.

SHIFT cadena BY 3 PLACES CIRCULAR. WRITE / cadena.

REPORT ZH_CADENAS2 .

DATA PALABRA(10) TYPE C. PALABRA = 'ABCDEFGH'.

WRITE PALABRA.

Page 57: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 57 de 230

SHIFT PALABRA.

WRITE / PALABRA.

SHIFT PALABRA. WRITE / PALABRA.

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

REPORT Z_DGCC47. DATA: t(10) VALUE 'abcdefghij',

STRING LIKE T.

STRING = T. WRITE STRING.

SHIFT STRING. WRITE / STRING.

STRING = T. SHIFT STRING BY 3 PLACES LEFT.

WRITE / STRING.

STRING = T. SHIFT STRING BY 3 PLACES RIGHT. WRITE / STRING.

STRING = T.

SHIFT STRING BY 6 PLACES CIRCULAR. WRITE / STRING.

abcdefghij bcdefghij defghij

abcdefg ghijabcdef

Page 58: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 58 de 230

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 cláusula LENGTH sólo se sustituirá los caracteres indicados en

<longitud>. Si no se especifica la cláusula LENGTH la sustituición 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.

STRING = T.

REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.

WRITE / STRING.

STRING = T.

REPLACE STR1 WITH STR3 INTO STRING.

WRITE / STRING.

STRING = T.

REPLACE STR1 WITH STR4 INTO STRING.

WRITE / STRING.

abcdefghij abklmnghij

abklmnefgh abklghij

abklmnopgh

Page 59: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 59 de 230

4.6 Translate

Se utiliza para convertir caracteres de mayúscula a minúscula o viceversa, o para realizar sustituciones de

caracteres a través de ciertas reglas.

TRANSLATE <campo> TO { UPPER | LOWE } CAS E.

Con la opción UPPER, las let ras minúsculas de <campo> se convierten en mayúsculas. Y con la opción

LOW ER las letras mayúsculas se convierten en minúsculas.

Para utilizar reglas de conversión se utiliza la siguiente sintaxis.

TRANSLATE <campo> US ING <regla>.

Esta sentencia reemplaza todos los caracteres de <campo> que cumplan la reg la de sustitución <regla>.

La regla de sustitución contiene pares de letras, la primera de ellas indica el carácter a sustituir, la

segunda indica el carácter de sustitución. <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 alfanumérico con otro campo.

OVERLAY <campo1> WITH <campo2> [ ONLY <string> ].

Esta sentencia sobrescribe todas las posiciones del campo <campo1> que

contengan las letras de <string> con el contenido del campo <campo2>.

<campo2> permanece sin cambios.

Si omitimos la cláusula ONLY, sólo las posiciones con espacios en

blanco serán sobrescritas. Si al menos una posición del campo <campo1>

es sustituida, SY-SUBRC será 0. En caso contrario será 4. Si <campo1>

es superior a la longitud que <campo2>, sólo los caracteres

Page 60: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 60 de 230

correspondientes a la longitud de <campo2> podrán ser actualizados en

<campo1>.

REPORT ZH_CADENAS2 .

DATA: CAD1(30) VALUE 'LI A S C TAL E RU', CAD2(30) VALUE 'X M E API D PEHG'.

WRITE: 'CAD1: ', CAD1. WRITE: / 'CAD2: ', CAD2.

OVERLAY CAD1 WITH CAD2. WRITE: / ' *** OVERLAY CAD1 WITH CAD2 ***'.

WRITE: / 'CAD1: ', CAD1. WRITE: / 'CAD2: ', CAD2.

REPORT Z_DGCC48 .

DATA: T(10) 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.

A C E G I

A2C4E6G8I0 1 C E G 9

Page 61: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 61 de 230

4.8 Search Se utiliza para buscar una cadena de caracteres en un campo alfanúmerico.

S EARCH string FROM string _buscar [OPCIONES ].

Esta sentencia busca en el campo <string> la secuenca de caracteres <string_buscar>.

Si se encuentra, la variable del sistema SY-SUBRC vale 0 y SY-FDPOS toma el valo r del offset del string

encontrado. En caso contrario, SY-SUBRC vale 4. El string <str> puede contener caracteres con cierto

significado particular.

REPORT ZH_CADENAS2 . DATA: TEMPORAL(30) VALUE 'World Business Partner.',

STRING LIKE TEMPORAL. STRING = TEMPORAL.

write '123456789012345678'. write / STRING.

SKIP. SEARCH STRING FOR 'f'. WRITE: / 'f', SY-SUBRC, SY-FDPOS.

STRING = TEMPORAL. SEARCH STRING FOR 'ness'. WRITE: / 'ness ', SY-SUBRC, SY-FDPOS.

REPORT EJEMPLO. DATA STRING(30) VALUE 'David Carballido Cordova.'. WRITE: / 'Searched', 'SY-SUBRC', 'SY-FDPOS'.

ULINE /1(26). SEARCH STRING FOR 'x'. WRITE: / 'x', SY-SUBRC UNDER 'SY-SUBRC',SY-FDPOS UNDER 'SY-FDPOS'.

SEARCH STRING FOR 'lli'. WRITE: / 'lli', SY-SUBRC UNDER 'SY-SUBRC',SY-FDPOS UNDER 'SY-FDPOS'.

Page 62: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 62 de 230

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.

Page 63: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 63 de 230

4.9 Comparación de cadenas de caracteres

<f1> CO <f2> (Contains Only)

f1 sólo 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 carácter que

no cumple la condición.

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

negación de la anterior.

<f1> CA <f2> (Contains Any)

f1 contiene como mínimo algún carácter de f2. Si

es cierta SY-FDPOS contiene el o ffset del primer

carácter de f1 que está en f2, y si es falsa contiene

la longitud de f1.

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

negación de la anterior.

<f1> CS <f2> (Contains String)

f1 contiene la cadena f2. Si la condición SY-

FDPOS es cierta contiene el offset donde empieza

f2 en f1, y si es falsa contiene la longitud de f1.

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

negación de la anterior.

f1 corresponde al patrón f2. En el patrón podemos

utilizar :

+ como cualquier carácter, * como cualquier

cadena de caracteres, # para utilizar los caracteres

+,*,# en la

Page 64: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 64 de 230

<f1> CP <f2> (Contains Pattern) comparación. Si la condición es cierta S Y-FDPOS

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

la longitudde f1.

<f1> NP <f2> (Contains No Pattern) : negación de la anterior.

report ztx1003. * operator: co write / '''AABB'' co ''AB'''.

if 'AABB' co 'AB'. write 'True'. else. write 'False'. endif.

write / '''ABCD'' co ''ABC'''. if 'ABCD' co 'ABC'.

write 'True'. else. write 'False'. endif.

* operator: cn write / '''AABB'' cn ''AB'''.

if 'AABB' cn 'AB'. write 'True'. else.

write 'False'. endif.

write / '''ABCD'' cn ''ABC'''. if 'ABCD' cn 'ABC'. write 'True'. else. write 'False'. endif. * operator: ca

write / '''AXCZ'' ca ''AB'''. if 'AXCZ' ca 'AB'. write 'True'. else. write 'False'. endif. write / '''ABCD'' ca ''XYZ'''.

if 'ABCD' ca 'XYZ'. write 'True'. else. write 'False'. endif. * operator: na

write / '''AXCZ'' na ''ABC'''. if 'AXCZ' na 'ABC'. write 'True'. else. write 'False'. endif. write / '''ABCD'' na ''XYZ'''.

if 'ABCD' na 'XYZ'. write 'True'. else. write 'False'. endif.

Page 65: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 65 de 230

report ztx1004.

* operator: co write / '''AABB'' co ''AB'''. if 'AABB' co 'AB'. write 'True'. else. write 'False'. endif.

write: 'sy-fdpos=', sy-fdpos. write / '''ABCD'' co ''ABC'''.

if 'ABCD' co 'ABC'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos. * operator: cn

write / '''AABB'' cn ''AB'''. if 'AABB' cn 'AB'. write 'True'. else. write 'False'. endif.

write: 'sy-fdpos=', sy-fdpos. write / '''ABCD'' cn ''ABC'''. if 'ABCD' cn 'ABC'. write 'True'. else. write 'False'. endif.

* operator: ca

write / '''AXCZ'' ca ''AB'''. if 'AXCZ' ca 'AB'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos.

write / '''ABCD'' ca ''XYZ'''. if 'ABCD' ca 'XYZ'. write 'True'. else. write 'False'. endif.

write: 'sy-fdpos=', sy-fdpos. * operator: na write / '''AXCZ'' na ''ABC'''.

if 'AXCZ' na 'ABC'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos.

write / '''ABCD'' na ''XYZ'''. if 'ABCD' na 'XYZ'. write 'True'. else. write 'False'. endif. write: 'sy-fdpos=', sy-fdpos.

Page 66: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 66 de 230

report ztx1001.

data: begin of s1,

x value 'X',

y value 'Y',

z value 'Z',

end of s1,

begin of s2,

x value 'X',

z value 'Z',

end of s2.

if s1-x = s2-x.

write: / s1-x, '=', s2-x.

else.

write: / s1-x, '<>', s2-x.

endif.

if s1-x between s2-x and s2-z.

write: / s1-X, 'ESTA ENTRE', s2-x, 'and', s2-z.

else.

write: / s1-X, 'NO ESTA ENTRE', s2-x, 'and', s2-z.

endif.

if s1 = s2. "COMPARANDO CAMPOS CADENA BYTE POR BYTE

write: / 's1 = s2'.

else.

write: / 's1 <> s2'.

endif.

if 0 = ' '.

write: / '0 = '' '''.

else.

write: / '0 <> '' '''.

endif.

Page 67: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 67 de 230

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.

report ztx1006.

write: / 'HOLA'.

exit.

write: / 'AQUI'.

Page 68: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 68 de 230

Ejemplo 4.1 Diseñar 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 S E QUIERE UN ES PACIO ENTRE LAS CADENAS, S E PUEDE AGREGAR

* DE LA SIGUIENTE MANERA:

* CONCATENATE CAD1 CAD2 INTO LINEA S EPARATED BY SPACE.

0

Page 69: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 69 de 230

Ejemplo 4.2 Diseñar un programa que permita leer dos cadenas de diferente longitud, luego las

dos cadenas mostrarlo en forma concatenada, convertirlo a mayúsculas, mostrar en forma

invertida y finalmente mostrarlo en su estado de origen (al estado en que se realizó la conversión a

mayúsculas).

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

DATA len TYPE i.

len = S TRLEN( linea ).

WRITE: / 'La longitud de la cadena es: ', len.

SKIP.

WRITE: / 'La concatenación en Mayúsculas es: ', linea.

DATA: cont TYPE i VALUE 0,

linea1 TYPE string.

DO len TIMES.

CONCATENATE linea+cont(1) linea1 INTO linea1.

cont = cont + 1.

ENDDO.

SKIP.

WRITE: / 'La cadena invertida en mayúsculas 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 / 'Us o de la sentencia DO para mostrar la cadena'.

WRITE: / 'en su estado original: ', linea2.

Page 70: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 70 de 230

Ejemplo 4.3 Diseñar un programa que permita leer una cadena cad1 de longitud máxima 50 y

crear una cad2[50], luego:

Copiar información de cad1 en cad2 .

Imprimir a partir del tercer carácter 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 CAS E.

WRITE: / 'La cadena ingresada fue: ', cad1 .

SKIP.

MOVE cad1 TO cad2.

TRANSLATE cad2 TO LOWER CAS E.

WRITE: / 'La cadena 2 es: ', cad2.

SKIP.

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

SKIP.

WRITE: / ' Impresión a partir tercer caracter de cad2: ', cad2+3.

Page 71: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 71 de 230

Variables del sistema

ABAP/4 tiene algunas variables internas que se van actualizando automáticamente y que pueden ser

utilizados en los programas.

Todas ellas empiezan por el prefijo S Y- y ya hemos utilizado alguna de ellas como

SY-SUBRC que nos da el código de retorno de una instrucción o SY-TABIX que contiene la línea de

proceso de una tabla interna.

Nombre de Variable Descripción

SY-INDEX Cantidad de repeticiones de bucles

SY-PAGNO RUNTIME: Pág ina actual en creación de lista

SY-TABIX RUNTIME: Línea actual de una tabla interna

SY-TFILL Cantidad actual de entradas en la tabla interna

SY-TLOPC Utilización interna

SY-TMAXL Cantidad máxima de entradas en la tabla interna

SY-TOCCU Parámetro occurs en tablas internas

SY-TTABC Número de la últ ima línea de tabla interna leída

SY-TSTIS Utilización interna

SY-TTABI Offset de tablas internas en el área de ro ll

SY-DBCNT Cantidad elementos en conjunto tratado para operaciones BD

SY-FDPOS Lugar de hallazgo de un string

SY-COLNO Columna actual en la creación de la lista

SY-LINCT Cantidad de líneas de lista

SY-LINNO Línea actual en la creación de una lista

SY-LINSZ Longitud de línea de la lista

SY-PAGCT Límite de página de lista en instrucción REPORT

SY-MACOL Cantidad de columnas de instrucción SET MARGIN

SY-MAROW Cantidad de líneas de instrucción SET MARGIN

SY-TLENG Tamaño de la línea de una tabla interna

Page 72: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 72 de 230

SY-SFOFF Utilización interna

SY-W ILLI Número de la línea de ventana actual

SY-LILLI Número de la línea de lista actual

SY-SUBRC Valor de retorno tras determinadas sentencias ABAP/4

SY-FLENG Utilización interna (longitud de campo)

SY-CUCOL Posición del cursor (columna)

SY-CUROW Posición del cursor (línea)

SY-LSIND Número de la lista de bifurcación

SY-LISTI Número de la línea de lista actual

SY-STEPL Número de la línea LOOP en step dynpro

SY-TPAGI Indicador para almacenar tabla interna en bloque paging

SY-W INX1 Coordenada de ventana (columna izquierda)

SY-W INY1 Coordenada ventana (línea izquierda)

SY-W INX2 Coordenada ventana (columna derecha)

SY-W INY2 Coordenada de ventana (línea derecha)

SY-W INCO Posición de cursor en la ventana (columna)

Nombre de Variable

Descripción

SY-W INRO Posición de cursor en la ventana (línea)

SY-W INDI Indice de la línea de ventana actual

SY-SROWS Líneas en la pantalla

SY-SCOLS Columnas en la pantalla

SY-LOOPC Cantidad de líneas LOOP en steploop de dynpro

SY-FOLEN Utilización interna (longitud de salida de campo)

SY-FODEC Utilización interna (campo posiciones decimales)

SY-TZONE Diferencia de tiempo con 'Hora media de Greenwich' (UTC)

SY-DAYST ¿ Horario de verano activo ?

Page 73: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 73 de 230

SY-FTYPE Utilización interna (t ipo de campo)

SY-APPLI Aplicaciones SAP

SY-FDAYW Día de semana en el calendario de fábrica

SY-CCURS Tipo cambio/Campo resultado CURRENCY CONVERT

SY-CCURT Tipo de cambio en tabla de aplicación CURRENCY CONVERSION

SY-DEBUG Utilización interna

SY-CTYPE Tipo de cambio 'M','B','G' de CURRENCY CONVERSION

SY-INPUT Utilización 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 Número de la imagen en pantalla actual

SY-DYNGR Grupo de dynpros del dynpro actual

SY-NEWPA Utilización interna

SY-PRI40 Utilización interna

7SY-RSTRT Utilización interna

SY-WTITL Indicador para cabecera estándar de página

SY-CPAGE Número de página actual

SY-DBNAM Base de datos lógica en report ABAP/4

SY-MANDT Número de mandante para acceder al Sistema SAP

SY-PREFX Prefijo ABAP/4 para jobs batch

SY-FMKEY Menú de códigos de funciones actual

SY-PEXPI IMPRIMIR: Tiempo de permanencia en SPOOL

SY-PRINI Utilización interna

SY-PRIMM IMPRESION: Salida inmediata

Page 74: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 74 de 230

Nombre de Variable

Descripción

SY-PRREL IMPRESION: Borrar tras salida

SY-PLAYO Utilización interna

SY-PRBIG IMPRIMIR: Portada de selección

SY-PLAYP Utilización interna

SY-PRNEW IMPRESION: Nueva orden SPOOL (lista)

SY-PRLOG Utilización interna

SY-PDEST IMPRIMIR: Dispositivo de salida

SY-PLIST IMPRESION: Nombre de la orden SPOOL (nombre de lista)

SY-PAUTH Utilización interna

SY-PRDSN IMPRIMIR: Nombre del set de datos SPOOL

SY-PNWPA Utilización interna

SY-CALLR IMPRIMIR: ID para funciones de diálogo

SY-REPI2 Utilización interna

SY-RTITL IMPRIMIR: Título de report del programa de impresión

SY-PRREC IMPRIMIR: Destinatario

SY-PRTXT IMPRIMIR: Texto para portada

SY-PRABT IMPRIMIR: Departamento en la portada

SY-LPASS Utilización interna

SY-NRPAG Utilización interna

SY-PAART IMPRESION: Edición

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 raíz 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 d iálogo

SY-MACDB PROGRAM: Nombre del fichero para el acceso con matchcode

SY-SYSID SYSTEM: Identificador del Sistema SAP

SY-OPSYS SYSTEM: Sistema operative

Page 75: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 75 de 230

Nombre de Variable

Descripción

SY-TCODE SESSION: Código de transacción actual

SY-UCOMM INTERACT.: Indicar función en el código OK

SY-CFWAE Utilización interna

SY-CHWAE Utilización interna

SY-SPONO RUNTIME: Número SPOOL para salida de una lista

SY-SPONR RUNTIME: Número SPOOL de instrucción 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 d ía

SY-SLSET Nombre de SELECTON-SETS

SY-SUBTY ABAP: Forma de llamada en SUBMIT

SY-SUBCS INTERNO: Status call del report

SY-GROUP INTERNO: Concatenación

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 Utilización interna

SY-TFDSN RUNTIME: Nombre del set de datos para extractos de datos

SY-UNAME SESSION: Nombre de usuario según entrada a SAP

SY-LSTAT INTERACT.: Información de status por nivel de lista

SY-ABCDE CONSTANT: A lfabeto (A,B,C,...)

SY-MARKY Letra de línea actual para MARK

SY-SFNAM Sin utilizar

SY-TNAME Nombre de la tabla interna después de un acceso

Page 76: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 76 de 230

SY-MSGLI INTERACT.: Línea de mensaje (línea 23)

SYTITLE PROGRAM: Título del programa ABAP/4

SY-ENTRY Utilización interna

SY-LISEL INTERACT.: Línea seleccionada

SY-ULINE CONSTANT: Línea de subrayado (____________...)

SY-XCODE Código OK ampliado

SY-CPROG RUNTIME: Programa principal

SY-XPROG Utilización interna (p rograma SYSTEM -EXIT)

SY-XFORM Utilización 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

Descripción

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 Número del mensaje

SY-MSGV1 Variable en mensaje

SY-MSGV2 Variable en mensaje

Page 77: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 77 de 230

SY-MSGV3 Variable en mensaje

SY-MSGV4 Variable en mensaje

SY-ONCOM INTERNO: On Commit Flag

SY-VLINE CONSTANT: raya vertical

SY-W INSL INTERACT.: Línea en ventana seleccionada

SY-STACO INTERACT.: Lista visualizada a partir de la columna

SY-STARO INTERACT.: Lista visualizada a partir de línea

SY-DATAR Indicador: Datos recibidos

SY-HOST Nombre de la máquina

SY-LOCDB Existe base de datos local

SY-LOCOP Operación local en base de datos

SY-DATLO Fecha local, en relación con el usuario

SY-TIMLO Hora local, en relación con el usuario

SY-TSTLO Cronomarcador (fecha y hora), en relación con el usuario

SY-ZONLO Huso horario del usuario

SY-DATUT Fecha global, en relación con UTC

SY-TIMUT Hora global, en relación con UTC

SY-TSTUT Cronomarcador (fecha y hora), en relación con UTC

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 agrupación con las cláusulas BEGIN

OF y END OF.

Existe una variante para declarar tablas internas

DATA <tabla> <tipo> [ WITH HEADER LINE ].

Page 78: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 78 de 230

En la opción <t ipo> se puede referenciar un tipo de dato de tabla interna con la cláusula TYPE o una tabla

interna con la cláusula LIKE. El objeto de dato <tabla> será creado con la misma estructura que la

referenciada en <tipo>.

Si utilizamos la cláusula WITH HEADER LINE la tabla interna se crea con el área de trabajo <tabla>. El

área de trabajo y la tabla interna tienen el mis mo nombre. En función 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 cláusula OCCURS. en la opción <tipo>

se especifica una estructura. Las líneas de la tabla interna tendrán la estructura referenciada en <tipo>.

<n> tiene el mis mo significado que para los tipos de datos de tablas internas, visto en la sentencia types.

Si utilizamos la cláusula 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 línea de la tabla interna se definen entre las cláusula 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 ES TRUCTURA,

COLUMNA1 TYPE I,

COLUMNA2 TYPE I,

COLUMNA3 TYPE I,

END OF LINE.

DATA: TABLITA TABLE OF ES TRUCTURA 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.

Page 79: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 79 de 230

5.2 Recorrido de una tabla interna

Podemos recorrer una tabla interna con la instrucción LOOP .. ENDLOOP

LOOP AT <indicetabla> ( WHERE <cond>).

ENDLOOP.

En cada iteración coloca la línea de la tabla que se está procesando en la línea de cabecera.

Podemos restringir el p roceso de una tabla con una condición WHERE.

Si no existe ningún registro de la tabla que cumpla la condición especificada en la cláusula WHERE, la

variable del sistema S Y-S UBRC será d istinta que 0.

Dentro del LOOP, la variable S Y-TABIX contiene el índ ice de la entrada que está procesando en ese

momento.

También es posible hacer un:

LOOP AT<intab> FROM <inicio> TO <fin>.

ENDLOOP.

Donde <in icio> y <fin> son índices de la tabla interna.

Ejemplo X.2 Tablas internas con INTO TABLE.

REPORT ZTABLAS01_ANIBAL.

TABLES S FLIGHT.

TYPES: BEGIN OF ES T_TABLA,

CARRID LIKE S FLIGHT-CARRID,

CONNID LIKE S FLIGHT-CONNID,

FLDATE LIKE S FLIGHT-FLDATE,

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.

Page 80: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 80 de 230

END OF ES T_TABLA.

*DATA TABLITA TYPE STANDARD TABLE OF ES T_TABLA WITH HEADER LINE.

DATA TABLITA TYPE TABLE OF ES T_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 ….ENDSELECT.

REPORT ZTABLAS02_ANIBAL . TABLES SFLIGHT.

TYPES: BEGIN OF EST_TABLA, CARRID LIKE SFLIGHT-CARRID, CONNID LIKE SFLIGHT-CONNID,

FLDATE LIKE SFLIGHT-FLDATE, END OF EST_TABLA. DATA TABLITA TYPE TABLE OF EST_TABLA WITH HEADER LINE.

SELECT CARRID CONNID FLDATE FROM SFLIGHT INTO TABLITA. WRITE: / TABLITA-CARRID, TABLITA-CONNID,

TABLITA-FLDATE. ENDSELECT.

NUMERO DE REGISTROS DE UNA TABLA INTERNA

DESCRIBE TABLE <Ttabla interna> LINES n. El valor de n (t ipo entero) nos devuelve el número de lineas llenas de la tabla. El t iempo de ejecución de

DESCRIBE TABLE es aproximadamente de 4 microsegundos.

REPORT ZTABLAS09_ANIBAL . DATA v_count TYPE i. TYPES: BEGIN OF ESTRUCTURA1 ,

Page 81: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 81 de 230

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: 'Número de registros: ', v_count.

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

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: / 'Número de registros, antes del loop: ', sy-tfill.

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

WRITE: / 'Número de registros, despues del loop: ', sy-tfill.

Page 82: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 82 de 230

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 cláusula

RIGHT será la parte derecha del campo <campo1> la que será movida al campo <campo2>.

MOVE <campo1> TO <campo2>

<tabla1> y <tabla2> son las áreas de trabajo de las tablas internas. Si una tabla interna tiene área de

trabajo, área y tabla tienen el mis mo 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 [] “S E 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'.

Page 83: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 83 de 230

TABLA1-SEGUNDO_CAMPO = 'SEGUNDO

DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'.

APPEND TABLA1. MOVE TABLA1[] TO TABLA2[].

LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO,

TABLA1-SEGUNDO_CAMPO. ENDLOOP.

ULINE. LOOP AT TABLA2.

WRITE: / TABLA2-PRIMER_CAMPO, TABLA2-SEGUNDO_CAMPO. ENDLOOP.

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

REPORT ZTABLAS09_ANIBAL . TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C, SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A 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'.

Page 84: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 84 de 230

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

Si. Pero se recorta el tercer campo.

Cuando en el destino hay un campo demás.

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

Page 85: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 85 de 230

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

El campo destino queda vacio. Siempre y cuando los otros campos tengan el mismo

ancho en las dos tablas.

Cuando existe un campo demas en la tabla destino, y los anchos no son los 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'.

Page 86: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 86 de 230

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

El campo vacio se llena con los valores sobrantes del campo anterior (siempre que

el ancho sea mas angosto que su equivalente en la tabla origen).

Equivalentes

MOVE <var1> TO <var2>. <var2> = <var1>.

<f4>=<f3>=<f2>=<f1>

MOVE <F1> TO <f2>.

MOVE <F2> TO <f3>.

MOVE <F3> TO <f4>.

También 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

Page 87: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 87 de 230

MOVE VAR1+10(4) TO VAR2+5(4).

VAR2

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, además realiza todos los tipo de conversión

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.

Page 88: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 88 de 230

5.3.2 Clear

Con la sentencia CLEAR se puede inicializar, o la línea 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 cláusula 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.

CLEAR <tabla> | <tabla> [].

Con la <tabla> inicializamos la línea de cabecera de la tabla. Con <tabla> [ ] vaciamos el contenido de la

tabla interna.

5.3.3 Refresh

Se utiliza para in icializar una tabla, con o sin línea de cabecera.

REFRES H <tabla>.

Después de procesar el sistema esta sentencia, la tabla interna no contiene ninguna línea.

5.3.4 Free

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

Page 89: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 89 de 230

Se utiliza para liberar el espacio de memoria que se reserva después de utilizar las sentencias REFRESH o

CLEAR.

FREE <tabla>.

Ejemplo X.2 Uso de WRITE.

REPORT EJEMPLO.

DATA: BEGIN OF EL_REGIS TRO,

COLUMNA1,

COLUMNA2,

END OF EL_REGIS TRO.

DATA INDICE_TABLA LIKE TABLE OF EL_REGIS TRO.

EL_REGIS TRO-COLUMNA1 = 'A'.

EL_REGIS TRO-COLUMNA2 = 'B'.

APPEND EL_REGIS TRO TO INDICE_TABLA.

REFRES H INDICE_TABLA.

IF INDICE_TABLA IS INITIAL.

WRITE 'TABLA ES TA VACIA'.

FREE INDICE_TABLA.

ENDIF.

5.4 Comparación entre tablas internas

Se puede utilizar los siguientes operandos entre tablas internas.

EQ, =, NE, <>, ><, GE, >=, LE, <=, GT, >, LT, <.

Considerando que en las tablas internas con cabecera de linea, el cuerpo y la linea de cabecera tienen el

mis mo nombre. En estos casos si se desea direccionar el cuerpo de la tabla en una comparación debe

utilizarse ([]) después del nombre de la tabla.

En las comparaciones primero hay que considerar el numero de líneas que estas contienen. Si dos tablas

tienen el mis mo numero de líneas entonces las comparaciones se realizan línea por línea, componente por

componente

Ejemplo X.2 Uso de WRITE.

REPORT ZZZ.

DATA: BEGIN OF REGIS TRO,

COLUMNA1 TYPE I,

COLUMNA2 TYPE I,

END OF REGIS TRO.

DATA: ITAB LIKE TABLE OF REGIS TRO,

JTAB LIKE TABLE OF REGIS TRO.

DO 3 TIMES .

REGISTRO-COLUMNA1 = S Y-INDEX.

Page 90: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 90 de 230

REGISTRO-COLUMNA2 = S Y-INDEX ** 2.

APPEND REGIS TRO TO ITAB.

ENDDO.

MOVE ITAB TO JTAB.

REGISTRO-COLUMNA1 = 10.

REGISTRO-COLUMNA2 = 20.

APPEND REGIS TRO TO ITAB.

IF ITAB GT JTAB.

WRITE / ' ITAB ES MAYOR QUE JTAB'.

ENDIF.

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 = S Y-INDEX.

TABLA-COLUMNA2 = S Y-INDEX * S Y-INDEX.

APPEND TABLA.

ENDDO.

Page 91: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 91 de 230

LOOP AT TABLA.

WRITE: / SY-TABIX, TABLA-COLUMNA2.

ENDLOOP.

ULINE.

LOOP AT TABLA WHERE COLUMNA2 BETW EEN 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 reg istro.

ULINE.

READ TABLE TABLA INDEX 7.

WRITE: / SY-SUBRC, SY-TABIX, TABLA-COLUMNA2.

READ TABLE TABLA INDEX 31. "con indice 31 no existe.

WRITE: / SY-SUBRC.

Page 92: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 92 de 230

Page 93: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 93 de 230

5.5 Ordenamiento

Para ordenar una tabla interna utilizamos SORT.

SORT <intab>.

Esta instrucción realiza una ordenación 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 ordenación por defecto es ascendente.

Con la cláusula BY los campos se ordenarán de acuerdo con los componentes especificados <campo1> ...

<campon>.

Para ordenar descendentemente se escribe DESCENDING.

5.6 Llenado de una tabla interna

APPEND Añade un registro a una tabla interna con los valores que tengamos en el área de trabajo. Añade 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 1 2 4 3 9

Page 94: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 94 de 230

COLLECT Añade o suma la línea de cabecera de una tabla interna comparando los campos de tipo carácter. Sumará

todos los campos de tipo P, F, I.

El collect funciona no con un campo "clave", pero debes tener la p recaucion de:

Poner todos los campos "clave" los primeros de la tabla interna, p ej: el nº de factura, la fecha,

etc y los ultimos campos de la tabla interna sería los campos a sumarizar.

Hacer un sort de la tabla interna antes de recorrerla y hacer el collect. debes ordenar los registros

de la tabla interna con el mis mo patron que quieras que luego te sumarize los campos. p ej:

sort itab by nº_factura fecha ....

El problema de esta instrucción 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>.

Se debe usar solo la declaración COLLECT si se desea crear tablas sumarizadas. Si se usa otras

declaraciones para insertar entradas a la tabla, se podría 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 12 10

def 34 5

Page 95: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 95 de 230

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.

Tiger 80. Duck 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.

Page 96: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 96 de 230

REPORT ZASD. TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR,

FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE.

SELECT COUNTRYFR FLTIME Into TABLITA From SPFLI. **** Append TABLITA.

COLLECT TABLITA. ENDSELECT. LOOP AT TABLITA.

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

REPORT ZASD.

TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI,

COUNTRYFR LIKE SPFLI-COUNTRYFR, CITYFROM LIKE SPFLI-CITYFROM, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI.

DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE.

SELECT COUNTRYFR CITYFROM FLTIME Into TABLITA From SPFLI. * Append TABLITA.

COLLECT TABLITA. ENDSELECT.

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

51 TABLITA-FLTIME. ENDLOOP.

AHORA CON OTRO

CAMPO MAS:

COUNTRYFR

CITYFROM

Page 97: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 97 de 230

REPORT ZASD.

TABLES: SPFLI. TYPES: BEGIN OF Z_SPFLI,

COUNTRYFR LIKE SPFLI-COUNTRYFR, CITYFROM LIKE SPFLI-CITYFROM, FLTIME LIKE SPFLI-FLTIME,

AIRPFROM LIKE SPFLI-AIRPFROM, END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE.

SELECT COUNTRYFR CITYFROM FLTIME AIRPFROM Into TABLITA From SPFLI. * Append TABLITA.

COLLECT TABLITA. ENDSELECT.

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

51 TABLITA-FLTIME, 71 TABLITA-AIRPFROM. ENDLOOP.

REPORT ZASD. TABLES: SPFLI.

TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR, FLTIME LIKE SPFLI-FLTIME,

END OF Z_SPFLI. DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE.

SELECT COUNTRYFR FLTIME Into TABLITA From SPFLI. **** Append TABLITA. COLLECT TABLITA. ENDSELECT.

LOOP AT TABLITA.

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

Page 98: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 98 de 230

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.

Page 99: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 99 de 230

REPORT ZASD.

TABLES: SPFLI.

TYPES: BEGIN OF Z_SPFLI, COUNTRYFR LIKE SPFLI-COUNTRYFR,

CITYFROM LIKE SPFLI-CITYFROM, FLTIME LIKE SPFLI-FLTIME, END OF Z_SPFLI.

DATA: TABLITA TYPE TABLE OF Z_SPFLI WITH HEADER LINE.

SELECT COUNTRYFR CITYFROM FLTIME Into TABLITA From SPFLI.

* APPEND TABLITA. COLLECT TABLITA.

ENDSELECT.

LOOP AT TABLITA. WRITE : /21 TABLITA-COUNTRYFR,

35 TABLITA-CITYFROM, 51 TABLITA-FLTIME. ENDLOOP.

AHORA CON OTRO CAMPO MAS:

COUNTRYFR CITYFROM

FLTIME

Page 100: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 100 de 230

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.

Page 101: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 101 de 230

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?

Page 102: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 102 de 230

NO FUNCIONA: PORQUE?

REPORT ZEJTABLASINTERNAS. DATA: BEGIN OF TABLA, //SIMILAR AL PROBLEMA ANTERIOR, COLUMNA1 TYPE C, //SOLO LE QUITAMOS OCCURS 10 COLUMNA2 TYPE I, //DESPUES DE BEGIN OF TABLA. END OF TABLA. DO 3 TIMES. TABLA-COLUMNA1 = SY-INDEX. TABLA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLA. ENDDO. LOOP AT TABLA. WRITE: / TABLA-COLUMNA1, TABLA-COLUMNA2. ENDLOOP.

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. Además APPEND sufre una modificación, 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.

Page 103: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 103 de 230

5.7 Lectura de una tabla interna

Podemos buscar un registro concreto en una tabla sin necesidad de recorrerla.

READ TABLE <intab>.

Para ello, en primer lugar rellenaremos la línea de cabecera con la clave de búsqueda y luego haremos el

READ.

El resultado de la búsqueda lo tendremos en SY-S UBRC.

Si: SY-SUBRC = 0 , la búsqueda ha sido positiva. Si: SY-SUBRC <> 0 , no ha encontrado el registro solicitado.

Existen otras extensiones a la instrucción READ que necesitarán que la tabla esté ordenada.

Podemos buscar por clave con:

READ TABLE <intab> WHIT KEY <clave>.

No necesita llenar la línea de cabecera. Buscará desde el inicio de la tabla qué carácter a carácter coincida

con la clave.

Es posible una búsqueda aún más rápida con una búsqueda binaria.

READ TABLE <intab> WITH KEY <clave> BINARY S EARCH.

Una lectura d irecta de un registro de la tabla la podemos realizar con:

READ TABLE <intab> INDEX <num>.

5.8 Inserción de registros

Se utiliza INSERT para insertar líneas en una tabla interna antes de una posición determinada.

INS ERT <tabla> [ INDEX <índice> ].

INDEX , inserta una línea antes de la posición indicada en <índice> y la nueva tiene el índice <índice>.

Si se produce algún error al insertar la línea la variable SY-SUBRC valdrá 4, en caso contrario valdrá 0.

Si la sentencia se utiliza sin la cláusula INDEX sólo se podrá utilizar en un LOOP .. ENDLOOP. El

sistema insertara la línea antes de la línea tratada en el bucle.

INS ERT LINES OF <tabla1> [ FROM <n1> ] [ TO <n2> ] INTO <tabla2> [ INDEX <índice> ]

Si no se especifican las cláusulas FROM <n1> y TO <n2> la tabla <tabla1> se inserta entera sobre la

tabla <tabla2>. Especificando estas cláusulas se puede indicar la primera y la última línea que se va

insertar. <n1> y <n2> son índice de la tabla interna.

Si especificamos la cláusula INDEX <índice>, la línea se insertará antes de la línea con el índice

<índice>. Si la sentencia INSERT se utiliza sin la cláusula INDEX sólo se podrá ser utilizada en un bucle

LOOP .. ENDLOOP.

Page 104: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 104 de 230

El sistema inserta la línea tratada en el bucle. Después de ejecutarse la sen tencia la variable del sistema

SY-TABIX tiene el índice de la última línea añadida. Dependiendo del tamaño de la tabla interna que hay

que copiar, con este método el proceso en 20 veces más ráp ido que insertarlas línea a línea.

La sentencia INSERT puede ser utilizada para insertar una o varias líneas (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 especificación de tabla, siempre y cuando la vista haga

referencia a una sola tabla.

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

ENDLOOP.

0

B 5 A 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.

Page 105: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 105 de 230

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

Page 106: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 106 de 230

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

Page 107: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 107 de 230

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.

Page 108: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 108 de 230

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

5.9 Modificación de registros

Para sustituir líneas de una tabla interna utilizamos la sentencia MODIFY

MODIFY <tabla> [ FROM <área-trabajo> ] [ INDEX <índice> ].

El área de trabajo <área -trabajo> sustituye a la línea de la tabla interna.

En el caso de tablas internas con líneas de cabecera, la cláusula FROM es opcional.

Si utilizamos la cláusula INDEX, la línea que hay que reemplazar será la existente con el índice <índice>.

Si el sistema puede realizar la modificación, la variab le del sistema SY-SUBRC es 0. Si la tabla interna

tiene menos líneas que las indicadas en <índice>, la modificación no se realiza y SY-SUBRC vale 4.

Si no utilizamos la cláusula INDEX, la sentencia solo puede ser procesada en un bucle LOOP ..

ENDLOOP. En este caso la línea que se modificara será la que se este tratando.

REPORT EJEMPLO.

DATA: BEGIN OF LINE, COL1 TYPE I, COL2 TYPE I,

END OF LINE. DATA ITAB LIKE TABLE OF LINE.

Page 109: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 109 de 230

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

2 20 400 3 3 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

Page 110: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 110 de 230

MNA2 = 10 ** 2. MODIFY TABLA FROM LINEA INDEX 2.

LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP.

REPORT ZPROCESO_42 .

DATA: BEGIN OF LINEA, COLUMNA1 TYPE I, COLUMNA2 TYPE I,

END OF LINEA,

*TABLA LIKE LINEA OCCURS 10. TABLA LIKE LINEA OCCURS 10 WITH HEADER LINE.

DATA: LIN TYPE I, OCC TYPE I.

DO 3 TIMES. TABLA-COLUMNA1 = SY-INDEX.

TABLA-COLUMNA2 = SY-INDEX ** 2. APPEND TABLA.

Page 111: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 111 de 230

ENDDO.

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

ULINE. TABLA-COLUMNA1 = 10.

TABLA-COLUMNA2 = 10 ** 2. MODIFY TABLA INDEX 2.

LOOP AT TABLA. WRITE: / SY-TABIX, TABLA-COLUMNA1, TABLA-COLUMNA2.

ENDLOOP.

5.10 Eliminando registros

Para borrar líneas de una tabla interna contamos con la sentencia DELETE. Varios formatos de la

sentencia nos permiten borrar líneas de una forma diferente.

DELETE <tabla>.

El sistema sólo puede procesar esta sentencia dentro de un bucle LOOP .. ENDLOOP. La sentencia

DELETE borra la línea que estemos tratando en el bucle.

DELETE <tabla> INDEX <índice>.

Con la cláusula INDEX, el sistema borra la línea con el índice <índice> en la tabla interna <tabla>.

Después de borrar la línea, el índice de la siguiente línea es decrementado en 1. Si la operación es

completada, la variable SY-SUBRC vale 0. Si la línea con el índice <índice> no existe, SY-SUBRC vale

4.

DELETE <TABLA> [ FROM <n1> ] [ TO <n2> ] [ WHERE <condición> ].

Sentencia utilizada para borrar registros de una tabla de la base de datos. Con est a sentencia se puede

borrar una o varias líneas de una tabla. Sólo se pueden borrar líneas de una tabla a través de una vista si

ésta sólo hace referencia a una única tabla.

Se debe indicar al menos una de las tres cláusulas.

Page 112: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 112 de 230

Si utilizamos la sentencia s in la cláusula WHERE, el sistema borrará todas las líneas de la tabla <tabla>

cuyo índice esté comprendido entre <n1> y <n2>.

Si no utilizamos la cláusula FROM, el sistema borrará desde la primera línea.

Si no utilizamos la cláusula TO, el sistema borrará hasta la última línea.

Con la cláusula WHERE el sistema sólo borrará aquellas línea de la tabla <tabla> que cumplen la

condición especificada en <condición>. En <condición> se puede utilizar cualquier expresión lógica. El

primer operando debe ser un componente de la estrucutra de línea de la tabla interna. Si el sistema borra

al menos una línea la variable SY-SUBRC valdrá 0, si no borra n inguna valdrá 4.

REPORT EJEMPLO. DATA: BEGIN OF ARTICULO OCCURS 10, ID(4) TYPE C, DESCRIPTION(30) TYPE C, PRECIO TYPE I, END OF ARTICULO. 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.

Page 113: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 113 de 230

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

REPORT EJEMPLO. DATA: BEGIN OF LINEA_1, COL1 TYPE I,

COL2 TYPE I, END OF LINEA_1, TABLA_1 LIKE LINEA_1 OCCURS 10.

DO 40 TIMES. LINEA_1-COL1 = SY-INDEX. LINEA_1-COL2 = SY-INDEX ** 2.

APPEND LINEA_1 TO TABLA_1. ENDDO.

DELETE TABLA_1 FROM 3 TO 38 WHERE COL2 > 20. LOOP AT TABLA_1 INTO LINEA_1.

WRITE: / LINEA_1-COL1, LINEA_1-COL2. ENDLOOP.

Page 114: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 114 de 230

REPORT ZPROCESO_40 .

DATA: BEGIN OF LINEA, COLUMNA1 TYPE I,

COLUMNA2 TYPE I, END OF LINEA, TABLA LIKE LINEA OCCURS 10.

DO 15 TIMES. LINEA-COLUMNA1 = SY-INDEX.

LINEA-COLUMNA2 = SY-INDEX ** 2. APPEND LINEA TO TABLA. ENDDO.

LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP.

ULINE. LOOP AT TABLA INTO LINEA.

IF LINEA-COLUMNA1 < 11. DELETE TABLA. ENDIF.

ENDLOOP. LOOP AT TABLA INTO LINEA.

WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP.

Page 115: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 115 de 230

REPORT ZPROCESO_41 .

************************************************************************ * BORRANDO REGISTROS CON:

* DELETE itab. * DELETE itab FROM idx1 TO idx2 [expresion logica]. ************************************************************************

DATA: BEGIN OF LINEA, COLUMNA1 TYPE I, COLUMNA2 TYPE I,

END OF LINEA, TABLA LIKE LINEA OCCURS 10.

DO 5 TIMES. LINEA-COLUMNA1 = SY-INDEX. LINEA-COLUMNA2 = SY-INDEX ** 2.

APPEND LINEA TO TABLA. ENDDO. LOOP AT TABLA INTO LINEA.

WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2. ENDLOOP. ULINE.

SKIP. DELETE TABLA INDEX: 2, 3, 4.

************************************************************************ * EL INDICE 4 NO SE ENCUENTRA PORQUE LOS INDICES SE CHANCAN EN CADA

Page 116: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 116 de 230

* BORRADO Y ESTAN SIEMPRE EN ORDEN. ************************************************************************

WRITE: / 'sy-subrc', SY-SUBRC. LOOP AT TABLA INTO LINEA. WRITE: / SY-TABIX, LINEA-COLUMNA1, LINEA-COLUMNA2.

ENDLOOP. ULINE. SKIP.

5.11 Niveles de ruptura

En el tratamiento de un LOOP podemos utilizar sentencias de control de ruptura :

AT FIRST.

ENDAT. Realiza las instrucciones que hay a continuación

del AT FIRST para la primera entrada de la tabla.

AT LAS T.

ENDAT. Realiza las instrucciones que hay a continuación

del AT LAST para la última entrada de la tabla.

AT NEW <campo>.

ENDAT. Realiza las instrucciones que hay a continuación

del AT NEW para cada in icio de n ivel de ruptura.

AT END OF <campo>.

ENDAT. Realiza las instrucciones que hay a continuación

del AT END para cada final de n ivel de ruptura.

Si utilizamos la instrucción SUM dentro de un AT ... ENDAT, realizará la suma de todos los campos

P,I,F de ese nivel de ruptura ( para el cálculo de subtotales ).

El resultado lo encontraremos en el área de trabajo de la tabla.

Page 117: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 117 de 230

Será necesario que la tabla interna esté ordenada en el mismo orden que la utilización de los niveles de

ruptura.

La utilización conjunta de todas estas instrucciones será:

SORT <intab> BY <c1> <c2>.

LOOP AT <intab>.

AT FIRST

... (S UM) ...

ENDAT.

AT NEW <cl>.

... (S UM) …

ENDAT.

AT NEW <c2>.

... (S UM) …

ENDAT.

.......... “Proceso Normal de la tabla

AT END OF <c2>.

... (S UM) ...

ENDAT.

AT END OF <c1>.

... (S UM) ...

ENDAT.

AT LAS T

… (S UM) …

ENDAT.

Page 118: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 118 de 230

ENDLOOP.

Page 119: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 119 de 230

At line-selection

Para permitir al usuario seleccionar una línea de un listado y realizar alguna acción, 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 línea del informe. Este

evento se utiliza en los informes interactivos cuando generan salidas secundarias.

El usuario podrá activar este evento a través de las siguientes acciones:

1. En el menú "edición", se elige la opción "seleccionar" o presionando la tecla de función F2.

2. Realizando un doble-click sobre la línea o un solo click sobre un hotspot (ver las opciones

sentencia WRITE).

Después de posicionar el cursor sobre una línea y realizar alguna de las acciones anteriores, el evento AT

LINE-SELECTION se activa.

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

REPORT ZANI23 . WRITE 'MENU' COLOR COL_HEADING. ULINE /(4). WRITE / 'Confirmacion OT'. WRITE / 'Alistar MP'. WRITE / 'Chequear OP'. WRITE / 'Recibo Muelles'. WRITE / 'Liberar Operario'. AT LINE-SELECTION. CASE SY-LISEL. WHEN 'Confirmacion OT'.

Page 120: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 120 de 230

14 15 16 17 18 19 20 21 22 23

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

Analice el funcionamiento de:

SY-LISEL

Tecla F2 ¿Qué sucede si después de la primera línea 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 línea.

Entre las líneas 6 y 7 escriba: HIDE NUMERO. Analice lo que sucede.

EJERCICIO.

Page 121: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 121 de 230

Acondicione el programa anterior (el de muelles) con la utilización de HIDE.

Page 122: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 122 de 230

Join de tablas

JOIN DE DOS TABLAS

REPORT ZANI2 .

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

Page 123: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 123 de 230

SPFLI~CONNID IN S_CONNID.

LOOP AT TABLITA.

WRITE : /11 TABLITA-CARRID,

31 TABLITA-CONNID,

51 TABLITA-COUNTRYFR.

ENDLOOP.

Resultado del ejercicio

Page 124: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 124 de 230

Page 125: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 125 de 230

Selection-screen

*Programa que hace uso de los SELECTION-SCREEN.

REPORT ZBCSELECTIONSCREENS.

SELECTION-SCREEN BEGIN OF SCREEN 500 “Inicia la ventana 500

AS WINDOW TITLE text-011.

PARAMETERS p_input(16) TYPE C. “Crea el campo

SELECTION-SCREEN : SKIP,

BEGIN OF BLOCK b1 “Inicia el bloque b1 (dentro de l

WITH FRAME TITLE text-020. “screen 500)

PARAMETERS: check1 AS CHECKBOX,

check2 AS CHECKBOX,

check3 AS CHECKBOX.

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 tamaño

posible.

Page 126: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 126 de 230

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

Page 127: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 127 de 230

En el numero correspondiente colocamos el texto.

Luego guardamos los cambios y activamos .

Hacemos el mismo proceso para los demas.

Resultado.

Page 128: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 128 de 230

Select-options

Trabajando con la tabla SPFLI.

Escoger el código de aerolínea (o códigos de aerolíneas), de un listado de los códigos de aerolíneas.

Y mostrar la siguiente información referente al código de aerolínea (o códigos de aerolíneas):

1. Código de aerolínea

Page 129: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 129 de 230

2. Numero de conexión de vuelo

3. Ciudad de partida. 4. Ciudad de destino.

Programa:

REPORT ZEJ3. TABLES: SPFLI. TYPES: BEGIN OF EST_SPFLI, CARRID LIKE SPFLI-CARRID, CONNID LIKE SPFLI-CONNID, CITYFROM LIKE SPFLI-CITYFROM, CITYTO LIKE SPFLI-CITYTO, END OF EST_SPFLI. DATA: TABLITA TYPE TABLE OF EST_SPFLI WITH HEADER LINE. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID. START-OF-SELECTION. SELECT SPFLI~CARRID SPFLI~CONNID SPFLI~CITYFROM SPFLI~CITYTO INTO TABLE TABLITA FROM SPFLI WHERE SPFLI~CARRID IN S_CARRID. WRITE : /01 'Codigo de aerolinea', 31 'Numero de conexion de vuelo', 61 'Ciudad de partida', 91 'Ciudad de 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 códigos de las aerolíneas, mediante el uso de select-options. Para poder ser seleccionado por el usuario.

Page 130: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 130 de 230

Reporte de acuerdo a la selección previa.

Investigue si el listado de los códigos de las aerolíneas tienen relación directa con la tabla SPFLI.

Page 131: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 131 de 230

Select – conceptos generales

Page 132: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 132 de 230

UTILIZANDO SELECT SIN ENDSELECT

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

UTILIZANDO SELECT ….ENDSELECT

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

TABLAS CON OCCURS

REPORT ZTABLAS04_ANIBAL . . TABLES SFLIGHT.

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

USO DE APPEND CON ESTRUCTURAS, NO CON TABLAS

Page 133: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 133 de 230

USO DE INTO

REPORT ZTABLAS07_ANIBAL . TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C,

SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1.

DATA ESTRUCTURA1A TYPE ESTRUCTURA1. DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A. "SIN CABECERA DE LINEA

ESTRUCTURA1A-PRIMER_CAMPO = 'PRIMER DATO1'. ESTRUCTURA1A-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. ESTRUCTURA1A-TERCER_CAMPO = 'TERCER DATO1'.

APPEND ESTRUCTURA1A TO TABLA1.

ESTRUCTURA1A-PRIMER_CAMPO = 'PRIMER DATO2'. ESTRUCTURA1A-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. ESTRUCTURA1A-TERCER_CAMPO = 'TERCER DATO2'.

APPEND ESTRUCTURA1A TO TABLA1.

ESTRUCTURA1A-PRIMER_CAMPO = 'PRIMER DATO3'. ESTRUCTURA1A-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. ESTRUCTURA1A-TERCER_CAMPO = 'TERCER DATO3'.

APPEND ESTRUCTURA1A TO TABLA1.

LOOP AT TABLA1 INTO ESTRUCTURA1A. WRITE: / ESTRUCTURA1A-PRIMER_CAMPO, ESTRUCTURA1A-SEGUNDO_CAMPO. ENDLOOP.

USO DE APPEND CON TABLAS

Page 134: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 134 de 230

VARIANTE DE LO ANTERIOR

REPORT ZTABLAS08_ANIBAL . TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C,

SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C,

END OF ESTRUCTURA1. DATA ESTRUCTURA1A TYPE ESTRUCTURA1.

* CON CABECERA DE LINEA DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE.

TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'.

TABLA1-TERCER_CAMPO = 'TERCER DATO1'. APPEND TABLA1.

TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'.

TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'.

APPEND TABLA1. TABLA1-PRIMER_CAMPO = 'PRIMER DATO3'.

TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'.

APPEND TABLA1.

LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO.

ENDLOOP.

MANEJO DE MOVE, CON [] SE MUEVEN TODOS.

Page 135: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 135 de 230

REPORT ZTABLAS09_ANIBAL . TYPES: BEGIN OF ESTRUCTURA1 , PRIMER_CAMPO(20) TYPE C,

SEGUNDO_CAMPO(20) TYPE C, TERCER_CAMPO(20) TYPE C, END OF ESTRUCTURA1.

DATA ESTRUCTURA1A TYPE ESTRUCTURA1.

"CON CABECERA DE LINEA DATA TABLA1 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE. DATA TABLA2 LIKE TABLE OF ESTRUCTURA1A WITH HEADER LINE.

TABLA1-PRIMER_CAMPO = 'PRIMER DATO1'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO1'. TABLA1-TERCER_CAMPO = 'TERCER DATO1'.

APPEND TABLA1.

TABLA1-PRIMER_CAMPO = 'PRIMER DATO2'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO2'. TABLA1-TERCER_CAMPO = 'TERCER DATO2'.

APPEND TABLA1.

TABLA1-PRIMER_CAMPO = 'PRIMER DATO3'. TABLA1-SEGUNDO_CAMPO = 'SEGUNDO DATO3'. TABLA1-TERCER_CAMPO = 'TERCER DATO3'.

APPEND TABLA1. MOVE TABLA1[] TO TABLA2[].

LOOP AT TABLA1. WRITE: / TABLA1-PRIMER_CAMPO, TABLA1-SEGUNDO_CAMPO. ENDLOOP.

ULINE.

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

REPORT ZMOVECORR1 .

Page 136: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 136 de 230

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.

Page 137: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 137 de 230

Move-corresponding

Page 138: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 138 de 230

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.

Page 139: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 139 de 230

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 .

Page 140: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 140 de 230

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

TABLA CON STRUCTURA CREADA. NO CON

DATA: W_SFLIGHT TYPE SFLIGHT.

Page 141: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 141 de 230

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

Page 142: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 142 de 230

SELEECIONAR UNOS CUANTOS REGISTROS DE LA TABLA SFLIGHT, DE ACUERDO A UNA CONDICION Y PASARLOS A UNA TABLA1.

LUEGO MEDIANTE MOVECORRESPONDING PASAR DE TABLA1 A TABLA2, MEDIANTE UNA CONDICION.

REPORT ZMOVECORR . TABLES: SFLIGHT. TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT. DATA: W_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE W_SFLIGHT. IF sy-subrc = 0. LOOP AT W_SFLIGHT. WRITE: / W_SFLIGHT-CARRID, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDLOOP. ENDIF.

ETC.

Page 143: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 143 de 230

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

Page 144: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 144 de 230

REPORT ZMOVECORR . TABLES: SFLIGHT.

TYPES: BEGIN OF EST_FLIGHT, CARRID LIKE SFLIGHT-CARRID , CONNID LIKE SFLIGHT-CONNID, FLDATE LIKE SFLIGHT-FLDATE,

SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATSOCC LIKE SFLIGHT-SEATSOCC, PRICE LIKE SFLIGHT-PRICE, END OF EST_FLIGHT.

DATA: W_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE. DATA: K_SFLIGHT TYPE TABLE OF EST_FLIGHT WITH HEADER LINE.

SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC PRICE FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE W_SFLIGHT WHERE CARRID = 'AA'. IF sy-subrc = 0.

LOOP AT W_SFLIGHT WHERE CONNID = '0017'. move-corresponding W_SFLIGHT to K_SFLIGHT. append K_SFLIGHT. ENDLOOP.

ENDIF. WRITE / 'ES W_SFLIGHT'. LOOP AT W_SFLIGHT.

WRITE: / W_SFLIGHT-CARRID, W_SFLIGHT-CONNID, W_SFLIGHT-FLDATE. ENDLOOP.

WRITE / 'ES K_SFLIGHT'. LOOP AT K_SFLIGHT. WRITE: / K_SFLIGHT-CARRID,

K_SFLIGHT-CONNID, K_SFLIGHT-FLDATE. ENDLOOP.

APARENTEMENTE, SIEMPRE EL MOVE-CORRESPONDING CON APPEND.

Page 145: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 145 de 230

APPEND Y COLLECT OPTIMIZADO

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

DE ACUERDO A LOS CAMPOS QUE COLOQUEMOS EN LAS TABLAS INTERNAS,

OBTENDREMOS VALORES DIFERENTES PARA LAS OPERACIONES CON COLLECT.

Page 146: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 146 de 230

Page 147: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 147 de 230

Append collect modify

EJERCICIO DE MODIFY

Para trabajar con la tabla SFLIGHT. Seleccionar un carrid.

Mostrar la información 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

Page 148: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 148 de 230

REPORT ZCAPITULO_12_07 . TYPES: BEGIN OF FLIGHT, CARRID(2) TYPE C, "ID_AEREOLINEA CONNID TYPE N, "NUMERO_AEREOLINEA FLDATE TYPE D, "FECHA_VUELO SEATSMAX TYPE I, "NUMERO_ASIENTOS_MAXIMO SEATSOCC TYPE I, "NUMERO_ASIENTOS_OCUPADOS PORCENTAJE TYPE P DECIMALS 2, "PORCENTAGE_ASIENTOS_OCUPADOS END OF FLIGHT. TYPES: I_FLIGHT TYPE FLIGHT OCCURS 10. DATA: WA_FLIGHT TYPE FLIGHT, IT_FLIGHT TYPE I_FLIGHT. PARAMETERS: P_CARRID TYPE SFLIGHT-CARRID.

SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE IT_FLIGHT WHERE CARRID = P_CARRID. * 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 'ID_AEREOLINEA', 021 'NUMERO_AEREOLINEA', 044 'FECHA_VUELO', 059 'NUMERO_ASIENTOS_OCUPADOS', 086 'NUMERO_ASIENTOS_MAXIMO', 110 '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.

Page 149: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 149 de 230

Page 150: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 150 de 230

Quiebres

LOOP De SAP ABAP en castellano, la enciclopedia libre.

Podemos recorrer una tabla interna con la instrucción LOOP ... ENDLOOP.

En cada iteración coloca la línea de la tabla que se está procesando en la línea de cabecera. Podemos restringir el proceso de una tabla con una condición WHERE. Si no existe ningún registro de la tabla que cumpla la condición especificada en la

cláusula WHERE, la variable del sistema SY-SUBRC será distinta de 0. Dentro del LOOP la variable SY-TABIX contiene el índice de la entrada que está

procesando en ese momento. FROM <inicio> TO <final>: recorrerá la tabla desde el registro número >inicio> hasta el registro número <final>.

Sintaxis LOOP AT <tabla> (WHERE <cond>)

.............

ENDLOOP.

LOOP AT <tabla> FROM <inicio> TO <final>.

.............

ENDLOOP.

Niveles de ruptura

AT FIRST: realiza las instrucciones que hay a continuación del AT FIRST para la primera entrada en la tabla.

AT LAST: realiza las instrucciones que hay a continuación del AT LAST para la última entrada en la tabla.

AT NEW <campo>: realiza las instrucciones que hay a continuación del AT NEW para cada nueva entrada del contenido del campo.

AT END <campo>: realiza las instrucciones que hay a continuación del AT

END para cada final de contenido del campo.

Si utilizamos la instrucción SUM dentro de una AT ... ENDAT realizará la suma de todos los campos P, I, F de ese nivel de ruptura ( para el cálculo de subtotales ). El

resultado lo encontraremos en la cabecera de la tabla. Será necesario que la tabla interna esté ordenada en el mismo orden que la utilización de los niveles de ruptura. AT FIRST. .... ENDAT.

AT LAST. .... ENDAT.

AT NEW <campo>. .... ENDAT..

AT END OF <campo>. .... ENDAT.

Page 151: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 151 de 230

AT <fg> .. ENDAT

Definición

La sentencia AT <fg> .. ENDAT sólo 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 algún 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 cláusula WITH se utiliza para indicar que la sentencia AT se debe ejecutar si para el field-group <fg> le sigue el field-group <fg1>.

Ejemplo 1:

DATA: NAME(30), SALES TYPE I.

FIELD-GROUPS: HEADER, INFOS. INSERT: NAME INTO HEADER, SALES INTO INFOS.

... LOOP.

AT NEW NAME. NEW-PAGE. ENDAT.

... AT END OF NAME.

WRITE: / NAME, SUM(SALES). ENDAT. ENDLOOP.

Vease también: LOOP, EXTRACT.

AT END OF .. ENDAT

Definición

La sentencia AT END OF .. ENDAT sólo puede ser utilizada dentro de un bucle LOOP .. ENDLOOP e identifica un bloque de proceso. La sentencia se ejecuta cuando se

detecta que cambia algún valor para el campo especificado.

Page 152: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 152 de 230

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 línea actual de la tabla interna. Todos los campos que no forman parte de la clave

estándar de la tabla toman el valor inicial. Para la condición de línea END OF <campo> el sistema sobrescribe todos los campos de la clave estándar, que se encuentran a la derecha del campo <campo> con asterisco (*). No se debe utilizar la sentencia AT END

OF .. ENDAT en combinación con la sentencia LOOP .. ENDLOOP con las cláusulas FROM, TO o WHERE.

Ejemplo 1:

DATA: BEGIN OF COMPANIES OCCURS 20, NAME(30),

PRODUCT(20), SALES TYPE I, END OF COMPANIES.

... LOOP AT COMPANIES.

AT NEW NAME. NEW-PAGE. WRITE / COMPANIES-NAME.

ENDAT. WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.

AT END OF NAME. SUM. WRITE: / COMPANIES-NAME, COMPANIES-SALES.

ENDAT. ENDLOOP.

Vease también: LOOP.

AT FIRST .. ENDAT

Definición La sentencia AT FIRST .. ENDAT sólo 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.

Page 153: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 153 de 230

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 línea

actual de la tabla interna. Todos los campos que no forman parte de la clave estándar de la tabla toman el valor inicial. Para la condición de línea FIRST el sistema sobrescribe

todos los campos de la clave estándar, que se encuentran a la derecha del campo <campo> con asterisco (*). No se debe utilizar la sentencia AT FIRST .. ENDAT en combinación con la sentencia LOOP .. ENDLOOP con las cláusulas FROM, TO o

WHERE.

Ejemplo 1: DATA: BEGIN OF COMPANIES OCCURS 20,

NAME(30), PRODUCT(20),

SALES TYPE I, END OF COMPANIES. ...

LOOP AT COMPANIES. AT FIRST.

NEW-PAGE. WRITE / COMPANIES-BUKRS. ENDAT.

WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES. ENDLOOP.

Vease también: LOOP.

AT LAST .. ENDAT Definición

La sentencia AT LAST .. ENDAT sólo 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.

Page 154: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 154 de 230

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 línea

actual de la tabla interna. Todos los campos que no forman parte de la clave estándar de la tabla toman el valor inicial. Para la condición de línea LAST el sistema sobrescribe todos los campos de la clave estándar, que se encuentran a la derecha del campo

<campo> con asterisco (*). No se debe utilizar la sentencia AT LAST .. ENDAT en combinación con la sentencia LOOP .. ENDLOOP con las cláusulas FROM, TO o

WHERE. Ejemplo 1:

DATA: BEGIN OF COMPANIES OCCURS 20,

NAME(30), PRODUCT(20), SALES TYPE I,

END OF COMPANIES. ...

LOOP AT COMPANIES. AT NEW NAME. NEW-PAGE.

ENDAT. WRITE: / COMPANIES-PRODUCT, COMPANIES-SALES.

AT LAST. SUM. WRITE: / COMPANIES-NAME, COMPANIES-SALES.

ENDAT. ENDLOOP.

Vease también: LOOP.

Page 155: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 155 de 230

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 demás campos se indeterminan

(SETSOCC y FLDATE).

Page 156: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 156 de 230

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

ESTA ES LA FORMA DE USARLO:

PRIMERO FILTRO VALORES UNICOS PARA UN CAMPO

DETERMINADO Y LUEGO VOY SELECCIONANDO ESTOS

PARA UNA ACCION DETERMINADA. GENERALMENTE

HACIENDO USO DE: CASE ……… END CASE.

Page 157: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 157 de 230

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

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

ES MEJOR REALIZAR UN ORDENAMIENTO PREVIO AL CAMPO AL QUE SE LE VA A

APLICAR: AT NEW……… ENDAT.

PARA GARANTIZAR QUE VAMOS A TENER VALORES UNICOS.

PORQUE VA A EFECTUARSE CAMBIOS (EN ESTE CASO MOSTRASE EL CAMPO CONNID), CADA VEZ QUE ENCUENTRE UN

NUEVO VALOR CON RESPECTO AL ANTERIOR.

PARA EL PRIMER EJERCICIO COINCIDIO QUE EL CAMPO CARRID ESTABA

ORDENADO, POR ESO NO SE TUVO PROBLEMAS CON EL RESULTADO.

Page 158: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 158 de 230

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

ETC.

Page 159: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 159 de 230

Page 160: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 160 de 230

Módulos

Form-Perform

Nos permite realizar una llamada a una subrutina. Se puede realizar llamadas a subrutinas desde un

subrutina, incluso es posible que una subrutina se llame así mis ma (llamada recursiva).

Sintaxis:

PERFORM <subrutina> [ TABLES <parámetros_actuales> ]

[ US ING <parámetro_actuales> ]

[ CHANGING <parámetro_actuales> ].

TABLES -> Los parámetros definidos con esta cláusula sólo pueden ser tablas internas, con o sin línea de

cabecera.

US ING -> Los parámetros definidos con esta cláusula pueden ser de cualquier tipo de dato, incluidas las

tablas internas. Se suelen utilizar como parámetros de entrada a la subrutina.

CHANGING -> Los parámetros defin idos con esta cláusula pueden ser de cualquier tipo de dato,

incluidas las tablas internas. Se suelen utilizar como parámetro 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 números.

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.

W RITE: / 'Suma de', OUT_NUM1, 'y', OUT_NUM2, 'es', OUT_SUM.

ENDFORM.

Page 161: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 161 de 230

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 números.

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.

ENDFORM.

Digitando el siguiente código 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.

Page 162: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 162 de 230

REPORT CC.

DO 2 TIMES.

PERFORM SY-INDEX OF SUB1 SUB2.

ENDDO.

FORM SUB1.

W RITE / 'Subroutine 1'.

ENDFORM.

FORM SUB2.

W RITE / 'Subroutine 2'.

ENDFORM.

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.

W RITE: / 'Sum of', OUT_NUM1, 'and', OUT_NUM2, 'is', OUT_SUM.

ENDFORM.

Page 163: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 163 de 230

REPORT CC.

DATA: NUM TYPE I VALUE 5,

FAC TYPE I VALUE 0.

PERFORM FACT USING NUM CHANGING FAC.

WRITE: / 'Factorial o f', NUM, 'is', FA C.

FORM FACT

USING VALUE(F_NUM)

CHANGING F_FACT.

F_FACT = 1.

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

W RITE: / 'Inside subroutine:',

/ 'R=', R, 'RES=', RES.

ENDFORM.

Page 164: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 164 de 230

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: / W HO-NAME, WHO-AGE, WHO-COUNTRY.

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.

Page 165: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 165 de 230

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.

W RITE: / F_LINE-COL1, F_LINE-COL2.

ENDLOOP.

ENDFORM.

Page 166: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 166 de 230

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

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.

Page 167: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 167 de 230

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

Page 168: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 168 de 230

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. WHILE F_NUM GE 1. F_FACT = F_FACT * F_NUM. F_NUM = F_NUM - 1. ENDWHILE. ENDFORM.

Page 169: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 169 de 230

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.

Page 170: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 170 de 230

SAP AG 1999

Example: Local Modularization in Programs

DATA

res_seats TYPE saplane-seatsmax.

PARAMETERS:

pa_type TYPE saplane-planetype,

pa_occ TYPE saplane-seatsmax.

PERFORM get_free_seats USING pa_type

pa_occ

CHANGING res_seats.

WRITE res_seats.

**********************************************************************

FORM get_free_seats USING p_planetype TYPE saplane-planetype

p_seatsocc TYPE saplane-seatsmax

CHANGING value(p_seatsfree) TYPE saplane-seatsmax.

SELECT SINGLE seatsmax FROM saplane

INTO p_seatsfree

WHERE planetype = p_planetype.

p_seatsfree = p_seatsfree - p_seatsocc.

ENDFORM.

Page 171: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 171 de 230

Page 172: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 172 de 230

Funciones 1. OBJETIVO

Mostrar el manejo de funciones mediante ejercicios.

2. CREACIÓN DE UN GRUPO DE FUNCION

Trabajamos con la transacción SE37

Seleccionamos:

Goto Function groups Create group.

El nombre del grupo de función personalizado debe empezar con Z. Crearemos el grupo de función:

ZANIBAL3.

Clic en Schem.

Presionamos el botón Local Objeto, con lo que tenemos el grupo de función creado.

Como confirmación en la barra de status aparece el mensaje: Function Group ZANIBAL3 created.

Page 173: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 173 de 230

3. PRIMER EJEMPLO DE FUNCION

Crearemos una función que invierta una cadena. Trabajando con la transacción SE37

Se coloca el nombre del módulo de función (se antepone la letra Z), luego pulsar Create.

Luego se coloca el nombre del grupo de función (Function Group) ZANIBAL3 y se escribe

un texto explicativo.

En la paleta Import van todos los parámetros que serán pasados por valor (si desea acti var esta opción 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 parámetros que serán devueltos por valor (si desea activar esta opción 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 código fuente de que realizará la función.

Page 174: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 174 de 230

Luego en la paleta Source code se especificará el código fuente de que realizará la función.

Para finalizar, hay que guardarlo y activarlo.

En el editor de Abap el código 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:

Page 175: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 175 de 230

4. SEGUNDO EJEMPLO DE FUNCION

Crearemos una función que no tiene datos definidos previamente.

Cuando se muestra la función desde FUNCTION BUILDER no muestra nada el valor de

CADENARES.

Llamándolo desde un reporte creado mediante la transacción SE38.

El resultado final de CADENARES solo se muestra cuando se “corre” desde el programa principal.

Page 176: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 176 de 230

5. TERCER EJEMPLO DE FUNCION

Crearemos una función al que definimos datos previamente.

Aquí podemos probar desde FUNCTION BUILDER.

Llamándolo desde un reporte creado mediante la transacción SE38.

Mostrándonos:

Page 177: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 177 de 230

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

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.

Page 178: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 178 de 230

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.

Page 179: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 179 de 230

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 = 'C:\prueba_hoy.txt' filetype = 'ASC' TABLES data_tab = TABLITA.

Page 180: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 180 de 230

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 información tomando como base la estructura de la tabla estándar 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, t_REGISTRO-FMEAL, t_REGISTRO-ARCITY, t_REGISTRO-ARDATE, t_REGISTRO-ARTIME. ENDLOOP.

Page 181: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 181 de 230

Page 182: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 182 de 230

Batch input 10. OBJETIVO

Lograr que el alumno realice la carga masiva de datos empleando una transacción estándar de SAP.

11. TRANSACCIÓN STANDAR

Vamos a realizar Batch Input a la transacción estándar TUTT: Tutorial de Workbench.

12. INFORMACIÓN TÉCNICA DE CAMPOS

Para analizar con que campos están relacionados las cajas de ingreso de información, presionamos f1

sobre estos e ingresamos a su información técnica.

Page 183: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 183 de 230

13. TABLA RELACIONADA

Esta transacción llena la tabla WBTABLE de estructura:

14. CREANDO UNA BATCH INPUT A LA TUTT

1. SHDB

2. Grabar nueva: o Crear (F5)

3. Nombrar la g rabación (Z_TUTT_XX01)

4. Especificar el código de transacción (TUTT)

5. Iniciar grabación Start recording:

Page 184: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 184 de 230

6. Se presenta la pantalla de la transacción TuTT.

7. Completar los datos y grabar .

8. Finalmente volver Back (F3) .

Aparece la ventana de grabacion de la BI

9. Grabar Save (Ctrl+S)

Page 185: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 185 de 230

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

Page 186: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 186 de 230

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 estándar WBTABLE:

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

17. INSTRUCCIÓN CALL TRANSACTION

CALL TRANSACTION <transaction> USING <tabint>

MODE <modo_ejec> UPDATE <tipo_actual>.

Donde:

<tabint> Tabla interna (con estructura BDCDATA).

<modo_ejec> Modo de ejecución. Puede ser:

“A” Ejecución visib le.

“N” Ejecución invisible.

“E” Ejecución visualizando solo errores.

<tipo_actual> Tipo de actualización en base de datos. Puede ser:

“S” Actualización sincrónica (inmediata).

“A” Actualización asíncrona (Graba solo cuando termina la transacción).

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

Page 187: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 187 de 230

Page 188: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 188 de 230

Rangos

ASPECTOS TEORICOS

Campo

Significado

SIGN

Tipo alfanumérico de longitud 1. Es un flag que se utiliza para indicar si la condición es inclusiva o exclusiva. Los valores posibles son I y E. I: se utiliza para el criterio de inclusión.

E: se utiliza para el criterio de exclusión.

OPTION

Tipo alfanumérico de longitud 2. Contiene el operador de selección. Los operadores validos de selección 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 <patrón>. Los caracteres especiales son <+> y <*> (no se puede utilizar el campo HIGH).

NP: no contiene el <patrón>. Los caracteres especiales son <+> y <*> (no se puede utilizar el campo HIGH). BT: entre los valores (se utilizan los campos LOW y HIGH).

NB: no entre los valores (se utilizan los campos LOW y HIGH).

LOW

El tipo de dato LOW es el mismo que el campo referenciado en la sentencia RANGES con la cláusula FOR. Si el campo HIGH esta vació,

LOW indica un valor sencillo. Si el campo HIGH tiene algún valor, LOW y HIGH marcan los límites del criterio de selección (puede existir sola).

HIGH

El tipo de dato HIGH es el mismo que el campo referenciado en la sentencia RANGES con la cláusula FOR. HIGH siempre se utiliza en

combinación con el campo LOW (no puede estar sin el campo LOW).

Page 189: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 189 de 230

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.

Page 190: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 190 de 230

Page 191: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 191 de 230

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 página actual. Se act iva en cada inicio de pagina por defecto siempre hay uno al iniciar el programa.

NEW-PAGE

Fuerza al sistema a crear una nueva página

REPORT ZPROG2 . WRITE 'CABECERA DEL INFORME'.

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

No muestra nada.

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

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

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

Page 192: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 192 de 230

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE.

WRITE 'SEGUNDA LINEA - SECUENCIA NORMAL'. TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'.

WRITE / '***** SEGUNDA LINEA DESPUES DE TOP-OF-PAGE ******'.

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'.

NEW-PAGE. WRITE / 'SEGUNDA LINEA - SECUENCIA NORMAL'. TOP-OF-PAGE.

WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP-OF-PAGE ******'.

REPORT ZPROG2.

WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE 'SEGUNDA LINEA - SECUENCIA NORMAL'. NEW-PAGE.

TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP-OF-PAGE ******'.

REPORT ZPROG2. WRITE 'PRIMERA LINEA - SECUENCIA NORMAL'. NEW-PAGE.

WRITE 'SEGUNDA LINEA - SECUENCIA NORMAL'. NEW-PAGE. WRITE 'TERCERA LINEA - SECUENCIA NORMAL'.

TOP-OF-PAGE. WRITE '***** CABECERA DEL INFORME - DESPUES DE TOP-OF-PAGE ******'. WRITE / '***** SEGUNDA LINEA DESPUES DE TOP-OF-PAGE ******'.

Page 193: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 193 de 230

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.

Page 194: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 194 de 230

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.

Page 195: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 195 de 230

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

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

REPORT sapmztst.

SKIP 5.

WRITE '*****'.

Page 196: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 196 de 230

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

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

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

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

Page 197: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 197 de 230

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

CUANDO AD ICIONO PIE DE PAGINA CON: 6(2) NECESARIAMENTE DEBO ESCRIBIR NO STANDARD PAGE

HEADING.

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

CARECE DE SENTIDO EL PIE DE PAGINA POR 10(2)

Page 198: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 198 de 230

NEW-PAGE

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

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

Page 199: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 199 de 230

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

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

Page 200: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 200 de 230

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

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

Page 201: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 201 de 230

Page length of individual pages

NEW-PAGE LINE-COUNT <length>.

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

Page 202: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 202 de 230

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.

????

Page 203: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 203 de 230

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.

Page 204: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 204 de 230

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.

Page 205: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 205 de 230

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.

Page 206: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 206 de 230

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

Page 207: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 207 de 230

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.

Page 208: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 208 de 230

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.

Page 209: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 209 de 230

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.

Page 210: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 210 de 230

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.

Page 211: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 211 de 230

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.

Page 212: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 212 de 230

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.

Page 213: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 213 de 230

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

Page 214: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 214 de 230

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

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

FALTA GRID CON TABLA STANDAR

Page 215: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 215 de 230

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

Page 216: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 216 de 230

Page 217: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 217 de 230

Operaciones con corresponding

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. ADD-CORRESPONDING MONEY TO RATE. WRITE / MONEY-USA. WRITE / MONEY-FRG. WRITE / MONEY-AUT. WRITE / '******'. WRITE / RATE-USA. WRITE / RATE-FRG. WRITE / RATE-AUT.

Page 218: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 218 de 230

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.

Page 219: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 219 de 230

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

Page 220: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 220 de 230

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

Page 221: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 221 de 230

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.

Page 222: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 222 de 230

Page 223: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 223 de 230

Sql

INSERT

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

UPDATE

TABLES SPFLI.

DATA WA TYPE SPFLI.

MOVE 'AA' TO WA-CARRID.

MOVE '0064' TO WA-CONNID.

MOVE 'WASHINGTON' TO WA-CITYFROM.

UPDATE SPFLI FROM WA.

DELETE

TABLES SPFLI.

DATA: BEGIN OF WA,

CARRID TYPE SPFLI-CARRID,

CONNID TYPE SPFLI-CONNID,

END OF WA.

MOVE 'AA' TO WA-CARRID.

MOVE '0064' TO WA-CONNID.

DELETE SPFLI FROM WA.

MOVE 'LH' TO SPFLI-CARRID.

MOVE '0017' TO SPFLI-CONNID.

DELETE SPFLI.

Page 224: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 224 de 230

Ejemplos SQL

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

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

Page 225: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 225 de 230

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

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

Page 226: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 226 de 230

Page 227: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 227 de 230

Alv

ALV GRID CONTROL Ejemplo de una pantalla con ALV grid:

Ejemplo sencillo de como implementar ALV grid

Este ejemplo usa la tabla

ZSFLIGHT. Es equivalente a SFLIGHT. Pasos:

1. Crear un programa ejecutable (Report)

2. Crear un screen (100). 3. Colocar un custom container y ponerle nombre ALV_CONTAINER

4. Colocar un Pushbutton. Poner como en text Exit y en el functioncode EXIT

REPORT z_alv_grid .

TABLES: zsflight.

*----------------------------------------------------------

----------

* G L O B A L I N T E R N A L T A B L E S

*----------------------------------------------------------

----------

DATA: gi_sflight TYPE STANDARD TABLE OF sflight.

*----------------------------------------------------------

----------

* G L O B A L D A T A

*----------------------------------------------------------

----------

DATA: ok_code LIKE sy-ucomm,

g_wa_sflight LIKE sflight.

* Declare reference variables to the ALV grid and the

container

DATA:

go_grid TYPE REF TO cl_gui_alv_grid,

go_custom_container TYPE REF TO cl_gui_custom_container.

*----------------------------------------------------------

----------

* S T A R T - O F - S E L E C T I O N.

*----------------------------------------------------------

----------

START-OF-SELECTION.

SET SCREEN '100'.

*&---------------------------------------------------------

----------

*& Module USER_COMMAND_0100 INPUT

Page 228: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 228 de 230

*&---------------------------------------------------------

----------

MODULE user_command_0100 INPUT.

CASE ok_code.

WHEN 'EXIT'.

LEAVE TO SCREEN 0.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

*&---------------------------------------------------------

----------

*& Module STATUS_0100 OUTPUT

*&---------------------------------------------------------

----------

MODULE status_0100 OUTPUT.

* Create objects

IF go_custom_container IS INITIAL.

CREATE OBJECT go_custom_container

EXPORTING container_name = 'ALV_CONTAINER'.

CREATE OBJECT go_grid

EXPORTING

i_parent = go_custom_container.

PERFORM load_data_into_grid.

ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT

*&---------------------------------------------------------

----------

*& Form load_data_into_grid

*&---------------------------------------------------------

----------

FORM load_data_into_grid.

* Read data from table SFLIGHT

SELECT *

FROM zsflight

INTO TABLE gi_sflight.

* Load data into the grid and display them

CALL METHOD go_grid->set_table_for_first_display

EXPORTING i_structure_name = 'SFLIGHT'

CHANGING it_outtab = gi_sflight.

ENDFORM. " load_data_into_grid

Page 229: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 229 de 230

Page 230: Curso ABAP Basico

CURSO ABAP BASICO www.bizpartner.biz

Lima-Perú Pág ina 230 de 230