Sei sulla pagina 1di 52

APUNTES DE ABAP/4

Asignacin de ATRIBUTOS.

1. Tipo: modo de ejecucin del programa


Si es un report program 1 programa normal
Si es un module pool M normal + diseo de pantalla
Si es un include I especie de subrutinas
Si es un programa de funciones F
Si es un pool de subrutinas S
2. Status
P si es un programa standard de SAP
K si es un programa de cliente productivo
S si es un programa de sistema
T si es un programa de test
3. Aplicacin: Abreviatura de la aplicacin
* para cualquier aplicacin
4. Grupo Autorizaciones
5. Clase desarrollo

Maysculas/Minsculas
Bloq.editor
Clculo de coma fija

VARIANTES.

Las variantes son todo aquel grupo de variables que son necesarias u
obligatorias a la hora de ejecutar un programa y que por facilidad a la hora
de ejecutarlo se graban todos los datos de las variables bajo un mismo
nombre que es la variante.

ELEMENTOS DE TEXTO.

Existen tres tipos:

1. Ttulos y cabeceras:

En la pantalla aparecen tres divisiones:

a. Tit. Titulo del programa

1
APUNTES DE ABAP/4

b. Cabecera lista

c. Cabecera de columnas. Estas aparecen en todas las pantallas que ocupe


el programa. Por ejemplo si nosotros tenemos que sacar tres variables
distintas, producto, cantidad, precio_unidad y total. Las colocaramos
en esta seccin y en el programa nos apareceran de la siguiente manera:

Producto Cantidad Precio_Unidad Total

Su posicin depender de la que nosotros le demos, para ello


utilizaremos:

En donde cada nmero corresponde a las columnas.

2. Textos de seleccin: Sirve para asignar a una variable del tipo select-
options o parameters un texto para cuando a la hora de salir por pantalla o
ser impresas en vez de salir, por ejemplo, el nombre de la variable cant
saliera cantidad del producto.

3. Smbolos de texto: Sirven para sacar cualquier mensaje en la parte


inferior de la pantalla, por ejemplo mensajes de error, de falta por
completar algn campo, ...

Los pasos para comenzar a escribir un programa son:

Dar un nombre al programa, pulsar el botn crear.


Rellenar los atributos y pulsar el botn , al pulsar dicho botn me
aparece una pantalla en la cual me pide la clase de desarrollo ( si no se
sabe, pulsamos el botn objeto local ).

Una vez hecho esto pulsamos F3 para volver a la pantalla anterior y


pulsamos el botn , apareciendo el listado del programa.

2
APUNTES DE ABAP/4

Para definir el tamao de la pgina a imprimir, es imprescindible para


obtener una buena presentacin colocar en la misma lnea del report las
siguientes rdenes:

Line-size nmero: ancho de columnas 80 normal y 132 apaisado

Line count nmero: nmero de lneas por pgina imprimible 65 normal


A4

Para no imprimir ninguna cabecera propia colocaremos en la lnea del


report: no standard page heading

Despus de cada orden, es necesario .

Para definir una variable: data

Si existen ms de una variable es necesario colocar : despus de


data, en caso de que slo exista una sola, no es necesario. Es aplicable para
cualquier cosa.

ejemplo: data x type i.

Podemos definir tambin una variable como un objeto de una lnea


existente de una tabla interna:

ejemplo: data <f> like line of <itab>

Para definir un tipo de dato: types.

ejemplo: types t_name(25) type c.

Este dato (types) no es nada a menos que en data lo asignemos a alguna


variable, es como si lo que hemos definido fuera un tipo de algo y se lo
tuviramos que asignar a algo.

Podemos tambin crear tablas cuyos campos dependen de otra ya


creada, mediante el uso de types.

3
APUNTES DE ABAP/4

ejemplo: types: begin of name,


title(5) type c,
first-name type c,
last-name type c,
end of name. Client posee tres campos:
Title, first-name y last-
Types: begin of mylist. name. Su declaracin ser:
<itab>-client-<campo>
client type name,
number type i,
end of mylist.

Para definir la longitud del campo, despus del nombre y entre


parntesis y sin espacios: t_name(25)

Para definir un tabla interna ( cadena de campo ), creacin de


objetos complejos. En su interior generamos todos los campos que
contenga dicha tabla.

Sintaxis: data: begin of nombre_record

campos

end of nombre_record

Tambin podemos definir una tabla interna, asignando un types ya


definido anteriormente con la siguiente expresin:

Sintaxis: data: nombre_table like nombre_type occurs <lneas>

COMANDOS.

Cualquier orden que sea repetida varias veces:

write xyz.
write name.

Podemos poner: write: xyz, name.

4
APUNTES DE ABAP/4

Colocamos : despus de la orden y separamos las variables por comas


y la ltima terminada en . Para escribir un subcampo es necesario hacer
tambin referencia al campo que lo posee de la siguiente manera:

write nombre_subcampo-tabla_interna

Para copiar el contenido de un objeto dato a otro: move

Sintaxis: move objeto_origen to objeto_destino.

Para mostrar un mensaje en pantalla: write

Sintaxis: write texto.

Si queremos escribir una variable de texto la sintaxis vara a:

Sintaxis: write nombre_variable

Para aadir una cantidad a una variable: add.

Sintaxis: add cantidad to nombre de variable

Para insertar comentarios, existen dos maneras:

1. Mediante * en una columna


2. Mediante en una lnea.

Estructura de un programa:
REPORT nombre ... .
o
PROGRAM nombre ... .

* Seccin de declaraciones.
DATA:
TABLES:

* Seccin de estado.

5
APUNTES DE ABAP/4

Para generar lneas en blanco: skip

Sintaxis: skip nmero_lneas.

Para que una opcin de texto comience en una columna determinada


colocamos:

Por ejemplo: write: 5 texto.

Las variables de la hora y del da actual son internas y responden al


nombre de:

hora: sy-uzeit
da: sy-datum. El almacenamiento se realiza en el formato
yyyymmdd y la representacin en el formato
ddmmyyyy

Para ms informacin sobre los campos sy ver Anexo A.

Para bajar una lnea: /

Para subrayar una lnea: uline.

Sintaxis: uline (numero_espacios).

La opcin under permite visualizar un valor justo debajo del valor


superior.

Sintaxis: variable_a_colocar under variable_superior

Para empezar una nueva pgina: new-page.

Numeracin de textos:

nombre_var_1(001), ...
nombre_var_2(002), ...

6
APUNTES DE ABAP/4

Tipos de datos y sus atributos:

Tipo de dato Significado Longitud Longitud


Permitida
P Nmero decimal 8 1-16
I Entero * -
F Flotante * -
N Texto Numrico 1 1-mx
C Texto 1 1-mx
D Da yyyymmdd 8 8
T Hora hhmmss 6 6
X Hexadecimal 1 1-mx

* : valor especificado por la mquina, mx: aprox. 64.000 bytes.

Para introducir un valor decimal tenemos que poner el nmero entre


comillas simples: por ejemplo: 2.7 para no hacer confundir el punto
decimal con el de fin de lnea.

Para las constantes se admiten dos tipos:

1. Numricas para los tipos Pe I


2. De texto para los tipos C y N

Declaracin de data:

Sintaxis: DATA: ......

Reglas a la hora de asignar nombres de campo:

1. No debe tener nunca ms de 30 caracteres.


2. No se deben usar: ( ) + . , :
3. El espacio es un campo predefinido.
4. No podemos usar un nombre de parmetro en uno de campo.

7
APUNTES DE ABAP/4

Cuando declaremos varios campos que sean del mismo tipo se pueden
declarar de la siguiente manera:

name1(20) type C.
name2 like name1.
name3 like name1.

Para declarar constantes utilizamos el comando constants:

Sintaxis: constants: <nombre_cte> type <tipo> value <valor_inicial>

Para representar nmeros en coma flotante, exponent y decimals.

Sintaxis: nmero exponent n_exponente decimals n_decimales

Para realizar asignaciones tenemos dos modos:

1. Mediante move, ya explicado en la pgina 1.

2. O mediante compute cuya sintaxis es:

compute nombre_variable = nombre_variable (+ nombre_variable/nmero)

Para abreviar la orden, la palabra compute puede ser omitida* Expresiones


aritmticas:

Operadores Funciones
+ - / * sqrt exp log sin cos
Div Divisin entera srten Longitud de la cadena
Mod Mdulo

Los operadores, as como los parntesis son considerados como


palabras. Adems de separados por espacios.

8
APUNTES DE ABAP/4

Ejemplo de aplicacin:

dato_1 = 1234567890 /* Est definido como carcter


dato_2 = 19920715 /* Definido como carcter

write: dato_1+8(2) /* el puntero se encuentra en la primera posicin


de dato_1, lo desplazamos 8 espacios y
representamos los dos caracteres siguientes al
puntero

puntero 1 2 3 4 5 6 7 8 9 0 represento las dos cifras


siguientes
lo muevo 8 espacios

write dato_2+6(2) = 01

estos dos datos los


1 9 9 2 0 7 1 5 cambiamos por 01

1 9 9 2 0 7 0 1

Para declarar campos internos, para los cuales se nos permite


modificar los valores desde la pantalla pero sin la posibilidad de dar un
rango de valores: parameters.

Sintaxis: parameters: ...............................

Podemos utilizar un valor por defecto default ---- que si no le


asignamos a la variable una cantidad de caracteres, por ejemplo casa(8),
el defecto slo ser de un carcter. Si tenemos que es un intervalo
podemos incluir valores por defecto tanto para el comienzo como para el
final, usando: default -- to --

Tambin podemos declarar campos internos mediante el uso de


select-options, es parecido a los parameters pero tiene la posibilidad de
dar un rango de uso adems de la seleccin mltiple, que es el botoncito
de una flecha con tres puntos suspensivos. Dentro de la asignacin de los
select-options en vez de utilizar la orden like utilizaremos la orden for.

9
APUNTES DE ABAP/4

Como trabaja select-options:

Al poner la orden select-options <nombre_tabla> for <tabla_transparente-


nombre_campo>, se crea una tabla de nombre el dado y que contiene 4
campos:
nombre_tabla

tabla_interna SIGN OPTION LOW HIGH


I BT ---- ----

Los distintos campos representan:


SIGN: puede tomar: I incluido E excluido
OPTION: pude ser: EQ, EN, LE, LT, GE, GT, BT, NB, CP, NP
LOW: valor mnimo del intervalo
HIGH: valor mximo del intervalo

Lo que hace es crear un intervalo dentro del cual encontrar en el campo de


la tabla transparente en que le pedimos.

Matchcode : sirve para que aparezcan todas las posibilidades que


tiene un campo, o sea, parecido a una bsqueda rpida.

Existen de dos tipos:

1. Vista de ayuda: saca campos fijos con ayudas fijas.


2. Matchcode: saca varias posibilidades. Se distinguen porque ste
ltimo posee un tringulo en la parte superior derecha.

Seleccin mltiple: Sirve para restringir an ms la bsqueda que


queremos.
Para obligar a rellenar un parameters o un select-options es
necesario colocar la palabra obligatory, por lo que al ejecutarlo en el
cuadrado correspondiente aparecer una ?.

10
APUNTES DE ABAP/4

Un field-symbols no es un espacio de reserva para un campo, pero


apunta al campo el cual no se conoce hasta la ejecucin del programa. Es
comparable al concepto de puntero

Sintaxis: Para campos internos field-symbols <nombre_field-symbol>

Podemos dar un tipo al field-symbol, ya sea desde ninguna especificacin de


tipo hasta type table, type c, n, p ot , etc.

Ejemplo: DATA DAT(8) VALUE '09161995'.


FIELD-SYMBOLS <FS> TYPE D.
ASSIGN DAT TO <FS>.
WRITE <FS>.

Podemos asignar a un field-symbol la estructura de un campo o tabla


ya existente mediante el comando: field-symbols <nombre_field-symbol>
structure <s> default <f>. Si la estructura es una tabla transparente no
es necesario definirla en el comando tables.
Podemos tambin realizar una asignacin dinmica mediante el uso de
variables.

Para asignar un campo cualquiera a un smbolo de campo, assign

Sintaxis: assign nombre_campo to <simbolo_campo>

Si nosotros asignamos a un parameters un campo, como puede ser sy-


datum, al hacer referencia a l, por ejemplo en una asignacin lo
tendremos que colocar entre parntesis.

Ejemplo de aplicacin:

parameters: sy_field(8) default sy-datum.


field-symbols: <field>.
assign (sy_field) to <field>.

S Y - D A T U M

Y el campo <field> tendr la fecha que corresponda: 19940218

11
APUNTES DE ABAP/4

Para ejecutar el programa paso a paso y conocer orden por orden los
valores de las variables que usamos, siempre y cuando las nombremos en
l, usaremos la opcin debugging.

Las funciones ms importantes de debugging son:

Paso a paso: va ejecutando orden por orden.


Ejecutar: todo.
Continue: se realiza todo de una vez.
Tablas: muestra los contenidos de las tablas internas.

Para definir una tabla transparente usaremos el comando tables:

Sintaxis: tables: <tabla_transparente>.

Para seleccionar y poder leer las entradas grabadas de la tabla


transparente, usaremos el comando: select.

Sintaxis: select * from <tabla_transparente>.


<bloque de sentencias>.
endselect.

El select verifica toda la tabla hasta que no encuentra ningn valor y


por lo tanto se pasa a la instruccin inmediatamente posterior al endselect
Podemos eliminar en la seleccin aquellas lneas que se encuentren
duplicadas sin ms que colocar en la definicin la opcin select distinct.

Podemos utilizar las siguientes funciones agregadas al select como


son:

MIN (<field>) valor mnimo MAX (<field>) valor mximo


AVG (<field>) valor medio SUM (<field>) suma de la columna
COUNT (*) nmero de entradas a la tabla.

Podemos tambin realizar una seleccin simple, o sea, que realice slo
una nica asignacin, utilizando select single por lo que no es necesario
la colocacin al final de endselect al no ser un bucle.

12
APUNTES DE ABAP/4

Para realizar esta funcin pero con tablas internas, utilizaremos en


vez de select el comando loop at.
Sintaxis: Loop at <tabla_interna> (con header line)
Loop at <tabla_interna> into <work area> (sin header line)
<bloque de sentencias>.
endloop.

Podemos hacer una seleccin que no sea ni mltiple ni simple sin ms


que utilizar: SELECT * ... INTO TABLE <itab> PACKAGE SIZE
<n>....

Si estamos en un bucle haremos la seleccin de cada n lneas.

Para conocer el nmero de veces que realiza un bucle, usaremos el


campo de sistema sy-index que devuelve el nmero de veces que se hace
el bucle.

Despus de un select * from o un loop at se suele poner una


condicin para saber si alguna tabla no contiene ningn valor,
utilizaremos el campo de sistema: sy-subrc el cual devuelve cero si en la
tabla hay algo y devuelve un valor no-cero si est vaca.
El uso del * es principalmente para que recorra todos los campos de la
tabla, por lo que se puede sustituir el asterisco por el nombre de un
campo. Para ello usaremos la siguiente sintaxis:

Sintaxis: select a1 ... an into corresponding field of <tabla> from <tabla>

Si las tablas son iguales es suficiente colocar into.

Operadores:
Operador Smbolo Significado
Eq = igual
Ne <> no igual
it < menor que
le <= menor o igual que
gt > mayor que
ge >= mayor o igual que
between a and b (be) no tiene dentro intervalo

13
APUNTES DE ABAP/4

no between (nb) no tiene fuera intervalo


like (CP) no tiene contiene patrn
NP no tiene no contiene patrn
in (a,b) no tiene igual a a b

Para leer una entrada de una tabla interna, usamos read table:

Sintaxis: Read table <tabla_interna> ( into <work area> ) with key

Para describir una tabla interna ( nmero de lneas y columnas ),


utilizamos el comando: describe table.

Sintaxis: DESCRIBE TABLE <itab> [LINE <lin>] [ OCCURS <occ>]

Podemos insertar lneas de una tabla en otra utilizando el comando:

Sintaxis: INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO


<itab2< [INDEX <idx>]

Para escribir un text (o campo) en una lnea de la tabla, utilizamos:

Sintaxis: WRITE <f> TO <itab> [+posicin] INDEX <linea>

Por ejemplo: write nice to code+31 index 2


Posicin 32 del campo
code y en la lnea dos.

Para introducir una lnea en una tabla de base de datos utilizamos:

Sintaxis: insert into <dbtab> values <wa>

Para introducir varias lneas en una tabla de base de datos desde una
tabla interna:

Sintaxis: insert <dbtab> from <itab>

14
APUNTES DE ABAP/4

Para cambiar una lnea de una tabla:

Sintaxis: update <dbtab>

Para borrar varias lneas mediante una accin simple:

Sintaxis: delete from <dbtab> where <condictions>

Podemos restringir la seleccin de una tabla mediante la opcin


where.

Sintaxis: where nombre_campo_tabla = condicin

Para describir un campo utilizamos el comando describe fields <f>


con alguna de las siguientes opciones:

1. Lenght len retorna la longitud del campo en el campo len.


2. Type type retorna el tipo de dato en el campo type.
3. Type type compounts n igual que type pero para estructuras,
type puede contener u (estructura si tabla interna) y v
(estructura que al menos posee una tabla interna) y lo devuelve en
type, mientras que en n se introduce el nmero de componentes de
la estructura, sino fuera una estructura se encontrara a 0.
4. Outout-lenght len retorna la longitud de salida del campo f en
la variable len
5. Decimals n retorna el nmero de decimales de f en la variable
n
6. Edit mask mask

Estados de control:

a) Casos de distincin:
if .......................................... endif
on change of ....................... endon
case .................................... endcase

b) Bucles:
do .................................. endo

15
APUNTES DE ABAP/4
while .............................. endwhile

16
APUNTES DE ABAP/4

c) Otros
check
exit
stop

Nota: otro operador: is initial ..... . valor inicial

Operadores para comparacin de cadenas:

a ca b a contiene al menos un carcter de b


a co b a contiene solo caracteres de b ( en cualquier orden )
a cs b a contiene la cadena de caracteres de b ( los espacios en
blanco son ignorados )
a cp b a contiene el patrn de b ( * equivale a cualquier cadena de
caracter y + para cualquier caracter simple ).

Estados de control:

1. IF.

Sintaxis: Hay tres modalidades dependiendo de las expresiones


lgicas:

IF <expresin lgica>

<bloque de sentencias>
ENDIF.

IF <expresin lgica>
<bloque de sentencias>
ELSE
<bloque de sentencias>
ENDIF.

17
APUNTES DE ABAP/4

IF <expresin lgica>
<bloque de sentencias>
ELSEIF <expresin lgica>
<bloque de sentencias>
ELSEIF <expresin lgica>
<bloque de sentencias>
ELSE
ENDIF.

2. CASE.

Sintaxis: CASE <field>.

WHEN <value1>.
<bloque de sentencias>
WHEN <value2>.
<bloque de sentencias>
WHEN OTHERS.
<bloque de sentencias>
ENDCASE.

3. ON CHANGE OF. Slo se procesan las rdenes en el caso de que los


contenidos de los campos especificados varen.
Sintaxis: ON CHANGE OF <field>.

Tambin podemos utilizar or para referirnos a varios campos.


Sintaxis: ON CHANGE OF <field1> OR <field2> OR <field3>.

4. DO Loop: Hacer el bucle.


Sintaxis: DO <n> TIMES

El parmetro <n> times puede ser opcional, en el caso de que no se coloque


habr que colocar una terminacin: EXIT.

Dentro del do podemos colocar una opcin para variar los campos
segn se vayan realizando las veces del bucle:

18
APUNTES DE ABAP/4

Sintaxis: VARYING <f> FROM <f1> NEXT <f2>

Ejemplo de aplicacin:

DATA: BEGIN OF TEXT,


WORD1(4) VALUE 'This',
WORD2(4) VALUE 'is',
WORD3(4) VALUE 'a',
WORD4(4) VALUE 'loop',
END OF TEXT.
DATA: STRING1(4), STRING2(4).
DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD4.
WRITE STRING1.
IF STRING1 = 'is'.
STRING1 = 'was'.
ENDIF.
ENDDO.
SKIP.
DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3
VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.
WRITE: STRING1, STRING2.
ENDDO.

This produces the following output:


This is a loop

5. WHILE Loop. Hacer el bucle mientras.


Sintaxis: WHILE <expresin lgica>.
<bloque de sentencias>
ENDWHILE.

Tambin podemos variar los campos al igual que hacamos en el DO


pero aqu usamos la opcin VARY <f> FROM <f1> NEXT <f2>

6. CHECK Loop. Si las condiciones de la expresin lgica no es satisfactoria,


las subsecuencias no sern ejecutadas. Si la condicin CHECK dentro de
una subrutina no es satisfecha, las subrutinas terminan.
Sintaxis: CHECK <expresin lgica>.

NOTA: La orden EXIT dentro de un bucle hace que dicho bucle termine.

19
APUNTES DE ABAP/4

Para mover de un campo a otro, utilizamos la opcin: move-


corresponding.
Sintaxis: MOVE-CORRESPONDING <f1> TO <f2>.

Para declarar una tabla interna, utilizaremos la orden:

Sintaxis: DATA: BEGIN OF <tabla_interna> OCCURS <nmero>

END OF <tabla_interna>.

En donde occurs indica el nmero de lneas que tendr la tabla. Podemos


poner 0 y es el propio sistema el que genera una tabla.

Para que el rea de trabajo ( work area ) tenga el mismo nombre que
la tabla utilizamos la orden with header line en la misma lnea que
definimos la tabla y despus de occurs.
Por lo tanto, existen dos posibilidades, cuando el work area posee el
mismo nombre que la tabla interna y cuando no lo posee, en este caso
tenemos que definirla de la siguiente manera:

1. Primero definimos la tabla como un types: begin of nombre_type,


<distintos campos>,
end of nombre_type.
2. Definimos un dato para asignar la work area a la tabla definida en tipo
anteriormente:
Data: wa like nombre_type,
tabla_interna like nombre_type.

La opcin MOVE-CORRESPONDING mueve nicamente los


subcampos de f1 y f2 que posean el mismo nombre:
Tabna
NAME1 ID CITY
WILLY 0000001 WALLDORF

move-corresponding tabna to address

TAG ID NAME CITY


Address
0000001 WALLDORF

20
APUNTES DE ABAP/4

Para resetear variables a sus valores iniciales, utilizaremos el


comando: clear
Sintaxis: CLEAR <f1>.

Tambin lo podemos usar en tablas internas:

sin header line: clear <work area> inicializa el work area


clear / refresh <tabla_interna> borra el cuerpo
de la tabla
con header line: clear <tabla_interna> inicializa la cabecera
clear <tabla_interna> [] borra el cuerpo de la tabla
refresh <tabla_interna> borra el cuerpo de la tabla

El valor de las filas de una tabla, definida por OCCURS debe de ser
un valor constante.

El comando, INCLUDE STRUCTURE <tabla_transparente>, nos


permite basar la estructura de una tabla transparente o cadena de
campo en una tabla R/3 Repository.

Llenado de una tabla:


1. Mediante el comando append. Este comando anexiona el contenido de la
header line al final de la tabla interna.

Sintaxis: append <tabla_interna> (con header line)


append <work area> to <tabla_interna>, (sin header line)

COUNTRY SALES
D 400000 Header line
USA 1000000 1
GB 500000 2
D 7800000 3
GB 50000 4
A 140000 5
6
7
8

21
APUNTES DE ABAP/4

2. Mediante el comando APPEND <tabla_interna> SORTED BY <f>. Con esta


orden conseguimos que lo que tenemos en la header line, aada la entrada
a la tabla en orden descendiente:
3.
COUNTRY SALES
D 400000 Header line
D 7800000 1
USA 1000000 2
GB 500000 3
A 140000 4
GB 50000 5

Si no hay espacio en la tabla para una nueva entrada, la ltima


entrada es destruida.

Para insertar lneas en una tabla podemos usar, segn el nuevo sistema la
opcin del select * from junto con:

Sintaxis: select * from <tabla_transparente> into table <tabla_interna>

Para aadir datos con una tabla interna, utilizamos el comando collect
el cual incluye el contenido de header line ya sea como una nueva entrada
o lo aade a una entrada ya existente del mismo tipo.

Sintaxis: COLLECT <tabla_interna>. (con header line)

COLLECT <work area> INTO <tabla_interna> (sin header line)

Si no se encuentra ninguna entrada igual a la de header line, la


entrada se aade al final de la tabla.

Para clasificar una tabla tenemos varias posibilidades que nos ofrece
el comando sort.
1. Si el comando sort no lleva ningn criterio de clasificacin, se
ordenan en orden ascendente.
Sintaxis: SORT <tabla_interna>.

22
APUNTES DE ABAP/4

2. Podemos limitar el nmero de campos a clasificar, en vez de clasificar


toda la tabla, mediante el parmetro by.
Sintaxis: SORT <tabla_interna> BY <field1> <field2> ... .
3. Por ltimo podemos nosotros dar el criterio de clasificacin, ya sea
ascendente o descendente mediante las ordenes: ascending o
descending.
Sintaxis: SORT <tabla_interna> BY ascending/descending.

Para cambiar el contenido de una tabla interna, tenemos tres


posibilidades:

1. MODIFY <tabla_interna> INDEX < i >


Sobrescribe sobre la lnea de la tabla <i> con el contenido del header line.

2. INSERT <tabla_interna> INDEX < i >


Genera una nueva entrada en la tabla antes de la lnea <i> con el
contenido del header line. Si la tabla tuviera -1 entrada, el contenido de la
header line es aadido a la tabla.
3. DELETE <tabla_interna> INDEX < i >
Borra la lnea <i>.

Si estamos dentro de un LOOP podemos modificar la tabla interna


afectando siempre a la lnea actual.
- Podemos obtener la suma de las columnas de la tabla mediante la
opcin SUM.

1. INSERT <tabla_interna>
Inserta una nueva lnea con el contenido del header line antes de la lnea
actual.
2. MODIFY <tabla_interna>
La lnea actual es sobrescrita con el contenido del header line.
3. DELETE <tabla_interna>
La lnea actual es borrada.

23
APUNTES DE ABAP/4

Para borrar una tabla interna, tenemos tres posibilidades:

1. CLEAR <tabla_interna>
Inicializa todos los campos simples en el header line de una tabla interna
segn el tipo.
2. REFRESH <tabla_interna>
Borra todas las lneas de la tabla. Los espacios almacenados de la tabla
no son almacenados. El header line permanece sin cambios.
3 FREE <tabla_interna>
Libera el espacio almacenado para la tabla. El header line permanece sin
cambios.

Base de datos ABAP/4-OPEN SQL:


Para acceder a una base de datos utilizamos, select con las siguientes
posibilidades:
1. Into determina la zona de rea dentro de la cual el dato
seleccionado es ledo.
2. From selecciona la fuente de la cual el dato es ledo.
3. Where determina las condiciones las cuales deben ser utilizadas
en la seleccin.
4. Group By Combina grupos de entrada en entradas
individuales.
5. Order By determina como han sido ordenadas las entradas.

INTO clauses:

INTO <wa> los datos resultantes son colocados de izquierda a derecha en


el work area

INTO (<field1>,...,<fieldn>) los datos resultantes son colocados de


izquierda a derecha en los campos
seleccionados.

INTO CORRESPONDING FIELDS OF <wa> cada campo de la


seleccin resultante se coloca en el
campo de la wa con su mismo nombre.

INTO TABLE <tabla_interna> no se colocan lnea por lnea sino de una vez.

24
APUNTES DE ABAP/4

INTO CORRESPONDING FIELDS OF TABLE <tabla_interna>


se introducen en los campos correspondientes con el mismo nombre.

WHERE clauses:

LIKE: select * from <tabla_transparente> where <tabla_interna> like


<patrn>

Busca datos que coincidan con el patrn. _ indica un solo caracter y


% indica una secuencia de caracteres. Por ejemplo _R% indica que el
segundo caracter sea una R y los restantes da igual. Solo en campos de
texto.

IN: select * from <tabla_transparente> where <campo_tabla> in


(<value1>, <value2>,...).

GROUP BY clauses: combina grupos de entrada en entradas simples.

Ejemplo:
report ejemplo.
tables: sflight.
data: carrid like 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: /10 carrid,
20 minimum,
40 maximum.
endselect.
if sy-subrc ne 0.
write: / text-001.
endif.

Al ejecutarlo obtenemos:

25
APUNTES DE ABAP/4

EJEMPLO DE UTILIZACIN DE GROUP BY

CARRID MINIMO MAXIMO

SQ 849,00 849,00
LH 899,00 6.000,00

Divide el contenido de carrid en sus grupos, as si tiene SQ y LH


existen entonces dos grupos y de cada grupo adquiere el mayor y el
menor y los representa.

ORDER BY clauses: determina cmo han sido grabadas las entradas.

Ejemplo de aplicacin.

report zejemplo.
tables: spfli.
select * from spfli order by cityfrom .
write: /10 spfli-carrid,
20 spfli-connid,
30 spfli-cityfrom.
endselect.
if sy-subrc ne 0.
write: / text-001.
endif.

Al ejecutarlo obtenemos:

CARRID CONNID CITYFROM

LH 2415 BERLIN
LH 2407 BERLIN
LH 2463 BERLIN
LH 0400 FRANKFURT
LH 0402 FRANKFURT
LH 0454 FRANKFURT
SQ 0026 FRANKFURT

26
APUNTES DE ABAP/4

LH 2402 FRANKFURT
LH 2436 FRANKFURT
LH 2462 FRANKFURT
UA 0941 FRANKFURT
AA 0017 NEW YORK
UA 0007 NEW YORK
DL 1699 NEW YORK
LH 3577 ROM
AA 0064 SAN FRANCISCO
DL 1984 SAN FRANCISCO
UA 3504 SAN FRANCISCO
LH 0455 SAN FRANCISCO

Lo que realiza ORDER BY es ordenar en modo ascendente (por


defecto) el campo seleccionado, aqu cityfrom y el resto de campo en
funcin de este.

Existe la posibilidad de definir objetos de datos que acten como


globales para varios programas sin ms que definirlos como un
INCLUDE y posteriormente se definen los objetos de datos como:

Sintaxis: Data: begin of common part <nombre>


............................................
end of common part <nombre>.

Y luego lo llamamos sin ms que llamar al include al que pertenece.


Definicin del include
Ejemplo de aplicacin:

***INCLUDE INCOMMON.
DATA: BEGIN OF COMMON PART NUMBERS,
NUM1 TYPE I,
NUM2 TYPE I,
SUM TYPE I,
END OF COMMON PART NUMBERS.

27
APUNTES DE ABAP/4

PROGRAM FORMPOOL.
INCLUDE INCOMMON. Llamamos al include

FORM ADDIT.
SUM = NUM1 + NUM2. Utilizamos los elementos ya
definidos en el include
PERFORM OUT.
ENDFORM.
FORM OUT.
WRITE: / 'Sum of', NUM1, 'and', NUM2, 'is', SUM.
ENDFORM.

SUBRUTINAS.

Las subrutinas se deben colocar siempre al final del programa y todas


seguidas.

Las llamadas de subrutinas se realizan mediante la orden PERFORM


<nombre_subrutina>, el nombre no debe exceder los 30 caracteres.

Para definir una subrutina utilizamos el comando:

FORM <nombre_subrutina>

rdenes

ENDFORM

Existen dos tipos de parmetros:

- Parmetros actuales: Son los utilizados en la llamada de subrutina en el


programa principal.
- Parmetros formales: Son los utilizados en la definicin de la subrutina.

Si definimos unos datos en lo que es el programa estos datos sern


de inters global y podrn ser utilizados durante todo el programa,
mientras que si los datos son definidos en la subrutina estos datos son
de inters local y por lo tanto solo podrn ser utilizados en cada
subrutina.

28
APUNTES DE ABAP/4

Cmo podemos pasar datos del programa principal a la subrutina y


viceversa:

Existen tres formas de hacerlo:

1. Llamada por valor: No devuelve ningn valor al programa. Inserta un


valor en la subrutina.
2. Llamada por valor y resultado: Posee posicin de memoria propia y puede
intercambiar valores con el programa principal.
3. Llamada por referencia: No posee posicin de memoria propia y nos
devuelve el valor de la posicin donde est el dato. Admite
intercambiar valores con el programa principal.

Podemos guardar un dato global para poder ser modificado en una


subrutina sin ms que utilizar el comando: Local <f>.

Cmo lo hacemos:

- Usamos USING como valor de entrada. Admite llamadas por valor y por
referencia. Si no colocamos la opcin VALUE el valor es pasado por
referencia.

- Usamos CHANGING como valor de salida. Admite llamadas por valor y


resultado, y por referencia.

EJEMPLO DE APLICACIN:

report rsaaa10b
perform <nombre_subrutina> using a1 a2 a3 changing a4 a5
form <nombre_subrutina> using value(f1)
value(f2)
value(f3)
changing
f4
value(f5)
ordenes
endform.

29
APUNTES DE ABAP/4

Al usar using definimos los parmetros llamados por valor a1 a2 a3


ya que slo son valores de entrada y no de salida, mientras que con changing
definimos tanto por valor y resultado como por referencia a4 a5 ya que
admiten una devolucin ya sea del resultado o de la posicin de memoria.

Dentro de la subrutina para indicar los valores utilizamos:

1. VALUE: Lo utilizamos para definir los valores incluidos por valor y por
defecto. Tienen que estar dentro de USING.
2. Para los parmetros de referencia no es necesario la opcin VALUE.
Tiene que estar dentro de CHANGING.

Podemos, adems de la asignacin normal, hacerlo mediante like y


type despus de la definicin de los elementos ya sea por valor o sin l.

Para pasar estructuras como parmetros lo podemos hacer de dos


maneras:

report rsaaa10d message-id at.


tables: sflight.
data:... .

perform write_sflight1 using sflight.


perform write_sflight2 using sflight.
form write_sflight1 using rec.
write: / rec.
endform.
form write_sflight2 using rec like sflight.
write: /rec-carrid,
rec-connid,
rec-fldate.
endform

En el caso 1 asignamos toda la tabla por lo que al representar REC lo


hacemos totalmente, mientras que en el caso 2 al asignarle la estructura de
sflight podemos escribir campos en particular al user like.

30
APUNTES DE ABAP/4

Para pasar tablas internas como parmetros:


Para pasar una tabla podemos utilizar dos mtodos:
- USING pasa la tabla pero no pasa la cabecera
- TABLES pasa la tabla incluida la cabecera

report rsaaa10e message-id at.


tables: sflight.
data: tab like sflight occurs 50 with header line.

perform calc_write1 using tab[].


perform calc_write2 tables tab.
form calc_write1 using tabbody like tab[].
data: itab_line like sflight.
loop at tabbody into itab_line.
write: / itab_line-carrid.
endloop.
endform.
form calc_write2 tables itab structure tab.
loop at itab.
write: / itab-carrid,
endloop.
endform.

En el caso 1 utilizamos una asignacin por using por lo que pasamos


nicamente el cuerpo de la tabla pero no la cabecera por lo que no se puede
modificar. Mientras que en el caso 2 al asignar mediante tables asignamos
tanto el cuerpo como la cabecera de la tabla y puede modificarse la
cabecera.

Mientras que en el caso 1 damos un tipo a la tabla tabbody mediante


el comando like, en el segundo caso para asignar un tipo a la tabla utilizamos
structure.

31
APUNTES DE ABAP/4

Para definir subrutinas externas las cuales provienen de otro


programa utilizamos la orden PERFORM con la siguiente sintaxis:

Sintaxis: perform <nombre_subrutina> (<nombre_programa>) using...


if found

Si no existe ninguna subrutina en el programa el sistema ignora el


perfom.

Tambin la podemos llamar de una manera indirecta mediante el uso


de una variable; por ejemplo:

<nombre_variable> = nombre_subrutina.
Perform (<nombre_variable> [ in program (<nombre_programa>) if found ]

O mediante el uso de un bucle podemos llamar a varias subrutinas


mediante la ejecucin del bucle; por ejemplo:

Sintaxis: perform <idx> of <subr1> <subr2> ... <subrn>

Do 2 times.
Perform sy-index of subr1 subr2
Enddo.

FUNCIONES

Para crear una funcin seguimos los siguientes pasos:

1. En el mdulo Biblioteca de funciones Mdulo de funciones


colocamos el nombre de la funcin.
2. Pulsamos el botn crear.
3. Entramos en el mdulo de funciones crear en donde debemos
introducir una funcin de grupo para nuestro mdulo. Tambin
podemos introducir un texto breve.
Todas las funciones de mdulo que pertenecen a un grupo de
funciones son combinadas en el programa de ABAP/4. Para crear
un grupo de funcin biblioteca de funciones pasar a gestin
fg. Funciones crear grupo.

32
APUNTES DE ABAP/4

Esto antes de crear la funcin, si ya ha sido creada como


tenemos que asignarle un grupo si no existe el sistema te pide si
se desea crear.
4. El siguiente paso es rellenar el apartado de interface pormetros
import/export. Si existen excepciones utilizamos el apartado
interface parmetros tabla/excepciones.
5. Una vez que hemos rellenado los parmetros, seleccionamos el
texto fuente y pulsamos en modificar.
6. Una vez escrito el texto se tiene que grabar y posteriormente hay
que generarla.

Para definir funciones es necesario hacerlo en la Biblioteca de


Funciones. Cuando llamamos a una funcin los parmetros exporting son
transportados al mdulo de funciones y los parmetros importing son
devueltos al programa que lo llama.

Sintaxis:

CALL FUNCTION <module>


[EXPORTING f1 = a1 .... fn = an]
[IMPORTING f1 = a1 .... fn = an]
[CHANGING f1 = a1 .... fn = an]
[TABLES f1 = a1 .... fn = an]
[EXCEPTIONS e1 = r1 .... en = rn [ERROR_MESSAGE = rE]
[OTHERS = ro]].

Cuando llamamos a una funcin, a los parmetros que enviamos les


debemos dar los nombres con los que trabajaremos en la funcin. As, en el
siguiente ejemplo de aplicacin vemos que al llamar a la funcin my_divide
los parmetros exportados n1 y n2 les asignamos un valor determinado y el
valor importado de la funcin r le asignamos el valor de la variable que
utilizamos en la funcin que es res.

As los parmetros que en la llamada son de importacin en la funcin


son de exportacin y viceversa.

33
APUNTES DE ABAP/4

Ejemplo:

En la definicin de la funcin tenemos:

FUNCTION MY_DIVIDE.
*"----------------------------------------------------------
*" Local interface:
*" IMPORTING
*" N1
*" N2
*" EXPORTING
*" R
*" EXCEPTIONS
*" DIV_ZERO
*"----------------------------------------------------------

IF N2 EQ 0.
RAISE DIV_ZERO.
ELSE.

R = N1 / N2.
ENDIF.
ENDFUNCTION.

En el programa hacemos la llamada a la funcin:

REPORT SAPMZTST.
DATA: RES TYPE P DECIMALS 2.

CALL FUNCTION 'MY_DIVIDE'


EXPORTING N1 = 5 N2 = 4
IMPORTING R = RES
EXCEPTIONS DIV_ZERO = 11.
IF SY-SUBRC EQ 0.
WRITE: / 'Result =', RES.
ELSE.
WRITE 'Division by zero'.
ENDIF.

34
APUNTES DE ABAP/4

Para pasar tablas se usa una pantalla parecida a la anterior en donde


se rellena la referencia de estructura ( Ref. structure ) que es la
estructura en la cual se basa. Por ejemplo:

Report RSAAA10H.
Tables: sflight.
Data: itab like BCAXX occurs 10 with header line
Call function fill_seattab
Tables
Seattab = itab

En la pantalla del interface colocaramos en Ref. structure BCAXXX y


en table parameter el nombre de la tabla SEATTAB.

En la pantalla de exceptions podemos introducir mensajes


numerndolos. En caso de que puedan aparecer otros mensajes que no
sepamos podemos colocar en la llamada a la funcin others con su nmero
apropiado. Para activar las excepciones podemos utilizar el comando
raise <exc> o tambin podemos introducir un mensaje de error
mediante el comando message ........ raising <exc>.

Por ejemplo en el texto siguiente vemos:

Report RSAAA10H.
Call function fill_seattab
Exporting
Year = year. ( ste no tendra nada en el campo de referencia )
Tables
Seattab = itab
Exceptions
No_entry = 01
Others = 02.

Despus colocamos un bucle mediante sy-subrc para saber cmo se ha


ejecutado la funcin y dependiendo del valor que tome obtendremos una
salida, por ejemplo:

35
APUNTES DE ABAP/4

Case sy-subrc.
When 1
Write No entry.
When 2
Write Other error.
Endcase.

Cuando creamos una funcin es necesaria, al grabarla, la existencia de


un mdulo de funciones dentro del cual se puedan agrupar varias
funciones. Deben de comenzar con la letra Z mientras que para clientes
se usa Z_.

Para cada mdulo de funciones el sistema genera una plantilla. En ella


se insertan todos los datos del interface como comentarios. Al escribirla
se comienza por function y termina por endfunction.

Podemos probar la funcin mediante la tecla Test Ind.

En la llamada a una funcin call los parmetros que en ella se definen


como de exportacin en la funcin son los parmetros de importacin y
los que se definen como de importacin en la llamada son definidos como
de exportacin en la funcin.

BASES DE DATOS LGICAS:

Conjunto de bases de datos seleccionadas entre s. Para poder ver la


correlacin de las bases de datos: en el object browser en el men entorno
y el submen desarrollo de programas y base de datos lgicas. Las bdl se
representan mediante tres letras.

Si por ejemplo definimos la base de datos lgica F1S y solo definimos


las tablas spfli y sbook, el sistema tambin leer la tabla sflight debido a
que entre la tabla spfli y la sbook se encuentra la sflight

Para conocer a qu base de datos lgica pertenece una tabla


seguimos el siguiente camino:

36
APUNTES DE ABAP/4
WorkbenchDesarrolloEntorno de programacinBase de datos
lgica y dentro de esta pantalla en el men Detalles Utilizacin tablas

37
APUNTES DE ABAP/4

EVENTOS:

1. Usados con bases de datos lgicas.

- INITIALIZATION: Se realiza antes de que se visualice la pantalla de


seleccin. Ejemplo:

PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.


INITIALIZATION.
QUAL_DAY+6(2) = '01'.
QUAL_DAY = QUAL_DAY - 1.

- AT SELECTION-SCREEN OUTPUT: Se realiza antes de que aparezca


la pantalla de seleccin y nos permite introducir datos antes que ella.
Ejemplo:

SELECT-OPTIONS NAME FOR SY-REPID MODIF ID XYZ.


AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
CHECK SCREEN-GROUP1 = 'XYZ'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDLOOP.

- AT SELECTION-SCREEN: Se activa despus de aparecer la pantalla de


seleccin.

- START-OF-SELECTION: Indica introduccin de datos. Una vez


introducidos los datos y pulsar enter o F8 se genera otro evento que es
end-of-selection.

- END-OF-SELECTION: Se genera cuando todos los datos grabados en la


bdl han sido ledos y procesados.

2. Usados con creacin de listas:

- TOP-OF-PAGE # END-OF-PAGE: Se ejecutan al principio y al final de


la pantalla.

38
APUNTES DE ABAP/4

3. Otros:
- AT LINE-SELECTION: Se genera cuando se realiza un doble-click en
una lnea del listado. Ejemplo:
DATA TEXT(20).
START-OF-SELECTION.
PERFORM WRITE_AND_HIDE USING SPACE SPACE.
AT LINE-SELECTION.
CASE TEXT.
WHEN 'List index'.
PERFORM WRITE_AND_HIDE USING 'X' SPACE.
WHEN 'User command'.
PERFORM WRITE_AND_HIDE USING SPACE 'X'.
WHEN OTHERS.
SUBTRACT 2 FROM SY-LSIND.
PERFORM WRITE_AND_HIDE USING SPACE SPACE.
ENDCASE.
CLEAR TEXT.
FORM WRITE_AND_HIDE USING P_FLAG_LSIND P_FLAG_UCOMM.
WRITE / 'SY-LSIND:'.
PERFORM WRITE_WITH_COLOR USING SY-LSIND
P_FLAG_LSIND.
TEXT = 'List index'.
HIDE TEXT.
WRITE / 'SY-UCOMM:'.
PERFORM WRITE_WITH_COLOR USING SY-UCOMM P_FLAG_UCOMM.
TEXT = 'User command'.
HIDE TEXT.
IF SY-LSIND > 0.
WRITE / 'PICK here to go back one list level'.
ENDIF.
ENDFORM.
FORM WRITE_WITH_COLOR USING P_VALUE P_FLAG_POSITIVE.
IF P_FLAG_POSITIVE = SPACE.
WRITE P_VALUE COLOR COL_NORMAL.
ELSE.
WRITE P_VALUE COLOR COL_POSITIVE.
ENDIF.
ENDFORM.

39
APUNTES DE ABAP/4

- AT PFxx. Se genera al pulsar una tecla Fn.

- AT USER-COMMAND: Se activa siempre que el usuario presiona una


tecla de funcin en un listado o se realiza una entrada en la lnea de
comando. Ejemplo:

DATA: NUMBER1 TYPE I VALUE 20,


NUMBER2 TYPE I VALUE 5,
RESULT TYPE I.
START-OF-SELECTION.
WRITE: / NUMBER1, '?', NUMBER2.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ADD'.
RESULT = NUMBER1 + NUMBER2.
WHEN 'SUBT'.
RESULT = NUMBER1 - NUMBER2.
WHEN 'MULT'.
RESULT = NUMBER1 * NUMBER2.
WHEN 'DIVI'.
RESULT = NUMBER1 / NUMBER2.
WHEN OTHERS.
WRITE 'Unknown function code'.
EXIT.
ENDCASE.
WRITE: / 'Result:', RESULT.

El comando HIDE nos permite almacenar los campos en un rea especial.


Para cada campo, el sistema almacena el nombre del campo y el valor. El
comando HIDE debe estar inmediatamente seguido del comando WRITE
ya que la informacin es grabada para cada lnea de salida. Tambin
puede ser utilizada el rea Hide para almacenar campos que no aparecen
en la lista.

40
APUNTES DE ABAP/4

Para imprimir mensajes, usamos la orden message:

Sintaxis: MESSAGE ID mid TYPE mtyp NUMBER mnr.


ID Mensaje ID
TYPE Tipo de mensaje
NUMBER Nmero

Tipos de mensaje:
I - Informacin Presionar ENTER para continuar
W - Warning Posible correccin
E - Error Requiere correccin
A - Abend Transaccin terminada
X - Exit Transaccin terminada con un short dump
MESSAGE_TYPE_X
S - Success Mensaje en la siguiente pantalla

Ejemplos:
MESSAGE ID 'XX' TYPE 'E' NUMBER '001' WITH 'Text.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH
SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

NIVELES DE CONTROL PARA GRUPOS DE LNEAS

Utilizamos at <line>
< >
endat. Con las siguientes opciones:

LINE: first Primera lnea de la tabla interna


Last ltima lnea de la tabla interna
New <f> Desde la primera lnea hasta el campo <f>
End of <f> Desde el campo <f> hasta el final.

Reconoce los cambios de grupo de <f> y de todos los campos de la


tabla que estn ms a la izquierda de <f>. Para ello se debe de tener en
cuenta el orden de definicin de los campos.

Hay que tener en cuenta que cuando el campo es un campo de


caracteres al realizar una ruptura dicho campo es sustituido por asteriscos
por lo que es conveniente guardar la variable antes de realizar el bucle.

41
APUNTES DE ABAP/4

AUTHORIZATION CHECKS.

Para poder crear una autorizacin es necesario crear primero un


objeto de autorizacin, se encuentra en: Workbench Desarrollo Ms
herramientas Obj. Autorizacin Campos, contiene los campos a
chequear y las opciones que podemos realizar. Debe de empezar por Z.

Sintaxis: Authority-check object <objeto_autorizacin>


Id <nombre_campo> field valor.
Id <nombre_campo> field valor.

Id ACTVT field valor.

En donde ACTVT es la accin a realizar, sus valores se encuentran


contenidos en las tablas: tact y tactz.

Si no queremos comprobar un campo ponemos DUMMY detrs del


nombre.

El authority-check nos devuelve los siguientes valores:

0 si el usuario est autorizado


4 si el usuario no est autorizado
24 el chequeo no se llev a cabo satisfactoriamente.

Tambin existe un perfil de autorizacin, por ejemplo la autorizacin


SAP ALL permite hacerlo todo.

SCREEN PAINTER.

Programas de dilogo asociado a transacciones.


En la pantalla de entrada tenemos:
PROGRAMA: nombre del programa
N dynpro: nmero de la ventana a crear
En el submen objetos parciales:
- Editor full screen: editor en el cual colocaremos los elementos que
queremos que aparezcan en la pantalla.

42
APUNTES DE ABAP/4

- Campo dict/programas: nos permite ver el contenido de un campo que


sea el diccionario o del programa
- Lista de campos: nos saca una lista con todos los campos utilizados
( menos el okcode )
- Atributos dynpro: nos da los atributos de la ventana realizada
Lgica proceso: Una vez realiza la ventana es necesario un
programa el cual tendr dos partes principales:

Process before output: incluir todo lo que queramos que se realice antes
de que aparezca la pantalla.

Process after input: incluir todo lo que queremos que se realice despus
de aparecer la pantalla.

Todo las rdenes irn incluidas en unos mdulos llamados module


<nombre_module>

Pantalla
PBO
Module ...

PAI
Module ...

Existen cinco tipos de includes:

Los includes constan de las cinco ltimas letras del nombre del
programa + un carcter identificativo del tipo de include + dos caracteres
para indicar el nmero. Pero el top son los cinco caracteres + la palabra
TOP.

TOP: Sirve para asignar los datos globales.


O: Se realiza en el mdulo PBO
I: Se realiza en el mdulo PAI
F: Para subrutinas
E: Eventos.

43
APUNTES DE ABAP/4

Para poder ejecutar un programa del tipo modulpool es necesario


asignarle una transaccin, est se genera en el workbench Desarrollo
Ms herramientas Transacciones. Las transacciones deben comenzar por
las letras Z o Y.

Para chequear una serie de campos utilizamos la orden field, siempre en


el PAI.

Sintaxis: field <nombre_campos>


Module <nombre_module> /* al que quieres que vaya en
caso de que la comprobacin
sea o no satisfactoria.
Si existe error los campos seleccionados quedan en blanco para poder
permitir su cambio.

Para transportar campos utilizamos tambin la opcin field. Hay que


introducir el mdulo al que se transporta en caso de que hubiera errores.

Podemos variar la lgica de proceso mediante la opcin set screen


<nmero_pantalla>, este comando sobreescribe temporalmente la lgica
del proceso. En el momento en que se ejecuta la nueva pantalla el sistema
vuelve a la lgica de proceso a menos que nosotros la abandonemos
mediante el comando leave screen.

Cuando nosotros insertamos un botn en el editor es necesario asignarle


en atributos un nombre con 4 caracteres en CodFunc.

Cuando trabajamos con botones es necesario utilizar variables


auxiliares:

module ok_code input.


auxiliar = okcode. usamos una variable auxiliar
clear okcode. limpiamos el comando okcode
case auxiliar. usamos un case en caso de que
when 'SIGU'. existan varios botones.
set screen 200.
when 'ANTE'.
set screen 100. variamos la lgica de proceso

44
APUNTES DE ABAP/4

endcase.
leave screen.
endmodule.

Utilizacin de select anudados.

Cuando tenemos por ejemplo tres tablas spfli, sflight y sbook y


queremos hacer una seleccin de una de las tablas con asignaciones de
campos de otras tablas es necesario colocar en la sintaxis el siguiente
comentario:

Si definimos tres tablas: spfli (1), sflight (2), sbook (3).

Select * from <tabla_transparente> into tabla <tabla_interna_2>


for all entries in <tabla_interna_1>

Ejemplo de aplicacin:

REPORT .
TABLES: SPFLI, SFLIGHT, SBOOK.

TYPES: SPFLI_TYPE LIKE SPFLI OCCURS 50.


TYPES: SFLIGHT_TYPE LIKE SFLIGHT OCCURS 150.
TYPES: SBOOK_TYPE LIKE SBOOK OCCURS 0.

Selecciona los
DATA: ITAB_SPFLI TYPE SPFLI_TYPE WITH HEADER LINE.
campos connid
DATA: ITAB_SFLIGHT TYPE SFLIGHT_TYPE WITH HEADER LINE.
LH
DATA: ITAB_SBOOK TYPE SBOOK_TYPE WITH HEADER LINE.

SELECT * FROM SPFLI INTO TABLE ITAB_SPFLI WHERE CARRID = 'LH'.

SELECT * FROM SFLIGHT INTO TABLE ITAB_SFLIGHT


FOR ALL ENTRIES IN ITAB_SPFLI
WHERE CARRID = ITAB_SPFLI-CARRID Utiliza para la seleccin
AND CONNID = ITAB_SPFLI-CONNID. campos de la tabla
itab_spfli
SELECT * FROM SBOOK INTO TABLE ITAB_SBOOK
FOR ALL ENTRIES IN ITAB_SFLIGHT Utiliza para la seleccin
WHERE CARRID = ITAB_SFLIGHT-CARRID campos de la tabla
AND CONNID = ITAB_SFLIGHT-CONNID itab_sflight
AND FLDATE = ITAB_SFLIGHT-FLDATE.

45
APUNTES DE ABAP/4

LOOP AT ITAB_SPFLI.
FORMAT COLOR COL_GROUP INTENSIFIED.
WRITE: / ITAB_SPFLI-CONNID,
ITAB_SPFLI-CARRID,
ITAB_SPFLI-CITYFROM,
ITAB_SPFLI-CITYTO,
ITAB_SPFLI-DEPTIME,
ITAB_SPFLI-ARRTIME.
ENDLOOP.
NEW-PAGE.
LOOP AT ITAB_SFLIGHT WHERE CARRID = ITAB_SPFLI-CARRID
AND CONNID = ITAB_SPFLI-CONNID.
FORMAT COLOR COL_GROUP INTENSIFIED OFF.
WRITE: / ITAB_SFLIGHT-CONNID,
ITAB_SFLIGHT-CARRID,
ITAB_SFLIGHT-FLDATE,
ITAB_SFLIGHT-PRICE,
ITAB_SFLIGHT-CURRENCY.
NEW-PAGE.
LOOP AT ITAB_SBOOK WHERE CARRID = ITAB_SFLIGHT-CARRID
AND CONNID = ITAB_SFLIGHT-CONNID
AND FLDATE = ITAB_SFLIGHT-FLDATE.
FORMAT COLOR COL_NORMAL.
WRITE: / ITAB_SBOOK-CONNID,
ITAB_SBOOK-CARRID,
ITAB_SBOOK-BOOKID,
ITAB_SBOOK-CUSTOMID,
ITAB_SBOOK-CUSTTYPE.
ENDLOOP.
ENDLOOP.

Si no colocramos la orden for all entries in no podramos hacer


selecciones con referencia a tablas distintas.

Bases de datos lgicas: Una base de datos lgica est definida por tres
caracteres. Los dos primeros para el nombre y el ltimo denota la
aplicacin.

Para parar un proceso podemos utilizar dos procedimientos: EXIT que


finaliza directamente el programa y STOP que para la ejecucin y va al
end-of-selection.

46
APUNTES DE ABAP/4

Cuando creamos una lista es necesaria la utilizacin de dos programas, un


report y un programa de base de datos. Ambos programas se comunican
mediante los parmetros GET y PUT.

Cuando nosotros ejecutamos un get el sistema nos genera otro programa


de sistema en el cual aparecen las rdenes put. Cmo funciona: al llamar un
get, el sistema busca en el programa de sistema el primer put y ste dispara
la siguiente subrutina y as con todos los get.

Ejemplo de aplicacin:

Report <name> defining database f1s. Report <name>

Form put_spfli. ..............................................


Select * from spfli ...
Llama a put
Put spfli. Get spfli
Endselect. Write: spfli-carrid,
Endform .....

Form put_sflight.
Select * from sflight
Where carrid = spfli-carrid
And connid = spfli-connid
...
put sflight. Get sflight.
Endselect. Write: sflight-fldate,
Endform. .....

Form put_sbook.
Select * from sbook
Where carrid = sflight-carrid ...
Put sbook. Get sbook.
Endselect. Write: sbook-bookid,
Ednform. .....

47
APUNTES DE ABAP/4

El ejemplo anterior es cuando las tablas estn jerarquizadas.

1 SPFLI

2 S FLIGH T

3 SBOOK

Podemos tener una estructura de tablas que tengan en un nivel


jerrquico varias tablas:

KN A1

N KB1 N KBn

Cmo funcionamos con las bases de datos lgicas

START-OF-SELECTION

S PFLI
2 4
4 2
S FLIGH T S FLIG H T

SBO O K SBO O K SBO O K S BO O K SBO O K


3 3 3 3 3

END-OF-SELECTION

Cuando queremos bajar un nivel jerrquico en una base de datos


lgica utilizamos la funcin get y el nombre de la tabla de jerarqua mayor
mientras que si lo que hacemos es subir un nivel jerrquico utilizaremos la
orden get nombre_tabla_a_la_que_subimos late.

48
APUNTES DE ABAP/4

Cuando trabajamos con get puede ocurrir lo siguiente: como sabemos, la


orden get conlleva una pantalla de seleccin dependiendo de la base de
datos lgica a la cual acceda, pero, el nmero de campo de seleccin de la
pantalla tambin depender del nmero de tablas que nosotros
definamos en tables. Por lo tanto tendremos varias opciones a partir del
siguiente programa de aplicacin:

REPORT RSBBB01D.
TABLES: SPFLI, SFLIGHT, SBOOK.

GET SPFLI.
WRITE: / SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-CITYTO,
SPFLI-DEPTIME, SPFLI-ARRTIME, SPFLI-FLTIME.

GET SFLIGHT.
WRITE: /10 SFLIGHT-FLDATE, SFLIGHT-PRICE CURRENCY SFLIGHT-CURRENCY,
SFLIGHT-CURRENCY.

GET SBOOK.
WRITE: /20 SBOOK-BOOKID, SBOOK-CUSTOMID, SBOOK-CUSTTYPE

Como vemos el get depende de todas las tablas que estn definidas a
la hora de realizar la pantalla de seleccin.

Relacin existente entre los comandos select y get:

Para comenzar, las tablas han de estar definidas en el comando


tables.

a. Lectura mediante el comando select: Si nosotros tenemos tres


tablas (spfli, sflight, sbook) utilizamos tres select anidados:

select * from spfli where .......


< >
select * from sflight where .......
< >
select * from sbook where ........
< >
endselect.
endselect.
endselect.

49
APUNTES DE ABAP/4

b. Mientras que con el comando get tambin lo podemos hacer pero


primeramente tenemos que definir base de datos lgica a la que
pertenecen las tres tablas:

get spfli.
< >
get sflight.
< >
get sbook.
< >

Como crear una base de datos lgica.

1. Entramos en el object browser


2. En Entorno Desarrollo de programas Base de datos lgica
3. Tenemos que darle un nombre, estar formado por 2 letras para el
nombre + 1 para la aplicacin.
4. Damos al botn CREAR.
5. Introducimos la tabla raiz.
6. Posteriormente aadimos nodos nuevos en Tratar Nodo
Crear.
7. As sucesivamente hasta crear la base de datos lgica Crear.
8. Tenemos que generar las SELECCIONES.
9. Tenemos que generar los PROGRAMAS DE DATOS.

Formato de las listas de salida

- Para dibujar lneas tenemos:

uline(n): subraya la palabra, entre parntesis la longitud.


sy-vline(n): genera lneas verticales de longitud n
sy-uline(n): genera lneas horizontales de longitud n

- Podemos asignar la columna de posicin as como la longitud de salida con


un nmero no superior a tres cifras ( en la orden write ) o podemos
hacerlo mediante una variable usando el parmetro opcional AT en la
sentencia write.

50
APUNTES DE ABAP/4

- Podemos posicionar los campos mediante los parmetros centered, left-


justified y right-justified. Por defecto el sistema posiciona los campos
numricos a la derecha y el resto de los campos a la izquierda.
- Para especificar un formato de salida, utilizamos USING EDIT MASK
en donde _ indican una posicin de salida. Por ejemplo poner time using
edit mask __:__:__ la hora se representar como hh:mm:ss
- Para dar un formato a la salida usamos la sentencia format la cual posee
las siguientes opciones:
Intensified: realza la salida
Input: preparado para entrar
Color <n>: coloca un color
Inverse: cambia los colores del primer plano y del fondo.
- La sentencia format se coloca antes de las sentencias write.
- Tambin podemos hacerlo en la propia orden write aadiendo los
atributos, que son los mismos que en la sentencia format.
- A la hora de hablar de monedas tenemos la opcin de definir el nmero
de decimales en la que representar la cifra, siempre y cuando sea
divisible, por ejemplo la lira italiana no necesita decimales; para esto
utilizamos currency. Si no colocamos el nmero de decimales sern
colocados dos.
- No confundir la opcin currency con la funcin
Convert_to_local_currency.
- Podemos insertar en los textos smbolos e iconos, para ello utilizaremos
la siguiente sintaxis:

Write: <nombre_smbolo/icono> as symbol / as icon.

- Para eliminar la cabecera standard del sistema utilizaremos la orden no


standard page heading situada en la lnea del report
- Si queremos personalizar la cabecera podemos utilizar el evento top-of-
page y colocar las sentencias que queramos con los textos y colores
elegidos.
- Con la orden new-page ( vista anteriormente ) tenemos los siguientes
parmetros:
No-title & With-title: desactiva o activa la cabecera de pgina
por defecto dinmicamente cuando la lista se genera.
No-heading & With-hading: elimina o activa la cabecera en el resto
de las pginas.

51
APUNTES DE ABAP/4

CURSORES.

Los cursores sirven para apuntar a una select de una tabla


transparente. Se pueden definir varios cursores para una misma tabla.

Sintaxis:

1. Declaracin: data <nombre_cursor> type cursor.


2. Abrir el cursor: open cursor <nombre_cursor> for select ...
3. Operaciones con cursores: fetch next cursor <nombre_cursor>
into <work area>
4. Cerrar el cursor: close cursor <nombre_cursor>

Ejemplo de aplicacin:

REPORT ZNANO .

TABLES : EBAN.

DATA : C TYPE CURSOR, C1 TYPE CURSOR.


DATA : EBAN1 LIKE EBAN, EBAN2 LIKE EBAN.

OPEN CURSOR C FOR SELECT * FROM EBAN WHERE MATNR = 'DE-


ERSA1'.
OPEN CURSOR C1 FOR SELECT * FROM EBAN WHERE MATNR = 'DE-
ROH01'.

FETCH NEXT CURSOR C INTO EBAN1.


IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF.
WRITE :/ EBAN1-EKGRP, EBAN1-MATNR.

FETCH NEXT CURSOR C1 INTO EBAN2.


IF SY-SUBRC <> 0. CLOSE CURSOR C1. EXIT. ENDIF.
WRITE :/ EBAN2-EKGRP, EBAN2-MATNR.

CLOSE CURSOR C.
CLOSE CURSOR C1.

52

Potrebbero piacerti anche