Академический Документы
Профессиональный Документы
Культура Документы
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
Curso Básico
ABAP/4
1
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
Instancia X Client
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).
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
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
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:
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:
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.
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
7
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
8
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
Tipos de Programa
R Report
O On line
B Batch
I Consult standard for interface
X Include
S Sapscript
9
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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.
11
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
Declaración de Datos
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
o c: carácter o alfanumérico.
13
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
o t: para la hora.
o p: numéricos empaquetados.
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
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
*****************************************************************
*******
*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
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.
DATA:
i_aviones TYPE STANDARD TABLE OF ty_aviones.
Resumen de sentencias
Tables.
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.
17
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
Recuperar Datos
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.
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.
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.
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.
Una forma de mejorar el rendimiento sería no utilizar la cláusula (*) sino indicar específicamente
los campos que necesitamos llenar.
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.
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...
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.
21
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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.
Por supuesto, podemos hacer esta sentencia un poco más eficiente de la siguiente forma:
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.
23
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
Ejemplos
Curso Básico
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.
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
NEW-PAGE.
TOP-OF-PAGE.
26
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJEMPLO 3
REPORT ZEXP0003.
WRITE : 'NORMAL'.
FORMAT COLOR 1.
27
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
WRITE : 'NORMAL'.
EXEMPLO 4
REPORT ZEXP0004.
28
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJEMPLO 5
REPORT ZEXP0005.
29
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
WRITE P_NOME1.
IF P_BOTAO1 = 'X'.
WRITE / 'BOTÃO 1 ACIONADO'.
ELSE.
WRITE / 'BOTÃO 2 ACIONADO'.
ENDIF.
30
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
31
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
32
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
33
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJEMPLO 6
TABLES T005H.
WRITE: / T005H-Bezei,
T005H-LAND1.
ENDSELECT.
IF SY-SUBRC NE 0.
MESSAGE I000.
ENDIF.
34
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
35
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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..
T_T005H-LAND1 = T005H-LAND1.
T_T005H-BEZEI = T005H-BEZEI.
APPEND T_T005H.
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.
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.
38
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
39
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJEMPLO 8
TABLES: BKPF.
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 = ' '
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
41
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
42
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
43
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJEMPLO 9
TABLES: ZCURSO.
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.
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.
45
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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
47
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJERCÍCIO 1
a) ## - Número de alumno
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:
Anotar el número de la request para ser utilizada durante todo este módulo del curso
48
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
49
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJERCÍCIO 2
a) ## - Número de alumno
50
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EXERCÍCIO 3
a) ## - Número de alumno
b) Simulación de una calculadora con 4 operaciones ( +, -, /, * ) y dos campos para entrada de datos
d) Lay-out (de entrada como de salida) de acuerdo con los presentados a seguir
51
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
52
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
EJERCÍCIO 4
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
53
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
54
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
55
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
56
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
57
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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
59
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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).
SKIP.
WRITE: 30'DIA',
49 SY-DATUM,
61
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
SKIP.
ULINE 30(29).
ULINE.
DESARROLLO EJERCÍCIO 2
SKIP 4.
ULINE 4(88).
WRITE: /4 '|',
5 TEXT-001,
68 '|',
77 SY-DATUM,
91 '|'.
ULINE 4(88).
WRITE: /5 'Nome:',
70 'Usuário:'.
WRITE: 4 '|',
11 'Solution Center',
68 '|',
79 SY-UNAME,
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
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.
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.
ULINE.
ULINE.
ENDIF.
DESARROLLO EJERCÍCIO 4
64
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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.
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 '|'.
66
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
ULINE.
ENDIF.
IF P_RESERV = 'X'.
WRITE: 61 T_VOO-PLANETYPE,
75 T_VOO-PRICE.
ENDIF.
WRITE: 95 '|'.
ENDLOOP.
ULINE
DESARROLLO EJERCÍCIO 5
TABLES: SFLIGHT.
67
ABAP Training
Fundación Favaloro
para la Docencia e Investigación Médica Curso básico para programador ABAP
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 =''
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.
69