Documente Academic
Documente Profesional
Documente Cultură
Reporting
Contenidos
1
EL DICCIONARIO DE DATOS....................................................................................................17
2.1
TABLAS .....................................................................................................................................18
2.1.1 Pestaa "Campos"................................................................................................................19
2.1.2 Pestaa "Entrega y actualizacin":......................................................................................21
2.1.3 Pestaa "Campos de moneda/cantidad": .............................................................................21
2.1.4 Pestaa "Ayuda p./Verif.entr.": ............................................................................................21
2.1.5 Opciones tcnicas .................................................................................................................24
2.1.6 ndices ..................................................................................................................................27
2.1.7 Append estructures ...............................................................................................................29
2.2
DOMINIOS ..................................................................................................................................29
2.2.1 Definicin .............................................................................................................................30
2.2.2 mbito de valores .................................................................................................................31
2.3
ELEMENTOS DE DATOS ..............................................................................................................32
2.4
ESTRUCTURAS ...........................................................................................................................34
2.5
VISTAS .......................................................................................................................................34
2.5.1 Vistas de Base de Datos........................................................................................................35
2.5.2 Vistas de Proyeccin ............................................................................................................37
2.5.3 Vistas de actualizacin .........................................................................................................38
2.5.4 Vistas de ayuda.....................................................................................................................40
2.5.5 Unin, Proyeccin y Seleccin .............................................................................................40
2.5.6 Relacin entre Clave Externa y Condicin Join...................................................................42
2.6
AYUDAS PARA BSQUEDA .........................................................................................................44
2.6.1 Ayuda para bsqueda elemental: .........................................................................................45
2.6.2 Definicin de ayudas de bsqueda .......................................................................................46
2.6.3 Ayuda para bsqueda compuesta .........................................................................................50
2.6.4 Enlace de una Ayuda de Bsqueda con un campo de pantalla ............................................50
2.6.5 Jerarqua de la llamada a la Ayuda de Bsqueda................................................................51
2.7
MODIFICACIN DE OBJETOS .......................................................................................................52
2.8
TRATAMIENTO DE LOS DATOS ....................................................................................................53
2.8.1 Data browser ........................................................................................................................53
2.8.2 Actualizacin de tablas.........................................................................................................54
2.8.3 Transacciones: SM30, SM31. ...............................................................................................54
CREACIN DE PROGRAMAS....................................................................................................55
3.1
3.2
Pgina 2 de 194
Pgina 3 de 194
10
Pgina 4 de 194
12
13
MODULARIZACIN ..............................................................................................................129
13.1
13.2
Pgina 5 de 194
ALV ............................................................................................................................................167
14.1
FUNCIONALIDAD......................................................................................................................167
14.2
TRABAJAR CON ALV ...............................................................................................................167
14.3
FUNCIN REUSE_ALV_LIST_DISPLAY .............................................................................168
14.3.1
Especificar disposicin ..................................................................................................170
14.3.2
Parmetros de retorno ...................................................................................................171
14.3.3
Ejemplo simple ...............................................................................................................172
14.4
FUNCIN REUSE_ALV_FIELDCATALOG_MERGE ..........................................................172
14.5
OTRAS FUNCIONES ...................................................................................................................176
15
Pgina 6 de 194
1.1
El diagrama siguiente muestra cmo el Sistema Base de R/3 forma parte de una
plataforma central dentro del Sistema R/3. A continuacin listaremos las tareas de los
tres componentes lgicos del Sistema Base de R/3.
Pgina 7 de 194
1.2
Pgina 8 de 194
Pgina 9 de 194
Pgina 10 de 194
1.3
La siguiente ilustracin representa el punto de vista del usuario sobre el Sistema R/3:
Para el usuario los componentes visibles del Sistema R/3 son aquellos que aparecen
como una ventana sobre su pantalla. Las ventanas son generadas por el nivel de
presentacin, y forman parte del Sistema Base de R/3.
Antes de que el usuario entre en el sistema R/3, debe ejecutar una utilidad llamada
SAP Logon, que se instala en el front end. En el Logon de SAP, el usuario elige uno de
los sistemas de R/3 disponibles. Entonces, el programa se conecta con el servidor de
mensajes del sistema y obtiene la direccin del servidor de aplicaciones ms
conveniente (el que se utilice menos). Este lanzar el SAPGui conectado al servidor
de aplicaciones.
SAPGui mostrar la pantalla de entrada al sistema. Una vez que el usuario ha entrado
en l, se le mostrar la pantalla inicial del sistema R/3. Despus de entrar en el
sistema, el usuario puede abrir hasta seis ventanas dentro de la misma sesin
SAPGui. Las diferentes ventanas nos permiten ejecutar diferentes aplicaciones en
paralelo, independientes unas de otras.
Dentro de una ventana, el usuario puede ejecutar aplicaciones que llamen a su vez a
nuevas ventanas (tales como cajas de dilogo y ventanas grficas). Estas ventanas no
Pgina 11 de 194
1.4
Usuarios
En SAP cada una de las acciones que se realiza est identificada por el nombre de
usuario, guardando siempre histricos de modificaciones, versiones, etc. Por eso es
necesario que antes de entrar al sistema el usuario se identifique con su nombre
(username) y su clave (password); y tambin es muy importante que cada cual tenga
un nombre de usuario no compartido para evitar problemas.
1.5
Men y transacciones
o estndar de SAP
Pgina 12 de 194
1.6
Adems hay teclas de funcin que siempre (o casi siempre) estn activas, pero que
siempre tienen la misma funcionalidad que un botn de la pantalla o una opcin de
men. Las teclas de funcin ms importantes y tiles son:
F11
Grabar
F3
Shift+F3
Finalizar (Exit)
F12
Cancelar (Cancel)
F8
Ejecutar
F4
F1
F2
CTRL+F2
Verificar
CTRL+F3
Activar
CTRL+F4
Refrescar
CTRL+Y
Pgina 13 de 194
Adems, en todas las pantallas est activo el men "Sistema", a partir del cual
podemos acceder a las siguientes funcionalidades:
Crear modo
Borrar modo
Valores prefijados
Servicios
Utilidades
Lista
rdenes
propias
Jobs propios
Status
Pgina 14 de 194
Repositorio
1.8
ABAP Workbench
Transaccin
Editor ABAP
SE38
Cdigo de programas
Dictionary ABAP
SE11
Menu Painter
SE41
Screen Painter
SE51
Biblioteca de funciones
SE37
1.9
Pgina 15 de 194
Pgina 16 de 194
2 El Diccionario de Datos
El sistema R/3 almacena los datos con los que debe trabajar (y tambin los programas
y las parametrizaciones) en una base de datos relacional, formada por miles de tablas
interrelacionadas. La informacin sobre la estructura de cada una de las tablas y las
caractersticas de sus campos se gestiona de forma centralizada en el Diccionario
ABAP (transaccin SE11).
El Diccionario ABAP describe y gestiona de forma centralizada todas las definiciones
de datos utilizadas en el sistema. Est completamente integrado en el Development
Workbench de ABAP: el resto de los componentes pueden acceder activamente a las
definiciones actualizadas almacenadas en el Diccionario de ABAP. De esta manera se
asegura la integridad y consistencia de los datos. Los programas ABAP pueden utilizar
referencias del Diccionario para crear objetos de datos internos.
Los elementos bsicos del diccionario de datos son las tablas, las vistas, los tipos
(elementos de datos, estructuras, tipos tabla), los dominios y las ayudas de bsqueda.
Existen relaciones entre ellos, por ejemplo: una tabla est compuesta de campos,
cada campo se crea haciendo referencia a un elemento de datos (descripcin
semntica), y cada elemento de datos se crea a partir de un dominio (descripcin de
atributos tcnicos como el tipo y la longitud).
Todos los objetos estndar estn definidos en l, y deberemos incluir tambin todas
las definiciones de tipos y las estructuras de los objetos desarrollados a medida. Estos
objetos se crearn automticamente en la base de datos. El Diccionario tambin
proporciona herramientas para editar campos de pantalla, por ejemplo para asignar a
un campo una ayuda de entradas posibles (ayuda F4).
Pgina 17 de 194
2.1 Tablas
Una tabla representa un conjunto de atributos de una entidad. Una tabla del
Diccionario ABAP es la descripcin lgica de la estructura de una tabla en el sistema
R/3, independiente de la base de datos utilizada. Hay que recordar que el sistema
trabaja contra una base de datos relacional y que, por tanto, habr otra descripcin
paralela en el nivel de la BBDD que denominaremos descripcin fsica.
Cuando se crea una nueva tabla y se activa, se crea una definicin fsica de la misma
(en el lenguaje propio del RDBMS) a partir de la definicin almacenada en el
Diccionario ABAP. La tabla de la base de datos tiene el mismo nombre que la del
Diccionario, y tambin los mismos nombres de campos (aunque la secuencia puede
ser diferente, para facilitar la insercin de nuevos campos). Los tipos de datos son
convertidos.
Las operaciones que haya que realizar sobre la base de datos se deben realizar a
travs del Diccionario, modificando y activando los objetos necesarios.
Pgina 18 de 194
Pgina 19 de 194
Pgina 20 de 194
La tabla T1, donde tenemos los campos que deseamos verificar, se llama tabla de
clave externa (tabla dependiente) y la tabla T2, donde se encuentran los registros que
Pgina 21 de 194
Pgina 22 de 194
Pgina 23 de 194
Pgina 24 de 194
Pgina 25 de 194
Pgina 26 de 194
2.1.6 ndices
Podemos buscar ms rpidamente en las tablas ciertos datos que satisfagan cierto
criterio si utilizamos ndices. Un ndice puede considerarse como una copia de la tabla
de la base de datos que se ha reducido a ciertos campos. Esta copia est siempre
ordenada, lo cual ofrece un acceso ms rpido a los registros de la tabla, por ejemplo
por medio de una bsqueda binaria.
Pgina 27 de 194
Podemos crear otros ndices para la tabla. Estos se llaman ndices secundarios. Esto
ser necesario si se accede frecuentemente a la tabla por campos diferentes a la clave
primaria.
Slo tienen sentido aquellos ndices cuyos campos restrinjan significativamente el
conjunto de resultados de la seleccin.
Supongamos que se realiza frecuentemente la siguiente seleccin sobre la tabla de direcciones
TABDIR:
SELECT * FROM TABDIR WHERE TITULO = Prof. AND
NOMBRE = X
APELLIDO1 = Y.
El campo TITULO raramente restringir un registro especificado con NOMBRE y
APELLIDO1, en caso de que creramos un ndice por NOMBRE/APELLIDO/TITULO, ya que
no es probable que mucha gente tenga el mismo nombre y diferentes ttulos. Esto no tendra
sentido en un ndice. Un ndice slo sobre el campo TITULO podra tener sentido si, por
ejemplo, se seleccionan frecuentemente todos los profesores.
El orden de los campos de un ndice es de vital importancia en cuanto a la velocidad
de acceso a los datos. Los primeros campos deben ser aquellos que tengan valores
constantes para una gran cantidad de selecciones.
Los ndices adicionales significan una carga adicional para el sistema, ya que deben
ajustarse cada vez que cambia el contenido de una tabla. Por esta razn, las tablas
que se modifican muy frecuentemente deberan tener unos pocos ndices.
Los diferentes ndices para una misma tabla se distinguen entre s por medio de un
identificador que slo puede contener letras y nmeros. El valor 0 est reservado
para el ndice primario.
Pgina 28 de 194
2.2 Dominios
Un dominio es el objeto que define las caractersticas tcnicas de un campo o atributo:
el tipo de datos, la longitud, los valores posibles, las propiedades de salida,
Tanto para crear un dominio como para modificarlo o visualizarlo se debe acceder a la
pantalla inicial del Diccionario (SE11).
Veamos ms a fondo cmo es un dominio a travs de un ejemplo:
Seleccionamos la opcin Dominio e introducimos en el campo adyacente el nombre del
Dominio de datos que queremos tratar, en nuestro caso S_CITY. Pulsamos el botn de
Visualizar (el procedimiento es similar para Crear y Modificar), tambin podemos acceder a
estas opciones a travs del men Objeto Dict.
Llegaremos a la siguiente pantalla:
Pgina 29 de 194
2.2.1 Definicin
En la pestaa Definicin encontramos campos para introducir las siguientes
caractersticas formales:
Descripcin breve: Contiene una descripcin del dominio a crear, un texto explicativo
del dominio.
En nuestro caso la descripcin es "Nombre de una ciudad".
Tipo de datos: El tipos predefinido que mejor se adapta a las caractersticas del
objeto. Para visualizar los tipos posibles pulsamos F4 y vemos la siguiente ventana:
Pgina 30 de 194
En nuestro caso el tipo es "CHAR", pues los valores que se almacenan son cadenas de caracteres.
Longitud: Se corresponde al tamao mximo deseado para los valores que tomar el
dominio.
En nuestro caso la longitud es 20.
Los elementos del marco Atributos de salida varan dependiendo del tipo de datos
seleccionado. Por ejemplo para el tipo CHAR tenemos la opcin de minsculas y para
el tipo CURR tenemos la opcin del signo.
Longitud de salida: Representa la longitud en la que se va a representar el valor a la
hora de imprimirse en un informe, visualizarse en una pantalla, etc.
Tambin 20.
Rutina de conversin: Es una referencia a los procedimientos de conversin entre el
formato interno del dato y su representacin externa.
(En blanco)
Flag de Minsculas: Se permite la utilizacin de letras minsculas.
(No marcado)
Pgina 31 de 194
Pgina 32 de 194
El elemento de datos S_TO_CITY utiliza el dominio S_CITY. Este dominio es utilizado tambin
por otros elementos de datos que deben tener las mismas caractersticas tcnicas: S_CITY,
S_FROM_CIT, S_VIA_CITY. Cada uno tiene una aplicacin diferente dentro del modelo de
datos.
Podemos averiguar en qu elementos de datos se utiliza un dominio a travs de la opcin
"Utilidades"->"Referencia de utilizacin".
Tipo Instalado: Tipo de datos y longitud con el mismo significado que el que se define
en los dominios.
ID parmetro: Permite referenciar a un parmetro de memoria SAP. Ser til para
mostrar valores por defecto en pantallas, ya que este campo se completar con el
valor que tenga el parmetro de memoria SAP al mostrar la pantalla. (En nuestro caso
lo dejamos en blanco.)
Pgina 33 de 194
2.4 Estructuras
Las estructuras se definen en el Diccionario de Datos de la misma forma que las tablas,
pero no existe ninguna tabla en la base de datos que se corresponda con ella. Esto
quiere decir que, mientras que las tablas contienen datos que estn permanentemente
almacenados en la base de datos, las estructuras slo contienen datos en tiempo de
ejecucin de un programa. Para ellas slo existe la definicin lgica. Tienen la
finalidad de almacenar datos durante la ejecucin de un programa o permitir el paso
de informacin de un programa a otro.
Se pueden utilizar los mismos elementos de datos y dominios que en las tablas y se
pueden incluir las estructuras de otras tablas. Esto permite que, los programas que
sean complejos, enlacen datos que provienen de diferentes tablas.
2.5 Vistas
Los datos de una aplicacin a menudo se encuentran distribuidos en diferentes tablas
relacionadas. Por medio de las vistas podemos ver los datos como si se encontraran
en una nica tabla.
El primer paso en la definicin de una vista es elegir las tablas base que formarn
parte de ella. Si hay ms de una, debemos especificar la condiciones de unin (es
posible utilizar la clave externa definida entre las tablas). Despus, elegiremos los
campos de las tablas que queremos incluir en la vista (proyeccin), el resto de campos
quedan ocultos. Por ltimo, puede que queramos restringir los registros que deben
formar parte de la vista (seleccin).
Pgina 34 de 194
Pgina 35 de 194
Pgina 36 de 194
Pgina 37 de 194
Tambin podemos acceder a tablas pool y cluster con una vista de proyeccin.
El estatus de mantenimiento de la vista controla cmo se puede acceder a los datos
de la tabla con la vista de proyeccin.
Pgina 38 de 194
Pgina 39 de 194
Todas las tablas incluidas en una vista de ayuda deben enlazarse mediante claves
externas. Adems, slo se pueden utilizar claves externas que tengan ciertos atributos.
La funcionalidad de la vista de ayuda ha cambiado significativamente de la versin 3.0
a la versin 4.0. En la versin 3.0, la vista de ayuda se mostraba automticamente
para la ayuda de entrada (ayuda F4) para todos los campos que se verificaran contra
la primera tabla (tabla primaria) de la vista de ayuda. Esto ya no pasa en la versin 4.0.
En la versin 4.0 podemos crear explcitamente una ayuda de bsqueda que debemos
enlazar a los campos para los que se ofrecer.
Pgina 40 de 194
Primero se pegan las dos tablas. Cada registro de TABA se combina con cada registro
de TABB. Si no se define una condicin join, el resultado cruzado de las tablas TABA y
TABB puede ser visualizado mediante la vista.
Pgina 41 de 194
TAB1-CAMPO_A
TAB2-CAMPO_1
TAB1-CAMPO_B
TAB2-CAMPO_2
TAB1-CAMPO_A
TAB2-CAMPO_1
TAB1-CAMPO_B
Genrica
TAB1-CAMPO_C
Constante: C
La condicin join para la vista generada a partir de la clave externa en este caso sera:
CREATE VIEW... AS SELECT... WHERE
Pgina 42 de 194
2.5.6.1 Proyeccin
En algunas ocasiones, algunos campos de las tablas involucradas en una vista no
tienen inters por algn motivo. El conjunto de campo utilizados en la vista pueden
definirse explcitamente (proyeccin).
En nuestro ejemplo, el campo C4 no tiene inters y puede ocultarse.
Pgina 43 de 194
Pgina 44 de 194
Pgina 45 de 194
Pgina 46 de 194
Pgina 47 de 194
Pgina 48 de 194
Pgina 49 de 194
Pgina 50 de 194
Pgina 51 de 194
Pgina 52 de 194
Pgina 53 de 194
Pgina 54 de 194
3 Creacin de programas
3.1 Editor y Object Navigator
Para poder desarrollar los programas tenemos un editor de lenguaje ABAP/4. Este
editor nos permitir escribir, verificar y generar los programas. Hay varias maneras de
llegar al editor, pero el camino ms habitual para crear un nuevo programa del tipo
REPORT es (desde el men principal de SAP) Herramientas Workbench
ABAPDesarrollo Editor ABAP (SE38).
La pantalla principal del Editor tiene el siguiente aspecto:
Desde esta pantalla podremos crear, visualizar, modificar, copiar, renombrar, borrar,
verificar, activar y ejecutar (tambin en debugging) los programas.
Los programas se identifican con un nombre que debe cumplir las siguientes reglas:
Debe tener entre uno y cuarenta caracteres.
Si es programa de creacin propia debe comenzar por la letra Y o Z.
No se pueden usar los siguientes caracteres: punto, coma, espacio, parntesis, comilla
sencilla, comilla doble, signo igual, asterisco, tanto por ciento.
Para crear un programa, escribiremos el nombre del programa, seleccionaremos la
opcin Texto fuente y seleccionaremos la opcin de crear
Pgina 55 de 194
Todos estos atributos pueden ser utilizados para buscar un programa particular en el
Repository Information System.
Una vez completado estos campos obligatorios pulsaremos el botn de grabar
(F11).
Ahora tendremos que asignar el programa a un paquete, que clasifica el programa de
manera lgica. Esta asignacin slo se realiza una vez, cuando el objeto es creado
inicialmente.
Podemos escoger grabaremos como objeto local (botn
para conseguir
que no se transporte a otros sistemas. Si no es as, debemos asignar el objeto a un
proyecto (change request). Esta es una clasificacin cronolgica, cuando el proyecto
se acabe, podremos asignar el programa a otra change request.
Pgina 56 de 194
3.3.1.1 Sentencias
Un programa de ABAP/4 consiste en una serie de sentencias. Cada sentencia
comienza con una palabra clave y termina con un punto. Las palabras dentro de una
sentencia deben estar siempre separadas al menos por un espacio. No hay
restricciones de formato: una sentencia se puede indentar y puede ocupar varias
lneas, y podemos escribir varias sentencias en una misma lnea. Debemos
aprovechar esta libertad de formateo para hacer ms legibles nuestros programas.
DATA contador TYPE i.
DATA name(20).
MOVE 1
TO counter.
MOVE abc TO name.
WRITE counter. WRITE name
WRITE name.
ADD 1 TO counter1.
ADD 1 TO counter2.
counter2,
ADD 1 RO counter3.
counter3.
La palabra clave de una sentencia determina su categora, que puede ser una de las
siguientes:
Sentencias declarativas:
TYPES, DATA, TABLES
Sentencias de modularizacin:
START-OF-SELECTION
FORM ENDFORM.
Pgina 57 de 194
Procesan los
declarativas.
datos
definidos
con
sentencias
3.3.1.2 Comentarios
Los comentarios son textos que podemos escribir dentro del cdigo de un programa
para explicar el propsito de las sentencias que utilizamos. Son muy tiles para
nuestra propia compresin del programa y para la de otros usuarios.
Existen dos formas de incluir comentarios en nuestro programa:
Precedindolos con el carcter asterisco (*) como primer carcter de una lnea (en la
columna 1): toda ella se considerar como comentario, el sistema la ignora.
Precedindolos con una comilla doble () en una lnea: todo lo que vaya a continuacin,
hasta el final de la lnea, se considerar comentario, el sistema lo interpreta como
espacios en blanco.
DATA: suma TYPE p,
Campo de suma
contador TYPE i.
*Inicializar el campo suma
CLEAR suma.
ENTER
Cortar
Copiar
Pegar
Anular/Rehacer
Carga/Graba
Se puede acceder a todas las funciones del Editor usando la barra de men.
Pgina 58 de 194
Pgina 59 de 194
3.4.2 Lista
La manera ms sencilla de presentar los resultados al usuario es utilizar la sentencia
WRITE. Esta instruccin escribe el contenido de un objeto de datos de acuerdo a su
tipo en forma de una lista.
Sentencias WRITE consecutivas escriben en la misma lnea de salida hasta que est
llena; entonces se continua en la siguiente. Se puede utilizar un dato de posicin que
determine la creacin de una nueva lnea (/), la longitud de salida del campo o la
posicin en la que se empieza a escribir dentro de la lnea. Se puede escribir en
diversos colores.
La lista completa aparece de manera automtica cuando el programa finaliza su
ejecucin.
3.4.3 Mensajes
Se utiliza la sentencia MESSAGE para enviar mensajes al usuario.
El comportamiento del sistema despus de la aparicin del mensaje viene
determinado por el tipo de mensaje: de error (E), de informacin (I) o de aviso (W). El
comportamiento depende de la pantalla donde aparece el mensaje.
Cada sentencia ABAP llena el valor de la tabla de sistema SY-SUBRC con un cdigo
de retorno que indica el xito o fracaso de la instruccin. En general SY-SUBRC=0
indica que ha funcionado correctamente. Podemos hacer aparecer un mensaje en
funcin de estos cdigos de retorno
Pgina 60 de 194
Aqu se leen ciertas columnas de un registro concreto de la tabla spfli y se insertan en los
campos del mismo nombre de la estructura wa_spfli.
Edita un programa
Verificar
Test
Borrar
Borra un programa
Copiar
Copia un programa
Renombrar
Renombra un programa
(Ctrl. + F2).
Pgina 61 de 194
3.6.2 Activacin
Para activar un programa y as hacerlo visible para el resto de componentes del
sistema utilizaremos la opcin Programa -> Activar o
(Ctrl. + F3).
3.6.3 Ejecucin
Desde el editor, podemos ejecutar un programa. Para ello seleccionamos la opcin del
men Programa -> Verificar o pulsamos
(F8).
3.7 Debugging
La herramienta de debugging est pensada para encontrar errores semnticos en los
programas. Para poder depurarlos, los ejecutamos pasando por las lneas del cdigo
escrito y viendo el resultado de cada una de ellas de forma individual, de esta forma
podemos comprobar el efecto de cada una de las instrucciones escritas.
Hay diversas maneras de arrancar el ABAP Debugger.
Pgina 62 de 194
El icono
indica que en esa lnea de cdigo hay un breakpoint. Para fijar un punto de
ruptura en una lnea basta con hacer doble clic sobre ella.
Paso a paso
F6
Ejecutar
F7
Retornar
Pgina 63 de 194
Continuar
Continuar
procesando
hasta
el
siguiente breakpoint o hasta el fin del
programa,
Permite interrumpir el proceso en
funcin del valor de ciertas variables.
3.7.3 Breakpoints
Hemos visto que para fijar un breakpoint en una lnea basta con hacer doble-click
sobre ella. Aparece un smbolo de STOP delante de ella. Podemos ver la lista de todos
los breakpoints del programa que estamos depurando con el botn Breakpoints.
Para borrar un breakpoint se puede volver a hacer doble-click sobre la lnea o bien
utilizar la opcin de men Breakpoint-> Crear/Borrar.
Otra manera de fijar breakpoints en una lnea es utilizar la sentencia BREAK-POINT
dentro del cdigo del programa.
A parte de los breakpoints en lneas, podemos fijar puntos de ruptura en todas las
lneas que contengan una cierta sentencia, o en ciertos eventos o en subrutinas. Para
ello utilizamos la opcin de men Breakpoint -> Breakpoint en.
Los Watchpoints son breakpoints basados en que haya cambios en el contenido de un
campo o en que el campo tome cierto valor igual a otro campo o a una constante.
3.8
Pgina 64 de 194
Tipo Descripcin
V. Inicial
Utilidad
Empaquetado 0
Entero
(Integer)
-2^31 a +2^31-1
Contadores,
cantidades,
ndices,
periodos
de
tiempo
Coma flotante 0
(Floating
point)
-2,2E-308 a +1,8E308
Clculos
matemticos,
en rangos muy
amplios
Numeric Text
0...0
1 a 65535
Nmeros
en
forma de texto
Texto (Char)
Blancos
1 a 65535
Cadena
caracteres
Fecha (Date)
00000000 8
de
Pgina 65 de 194
Hora (Time)
000000
6 (hhmmss)
Hora:
se
pueden
sumar/restar
Hexadecimal
x'00'
1 a 65535
Valor Hexa.
Observaciones:
Los clculos con el tipo numrico I son los ms econmicos, seguidos de los tipos F y
P. Con nmeros de tipo F se pueden dar errores de aproximacin, por ello no se
deben comparar nunca dos campos de tipo F para ver si son iguales, sino que se
aconseja comprobar que su diferencia no supera una cierta tolerancia. Slo se deben
usar estos nmeros para clculos matemticos que admitan errores de aproximacin;
para clculos de negocio, utilizar siempre el tipo P.
a un tipo predefinido o a otro tipo definido por el usuario con la palabra TYPE.
Los nombres asignados a los tipos creados por el usuario pueden tener, como mximo,
30 caracteres (letras, nmeros y _) que no pueden ser todos numricos. Se
recomienda empezar siempre por una letra y utilizar el _ como separador si
combinamos palabras en el nombre.
TYPES: tipo_entero TYPE i,
fecha LIKE sflight-date,
nombre1(25),
tipo_empaquetado_2_dec Type P Decimals 2.
Pgina 66 de 194
4.1.4 Visibilidad
Cuando hacemos referencia a los tipos de datos con la opcin TYPE, debemos tener
en cuenta su visibilidad:
Los tipos de datos predefinidos de ABAP C, D, F, I, N, P T, y X son siempre visibles.
No podemos definir tipos de datos locales que se llamen igual en nuestros programas.
Los tipos de datos definidos en los procedimientos ocultan los tipos de datos que se
llamen exactamente igual que hayan sido declarados en la parte global del programa.
Los tipos de datos locales ocultan a los tipos de datos que se llamen exactamente
igual del Diccionario de datos.
El siguiente grfico muestra la visibilidad de los tipos de datos que son locales en un
programa determinado y los tipos de datos del Diccionario de ABAP:
Pgina 67 de 194
4.2.1 Variables
Para declarar los objetos de datos variables se utiliza la palabra clave DATA.
Para definir el tipo del objeto tenemos las mismas opciones que cuando definimos los
tipos de datos:
Si lo declaramos de algn tipo predefinido por el sistema o definido por nosotros
mismos utilizaremos la palabra TYPE.
Si lo queremos declarar en referencia a otro campo, ya sea del Diccionario de datos o
uno propio definido con anterioridad en el programa, utilizaremos la palabra LIKE.
Si no se especifica el tipo, se usa el tipo predefinido C. Si no se especifica longitud se
utiliza la que corresponde al tipo por defecto. Se puede indicar el nmero de
posiciones decimales con DECIMALS para objetos del tipo P.
La novedad es que podemos indicar un valor inicial para los objetos de datos variables
usando la palabra VALUE y a continuacin un valor fijo. Si no se utiliza esta opcin el
objeto tendr el valor inicial correspondiente a su tipo de datos.
DATA <nombrevar> TYPE <tipo_ABAP> [VALUE <literal>].
Pgina 68 de 194
Los nombres de los objetos de datos pueden ser de hasta 30 caracteres (letras, dgitos
y caracteres especiales). Los nicos caracteres que no se permiten son () + . , y :.
SPACE es un objeto de datos predefinido.
TYPES TC3(3) TYPE C.
DATA D1(3) TYPE C.
Predefinido
Predefinido
Existen una serie de objetos de datos que estn disponibles de forma automtica y
que no necesitan ser declarados: son los campos del sistema, de la tabla SYST.
Podemos utilizarlos en cualquier parte de cualquier programa.
SY-SUBRC, SY-DBCNT, SY-REPID, SY-DATUM, SY-UZEIT,
De manera anloga a los tipos de datos, los objetos de datos tambin pueden ser
elementales o estructurados, y los estructurados pueden ser estructuras (varios
objetos componentes o campos) o bien tablas internas (varias lneas con idntica
estructura).
DATA: BEGIN OF <estructura>,
,
END OF <estructura>.
DATA: TABLES <estructura del Diccionario ABAP>
* Esto es un vector:
DATA:BEGIN OF REUNION,
HORA_INICIO TYPE T,
HORA_FIN
TYPE T,
END OF REUNION.
*Defino con referencia a un campo de sistema
DATA HORA_ACTUAL LIKE SY-UZEIT.
Pgina 69 de 194
Ejemplo:
CONSTANTS C_PI TYPE P DECIMALS 5 VALUE 3.14159.
4.2.4 Tablas
Con la sentencia TABLES se declara un objeto de datos interno que se utiliza cuando
hay campo de pantalla que se refieren a campo de la tabla declarada. Define un rea
de trabajo en el programa para los datos que el usuario entra en pantalla o que el
programa pasa a la pantalla.
4.2.5 Rangos
Permiten almacenar conjuntos de valores de una forma normalizada, anloga a la
utilizada en los SELECT-OPTIONS. Para declarar estos objetos se utiliza la palabra
clave RANGES:
RANGES <rango> FOR <campo>.
Pgina 70 de 194
En este caso, los caracteres < y >, forman parte del nombre del field symbol.
Para asignar un objeto de datos de forma dinmica al field symbol, usaremos:
ASSIGN (<f>) TO <fs>.
Ejemplo:
REPORT ZPRUEBA.
DATA: MES(2)
TYPE n,
CAMPO(15) TYPE c.
DATA: BEGIN OF PRIMAVERA,
MES04(5) TYPE c VALUE 'ABRIL',
MES05(5) TYPE c VALUE 'MAYO',
MES06(5) TYPE c VALUE 'JUNIO',
END OF PRIMAVERA.
FIELD-SYMBOLS: <MES_PRIMAVERA>
CAMPO = 'PRIMAVERA-MESXX'.
MES = 4.
WRITE / 'MESES DE PRIMAVERA:.
WHILE ( MES <= 6 ).
CAMPO+13(2) = MES.
ASSIGN (CAMPO) TO <MES_PRIMAVERA>.
WRITE / <MES_PRIMAVERA>.
ADD 1 TO MES.
ENDWHILE.
Pgina 71 de 194
5 Procesamiento de Datos
5.1
Asignacin y conversin
Existen diversas sentencias ABAP con las que se pueden asignar valores a objetos de
datos. La ms importante es la sentencia MOVE. Funciona tanto para copiar objetos
elementales como para copiar estructuras y tablas complejas.
Si la estructura de un objeto de datos no se corresponde con la del valor que les
queremos asignar, se ejecutan ciertas reglas de conversin.
Los tipos compatibles pueden ser asignados sin conversin:
Dos tipos elementales son compatibles si son idnticos en tipo y longitud (y nmero
de decimales si son P).
Dos tipos estructurados son compatibles si tienen la misma estructura
componentes son compatibles.
y sus
Longitud
Valor
Tipo
Longitud
Valor
A___
ABCD
AB
-47110
47110-
12345-
12345-
-47.110
47.11-
Hay tambin reglas para convertir: field strings en field strings, campos elementales en
field strings, field strings en campos elementales.
Se pueden transportar valores entre estructuras, campo por campo, con la sentencia
MOVE-CORRESPONDING. Slo funciona si los campos que interesa copiar tienen los
mismos nombres. El sistema busca todos los campos de la primera estructura
<estr_1> cuyo nombre tambin aparece en la segunda <estr_2> y transporta <estr_1><nombre_campo> a <estr_2>-<nombre_campo> en los casos en que hay
correspondencia. El resto de campos permanecen inalterados.
5.1.1 Sub-campos
Se puede acceder y cambiar sub-areas de campos elementales especificando la
posicin y longitud del fragmento. Con algunas sentencias (MOVE, ASSIGN, WRITE
TO,) se pueden dar la posicin y la longitud como variables.
Pgina 72 de 194
5.2
Operaciones Numricas
5.2.1 Aritmticas
La sentencia para realizar clculos tiene el siguiente formato:
[COMPUTE] <campo> = <expresin aritmtica>
5.3
Subtract-corresponding,
Multiply-corresponding,
Divide-
Cadenas de caracteres
ABAP contiene una serie de sentencias para procesar campos de caracteres, de los
tipos c, d, n, t y string.
La sentencia STRLEN devuelve en un entero la longitud de una cadena.
Ver programa DEMO_DATA_STRING.
5.3.1 CONCATENATE
CONCATENATE c1 cn INTO c [SEPARATED BY s].
Combina dos o ms cadenas (c1, , cn) y asigna el resultado a otra (c). El sistema
ignora los espacios al final de las cadenas individuales originales.
Mediante la adicin SEPARATED BY s se puede especificar un campo de caracteres
que se situar entre las cadenas individuales con su longitud definida.
Si el resultado de la concatenacin cabe en c, SY-SUBRC valdr 0. Si el resultado
tiene que ser truncado, valdr 4.
Pgina 73 de 194
El sistema buscar el delimitador del dentro del campo c. Los fragmentos anteriores y
posteriores al delimitador se copiarn a los campos destino. Debemos especificar
suficientes campos destino. En caso contrario el ltimo contendr el resto de la cadena,
incluidos los delimitadores.
Si todos los campos destino son suficientemente largos y no hay que truncar ningn
fragmento, SY-SUBRC valdr 0. En caso contrario valdr 4.
5.3.3 SHIFT
Desplaza los caracteres de una cadena una serie de posiciones:
SHIFT c [BY n PLACES] [LEFT | RIGHT | CIRCULAR].
5.3.4 REPLACE
REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern IN str WITH new.
REPLACE SECTION [OFFSET off] [LENGTH len] OF str WITH new.
Con esta sentencia se pueden sustituir caracteres de la primera cadena (str) con
caracteres de la segunda (new).
La primera variante se base en detectar una muestra y la segunda es posicional.
5.3.5 CONDENSE
CONDENSE c [NO-GAPS].
Todas las ocurrencias de una serie de espacios en blanco se sustituyen por un nico
espacio. Con NO-GAPS se eliminan todos los espacios.
5.3.6 TRANSLATE
TRANSLATE text USING pattern.
Pgina 74 de 194
5.3.7 OVERLAY
OVERLAY c1 WITH c2 [ONLY str].
Sobrescribe las posiciones de la cadena c1 que contienen caracteres de str con los
caracteres correspondientes de c2. Si no indicamos ONLY str, se sobrescriben las
posiciones de c1 que tienen blancos.
SY-SUBRC valdr 0 si al menos se sustituye un carcter de c1. En caso contrario
valdr 4.
5.3.8 FIND
FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern IN str.
Pgina 75 de 194
Igual
NE
<>
No igual
GT
>
Mayor que
GE
>=,=>
LT
<
Menor que
LE
<=,=<
BETWEEN f1 AND f2
Intervalo
IS INITIAL
Valor inicial,
blancos 0
[NOT] IN
es
decir,
Se pueden combinar expresiones lgicas con las palabras NOT, AND y OR.
Se pueden anidar hasta el nivel deseado. Los parntesis que marcan las
subexpresiones se consideran palabras y deben ir separadas del resto por espacios.
Contains Only
CN
CA
Contains Any
NA
CS
Contains String
NS
Contains No String
CP
Covers Pattern
NP
No Pattern
6.2.1 IF
IF <expresin_lgica>
Pgina 76 de 194
6.2.2 CASE
CASE <objeto>.
WHEN <objeto1>.
[bloque de sentencias]
WHEN <objeto2> OR <objeto3>.
[bloque de sentencias]
WHEN OTHERS.
[bloque de sentencias]
ENDCASE.
6.3 Bucles
Como en otros lenguajes de programacin, en ABAP se pueden realizar bucles con las
palabras DO y WHILE. Se pueden anidar bucles.
El campo de sistema SY-INDEX tiene el valor 1 durante el primer paso del bucle y es
incrementado en 1 a cada nuevo paso. El nmero de pasos no puede ser alterado
mediante la modificacin de este campo dentro del bucle.
6.3.1 DO
DO [(n) TIMES].
[bloque de sentencias]
ENDDO.
6.3.2 WHILE
WHILE <expresin_lgica>.
[bloque de sentencias]
ENDWHILE.
Pgina 77 de 194
6.3.3 Otros
Por ejemplo la sentencia LOOP que lee tablas internas.
Esta sentencia slo se puede utilizar dentro de bucles. Cuando se ejecuta, se finaliza
inmediatamente el paso actual y se contina el flujo del programa con el paso
siguiente del bucle.
DATA resto TYPE i.
DO 20 TIMES.
resto = sy-index MOD 2.
IF resto <> 0.
CONTINUE.
ENDIF.
WRITE / sy-index.
ENDDO.
6.4.2 CHECK
CHECK <expresin_lgica>.
6.4.3 EXIT
EXIT.
En un bucle esta sentencia nos sacar del bucle finalizando el paso actual.
contina la ejecucin con la primera sentencia siguiente al fin del bucle.
DATA limit TYPE i VALUE 10.
DO.
IF sy-index > limit.
EXIT.
Pgina 78 de 194
Se
Pgina 79 de 194
7 Pantalla de Seleccin
La pantalla de seleccin es la parte del programa que nos permite disear la interfase
interactiva de entrada de datos por parte del usuario.
Los datos introducidos por el usuario se pueden usar en el programa para filtrar la
informacin de manera que slo se procese aquella que cumpla con los criterios
definidos en la pantalla de seleccin. Por ejemplo, si el programa crea una lista a
partir de los datos de una tabla con muchos registros, el usuario puede entrar
intervalos para algn campo clave y slo los datos que estn en este rango son ledos
y mostrados en la lista. As se reduce considerablemente la carga del sistema.
Para poder entrar selecciones que reduzcan la cantidad de datos que de deben tratar
existen los siguientes objetos de datos especiales:
PARAMETERS que definen campos simples de entrada
SELECT-OPTIONS con los que definimos selecciones ms complejas: mltiples
valores, intervalos, valores excluidos, etc.
Con estas dos instrucciones podemos generar una pantalla de seleccin estndar para
un programa ejecutable (la pantalla 1000). Se pueden generar otras pantallas de
seleccin adicionales con SELECTION-SCREEN BEGIN OF SCREEN<nnn> y se las
puede llamar con CALL SELECTION-SCREEN.
Los textos que aparecen en la pantalla de seleccin al lado de los campos de entrada
son, por defecto, los nombres de las variables. Pero se pueden introducir textos ms
explicativos y traducirlos a diferentes lenguajes. As se mostrarn en el lenguaje
usado por el usuario en la conexin.
El sistema comprueba que los datos introducidos tienen un formato correcto; si el tipo
no corresponde con el definido para el campo se mostrar un mensaje de error y el
campo estar preparado para que se corrija la entrada.
Si un campo de entrada se define con referencia a un campo del diccionario, se utiliza
la ayuda de bsqueda que le corresponde pulsando F4.
Se pueden crear variantes para cualquier pantalla de seleccin. Son conjuntos de
valores preasignados para los parmetros de entrada que se pueden grabar y
reutilizar posteriormente. Pueden hacer referencia a ms de una pantalla. Dependen
del mandante.
7.1 Parameters
Recogen un nico valor como criterio de seleccin. Cuando el usuario introduce un
valor en el parmetro de pantalla y ejecuta el programa, el valor se pasa al objeto de
datos interno correspondiente.
Para incluir parmetros de seleccin en la pantalla de seleccin pondremos en el
cdigo del programa la palabra clave PARAMETERS seguida del nombre de
parmetro y su tipo.
La forma de la sentencia es:
PARAMETERS <parmetro>[(<long>)] [TYPE <tipo>] [DECIMALS <n>] [LIKE <f>]
[OBLIGATORY] [DEFAULT <valor>] [MEMORY ID <pid>]
[AS CHECKBOX]
[RADIOBUTTON GROUP <grupo>].
Pgina 80 de 194
Pgina 81 de 194
T_LISO
T_RIZADO
T_M_RIZA
7.2 Select-options
Los criterios de seleccin se utilizan para que el usuario pueda realizar selecciones
complejas para un campo. En la pantalla de seleccin aparecen dos campos de
entrada del mismo tipo, de manera que el usuario puede introducir un rango de valores.
Se definen poniendo la palabra clave SELECT-OPTIONS seguida del nombre del
rango de seleccin y el campo al que hace referencia. Su sintaxis es:
SELECT-OPTIONS <tabla_seleccin> FOR <campo>.
El sistema chequear las entradas de seleccin contra el campo que aparece despus
del FOR. Este campo debe estar definido en una sentencia DATA o TABLES. Los dos
campos que aparecen en pantalla tienen los mismos atributos tcnicos que ste.
Pgina 82 de 194
OPTION
LOW
HIGH
Los campos sign y option se llenan por defecto con I y EQ para valores individuales y
con I y BT para intervalos.
Cuando el usuario introduce diversos valores o intervalos de seleccin y ejecuta el
programa, el sistema coloca los valores en esta tabla interna.
Existe una variante especial de la clusula WHERE de las selecciones a la base de
datos que permite utilizar esta tabla interna como posibles valores de un campo.
<g> y <h> deben ser literales (entre comillas simples) o los nombres de campos que
contengan el valor con el queremos inicializar el parmetro. Slo se puede inicializar la
primera lnea de la tabla de seleccin con los valores por defecto.
Para inicializar el campo LOW usar DEFAULT <g>.
Para inicializar los campos LOW y HIGH, usar DEFAULT <g> TO <h>.
Para inicializar el campo OPTION aadiremos:
DEFAULT <g> [TO <h>] OPTION <op>.
Pgina 83 de 194
7.4.1 Bloques
Para agrupar selecciones relacionadas entre s usamos:
SELECTION-SCREEN BEGIN OF BLOCK <bloque>
[WITH FRAME <marco>]
[TITLE <texto>]
Pgina 84 de 194
7.5 Eventos
La pantalla de seleccin aparece despus del bloque de evento INITIALIZATION.
El bloque AT SELECTION-SCREEN pertenece a la pantalla de seleccin. Cada vez
que el usuario pulsa Enter o una tecla de funcin, o pulsa un botn del men o escoge
una opcin del men, el sistema realiza chequeos sobre el tipo de los campos de
entrada. Si el tipo no es el correcto, se muestra un mensaje de error y el campo vuelve
a estar preparado para rectificar la entrada. Cuando se han corregido los errores de
tipo el sistema lanza el evento AT SELECTION-SCREEN. En el bloque
correspondiente se pueden realizar otros chequeos y lanzar mensajes de error (con
MESSAGE) y permitir la correccin de los campos errneos. Cuando acaba el bloque
sin errores se vuelve a mostrar la pantalla de seleccin.
Cuando se ejecuta el programa y se sale de la pantalla de seleccin, se procesa
tambin el bloque AT SELECTION-SCREEN y despus, si no hay errores, el bloque
de evento START-OF-SELECTION.
7.7 Mensajes
Hemos visto que para indicarle al usuario que los valores que ha introducido en una
pantalla no son correctos se le pueden mostrar mensajes. Se utilizan en general para
mostrar cualquier informacin al usuario. Los mensajes estn almacenados en la tabla
T100 organizados por lenguaje, un identificador y un nmero de tres dgitos. Si
queremos crear mensajes propios sus identificadores deben comenzar por Y Z.
Los mensajes pueden contener hasta 4 variables, identificadas por &1, &2, &3 y &4.
Se puede crear un texto descriptivo largo para cada mensaje; en ste, las variables
correspondientes a las anteriores son &v1&, &v2&, &v3& y &v4&.
Pgina 85 de 194
terminacin
salida
Como el tipo A,
MESSAGE_TYPE_X.
error
aviso
informativo
xito
pero
se
lanza
un
short
dump
Para pasar valores a las variables del mensaje (que son como mximo cuatro), los
ponemos a continuacin de la palabra WITH. El campo al nivel i sustituye a la variable
&i.
Es posible usar mensajes sin declarar el identificador en la instruccin REPORT o usar
mensajes de clases diferentes a la declarada con la siguiente variante de la sentencia:
MESSAGE Tnnn(<identificador>)
El identificador entre parntesis a continuacin del nmero del mensaje. Otra manera
de crear un mensaje, que permite una llamada dinmica es la siguiente:
MESSAGE ID <identificador> TYPE <tipo> NUMBER <nmero> WITH ...
Pgina 86 de 194
Pgina 87 de 194
Descripcin
SELECT
<campos>
Pgina 88 de 194
WHERE
Especifica que lneas de la tabla vamos a leer en funcin de que
<condiciones> cumplan la condicin fijada.
ORDER BY
FROM
spfli
INTO
CORRESPONDING FIELDS OF wa
Cuando no usamos la adicin SINGLE, el sistema lee todos los registros de la tabla
que cumplen las condiciones especificadas en la clusula WHERE. El programa ABAP
lee las lneas una por una en un bucle, guardando en cada paso los datos en el rea
indicada en la clusula INTO. Para marcar el final del bucle debemos utilizar la
sentencia ENDSELECT. Todas las instrucciones que se encuentran entre las
sentencias SELECT y ENDSELECT se ejecutan para cada entrada leda.
SELECT [DISTINCT] <f1> ... <fn>
FROM <dbtab>
Pgina 89 de 194
Si utilizamos DISTINCT, el sistema excluye las lneas duplicadas, si no leer todos los
registros que cumplan la condicin.
SY-SUBRC vale 0 si el sistema ha podido leer al menos un registro. Despus de
ejecutar la sentencia SELECT en cada paso, el campo SY-DBCNT contiene el nmero
de registros ledos hasta el momento. Despus del ENDSELECT contiene el nmero
de total de lneas ledas.
DATA wa_spfli LIKE spfli.
SELECT
FROM
spfli
INTO
8.2.2 Destino
Con la adicin CORRESPONDING FIELDS OF, se puede llenar el rea de destino
componente a componente pasando los valores si los nombres de los campos son
idnticos:
... INTO CORRESPONDING FIELDS OF <wa>.
Se pueden guardar los registros en una tabla interna con la opcin INTO TABLE. En
este caso el sistema no realiza un bucle para leer los datos y no es necesario utilizar la
instruccin ENDSELECT. Esta opcin es ms eficiente que leer los registros en un
bucle y aadir las lneas una a una a la tabla interna.
... INTO TABLE <itab>
Para utilizar este mtodo las dos tablas tienen que tener idntica estructura. Pero
podemos traspasar slo los campos equivalentes:
... INTO CORRESPONDING FIELDS OF TABLE <ITAB>.
Siempre se borran las entradas existentes en la internal table, a no ser que se utilice la
siguiente versin:
... APPENDING CORRESPONDING FIELDS OF TABLE <ITAB>.
Ver
programas
de
ejemplo
DEMO_SELECT_INTO_PACKAGE.
DEMO_SELECT_INTO_TABLES
FROM
spfli
INTO
Pgina 90 de 194
Correcto
Incorrecto
NE
<>
GT
>
GE
>=
LT
<
LE
<=
BETWEEN f1 AND f2
spfli~cityfrom
Pgina 91 de 194
spfli~cityto
sflight~fldate
Con un LEFT OUTER JOIN la tabla resultante puede contener registros de la tabla de
la izquierda sin que existan registros correspondientes en la de la derecha. Las
condiciones del WHERE no podrn contener campos de la tabla de la derecha.
SELECT scarr~carrid scarr~carrname spfli~connid spfli~cityfrom spfli~cityto
INTO TABLE itab_flights
FROM scarr LEFT OUTER JOIN spfli
ON scarr~carrid = spfli~carrid
WHERE scarr~carrid IN s_carr
ORDER BY scarr~carrid spfli~connid.
Ver
tambin
programas
de
ejemplo
DEMO_SELECT_INNER_JOIN,
DEMO_SELECT_LEFT_OUTER_JOIN,
DEMO_SELECT_FOR_ALL_ENTRIES_1
y
DEMO_SELECT_FOR_ALL_ENTRIES_2.
el mnimo de la columna
MAX
el mximo de la columna
Pgina 92 de 194
la media de la columna
SUM
el total de la columna
COUNT
DEMO_SELECT_GROUP_BY
Pgina 93 de 194
Slo funciona si seleccionamos todas las columnas con * y si usamos una nica tabla
(ni con vistas ni con joins).
Para usar cualquier secuencia de columnas usamos:
... ORDER BY c1 [ASCENDING|DESCENDING] ... cn [ASCENDING|DESCENDING]
Per defecto el orden es ascendente. Slo se pueden utilizar columnas que estemos
seleccionando.
La especificacin de columnas puede ser dinmica. Se utiliza una tabla interna con un
campo de tipo C y de un mximo de 72 caracteres que contiene los nombres de las
columnas.
Ver programa de ejemplo DEMO_SELECT_ORDER_BY.
Pgina 94 de 194
Una base de datos lgica es un programa auxiliar que slo puede ser utilizado en
conjuncin con programas ejecutables de tipo 1. Se crea el enlace entre estos
programas cuando se introduce el nombre de la BDL en los atributos del ejecutable.
Una misma base de datos lgica se puede utilizar en varios programas ejecutables.
A partir de la versin 4.5a no es obligatorio enlazar la base de datos al programa
ejecutable a travs de los atributos. Ahora tambin es posible llamar a las bases de
datos lgicas utilizando el mdulo de funcin LDB_PROCESS. Esto nos permite llamar
a varias bases de datos lgicas desde cualquier programa ABAP. Tambin es posible
llamar a las bases de datos lgicas ms de una vez en un programa.
En resumen, para crear un listado mediante una BDL, necesitamos dos programas:
uno que lee la tabla (la base de datos lgica) y un segundo que procesa los datos.
Estos programas se comunican mediante los eventos PUT y GET.
El siguiente esquema muestra como se codificaran dos programas para acceder a un dato de la
tabla SBOOK:
Programa con SELECT:
REPORT
REPORT
TABLES: SPFLI,
TABLES: SPFLI,
SFLIGHT,
SFLIGHT,
SBOOK.
SBOOK.
START-OF-SELECTION.
SELECT * FROM SPFLI WHERE
START-OF-SELECTION.
GET SPFLI.
<bloque de procesamiento>
<bloque de procesamiento>
Pgina 95 de 194
GET SFLIGHT.
<bloque de procesamiento>
<bloque de procesamiento>
GET SBOOK
<bloque de procesamiento>
ENDSELECT.
<bloque de procesamiento>
END-OF-SELECTION.
ENDSELECT.
ENDSELECT.
Es apropiado utilizar una base de datos lgica siempre que las tablas que queremos
leer se correspondan con la estructura y cuando el flujo de seleccin-lecturaprocesamiento-visualizacin coincida con los requerimientos de la aplicacin.
Pantalla de seleccin
Programa de lectura
Pgina 96 de 194
VARIANT
EXPRESSIONS
FIELD_SELECTION
Pgina 97 de 194
SELECTIONS
GET
GET_LATE
CB_PROG
CB_FORM
Pgina 98 de 194
[TYPE <t>]
<evento>
<verificar>.
<at>
<evento>
<verificar>
LDB_NOT_REENTRANT
LDB_SELECTIONS_NOT
_ACEPTED
9.3.5 Ejemplo
TABLES SPFLI.
Pgina 99 de 194
TYPE RSFS_FIELDS.
AT_VUELTA-LDBNODE
= 'SPFLI'.
AT_VUELTA-GET
= 'X'.
AT_VUELTA-GET_LATE = 'X'.
AT_VUELTA-CB_PROG
= SY-REPID.
AT_VUELTA-CB_FORM
= 'VUELTA_SPFLI'.
= 'SFLIGHT'.
AT_VUELTA-GET
= 'X'.
AT_VUELTA-CB_PROG
= SY-REPID.
AT_VUELTA-CB_FORM
= 'VUELTA_SFLIGHT'.
= 'S'.
AT_TABSEL-SELNAME = 'CARRID'.
LOOP AT S_CARR.
MOVE-CORRESPONDING S_CARR TO AT_TABSEL.
APPEND AT_TABSEL TO TABSEL.
ENDLOOP.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
LDBNAME
= 'F1S'
VARIANT
= ' '
EXPRESSIONS
= TEXPR
FIELD_SELECTION = CSEL
TABLES
= VUELTA
SELECTIONS = TABSEL
EXCEPTIONS
LDB_NOT_REENTRANT
= 1
LDB_INCORRECT
= 2
LDB_ALREADY_RUNNING
= 3
LDB_ERROR
= 4
LDB_SELECTIONS_ERROR
= 5
LDB_SELECTIONS_NOT_ACCEPTED = 6
VARIANT_NOT_EXISTENT
= 7
VARIANT_OBSOLETE
= 8
VARIANT_ERROR
= 9
FREE_SELECTIONS_ERROR
= 10
CALLBACK_NO_EVENT
= 11
CALLBACK_NODE_DUPLICATE
= 12
OTHERS
= 13.
TYPE SPFLI
EVENTO TYPE C
VERIF
TYPE C.
CASE EVENTO.
WHEN 'G'.
WRITE: / AT-CARRID, AT-CONNID, AT-CITYFROM, AT-CITYTO.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM.
FORM VUELTA_SFLIGHT USING NOMBRE TYPE LDBN-LDBNODE
AT
TYPE SFLIGHT
EVENTO TYPE C
VERIF
TYPE C.
10 Tablas Internas
En el tema de objetos de datos ya hemos hablado de las tablas internas, que son
secuencias de registros del mismo tipo.
Las tabla internas se utilizan normalmente para tener accesibles en la memoria del
programa ciertos datos fuente o resultados del proceso. Ejemplos de usos tpicos son:
Guardar temporalmente datos de tablas de la base de datos para procesarlos a
continuacin.
Guardar datos que se mostrarn despus en un listado.
Almacenar datos para pasarlos a ficheros locales u otros destinos.
El nmero de lneas en una tabla interna no es predeterminado ni esttico. El sistema
las expande de manera dinmica en tiempo de ejecucin en funcin de las
necesidades. El nico lmite es el de capacidad mxima establecida durante la
instalacin. El espacio de memoria inicial reservado para una tabla interna son 8 Kb y
si se necesita ms memoria se expande en bloques de esta misma medida.
Efecto
APPEND
INSERT
MODIFY
DELETE
LOOP AT
READ TABLE
SORT
CLEAR
<itab> OCCURS 5,
Para este tipo de tabla tendremos que definirnos previamente un field string que haga
las funciones de header line, o lo que es lo mismo, de WA.
Append
Almacena el contenido del header line al final de la tabla interna. Tambin es posible
almacernarlo por un orden en concreto.
APPEND <itab> [SORTED BY <field>].
Esto es mas rpido que asignar un <WA> al header line de la tabla y realizar
posteriormente un append.
10.4.2
Collect
Almacena el contenido del header line en la tabla interna, con la particularidad que si
encuentra un registro con la misma clave, sumara el contenido de los campos
numricos si el registro los tuviera. Es decir, totaliza los campos numricos.
COLLECT <itab>.
Loop
Podemos procesar mltiples registros de una tabla interna con la sentencia de bucle
LOOP. A cada paso del bucle se copia el siguiente registro de la tabla interna en el
rea de trabajo especificada por la palabra INTO o en la lnea de cabecera de la tabla.
Se pueden determinar los registros a leer especificando algunos campos clave o
indicando los ndices.
LOOP AT <tabla>
[ INTO <area> ]
[ FROM <i1> TO <i2> ]
[ WHERE <campo_clave1> = <valor1> ...].
10.5.2
Read
Permite leer un registro concreto de una tabla interna. Se pueden usar tanto los
valores de los campos clave (WITH KEY) como el ndice del registro (INDEX). Si se
usa la adicin FROM se toman los valores de bsqueda de los campos
correspondientes del rea indicada. El sistema lee el primer registro de la tabla que
corresponde al criterio de bsqueda indicado.
READ TABLE <tabla>
[ INTO <area> ]
[ WITH KEY <campo_clave> = <valor>]
[ FROM <area> ]
[ INDEX <indice>]
10.6 Modificaciones
Estas tres instrucciones permiten procesar registros concretos especificando su ndice
o especificando la clave.
10.6.1
Modify
Sobrescribe el registro con ndice i con los contenidos del rea de trabajo. La lnea i
debe existir previamente.
MODIFY <tabla> [ FROM <area> ] [INDEX <i>].
O modifica el registro que tiene los mismos campos clave que el rea con el contenido
de sta.
MODIFY TABLE <tabla> [ FROM <area> ].
10.6.2
Insert
Crea un nuevo registro en la posicin anterior a la lnea i usando los contenidos del
rea de trabajo. Si la tabla tiene i-1 registros, es equivalente a un APPEND, pues
aadimos el nuevo registro al final de la tabla.
INSERT [ <area> INTO ] <tabla> [INDEX <i>].
10.6.3
Delete
FROM
<id1>
TO
<id2>.
Se
borra
por
rango,
incluidos
los
Refresh
Borra todos los registros de la tabla. No descarga el espacio de memoria usado por
esta. El header line se mantiene igual.
REFRESH <itab>.
10.7.2
Clear
10.7.3
Free
Borra los registros de la tabla y libera el espacio de memoria usado por esta. El header
line se mantiene igual.
FREE <itab>.
Atributos
Permite obtener informacin acerca de una tabla interna mediante dos clusulas:
Lines: Retorna el nmero de entradas que contiene la tabla.
Occurs: Retorna en valor de Occurs de la definicin.
DESCRIBE TABLE <itab> [LINES] resul_lines [OCCURS] resul_occurs.
10.8.2
Sort
Permite ordenar una tabla interna. Esta ordenacin puede hacerse indistintamente
ascendente o descendentemente por uno o varios campos. No es necesario que todos
tengan el mismo orden, es decir podemos ordenar una tabla por un campo
descendentemente y a su vez por otro ascendentemente. La secuencia de campos
determina la jerarqua de ordenacin.
SORT <tabla> BY <f1> [{ASCENDING|DESCENDING} [AS TEXT]]
<f2> [{ASCENDING|DESCENDING} [AS TEXT]]...
11 Crear listas
Las listas son pantallas de resultados que muestran datos de manera estructurada. Se
definen formatean y llenan usando sentencias ABAP. El sistema muestra las listas
definidas con sentencias ABAP en una pantalla especial de lista, cuya lgica de flujo
es proporcionada por el sistema y permanece oculta para el programador.
Las listas son importantes porque slo los datos en forma de lista pueden ser enviados
al Spool de R/3 para su impresin.
Antes de decidir que crearemos un programa nuevo para proporcionarle un listado
concreto a un usuario deberamos buscar otros medios. Es posible que se pueda
configurar un listado estndar para obtener lo que necesita, o que podamos utilizar
herramientas como el ABAP Query.
Si no hay otra opcin, crearemos un programa de tipo 1.
En los programas ejecutables, de tipo 1, se muestra automticamente una lista
despus de procesarlo siempre que se haya incluido una de las sentencias que genera
lneas (WRITE, SKIP o ULINE).
Todas las lneas generadas se almacenan temporalmente en un buffer de lista hasta
que acaba la ejecucin. Entonces todos los datos se muestran en una pantalla de lista.
Si no indicamos lo contrario, el listado estar formado por una nica pgina continua
de como mximo 60000 lneas. La mxima longitud de una lnea son 1023 caracteres.
Veremos que hay muchas opciones para el diseo del listado: de escritura
(posicionamiento, colores, separadores, iconos), de formato (ancho de la lista,
clasificacin) y de diseo de pgina (cabeceras, saltos de pgina, pie de pgina).
11.1.1
Como funcin estndar de los programas ejecutables, el sistema genera por defecto
dos lneas de cabecera (la cabecera estndar). La primera contiene el ttulo del
programa en la esquina izquierda superior y el nmero de pgina en la esquina
derecha. La segunda lnea es una lnea horizontal continua. Las dos lneas
permanecen en la ventana cuando nos desplazamos por el listado.
Cuando imprimimos un listado, la primera lnea de cabecera tiene a la izquierda la
fecha del sistema, en el centro el ttulo del programa y a la derecha el nmero de
pgina.
La lista estndar tiene una cabecera y hasta cuatro lneas de cabecera de columna
que se pueden crear bien desde el Editor usando las herramientas de mantenimiento
de los elementos de texto, o bien desde la propia lista una vez ejecutado el programa
a travs de la opcin de men (Sistema->Lista->Cabeceras). De esta segunda manera
es ms sencillo posicionar las cabeceras porque vemos la lista en pantalla.
Cuando no se ha creado un texto de cabecera se utiliza el ttulo del programa.
Como estos textos forman parte de los elementos de texto del programa, se pueden
traducir a varios lenguajes para que se muestren al usuario en el lenguaje escogido
por l para la conexin. Esta posibilidad es muy interesante para compaas
multinacionales.
11.1.2
WRITE
NO-ZERO
DD/MM/YY,
CURRENCY w
UNIT w
USING EDIT
<mascara>
MASK
UNDER g
LEFT-JUSTIFIED
CENTERED
Escritura centrada
RIGHT-JUSTIFIED
COLOR <n>.
COL_BACKGROUND
Fondos
COL_HEADING
Cabeceras
COL_NORMAL
Lneas de lista
COL-TOTAL
Totales
COL_KEY
Columnas clave
COL-POSITIVE
Valores positivos
COL_NEGATIVE
Valores negativos
COL_GROUP
Niveles de control
11.1.3
Iconos y smbolos
11.1.4
11.1.5
SKIP
11.1.6
ULINE
Dimensiones
11.2.2
Cabeceras no estndar
11.2.3
Columnas fijas
Podemos utilizar SET LEFT SCROLL-BOUNDARY para fijar una serie de columnas
del listado de manera que cuando nos desplacemos horizontalmente se mantengan en
su lugar.
Si no especificamos la columna final con la adicin COLUMN, el sistema utiliza la
posicin de escritura actual (SY_COLNO) como lmite. El margen se debe especificar
en cada nueva pgina; situaremos la instruccin en el evento TOP-OF-PAGE.
Podemos usar tambin NEW-LINE NO-SCROLLING para evitar el desplazamiento de
la siguiente lnea al movernos horizontalmente.
11.2.4
Salto de pgina
11.2.5
Pie de pgina
11.2.6
Sentencias adicionales
BACK
[ON|OFF]
INTENSIFIED
[ON|OFF]
INVERSE
[ON|OFF]
HOTSPOT
[ON|OFF]
INPUT
[ON|OFF]
RESET
Hay dos tcnicas posibles para formatear los datos por niveles: usando tablas internas
o usando extract datasets.
Tablas internas
[SUM.] ENDAT.
AT NEW <f>.
[SUM.] ENDAT.
[SUM.] ENDAT.
LIKE spfli-cityto,
carrid
LIKE spfli-carrid,
deptime
LIKE spfli-deptime,
...
END OF struc_conn.
DATA: itab_conn TYPE TABLE OF struc_conn,
wa_conn TYPE struc_conn.
...
SORT itab_conn.
LOOP AT itab_conn INTO wa_conn.
AT FIRST. [...]. ENDAT.
AT NEW cityfrom. WRITE wa_conn-cityfrom. ENDAT.
AT NEW cityto.
11.5.2
Extract datasets
Existen objeto de datos, llamados extract datasets, que se declaran con la sentencia
FIELD-GROUPS y que pueden contener slo datos globales del programa. Se deben
especificar los datos globales que se almacenarn en cada field-group con la
sentencia INSERT INTO. La sentencia INSERT no se considera declarativa, y se
pueden expandir los field-groups en el curso del programa. La consecuencia es que
tenemos diversos tipos de registros con campos que se pueden asignar
dinmicamente, en contraposicin al tipo de lnea nico y esttico de las tablas
internas.
Existe un field-group especial que se denomina HEADER, que contiene los campos
utilizados para ordenar y que se sita delante de cada registro del dataset. Debe
contener todos los campos que se desea utilizar en el procedimiento de ordenacin.
Con la sentencia EXTRACT se escriben todos los campos del field-group como un
registro al dataset secuencial pasando los valores entre campos del mismo nombre.
Una vez que se ha ejecutado una sentencia EXTRACT ya no es posible expandir con
INSERT el field-group.
REPORT z_extracts.
11.6 Impresin
Un listado se puede imprimir mientras se genera: desde la pantalla de seleccin (sin
que aparezca en pantalla), desde el programa o en un proceso de fondo. Tambin se
puede imprimir despus de la generacin de la lista en pantalla.
Para imprimir una lista se deben introducir los parmetros de impresin, que controlan
la salida: dispositivo de salida, nmero de copias, formato (lneas, columnas), portada,
etc. Se puede utilizar el mdulo de funcin SET_PRINT_PARAMETERS para
inicializar los valores por defecto para la impresin de una lista online. Se pueden
introducir en pantalla o seleccionarlos en el programa (con la sentencia NEW-PAGE
PRINT ON).
release
= X
receiver
= sy-uname
list_text
= Datos de vuelo
IMPORTING
out_parameters = print_params
valid
= val.
IF val = X.
NEW-PAGE PRINT ON PARAMETERS print_params NO DIALOG.
ELSE.
MESSAGE i650 WITH val.
ENDIF.
...
Con esta funcin proporcionamos al usuario una pantalla de parmetros que se puede
usar para modificarlos y contiene la opcin de cancelar la impresin. Se devuelve el
registro de parmetros en la estructura out_parameters y, en los casos con xito, el
parmetro de salida valid contiene una X. Si no se ha podido crear un nuevo registro
con los parmetros, out_parameters estar vaco y valid contendr un espacio.
12 Listas interactivas
Aunque el propsito principal de una lista es mostrar datos, en ocasiones los usuarios
deben interactuar con ellos: por eso existe la posibilidad de que las listas reaccionen a
clicks con el ratn y otras acciones (pulsar botones, teclas de funcin, opciones de
men, etc.). Llamamos listas interactivas a aquellas en las que el usuario puede
realizar acciones que permiten, por ejemplo, navegar a otras listas ms detalladas o a
otras pantallas. El uso de listas de detalle permite una mejor distribucin de la
informacin y aumenta la velocidad de acceso a los datos porque slo se leen los
datos adicionales de una lnea particular seleccionada de una lista bsica.
El programa interno de sistema llamado procesador de listas es el responsable de
mostrarlas y de interpretar las acciones del usuario en la lista. Un nico programa
puede ser responsable de hasta 21 listas, una bsica y hasta 20 de detalle. Cada lista
tiene su propia rea de memoria o buffer de lista.
Cada vez que se el usuario realiza una accin (escoge una opcin de men o pulsa
una tecla de funcin o un botn de la barra de herramientas) se lanza un evento. Si en
el bloque correspondiente al evento se escribe informacin, se produce un nuevo nivel
de lista, es decir, se escribe sobre una nueva hoja que est sobre la anterior. La hoja
anterior permanece y podremos volver a ella con la flecha verde de retroceso o con la
X roja de cancelacin.
Nivel 0
Nivel 1
Nivel 2
Barra
de Contiene iconos para las funciones ms usadas. La barra estndar
herramientas
R/3 contiene siempre los mismos iconos con las mismas funciones
estndar
asignadas. Las que no son accesibles se muestran en gris.
Barra
de Contiene iconos y botones para las funciones ms usadas de la
pulsadores
pantalla actual.
Definiciones de Asignacin de teclas de funcin a las funciones de la pantalla actual.
Lista
funciones
12.1.1
Status
Un programa tiene una interfase con todos los elementos anteriores. Para objetos
individuales del programa (pantallas, pantallas de seleccin o listas) se pueden utilizar
vistas parciales de esta interfase. stas se denominan status. Un status determina qu
funciones estn activas y cuales no. Desde el punto de vista tcnico es una referencia
a una barra de men particular, una barra de pulsadores y ciertas asignaciones de
teclas.
Podemos crear y modificar status desde la lista de objetos del Repository Browser o
usando el Menu Painter o navegando desde el editor ABAP.
Se pueden crear status propios desde cero o usando otros ya existentes o con una
combinacin de las dos tcnicas.
Para crear un status nuevo primero se crear y despus se aaden las barras de men
y las funciones de men. Entonces el status est completo y los cambios que se
realicen en l le afectarn a l nicamente.
Cuando referenciamos un status ya existente lo que hacemos es crear barras de men,
barras de pulsadores y asignaciones de teclas de funcin como elementos
independientes. Creamos entonces nuestro propio status y referenciamos las barras y
asignaciones que deseemos utilizar: el Menu Painter guarda estas referencias de
manera que cualquier cambio en los elementos se propaga inmediatamente a todos
los status que los utilizan. Este funcionamiento es muy til en aplicaciones grandes
para asegurar la consistencia de ciertas funciones independientes del status.
Cuando creamos un status debemos escoger un tipo (dilogo, lista, ) y esta eleccin
determinar que ciertos tipos del funciones estn a nuestra disposicin.
12.1.2
Funciones
Las funciones se identifican por sus cdigos de funcin. El tipo de funcin nos informa
de su propsito: si es estndar, E si es de salida, S si es estndar de SAP o T si
es cdigo de transaccin.
Las funciones se pueden crear con textos estticos o dinmicos y para las primeras se
puede asignar un icono que se mostrar en vez del texto si utilizamos la funcin en un
botn. Si queremos mostrar informacin adicional con un icono la introduciremos en el
texto del icono.
Las funciones se asignan a teclas de funcin o a botones. Se pueden especificar
teclas de acceso rpido a una funcin para evitar usar el ratn.
La definicin de asignaciones de teclas consiste en tres secciones:
Teclas
de Son teclas de funcin cuyos valores asignados no
funcin
pueden ser cambiados. Las podemos activar o
reservadas
desactivar pero no cambiar sus textos ni iconos.
Definicin
Son valores asignados sugeridos que satisfacen las
teclas
de normas ergonmicas de SAP.
funcin
Las funciones que han sido asignadas a teclas de funcin pueden tambin ser
asignadas a botones en la barra de pulsadores. La barra puede contener hasta 35
botones. Los botones pueden contener iconos o texto.
12.1.3
Barra de mens
Cuando creamos la barra de mens podemos dejar que el sistema nos proponga una
plantilla y despus modificarla. La barra de mens puede contener hasta ocho mens,
pero slo podemos definir seis, ya que los mens Sistema y Ayuda son aadidos
siempre de manera automtica por el sistema.
Un men puede contener hasta 15 entradas, que pueden ser funciones, separadores o
mens (en cascada). La profundidad de anidamiento para los mens est restringida a
tres niveles, donde el ltimo slo puede contener funciones y separadores. Se pueden
12.1.4
Usar status
Utilizamos la sentencia SET PF-STATUS <nombre> para escoger un status para una
lista o para una pantalla. El nombre de un status puede tener hasta 20 caracteres
(nmeros o maysculas).
Si no se ha escogido una interfase GUI, se muestra la interfase estndar. Si queremos
desactivar un status previamente introducido y utilizar el estatus estndar de lista
basta con que usemos la sentencia SET PF-STATUS SPACE. El campo SY-PFKEY
siempre contiene el nombre del status actual.
Podemos desactivar funciones en tiempo de ejecucin con EXCLUDING <cdigo>. Y
si queremos desactivar varias funciones al mismo tiempo las debemos transferir
previamente al sistema utilizando una tabla interna y despus utilizar EXCLUDING
<tabla>.
12.1.5
Ttulo
12.2 Eventos
Se puede crear una lista interactiva creando una lista bsica con WRITE, SKIP y
ULINE que llena el buffer de lista en el bloque de evento apropiado (por ejemplo en
START-OF-SELECTION). Los eventos START-OF-SELECTION, GET, END-OFSELECTION, TOP-OF-PAGE y END-OF-PAGE slo se pueden utilizar para crear
listas bsicas. Cuando se abandona la lista bsica estos eventos ya no se procesan.
Despus necesitamos poder reaccionar a la accin del usuario para crear las listas
detalladas. Para eso utilizamos ciertos eventos, los fundamentales son AT LINESELECTION y AT USER-COMMAND. Para crear cabeceras para listas detalladas
disponemos del evento TOP-OF-PAGE DURING LINE-SELECTION.
12.2.1
AT USER-COMMAND
AT LINE-SELECTION
(000), sy-lsind.
(000), sy-lsind.
ENDCASE.
ENDAT.
12.2.3
SY-LISTI
SY-LILLI
SY-LISEL
12.4.1
HIDE
Podemos usar la sentencia HIDE para almacenar los contenidos de los campos en un
rea separada con referencia a la lnea: el sistema guarda el nombre del campo y el
valor para cada campo.
Normalmente la sentencia HIDE se utiliza para guardar el contenido de los campos
clave o informacin que se necesite para seleccionar informacin adicional. Para
poder guardar los contenidos de una lnea, la sentencia HIDE se debe introducir antes
de empezar una nueva lnea. Esto se debe al hecho de que los datos se guardan con
referencia a la lnea que se est mostrando actualmente (el campo de sistema SYLINNO). Se pueden guardar en el rea HIDE datos que no se muestran en la lista.
Cada lista tiene su propia rea HIDE y permanece almacenada en el buffer de lista
hasta que ste se borra: para las listas de nivel superior a la que se est mostrando se
borra automticamente el buffer.
Cuando se lanza un evento interactivo, los datos guardados para la lnea seleccionada
en el rea HIDE se pasan a los campos correspondientes.
GET spfli FIELDS carrid connid cityfrom cityto.
WRITE: / spfli-carrid, 10 spfli-cityfrom, (24) spfli-cityto.
HIDE: spfli-carrid, spfli-connid.
AT LINE-SELECTION.
SELECT * FROM sflight
WHERE carrid = spfli-carrid
AND connid = spfli-connid.
Cuando el usuario hace doble-click en la lnea de la compaa LH, el sistema determina que se ha
escogido la lnea 6 utilizando el campo de sistema SY-LILLI. Busca entonces en el rea HIDE el
punto donde se han guardado los datos correspondientes a esta lnea y inserta los valores
guardados en los campos correspondientes. Despus se procesa el bloque de evento AT LINESELECTION donde se crea la lista detallada.
Cuando se escoge una lnea para la que no se han guardado datos en el rea HIDE, la
seleccin de lnea es invlida. Las lneas invlidas incluyen las cabeceras y el pie de
pgina.
12.4.2
GET CURSOR
Con la sentencia GET CURSOR se pueden crear listas detalladas con referencia a la
posicin actual del cursor.
Con el parmetro FIELD se proporciona el nombre del campo, y con el parmetro
VALUE su valor.
El cdigo de retorno SY-SUBRC vale 0 si el cursor est sobre un campo, y 4 si no.
Se debe ser cuidadoso al utilizar el valor de retorno porque estar formateado como se
muestra en pantalla. Por este motivo es ms recomendable utilizar la tcnica HIDE.
DATA: nombre_campo(30), valor_campo(50).
AT LINE-SELECTION.
GET CURSOR FIELD nombre_campo
VALUE valor_campo.
CASE nombre_campo.
WHEN SPFLI-CARRID.
SELECT carrname INTO wa_carrname...
WRITE: valor_campo NO GAP, : , wa_carrname.
WHEN SPFLI-CONNID.
ENDCASE.
Con la adicin INDEX <i> se pueden leer las lneas de un nivel particular <i> de lista.
Cuando se omite esta adicin se lee de la ltima lista mostrada.
Para indicar los campos que desean ser ledos se aade FIELD VALUE <f1> INTO
<g1>. El contenido del campo <f1> se lee de la lnea indicada de la lista y se copia a
<g1>. Si el campo destino coincide con el origen, se puede abreviar con FIELD VALUE
<fi>. Los valores se guardan como tiras de caracteres.
Con LINE VALUE INTO <wa> transportamos una lnea completa al rea de trabajo
<wa>.
12.7 Navegacin
Se puede utilizar el campo de sistema SY-LSIND para determinar el nivel de lista que
estamos mostrando. Podemos modificar el valor de este campo para conseguir un
nivel de lista se muestre en otra posicin, pero los valores asignados a SY-LSIND no
pueden ser nunca mayores que el que actualmente contiene. Por tanto, no podemos
saltar niveles de listado en orden ascendente.
Slo se debe cambiar SY-LSIND en la ltima sentencia antes de mostrar la lista, ya
que el hecho de cambiar su valor no lleva directamente a un salto de nivel inmediato.
El nuevo nivel se asigna a la lista al final, cuando se ha mostrada el buffer de lista
completo.
12.8 Ventanas
Podemos mostrar la lista detallada en una caja de dilogo modal utilizando la
sentencia WINDOW STARTING AT. Aqu se aplican las mismas reglas que en la
salida de listas.
DATA: linea_sup TYPE i, linea_inf TYPE i.
AT LINE-SELECTION.
linea_sup = sy-lilli + 1.
linea_inf = linea_sup + 12.
AT 65 linea_inf.
WRITE: ...
13 Modularizacin
Los programas ABAP no son una unidad secuencial, sino que tienen una estructura
modular. Estn formados por un conjunto de bloques de procesamiento, de secciones
que se procesan de forma secuencial cuando son llamadas. Son las unidades mnimas
y no se pueden dividir ni anidar. Es importante que los programas estn estructurados
correctamente, ya que entonces su estructura lgica ser ms fcil de identificar y su
elaboracin y mantenimiento sern ms sencillos.
Cada programa consiste en dos partes:
Subrutinas
Mdulos de funcin
Mdulos de dilogo
Mtodos de objeto
Podramos clasificar los bloques de procesamiento en dos clases: aquellos que son
llamados desde fuera del programa por el sistema de ejecucin de ABAP (eventos,
mdulos de dilogo), y aquellos que pueden ser llamados por las sentencias ABAP en
programas ABAP (subrutinas, mdulos de funcin y mtodos). Estos ltimos se suelen
identificar con el nombre de procedimientos.
Al llamar a un procedimiento, el sistema interrumpe el procesamiento del bloque desde
donde se hace la llamada, procesa el bloque llamado y despus se contina la
ejecucin con la siguiente instruccin ABAP.
Hay otro tipo de modularizacin que consiste en utilizar mdulos de cdigo fuente.
Esta seccin describe la modularizacin en eventos, en mdulos de cdigo fuente y en
procedimientos.
Con los diversos tipos de modularizacin se evita la redundancia, se incrementa la
reutilizacin del cdigo fuente, y se permite el encapsulamiento de los datos.
13.2 Eventos
El ABAP es un lenguaje estructurado orientado a eventos. No es un clsico lenguaje
de programacin con estructura lineal (TOP-DOWN), sino que la secuencia de
instrucciones depende del cumplimiento de ciertas condiciones.
Los eventos sirven para controlar el flujo lgico del programa de forma externa, de tal
manera que el bloque de procesamiento asociado se ejecutar cuando ocurra una
determinada circunstancia. La llamada a un bloque de evento es lanzada por un
evento, el cual es lanzado a su vez por una accin de usuario o por un programa de
sistema.
El evento se lanza
INITIALIZATION
AT SELECTION-SCREEN
START-OF-SELECTION
GET <tabla>
END-OF-SELECTION
TOP-OF-PAGE
Durante el procesamiento
comienza una nueva pgina.
END-OF-PAGE
AT LINE-SELECTION
AT USER-COMMAND
AT PF <nn>
de
una
lista
cuando
13.2.1
INITIALIZATION
START-OF-SELECTION
Este evento se usa para codificar un bloque de procesamiento justo despus de haber
procesado la pantalla de seleccin y antes de acceder a la base de datos.
Este evento se lanza cuando se procesa la instruccin REPORT. En ese momento se
empieza a ejecutar el cdigo que se encuentra entre REPORT y la palabra STARTOF-SELECTION. Inmediatamente despus se procesa el bloque contenido dentro de
este evento.
En este evento se sitan las instrucciones de acceso a bases de datos. Una vez
terminada este cdigo se ejecuta el bloque correspondiente al evento END-OFSELECTION.
13.2.3
END-OF-SELECTION.
13.2.4
TOP-OF-PAGE
Se ejecuta al inicio de cada nueva pgina. Se utiliza para dar formato a la cabecera de
pgina, cuando no se utilizan las definidas en Ttulos y cabeceras. (Es necesario
especificar la opcin NO STANDARD PAGE HEADING en la sentencia REPORT).
Existe otro evento TOP-OF-PAGE DURING LINE-SELECTION que se lanza al inicio
de una nueva pgina de un nivel de lista secundaria, en listados interactivos.
13.2.5
END-OF-PAGE
Se ejecuta cuando una pgina finaliza bien porque no tiene ms lneas bien porque se
ejecuta la instruccin RESERVE n LINES. Este evento no se ejecutar si el n de
lneas de la pgina no est definido en la sentencia REPORT, tampoco se ejecutar se
fuerza una nueva pgina con NEW-PAGE.
13.2.6
AT SELECTION-SCREEN
Consiguen que aparezca el mensaje cuando modificamos el valor del campo de seleccin sel_opt1
Las lneas:
Consiguen que aparezca el mensaje cuando se pulsa F1 (ayuda) sobre el parmetro test1.
Las lneas:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN' ON VALUE-REQUEST FOR TEST1'.
Consiguen que aparezca el mensaje cuando se pulsa F4 (valores posibles) en el campo test1.
Los rangos de seleccin tiene implcitos dos valores el mnimo y el mximo, para que
aparezca la ayuda en los dos es necesario aadir dos eventos, uno para cada valor.
La funcionalidad en ambos casos es la misma por tanto es susceptible de ser
introducida en un nico procedimiento.
Para implementar este procedimiento, nos hemos ayudado
con una funcin
predefinida: 'HELP_VALUES_GET_WITH_TABLE. Esta funcin permite mostrar
datos en una ventana y seleccionar uno de ellos. Permite mostrar informacin de ms
de un campo, para ello en la tabla interna de definicin de campos aadiremos tantas
entradas como campos deseemos visualizar.
ABAP contiene dos clases de mdulos de cdigo fuente. Los mdulos locales se
llaman macros y los mdulos globales se llaman programas include.
13.3.1
Macros
TYPE I VALUE 5,
N2
TYPE I VALUE 6.
DEFINE OPERACION.
RESULTADO = &1 &2 &3.
SALIDA &1 &2 &3 RESULTADO.
END-OF-DEFINITION.
DEFINE SALIDA.
WRITE: / 'El resultado de &1 &2 &3 es', &4.
END-OF-DEFINITION.
OPERACION 4 + 3.
OPERACION 2 ** 7.
OPERACION N2 - N1.
13.3.2
Programas Include
Los programas Include son objetos globales del Repository de R/3. Slo se utilizan
para modularizar el cdigo fuente, y no poseen interfase de parmetros.
Tienen las siguientes funciones:
13.3.2.1
Definicin
13.3.2.2
Utilizacin
La sentencia INCLUDE tiene el mismo efecto que si copiramos el cdigo fuente del
programa include <include> dentro de nuestro programa. En la verificacin de sintaxis,
el contenido del programa include se analizar tambin. Los programas include no se
cargan en tiempo de ejecucin, sino que se expanden cuando se genera el programa.
Una vez se ha generado ste, la versin cargada contiene las versiones estticas de
todos los includes. Si, posteriormente, cambiamos un programa include, se
regenerarn automticamente todos los programas que lo utilicen.
La sentencia INCLUDE debe ser la nica sentencia de la lnea y no puede extenderse
por ms de una lnea.
Podemos incluir este programa en cualquier otro programa ABAP para generar una cabecera de
listado estndar:
PROGRAM SAPMZTST.
INCLUDE STARTTXT.
13.4 Procedimientos
Los procedimientos contienen un conjunto de sentencias, y son llamados desde otros
programas ABAP.
13.4.1
Subrutinas
Las subrutinas son procedimientos que podemos definir y llamar en y desde cualquier
programa ABAP. Normalmente, las subrutinas se llaman internamente, es decir,
contendrn secciones de cdigo o algoritmos que se utilizan frecuentemente de forma
local. Si queremos que una funcin pueda ser utilizada en todo el sistema, deberamos
utilizar un mdulo de funcin.
13.4.1.1
Definicin
13.4.1.2
Los datos globales de un programa son todos los objetos de datos declarados fuera de
las subrutinas. stos son visibles en todos los bloques del programa; en particular
todas las subrutinas tienen acceso a los datos globales del programa en el que han
sido definidas.
Podemos utilizar la sentencia DATA dentro de una subrutina para declarar datos
locales. stos slo son visibles dentro de la subrutina y existen slo mientras sta se
ejecuta. Si un objeto local tiene el mismo nombre que un objeto global, el global es
invisible dentro de la subrutina: durante su ejecucin slo podremos acceder al objeto
local.
Tambin podemos conseguir una copia de ciertas variables globales utilizando la
sentencia LOCAL. De esta manera podemos trabajar con la variable global y nos
aseguramos de que al acabar el proceso de la subrutina sta contiene el valor que
tena justo antes de llamarla.
Interfase de parmetros
Dado que los datos globales son visibles, no necesitamos definir una interfase de
parmetros si no queremos cambiar ningn dato en la subrutina, o si se ven
involucrados pocos datos.
FORM CABECERA.
WRITE: / 'Programa lanzado por', SY-UNAME,
/ 'en el host', SY-HOST,
'fecha:', SY-DATUM, 'hora:', SY-UZEIT.
ULINE.
ENDFORM.
Este ejemplo define una subrutina llamada CABECERA, que, como el ejemplo de programa
Include, muestra una cabecera de listado.
Sin embargo, si queremos que una subrutina realice operaciones complejas sobre los
datos sin afectar a los datos globales del programa, debemos definir une interfase de
parmetros a travs de la cual pasaremos nicamente los datos necesarios. En inters
de un buen estilo de programacin y encapsulacin, siempre deberamos utilizar la
interfase de parmetros, al menos cuando la subrutina cambia datos.
Llamaremos parmetros formales a los que se utilizan en la declaracin de una
subrutina y parmetros actuales a los que se pasan en una llamada concreta. Las
opciones USING y CHANGING de la sentencia FORM definen los parmetros
formales de una subrutina. El orden en el que deben aparecer las opciones es fijo.
Cada opcin puede estar seguida de una lista de cualquier nmero de parmetros
formales. Cuando llamamos a una subrutina, debemos rellenar todos los parmetros
formales con los valores de los parmetros actuales. Al final de la subrutina, los
parmetros formales son devueltos a los correspondientes parmetros actuales.
Dentro de una subrutina, los parmetros formales se comportan como datos locales
dinmicos. Podemos utilizarlos de la misma forma que los objetos de datos locales
normales que declararamos con la sentencia DATA. Ocultan a los objetos de datos
globales con el mismo nombre. El valor de los parmetros de la subrutina se
corresponde con el valor pasado para los parmetros actuales correspondientes.
Cuando definimos la interfase de parmetros declaramos a continuacin de la palabra
clave USING los parmetros que la subrutina necesita leer. Y declaramos con
CHANGING todos los parmetros que la subrutina cambiar y los valores cambiados
que se pasarn al programa que realice la llamada.
13.4.1.4
Los parmetros formales pueden tener cualquiera de los tipos de datos de ABAP. Para
tipificar los parmetros podemos utilizar los recursos habituales para declarar datos:
TYPE para que el parmetro se ajuste a un tipo predefinido o definido por el usuario.
LIKE para que el parmetro sea compatible con un objeto de datos del Diccionario.
Si especificamos el tipo de un parmetro formal, el sistema comprueba al llamar a la
subrutina que el correspondiente parmetro actual es compatible. Para las subrutinas
internas, el sistema comprueba esto en la verificacin de sintaxis. Para subrutinas
externas, no se puede realizar esta verificacin hasta el momento de la ejecucin.
El tipo de chequeo que se realiza en la llamada depende del tipo asignado al
parmetro.
TYPE LINEA,
La salida es:
XY
Los componentes COL1 y COL2 de la estructura P (pasados genricamente) se asignan al fieldsymbol <FS>. No podemos acceder directamente a los componente ni esttica ni dinmicamente.
Ajuste de Parmetros en Estructuras
En lugar de utilizar TYPE o LIKE, podemos especificar el tipo de una estructura como
se indica a continuacin:
... <pi> [STRUCTURE <e>] ...
La salida es:
XY
La cadena TEXTO se ajusta a la estructura LINEA.
Para asegurar la compatibilidad con las versiones anteriores, an sigue estando
permitida la siguiente opcin (que ha de colocarse antes de USING y CHANGING):
FORM <subr> TABLES ... <tabii> [TYPE <t>|LIKE <c>] ...
Los parmetros formales <tabii> se definen como tablas internas estndar con lneas
de cabecera. Si utilizamos una tabla interna sin lnea de cabecera como el
correspondiente parmetro actual de un parmetro formal de este tipo, el sistema crea
una lnea de cabecera local para el parmetro formal en la subrutina. Si pasamos una
tabla interna como lnea de cabecera, el cuerpo y el rea de trabajo de la tabla se
pasarn a la subrutina. Los parmetros formales definidos utilizando TABLES no
pueden ser pasados por referencia. Si queremos acceder a los componentes de las
lneas estructuradas, debemos especificar el tipo del parmetro TABLES de forma
adecuada.
Desde la versin 3.0, debemos utilizar USING o CHANGING en vez de la opcin
TABLES para las tablas internas.
13.4.1.6
Clases de parmetros
Se pueden clasificar los parmetros en funcin de la forma en que se utilicen: por valor,
por referencia o por valor y resultado.
Valor
Referencia
Por valor.
Por referencia.
13.4.1.7
Llamada
13.4.1.8
Llamada externa
Con la sentencia PERFORM, podemos llamar a las subrutinas que estn codificadas
en el mismo programa ABAP (llamadas internas), o a subrutinas que estn codificadas
en otros programas ABAP (llamadas externas).
Mientras que para llamar a una subrutina definida en el mismo programa, slo
necesitamos especificar su nombre en la sentencia PERFORM, para llamar a una
subrutina externa debemos indicar el nombre del programa que la contiene con la
adicin IN PROGRAM <programa>.
La principal funcin de las subrutinas es la modularizacin y estructuracin lgica de
los programas. Sin embargo, las subrutinas tambin pueden ser llamadas
externamente desde otros programas ABAP. En un caso extremo, podemos tener un
programa ABAP que slo contenga subrutinas. Estos programas no pueden ejecutarse
por s mismos, sin que son utilizados por otros programas ABAP como pools de
subrutinas externas.
Sin embargo, si queremos hacer que una funcin est disponible en cualquier parte
del sistema, deberamos utilizar los mdulos de funcin en lugar de subrutinas
externas. Los mdulos de funcin estn almacenados en una biblioteca central.
13.4.1.9
Llamada dinmica
Los nombres de la subrutina y del programa externo sern los contenidos de los
campos <subr> y <prog> respectivamente. Si utilizamos la opcin IF FOUND,
podemos evitar que se lance un error en tiempo de ejecucin desde el programa
<prog> si no contiene una subrutina con el nombre <subr>. Si quitamos los parntesis
se vuelve igual que la variante esttica.
Supongamos que tenemos un programa que contiene las siguientes subrutinas:
PROGRAM FORMPOOL.
FORM SUB1.
WRITE: / 'Subrutina 1'.
ENDFORM.
FORM SUB2.
WRITE: / 'Subrutina 2'.
ENDFORM.
LIKE A3
Este ejemplo define una subrutina SUBR con una interfase de parmetros que contiene cinco
parmetros formales F1 a F5. La subrutina es llamada internamente tres veces. Los parmetros
actuales son los objetos de datos A1 a A5. Las tres llamadas a la subrutina son igualmente
vlidas. Existen otras sentencias PERFORM que tambin son igualmente vlidas, con tal de
que la secuencia de los parmetros actuales permanezca fija. En cada llamada, A1 se pasa a F1,
A2 a F2, y as sucesivamente. Cuando termina la subrutina, A3, A4 y A5 reciben
respectivamente los valores de F3, F4 y F5. La tercera de las llamadas a la subrutina slo cambia
A4 y A5. Si A3 cambia o no depender de la forma en que se programe la subrutina.
El siguiente ejemplo muestra cmo los parmetros formales definidos de forma genrica heredan
sus atributos tcnicos de los correspondientes parmetros actuales.
REPORT FORMTEST.
DATA:
FECHA1
CONT1
TYPE C
VALUE(NUM) TYPE P
INT
TYPE I.
DATA: T.
13.4.1.10
Fin de subrutina
TYPE P DECIMALS 2.
NUM1 = 3. NUM2 = 4.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
NUM1 = 5. NUM2 = 0.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
NUM1 = 2. NUM2 = 3.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
FORM DIVIDE USING N1 N2 CHANGING R.
CHECK N2 NE 0.
R = N1 / N2.
WRITE: / N1, '/', N2, '=', R.
ENDFORM.
13.4.2
Funciones
Los mdulos de funcin son procedimientos externos porque pueden ser llamados
desde cualquier programa del sistema con la sentencia CALL FUNCTION. Se dice que
tienen una interfase transparente porque sus parmetros no forman parte de su cdigo
ABAP sino que son creados a parte y pueden ser mantenidos de manera
independiente. Gracias a la existencia de parmetros opcionales se puede modificar la
interfase sin tocar las sentencias ABAP.
Los mdulos de funcin se definen en grupos de funciones. Los grupos de funciones
actan exclusivamente como contenedores de varios mdulos de funcin que, por su
temtica, deben estar juntos. Los grupos de funciones y los mdulos de funcin se
crean en la Biblioteca de Funciones (SE37), una de las herramientas del ABAP
Workbench.
13.4.2.1
Grupos de funciones
Los grupos de funciones son recipientes para mdulos de funcin en los que se
agrupan por el tipo de tarea que realizan (por ejemplo los mdulos de SCAL realizan
clculos con fechas). Un grupo de funciones es un programa ABAP especial de tipo F
que no se puede ejecutar. Es accesible en el sistema en cuanto se ha activado.
Cuando llamamos a un mdulo de funcin, el sistema carga la totalidad del grupo de
funciones en una sesin interna del programa llamante (si no haba sido cargada ya).
El siguiente diagrama muestra la estructura de un grupo de funciones. El nombre del
grupo de funcin puede tener hasta 30 caracteres y solo puede contener
alfanumricos y . Debe comenzar por Z o Y. Este nombre se utiliza para crear los
componentes del grupo (el programa principal y los correspondiente programas
include). Cuando creamos un grupo de funciones o un mdulo de funcin, se genera
automticamente el programa principal y los programas include.
13.4.2.2
Llamada a funciones
Podemos especificar el nombre del mdulo de funcin tanto mediante un literal como
con el contenido de una variable. Cada parmetro de la interfase <fi> se asigna
explcitamente a un parmetro actual <a i>. Podemos asignar un valor de retorno <r i>
a cada excepcin <e i>. La asignacin siempre tiene la forma <parmetro de la
interfase> = <parmetro actual>.
Despus de EXPORTING, debemos suministrar valores a todos los parmetros Import
que no sean opcionales con los valores apropiados de su tipo. Podemos pasar valores
a los parmetros Import opcionales si lo deseamos
Despus de IMPORTING, podemos recibir los parmetros Export del el mdulo de
funcin asignndolos a las variables del tipo apropiado.
Despus de CHANGING o TABLES, debemos suministrar valores a todos los
parmetros Changing no opcionales o Tablas. Cuando el mdulo de funcin termine
su ejecucin, los valores cambiados sern devueltos a los parmetros actuales.
Podemos pasar valores a los parmetros Changing o Tablas que sean opcionales.
Podemos utilizar la opcin EXCEPTIONS para manejar las excepciones del mdulo de
funcin. Si se produce una excepcin <e i> mientras se est ejecutando el mdulo de
= POSICION
IMPORTING
STRING1 = TEXTO1
STRING2 = TEXTO2
EXCEPTIONS
STRING1_TOO_SMALL = 1
STRING2_TOO_SMALL = 2
POS_NOT_VALID
= 3
OTHERS
= 4.
El mdulo de funcin divide un campo de entrada a partir de una posicin determinada en dos
campos de salida. Si el contenido de POSICION es un intervalo [4,6], se ejecutar el mdulo de
funcin sin que se produzca ninguna excepcin. Para los intervalos [1,3] y [7,9], el sistema
lanza respectivamente las excepciones STRING1_TOO_SMALL y STRING2_TOO_SMALL.
Para el resto de los valores de POSICION, se lanza la excepcin POS_NOT_VALID.
13.4.2.3
13.4.2.4
Interfase de la funcin
En Tipo ref. podemos poner cualquier tipo genrico o cualquier tipo de datos que sea
vlido en todo el sistema. En este ejemplo, los parmetros Import se han definido en
referencia a tipo de datos elementales del Diccionario de ABAP (elementos de datos).
Valor Propuesto:
Flag opc.
Flag. Tras.
13.4.2.6
Tablas
Excepciones
Las excepciones son una serie de errores predefinidos en los mdulos de funcin que
devuelven un valor de retorno concreto en la variable del sistema SY-SUBRC.
El objetivo es anticipar los posibles errores y as evitar que stos produzcan errores en
tiempo de ejecucin. Se da un nombre a cada posible error en la interfase del mdulo
de funcin y se lanzan los errores desde el cdigo fuente con la sentencia RAISE. El
valor de retorno que se pasa al programa llamante depende de la posicin de la
excepcin en la tabla de excepciones.
Por defecto siempre existe la excepcin OTHERS, aunque aparezca definida, que se
utiliza para devolver un error genrico y devuelve en la variable SY-SUBRC el valor
siguiente al de la ltima excepcin creada.
Para devolver una excepcin desde el cdigo del modulo de funcin se utiliza la
sentencia RAISE <excepcin>, finalizando as la ejecucin de la funcin y devolviendo
el cdigo asociado a la excepcin en la variable SY-SUBRC. En caso de devolver una
excepcin no se actualiza el valor de salida de los parmetros CHANGING.
El efecto de esta sentencias depende de si el programa llamante trata las excepciones
o no. Si el nombre <excepcin> de la excepcin u OTHERS aparece en la opcin
EXCEPTIONS de la sentencia CALL FUNCTION, el control del error se realizar en el
programa llamante. Si no aparece en el programa llamante, la sentencia RAISE
finaliza el programa.
Podemos asegurarnos de que el sistema muestra un mensaje de error cuando se
produce la excepcin aunque no la tratemos: mediante la sentencia MESSAGE...
RAISING. La forma en la que contine el procesamiento depende del tipo de mensaje.
Si el programa llamante no trata la excepcin no se visualizar el mensaje; en lugar de
ello rellenar los campos del sistema SY-MSGID, SY-MSGTY, SY-MSGNO y SYMSGV1 a SY-MSGV4.
13.4.2.8
Datos globales
Las definiciones globales de datos son compartidas por todos los mdulos de funcin
de un grupo de funciones. Las definiciones de objetos globales se mantienen a travs
de la opcin de men Pasar a Datos globales.
Nota: Las definiciones globales y el texto fuente del mdulo de funcin se codifican
realmente en el editor ABAP/4 utilizando los mismos comandos que en la codificacin
de listados.
Podemos utilizar las sentencias TYPES y DATA para crear tipos y objetos de datos
locales. Los parmetros de la interfase tambin se comportan como objetos de datos
locales. Adems, podemos acceder a todos los datos globales del programa principal.
Estos datos estn definidos en el programa include L<grpf>TOP. Para abrir este
include, elegiremos la opcin del men Pasar a Datos globales. La primera vez
que llamamos al mdulo de funcin de un grupo de funciones determinado, los datos
se cargarn en la memoria. Estos datos pueden ser ledos y modificados por
cualquiera de los mdulos de funcin del grupo. El sistema retendr los valores hasta
que se llame de nuevo al mdulo de funcin.
Ej.: Se define la tabla estndar de sociedades T001 en la que se chequear que la sociedad
recibida como parmetro es correcta, y la tabla de clientes ZCLIENXX para seleccionar los
nmeros de cliente existentes.
Include LZCLITOP:
FUNCTION-POOL ZCLI.
"MESSAGE-ID ..
************************************************************************
" Sociedades
" Clientes
Los parmetros definidos en el mdulo de funcin son locales, por lo tanto solo son
visibles en el cuerpo principal de la funcin. Para que puedan ser utilizados en las
subrutinas, sin necesidad de pasarlos como parmetros, se debern globalizar
utilizando la opcin de men TratarInterfaseGlobalizar parm. en la pantalla de
mantenimiento de parmetros de entrada/salida. Para eliminar la globalizacin se
utiliza la opcin de men TratarInterfaseLocalizar parm..
13.4.2.9
Cdigo fuente
13.4.2.10
Test
en la pantalla inicial.
Aparecer una plantilla de entrada donde podremos introducir los parmetros IMPORT.
El resultado se transfiere a los parmetros EXPORT y se muestra en otra pantalla. Si
ocurre un error el sistema muestra la excepcin que se ha producido.
Se muestra tambin el tiempo de ejecucin del mdulo de funciones en
microsegundos. Como este tiempo est sujeto a condicionantes como la carga de la
mquina en el momento de la ejecucin, se deber repetir la prueba varias veces en
condiciones diferentes para obtener una medida con sentido.
Se pueden guardar los datos utilizados para el test en un directorio de datos. Y se
pueden crear secuencias de tests.
13.4.2.11
Llamada
13.5.1
SUBMIT
Descripcin de indicadores
<P> Nombre de una tabla de seleccin o un campo de parmetro <show database
<dba>.
<Op> Operador relacional.
<F1..Fn> Nombre de campo o constante.
<Seltab> Tabla interna de la estructura rsparams.
<V>
13.5.2
CALL TRANSACTION
/n
Mediante la adicin USING <itab> puedes ejecutar un batch input parecido a procesar
el paso de una tabla interna.
Mediante la adicin AND SKIP FIRST SCREEN, la primera pantalla de la transaccin
que recibe la llamada no se visualiza. Para realizar esta operacin tendremos que
llenar los campos requeridos.
Ej.:Se incluir un pulsador en la pantalla de altas de clientes para ejecutar el listado de
visualizacin de facturas de clientes.
Se incluye un pulsador en la barra de pulsadores el Status STA_9000 con el cdigo de funcin
FACT de tipo E (Comando Exit) y el texto Visualizar clientes asociado a la tecla de funcin
F6
13.6.1
SAP
Los programas de aplicacin que utilizan memoria SAP deben utilizar los parmetros
SPA/GPA (tambin conocidos como parmetros SET/GET). La utilizacin ms
frecuente de los parmetros SPA/GPA es rellenar los campos de entrada de una
pantalla.
En la memoria SAP se pueden almacenar valores asociados a un identificador de tres
caracteres, que se mantienen disponibles hasta que finalice la sesin.
En los campos de las pantallas existen tres atributos relacionados con los parmetros
de memoria:
Id-parm.: Identificador de parmetro para los valores del campo en la memoria SAP.
Si el campo est referenciado al diccionario de datos, se informar con el identificador
asociado al dominio del campo del diccionario.
SET Parm.: Al activar este atributo, el sistema almacenar en la memoria SAP el
valor que contiene al campo bajo el identificador asociado.
GET Parm.: Al activar este atributo, el campo se inicializar con el valor definido en la
memoria SAP bajo el identificador asociado en lugar de utilizar el valor inicial en
funcin del tipo de dato del campo.
13.6.1.1
El listado muestra todos los programas que empiezan por Z. El nombre de cada programa se
almacena en el rea HIDE de cada lnea.
Si el usuario selecciona una lnea haciendo doble click sobre ella, el sistema lanza el evento AT
LINE-SELECTION y toma los datos almacenados en el rea HIDE para rellenar con este valor
el parmetro SPA/GPA de la pantalla inicial de la transaccin. Justamente despus se llama a la
transaccin. En el campo Programa aparecer el que haya sido seleccionado por el usuario.
13.6.2
ABAP
<fieldB>]
<fieldB>]
14 ALV
El control ALV (ALV = SAP List Viewer) es una herramienta flexible para la
presentacin grfica de listados. Proporciona operaciones que frecuentemente se
necesitan para trabajar con listas (en forma de funciones genricas) y puede ser
mejorado definiendo opciones personalizadas. Esto permite utilizar el ALV en gran
variedad de programas.
Un control ALV consiste en una barra de herramientas, un ttulo y una tabla de salida
mostrada en una parrilla. El usuario puede ocultar el ttulo y las funciones estndar de
la barra de herramientas.
14.1 Funcionalidad
Con un control ALV se puede:
Mostrar listas de manera consistente con un diseo moderno.
Disponer de las funciones tpicas de las listas (como ordenar o filtrar) sin realizar
ningn esfuerzo extra de programacin.
Adaptar las funciones predefinidas de lista y sus mejoras.
Programar respuestas a acciones de usuario (como hacer doble-click en una lnea) de
manera individual.
Se pueden ver ejemplos prcticos de uso del ALV en el paquete SLIS.
Una tabla interna con los datos a mostrar (tabla de salida), que normalmente
contiene datos previamente seleccionados de tablas de la base de datos.
I_INTERFACE_CHECK
= ' '
I_BYPASSING_BUFFER
I_BUFFER_ACTIVE
= ' '
I_CALLBACK_PROGRAM
= ' '
I_CALLBACK_PF_STATUS_SET
= ' '
I_CALLBACK_USER_COMMAND
= ' '
I_STRUCTURE_NAME
IS_LAYOUT
IT_FIELDCAT
IT_EXCLUDING
IT_SPECIAL_GROUPS
IT_SORT
IT_FILTER
IS_SEL_HIDE
I_DEFAULT
= 'X'
I_SAVE
= ' '
IS_VARIANT
IT_EVENTS
IT_EVENT_EXIT
IS_PRINT
IS_REPREP_ID
I_SCREEN_START_COLUMN
= 0
I_SCREEN_START_LINE
= 0
I_SCREEN_END_COLUMN
= 0
I_SCREEN_END_LINE
= 0
* IMPORTING
*
E_EXIT_CAUSED_BY_CALLER
ES_EXIT_CAUSED_BY_USER
TABLES
t_outtab
* EXCEPTIONS
*
PROGRAM_ERROR
= 1
OTHERS
= 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
ENDIF.
de
disposicin
del
listado.
Las
detallaremos
IT_EXCLUDING: Nombre de una tabla interna con los nombres de las funciones que
se incluyen en el cdigo y que no se usarn en el listado.
IT_SORT: Usando la tabla interna aqu indicada, la funcin determina el orden del
listado y/o de los subtotales.
IT_FILTER: Podemos pasar una tabla interna con un criterio de filtrado para la salida.
I_DEFAULT: X = Se puede definir una variante de visualizacin inicial. Por defecto no.
I_SAVE: U = Las variantes de visualizacin se graban slo como especficas de
usuario. X = Las variantes de visualizacin se graban slo como estndar. A = Se
puede escoger entre grabacin especfica o estndar. = No se pueden grabar
variantes de visualizacin.
14.3.1
Especificar disposicin
14.3.1.1
Opciones de visualizacin
14.3.1.2
Excepciones
14.3.1.3
Totales:
14.3.1.4
Interaccin:
14.3.1.5
Pantalla de detalles
14.3.1.6
Color
14.3.2
Parmetros de retorno
E_EXIT_CAUSED_BY_CALLER:
CALLBACK_USER_COMMAND.
Elimina
lista
en
parmetro
Ejemplo simple
Usando una estructura del diccionario (en este caso SIMLISTRUC) es muy sencillo
generar un listado ALV.
REPORT Z_ALV_1.
TABLES: SPFLI.
TYPES: BEGIN OF t_con.
INCLUDE STRUCTURE SIMLISTRUC.
TYPES: END OF t_con.
DATA: it_con TYPE TABLE OF t_con.
START-OF-SELECTION.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_con.
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_STRUCTURE_NAME
= 'SIMLISTRUC'
TABLES
t_outtab
= it_con
EXCEPTIONS
PROGRAM_ERROR
= 1
OTHERS
= 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
I_PROGRAM_NAME
I_INTERNAL_TABNAME
I_STRUCTURE_NAME
I_CLIENT_NEVER_DISPLAY
= 'X'
I_INCLNAME
I_BYPASSING_BUFFER
I_BUFFER_ACTIVE
CHANGING
ct_fieldcat
* EXCEPTIONS
*
INCONSISTENT_INTERFACE
= 1
PROGRAM_ERROR
= 2
OTHERS
= 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
ENDIF.
Z_ALV_2.
TYPE-POOLS: SLIS.
TABLES: SPFLI.
TYPES: BEGIN OF t_con.
INCLUDE STRUCTURE SIMLISTRUC.
TYPES: END OF t_con.
FIELD-SYMBOLS: <fs_fcat> TYPE slis_fieldcat_alv.
DATA: it_fcat TYPE slis_t_fieldcat_alv.
DATA: it_con TYPE TABLE OF t_con.
DATA: pid LIKE sy-repid.
START-OF-SELECTION.
pid = sy-repid.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_con.
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME
= pid
I_STRUCTURE_NAME
= 'SIMLISTRUC'
CHANGING
ct_fieldcat
= it_fcat
EXCEPTIONS
INCONSISTENT_INTERFACE
= 1
= 2
OTHERS
= 3
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT it_fcat ASSIGNING <fs_fcat>.
IF <fs_fcat>-fieldname = 'CONNID'.
<fs_fcat>-seltext_l = 'Conexin'.
<fs_fcat>-seltext_m = 'Conexin'.
<fs_fcat>-seltext_s = 'Con'.
MODIFY it_fcat FROM <fs_fcat>.
ENDIF.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
*
I_CALLBACK_PROGRAM
= pid
I_STRUCTURE_NAME
= 'SIMLISTRUC'
IT_FIELDCAT
= it_fcat[]
TABLES
t_outtab
= it_con
EXCEPTIONS
PROGRAM_ERROR
= 1
OTHERS
= 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
En otros casos cambia la estructura del listado. Entonces, adems de la tabla interna
con la informacin a mostrar (T_OUTTAB) y la estructura (I_STRUCTURE_NAME) o el
catlogo de campos (IT_FIELDCAT) se debe pasar informacin adicional a la funcin.
Con REUSE_ALV_HIERSEQ_LIST_DISPLAY se pueden mostrar listados jerrquicos.
En el catlogo de campos se debe indicar qu campos son de cabecera y cules de
detalle. Se deben indicar los nombres de las tablas internas o bien estructuras que
contienen los registros de cabecera (I_TABNAME_HEADER/ I_STRUCTURE_NAME_
HEADER) y los de detalle (I_TABNAME_ITEM/ I_STRUCTURE_NAME_ITEM). La
funcin debe conocer tambin la relacin entre las dos tablas (IS_KEYINFO). No se
pasa una tabla de informacin sino dos: T_OUTTAB_HEADER y T_OUTTAB_ITEM.
15 Tratamiento de Ficheros
15.1 Del servidor de aplicacin
Para poder trabajar con ficheros secuenciales que se encuentren en el servidor de
aplicacin, disponemos de las siguientes instrucciones bsicas:
Operacin
Sentencia
Abrir para
lneas
Borrar
La variable de sistema SY-SUBRC retorna valores de error para todas las sentencias
de tratamientos de ficheros, si su valor es 0 la operacin se ha realizado se ha
realizado correctamente.
15.1.1
Abrir
.. FILTER
15.1.2
Leer
wa.
Lee un bloque de informacin del fichero y los coloca en una estructura o tabla interna.
Hay que tener en cuenta la longitud de los campos, ya que sino a la hora de leer se
pueden coger caracteres de otros campos.
Si el fichero se abre en modo TEXTO: se lee una lnea completa de tal forma que si el
campo wa es de menor tamao que la lnea , se perder su contendido , en caso
contrario se completar con blancos. El puntero de lectura se situar al comienzo de
la lnea siguiente.
Si el fichero se abre en modo BINARIO: se lee del fichero tantos bytes como tamao
tenga el campo wa.
15.1.3
Escribir
TRANSFER wa TO nfich.
15.1.4
Cerrar
15.1.5
Autorizaciones
SAVEFLAG
FS_NOREAD
FS_NOWRITE
FSBRGRU
SAVEFLAG
FS_NOREAD
FS_NOWRITE
FSBRGRU
/tmp
/tmp/files
FILE
15.2.1
Escritura
15.2.1.1
Para escribir datos desde una tabla interna a un fichero que se encuentre en el
servidor de presentacin manteniendo un dilogo con el usuario utilizaremos el mdulo
de funcin DOWNLOAD.
Funcin
BIN_FILESIZE
CODEPAGE
FILENAME
FILETYPE
ITEM
MODE
Funcin
ACT_FILENAME
ACT_FILETYPE
FILESIZE
Parmetros TABLES:
Parmetro
Funcin
DATA_TAB
Parmetros EXCEPTIONS:
Parmetro
Funcin
INVALID_FILESIZE
INVALID_TABLE_WIDTH
INVALID_TYPE
Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y
hemos escrito el siguiente programa:
PROGRAM ZTSTFICH.
DATA: NOMB_FICH(128),
= TAM_FICH
TABLES
DATA_TAB = TABI
EXCEPTIONS
INVALID_FILESIZE
= 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE
= 3.
:', TIPO_FICH,
/ 'Tamao:', TAM_FICH.
Aqu, el usuario puede cambiar los valores que aparecen por defecto. Cuando el usuario pulsa el
botn Transferir, el sistema escribe los datos de la tabla interna TABI rellenada en el programa,
al fichero C:\temp\textsap.xls. Si el fichero ya existe, el sistema preguntar al usuario si desea
reemplazar la versin existente. El sistema inserta tabuladores entre las columnas, y saltos de
lnea al final de cada lnea.
En las salida aparecera algo como esto:
Ahora, podemos abrir el fichero C:\temp\testsap.xls utilizando Excel. Aparecera algo como
esto:
15.2.1.2
Sin dilogo
Para escribir datos de una tabla interna en el servidor de presentacin sin mantener un
dilogo con el usuario, utilizaremos el mdulo de funcin WS_DOWNLOAD. Los
parmetros ms importantes se listan ms abajo.
Parmetros IMPORT importantes:
Parmetro
Funcin
BIN_FILESIZE
CODEPAGE
FILENAME
FILETYPE
Parmetros EXPORT:
Parmetro
Funcin
FILELENGHT
Parmetros TABLES:
Parmetro
Funcin
DATA_TAB
Parmetros EXCEPTIONS:
Parmetro
Funcin
FILE_OPEN_ERROR
FILE_WRITE_ERROR
INVALID_FILESIZE
INVALID_TABLE_WIDTH
INVALID_TYPE
Ejemplo: Supongamos que el servidor de presentacin est ejecutndose bajo Windows 95, y
hemos escrito el siguiente programa:
PROGRAM ZTSTFICH.
DATA: LONG_FICH TYPE I,
TAB(80) OCCURS 5.
APPEND 'Esta es la primera lnea de mi texto. ' TO TAB.
APPEND 'La segunda lnea. ' TO TAB.
APPEND '
APPEND '
APPEND '
= 1
FILE_WRITE_ERROR
= 2
INVALID_FILESIZE
= 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE
= 5.
El sistema ha escrito las cinco lneas de la tabla TAB en el fichero ASCII c:\temp\testsap.tx.
Ahora abrir este fichero utilizando cualquier editor del servidor de presentacin. En este ejemplo
hemos utilizado el editor de DOS:
15.2.2
Lectura
15.2.2.1
Funcin
CODEPAGE
FILENAME
FILETYPE
ITEM
Funcin
ACT_FILENAME
ACT_FILETYPE
FILESIZE
Parmetros TABLES:
Parmetro
Funcin
DATA_TAB
Parmetros EXCEPTIONS:
Parmetro
Funcin
CONVERSION_ERROR
INVALID_TABLE_WIDTH
INVALID_TYPE
Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y
contiene el siguiente fichero Excel:
Si esta tabla se salva en el fichero de texto C:\temp\pelis.txt con tabuladores entre las
columnas, el siguiente programa podra leer la tabla:
= TAM_FICH
ACT_FILENAME = NOMB_FICH
ACT_FILETYPE = TIPO_FICH
TABLES
DATA_TAB = TABI
EXCEPTIONS
CONVERSION_ERROR
= 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE
= 3.
:', TIPO_FICH,
Aqu, el usuario puede cambiar los valores que aparecen por defecto. Cuando el usuario pulsa el
botn Transferir, el sistema importa los datos del fichero C:\temp\pelis.txt a la tabla interna
TABI.
La salida muestra los siguiente:
15.2.2.2
Sin dilogo
Funcin
CODEPAGE
FILENAME
FILETYPE
Parmetros EXPORT:
Funcin
FILELENGHT
Parmetros TABLES:
Parmetro
Funcin
DATA_TAB
Parmetros EXCEPTIONS:
Parmetro
Funcin
CONVERSION_ERROR
FILE_OPEN_ERROR
FILE_READ_ERROR
INVALID_TABLE_WIDTH
INVALID_TYPE
Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y
contiene el siguiente fichero de texto:
= 1
FILE_OPEN_ERROR
= 2
= 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE
= 5.
15.2.3
Funcin
FILENAME
QUERY
Parmetro EXPORT:
Parmetro
Funcin
RETURN
Parmetro EXCEPTION:
Parmetro
Funcin
Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y el
fichero SYSTEM.INI existe como se indica a continuacin:
El siguiente programa devolvera algunos de los atributos del sistema operativo y del fichero:
PROGRAM ZTSTFICH.
DATA: NOMB_FICH(60),
RESULTADO(30),
LONG_FICH TYPE I.
NOMB_FICH = 'C:\WINDOWS\SYSTEM.INI'.
CALL FUNCTION 'WS_QUERY'
EXPORTING
*>> Preguntamos por el sistema operativo:
QUERY = 'OS'
IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Sistema Operativo:', RESULTADO.
ENDIF.
CALL FUNCTION 'WS_QUERY'
EXPORTING
*>> Preguntamos por la versin de Windows:
QUERY = 'WS'
IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Windows:', RESULTADO.
ENDIF.
= 'FE'
IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Existe el fichero?', RESULTADO.
ENDIF.
CALL FUNCTION 'WS_QUERY'
EXPORTING
FILENAME = NOMB_FICH
*>> Preguntamos por la longitud del fichero:
QUERY = 'FL'
IMPORTING
RETURN = LONG_FICH
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Longitud fichero:', LONG_FICH.
ENDIF.
Para una informacin ms detallada acerca de las abreviaturas utilizada para los sistemas
operativos, colocaremos el cursor en el campo QUERY de la pantalla de documentacin del
mdulo de funcin y pulsaremos Ayuda.