Sei sulla pagina 1di 69

ABAP Training

Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Curso Básico
ABAP/4

Fundacion Favaloro – Gerencia de Sistemas

1
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Instancia X Client

Es muy importante entender el funcionamiento del ambiente del sistema durante la


evolución de un proyecto. Será necesario entender los conceptos de Client e Instancia:

Client – Definido como una unidad independiente del R/3, en términos comerciales, organización
y técnicos. Eso significa que tienen su própria configuración, datos de aplicación y datos de
cadastro (master data).

Instancia – Definida como un ambiente del R/3 que agrupa uno o mas clientes, el cual se ejecuta
un determinado trabajo.

Una instancia de trabajo, en general tiene mas de un Client, dónde al mismo tiempo pueden ser
ejecutadas diferentes frentes de trabajo del proyecto. La intención de esta división es para que
se pueda trabajar agregando valores, sin ocasionar problemas de interés. Por ejemplo, durante
un proyecto, el Client para desarrollo de customizing de ABAP debe ser diferente de otros, por
que trabaja con testing y modificaciones constantes, lo cual perjudica otros tipos de servicios.

Si esta división en muchas oportunidades ayuda, en algunas no. En general, las masas de datos
son distintas en los Clients, y el comportamiento principalmente en pruebas de produtos
customizados puede ser distinto. Lo recomendado por SAP es que exista un Client para pruebas,
con masa de datos completa que permita “hacer recarga” cuando esté la necesidad, lo cual
permitiria que las condiciones de testing puedan ser repetidas. En el dia a dia de un proyecto eso
es muy difícil, por que el mantenimiento de esos Clients por el equipo de Basis en general no es
bien visto(controlado).

Las instancias cambian a lo largo de un proyecto. A medida que el sistema se va amoldando, en


general se inicia una nueva instancia libre de vícios y restos de pruebas de la instancia anterior. Al
menos tres instancias siempre existen durante el período de un proyecto. La instancia de
desarrollo, es la de pré-producción y finalmente la de producción. Cada vez que el sistema es
migrado de una instancia a otra, sólo debe ser aprovechado lo que esta realmente comprobado
que está funcionando en la instancia anterior, de modo a disminuir los errores de cada migración.

Objetos “Client Dependent” y “Client Independent”

Fundacion Favaloro – Gerencia de Sistemas

2
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Todos los objetos creados en un sistema SAP, pueden ser divididos en dos grupos,
tratados de forma distinta a lo largo de un proyecto. Los objetos llamados “ClientIndependents”
son aquellos que una vez creados pueden ser utilizados por todos los clientes de una misma
instancia, sin que sea necesário ninguna articulación agregada. El simple acto de que se
encuentre activo en el repositório del sistema habilitado para la instancia, le permite ser utilizado
por todos los clientes de esa instancia, al mismo tiempo. El mejor ejemplo de objetos
independientes de Client son los programas ABAP/4 normales customizados. Por ejemplo, un
report creado en un cliente de desarrollo, puede ser ejecutado desde outro client de prueba, que
esté en la misma instancia, una vez que sea generado y activado.

Los objetos dependientes del Client, una vez creados, en el client de desarrollo no puede
ser ejecutado desde ningún otro client, a menos que sea transportado o copiado para su destino.
Este es un ejemplo típico de formulários en SAPScript.
Dentro de una clase de objetos dependientes del client, existe un subgrupo que exije
mejor atención. Es el caso de logos utilizados dentro de SAPScript. Estos objetos, no compartidos
por clients, no generan request´s al ser creados, lo que impide que sean transportados
directamente, con la necesidad de asociar, primero, esos elementos a una Change Request
através de un programa. En este caso, los log’s tienen que ser generados en cada uno de los
Clients en que se desee utilizar, através de una ejecución de un programa SAP. Este tipo de
problema, a lo largo de un proyecto, exije una atención especial, para evitar problemas futuros.
Por ejemplo, el desarrollador técnico tiene que tener cuidado con el anexo del archivo .TIF del log
en la espicificación del MDM, para repetir el proceso futuro de generar un log dentro del
sistema. En caso de no tener cuidado con este proceso, en un futuro se podrá obtener un log de
distintos tamaños, generando re-work y perdida de tiempo.

Transacciones

Transacción es un codigo alfanumérico de 20 caracteres, utilizado para iniciar un proceso


dentro del sistema SAP. Todo y cualquier proceso o parte de él debe ser ejecutado dentro del
sistema através de una transacción. En customizing de ABAP/4, siempre que un GAP del sistema
es realizado, genera al menos una transacción, de modo que el usuario pueda ejecutar ese
producto customizado desde dentro del sistema.

Toda tarea realizada através del menu del sistema, también corresponde a una
transacción. Un método para conocer el codigo de una transacción, es entrar a la misma, y en la

Fundacion Favaloro – Gerencia de Sistemas

3
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

pantalla inicial de esta transacción, utilizar el menu Sistema -> Status, que informa el programa y
transacción ejecutada.
En desarrollo de customizing ABAP/4, las principales transacciones utilizadas son:

SE80  Monitor para Desarrollador


SE38  abre el editor ABAP/4
SE16  permite visualizar el contenido de tablas SAP
SE11  permite visualizar la arquitectura de una tabla/estructura de SAP
SE43  creación de menus
SE93  creación de transacciones customizadas
SE71  creación y manutención de formulários SAPscripts
CMOD  creación de proyectos Exits (Field Exits, User Exits, ...)

Fundacion Favaloro – Gerencia de Sistemas

4
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Editor ABAP/4

El editor de programación ABAP/4 de SAP puede ser encontrado atraves del camino:

Menu SAP  Herramientas  ABAP Workbench  Desarrollo  Editor Abap

O por la transacción SE38.

Fundacion Favaloro – Gerencia de Sistemas

5
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Una pantalla para ingresar el nombre del programa será presentada, como muestra la
figura abajo.
Para crear un programa nuevo, utilize un nombre que aún no exista y después pulsar el
botón Crear. Para editar o exibir un programa ya existente, entrar con el nombre del programa y
seleccionar los respectivos botones.

Existe un padrón de nombres que debe ser seguido, no solo para el nombre de los
programas, pero para todos los desarrollos en SAP/R3. Esos padrones pueden variar de un
proyecto al otro y principalmente con la versión de SAP la cual se está trabajando. En todos los
casos los nombres de los programas empiezan siempre con Z o Y.

Fundacion Favaloro – Gerencia de Sistemas

6
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Tabla de Nombres
Object Structure / Example Max
Length Position Description
ABAP ZP_XX_X_$$$$$$$$$$$$$$$$$$$$$$ 30 1 Z – Permanent
Programs 2 P – Project Identifier
4-5 Functional Descriptor (Table
1)
7 Program Type: Like the old
naming standards
9-30 Free choice for Program
Name Ex: ZA_MM_R_0010
Data ZP_E_XX_$$$$$$$$$$$$$$$$$$$$$$ 30 1 Z – Permanent
Elements 2 P – Project Identifier
4 E – For Data Element
6-7 Functional Descriptor (Table
1)
9-30 DDIC name identifier
Domains ZP_D_XX_$$$$$$$$$$$$$$$$$$$$$$ 30 1 Z – Permanent
2 P – Project Identifier
4 D – For Domain
6-7 Functional Descriptor (Table
1)
9-30 DDIC name identifier
Match ZP$$ 4 1 Z – Permanent
Code 2 P – Project Identifier
Objects 3-4 Functional Descriptor (Table
1)
Tables ZPTXX_$$$$$$$$$$ 16 1 Z – Permanent
2 P – Project Identifier
3 T – For Tables
4-5 Functional Descriptor (Table
1)
7-16 Sequential Number
Structure ZPSXX_$$$$$$$$$$$$$$$$$$$$$$ 30 1 Z – Permanent
2 P – Project Identifier
3 S – For Structures
4-5 Functional Descriptor (Table
1)
7-30 DDIC name identifier

Fundacion Favaloro – Gerencia de Sistemas

7
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

View ZPVXX_$$$$$$$$$$ 16 1 Z – Permanent


2 P – Project Identifier
3 V – For View Name
4-5 Functional Descriptor (Table
1)
7-16 DDIC name identifier
Function ZPFXX_$$$$$$$$$$$$$$$$$$$$$$ 30 1 Z – Permanent
Modules 2 P – Project Identifier
3 F – For Function
4-5 Functional Descriptor (Table
1)
7-30 DDIC name identifier
Function ZP_XX_$$$$$$$$$$$$$$$$$$$$ 26 1 Z – Permanent
Groups 2 P – Project Identifier
4-5 Functional Descriptor (Table
1)
7-26 DDIC name identifier
Message ZP_XX 8 1 Z – Permanent
Class 2 P – Project Identifier
4-5 Functional Descriptor (Table
1)
Transaction ZPXX$$ 6 1 Z – Permanent
2 A – Project Identifier
3-4 Functional Descriptor (Table
1)
5-6 Sequential Number
EX. ZAMM01
User exit ZPXX$$$$ 8 1 Z – Permanent
project 2 A – Project Identifier
definition 3-4 Functional Descriptor (Table
1)
5-8 User exit Identifier
Sapscript ZP_XX_$$$$$$$$$$ 16 1 Z – Permanent
Form 2 P – Project Identifier
4-5 Functional Descriptor (Table
1)
7- 16 Descriptive Identifier
Ex. ZA_SD_NOTAFISCAL

Fundacion Favaloro – Gerencia de Sistemas

8
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Table 1 – Descripción Módulos


CO Contabilidad
FI Finanzas
MM Materiales / Compras
PP Producción
SD Ventas / Facturación
WM Warehouse Management

Tipos de Programa
R Report
O On line
B Batch
I Consult standard for interface
X Include
S Sapscript

Fundacion Favaloro – Gerencia de Sistemas

9
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

La aparencia del editor no cambia comparado a otro y es bien simple.

Fundacion Favaloro – Gerencia de Sistemas

10
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Uno de los recursos permitidos para que se utilice otro editor como Note Pad de
Windows, es el recurso de Download y Upload. Atraves del menu Utilitarios -> Otros Utilitarios
-> Upload/Download, el sistema permite que códigos escritos en otros editores puedan cargarse
en el editor ABAP/4.

Este recurso nos permite grabar los códigos que están aún inactivos o incompletos. Es
extremadamente importante para mantener un control próprio de las versiones cuando se está
codificando.

Fundacion Favaloro – Gerencia de Sistemas

11
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Declaración de Datos

Fundacion Favaloro – Gerencia de Sistemas

12
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Tablas de diccionario

Serán aquellas tablas de las que vamos a extraer información y que vamos a utilizar
posteriormente. La sentencia que utilizamos para ello es la sentencia tables.

***********************************************************************
Tablas
***********************************************************************
TABLES:
sflight,
saplane,
scarr.

En ABAP una sentencia seguida por dos puntos (:) sirve para enumerar una serie de
componentes y éstos siempre deben estar separados por coma. Finalmente todas las sentencias
ABAP acaban en punto (.).

Variables globales

Son aquellas variables visibles desde cualquier punto del programa y que contienen un único
dato. Se declaran mediante la sentencia data seguida del tipo de dato.
*****************************************************************
*******
*Variables globales
*****************************************************************
*******
DATA:
g_vuelo(4) TYPE n, "Número de vuelo
g_fecha TYPE s_date, "Fecha del vuelo
g_precio LIKE sflight-price. "Precio del vuelo

 A través del tipo de datos predefinido en ABAP (caso de la variable g_vuelo).


Utilizamos type para definir el tipo. Los tipos ABAP predefinidos más comunes que
podemos encontrar son:

o c: carácter o alfanumérico.

Fundacion Favaloro – Gerencia de Sistemas

13
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

o d: fecha. ABAP los guarda internamente como AAAAMMDD, es decir, cuatro


dígitos para el año, dos dígitos para el mes y dos dígitos para el día.

o t: para la hora.

o i: para números enteros.

o n: para variables que contendrán textos exclusivamente numéricos.

o f: numéricos con coma flotante.

o p: numéricos empaquetados.

 A través de un elemento de datos que ya exista en el diccionario ABAP (caso de la


variable g_fecha). También utilizamos type para definir el tipo de dato.

 A través de un campo que ya exista en una tabla de diccionario (caso de la variable


g_precio). No utilizamos type sino like. SAP entenderá la variable como el dato que se
contiene en ese campo del diccionario.

Constantes
Las constantes que se declaran al principio del programa nunca podrán modificar su valor
durante la ejecución del programa. En un programa se utilizan para evitar escribir valores
literales. La sentencia utilizada es la sentencia constants.

*****************************************************************
*******
*Constantes
*****************************************************************
*******
CONSTANTS:
c_vuelo(5) TYPE c VALUE 'Vuelo',
c_fecha TYPE d VALUE '20121231'.

En este caso vemos que la declaración de constantes y variables es igual, la diferencia radica en la
cláusula value. Así dotamos de contenido a nuestra constante durante toda la ejecución del

Fundacion Favaloro – Gerencia de Sistemas

14
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

programa. No intentéis asignar nunca un valor a una constante durante la ejecución del
programa (hacedlo sólo en la declaración de la constante) ya que ABAP no lo va a aceptar.

Estructuras

Son matrices de datos unidimensionales. En palabras sencillas, una estructura es un


encadenamiento de variables. En lugar de declarar, diferentes variables por separado, una
estructura es una declaración de variables o campos conjunta.

*****************************************************************
*******
*Estructuras
*****************************************************************
*******
DATA:
BEGIN OF e_aerolinea,
carrid LIKE scarr-carrid, "Código de aerolínea
carname TYPE s_carrname, "Nombre de aerolínea
url(255) TYPE c,
END OF e_aerolinea.

El ejemplo declara una estructura de tres campos (carrid, carname y url) juntos.
Para declarar una estructura utilizamos la sentencia data, luego abrimos la estructura con la
cláusula begin of nombre_de_la_estructura. Una vez declarados los campos cerramos la
sentencia con la claúsula end of nombre_de_la_estructura.

Tablas internas

Sirven básicamente para almacenar la información que extraemos de las tablas de la base de
datos. Una tabla interna es también una matriz de datos, pero bidimensional. Al contrario que las
estructuras que sólo pueden contener un valor para cada campo, las tablas internas contendrán
muchos registros. Cada registro llevará un valor diferente en el mismo campo a la manera que
tiene una tabla transparente de diccionario.

*****************************************************************
*******
*Tablas internas

Fundacion Favaloro – Gerencia de Sistemas

15
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

*****************************************************************
*******
* Tabla de vuelos: primera forma de declaración de tablas
internas
DATA:
BEGIN OF i_vuelos occurs 0,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
planetype LIKE sflight-planetype,
END OF i_vuelos.

* Tabla de aviones: segunda forma de declaración de tablas


internas
TYPES:
BEGIN OF ty_aviones,
planetype LIKE saplane-planetype,
seatsmax LIKE saplane-seatsmax,
END OF ty_aviones.

DATA:
i_aviones TYPE STANDARD TABLE OF ty_aviones.

 La primera forma de declarar una tabla interna es muy parecida a la declaración de


estructuras, pero añadiendo la cláusula occurs 0. Al declarar una tabla interna de este
modo también estamos diciendo a SAP que nuestra tabla interna tendrá una cabecera.

 La segunda forma se realiza mediante sentencia types, que permite la declaración de


tipos de datos. Esta segunda forma parece más complicada y más larga, pero es
preferible utilizarla ya que la primera no es útil en ciertos entornos ABAP como en
programación de queries, smartforms o ABAP orientado a objetos. Al declarar una tabla
interna de este modo también estamos diciendo a SAP que nuestra tabla interna tendrá
una cabecera. En otro artículo veremos qué implicaciones tiene esto.

Resumen de sentencias
 Tables.

Fundacion Favaloro – Gerencia de Sistemas

16
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

 Data.
 Constants.
 Data: begin of nombre_estructura … end of nombre_estructura.
 Data: begin of nombre_tabla_interna … end of nombre_tabla_interna.
 Types: begin of nombre_tipo … end of nombre_tipo.

Fundacion Favaloro – Gerencia de Sistemas

17
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Recuperar Datos

Fundacion Favaloro – Gerencia de Sistemas

18
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Tablas internas

Ya habíamos comentado que las tablas internas sirven para almacenar información extraída de la
base de datos. En este ejemplo voy a utilizar una tabla interna que ya habíamos declarado
previamente.

* Tabla de vuelos
DATA:
BEGIN OF i_vuelos OCCURS 0,
carrid LIKE sflight-carrid, "Código de aerolínea
connid LIKE sflight-connid, "Número de vuelo
fldate LIKE sflight-fldate, "Fecha de vuelo
planetype LIKE sflight-planetype, "Tipo de avión
END OF i_vuelos.

La sentencia select...endselect

Esta sentencia realiza una lectura lineal de los datos de las tablas de la base de datos y los asigna
directamente a los campos de nuestra tabla interna. Pero atención, para que queden
almacenados sobre la tabla interna para cada registro seleccionado debemos utilizar la
sentencia APPEND. Así, haremos añadiremos los registros a nuestra tabla interna.

SELECT * FROM sflight WHERE carrid IN s_carrid.


i_vuelos-carrid = sflight-carrid.
i_vuelos-connid = sflight-connid.
i_vuelos-fldate = sflight-fldate.
i_vuelos-planetype = sflight-planetype.
APPEND i_vuelos. CLEAR i_vuelos.
ENDSELECT.

 El símbolo (*) le indica a SAP que debe guardar en memoria absolutamente todos los
valores de todos los campos de cada registro de la tabla SAP.

Fundacion Favaloro – Gerencia de Sistemas

19
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

 La cláusula WHERE nos permite indicar el filtro de selección. En este caso utilizamos
como filtro el rango de códigos de aerolíneas. De la tabla sflightsólo recuperaremos
aquellos registros que cumplan con la condición indicada en el WHERE.

 Seguidamente asignamos a cada campo de la tabla interna el valor del campo de la tabla
SAP, dejándolo a nivel de la cabecera de la tabla interna.

 Finalmente, guardamos el registro en nuesta tabla interna mediante la sentencia


APPEND.
Con la sentencia CLEAR limpiamos la cabecera y la dejamos lista para el siguiente registro.

La sentencia SELECT...ENDSELECT irá pasando uno a uno por cada uno de los registros que
cumplan la condición de la cláusula WHERE y los irá almacenando gracias a la
sentencia APPEND dentro de nuestra tabla interna.

El mayor inconveniente de trabajar con la forma SELECT...ENDSELECT es que la lectura se hace


linealmente, es decir, SAP debe pasar por cada uno de los registros individualmente hasta llegar
al final. Esto hace que la búsqueda de datos sea muy ineficiente en términos de rendimiento y
alarga innecesariamente el tiempo de ejecución del programa.

Una forma de mejorar el rendimiento sería no utilizar la cláusula (*) sino indicar específicamente
los campos que necesitamos llenar.

SELECT carrid connid fldate planetype FROM sflight


INTO (i_vuelos-carrid, i_vuelos-connid, i_vuelos-fldate,
i_vuelos-planetype)
WHERE carrid IN s_carrid.
APPEND i_vuelos. CLEAR i_vuelos.
ENDSELECT.

Al no usar todos los campos mejoramos el rendimiento y con la cláusulo INTO asignamos
directamente el valor al campo de la tabla interna.

Otra forma de sentencia select.

Fundacion Favaloro – Gerencia de Sistemas

20
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Existe otra forma de la sentencia SELECT mucho más eficiente nos permite almacenar los datos
en la tabla interna sin necesidad de utilizar la sentencia APPEND. El mismo efecto que en el caso
anterior lo obtendríamos usando...

SELECT * FROM sflight


INTO CORRESPONDING FIELDS OF TABLE i_vuelos
WHERE carrid IN s_carrid.

Seguimos utilizando el valor (*) para leer todos los campos.


La claúsula INTO CORRESPONDING FIELDS OF TABLE compara el nombre del campo de la tabla
de SAP con cada nombre de la tabla interna. Si encuentra coincidencia le asigna su valor
correspondiente. Por eso, es tan importante que el nombre de los campos de una tabla interna
sean iguales al nombre de los campos de una tabla SAP. De lo contrario, esta forma no se puede
utilizar.
Se mantiene la cláusula WHERE.
Se elimina la sentencia APPEND ya que la lectura deja de ser secuencial sino en bloques. Es decir,
SAP ya no tiene que recorrer uno a uno todos los registros, sino que toma el bloque de registros
que coinciden con la condición determinada a través de la cláusula WHERE y lo asigna en bloque
a la tabla interna.

Y aún, otra variación que podemos utilizar sería:

SELECT carrid connid fldate planetype FROM sflight


INTO TABLE i_vuelos
WHERE carrid IN s_carrid.

Esta forma es todavía más eficiente ya que:


Evita el uso de (*) y en su lugar sólo toma el valor de los campos que nos interesa (carrid, connid,
fldate y planetype).

La cláusula INTO TABLE asigna estos cuatro campos a los cuatro primeros campos de la tabla
interna. Así que, cuidado, el orden en que se hayan declarado estos campos en la tabla interna es
importante. Aquí no hay asignación por nombre de campo, sino por posición, el valor del campo
carrid de la tabla sflight se asignará al primer campo de la tabla interna, el valor del campo
connid de la tabla sflight se asignará al segundo campo de la tabla interna, y así sucesivamente.
Aquí ya no es tan importante el nombre de los campos de la tabla interna, pero sí la longitud y el
tipo de esos campos. Si no lo tenemos cuenta nuestro programa acabar abruptamente
con dump breve.

Fundacion Favaloro – Gerencia de Sistemas

21
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

La sentencia select para recuperar registros individualmente.

Finalmente, otra forma que se utiliza mucho, es la sentencia SELECT SINGLE.

SELECT SINGLE * FROM sflight


WHERE connid = p_connid.

Se utiliza si lo que nos interesa es únicamente un registro de nuestra tabla de base de datos. En
en el ejemplo, me interesa un número de vuelo en concreto y utilizo la sentencia SELECT con la
cláusula SINGLE. Es muy habitual que después de escribir esta sentencia se escriba una
condición del tipo IF sy-subrc ... ENDIF.

SELECT SINGLE * FROM sflight


WHERE connid = p_connid.
IF sy-subrc = 0.
i_vuelos-connid = sflight-connid.
APPEND i_vuelos. CLEAR i_vuelos.
ENDIF.

El campo sy-subrc es un campo de sistema y si el resultado es 0 significa que la sentencia que se


ha ejecutado anteriormente lo ha hecho de forma satisfactoria. Si el valor, en cambio, fuese 4 o
cualquier otro, entonces hemos de suponer que dentro de la tabla sflight no existe ningún
registro que confirme la condición dada en la cláusula WHERE.

Por supuesto, podemos hacer esta sentencia un poco más eficiente de la siguiente forma:

SELECT SINGLE connid FROM sflight


INTO i_vuelos-connid
WHERE connid = p_connid.
APPEND i_vuelos. CLEAR i_vuelos.

Haciendo joining de tablas

Fundacion Favaloro – Gerencia de Sistemas

22
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Ésta es ya una forma más avanzada de búsqueda de información en dos o más tablas de una
base de datos que nos permite guardar los datos en una sola tabla interna con criterios de
selección complejos. Como esto no es más que una introducción al lenguaje ABAP sólo la voy a
mencionar. Si queréis obtener información de su manejo podéis acudir a la
sentencia ABAPHELP y pedir ayuda por el keyword inner join.

Fundacion Favaloro – Gerencia de Sistemas

23
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Ejemplos
Curso Básico

Fundacion Favaloro – Gerencia de Sistemas

24
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJEMPLO 1

REPORT ZEXP0001.

WRITE: '111111'.
WRITE: '222222',
'333333'.
WRITE: /'111111'.
WRITE: 15 '333333'.
WRITE: / TEXT-001.
ULINE.
ULINE 8(6).
SKIP.
SKIP 2.
WRITE : 8 SY-LANGU.
WRITE : / SY-DATUM UNDER SY-LANGU.

Fundacion Favaloro – Gerencia de Sistemas

25
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Existen algunos tipos de variables llamadas variables del sistema. Ellas tienen informaciones y
datos del procesamiento, como el idioma de acceso (sy-langu), la fecha (sy-datum), la hora (sy-
uzeit), etc.. Esas informaciones están en la estructura SYST (Campos del sistema ABAP, que
podemos abreviar SY) dónde se puede aceder como muestra el ejemplo arriba, el nombre de la
estructura mas el campo que se desea.

EJEMPLO 2

REPORT ZEXC0002 NO STANDARD PAGE HEADING.

WRITE 'PAG 1'.

NEW-PAGE.

WRITE 'PAG 2'.

TOP-OF-PAGE.

Fundacion Favaloro – Gerencia de Sistemas

26
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

WRITE : 'EXEMPLO 2 - CURSO ABAP/4',


80 'Page',
SY-PAGNO.
ULINE.

EJEMPLO 3

REPORT ZEXP0003.

WRITE : 'NORMAL'.

FORMAT INTENSIFIED OFF.

WRITE : 'NEGRITO '.

FORMAT COLOR 1.

WRITE : 'FUNDO AZUL'.

Fundacion Favaloro – Gerencia de Sistemas

27
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

FORMAT COLOR OFF.

FORMAT INTENSIFIED ON.

WRITE : 'NORMAL'.

EXEMPLO 4

REPORT ZEXP0004.

DATA: NOME(20) TYPE C,


RG(10) TYPE I,
DATA LIKE BKPF-BUDAT,
HORA(8) VALUE '14:05:45'.

Fundacion Favaloro – Gerencia de Sistemas

28
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

MOVE 'Solution Center' TO NOME.


RG = 42159818.
DATA = '19973005'.
SKIP 2.
WRITE: 'Nome:',
NOME,
/ 'RG:',
RG UNDER NOME,
/ 'Data:',
DATA,
/ 'Hora:',
HORA.

EJEMPLO 5

REPORT ZEXP0005.

Fundacion Favaloro – Gerencia de Sistemas

29
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

PARAMETER: P_NOME1(15) TYPE C,


P_NOME2(15) TYPE C DEFAULT 'Abap Factory',
P_BOTAO1 RADIOBUTTON GROUP G1,
P_BOTAO2 RADIOBUTTON GROUP G1.

WRITE P_NOME1.

IF P_NOME2 NE 'ABAP FACTORY'.


WRITE P_NOME2.
ENDIF.

IF P_BOTAO1 = 'X'.
WRITE / 'BOTÃO 1 ACIONADO'.
ELSE.
WRITE / 'BOTÃO 2 ACIONADO'.
ENDIF.

Fundacion Favaloro – Gerencia de Sistemas

30
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

31
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

32
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

33
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJEMPLO 6

REPORT ZEXP0006 message-id za.

PARAMETER: P_PAIS LIKE T005S-LAND1.

TABLES T005H.

SELECT * FROM T005H WHERE LAND1 = P_PAIS ORDER BY CITYC.

WRITE: / T005H-Bezei,
T005H-LAND1.

ENDSELECT.

IF SY-SUBRC NE 0.
MESSAGE I000.
ENDIF.

Fundacion Favaloro – Gerencia de Sistemas

34
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

35
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

36
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJEMPLO 7

REPORT ZEXP0007.

TABLES: T005H..

DATA V_VAR1 VALUE '1'.

DATA: BEGIN OF T_T005H OCCURS 0,


LAND1 LIKE T005H-LAND1,
BEZEI LIKE T005H-BEZEI.
DATA: END OF T_T005H.

SELECT * FROM T005H WHERE LAND1 IN ('US', 'DE') ORDER BY LAND1.

T_T005H-LAND1 = T005H-LAND1.
T_T005H-BEZEI = T005H-BEZEI.
APPEND T_T005H.

Fundacion Favaloro – Gerencia de Sistemas

37
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

ENDSELECT.

IF SY-SUBRC NE 0.
WRITE TEXT-001.
ENDIF.

LOOP AT T_T005H.

ON CHANGE OF T_T005H-LAND1.

IF V_VAR1 = 0.
NEW-PAGE.
ENDIF.

FORMAT COLOR OFF.


WRITE 'COUNTRY CITY'.

CLEAR V_VAR1.

ENDON.

IF T_T005H-LAND1 = 'DE'.
FORMAT COLOR COL_TOTAL.
ELSE.
FORMAT COLOR COL_NORMAL.
ENDIF.

WRITE : / T_T005H-LAND1,
21 T_T005H-BEZEI.

ENDLOOP.

Fundacion Favaloro – Gerencia de Sistemas

38
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

39
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJEMPLO 8

REPORT ZEXP0008 MESSAGE-ID ZA.

TABLES: BKPF.

PARAMETER: P_BELNR LIKE BKPF-BELNR DEFAULT '5000000041',


P_ANO LIKE BKPF-GJAHR DEFAULT ' 2001'.

DATA: ARQ LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\curso.txt'.

DATA: BEGIN OF T_ZCURSO OCCURS 0,


ZDATA LIKE BKPF-BUDAT,
SPACE1 TYPE C VALUE ' ',
ZBELNR LIKE BKPF-BELNR,
SPACE2 TYPE C VALUE ' ',
ZGJAHR LIKE BKPF-GJAHR.
DATA: END OF T_ZCURSO.

SELECT * FROM BKPF WHERE BELNR = P_BELNR


AND GJAHR = P_ANO.

T_ZCURSO-ZDATA = BKPF-BUDAT.
T_ZCURSO-ZBELNR = BKPF-BELNR.
T_ZCURSO-ZGJAHR = BKPF-GJAHR.
APPEND T_ZCURSO.

ENDSELECT.

IF SY-SUBRC = 0.
CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING
* bin_filesize =''
* codepage =''
FILENAME = ARQ
* filetype =''
* mode =''
* wk1_n_format =''
* WK1_N_SIZE =''
* WK1_T_FORMAT = ' '

Fundacion Favaloro – Gerencia de Sistemas

40
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

* WK1_T_SIZE =''
* col_select =''
* col_selectmask =''
* importing
* filelength =
TABLES
DATA_TAB = T_ZCURSO
* fieldnames =
EXCEPTIONS
FILE_OPEN_ERROR =1
FILE_WRITE_ERROR =2
INVALID_FILESIZE =3
INVALID_TABLE_WIDTH =4
INVALID_TYPE =5
NO_BATCH =6
UNKNOWN_ERROR =7
OTHERS = 8.

MESSAGE E007.
ELSE.
MESSAGE E008.
ENDIF

Fundacion Favaloro – Gerencia de Sistemas

41
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

42
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

43
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJEMPLO 9

REPORT ZEXP0009 MESSAGE-ID ZA.

TABLES: ZCURSO.

DATA: ARQ LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\CURSO.TXT',


V_CONT TYPE I.

DATA: BEGIN OF T_ZCURSO OCCURS 0,


ZDATA LIKE ZCURSO-ZDATA,
SPACE1 TYPE C VALUE ' ',
ZBELNR LIKE ZCURSO-ZNUMERO,
SPACE2 TYPE C VALUE ' ',
ZGJAHR LIKE ZCURSO-ZANO.
DATA: END OF T_ZCURSO.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING
* CODEPAGE =''
FILENAME = ARQ
* FILETYPE =''
* HEADLEN =''
* LINE_EXIT =''
* TRUNCLEN =''
* USER_FORM =''
* USER_PROG =''
* importing
* filelength =
TABLES
DATA_TAB = T_ZCURSO
EXCEPTIONS
CONVERSION_ERROR =1
FILE_OPEN_ERROR =2
FILE_READ_ERROR =3
INVALID_TABLE_WIDTH =4
INVALID_TYPE =5
NO_BATCH =6
UNKNOWN_ERROR =7
OTHERS = 8.

Fundacion Favaloro – Gerencia de Sistemas

44
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

CLEAR V_CONT.

LOOP AT T_ZCURSO.

ZCURSO-ZDATA = T_ZCURSO-ZDATA.
ZCURSO-ZNUMERO = T_ZCURSO-ZBELNR.
ZCURSO-ZANO = T_ZCURSO-ZGJAHR.
INSERT ZCURSO.

IF SY-SUBRC = 0.
V_CONT = V_CONT + 1.
ENDIF.

ENDLOOP.

WRITE: 'FORAM INSERIDOS ', V_CONT, 'NA TABELA ZCURSO'.

Fundacion Favaloro – Gerencia de Sistemas

45
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

46
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Ejercícios
Curso Básico

Fundacion Favaloro – Gerencia de Sistemas

47
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJERCÍCIO 1

Desarrolle un programa ZEXC##01 que resulte la siguiente lista donde :

a) ## - Número de alumno

b) Variables de sistema utilizadas:


SY-DATUM
SY-UZEIT

Observaciones:

 Después de indicar la Development Class: GRABAR el objeto, pero NO grabar como Local Object,
cuando SAP pregunte por un Request Number;
 Elegir CREATE REQUEST y digitar la siguiente descripción:

Curso ABAP Grupo # - Ejercícios del módulo Básico

 Anotar el número de la request para ser utilizada durante todo este módulo del curso

Fundacion Favaloro – Gerencia de Sistemas

48
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

49
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJERCÍCIO 2

Desarrollar un programa ZEXC##02 que resulte el menu siguiente donde :

a) ## - Número de alumno

b) Variable del sistema utilizada:


SY-UNAME
SY-DATUM

Fundacion Favaloro – Gerencia de Sistemas

50
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EXERCÍCIO 3

Desarrollar un programa ZEXC##03 que tenga las seguintes características:

a) ## - Número de alumno

b) Simulación de una calculadora con 4 operaciones ( +, -, /, * ) y dos campos para entrada de datos

c) Exigir la entrada de todos los datos

d) Lay-out (de entrada como de salida) de acuerdo con los presentados a seguir

Fundacion Favaloro – Gerencia de Sistemas

51
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

52
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJERCÍCIO 4

Desarrollar un programa ZEXC##04 que tenga las siguientes características:

a) ## - Número de alumno

b) Que atraves de las tablas SPFLI y SFLIGHT genere un relatório de vuelos existentes para un
determinado percurso, siendo que la exposición de la aeronave utilizada y el precio del pasaje se realize
apenas cuando sea una operación de reserva.

c) Lay-out (de entrada como de salida) de acuerdo con los presentados a seguir

d)Campos utilizados :
SPFLI-CARRID
SPFLI-CITYFROM
SPFLI-CITYTO
SPFLI-FLTIME
SPFLI-ARRTIME
SPFLI-DEPTIME
SFLIGHT-FLDATE
SFLIGHT-PLANETYPE
SFLIGHT-PRICE

Fundacion Favaloro – Gerencia de Sistemas

53
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

54
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

55
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

56
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

57
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

58
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

EJERCÍCIO 5

Desarrollar un programa ZEXC##05 que a partir de un archivo texto tenga la declaración de una de las
aeronaves nombradas a seguir, sea capaz de crear otro archivo con la declaración de la aeronave asi
como el nombre de la compañia aerea. El programa debe tener las siguientes características:
a) ## - Número de alumno
b) Exibir el mensaje en caso positivo al crear el archivo final como en caso de algun error.
c) Lay-out (de entrada como de salida) como los presentados a seguir.
d) Campos utilizados: SFLIGHT-CARRID SFLIGHT-PLANETYPE

Fundacion Favaloro – Gerencia de Sistemas

59
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

Fundacion Favaloro – Gerencia de Sistemas

60
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

DESARROLLO EJERCÍCIO 1

REPORT ZEXC0001.

SKIP 5.

ULINE.

ULINE 30(29).

WRITE: /37 TEXT-001.

SKIP.

WRITE: 30'DIA',
49 SY-DATUM,

Fundacion Favaloro – Gerencia de Sistemas

61
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

/'HORA' UNDER 'DIA',


SY-UZEIT UNDER SY-DATUM.

SKIP.

ULINE 30(29).

ULINE.

DESARROLLO EJERCÍCIO 2

REPORT ZEXC0002 NO STANDARD PAGE HEADING.

SKIP 4.

ULINE 4(88).

WRITE: /4 '|',
5 TEXT-001,
68 '|',
77 SY-DATUM,
91 '|'.

FORMAT INTENSIFIED OFF.

WRITE: 70 'Data: ',


/1 ''.

ULINE 4(88).

WRITE: /5 'Nome:',
70 'Usuário:'.

FORMAT INTENSIFIED ON.

WRITE: 4 '|',
11 'Solution Center',
68 '|',
79 SY-UNAME,

Fundacion Favaloro – Gerencia de Sistemas

62
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

91 '|',
/1 ''.

ULINE 4(88).

DESARROLLO EJERCÍCIO 3

REPORT ZEXC0003 MESSAGE-ID YA.

PARAMETER : P_FATOR1(5) TYPE I,


P_FATOR2(5) TYPE I,
P_ADD RADIOBUTTON GROUP G1,
P_SUB RADIOBUTTON GROUP G1,
P_MULT RADIOBUTTON GROUP G1,
P_DIV RADIOBUTTON GROUP G1.

DATA : RESULT(6) TYPE I,


OPERACAO(15) TYPE C.

IF P_FATOR1 = '' OR P_FATOR2 = ''.


MESSAGE I005.
ELSE.

IF P_ADD = 'X'.
RESULT = P_FATOR1 + P_FATOR2.
OPERACAO = 'SOMA'.
ENDIF.

IF P_SUB = 'X'.
RESULT = P_FATOR1 - P_FATOR2.
OPERACAO = 'SUBTRAÇÃO'.
ENDIF.

IF P_MULT = 'X'.
RESULT = P_FATOR1 * P_FATOR2.
OPERACAO = 'MULTIPLICAÇÃO'.
ENDIF.

IF P_DIV = 'X'.
RESULT = P_FATOR1 / P_FATOR2.

Fundacion Favaloro – Gerencia de Sistemas

63
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

OPERACAO = 'DIVISÃO'.
ENDIF.

SKIP 3.

ULINE.

FORMAT COLOR COL_NORMAL.

WRITE : 'OPERADOR 1 =',


P_FATOR1,
132 ' ',
/ 'OPERADOR 2 =',
P_FATOR2,
40 'OPERAÇÃO =',
OPERACAO,
132 ' '.

ULINE.

FORMAT COLOR COL_TOTAL.

WRITE : / 'RESULTADO =',


RESULT,
132 ' '.

ULINE.

ENDIF.

DESARROLLO EJERCÍCIO 4

REPORT ZEXC0004 MESSAGE-ID YA NO STANDARD PAGE HEADING.

PARAMETER: P_ORIGEM LIKE SPFLI-CITYFROM,


P_DESTIN LIKE SPFLI-CITYTO,
P_RESERV RADIOBUTTON GROUP G1,
P_DEST RADIOBUTTON GROUP G1.

TABLES: SPFLI, SFLIGHT.

Fundacion Favaloro – Gerencia de Sistemas

64
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

DATA : V_CONTADOR TYPE I,


V_VAR1 TYPE I.

DATA: BEGIN OF T_VOO OCCURS 0,


CARRID LIKE SPFLI-CARRID,
CITYFROM LIKE SPFLI-CITYFROM,
CITYTO LIKE SPFLI-CITYTO,
FLTIME LIKE SPFLI-FLTIME,
ARRTIME LIKE SPFLI-ARRTIME,
DEPTIME LIKE SPFLI-DEPTIME,
FLDATE LIKE SFLIGHT-FLDATE,
PLANETYPE LIKE SFLIGHT-PLANETYPE,
PRICE LIKE SFLIGHT-PRICE.
DATA: END OF T_VOO.

SELECT * FROM SPFLI WHERE SPFLI-CITYFROM = P_ORIGEM


AND SPFLI-CITYTO = P_DESTIN.

SELECT * FROM SFLIGHT WHERE SFLIGHT-CARRID = SPFLI-CARRID


AND SFLIGHT-CONNID = SPFLI-CONNID.

V_CONTADOR = V_CONTADOR + 1.
T_VOO-CARRID = SPFLI-CARRID.
T_VOO-CITYFROM = SPFLI-CITYFROM.
T_VOO-CITYTO = SPFLI-CITYTO.
T_VOO-DISTANCE = SPFLI-DISTANCE.
T_VOO-FLTIME = SPFLI-FLTIME.

T_VOO-ARRTIME = SPFLI-ARRTIME.
T_VOO-DEPTIME = SPFLI-DEPTIME.
T_VOO-DISTID = SPFLI-DISTID.
T_VOO-FLDATE = SFLIGHT-FLDATE.
T_VOO-PLANETYPE = SFLIGHT-PLANETYPE.
T_VOO-PRICE = SFLIGHT-PRICE.
APPEND T_VOO.

ENDSELECT.
ENDSELECT.

IF SY-SUBRC NE 0.

Fundacion Favaloro – Gerencia de Sistemas

65
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

MESSAGE E006.
ENDIF.
SKIP.

WRITE: TEXT-001,
V_CONTADOR,
95 ''.

SKIP 2.

V_VAR1 = 1.

LOOP AT T_VOO.

IF V_VAR1 = 1.
ULINE.
FORMAT COLOR COL_GROUP.
WRITE: / '|',
30 T_VOO-CITYFROM,
T_VOO-CITYTO,
95 '|'.

CLEAR V_VAR1.

ULINE.
FORMAT COLOR COL_HEADING.

WRITE: / '|',
2 'OPERADORA',
13 'DATA',
26 'TEMPO DE VOO',
41 'SAÍDA',
51 'CHEGADA'.

IF P_RESERV = 'X'.
WRITE: 61 'AERONAVE',
89 'PREÇO'.
ENDIF.

WRITE: 95 '|'.

Fundacion Favaloro – Gerencia de Sistemas

66
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

ULINE.
ENDIF.

FORMAT COLOR COL_NORMAL.


WRITE: / '|',
2 T_VOO-CARRID,
13 T_VOO-FLDATE,
26 T_VOO-FLTIME,
41 T_VOO-DEPTIME,
51 T_VOO-ARRTIME.

IF P_RESERV = 'X'.
WRITE: 61 T_VOO-PLANETYPE,
75 T_VOO-PRICE.
ENDIF.

WRITE: 95 '|'.

ENDLOOP.

ULINE

DESARROLLO EJERCÍCIO 5

REPORT ZEXC0005 MESSAGE-ID YA.

TABLES: SFLIGHT.

PARAMETER: P_ARQ LIKE RLGRAP-FILENAME DEFAULT 'C:\TEMP\NAVE.TXT',


P_ARQ2 LIKE RLGRAP-FILENAME DEFAULT 'C:\TEMP\DADOS.TXT'.

DATA: BEGIN OF T_ZCURSO OCCURS 0,


ZAERONAV LIKE SFLIGHT-PLANETYPE.
DATA: END OF T_ZCURSO.

DATA: BEGIN OF T_ZCURSO2 OCCURS 0,


ZAERONAV LIKE SFLIGHT-PLANETYPE,
ESPACE1 TYPE C VALUE ' ',
ZCOMPANY LIKE SFLIGHT-CARRID.

Fundacion Favaloro – Gerencia de Sistemas

67
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

DATA: END OF T_ZCURSO2.

CALL FUNCTION 'WS_UPLOAD'


EXPORTING
* CODEPAGE =''
FILENAME = P_ARQ
* FILETYPE =''
* HEADLEN =''
* LINE_EXIT =''
* TRUNCLEN =''
* USER_FORM =''
* USER_PROG =''
* importing
* filelength =
TABLES
DATA_TAB = T_ZCURSO
EXCEPTIONS
CONVERSION_ERROR =1
FILE_OPEN_ERROR =2
FILE_READ_ERROR =3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE =5

NO_BATCH =6
UNKNOWN_ERROR =7
OTHERS = 8.
SELECT * FROM SFLIGHT WHERE PLANETYPE = T_ZCURSO-ZAERONAV.

T_ZCURSO2-ZAERONAV = SFLIGHT-PLANETYPE.
T_ZCURSO2-ZCOMPANY = SFLIGHT-CARRID.
APPEND T_ZCURSO2.

ENDSELECT.

IF SY-SUBRC = 0.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =''
* CODEPAGE =''
FILENAME = P_ARQ2
* FILETYPE =''

Fundacion Favaloro – Gerencia de Sistemas

68
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP

* MODE =''
* WK1_N_FORMAT =''
* WK1_N_SIZE =''
* WK1_T_FORMAT =''
* WK1_T_SIZE =''
* COL_SELECT =''
* COL_SELECTMASK =''
* importing
* filelength =
TABLES
DATA_TAB = T_ZCURSO2
* FIELDNAMES =
EXCEPTIONS
FILE_OPEN_ERROR =1
FILE_WRITE_ERROR =2
INVALID_FILESIZE =3
INVALID_TABLE_WIDTH =4
INVALID_TYPE =5
NO_BATCH =6
UNKNOWN_ERROR =7
OTHERS = 8.

MESSAGE I007.
ELSE.
MESSAGE E008.
ENDIF.

Fundacion Favaloro – Gerencia de Sistemas

69

Potrebbero piacerti anche