Você está na página 1de 218

AB AP WORK S HOP

Version 1.0

Xioma Consulting Centroamrica


2007

Xioma Consulting - ABAP WORKSHOP"

IN T ROD U CCI N
ABAP (Advanced Business Application Programming), o ABAP/4 es un lenguaje de
programacin desarrollado por la empresa alemana SAP (Systeme, Anwendungen, Produkte in der
Datenverarbeitung)1.
Los alcances del lenguaje ABAP se han ampliado segn se ha ido desarrollando el escenario
de desarrollo de software. Han sido actualizaciones peridicas, como la adicin de instrucciones
orientadas a objetos dentro del lenguaje y herramientas ms poderosas para el desarrollo de
formularios.
ABAP fue desarrollado en la dcada de los 80 a partir de una investigacin que produjo toda
una serie de lenguajes de cuarta generacin de aplicacin especfica y cuyo objetivo apuntaba a la
produccin de alto nivel de reportes. Fue incluido al producto SAP R/2. El objetivo de ste
producto era brindar una aplicacin de negocios en mainframe para grandes corporaciones para la
administracin de materiales, finanzas y contabilidad.
Originalmente se supona que los usuarios del lenguaje de programacin serian usuarios,
que pudieran manipular la informacin por s mismos, pero el lenguaje result ser demasiado
complejo para usuarios ordinarios, haciendo necesario que fueran programadores quienes lo
manipularan debido a que se requera de una alta destreza.

Segn fueron disminuyendo las

consideraciones de desempeo, el lenguaje empez a convertirse en un componente central del


sistema SAP.
En los 90, SAP empez a convertir todo el cdigo clave del SAP R/3 a ABAP, de tal forma
que para el ao 2003 el proyecto SAP se basaba ya en ABAP para las funciones ms bsicas.

Systems, Applications & Products in Data Processing

Xioma Consulting - ABAP WORKSHOP"

ARQU I TECTU RA DE S AP
El sistema R/3 posee una arquitectura de software modular que sigue los principios de la
arquitectura Cliente/Servidor. El modelo en 3 capas compuesto por una capa de presentacin, una
de aplicacin y una de base de datos; pueden estar alojadas en diferentes computadores sirviendo
esto como base para la escalabilidad del sistema.

Capa de presentacin: Esta es la capa donde se ejecuta la interfase de usuario (SAPGUI)


para brindar el acceso a las aplicaciones por parte de los usuarios finales.
Capa de Aplicacin: Es en esta capa donde se ejecuta ABAP, tanto las aplicaciones
desarrollas por SAP como las desarrolladas por los usuarios. Desde esta capa ABAP enva y
recibe datos a la capa de base de datos.
Capa de Base de datos: Este es el nivel ms bajo en el modelo, y es donde se administra la
informacin con la ayuda del sistema de administracin de base de datos relacional
(RDBMS). Este nivel almacena no solamente datos maestros y transaccionales, sino
tambin los programas y metadatos que describen el sistema R/3 son administrados y
almacenados ac.
Toda la distribucin tcnica del software es independiente de la ubicacin fsica del
hardware, tanto vertical como horizontalmente.

Xioma Consulting - ABAP WORKSHOP"

TRAN S P ORT ORG ANIZ E R


El Transport Organizer permite la administracin de las rdenes de transporte de un usuario.

Con la opcin de visualizacin se puede ver la lista objetos locales y aquellos que se
encuentren en una orden de transporte esperando a ser liberados. Las rdenes que pertenecen a la
clase Workbench incluyen todos los objetos relacionados con el desarrollo de aplicaciones. En el
caso de las rdenes de Customizing, stas contienen a los objetos generados por los cambios en la
parametrizacin del sistema.
Existen dos estados posibles para las ordenes, las liberadas que son aquellas ordenes que
estn listas para ser transportadas a otro mandante y las modificables que son aquellas ordenes que
estn esperando una liberacin. Las rdenes liberadas pueden ser visualizadas desde una fecha
especfica.

Xioma Consulting - ABAP WORKSHOP"

Para liberar la orden, se debe liberar primero todas las tareas incluidas en la orden de
transporte y posteriormente la orden. Se libera un objeto a la vez, seleccionndolo y pulsando el
botn LIBERAR DIRECTAMENTE . Solamente se pueden liberar las ordenes propias, por lo
que si fuera necesario liberar una tarea o una orden que perteneciera a otro usuario es necesario
reasignarla utilizando el botn MODIFICAR TITULAR .

Xioma Consulting - ABAP WORKSHOP"

COMP OS I CI ON D E U N P ROG RAM A


ABAP
Cdigo fuente
Es la parte esencial del programa que contiene todas las sentencias ABAP que
dirigen la mayor parte del comportamiento del programa.

Pantallas
Contiene toda la disposicin de pantallas y la lgica de flujo asociada a las mismas.
Normalmente se crea la disposicin de pantallas utilizando una herramienta llamada screen
painter o desde el ABAP Workbench. Sin embargo existen pantallas especiales, como el
selection screen en los reportes, que poseen una disposicin y lgica que se controla
nicamente a travs de sentencias ABAP.

Interfase
Contiene todas las opciones de los mens, la barra estndar de herramientas, la barra
de herramientas de aplicacin y los botones. Contiene tambin los ttulos y status.

Elementos de Texto
Estos son dependientes del idioma. Puede ser traducidos directamente desde la
herramienta de mantenimiento de textos o utilizando una herramienta especial de
traduccin.

Documentacin
La documentacin es dependiente del idioma. Es importante recordar escribir la
documentacin orientada al usuario. En caso de querer documentar cdigo, se hace a travs
de comentarios en el cdigo directamente.

Variantes
Las variantes permiten predefinir valores en la pantalla de seleccin (selection
screen) de los programas. Esto suele ser muy til durante los periodos de prueba o para la
ejecucin de tareas repetitivas.

Xioma Consulting - ABAP WORKSHOP"

E DITOR
El editor ABAP se invoca a travs de la transaccin SE38, o por la ruta del men SAP
HERRAMIENTAS->WORKBENCH ABAP->DESARROLLO->SE38 - EDITOR ABAP.

Imagen Inicial

En la imagen inicial del editor se indica el nombre del programa que se desea tratar, y cuenta
con las siguientes opciones en la barra de herramientas:

1. Verificar
Esta opcin se encarga de revisar la sintaxis del programa.

Xioma Consulting - ABAP WORKSHOP"

2. Activar
La activacin ejecuta una revisin sintctica, almacena y posteriormente deja
disponible al programa para ser ejecutado en el ambiente del R/3.
3. Ejecutar
Ejecuta el programa.
4. Referencia de Utilizacin
Las referencias de utilizacin sirven para identificar otros objetos del
ambiente que utilicen el programa indicado.

5. Anlisis de Entorno
Verifica todos los objetos de repositorio a la cual se les hace referencia dentro del
programa.
6. Manual Online
Invoca la ayuda de ABAP disponible en lnea en el sistema.
7. Borrar
Elimina el programa, y otros componentes que formen parte del mismo de serle
indicado.

Xioma Consulting - ABAP WORKSHOP"

8. Copiar
Crea una copia del programa con otro nombre.

9. Renombrar
Cambia el nombre del programa.

10. Debugging
Ejecuta el programa a travs del de la herramienta de Debugging
11. Con Variante
Ejecuta el programa con una variante creada con la opcin de variantes.

Xioma Consulting - ABAP WORKSHOP"

12. Variantes
Crea una variante para el programa, siempre y cuando el programa reciba algn tipo
de parmetro de entrada.

13. Crear
Crea el programa e invoca el editor de cdigo.

Xioma Consulting - ABAP WORKSHOP"

10

14. Visualizar
Invoca el editor de cdigo en modo de solo visualizacin.
15. Modificar
Invoca el editor de cdigo para modificar un programa que ya existe.

Editor de Cdigo
El editor de Cdigo es el ambiente donde se encuentran las herramientas bsicas de
desarrollo y donde se introduce el cdigo ABAP.

Xioma Consulting - ABAP WORKSHOP"

11

La barra del editor contiene las siguientes herramientas:

1. Objeto Anterior
Se desplaza al objeto anterior cuando existe ms de un objeto en la lista de objetos.
2. Objeto Siguiente
Se desplaza al objeto siguiente en la lista de objetos cuando existe ms de un objeto en la
lista de objetos.

3. Visualizar <-> Modificar


Cambia el estado del editor entre modo de visualizacin o modo de modificacin.
4. Activo <-> Inactivo
Cambia el estado del programa entre activo e inactivo.
5. Otro Objeto
sta opcin permite cambiar el objeto actual por otro que se desee editar. Se divide en varias
categoras de las cuales las ms importantes son: diccionario de datos, bibliotecas de clases,
programa y grupo de funciones.

Xioma Consulting - ABAP WORKSHOP"

12

6. Verificar
sta opcin se encarga de revisar la sintaxis del programa.
7. Activar
La activacin ejecuta una revisin sintctica, almacena y posteriormente deja disponible al
programa para ser ejecutado en el ambiente del R/3.
8. Verificar (Ejecutar)
Ejecuta el programa.
9. Referencia de Utilizacin
Las referencias de utilizacin sirven para identificar otros objetos del ambiente que utilicen
el programa indicado.
10. Visualizar Lista de Objetos
Ejecuta el ABAP Development Workbench donde se muestran los objetos relacionados con
el programa.
11. Visualizar Ventana de Navegacin
Muestra la ventana de navegacin que consiste en una pila con los ltimos objetos
revisados.
12. Imagen Completa
Muestra la venta del objeto en revisin maximizada.
13. Ayuda
Invoca la ayuda del sistema.
14. Fijar/Borrar Break Point
Si el programa se encuentra en modo activo, se fija un Break-point en la lnea actual, que
ser ejecutado solamente para el usuario que lo fij.
15. Patrn
Inserta una plantilla a partir de la lnea actual. Sobre todo en el caso de la invocacin de
funciones o la invocacin del mtodo de un objeto, sta funcin puede ser de gran utilidad para
conocer los parmetros que pueden ser utilizados.

Xioma Consulting - ABAP WORKSHOP"

13

16. Pretty Printer


Ajusta el formato del cdigo para que sea mucho ms fcil de leer por el usuario.

Creacin de un nuevo programa


Los programas en SAP que no pertenecen al estndar deben iniciar su nombre con la letra Z,
distinguindose as los programas de usuarios.
En la imagen inicial se digita el nombre del programa y se utiliza el botn CREAR. En ste
momento se deben llenar las propiedades bsicos del programa en la ventana de atributos.

Xioma Consulting - ABAP WORKSHOP"

14

Entre los tipos de programa que se pueden crear, estn los siguientes:

1. Programa ejecutable (1)


Estos son los programas que pueden iniciarse directamente sin cdigo de transaccin
y en fondo, desde la transaccin SE38 o la SA38.
2. Modulpool (M) para dynpros2 SAP Screen Painter
Contiene pasos para procesar mdulos de dynpro de las transacciones y slo puede
llamarse mediante un cdigo de transaccin o una funcin de men.

3. Report de Include (I)


Contiene un cdigo de programa que no puede ejecutarse por s slo.
Esta parte de programa puede incluirse en otro programa mediante la instruccin
INCLUDE.
4. Pool de subrutinas (S)
Contiene partes de programa (FORM) que pueden ser invocadas desde instrucciones
PERFORM externas.
5. Grupo de funciones (F)
Contiene mdulos de funciones. Estos grupos y mdulos se administran en la
biblioteca de funciones, que se invoca por medio de la transaccin SE37.
6. Pool de interfaces (J)
Contiene interfaces. El generador de clases gestiona las interfaces y las clases.
7. Pool de clases (K)
Contiene clases. El generador de clases gestiona las interfaces y las clases.

El status del programa indica, si se trata de un programa productivo, de test o de sistema.


Dependiendo de esta propiedad se genera cierto tipo de control en la administracin de los
programas.

Un dynpro se suele llamar una pantalla de SAP

Xioma Consulting - ABAP WORKSHOP"

15

La propiedad de grupo de autorizaciones indica a que grupo ha sido asignado el programa,


sirviendo como referencia para validar los derechos que un usuario pueda tener sobre ste. El
sistema verificar si el usuario pertenece a este grupo de autorizaciones:

Antes de lanzar o editar un programa

Al actualizar los atributos

Al utilizar otra utilidad del desarrollo de programas

Al ejecutar la opcin de grabar, es necesario indicar la clase de desarrollo (paquete) a la que


pertenece el programa, o definirlo como un objeto local.
Las clases de desarrollo o paquetes se agrupan a los objetos que pertenecen al ABAP Workbench.
La asignacin a una clase de desarrollo se indica en el catlogo de objetos. Los objetos locales
pertenecen a la clase de desarrollo $TMP (Objeto Local) y no son transportables.

Una vez seleccionada la clase de desarrollo, si sta no es local, el sistema procede a solicitar
una orden de transporte vlida a la que se encontrar atado el programa. Esta puede ser una orden
ya existente o una orden nueva. Las rdenes de transporte pueden ser revisadas y editadas por
medio de la transaccin SE09.

Xioma Consulting - ABAP WORKSHOP"

16

Para crear la orden se oprime el botn de crear , posteriormente se le asigna la descripcin


a la nueva orden y se graba . El sistema asignar automticamente un nmero para la orden de
transporte y otro para la nueva tarea vinculada al programa.

Programa Hola Mundo


Los programas tipo REPORT son el tipo ms bsico, y se utilizan primordialmente para la
generacin de reportes, batch inputs3 e interfases. Un ejemplo de un programa tipo REPORT es el
siguiente:
REPORT ZHOLA no standard page heading.
WRITE 'Hello World!'.

Todos los programas ejecutables deben iniciar con la instruccin REPORT <Nombre del
programa>, el parmetro adicional NO STARNDARD PAGE HEADING elimina del reporte la
lnea que imprime el ttulo del reporte.
Para imprimir un texto en la pantalla se utiliza la instruccin WRITE <string>. Una vez
finalizado el programa es necesario activarlo
y posteriormente puede ser ejecutado .

Programas de carga., usualmente a partir de archivos planos.

Xioma Consulting - ABAP WORKSHOP"

17

Los strings o cadenas de caracteres en ABAP se encierran entre comillas


simples. La comilla doble se utiliza para introducir un comentario.

Xioma Consulting - ABAP WORKSHOP"

18

E V ENTOS
ABAP es un lenguaje estructurado orientado a eventos, los cuales se disparan
dependiendo de una condicin. El cdigo dentro de cada evento se ejecuta siguiendo el
clsico comportamiento TOP-DOWN.
Los eventos ms utilizados se presentan a continuacin en el orden que son
ejecutados:

LOAD-OF-PROGRAM
Este evento se ejecuta justamente despus de que el sistema ha cargado un
programa de tipo 1, M, F o S en memoria. Siendo este bloque ejecutado nicamente
una vez por cada programa en cada sesin interna.
Sintaxis:
LOAD-OF-PROGRAM.
<Cdigo a ejecutar>

INITIALIZATION
Este evento se ejecuta antes de que se muestre la pantalla de seleccin.
Normalmente es utilizado para inicializar valores clave para la ejecucin del
programa.
Sintaxis:
INITIALIZATION.
<inicializacin de variables>

Ejemplo:
PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.
INITIALIZATION.
QUAL_DAY+6(2) = '01'.
QUAL_DAY
= QUAL_DAY - 1.

START-OF-SELECTION
Se puede interpretar como el evento principal y es ejecutado justo despus
del evento SELECTION-SCREEN.
Sintaxis:
START-OF-SELECTION.
<Cdigo a ejecutar>

Ejemplo:
START-OF-SELECTION.

Xioma Consulting - ABAP WORKSHOP"

19

WRITE Hola Mundo!.

La instruccin REPORT siempre tiene implcito el evento START-OFSELECTION. Por lo tanto todo el cdigo entre la instruccin REPORT y
el siguiente evento se ejecuta en el START-OF-SELECTION.

END-OF-SELECTION
Se procesa despus que toda la informacin se ha ledo, y justo antes de que
se muestre la impresin del reporte.

TOP-OF-PAGE
Se ejecuta antes que se imprima informacin en la primera pgina de un
reporte. De esta forma permite la creacin de una cabecera definida por el
programador siempre que se haya suprimido la cabecera estndar (REPORT
<NOMBRE> NO STANDARD PAGE HEADING).
Las lneas definidas en el TOP-OF-PAGE se mantienen fijas al visualizar
el reporte en pantalla a la hora de realizar un desplazamiento vertical. Por
lo que no es conveniente utilizar toda una pgina como cabecera dado que
el usuario no podra desplazarse.

AT SELECTION-SCREEN
Este evento solamente tiene sentido en los reportes. El evento se ejecuta una
vez que se haya procesado la pantalla de seleccin. En el caso que se genere un
error todos los campos presentes en la pantalla de seleccin estarn disponibles
nuevamente para recibir datos.

Sintaxis:

AT SELECTION-SCREEN {OUTPUT} | {ON <PARAM>}


{ON HELP-REQUEST}FOR <PARAM> |
{ON VALUE-REQUEST FOR <PARA>}
{ON EXIT-COMMAND}.
<Cdigo>.

Ejemplo:
Parameters:

numero(2).

AT SELECTION-SCREEN.
IF NUMERO > 10.
message s333(s1) with Nmero mayor que 10'.
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

20

Si se utiliza la adicin OUTPUT se ejecutara el cdigo dentro del AT


SELECTION-SCREEN antes que el usuario introduzca informacin en los campos.
Este evento se ejecuta despus del INITIALIZATION y el LOAD-OF-PROGRAM.
La adicin ON <parmetro> asume que se ejecutar el bloque cuando un
parmetro o select-options ha sido modificado. Esto es muy til cuando se desea
realizar validaciones sobre los campos en la pantalla de seleccin, pues en caso de
enviar un error el cursor se quedar posicionado sobre el parmetro indicado en el
AT SELECTION-SCREEN.
En el caso del ON HELP-REQUEST FOR, se espera la ejecucin del bloque
cuando se oprime el botn de ayuda (F1) sobre el campo indicado despus del FOR ,
igualmente para el ON VALUE-REQUEST FOR, ser invocado el bloque al oprimir
el botn de la ayuda de bsqueda (F4).
ON EXIT-COMMAND ejecutar el bloque cuando el usuario oprima los
botones de BACK (

), EXIT(

) o CANCEL (

).

AT LINE-SELECTION
El evento se ejecuta al oprimir la tecla F2 o al dar doble click sobre una lnea
en la pantalla de salida del reporte. El evento asigna a la variable de ambiente SYUCOMM el valor PICK. El valor de la linea seleccionada quedar en la variable de
ambiente SY-LISEL.
Si a la tecla F2 se le cambia el cdigo PICK, el doble click
automticamente asume el nuevo cdigo. Esto provocar que se deba
evaluar en en el bloque de AT USER-COMMAND.

Sintaxis:

AT LINE-SELECTION.

Ejemplo:
AT LINE-SELECTION.
MESSAGE S333(S1) WITH SY-LISEL.

Xioma Consulting - ABAP WORKSHOP"

21

AT USER-COMMAND
Este bloque se ejecutar cuando el sistema ejecute un cdigo de funcin, en
otras palabras cuando el usuario ejecute un evento en la pantalla. Cuando la funcin
es PICK o cuando inicia con el smbolo % el bloque no se ejecuta. A continuacin
se muestra una tabla con los cdigos de funcin estndar:

CDIGO

DE
CIN

F U N-

DESCRIPCIN

BACK

Regresar

P-

Hacer Scroll a la pgina anterior

P--

Hacer Scroll a la primera pgina

P+

Hacer Scroll a la pgina siguiente

P++

Hacer Scroll a la ltima pgina

PL-

Hacer Scroll a la primera lnea de la pgina

PL-n

Hacer Scroll n lneas hacia atrs

PL+n

Hacer Scroll n lneas hacia adelante

PNOP

Sin efecto

PP-

Hacer Scroll una pgina hacia atrs

PP-n

Hacer Scroll n pginas hacia atrs

PPn

Hacer Scroll al inicio de la pgina n

PRI,PRINT

Imprimir

PS--

Hacer Scroll a la primera columna

PS++

Hacer Scroll a la ltima columna

PS-

Hacer Scroll una columna a la izquierda

PS-n

Hacer Scroll n columnas a la izquierda

PS+

Hacer Scroll una columna a la derecha

PSn

Hacer Scroll n columnas a la derecha

PZn

Hacer Scroll a la lnea n

RW

Cancelar

Xioma Consulting - ABAP WORKSHOP"

22

Los siguientes cdigos standar no pasan por el AT USER-COMMAND:

CDIGO

DE
CIN

F U N-

DESCRIPCIN

%CTX

Llamado a un men contextual

%EX

Salir

%PC

Guardar Archivo

%PRI

Imprimir

%SC

Buscar

%SC+

Buscar siguiente

%SL

Buscar en ocina

%ST

Guardar en reporte de rbol

Xioma Consulting - ABAP WORKSHOP"

23

D EF I N I CION D E DATOS
Tipos de Datos
Los tipos de datos indican el mbito al que pertenece un objeto de datos. Estos
pueden ser nativos del sistema, o nuevos tipos de datos definidos por el usuario (ya sea
local en un programa o en el diccionario de datos de SAP).
En ABAP/4 existen los siguientes tipos de datos estndar:

TIPO

D E S C R I P C I N T A M A O VA L O R I N I C I A L

Texto (Caracter)

Blanco

Texto Numrico

000

Fecha (AAAAMMDD)

00000000

Hora (HHMMSS)

000000

Hexadecimal

X00

Entero (Integer)

Nmero Empaquetado

Nmero de Punto Flotante 8

0.0

String

Cadena de caracteres

Blanco

Xstring

Secuencia de bytes

Blanco

Definicin de Tipos
Es posible la definicin de nuevos tipos de datos utilizando la instruccin TYPES.
Al igual que en los tipos de datos estndar los nuevos tipos sern utilizables al crear
nuevos objetos de datos y al asignar los tipos a los parmetros formales y smbolos de
texto.
Sintaxis:
TYPES <Nuevo tipo> TYPE <tipo>.

Ejemplos:
TYPES Numero TYPE I.
TYPES: BEGIN OF PERSONA,
NOMBRE(20) TYPE C,

Xioma Consulting - ABAP WORKSHOP"

24

EDAD
TYPE
I,
El nombre del tipo puede ser de
hasta
30 caracteres.
Y no se pueden
END OF PERSONA.
utilizar los caracteres especiales '(', ')', '+', '.', ',', ':', '-', '<' y '>'. Los
nmeros pueden ser utilizados, pero el nombre no puede consistir solo de
nmeros.

TYPE-POOLS
Los TYPE-POOLS son precursores de la definicin general de tipos en el
diccionario ABAP. Antes de la versin 4.0 solo se podan definir tipos de datos elementales
y estructuras planas en el diccionario. Todos los dems tipos deban estar disponibles
deban ser definidos con la instruccin TYPES en un TYPE-POOL. Desde la versin 6.40
se ha reemplazado el uso de TYPE-POOLS por clases globales, sin embargo los TYPEPOOLS definidos en versiones anteriores siguen disponibles y pueden ser utilizados.
Sintaxis:
TYPE-POOLS: <type-pool>.

Ejemplo:
TYPE-POOLS: VRM.

Comentarios
Los comentarios se utilizan para documentar el cdigo, y de esta manera ayudar a
mejorar su interpretacin. Existen dos tipos de comentarios en ABAP:
1. Lnea Completa: Este se activa al colocar el smbolo * en la primera posicin de la
lnea.
2. Al final de la lnea: Se utiliza el smbolo .
Ejemplos:
*------------------------------------------------------*
Autor:
*
Fecha de creacin
*
Fecha de Modificacin
*------------------------------------------------------Contador = Contador + 1. Contador de impresin

Xioma Consulting - ABAP WORKSHOP"

25

Variables
Las variables son valores que puede cambiar en el transcurso de la ejecucin de un
programa dependiendo de ciertas condiciones o informacin recibida en un programa.
La declaracin de las variables en ABAP se realiza con la instruccin DATA. sta
puede ser invocada desde cualquier lugar de un programa ABAP.
Sintaxis: DATA <Variable> [TYPE <tipo>] | [LIKE <referencia>].
Ejemplos:
DATA Cumpleaos TYPE D.
DATA Nombre(40).

El nombre de la variable puede ser de hasta 30 caracteres. Y no se pueden


utilizar los caracteres especiales '(' , ')' , '+' , '-' , ',' y ':' . Los nmeros
pueden ser utilizados, pero el nombre no puede consistir solo de nmeros.

Al utilizar la opcin LIKE se crea la variable con referencia a otro objeto de datos en
el sistema, heredando as las mismas caractersticas.
Ejemplo:
DATA: Nombre(40),
Nombre2 LIKE Nombre.

Constantes
La instruccin CONSTANTS permite la definicin de objetos de datos estticos
declarados en un programa ABAP. stos pueden ser de cualquier tipo definido en el
sistema.
Sintaxis: CONSTANTS <Constante> [TYPE <tipo>] VALUE <valor>.
Ejemplos:
CONSTANTS:

CHAR1 VALUE X,
INT
TYPE I VALUE 99.

CONSTANTS: BEGIN OF CONST_REC,


C(2) TYPE I VALUE 'XX',
N(2) TYPE N VALUE '12',

Xioma Consulting - ABAP WORKSHOP"

26

X
I
P
F
D
T
END OF

TYPE X VALUE
TYPE I VALUE
TYPE P VALUE
TYPE F VALUE
TYPE D VALUE
TYPE T VALUE
CONST_REC.

'FF',
99,
99,
'9.99E9',
'19950101',
'235959',

El smbolo : se utiliza para evitar la repeticin consecutiva de ciertas


instrucciones como DATA, CONSTANTS, PARAMETERS, WRITE, etc.
Separando los parmetros correspondientes a cada ocurrencia por medio de la
coma.
Ejemplo:
DATA: contador type i,
Temporal(10),
Fecha LIKE SY-DATUM.

Field Symbols
Los field symbols son nombres simblicos que apuntan a un rea de memoria
durante el tiempo de ejecucin. Es posible liberar estos punteros con la instruccin
UNASSING. Tambin es posible preguntar en las clusulas condicionales si un Field
Symbol esta asignado mediante la condicin IS ASSIGN.
Para crear un field symbol se utiliza la siguiente sintaxis:
Sintaxis:
FIELD-SYMBOLS: <Smbolo1>, <Smbolo1>.

Para asignar la referencia al smbolo creado se utiliza la instruccin ASSIGN:


Sintaxis:
ASSIGN <OBJETO> TO <SIMBOLO>.

Ejemplo:
FIELD-SYMBOLS: <E1>.
DATA: FECHA LIKE SY-DATUM.
IF <E1> IS ASSIGN.
UNASSIGN <E1>.
ASSIGN FECHA TO <E1>.
<E1> = '19751130'.
WRITE FECHA.
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

27

Los smbolos de texto se pueden accesar en el men del editor con la


opcin pasar a -> Elementos de Texto. Tambin por medio de la
transaccin SE38 indicando el nombre del programa y seleccionando la
opcin Elementos de Texto.

Creacin de textos
Se puede crear textos dependientes del idioma o smbolos de texto para todos los
programas ABAP. Se asigna un cdigo de tres dgitos <xxx> a cada smbolo de texto. Para
accesarlo en el programa se utiliza de la siguiente manera:
Sintaxis:
text-<xxx>.

Ejemplo:
WRITE text-t01.

Parmetros
Los parmetros son variables de entrada en un programa tipo REPORT. Estos
generan una pantalla automtica de entrada donde los parmetros tienen ciertas
caractersticas especiales segn el tipo al que pertenecen.

Parameters
La instruccin PARAMETERS crea una variable de entrada con las mismas
caractersticas que la instruccin DATA. El nombre de cada parmetro no puede
exceder los 8 caracteres.
Sintaxis:
PARAMETERS <param> [{LIKE <referencia> } |
{ TYPE <tipo> } |
{ AS CHECKBOX [USER-COMMAND fcode] }
{ RADIOBUTTON GROUP <grupo>
[USER-COMMAND fcode]} |
{ AS LISTBOX VISIBLE LENGTH vlen
[OBLIGATORY]
[USER-COMMAND fcode] }]
[DEFAULT val]
[LOWER CASE]
[MATCHCODE OBJECT search_help]
[VALUE CHECK]
[OBLIGATORY|NO-DISPLAY].

Xioma Consulting - ABAP WORKSHOP"

28

Ejemplo:
PARAMETERS: Nombre(40),
MATERIAL LIKE MARA-MATNR,
FECHA TYPE DATUM.

El nombre de un parmetro no puede exceder los 8 caracteres. Para definir los


textos de los parmetros utilice en el men la opcin IR A-> Elementos de Texto>Textos de Seleccin.
Esto aplica igualmente para los parmetros definidos en el Selection-Screen.

La opcin AS CHECKBOX permite que el campo en pantalla aparezca


solamente como un campo de entrada binario (marcado o no marcado). El parmetro
por ende poseer una longitud de 1 y ser tipo CHAR.
Ejemplo:
PARAMETERS: ESTUDIA AS CHECKBOX.

La adicin RADIOBUTTON genera un grupo de campos en la pantalla de


seleccin de los cuales el usuario solamente puede seleccionar uno. Cada parmetro,
al igual que en el caso anterior, es del tipo CHAR con longitud de uno.
Ejemplo:
PARAMETERS: B1 RADIOBUTTON GROUP R1,
B2 RADIOBUTTON GROUP R1,
B3 RADIOBUTTON GROUP R1.

Cuando se desean crear parmetros a seleccionar de una lista, se utiliza la


opcin AS LIST BOX VISIBLE LENGHT <n>, donde n indica el largo del campo a
desplegar, ms no el tamao de la variable. Para llenar la lista se puede utilizar la
funcin VRM_SET_VALUES desde el evento AT SELECTION-SCREEN OUTPUT
y el TYPE-POOL VRM.
Ejemplo:
TYPE-POOLS : VRM.
DATA: param TYPE vrm_id,
values
TYPE vrm_values,
value LIKE LINE OF values.

Xioma Consulting - ABAP WORKSHOP"

29

PARAMETERS: p_name(1) AS LISTBOX VISIBLE LENGTH 20.


AT SELECTION-SCREEN OUTPUT.
param = 'P_NAME'.
value-key = '1'.
value-text = 'Xioma'.
APPEND value TO values.
value-key = '2'.
value-text = 'Crystalis'.
APPEND value TO values.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING id
= param
values = values.

Al definir un valor por defecto para el parmetro se utiliza la instruccin


DEFAULT.
Ejemplo:
PARAMETERS: MAT LIKE MARA-MATNR DEFAULT 00001.

La instruccin LOWER CASE permite que se introduzcan letras minsculas


en el parmetro.
Ejemplo:
PARAMETERS: nombre LIKE zusuario-nombre LOWER CASE.

Cuando sea necesario asignar un objeto de ayuda al parmetro se ha de


utilizar la instruccin MATCH CODE OBJECT. Si existiera una ayuda de bsqueda
ya asignada a la referencia, sta ser ignorada.
Ejemplo:
PARAMETERS: MAT LIKE MARA-MATNR
MATCH CODE OBJECT ZHLP_MATERIAL.

Si el elemento de datos de la referencia posee un dominio que debe ser


validado, es necesario utilizar la instruccin VALUE CHECK.
Ejemplo:
PARAMETERS: werks LIKE bsis-werks VALUE CHECK.

Cuando se requiere que el parmetro sea obligatorio se agrega la instruccin


OBLIGATORY. En caso que sea necesario definir un parmetro para ser utilizado

Xioma Consulting - ABAP WORKSHOP"

30

nicamente para la invocacin del reporte mediante SUBMIT, se utiliza la


instruccin NO-DISPLAY.
Ejemplo:
PARAMETERS: MAT LIKE MARA-MATNR OBLIGATORY,
MEINS LIKE MARA-MEINS NO-DISPLAY.

Si es necesario reducir el tamao del rea de entrada se utiliza la instruccin


VISIBLE LENGHT. Esto no modifica el tamao de la variable.

Select-Options
Select-options indica un parmetro de tipo especial (RANGES) que permite
que el usuario defina un conjunto de valores para el parmetro. El nombre de cada
parmetro no puede exceder los 8 caracteres.
Sintaxis:
SELECT-OPTIONS <parmetro> FOR <referencia>
[OBLIGATORY|NO-DISPLAY]
[VISIBLE LENGTH vlen]
[NO-EXTENSION ]
[NO INTERVALS]
[DEFAULT val1 [TO val2]
[OPTION opt]
[SIGN sign]]
[LOWER CASE]
[MATCHCODE OBJECT search_help]
.

Ejemplo:
SELECT-OPTIONS MAT FOR MARA-MATNR.

Cuando se desea que el parmetro para el SELECT-OPTIONS sea dinmico


se coloca la variable de referencia entre parntesis.
Ejemplo:
PARAMETERS: dbtab(30) TYPE c,
column(30) TYPE c.
DATA name(80) TYPE c.
SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW.
SELECT-OPTIONS opcion FOR (name).
SELECTION-SCREEN END OF SCREEN 500.
CONCATENATE dbtab '-' column INTO name.
CALL SELECTION-SCREEN 500 STARTING AT 10 10.

Xioma Consulting - ABAP WORKSHOP"

31

Cuando se requiere que el parmetro sea obligatorio se agrega la instruccin


OBLIGATORY. En caso que sea necesario definir un parmetro para ser utilizado
nicamente para la invocacin del reporte mediante SUBMIT, se utiliza la
instruccin NO-DISPLAY.
Ejemplo:
SELECT-OPTIONS: MAT FOR MARA-MATNR OBLIGATORY,
MEINS FOR MARA-MEINS NO-DISPLAY.

Si es necesario reducir el tamao del rea de entrada se utiliza la instruccin


VISIBLE LENGHT. Esto no modifica el tamao de la variable.
Ejemplo:
SELECT-OPTIONS: MAT FOR MARA-MATNR VISIBLE LENGHT 10.

Para eliminar el botn de mltiples selecciones se utiliza la instruccin NOEXTENSION, y si fuera el caso de eliminar el campo para el hasta, se utiliza la
instruccin NO INTERVALS.
Ejemplo:
SELECT-OPTIONS: MAT FOR MARA-MATNR NO-EXTENSION,
MEINS FOR MARA-MEINS NO INTERVALS.

Al definir un valor por defecto para el parmetro se utiliza la instruccin


DEFAULT.
Ejemplo:
SELECT-OPTIONS: MAT FOR MARA-MATNR DEFAULT 00001
TO 0002
SIGN I
OPTION BT.

La instruccin LOWER CASE permite que se introduzcan letras minsculas


en el parmetro.
Ejemplo:
SELECT-OPTIONS: nombre for zusuario-nombre LOWER CASE.

Xioma Consulting - ABAP WORKSHOP"

32

Cuando sea necesario asignar un objeto de ayuda al parmetro se ha de


utilizar la instruccin MATCH CODE OBJECT. Si existiera una ayuda de bsqueda
ya asignada a la referencia, sta ser ignorada.
Ejemplo:
SELECT-OPTIONS: MAT FOR MARA-MATNR
MATCH CODE OBJECT ZHLP_MATERIAL.

Controles de Seleccin de Pantalla


Utilizando el comando SELECTION-SCREEN es posible brindar un formato
a la pantalla de seleccin en un reporte.

Recuadros y Ttulos
Es posible crear recuadros que encapsulen los parmetros de seleccin y
textos.
Sintaxis:

SELECTION-SCREEN BEGIN OF BLOCK bloque


<WITH FRAME> <TITLE ttulo>
<NO INTERVALS>.
<Parmetros>
SELECTION-SCREEN END OF BLOCK bloque.

Ejemplo:
Report Zejemplo.

*Ejemplo 1
SELECTION-SCREEN BEGIN OF BLOCK EJE_1
WITH FRAME
TITLE EJE_1 NO INTERVALS.
SELECT-OPTIONS: S_FECHA FOR SY-DATUM.
PARAMETERS: P_PARA(20).
SELECTION-SCREEN END OF BLOCK EJE_1.

Xioma Consulting - ABAP WORKSHOP"

33

*Ejemplo 2
SELECTION-SCREEN BEGIN OF BLOCK EJE_2
WITH FRAME
TITLE EJE_2.
SELECT-OPTIONS: S_FECHA2 FOR SY-DATUM.
PARAMETERS: P_PARA2(20).
SELECTION-SCREEN END OF BLOCK EJE_2.
*Ejemplo 3
SELECTION-SCREEN BEGIN OF BLOCK EJE_3.
SELECT-OPTIONS: S_FECHA3 FOR SY-DATUM.
PARAMETERS: P_PARA3(20).
SELECTION-SCREEN END OF BLOCK EJE_3.

INITIALIZATION.
MOVE EJE 1 TO EJE_1.
MOVE EJE 2 TO EJE_2.

El recuadro se genera alrededor del cdigo incluido en el mbito del


SELECTION-SCREEN al utilizar la adicin WITH FRAME. En combinacin con el
WITH FRAME se puede utilizar la adicin TITLE para agregar un ttulo al recuadro,
pero ste no puede superar los 8 caracteres. La adicin NO INTERVALS hace que el
SELECT-OPTIONS aparezca dentro del recuadro como un campo nico.

Xioma Consulting - ABAP WORKSHOP"

34

Existen dos limitantes para ste comando. La primera es que solamente es posible
anidar 5 bloques en profundidad y la segunda es que la adicin NO INTERVALS se
hereda a los bloques anidados solo si la adicin WITH FRAME esta presente.

Agrupacin de temes
Utilizando el SELECTION-SCREEN es posible agrupar parmetros o textos
en una misma lnea, para ello se utiliza la adicin BEGIN OF LINE y END OF
LINE.
Sintaxis:
SELECTION-SCREEN BEGIN OF LINE.
<parmetros / texto>
SELECTION-SCREEN END OF LINE.

Ejemplos:
REPORT EJEMPLO2.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: PARAM1(8),
PARAM2(8),
PARAM3(8).
SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP"

35

REPORT EJEMPLO2.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN COMMENT (15) W_NOMBRE.
SELECTION-SCREEN ULINE (10).
SELECTION-SCREEN PUSHBUTTON (10) W_BOTON
USER-COMMAND UCOM.
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
W_NOMBRE = Comentario.
W_BOTON = Botn.

Es posible incluir parmetros, botones, comentarios o bloques subrayados


como campos de entrada en el mbito del BEGIN OF LINE y END OF LINE. El
SELECT-OPTIONS no es permitido dado que la naturaleza de ste es crear mltiples
objetos en una sola lnea (la cota inferior y la cota superior).

Posicionamiento de temes
Dentro del conjunto de instrucciones posibles para la adicin BEGIN OF
LINE se encuentra la opcin POSITION. sta opcin se utiliza para definir la
posicin en la lnea definida por el BEGIN OF LINE.
Sintaxis:
SELECTION-SCREEN POSITION <posicin>.

Ejemplo:
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: PARAM1(8).

Xioma Consulting - ABAP WORKSHOP"

36

SELECTION-SCREEN POSITION 20.


PARAMETERS: PARAM2(8).
SELECTION-SCREEN POSITION 30.
PARAMETERS: PARAM3(8).
SELECTION-SCREEN END OF LINE.

Subrayado
El subrayado puede ser generado en las pantallas de seleccin as como en
los reportes ABAP. Sin embargo difieren en su sintaxis.

Sintaxis:
SELECTION-SCREEN UNLINE <formato>

Ejemplos:
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN ULINE (10).
SELECTION-SCREEN END OF LINE.

El formato puede tener la forma POS(TAM) o (TAM).


SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN ULINE 11(3).
PARAMETERS: P_PARAM2(10).
SELECTION-SCREEN ULINE 26(3).
PARAMETERS: P_PARAM3(10).
SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP"

37

Comentarios
En el SELECTION-SCREEN tambin es posible generar comentarios.
Siempre que se utilice el comando COMMENT.
Sintaxis:
SELECTION-SCREEN COMMENT
FOR
MODIF ID
VISIBLE LENGHT

<formato> <nombre>
FIELD <campo>
<id de modificador>
<lenght>.

Ejemplo:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (15) W_NOMBRE.
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
W_NOMBRE = Comentario.

Xioma Consulting - ABAP WORKSHOP"

38

Al igual que con el comando ULINE, es necesario que exista un campo de


entrada definido de lo contrario la pantalla de seleccin no ser generada. Si se
incluye el parmetro FOR FIELD, entonces el comentario queda oficialmente atado
a un campo de entrada.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (15) W_NOMBRE
FOR FIELD P_PARAM1.
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
W_NOMBRE = Comentario.

Botones
Los botones son utilizados para ejecutar una funcin del usuario dentro del
cdigo para interactuar dinmicamente con el usuario.
Sintaxis:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON fmt name
USER-COMMAND ucom.
SELECTION-SCREEN END OF LINE.

Ejemplo:
TABLES: SSCRFIELDS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (10)
W_BUTTON USER-COMMAND UCOM.
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
W_BUTTON = 'Botn'.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'UCOM'.
MESSAGE S333(S1) WITH 'Se ha oprimido el botn'.
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

39

Puede notarse en el ejemplo que el botn puede existir por si mismo dado
que es un campo de entrada. Cuando se hace click sobre el botn, el campo del
sistema SSRFIELDS-UCOMM obtiene el valor del valor que se le ha asignado al
botn en su definicin. Entonces se puede hacer una evaluacin de este campo en el
evento SELECTION-SCREEN para poder determinar si un ste fue o no oprimido y
ejecutar el cdigo que corresponde.

Botones en la Barra de Herramientas


Muchos de los reportes estndar de SAP poseen botones en la barra de
herramientas junto al botn de ejecucin
. Este tipo de botn tambin puede ser
utilizado en el momento que se genera la pantalla de seleccin, y se pueden crear en
sta hasta cinco botones en el nivel de la barra de herramientas.

Sintaxis:
SELECTION-SCREEN FUNCTION KEY <nmero>.

El parmetro nmero puede tener valores de 1 a 5.


Ejemplo:
TABLES: SSCRFIELDS.
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON
USER-COMMAND UCOM.
SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP"

40

SELECTION-SCREEN SKIP 9.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2
USER-COMMAND UCOW.
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
MOVE Botn de Aplicacin to SSCRFIELDS-FUNCTXT_01.
W_BUTTON = Botn 1.
W_BUTTO2 = Botn 2.

Al ejecutar el programa, el campo SSCRFIELDS-FUNCTXT_01se asocia al


botn 1 de la barra de herramientas en el evento de inicializacin. Este valor es
entonces desplegado en el botn en tiempo de ejecucin. Se puede asociar el campo
FUNCTXT_02 al botn dos, y as sucesivamente hasta el botn cinco.
Algunas variables del sistema son inicializadas cuando se utiliza este
comando. El sistema inicializa el campo SSCRFIELDS-UCOMM a FC01 para la
tecla de funcin 1, FC02 para la tecla de funcin 2 y as sucesivamente.
La variable toma el valor en el momento de realizar el click sobre el botn y
puede ser evaluado en el evento AT SELECTION-SCREEN.
Para asignar texto al botn que se esta creando, es necesario asegurarse de
asignar un texto al campo SSCRFIELDS-FUNCTXT_01 para la tecla de funcin 1,
para el campo SSCRFIELDS-FUNCTXT_02 para la tecla de funcin 2, y as
sucesivamente. El momento para realizar estas asignaciones es en el evento
INITIALIZATION.

Xioma Consulting - ABAP WORKSHOP"

41

Lneas en Blanco
Las lneas en blanco permiten dejar espacios en la pantalla de seleccin para
facilitar la lectura de sta. Para dejar una lnea en blanco se utiliza el comando
SKIP de la misma manera que se hace en un reporte ABAP.
Sintaxis:
SELECTION-SCREEN SKIP <nmero de lneas>.

El nmero de lneas en blanco puede ser de 1 a 9, en caso de ser


solamente 1 se puede omitir el nmero.

Ejemplo:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (10)
W_BUTTON USER-COMMAND UCOM.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 9.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2
USER-COMMAND UCOW.
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
W_BUTTON = 'Botn 1'.
W_BUTTO2 = 'Botn 2'.

Xioma Consulting - ABAP WORKSHOP"

42

Ventanas de Seleccin
Es posible definir ventanas de seleccin que pueden ser llamadas desde
programas de dilogo.
Sintaxis:
SELECTION-SCREEN BEGIN OF

SCREEN <DYNPRO>
TITLE <ttulo>
AS WINDOW.

.
.
.
SELECTION-SCREEN END OF SCREEN <DYNPRO>.

Ejemplos:
SELECTION-SCREEN BEGIN OF SCREEN 1001 TITLE title
AS WINDOW.
parameters: nombre(10).
select-options: centro for t001-waers.
SELECTION-SCREEN END OF SCREEN 1001.
.
.
.
CALL SELECTION-SCREEN 1001 STARTING AT 5 5

Xioma Consulting - ABAP WORKSHOP"

43

VARI AB LES DE AMB I EN TE (S Y)


SY es una estructura que contiene las variables de ambiente que se modifican en tiempo de
ejecucin por el sistema mientras se ejecuta un programa. No es necesario definir la estructura y
sta estar disponible desde cualquier parte de un programa.

El siguiente cuadro describe los campos que pueden resultar de uso ms frecuente:

CDIGO

DESCRIPCIN

BATCH

Indicador de modo Batch X indica modo de fondo activo.

DATUM

Fecha del Sistema

DYNNR

Nmero de la pantalla actual

INDEX

Indica la iteracin del LOOP

MSGNO

Nmero de Mensaje

MSGTY

Tipo de Mensaje (E,I,W)

MSGV1

Lnea de Mensaje 1

MSGV2

Lnea de Mensaje 2

MSGV3

Lnea de Mensaje 3

MSGV4

Lnea de Mensaje 4

PAGNO

Nmero de Pgina

REPID

Nombre del programa ABAP

SUBRC

Valor de retorno de una sentencia ABAP

TABIX

Lnea actual en la tabla interna

TCODE

Cdigo de la Transaccin

TFILL

Total de entradas en la tabla interna

UZEIT

Hora

TITLE

Ttulo del programa

UCOMM

Funcin ejecutada

UNAME

ID del usuario

LISEL

Valor de la lnea seleccionada

Xioma Consulting - ABAP WORKSHOP"

44

Ejemplo:

Select single * from T001.


IF SY-SUBRC EQ 0.
WRITE: Existen valores en la tabla T001.
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

45

OP E RAD ORES ARI TM TICOS


Existen varias operaciones en el estndar, muchas de stas se pueden conseguir bajo
la clusula COMPUTE. Sin embargo en el presente documento solamente se nombraran los
operadores aritmticos de uso ms frecuente.

La suma
Para realizar una suma se utiliza el smbolo + o la instruccin ADD. Sin
embargo se recomienda utilizar la primera forma del ejemplo por ser ms eficiente.
Ejemplo:
A = A + 1.
ADD 1 to A.

La Resta
El smbolo - indica la operacin de sustraccin, as mismo es posible la
utilizacin de la instruccin SUBSTRACT. Es ms eficiente la utilizacin del
smbolo -.
Ejemplo:
A = A 1.
SUBSTRACT 1 TO A.

La Multiplicacin
La Multiplicacin utiliza el smbolo * o en su defecto puede utilizarse la
instruccin MULTIPLY, siendo esta ltima la menos eficiente.
Ejemplo:
A = A * 2.
MULTIPLY A BY 2.

Xioma Consulting - ABAP WORKSHOP"

46

La Divisin
Para la divisin se utiliza el smbolo / o al igual que en los otros casos
existe una instruccin equivalente en lenguaje natural llamada DIVIDE siendo esta
menos eficiente.
Ejemplo:
A = A / 2.
DIVIDE A BY 2.

El Exponente
Para elevar un valor a una potencia n se utiliza dos veces el smbolo *
quedando de la siguiente manera: **.
Ejemplo:
A = A ** 2.

El Residuo4
Para obtener el residuo de la divisin se utiliza el operador MOD.
Ejemplo:
B = A MOD 3.

El cociente5
Para obtener el cociente de la divisin se utiliza el operador DIV.
Ejemplo:
B = A DIV 3.

El residuo de la divisin de 5 entre 3 es 2.

El cociente de la divisin de 5 entre 3 es 1.

Xioma Consulting - ABAP WORKSHOP"

47

IN S T RU CCIO NES DE D ECIS I N


Las instrucciones de decisin evalan una expresin y en base al valor de verdad que tenga
dicha expresin se ejecuta el cdigo que corresponda.

OPERADORES LGICOS o BOOLEANOS


Los operadores lgicos sirven para definir relaciones entre expresiones generando de
esta manera nuevos valores de verdad. En la lgica Booleana solamente existen dos valores:
VERDADERO o FALSO. Los operadores que existen en ABAP son los siguientes: AND,
OR y NOT. Estos operadores respetan las reglas de la lgica Booleana.

OR

AND

V A L O R V A L O R R E S U LTADO
1
2

VALOR VALOR
1
2

R E S U L-

Verdadero

Verdadero

Verdadero

Verdadero

Verdadero

Verdadero

Verdadero

Falso

Falso

Verdadero

Falso

Verdadero

Falso

Verdadero

Falso

Falso

Verdadero

Verdadero

Falso

Falso

Falso

Falso

Falso

Falso

TADO

NOT
VALOR

R E S U LTA D O

Verdadero

Falso

Falso

Verdadero

Es posible agrupar las expresiones encerrndolas entre parntesis. Los valores y


campos deben separarse utilizando espacios en blanco.
Ejemplo:
Incorrecto:
f1 EQ f2 AND (f3 EQ f4).

Xioma Consulting - ABAP WORKSHOP"

48

Correcto:
f1 EQ f2 AND ( f3 EQ f4 ).

El NOT toma prioridad sobre el operador AND, y el operador AND sobre


el operador OR:
NOT f1 EQ f2 OR f3 EQ f4 AND f5 EQ f6

Esto corresponde a
( NOT ( f1 EQ f2 ) ) OR ( f3 EQ f4 AND f5 EQ f6 )

OPERADORES RELACIONALES
Los operadores relacionales sirven para determinar el valor de verdad entre dos
operndos. En ABAP existen los siguientes:

OPERADOR

DESCRIPCIN

=,EQ

Igual que

<>, NE

Diferente que

>, GT

Mayor que

<, LT

Menor que

>=, GE

Mayor o igual que

<+, LE

Menor o igual que

BETWEEN

Entre

Es recomendable la utilizacin de los mnemnicos dado que puede


resultar menos confusa durante la interpretacin del cdigo.

Xioma Consulting - ABAP WORKSHOP"

49

Adems existe una serie de operadores relacionales que estn orientados a la


evaluacin de cadenas de caracteres.

OPERADOR DESCRIPCIN
CO

Contains Only: Es verdadero, si operando1 slo contiene caracteres


del operando2. Maysculas, minsculas y espacios en blanco son
tomados en cuenta en ambos operandos. Si el operando2 es inicial,
entonces la expresin lgica es falsa, a no ser que operando1 sea
inicial tambin, en cuyo caso la expresin lgica es siempre
verdadera. Si el resultado de la comparacin es negativo, sy-fdpos
contiene el offset del primer carcter en el operando1, que no est
contenido en el operando2. Si el resultado de la comparacin es
positivo, sy-fdpos contiene la longitud de operando1.

CN

Contains Not Only: Es verdadero si una expresin lgica con CO


(Contains Only) es falsa, es decir si el operando1 no solo contiene
caracteres de operando2, sino tambin otros caracteres no incluidos
en el operando2. Sy-fdpos es puesto de la misma manera como con
CO. Si la comparacin es verdadera, sy-fdpos contiene el offset del
primer carcter en el operando1 que no est contenido en el
operando2. Si la comparacin es falsa, sy-fdpos contiene la longitud
de operando1.

CA

Contains Any: Verdadero, si operando1 contiene al menos un


carcter del operando2. Maysculas, minsculas y espacios en
blanco son tomados en cuenta para ambos operandos. Si el
operando1 o operando2 son iniciales, la expresin lgica es siempre
falsa. Si el resultado de la comparacin es positivo, sy-fdpos contiene
el offset del primer carcter en el operando1 que tambin est
contenido en el operando2. Si el resultado de la comparacin es
negativo, sy-fdpos contiene la longitud del operando1.

NA

Contains Not Any: Es verdadero si la expresin lgica utilizada con


CA es falsa, es decir, si el operando1 no contiene ningn carcter del
operando2. Si el resultado de la comparacin es negativo, sy-fdpos
contiene el offset del primer carcter en el operando1 que tambin
est contenido en el operando2. Si el resultado de la comparacin es
verdadero, sy-fdpos contiene la longitud del operando1.

Xioma Consulting - ABAP WORKSHOP"

50

OPERADOR DESCRIPCIN
CS

Contains String: Es verdadero si el valor del operando2 est


contenido en el operando1. Diferenciacin entre maysculas y
minsculas o espacios en blanco no son tomados en cuenta. Si el
operando1 es inicial (contiene caracteres slo en blanco), la
expresin lgica es falsa, a no ser que el operando2 sea tambin
inicial. En este caso la expresin lgica es siempre verdadera. Si el
resultado de la comparacin es verdadero, sy-fdpos contiene el offset
del operando2 en el operando1. Si el resultado de la comparacin es
negativo, sy-fdpos contiene la longitud del operando1.

NS

Contains No String: Es verdadero si la expresin lgica utilizada


con CS es falsa, es decir, si el operando1 no contiene el valor del
operando2. Si el resultado de la comparacin es negativo, sy-fdpos
contiene el offset del operando2. Si la comparacin es verdadera, syfdpos contiene la longitud del operando1.

CP

Contains Pattern: Es verdadero, si el contenido del operando1


encaja con el patrn en el operando2. Los caracteres especiales
pueden ser usados para formar el patrn del operando, donde "*"
representa cualquier cadena de caracteres, y "+" representa cualquier
carcter. Diferenciaciones entre maysculas y minsculas no son
tomadas en cuenta. Si la comparacin es verdadera, sy-fdpos
contiene el offset del operando2 en el operando1, por lo que
caracteres especiales "*" en el operando2 son ignorados si el
operando2 tambin contiene otros caracteres. Si la comparacin es
falsa, sy-fdpos contiene la longitud del operando1.
Se puede seleccionar caracteres en el operando2 para una
comparacin directa aadiendo el smbolo "#" antes de los caracteres
requeridos. Para estos caracteres, la diferencia entre maysculas y
minsculas es tomada en cuenta.

NP

No Pattern: Es verdadero, si una expresin lgica con CP es falsa,


es decir si el operando1 no encaja en el patrn del operando2. Si la
comparacin es falsa, sy-fdpos contiene el offset del operando2 en el
operando1. caracteres especiales "*" en el operando2 son ignorados
si el operando2 tambin contiene otros caracteres.
Si la comparacin es verdadera, sy-fdpos contiene la longitud
del operando1.

Xioma Consulting - ABAP WORKSHOP"

51

IF
IF evala una expresin lgica. En caso que el valor de la expresin sea verdadera,
ejecuta el cdigo que contiene su bloque, de lo contrario continua con el cdigo siguiente.
El bloque debe cerrarse con la instruccin ENDIF.
Sintaxis:
IF <expresin>.
<Cdigo>.
ENDIF.

Ejemplos:
IF A GT 10.
WRITE:/ A es mayor que 10.
ENDIF. Comparacin de 10
IF A GT 10.
IF A LT 20.
WRITE:/ A es mayor que 10 y menor que 20.
ENDIF. MENOR QUE 20
ENDIF. MAYOR QUE 10
IF A BETWEEN 10 AND 20.
WRITE:/ A es mayor que 10 y menor que 20.
ENDIF. Entre 10 y 20
**Ejemplo de CO - Contains Only
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'BD '.
str2 = 'ABCD '.
IF str1 CO str2.
resultado = verdadero
SY-FDPOS = 3
ENDIF.
str1 = 'BD '.
str2 = 'ABCDE'.
IF str1 CO str2.

Xioma Consulting - ABAP WORKSHOP"

52

ENDIF.

resultado = falso
SY-FDPOS = 2

**Ejemplo de CN - Contains not only


DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABC12'.
str2 = 'ABCD '.
IF str1 CN str2.
resultado = verdadero
SY-FDPOS = 3
ENDIF.
str1 = 'ABABC'.
str2 = 'ABCD '.
IF str1 CN str2.
...
resultado = falso
SY-FDPOS = 5
ENDIF.
**Ejemplo de CA - Contains Any
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABcde'.
str2 = 'Bd '.
IF str1 CA str2.
resultado = true
SY-FDPOS = 1
ENDIF.
str1 = 'ABcde'.
str2 ='bD '.
IF str1 CA str2.
resultado = falso
SY-FDPOS = 5
ENDIF.
**Ejemplo de Contains Not Any
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABAB '.
str2 = 'AB '.
IF str1 NA str2.
resultado = falso
SY-FDPOS = 0
ENDIF.
str1 = 'ababa'.
str2 = 'AB '.
IF str1 NA str2.

Xioma Consulting - ABAP WORKSHOP"

53

ENDIF.

resultado = verdadero
SY-FDPOS = 5

**Ejemplo de CS - Contains String


DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABcde'.
str2 = 'bC '.
IF str1 CS str2.
resultado = verdadero
SY-FDPOS = 1
ENDIF.
str1 = 'ABcde'.
str2 = 'ce '.
IF str1 CS str2.
resultado = falso
SY-FDPOS = 5
ENDIF.
**Ejemplo de NS - Constains no String
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABcde'.
str2 = 'bC '.
IF str1 NS str2.
resultado = falso
SY-FDPOS = 1
ENDIF.
str1 = 'ABcde'.
str2 = 'ce '.
IF str1 NS str2.
resultado = verdadero
SY-FDPOS = 5
ENDIF.
**Ejemplo de CP - Contains Pattern
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABCDEFGH'.
str2 = '*C*F+H'.
IF str1 CP str2.
La expresin lgica evaluada con CP es verdadera
por lo que ejecutar al cdigo dentro del IF
ENDIF.
str1 = ' ABcde'.
str2 = ' *b*'.
IF str1 CP str2.
resultado = verdadero
SY-FDPOS = 1
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

54

str1 = ' ABcde'.


str2 = ' *#b*'.
IF str1 CP str2.
resultado = falso
SY-FDPOS = 5
ENDIF.
**Ejemplo de NP - NO Pattern
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABCDEFGH'.
str2 = '*C*F+H'.
IF str1 NP str2.
str1 coincide con el patron de str2, por lo que
el resultado de la evaluacion con NP es falso
ENDIF.
str1 = 'ABDEFCGH'.
str2 = '*C*F+H'.
IF str1 NP str2.
str1 no coincide con el patron de str2, por lo que
el resultado de la evaluacion con NP es verdadero
ENDIF.
str1 = ' ABcde'.
str2 = ' *b*'.
IF str1 NP str2.
resultado = falso
SY-FDPOS = 1
ENDIF.
str1 = ' ABcde'.
str2 = ' *#b*'.
IF str1 NP str2.
resultado = verdadero
SY-FDPOS = 5
ENDIF.

ELSE (ELSEIF)
Las sentencias que se coloquen despus del ELSE, sern ejecutadas solo si la
expresin en la sentencia IF no se cumple. Si se desea hacer otra verificacin si la primera
no se cumple, se recomienda utilizar ELSEIF. Se puede colocar tantos ELSEIF como se
necesiten.
Sintaxis:
IF <expresin>.
<Cdigo>.
ELSE.
<Cdigo>.
ENDIF.
IF <expresin>.

Xioma Consulting - ABAP WORKSHOP"

55

<Cdigo>.
ELSEIF.
<Cdigo>.
ELSEIF.
<Cdigo>.
ELSE.
<Cdigo>.
ENDIF.

Ejemplo:
IF A LT 20.

ENDIF.

WRITE:/ A es menor que 20.


ELSEIF A GT 50.
WRITE:/ A es mayor que 50.
ELSE.
WRITE:/ A es mayor o igual a 20 y menor que 50.

CASE
Dependiendo del valor del campo, se ejecutarn diferentes bloques de sentencias de
ejecucin. Con la instruccin WHEN especificas las condiciones que se quieren evaluar
sobre dicho campo.
Sintaxis:
CASE f.
WHEN f11 OR f12 ... OR f1n.
...
WHEN f21 OR f22 ... OR f2m.
...
WHEN OTHERS.
. . .
ENDCASE.

Ejemplo:
CASE A.
WHEN 1 OR 2.
WRITE:/ A es igual a 1 o a 2.
WHEN 3.
WRITE:/ A es igual a 3.
WHEN OTHERS.
WRITE:/ A tiene un valor diferente a 1,2 o 3.
ENDCASE.

CHECK
Verifica que la expresin lgica subsecuente es verdadera. Si es as, pasa a la
siguiente sentencia, pero si no, pasa a la siguiente iteracin al encontrarse en un DO,

Xioma Consulting - ABAP WORKSHOP"

56

WHILE, LOOP o SELECT, o sale de la rutina, si se encuentra en un FORM, FUNCTION o


MODULE.
Sintaxis:
CHECK <expresin>.

Ejemplo:
DO.
Contador = contador + 1.
CHECK contador LT 10.

ENDDO.

En el ejemplo, el CHECK evala la condicin y no permite que se ejecute el resto


del cdigo sino hasta que el contador sea mayor que 10.

Xioma Consulting - ABAP WORKSHOP"

57

I N S TRU CCI ONES D E ITERACIN


A continuacin instrucciones que permiten ejecutar un bloque de sentencias de forma
repetitiva, ya sea por cantidad de veces determinada o hasta que se cumpla cierta expresin lgica.

DO
Repite las sentencias encerradas entre el DO y el ENDDO, de forma infinita hasta
que es detenido por un EXIT, STOP o REJECT. La opcin VARYING le permite hacer
iteraciones entre un valor y otro.
Sintaxis:
DO N TIMES [VARYING f FROM f1 NEXT f2].

Ejemplo:
DO.
WRITE: / 'SY-INDEX - Begin:', (3) SY-INDEX.
IF SY-INDEX = 10.
EXIT.
ENDIF.
WRITE: 'End:', (3) SY-INDEX.
ENDDO.
DATA COUNT TYPE I.
DO 10 TIMES.
ADD SY-INDEX TO COUNT.
ENDDO.

WHILE
Repite las sentencias encerradas entre el WHILE y el ENDWHILE, mientras se
cumpla la expresin lgica asociada.
Sintaxis:
WHILE <expresin>.
<Cdigo>.
ENDWHILE.

Ejemplo:
SEARCH_ME = 23.
WHILE NUMBER <> SEARCH_ME.
ADD 1 TO NUMBER.
WRITE: / NUMBER.
ENDWHILE.

Xioma Consulting - ABAP WORKSHOP"

58

EXIT
Permite salir de la iteracin, si se encuentra en un DO, WHILE, LOOP o SELECT, o
sale de la rutina, si se encuentra en un FORM, FUNCTION y MODULE.

Sintaxis:
EXIT.

Ejemplo:
DO.
Contador = contador + 1.
IF contador GT 9.
EXIT.
ENDIF.

ENDDO.

CONTINUE
Salta de inmediato a la siguiente iteracin.
Sintaxis:
CONTINUE.

Ejemplo:
DO.
Contador = contador + 1.
IF contador LT 9.
CONTINUE.
ENDIF.
ENDDO

STOP
Esta instruccin solo puede ser utilizada en programas ejecutables y en los siguientes
eventos: AT SELECTION-SCREEN (sin ninguna adicion), START-OF-SELECTION y GET.
STOP sale de inmediato de estos eventos y ejecuta el evento END-OF-SELECTION.
Sintaxis:
STOP.

Xioma Consulting - ABAP WORKSHOP"

59

D E S P LI EG U E E N PANTALLA
Existen dos maneras de enviar la informacin en SAP hacia la pantalla y/o impresora. La ms
elaborada es la elaboracin de formularios (va Smartforms o SAPScript) y la otra por medio de
reportes que se construyen utilizando nicamente instrucciones de ABAP. Las ms utilizadas para
generar estos reportes se describen a continuacin.

WRITE
Despliega un valor en la pantalla o en su defecto puede utilizarse para trasladar un
valor entre variables (incluso de diferente tipo).
Sintaxis:
WRITE <posicin> <(tamao)> <variable/constante> [UNDER <objeto>]
WRITE <variable/constante> TO <variable2>
[CENTERED | LEFT-JUSTIFIED | RIGHT-JUSTIFIED].

Ejemplos:
Write Hola Mundo!.
WRITE: /(60) 'Izquierda'
LEFT-JUSTIFIED,
/(60) 'Centro' CENTERED,
/(60) 'Derecha' RIGHT-JUSTIFIED.
DATA: MATNR TYPE mara-matnr,
MEINS TYPE mara-meins.
WRITE: 10 'Material', 40 'UM'.
ULINE.
SELECT MATNR MEINS
FROM MARA
INTO (matnr,meins).
WRITE: / matnr UNDER 'Material',
meins UNDER 'UM'.
ENDSELECT.

FORMAT
Se utiliza para modificar el formato de salida de los textos en el reporte controlando
el color del fondo del texto y la intensidad del mismo.
Sintaxis:
FORMAT <adicin> <ON/OFF>.

Xioma Consulting - ABAP WORKSHOP"

60

Las adiciones ms comunes son:


1. COLOR: Especfica el color de fondo para un texto
2. INTENSIFIED: Cambia la intensidad del color
3. RESET: Restaura los valores iniciales

Ejemplo:
FORMAT INTENSIFIED ON COLOR = 5.
WRITE 'Marca el texto con verde oscuro'.
FORMAT INTENSIFIED OFF COLOR = 5.
WRITE 'Marca el texto con verde claro'.

ULINE
Esta sentencia imprime una lnea continua por todo el ancho de la salida del reporte.
Sintaxis:
.

Si se desea imprimir una lnea continua pero de un tamao determinado, se puede


utilizar la variable del sistema
. Esta variable contiene una lnea continua de 255
caracteres en tiempo de ejecucin.
Ejemplo:
WRITE: / SY-ULINE(80).

SKIP
Permite saltar n lneas en una salida de reporte. Si no se indica la cantidad de lneas,
solo saltar una lnea.
Sintaxis:
SKIP [N].

Ejemplo:
SKIP 5.

Xioma Consulting - ABAP WORKSHOP"

61

S TRI NG S
Un string es una cadena de caracteres que se almacenan en una variable vectorial donde la
primera posicin ser la cero. Se puede usar el tipo STRING para definir un string de longitud
indefinida, as como darle una longitud fija al definirlo como tipo C (char).
Ejemplo:
DATA:

Nombre TYPE STRING, String de longitud indefinida


Apellido(40) TYPE C, Cadena de 40 caracteres
Apellido2(40).
Cadena de 40 caracteres

Substrings
Para manipular el contenido de un string se utiliza el smbolo + para indicar el
desplazamiento en el string (de izquierda a derecha) y entre parntesis el tamao del
substring.
Ejemplo:
DATA: descripcin(40) value Mazanas, Peras y Uvas,
Fruta(7).
Fruta =
* Fruta
Fruta =
* Fruta

descripcin+0(7).
obtiene el valor Manzanas.
descripcin+9(5).
obtiene el valor Peras.

Es posible tambin utilizar el substring sin asignarlo a una variable.


IF descripcin+9(5) EQ Peras.
Descripcin+9(5) = Fresa.
ENDIF.

Si se desea incluir el smbolo en un string, este debe escribirse doble .

Concatenate
Permite concatenar cadenas de caracteres de distintas variables o textos.
Sintaxis
CONCATENATE f1 f2 f3 f4 fn INTO target.

Xioma Consulting - ABAP WORKSHOP"

62

Ejemplo:
DATA:

ONE(10)
TWO(3)
THREE(10)
NAME(20),
FIRST

VALUE ' John ',


VALUE 'F.',
VALUE ' Kennedy',
TYPE STRING.

CONCATENATE ONE TWO THREE INTO NAME.

El valor final de la variable NAME es: JohnF.Kennedy, si se desea


separar cada componente por un espacio, se debe agregar la opcin: SEPARATED
BY SPACE.
Ejemplo:
CONCATENATE ONE TWO THREE INTO NAME SEPARATED BY SPACE.

La opcin SPACE puede ser sustituido por cualquier cadena de caracteres o


una variable.

Condense
Permite desplazar toda la cadena de caracteres que se encuentre en una variable
hacia el lado izquierdo, eliminando todos los espacios que ese encuentren antes del primer
carcter.
Sintaxis
CONDENSE f1.

Ejemplo:
DATA NAME (30).
NAME(10)
= '
Xioma'.
NAME+10(10) = 'Consulting'.
NAME+20(10) = ' CA'.
CONDENSE NAME.
WRITE NAME.

El valor final de la variable NAME ser entonces Xioma Consulting CA.


S se quisieran eliminar todos los espacios en blanco contenidos en la
cadena de caracteres, se puede agregar la opcin:
Ejemplo:
CONDENSE NAME NO-GAPS.

Xioma Consulting - ABAP WORKSHOP"

63

Replace
Se utiliza REPLACE para reemplazar una ocurrencia dentro de una cadena de
caracteres. Una vez que la instruccin encuentra la primera ocurrencia, la reemplaza. En
ese momento finaliza la bsqueda. En la variable SY-SUBRC se retorna el valor 0 si el
reemplazo fue exitoso 4 en caso de que no lo fuera.
Sintaxis:
REPLACE <substring> WITH <ocurrencia> INTO <string>.

Ejemplo:
DATA FIELD(10).
MOVE 'ABCB' TO FIELD.
REPLACE 'B' WITH 'string' INTO field.

Al ejecutar, el valor de field es AstringCB.

STRLEN
Esta funcin calcula el tamao de un string y lo retorna a una variable.
Sintaxis:
STRLEN( <variable> ).

Ejemplo:
DATA: TAM TYPE I.
tam = STRLEN( nombre ).

SPLIT
Divide un string en varias secciones a partir de una ocurrencia. De tener exito retorna
SY-SUBRC igual a cero.
Sintaxis:
SPLIT <string> AT <ocurrencia>
INTO [<var1> <var2>...<varn> | TABLE <itab>].

Xioma Consulting - ABAP WORKSHOP"

64

Ejemplo:
DATA: str1
str2
str3
itab
text

TYPE
TYPE
TYPE
TYPE
TYPE

string,
string,
string,
TABLE OF string,
string.

text = `Ejemplo preparado por xioma Consulting `.


SPLIT text AT space INTO: str1 str2 str3,
TABLE itab.

Xioma Consulting - ABAP WORKSHOP"

65

OT RAS I N STRU CCI ON ES


CLEAR
Permite inicializar una variable con los valores iniciales.
Sintaxis:
CLEAR <variable>.

MOVE
Mueve el contenido de una variable a otra, sin modificar el contenido de la variable
original. No necesariamente la variable de destino es del mismo tipo que la variable de
origen.
Sintaxis:
MOVE <v_origen> TO <v_destino>.

Ejemplo:
DATA: A(2) value 'A1',
B(2),
C(1).
MOVE A TO B.
MOVE A+0(1) TO C.
Esto es equivalente a:
B = A.
C = A+0(1).

MESSAGE
Enva un mensaje al usuario debidamente clasificado en el repositorio de SAP que
aparece en la parte inferior de la ventana, contempla los tipos W (advertencia), E (error), S
(mensaje), A (Abortar transaccin), X(Salir con un mensaje de dump), I (informativo) .
Sintaxis:
MESSAGE ID <Clase>TYPE <tipo>NUMBER <nmero>WITH <param 1>
<param n>.

Ejemplo:
MESSAGE ID BC400TYPE I NUMBER 040 WITH wa_itab-campo1
wa_itab-campo2.

Xioma Consulting - ABAP WORKSHOP"

66

La administracin de las clases de mensajes se realizan a travs de la transaccin


SE91.

Despus de darle al botn Crear, se pasa a la siguiente pantalla

Xioma Consulting - ABAP WORKSHOP"

67

Se selecciona
transporte.

y se asigna el nuevo objeto su respectivo paquete y orden de

Seleccionando la pestaa Mensajes, se puede empezar a insertar los mensajes que se


desea utilizar. Cada mensaje puede contener parmetros que son indicados con el
smbolo &.
Los mensajes pueden ser traducidos, por ende siempre aparecen en el idioma
en que se haya ingresado el usuario.

SUBMIT
Ejecuta un programa tipo reporte desde otro programa.
Sintaxis:
SUBMIT <REPORT>
[VIA SELECTION-SCREEN ]
[AND RETURN ]
[WITH.Param1 valor1 WITH param2 valor2...]

Ejemplo:
SUBMIT REPORT01
VIA SELECTION-SCREEN.

Xioma Consulting - ABAP WORKSHOP"

68

P ROCED IM I ENT OS, F U N CI ONE S Y


MACROS
Los procedimientos son subprogramas que se utilizan para modulizar una aplicacin. El uso
de los mismos hace que los programas sean ms entendibles. En ABAP los procedimientos reciben
y retornan valores por medio de parmetros. Los procedimientos pueden definirse en cualquier
parte del cdigo ABAP.
Las funciones son similares a los procedimientos, pero se comportan como una caja
negra6. Su definicin es global en el sistema, por lo cual no es necesario definirlas en el programa.
Las funciones en ABAP se manipulan por medio de la transaccin SE377. Existen ya una cantidad
considerable de funciones estndar definidas en el sistema y que estn disponibles para el
desarrollador.
Un macro es un cdigo simple que se reemplaza en el cdigo principal en tiempo de
ejecucin. Puede recibir hasta 9 parmetros. No es recomendable que los macros posean un
cdigo extenso pues no es posible colocar break points ni debuggear el cdigo definido en ellos, por
lo que puede ser complicado determinar errores. SAP almacena los macros del estndar en la tabla
TRMAC. Es importante recordar que un macro puede contener otros macros en su cdigo ms no
puede invocarse a si mismo.

FORM
Se utiliza para indicar el inicio del procedimiento con sus parmetros de entrada y
salida. Estos parmetros pueden ser por valor (al utilizar VALUE) o por referencia. Una vez
que se define el procedimiento todas las definiciones que se hacen de constantes y variables
son locales. Esta instruccin debe finalizar con un END FORM.
Sintaxis:
FORM <procedimiento> [USING <variables de entrada> |
USING VALUE <variable de entrada>]
[CHANGING <variables de salida> |
CHANGING VALUE(variable de salida) ].
<Cdigo>.
ENDFORM.

Ejemplo:

Caja negra es un trmino que se utiliza para referirse a un sistema que recibe una entrada y retorna una salida,
pero del cual se desconoce su mecanismo interno.
7

La utilizacin de la SE37 no esta contemplada en este manual

Xioma Consulting - ABAP WORKSHOP"

69

FORM WELCOME.
WRITE / 'Hello world'.
ENDFORM.
FORM suma USING num1
num2
CHANGING resultado.
resultado = num1 + num2.
ENDFORM. "suma

Al utilizar el parmetro por valor en el CHANGING el parmetro original no cambia


sino hasta que el procedimiento terminar.
Cuando los parmetros que recibe el
procedimiento son por referencia, si se cambia el valor de los parmetros (tanto los del
USING como los del CHANGING) tambin cambian los valores de los parmetros
originales, aunque el procedimiento no haya finalizado.

PERFORM
Sirve para realizar la invocacin de un procedimiento.
Sintaxis:
PERFORM <procedimiento> USING <variables de entrada>
CHANGING <variables de salida>.

Ejemplo:
PERFORM suma USING 2
3
CHANGING total.

CALL
Este comando invoca a una funcin. Normalmente es ms sencillo utilizar la opcin
de PATRON en el editor ABAP (SE38) para seleccionar del pool de funciones la funcin
que se desea utilizar, y ste genera el CALL con los parmetros de entrada y salida.
Sintaxis:
CALL <funcin> <IMPORTING
<EXPORTING

param
param
param
param

1
n
1
n

= valor 1
= valor n>
= valor 1
= valor n>.

Ejemplo:
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT
= total
IMPORTING
OUTPUT
= salida.

Xioma Consulting - ABAP WORKSHOP"

70

Invocacin de una funcin


Para hacer la invocacin de una funcin lo haremos utilizando el botn de Patrn
. Esta opcin nos permite insertar en nuestro programa toda la estructura que deber
tener la sentencia CALL FUNCTION con cada uno de los parmetros requeridos.

Solamente se debe escribir el nombre de la funcin que deseamos invocar en nuestro


programa. En este caso utilizaremos la funcin creada anteriormente (ZF_FUNCION1).
CALL FUNCTION 'ZF_FUNCION1'
EXPORTING
I_MATNR
=
I_WERKS
=
I_LGORT
=
I_LGPLA
=
I_CHARG
=
* IMPORTING
*
E_VERME
=
CHANGING
ERROR
=
MESSAGE
=
* EXCEPTIONS
*
EXCEP1
= 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.

Una vez cargada la estructura en nuestro programa, se deben colocar, a la derecha del
igual = los valores que sern enviados a la funcin y las variables en las que se recibirn
los resultados. Los parmetros opcionales pueden ser omitidos comentando la lnea con un
asterisco (*).

Xioma Consulting - ABAP WORKSHOP"

71

DEFINE
Se utiliza DEFINE para definir un macro.
Sintaxis:
DEFINE <macro>
...
END-OF-DEFINITION.

Ejemplo:
DEFINE SUMA.
&1 = &2 + &3.
END-OF-DEFINITION.
...
DATA: A(2),
B(2),
C(2).
START-OF-SELECTION.
SUMA A B C.
*En la variable A queda la suma de B y C.

Xioma Consulting - ABAP WORKSHOP"

72

I NCLU D E S
Los programas includes se utilizan para modularizar los programas ABAP y crear
bloques de cdigo reutilizables. Estos programas no son ejecutables por si mismos y no
necesitan de ninguna sentencia de inicializacin.
Aunque es posible llamar a un include dentro de otro include, es importante recordar
que no se pueden hacer includes recursivos, esto es que no es posible que un include
se invoque asi mismo.

Para crear un programa tipo include se puede utilizar la transaccin SE38 o desde el
ABAP Workbench (SE80) . Se de indicar en el tipo que el programa es de include.

Los programas tipo include puede ser muy tiles cuando se desea crear librerias de
procedimientos, macros, definicin de datos, etc.
Sintaxis:
INCLUDE <programa tipo include>.

Ejemplo:
INCLUDE ZINC_EJEMPLO.

Xioma Consulting - ABAP WORKSHOP"

73

ES TRU CT U RAS DE DATOS


Las estructuras de datos son conjuntos de variables, quizs de tipos distintos,
relacionadas (conectadas) entre s de diversas formas y las operaciones definidas sobre esa
agrupacin. Ejemplos de estructuras de datos las podemos encontrar en muchos mbitos,
desde las matemticas (estructuras algebraicas: grupo, anillo o cuerpo) hasta el mundo de
los negocios (estructura de una empresa). Los elementos de una estructura de datos
dependen del lenguaje de programacin a travs de los tipos de datos que los definen. Sin
embargo, la estructura en s, que est definida por el tipo de relacin entre los elementos, no
depende del lenguaje de programacin empleado.
Las estructuras de datos se caracterizan por el tipo de los elementos de la estructura,
las relaciones definidas sobre los elementos y las operaciones permitidas sobre la estructura.
Operaciones tpicas sobre estructuras de datos suelen ser: acceder a los elementos (por la
posicin que ocupan o por la informacin que contienen), buscar elementos, insertar o
borrar elementos, modificar las relaciones entre los elementos, etc...
En ABAP los tres tipos de estructuras que son ms utilizados son: los registros, las
tablas internas (llamadas ITABS) y las tablas transparentes.

Registros
Un registro se puede definir como una variable subdividida en varios campos. Para acceder
a cada campo se utiliza el nombre del registro, el smbolo - y el nombre del campo.
Para definir el registro se utiliza la instruccin DATA con la opcin BEGIN OF.
Sintaxis:
DATA: BEGIN OF <nombre>,
<Campo 1> <[TYPE] [LIKE]> <Tipo>,

<Campo n> <[TYPE] [LIKE]> <Tipo>,


END OF <nombre>.

Ejemplo:

DATA: TipoCambio type P decimals 2 value 470.


DATA: BEGIN OF Camisa,
NrMaterial LIKE MARA-MATNR,
Color(2),
Talla(2),
Precio Type P decimals 2,
PrecioUSD type P decimals 2,
END OF Camisa.

Start-of-Selection.

Xioma Consulting - ABAP WORKSHOP"

74

Camisa-NrMaterial = 60001.
Camisa-color = 1. Color Blanco
Camisa-Talla = M.
Camisa-Precio = 4000.
Camisa-PrecioUSD = Camisa-Precio / TipoCambio.

MOVE-CORRESPONDING
La instruccin MOVE-CORRESPONDING se utiliza para mover informacin entre los
campos de estructuras que posean el mismo nombre. Aquellos campos en la estructura destino que
no coincidan con los definidos en la estructura origen son ignorados y no se modifican.
Sintaxis:
MOVE-CORRESPONDING <ESTRUCTURA ORIGEN> TO <ESTRUCTURA DESTINO>.

Ejemplo:
DATA: BEGIN OF origen,
Campo1(20),
Campo2(10),
Campo3 type i,
Campo4(3),
END OF origen.
DATA: BEGIN OF destino,
Campo9(10),
Campo3 type i,
Campo1(20),
Campo4(5),
Campo8(15),
END OF destino.
origen-campo1
origen-campo2
origen-campo3
origen-campo4

=
=
=
=

'Hola'.
'Mundo!'.
1701.
'NCC'.

destino-campo8 = 'NCC-74656'.
MOVE-CORRESPONDING origen TO destino.

Es importante considerar en el ejemplo, que el orden de los campos en la estructura no es


relevante, as como no lo es el tamao. Si el campo destino es de menor tamao que el origen, la
informacin ser truncada.

Xioma Consulting - ABAP WORKSHOP"

75

Si ambas estructuras poseen campos definidos exactamente igual, sin importar el


nombre de estos, es posible realizar la asignacin directamente de la siguiente
manera:

Tablas Internas
Las tablas internas se utilizan para almacenar los datos provenientes de la base de datos o de
informacin que ha sido generada en tiempo de ejecucin. Se puede definir dos tipos de tablas
internas:
Con Cabecera: La cabecera es un espacio de la tabla interna donde se almacena la
informacin del registro al que se esta apuntando en el cuerpo de la tabla. Se declara en
forma similar a un registro incluyendo la opcin OCCURS. Esta opcin especifica
cuantas lneas debe reservar el sistema para los bloques de la tabla interna, normalmente
se utiliza 0, sin embargo dependiendo del volumen de informacin, asignar un nmero
muy grande o uno muy pequeo puede tener una repercusin en el rendimiento del
programa.
Sintaxis:
DATA: BEGIN OF <nombre> OCCURS <n>,
<Campo 1> <[TYPE] [LIKE]> <Tipo>,

<Campo n> <[TYPE] [LIKE]> <Tipo>,


END OF <nombre>.

Ejemplo:
DATA: TipoCambio type P decimals 2 value 470.
DATA: BEGIN OF Camisa OCCURS 0,
NrMaterial LIKE MARA-MATNR,
Color(2),
Talla(2),
Precio Type P decimals 2,
PrecioUSD type P decimals 2,
END OF Camisa.

Start-of-Selection.
Camisa-NrMaterial = 60001.
Camisa-color = 1. Color Blanco
Camisa-Talla = M.
Camisa-Precio = 4000.
Camisa-PrecioUSD = Camisa-Precio / TipoCambio.
APPEND Camisa.

Xioma Consulting - ABAP WORKSHOP"

76

Otra manera de agregar la cabecera es utilizar la instruccin WITH HEADER LINE.


Sintaxis:
DATA: <ITAB> [LIKE | TYPE] <estructura> [OCCURS <n>]
WITH HEADER LINE.

Ejemplos:
DATA: ITAB LIKE MARA OCCURS 0 WITH HEADER LINE.
DATA: ITAB2 TYPE T_ITAB WITH HEADER LINE.

Sin Cabecera: Es un tipo de tabla interna que esta compuesto nicamente de cuerpo y
su definicin se hace con respecto a un tipo definido previamente o a una estructura ya
existente. Sin embargo es necesario definir un registro de cabecera para poder agregar o
leer registros de la tabla.
Sintaxis:
DATA: <itab> TYPE <tipo> OCCURS <n>.

Ejemplo:
TYPES: BEGIN OF PERSONA,
NOMBRE(20) TYPE C,
EDAD TYPE I,
END OF PERSONA.
DATA: C_Miembro type persona.
DATA: Miembro TYPE PERSONA OCCURS 0.
Start-of-selection.
C_Miembro-Nombre = Jose.
C_Miembro-Edad = 20.
Append C_miembro to Miembro.

El procesamiento de informacin en las tablas internas es mucho ms rpido que


en las tablas transparentes, por lo que suele ser ms eficiente cargar los datos de
la base de datos a estas estructuras que manipularlos directamente.
Las tablas internas pueden ser de 3 tipos: estndar (que son las que tratamos en este
manual), Sorted y Hashed. Estos tres tipos de tablas puede ser declarados de la siguiente manera:
TYPES: BEGIN OF S_ITAB,
Nombre(10) TYPE C,
Edad TYPE I,

Xioma Consulting - ABAP WORKSHOP"

77

END OF S_ITAB.
TYPES: T_ITAB1 TYPE STANDARD TABLE OF S_ITAB,
T_ITAB2 TYPE SORTED TABLE OF S_ITAB WITH KEY Nombre,
T_ITAB3 TYPE HASHED TABLE OF S_ITAB.
DATA:

ITAB1 TYPE T_ITAB1,


ITAB2 TYPE T_ITAB2,
ITAB3 TYPE T_ITAB3.

Existen varias instrucciones que se utilizan para la manipulacin de las tablas internas, a
continuacin se van a describir las ms comunes.

Refresh
Borra todo el contenido de la tabla interna.
Sintaxis:
REFRESH <ITAB>.

Es importante tomar en cuenta que la instruccin REFRESH no limpia la cabecera


de la tabla, nicamente el cuerpo de la misma. Para limpiar el contenido de la
cabecera de puede utilizar la instruccin CLEAR.

Append
Agrega un registro a una tabla interna con los valores que se encuentren en la
cabecera o en un registro que corresponda con la estructura de la tabla.
Sintaxis:
APPEND [<registro> TO] <itab>.

Ejemplo:
APPEND C_Miembro TO Personas.

Cuando las tablas internas son del tipo SORT o HASHED no es posible utilizar la
instruccin APPEND, en su lugar debe utilizarse la instruccin INSERT.

Delete
Esta instruccin borra un registro de la tabla interna.
Sintaxis:
DELETE [TABLE] <ITAB> [FROM wa] [WHERE <Cond>].

Xioma Consulting - ABAP WORKSHOP"

78

Ejemplos:
1. Registro actual de una tabla con cabecera:
DELETE Camisa.
2.

Registro de una tabla sin cabecera


DELETE TABLE Miembro

FROM Miembro.

3. Utilizando una condicin.


DELETE Camisa WHERE Talla EQ XL.

Modify
Se utiliza para actualizar los cambios realizados al registro de la cabecera en
la tabla interna.
Sintaxis:
MODIFY <ITAB>.

Collect
El COLLECT asume que todos los valores alfanumricos de izquierda a
derecha, hasta conseguir un valor numrico, son la llave de la tabla interna. Y
empieza a acumular los valores numricos que se encuentran a la derecha de la llave.
Si el registro no existe lo agrega a la tabla interna.
Sintaxis:
COLLECT <ITAB>.

Ejemplo:
DATA: BEGIN OF COMPANY OCCURS 0,
NAME(20) TYPE C,
SALES
TYPE I,
END OF COMPANY.
COMPANY-NAME = 'Duck'.
COMPANY-SALES = 10.
COLLECT COMPANY.
COMPANY-NAME = 'Tiger'.
COMPANY-SALES = 20.
COLLECT COMPANY.
COMPANY-NAME = 'Duck'.

Xioma Consulting - ABAP WORKSHOP"

79

COMPANY-SALES = 30.
COLLECT COMPANY.

Describe
La funcin de esta instruccin es obtener el nmero de registros que contiene
una tabla interna y almacenarlo en una variable.
Sintaxis:
DESCRIBE TABLE <ITAB> LINES <Variable>.

Ejemplo:
DESCRIBE TABLE camisa LINES cant_reg.

SORT
Se utiliza SORT para ordenar una tabla interna indicndole que campos debe
asumir como referencia para dicho ordenamiento.
Sintaxis:
SORT <ITAB> BY <campo1> <campo2> ... <campo n>
[DESCENDING | ASCENDING ].

Ejemplo:
SORT camisa.
*Aqu al no indicarle criterios la ordena por todos los
*campos exceptuando los de tipo: I, F y P de forma ascendente.
SORT camisa BY talla color.
*Ordena TABLA por los campos Talla y color de forma
*descendente.
SORT camisa BY talla ASCENDING color DESCENDING.
*Ordena TABLA por los campos Talla (Ascendentemente) y Color
*(Descendentemente).

Cuando dos tablas internas comparten la misma estructura es posible asignar el


contenido de una a otra de la siguiente manera:
ITAB1[] = ITAB2[]. cuando ambas tienen cabecera
o
ITAB1 = ITAB2. cuando son tablas internas sin cabecera

Xioma Consulting - ABAP WORKSHOP"

80

LOOP
Esta instruccin permite recorrer una tabla interna para acceder a todo su
contenido o puede ser utilizado con ciertas condiciones para obtener informacin
especfica.
Sintaxis:
LOOP AT <ITAB> [INTO <variable>] [WHERE <condiciones>] [FROM
<ndice 1> TO <ndice 2>].
.
<Cdigo>.
.
ENDLOOP.

Ejemplos:
LOOP AT ITAB INTO WA_ITAB.
WRITE WA_ITAB-CAMPO1.
ENDLOOP.
LOOP AT ITAB INTO WA_ITAB
WHERE CAMPO1 GT 1000.
WRITE WA_ITAB-CAMPO1.
ENDLOOP.
LOOP AT ITAB INTO WA_ITAB
FROM 1 TO 100.
WRITE WA_ITAB-CAMPO1.
ENDLOOP.

AT
El AT dentro de un LOOP permite evaluar ciertas circunstancias durante la
iteracin como lo son la primera iteracin, cuando cambia un valor en un campo de
la tabla interna, cuando se encuentra en la ltima ocurrencia de un valor en la tabla
interna o cuando se encuentra en la ltima iteracin.
Sintaxis:
AT {FIRST | NEW | END OF | LAST ].
<cdigo>.
ENDAT.

Ejemplo:
LOOP AT itab.
AT FIRST.
WRITE: Primera iteracin.
ENDAT.
ENDLOOP.

Xioma Consulting - ABAP WORKSHOP"

81

Al utilizar el AT es importante considerar que la cabecera de la tabla interna queda


con todos sus campos con el valor *. Por lo que es necesario crear un rea de
trabajo igual a la tabla interna para copiar la cabecera antes de entrar en el AT si es
que se requieren evaluar ah.

READ
El Read nos permite acceder a un registro de la tabla interna a travs de un
ndice o de una llave. Si se utiliza la opcin de TABLE KEY deben indicarse todos
los campos que conforman la llave de la tabla.
Sintaxis:
READ TABLE <ITAB> INTO <variable>
[WITH KEY <campo1> = <valor1> <campo2> = <valor2> ...]
[WITH TABLE KEY <campo1> = <valor1> ...]
[INDEX <ndice>].

Ejemplos:
READ TABLE ITAB INTO WA_ITAB WITH TABLE KEY CAMPO1 = 100
CAMPO2 = ALFA
CAMPO3 = SY-DATUM.
IF SY-SUBRC EQ 0.
WRITE WA_ITAB-CAMPO4.
ENDIF.
READ TABLE ITAB INTO WA_ITAB INDEX 1.
IF SY-SUBRC EQ 0.
WRITE WA_ITAB-CAMPO1.
ENDIF.

Rangos
Los rangos en ABAP se utilizan para definir un conjunto de valores que
posteriormente se pueden utilizar como parte de un filtro en una consulta SQL, con
SUBMIT, CHECK, IF o en el WHILE. Su utilizacin y estructura es idntica a la que se
logra con la instruccin SELECT-OPTIONS.
Al definir un rango se genera una tabla interna donde se almacenan los valores que
definen el rango. Cada registro de la tabla se puede asumir como un subrango que define al
rango.
La estructura de la tabla es la siguiente:

CAMPO

DESCRIPCIN

LOW

Valor de la cota inferior, el tipo de este campo se define al definir el rango.

HIGH

Valor de la cota superior, el tipo de este campo se define al definir el rango.

OPTION

Indica que operador relacional (EQ,LT,BT,...) define el comportamiento del


subrango.
Indica si el subrango es inclusivo o exclusivo. Los valores son: I (Inclusivo) y
E (exclusivo)

SIGN

Xioma Consulting - ABAP WORKSHOP"

82

Cuando se utiliza el campo SIGN diferente de BT (entre), el valor que se almacena


en HIGH es ignorado, y la comparacin se realiza nicamente contra el campo LOW.
Sintaxis:
RANGES:

<nombre> FOR <Tipo>.

Ejemplo:
RANGES: FECHA FOR SY-DATUM.
FECHA-LOW = 200510010.
FECHA-HIGH = ''.
FECHA-SIGN = 'E'.
FECHA-OPTION = 'EQ'.
APPEND FECHA.
FECHA-LOW = 20051001.
FECHA-HIGH = 20051201.
FECHA-SIGN = 'I'.
FECHA-OPTION = 'BT'.
APPEND FECHA.
IF SY-DATUM IN FECHA.
WRITE:/'El da de hoy esta entre el 1ero de octubre',
' y el 1ero de diciembre.'.
WRITE:/'Y no es 10 de octubre'.
ENDIF.

Es importante tomar en cuenta que en el caso del Select se evala cada


elemento del rango como una condicin independiente, por lo que si se
excede el lmite de condiciones de ste se va a presentar un error en
tiempo de ejecucin.

Tablas Transparentes
Una tabla transparente es aquella tabla que, estando definida en el diccionario de datos, tiene
una relacin uno a uno contra su equivalente en la base de datos (mismo nombre de tabla, mismos
nombres de campos y mismo nmero de registros). El diccionario de datos puede ser definido
como una interfase a datos (informacin, programas, pantallas, etc) que son independientes de la
plataforma que se este usando, y que se encuentran almacenados en una base de datos (Oracle,
SQL Server, Informix, etc). En SAP existen otros tipos de tablas en el diccionario como las Pooled
tables y las Cluster tables.

Xioma Consulting - ABAP WORKSHOP"

83

SE11/SE16
Existe en SAP dos formas de acceder al diccionario de datos, la transaccin SE16 que se
utiliza para visualizar datos en las tablas del diccionario, y la SE11 que contiene todas las
herramientas necesarias para manipular el diccionario de datos.

Fig de la transaccin SE16.

FIG. de la transaccin SE11.

Xioma Consulting - ABAP WORKSHOP"

84

Creacin de una Tabla Z


La creacin se realiza utilizando la transaccin SE11 y seleccionando la
opcin Tabla base de datos. Y oprimir el botn Crear. Es importante tomar en
cuenta que al igual que en la mayora de las adiciones de nuevos objetos en el
sistema, al crear una nueva tabla se le debe agregar la letra Z al inicio.

Es necesario indicar una descripcin para la tabla, adems de especificar la


clase de entrega con el valor A para indicar que la tabla es de tipo aplicacin
(especficamente para almacenar datos maestros y movimientos).
Seguidamente se deben definir los campos de la tabla transparente, para ello
se selecciona la pestaa etiquetada como Campos.

Xioma Consulting - ABAP WORKSHOP"

85

En esta parte se indican todos los campos que se utilizaran. Para agregar
campos en una lnea determinada se puede utilizar el botn de agregar
o en caso
de que se quiera eliminar una lnea se selecciona y se oprime el botn de eliminar
campo
.
La columna llamada Tipo campo sirve para indicar uno de los tipos ya
definidos en el sistema, del cual tomar las caractersticas el campo de la tabla que
se esta creando. Por ejemplo en el cuadro anterior se puede observar que el campo
NOMBRE toma el tipo CHAR20 que es un tipo definido en el sistema como de 20
caracteres. Es posible definir nuevos tipos en el diccionario, o bien se puede utilizar
el botn Elemento datos/Tipo directo para poder agregar una definicin
personalizada.
El tipo de campo MANDT es el que hace que el contenido de la tabla sea
dependiente del mandante, es importante siempre colocarlo como parte de la llave.
Al agregar datos a la tabla no es necesario llenar este campo, pues el sistema se
encarga de manipularlo automticamente.

Una vez que se han definido todos los campos que tendr la tabla, es
importante asignar cual es la tabla de referencia o verificacin que puedan tener
valores como moneda y cantidad. En algunos casos, como la moneda, establecer
esta relacin es obligatorio.

Xioma Consulting - ABAP WORKSHOP"

86

En el cuadro anterior TCURC-WAERS hace referencia al tipo de moneda que


utiliza el campo SALARIO.
Una vez definido todo esto, hace es necesario definir la configuracin bsica
en las opciones tcnicas de la tabla oprimiendo el botn correspondiente en la barra
de herramientas. En esa opcin es necesario definir los parmetros de memoria
lgicos. La clase de datos indica en el sistema administrador de bases de datos a que
mbito fsico al que pertenece la tabla. En el caso de la seleccin APPL0, indica que
pertenece al mbito de datos maestros. La categora de tamao se refiere a la
cantidad de espacio que debe reservar por bloque la base de datos, esta opcin se
considera dependiendo del volumen de informacin que se almacenar en la tabla.

Xioma Consulting - ABAP WORKSHOP"

87

Para finalizar se almacenan estas modificaciones y se retorna a la pantalla


principal, donde se puede realizar una verificacin de la definicin de la tabla
utilizando el botn verificar

. Para que la tabla pueda ser accesada en el sistema

es necesaria activarla utilizando el botn de activacin


(ste botn realiza la
verificacin, guarda los cambios y finalmente activa el objeto en el sistema).

TABLES
Se utiliza para declarar las tablas del diccionario de datos que se desean
utilizar en un programa.
Sintaxis:
TABLES:

<tabla 1>, <tabla 2>, , <tabla N>.

Ejemplo:
TABLES: T001,
MARA.

Xioma Consulting - ABAP WORKSHOP"

88

Al dar doble click sobre el nombre de una tabla u otro elemento del diccionario, el
sistema muestra automticamente la definicin de ste en el diccionario.
Si fue
definido en el programa, se desplaza el cursor hasta la definicin. Siendo posible
regresar al lugar de origen la el botn Back.

Insert
Para aadir registro a registro o varios registros a la vez. En los dos casos se
puede usar la orden INSERT pero con diferentes opciones.
REGISTRO A REGISTRO
Sintaxis:
INSERT INTO <tabla> [CLIENT SPECIFIED] VALUES <estruct>.

VARIOS REGISTROS.
Se puede guardar una tabla interna en una tabla de diccionario con una sola
instruccin sin tener que hacer ningn ciclo.
Sintaxis:
INSERT <tabla> FROM TABLE <ITAB>.

Delete
Con sta instruccin se borran los registros de la tabla. Existen tres formas
distintas para hacerlo.
UN SOLO REGISTRO.
Sintaxis:
DELETE <tabla> FROM <estruc>.

VARIOS REGISTROS
Sintaxis:
DELETE FROM <tabla> [CLIENT SPECIFIED] WHERE <condiciones>.

Xioma Consulting - ABAP WORKSHOP"

89

A TRAVS DE UNA TABLA INTERNA


Sintaxis:
DELETE tabla_dicc FROM TABLE tabla-int.

UPDATE
Actualiza una tabla del diccionario.
UN SOLO REGISTRO
Para modificar un slo registro utilizamos la orden UPDATE.
Sintaxis:
UPDATE <tabla> FROM <estructura>.

VARIOS CAMPOS A LA VEZ


Para este campo utilizamos tambin la orden UPDATE, pero de diferente
forma.
Sintaxis:
UPDATE <tabla>

[SET <S1> .. <Sn> [WHERE <condicin>].

En el SET se colocan los campos a modificar con sus nuevos valores, o sea,
S1 a Sn pudindose desglosar de la siguiente manera:
f = n
Donde f es el nombre del campo a modificar y n es su nuevo valor.
f = f+g
Al campo f se le suma lo que vale g.
f = fg
Al campo f se le resta lo que vale g.

Xioma Consulting - ABAP WORKSHOP"

90

Elementos de datos.
Describen el significado de un campo independientemente de las tablas dnde se utilizan. Es
decir, tienen un carcter semntico.
El elemento de datos puede ser uno ya existente en el diccionario, uno creado por el usuario
( Z, Y ) o una subestructura. Si en el nombre del campo se utiliza .INCLUDE hace referencia a una
substructura. El elemento de datos proporciona la informacin sobre la funcionalidad de este tipo de
datos en el sistema, es decir indica qu se est almacenando en el campo que tiene este elemento de
datos (por ejemplo un n de factura, un importe, etc). Los elementos de datos estn definidos por un
dominio.
Para crear un nuevo elemento de datos utilizamos la transaccin SE11, y colocamos el
nombre del nuevo elemento de datos en la referencia del nuevo campo seguido de un doble click.

Al oprimir el botn S se muestra la pantalla de creacin para el elemento de datos, ac se


debe definir a que dominio pertenece el elemento de datos o si el elemento de datos hace referencia
a un tipo instalado o a otro elemento de texto. Tambin es importante definir para el elemento de
texto una descripcin y los denominadores de campo respectivos que permiten al sistema desplegar
la descripcin de los campos del diccionario que utilicen el elemento de texto. Una vez definido
todo esto se debe activar el elemento de texto para que este disponible.

Xioma Consulting - ABAP WORKSHOP"

91

Dominios
El dominio es una agrupacin de propiedades formales de campos, tales como tipo de datos
y cantidad de posiciones del campo. Define principalmente el mbito de valores para todos los
campos que hacen referencia al dominio, de tal forma que al cambiar la definicin de un dominio
todos los elementos de datos relacionados cambian automticamente.
En la definicin de un dominio se puede introducir una rutina de conversin para los datos
de este dominio. Con esto lo que se consigue es que la introduccin o salida de datos se hagan con
un formato determinado a partir de otro formato de datos. Por ejemplo, el cdigo de los materiales
tienen el dominio MATNR el cual se tienen las siguientes rutinas de conversin :
CONVERSION_EXIT_MATN1_INPUT (para entrada)
CONVERSION_EXIT_MATN1_OUTPUT (para salida)
Estas rutinas almacenan los datos aadindoles ceros hasta completar 18 posiciones.
La creacin de nuevos dominios se realiza a travs de la transaccin SE11.

Xioma Consulting - ABAP WORKSHOP"

92

Se debe indicar para el dominio una descripcin, un tipo de datos (que proviene de los tipos
de datos que existen en el sistema, una cantidad de posiciones. Tambin es posible indicar los
atributos de salida, los cuales van a determinar la longitud que puede desplegar el dominio, si existe
una rutina de conversin de datos, si es un valor numrico indicar si es posible que represente
valores negativos y si es un valor de texto si es posible que contenga letras minsculas.
En la pestaa de mbito se definen los valores posibles que puede tomar el dominio, o los
rangos en los que puede estar. Igualmente puede hacerse referencia a una tabla que contenga esos
valores.
Al finalizar la definicin del rango, este debe ser activado para que pueda ser utilizado en el
sistema.

Xioma Consulting - ABAP WORKSHOP"

93

Vistas de Base de Datos


Una vista es una visin lgica de una ms tablas, es decir, no se almacena fsicamente,
sino que se deriva de una o ms tablas. Para crear una vista se utiliza la transaccin SE11.
Siempre que sea posible es importante tomar campos que sean parte de la llave primaria
para establecer la relacin entre las tablas, y siempre indicar el campo MANDT en tablas que son
dependientes de mandante.
Con el botn RELACIONES es posible invocar relaciones predefinidas en el sistema para
las tablas que se hayan indicado.

Xioma Consulting - ABAP WORKSHOP"

94

En la pestaa de campos de vista se han de seleccionar cuales son los campos que se desean
mostrar y con que nombres han de aparecer.

Xioma Consulting - ABAP WORKSHOP"

95

En la pestaa condiciones de seleccin se determinan una serie de condiciones bsicas para


filtrar los resultados de la seleccin.

Xioma Consulting - ABAP WORKSHOP"

96

Estructuras
Las estructuras son objetos de datos globales en el sistema que estan formados por varios
campos. Sin embargo no permiten el almacenamiento de informacin en la base de datos. Su
creacin es a travs de la transaccin SE11.

Xioma Consulting - ABAP WORKSHOP"

97

Las estructuras no son objetos dependientes de mandante, por lo que no es importante


declarar el campo MANDT, igualmente no requieren de la definicin de llaves.

Ayudas de Bsqueda
Las ayudas de bsqueda permiten crear un dilogo de seleccin para un campo de la
interfase de usuario donde los usuarios pueden seleccionar valores dentro de una lista de valores
propuestos. La creacin se realiza a travs de la transaccin SE11, y se pueden crear ayudas de
bsqueda elemental o compuestas (basadas en otras ayudas de bsqueda ya existentes).

Xioma Consulting - ABAP WORKSHOP"

98

El campo mtodo de seleccin indica cual tabla del diccionario contiene los datos sobre los
cuales se basa la propuesta. Los parmetros indican los campos que deben salir y el orden en que
han de ser desplegados. El check de import indica que el campo es relevante para la seleccin de la
ayuda de bsqueda, el check de export indica que el parmetro es de salida y debe indicarse al
menos uno. P.I indica el orden de las columnas en la ventana de seleccin y PosS el orden en la
ventana de filtros.

Vista de Actualizacin
Las vistas de actualizacin se generan desde la transaccin SE11. Se debe seleccionar la
tabla transparente a la que se le desea crear la vista de actualizacin, y en el men seleccionar
Utilidades->Generador actualiz tab. Es importante que la tabla en las opciones de entrega permita
la actualizacin y que con anterioridad se tenga claro cual es el grupo de funciones que se utilizar
para generar la vista. La creacin de grupos de funciones ser explicada ms adelante.

Xioma Consulting - ABAP WORKSHOP"

99

En las vistas de actualizacin es posible indicar un grupo de autorizaciones que permite


brindar mayor seguridad, en la descripcin de este proceso se utilizara el grupo &NC& que indica
que no se desea utilizar ningn grupo de autorizacin. Es necesario tambin definir el paquete
donde se crear la vista. El tipo de actualizacin determinara si la modificacin o inclusin de
nuevos registros se har en una o dos imgenes.

Xioma Consulting - ABAP WORKSHOP"

100

Para realizar la edicin o inclusin de registros se debe utilizar la transaccin SM30. Y


oprimir el botn Actualizar.

Xioma Consulting - ABAP WORKSHOP"

101

En la siguiente imagen se muestra como se despliega el contenido de la tabla transparente.


Los ttulos que aparecen sobre las columnas son derivados de los elementos de texto de cada
campo. Si un campo no tuviese asignado un elemento de texto se mostrara nicamente el smbolo
+.

Xioma Consulting - ABAP WORKSHOP"

102

Las vistas de actualizacin son muy tiles para crear dilogos de parametrizacin y pueden
ser asignadas a transacciones mediante la transaccin SE93 mediante la opcin Transaccin con
Parmetros, indicando en los parmetros VIEWNAME el nombre de la tabla y en el parmetro
UPDATE el valor X.

Xioma Consulting - ABAP WORKSHOP"

103

T RAN S F ERE NCI A D E DATOS


Normalmente en SAP las transferencias de datos estn relacionadas con la necesidad de
establecer una interfase con algn sistema externo. Las ms comunes se establecen por medio de
IDOCs, funciones RFC y por medio de archivos planos. En esta seccin se explicar sta ltima.

Transferencia Local
La transferencia de archivos planos de manera local se refiere a la creacin o lectura
de archivos en el servidor SAP. Se suele establecer una ruta donde se colocan los archivos
de entrada y los archivos de salida, que posteriormente pueden ser extrados por el medio
del sistema operativo o por medio de FTP.
En este caso siempre es necesario realizar una apertura del archivo, luego ejecutar la
transferencia del contenido y finalmente cerrar el archivo.

Open dataset
Esta instruccin hace la apertura del archivo. De ser exitoso la instruccin
retornar 0 en la variable SY-SUBRC, sino retornar 8. El mximo de archivos que
pueden estar abiertos en una sesin es de 100.
Sintaxis:

Close dataset
Close dataset cierra un archivo.
Sintaxis:
CLOSE DATASET <dataset>.

Transfer
La instruccin TRANSFER enva el contenido de un objeto de datos a un
dataset abierto.
Sintaxis:
TRANSFER <Objeto de datos> TO <DATASET>.

Ejemplo:
DATA: file TYPE string VALUE `test.dat`.
OPEN DATASET file FOR OUTPUT IN TEXT MODE
ENCODING DEFAULT.
TRANSFER `1234567890` TO file.

Xioma Consulting - ABAP WORKSHOP"

104

CLOSE DATASET file.

Read Dataset
READ permite la lectura de un dataset abierto. En la variable SY-SUBRC
queda el valor 0 despus de una lectura exitosa y 4 cuando se ley el ltimo registro
del archivo o si se trata de leer despus del EOF.
Sintaxis:
READ DATASET <dataset> INTO <objeto datos>.

Ejemplo:
DATA: file TYPE string VALUE `test.dat`,
Line type string.
OPEN DATASET file FOR INPUT IN TEXT MODE
ENCODING DEFAULT.
READ DATASET FILE INTO LINE.
CLOSE DATASET file.

Utilizando la transaccin AL11 es posible revisar los ficheros en el servidor.

Delete Dataset
Se utiliza para eliminar un archivo. No requiere de un OPEN, y
retornar 0 si logr borrar el archivo 4 en caso de no lograrlo.
Sintaxis:
DELETE DATASET <dataset>.

Transferencia Remota
En el caso de la transferencia remota, se asume que la creacin de los archivos o la
carga de los mismos se hace desde la terminal desde la cual se esta ejecutando el SAP GUI.
Para esto se utilizan funciones de SAP que se hacen cargo de la apertura, lectura y cierre de
los archivos dejando el contenido de stos en una tabla interna.

GUI_DOWNLOAD.
Esta funcin descarga el contenido de una tabla interna a un archivo plano.
Los parmetros ms importantes son:

Xioma Consulting - ABAP WORKSHOP"

105

FILENAME: Debe ser de tipo string y determina el nombre del dataset.


FILETYPE: Determina el tipo de archivo.
WRITE_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN 8.
DATA_TAB: Indica cual es la tabla interna.
Ejemplo:
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME
FILETYPE
WRITE_FIELD_SEPARATOR
TABLES
DATA_TAB
EXCEPTIONS
FILE_WRITE_ERROR
NO_BATCH
GUI_REFUSE_FILETRANSFER
INVALID_TYPE
NO_AUTHORITY
UNKNOWN_ERROR
HEADER_NOT_ALLOWED
SEPARATOR_NOT_ALLOWED
FILESIZE_NOT_ALLOWED
HEADER_TOO_LONG
DP_ERROR_CREATE
DP_ERROR_SEND
DP_ERROR_WRITE
UNKNOWN_DP_ERROR
ACCESS_DENIED
DP_OUT_OF_MEMORY
DISK_FULL
DP_TIMEOUT
FILE_NOT_FOUND
DATAPROVIDER_EXCEPTION
CONTROL_FLUSH_ERROR
OTHERS

= ARCHIVO
= 'ASC'
= 'X'
= ITAB
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

GUI_UPLOAD.
Esta funcin carga el contenido de un archivo plano a una tabla interna. Los
parmetros ms importantes son:

FILENAME: Debe ser de tipo string y determina el nombre del dataset.


FILETYPE: Determina el tipo de archivo.
HAS_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN.

Un archivo PRN es un archivo cuyos campos estan separados por tabuladores.

Xioma Consulting - ABAP WORKSHOP"

106

DATA_TAB: Indica cual es la tabla interna.

Ejemplo:
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME
= ARCHIVO
FILETYPE
= 'ASC'
HAS_FIELD_SEPARATOR
= 'X'
TABLES
DATA_TAB
= ITAB
EXCEPTIONS
FILE_OPEN_ERROR
= 1
FILE_READ_ERROR
= 2
NO_BATCH
= 3
GUI_REFUSE_FILETRANSFER
= 4
INVALID_TYPE
= 5
NO_AUTHORITY
= 6
UNKNOWN_ERROR
= 7
BAD_DATA_FORMAT
= 8
HEADER_NOT_ALLOWED
= 9
SEPARATOR_NOT_ALLOWED
= 10
HEADER_TOO_LONG
= 11
UNKNOWN_DP_ERROR
= 12
ACCESS_DENIED
= 13
DP_OUT_OF_MEMORY
= 14
DISK_FULL
= 15
DP_TIMEOUT
= 16
OTHERS
= 17
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

Antes de la versin 5.0 se utilizaban las funciones WS_DOWNLOAD y WS_UPLOAD.

F4_FILENAME
Esta funcin se puede utilizar en la pantalla de seleccin de un programa tipo
report en el evento AT SELECTION-SCREEN ON VALUE-REQUEST FOR
<campo>. Reemplazando as la ayuda de bsqueda por una ventana que permita
buscar el nombre del archivo en el computado remoto.
.

Xioma Consulting - ABAP WORKSHOP"

107

OP E N S QL
El Structured Query Language (SQL) se ha convertido en uno de los lenguajes
computacionales ms populares, y es utilizado para crear, modificar y obtener informacin de los
sistemas administradores de base de datos relacionales. ABAP cuenta con una serie de
adaptaciones que provienen de este lenguaje para facilitar la manipulacin de la informacin en su
base de datos, incluso permite invocar SQL nativo desde su cdigo en caso de ser estrictamente
necesario.

Select
Esta es una de las instrucciones ms importantes en el lenguaje, y es la que permite
la manipulacin de la informacin de la base de datos. El select se comporta como una
instruccin de iteracin, correspondiendo cada ciclo con uno de los registros seleccionados
en la ejecucin. Si la bsqueda fue exitosa SY-SUBRC obtiene el valor de cero.
Sintaxis:
SELECT <campos> FROM <TABLA>.

Ejemplo:
SELECT * FROM ztest.
ENDSELECT. ztest

El smbolo * es un comodn que indica que todos los campos de la tabla son seleccionados.
Indicar solo los campos que se utilizaran puede mejorar el rendimiento de un select.

Where
La opcin WHERE en el SELECT sirve para especificar un filtro en la seleccin de
informacin
Sintaxis:
SELECT <campos> FROM <tabla> WHERE <condiciones>.
<cdigo>.
ENDSELECT.

Ejemplo:
SELECT * FROM ztest WHERE salario GT 100000
AND salario LT 500000.
ENDSELECT. ztest

Xioma Consulting - ABAP WORKSHOP"

108

Single
La opcin Single trae nicamente el primer registro de la tabla que cumpla con las
condiciones del Select. Al utilizar esta opcin no es necesario utilizar el ENDSELECT.
Sintaxis:
SELECT SINGLE <campos> FROM <tabla>.

Ejemplo:
SELECT SINGLE * FROM ztest.

Into
Coloca los valores de los campos indicados en los que indique el into.
Sintaxis:
SELECT

f1 f2 fn

INTO (v1, v2, , vn) FROM <tabla>.

<cdigo>
ENDSELECT.

Ejemplo:
DATA:

CARRID
LIKE SCARR-CARRID,
CARRNAME LIKE SCARR-CARRNAME,

SELECT CARRID CARRNAME


INTO (CARRID, CARRNAME)
FROM SCARR.
WRITE: / CARRID, CARRNAME.
ENDSELECT.

Order by
Esta opcin indica en el select de que manera debe ordenar la informacin que se
obtiene con la consulta. Es importante recordar que el campo por el cual se realizar el
ordenamiento debe estar incluido en los campos que se estn seleccionando en la consulta.
Sintaxis:
SELECT <campos> FROM <tabla>
ORDER BY <campo> [ASCENDING | DESCENDING].

Xioma Consulting - ABAP WORKSHOP"

109

Ejemplo:
SELECT * FROM ztest
ORDER BY apellido DESCENDING
Salario ASCENDING.

Into Corresponding Fields of


Coloca la informacin seleccionada en los campos del mismo nombre en la
estructura destino. Es posible utilizar ...INTO CORRESPONDING FIELDS OF TABLE...
para llenar una tabla interna con todas las tuplas del resultado.
Ejemplos:
TABLES: MARA.
Data: STR_MARA LIKE MARA,
IT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
SELECT single * INTO CORRESPONDING FIELDS OF STR_MARA
FROM MARA.
SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_MARA
FROM MARA.

Distinct
Selecciona el conjunto de valores diferentes para las columnas seleccionadas.
Ejemplo:
SELECT DISTINCT MTART INTO MARA-MTART
FROM MARA.
WRITE:/ MARA-MTART.
ENDSELECT.

Count

Count(*) determina el nmero de tuplas en el conjunto resultante. Es posible


calcular el nmero de tuplas distintas utilizando la instruccin DISTINCT.


Ejemplos:
SELECT COUNT( * ) INTO CANTIDAD
FROM MARA.

SELECT COUNT( DISTINCT MTART ) INTO CANTIDAD


FROM MARA.

Xioma Consulting - ABAP WORKSHOP"

110

Sum

Devuelve la suma de todos los valores en la columna indicada.


Solo puede ser
utilizada en columnas del tipo numrico y se ignoran los valores NULL (nulos) a no
ser que todos los valores lo sean, en tal caso el resultado es NULL.
Ejemplo:
SELECT SUM( PESO ) INTO PESOTOTAL
FROM ZPESO.

Avg

Devuelve el promedio de todos los valores en la columna indicada. Solo puede ser
utilizada en columnas del tipo numrico y se ignoran los valores NULL (nulos) a no ser que
todos los valores lo sean, en tal caso el resultado es NULL.
Ejemplo:
SELECT AVG( PESO ) INTO PESOTOTAL
FROM ZPESO.

Max

Retorna el valor ms alto en la columna seleccionada. Se ignoran los valores NULL


(nulos) a no ser que todos los valores lo sean, en tal caso el resultado es NULL.
Ejemplo:
SELECT MAX( PESO ) INTO PESO_Maximo
FROM ZPESO.

Min
Retorna el valor ms bajo en la columna seleccionada. Se ignoran los valores NULL
(nulos) a no ser que todos los valores lo sean, en tal caso el resultado es NULL.
Ejemplo:
SELECT MIN( PESO ) INTO PESO_Minimo
FROM ZPESO.

Alias
Es posible definir alias tanto para tablas como para vistas del diccionario mediante la
adicin AS. El alias puede tener un tamao mximo de 14 caracteres y solamente es vlido
durante el SELECT.

Xioma Consulting - ABAP WORKSHOP"

111

Ejemplo:
DATA wa TYPE mara.
SELECT * FROM mara AS s
INTO wa
ORDER BY s~MTART.
WRITE: / wa-matnr, wa-mtart.
ENDSELECT.

Client Specified
La adicin CLIENT SPECIFIED apaga el manejo automtico del mandante,
haciendo necesaria indicar el filtro para el campo MANDT.

Up to n Rows
Esta adicin restringe el nmero de tuplas en el resultado. El nmero n debe ser un
entero positivo, y en caso de ser ste cero se retornan todas las tuplas en el resultado. Si se
utiliza la opcin ORDER BY, primero se ordenan todas las tuplas en el servidor y se pasan
las n primeras, de no ser as se pasan las primeras n tuplas seleccionadas por las condiciones
del WHERE.

By Passing Buffer
Al utilizar esta opcin se evita el uso del SAP buffering y se lee directamente de la
base de datos en el servidor de aplicacin.

Like
La expresin ser verdadera si el valor de la columna coincide (o no) con el patrn
indicado. Esta opcin solo funciona con campos del tipo caracter y utiliza los siguientes
comodines: % que representa cualquier caracter en el string (inclusive uno blanco), y _
que representa cualquier caracter excepto el blanco.
Ejemplo:
PARAMETERS srch_str(20) TYPE c.
DATA text_tab TYPE TABLE OF doktl.
CONCATENATE '%' srch_str '%' INTO srch_str.
SELECT * FROM doktl
INTO TABLE text_tab
WHERE doktext LIKE srch_str.

Xioma Consulting - ABAP WORKSHOP"

112

Null
La expresin NULL es verdadera si el valor de la columna es un valor nulo.
utilizar esta opcin la instruccin SELECT se salta el SAP buffering.

Al

Ejemplos:
SELECT * FROM ZESTUDIANTES
WHERE NOTA1 IS NULL.
SELECT * FROM ZESTUDIANTES
WHERE NOTA1 IS NOT NULL.

In
La opcin IN es verdadera si lo valores de la columna coinciden (o no) con los
contenidos de la lista a evaluar. Esta lista puede ser un rango o una enumeracin entre
parntesis y separando cada elemento por comas.
Ejemplo:
DATA sbook_tab TYPE TABLE OF sbook.
SELECT * FROM sbook
INTO TABLE sbook_tab
WHERE class NOT IN ('C','F','Y').

Between
La expresin es verdadera si el contenido de la columna se encuentra entre una cota
superior y una inferior.
Ejemplo:
DATA sflight_tab TYPE TABLE OF sflight.
DATA date TYPE d.
date = sy-datum + 30.
SELECT carrid connid fldate
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE sflight_tab
WHERE fldate BETWEEN sy-datum AND date.

Group By
La adicin GROUP BY combina grupos de tuplas que tienen el mismo contenido en
las columnas de resultado especificadas en una sola tupla. Como prerequisito se tiene que
se deben indicar columnas individuales y no todas las columnas (al usar *).

Xioma Consulting - ABAP WORKSHOP"

113

For All Entries in


Se utiliza la opcin FOR ALL ENTRIES antes del WHERE, de tal forma que los
componentes de la tabla interna pueden ser utilizados como operandos en las comparaciones
del WHERE. Los componentes de la tabla interna deben ser compatibles con las columnas
de la tabla transparente sobre la cual se realiza el SELECT.
Ejemplo:
PARAMETERS p_city TYPE spfli-cityfrom.
TYPES: BEGIN OF entry_tab_type,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
END OF entry_tab_type.
DATA: entry_tab
TYPE TABLE OF entry_tab_type,
sflight_tab TYPE SORTED TABLE OF sflight
WITH UNIQUE KEY carrid connid fldate.
SELECT carrid connid
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE entry_tab
WHERE cityfrom = p_city.
SELECT carrid connid fldate
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE sflight_tab
FOR ALL ENTRIES IN entry_tab
WHERE carrid = entry_tab-carrid AND
connid = entry_tab-connid.

Subquery
El subquery es un SELECT entre parntesis que se utiliza como una condicin de la
clusula WHERE. En el subquery no es posible utilizar las adiciones INTO ni ORDER BY.
El subquery solo tiene como resultado un conjunto de una sola columna.
ABAP permite anidar hasta un mximo de 9 subqueries.
Ejemplo:
PARAMETERS: carr_id TYPE spfli-carrid,
conn_id TYPE spfli-connid.
DATA: city TYPE sgeocity-city,
lati TYPE p DECIMALS 2,
longi TYPE p DECIMALS 2.
SELECT SINGLE city latitude longitude

Xioma Consulting - ABAP WORKSHOP"

114

INTO (city, lati, longi)


FROM sgeocity
WHERE city IN ( SELECT cityfrom
FROM spfli
WHERE carrid = carr_id AND
connid = conn_id ).

Join
Se utiliza para realizar enlaces dinmicos a travs de instrucciones del lenguaje
ABAP.

Inner Join
De esta manera se enlazan dos tablas por medio de n campos, donde la
interseccin de ambas tablas genera una nueva tabla por medio de los campos
comunes establecidos. En el siguiente ejemplo el join se establece a travs del
campo D.

Sintaxis:
SELECT <campos> INTO (<campos>)
FROM <tabla1> AS <alias1>
INNER JOIN <tabla2> AS <alias2>
ON <alias1>~<campo1> = <alias2>~<campo1>
WHERE <condiciones>.
ENDSELECT.

Ejemplo:
DATA: DATE
LIKE SFLIGHT-FLDATE,
CARRID LIKE SFLIGHT-CARRID,
CONNID LIKE SFLIGHT-CONNID.

Xioma Consulting - ABAP WORKSHOP"

115

SELECT F~CARRID F~CONNID F~FLDATE


INTO (CARRID, CONNID, DATE)
FROM SFLIGHT AS F INNER JOIN SPFLI AS P
ON F~CARRID = P~CARRID AND
F~CONNID = P~CONNID
WHERE P~CITYFROM = 'FRANKFURT'
AND P~CITYTO
= 'NEW YORK'
AND F~FLDATE BETWEEN '19970910' AND '19970920'
AND F~SEATSOCC < F~SEATSMAX.
WRITE: / DATE, CARRID, CONNID.
ENDSELECT.

Left Outer Join


Al realizar un Left Outer Join la unin se basa en la tabla de la izquierda, an
cuando no existe interseccin con la tabla de la derecha, aquellas tuplas en la tabla de
la derecha que esten excluidas quedan como campos nulos en la nueva tabla.

Sintaxis:
SELECT <campos> INTO (<campos>)
FROM <tabla1> AS <alias1>
LEFT OUTER JOIN <tabla2> AS <alias2>
ON <alias1>~<campo1> = <alias2>~<campo1>
WHERE <condiciones>.
ENDSELECT.

Ejemplo:
DATA: CUSTOMER TYPE SCUSTOM,
BOOKING TYPE SBOOK.

Xioma Consulting - ABAP WORKSHOP"

116

SELECT SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY


SBOOK~FLDATE SBOOK~CARRID SBOOK~CONNID SBOOK~BOOKID
INTO (CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
BOOKING-BOOKID)
FROM SCUSTOM LEFT OUTER JOIN SBOOK
ON SCUSTOM~ID = SBOOK~CUSTOMID AND
SBOOK~FLDATE = '19971015'
ORDER BY SCUSTOM~NAME SBOOK~FLDATE.
WRITE: / CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY,
BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID,
BOOKING-BOOKID.
ENDSELECT.

SQL Dinmico
El SQL dinmico consiste en la capacidad de armar sentencias SQL en tiempo de
ejecucin. Esto se logra a travs de crear los strings con los parmetros correspondientes
para el SELECT, FROM, WHERE.
Ejemplos:
DATA: TABLA(20) VALUE MARA.
SELECT * FROM (TABLA).
DATA: STR_WHERE TYPE TABLE OF EDPLINE.
APPEND MTART = 001 AND TO STR_WHERE.
APPEND MTART = 005 TO STR_WHERE.
SELECT * FROM (TABLA) WHERE (STR_WHERE).

Xioma Consulting - ABAP WORKSHOP"

117

AB AP LI ST V I EWE R (ALV )
Mediante el ALV Grid es posible implementar la funcionalidad de un listado y muchas
opciones ms dentro de un dynpro.

Uso de la funcin REUSE_ALV_GRID_DISPLAY


Esta funcin permite mostrar el contenido de una tabla en formato ALV Grid. Es
importante conocer algunos de sus parmetros ms importantes a la hora ajustar la
visualizacin del ALV segn lo que se necesite.
IT_FIELDCAT: (Catlogo del campo con sus descripciones)

Campos ms comunes:

ROW_POS: nmero de fila


COL_POS: posicin de la columna
FIEDNAME: campo de la tabla interna
TABNAME: nombre de la tabla interna
KEY: columna marcada como llave
DO_SUM: indicador para sumar columna
NO_OUT: indicador para que se muestre o no el campo
OUTPUTLEN: longitud de salida
REF_FIELDNAME: campo de la tabla de referencia
REF_TABNAME: nombre de la tabla de referencia
SELTEXT_S: descripcin corta de la campo
SELTEXT_M: descripcin media de la campo
SELTEXT_L: descripcin larga de la campo

IT_LAYOUT: (Especificacin del formato de la lista)

Campos ms comunes:

COLWIDTH_OPTIMIZE: optimizacin del ancho de la columna


ZEBRA: filas en formato de zebra
F2CODE: cdigo para ejecutar cdigo con F2
EDIT: para editar

Xioma Consulting - ABAP WORKSHOP"

118

KEY: columna marcada como llave


NO_VLINE: columnas separadas por espacio
NO_HLINE: filas separadas por espacio

IT_EVENTS: (Tabla de los eventos que pueden ser requeridos)

Campos ms comunes:

NAME: nombre del tipo de evento (top of page, end of list)


FORM: nombre de la subrutina q se desea invocar

IT_SORT: (Criterios para ordenar la primera salida de la lista)

Campos ms comunes:

FIELDNAME: campo q se desea ordenar


TABNAME: nombre de la tabla interna
UP: indicador de orden ascendente
DOWN: indicador de orden descendente
SUBTOT: para mostrar subtotales

I_CALLBACK_USER_COMMAND: nombre de la subrutina q se ejecutara al momento


de que se realice alguna accin sobre algn campo.

Xioma Consulting - ABAP WORKSHOP"

119

Como subir una imagen


Primero ingresar a la transaccin OAOR

Se coloca la informacin necesaria y se ejecuta. Por medio de la clave del objeto


(LOGO XIOMA) se invoca la imagen.

En la pestaa Crear se le da click en Imagen, aparece un explorador y se selecciona


la imagen.

Xioma Consulting - ABAP WORKSHOP"

120

Muestra la informacin

Muestra el siguiente mensaje si se subi con xito.

Se regresar a la OAOR pero esta vez no se inserta la clave del objeto, de ese modo se pueden ver las
imgenes que han sido cargadas.

Aqu se verifica que la imagen si se encuentra en el servidor

Xioma Consulting - ABAP WORKSHOP"

121

Creacin de un ALV simple

Se debe incluir el type pool SLIS.

Type-pools: slis.
***** Declaraciones globales *****
tables: rseg.
data: begin of tab_arseg occurs 0.
include structure rseg.
data: end of tab_arseg.
data:

gt_fieldcat
gd_layout
gt_header
gt_footer
t_event
it_sort
gt_sort

type
type
type
type
type
type

slis_t_fieldcat_alv, catalogo de campos


slis_layout_alv, formato de salida
slis_t_listheader, encabezado
slis_t_listheader, pie de pagina
slis_t_event, tabla con los eventos
slis_sortinfo_alv occurs 1, criterio de
ordenamiento
like line of it_sort.

***** Declaracion de subrutinas

*****

form fieldcat.
data: fieldcat type slis_fieldcat_alv.
clear fieldcat.
fieldcat-fieldname
fieldcat-tabname
fieldcat-ref_tabname
fieldcat-ref_fieldname
fieldcat-hotspot
fieldcat-col_pos
fieldcat-key

=
=
=
=
=
=
=

'BELNR'.
'TAB_ARSEG'.
'RSEG'.
'BELNR'.
X.
1.
X.

append fieldcat to gt_fieldcat.

Xioma Consulting - ABAP WORKSHOP"

122

clear fieldcat.
fieldcat-fieldname
= 'GJAHR'.
fieldcat-tabname
= 'TAB_ARSEG'.
fieldcat-ref_tabname
= 'RSEG'.
fieldcat-ref_fieldname = 'GJAHR'.
fieldcat-hotspot
= X.
fieldcat-col_pos
= 2.
fieldcat-key
= X.
append fieldcat to gt_fieldcat.

clear fieldcat.
fieldcat-fieldname
= 'BUZEI'.
fieldcat-tabname
= 'TAB_ARSEG'.
fieldcat-ref_tabname
= 'RSEG'.
fieldcat-ref_fieldname = 'BUZEI'.
fieldcat-seltext_s
= 'factura'.
fieldcat-seltext_m
= 'factura'.
fieldcat-seltext_l
= 'factura'.
fieldcat-col_pos
= 3.
fieldcat-key
= X.
append fieldcat to gt_fieldcat.

clear fieldcat.
fieldcat-fieldname
= 'MENGE'.
fieldcat-tabname
= 'TAB_ARSEG'.
fieldcat-ref_tabname
= 'RSEG'.
fieldcat-ref_fieldname = 'MENGE'.
fieldcat-col_pos
= 4.
fieldcat-do_sum
= X.
append fieldcat to gt_fieldcat.
end form.
form layout.
***
gd_layout-colwitdh_optimize = X.
gd_layout-zebra = X.
end form.
form header_and_footer.
data: x_heading type slis_listheader,
x_footer type slis_listheader,
x_event
type line of slis_t_event.

clear gt_header[].
clear x_heading.
x_heading-typ = 'H'.
x_heading-info = 'Encabezado'.
append x_heading to gt_header.

Xioma Consulting - ABAP WORKSHOP"

123

clear gt_footer[].
clear x_footer.
x_footer-typ = 'S'.
x_footer-KEY = 'Footer: '.
x_footer-info = 'Ejemplo Pie de Pagina'.
append x_footer to gt_footer.
*** Top of page event ***
x_event-name = slis_ev_top_of_page.
x_event-form = 'TOP_OF_PAGE'.
append x_event to t_event.
*** End of list event
x_event-name = slis_ev_end_of_list.
x_event-form = 'END_OF_LIST'.
append x_event to t_event.
endform.
form sort_alv.
clear gt_sort.
gt_sort-fieldname = 'gjahr'.
gt_sort-subtot = X.
gt_sort-comp = X.
gt_sort-up = X.
append gt_sort to it_sort.
endform.
form TOP_OF_PAGE.
call function 'reuse_alv_commentary_write'
exporting
i_logo
= 'logo xioma' "subir logo en transaccion oaor
it_list_commentary = gt_header.
endform.
form END_OF_LIST.
call function 'reuse_alv_commentary_write'
exporting
it_list_commentary = gt_footer
i_end_of_list_grid = X.
indicador para pie de pagina
endform.
***** Cdigo *****
START-OF-SELECTION.
select * up to 10 rows from rseg into table tab_arseg.

Xioma Consulting - ABAP WORKSHOP"

124

perform
perform
perform
perform

fieldcat.
layout.
header_and_footer.
sort_alv.

call function 'reuse_alv_grid_display'


exporting
i_buffer_active
=
i_callback_program
=
*
i_callback_user_command
=
*
i_structure_name
=
it_sort
=
is_layout
=
it_events
=
it_fieldcat
=
tables
t_outtab
=
exceptions
program_error
=
others
=

space
sy-repid
it_sort
gd_layout
t_event
gt_fieldcat[]
TAB_ARSEG
1
2.

El resultado final despus de la ejecucin sera el siguiente:

Xioma Consulting - ABAP WORKSHOP"

125

D E P U RACI N
El Debugger es una herramienta de programacin que se puede utilizar para ejecutar
programas ABAP por lnea o por seccin con el propsito de depurar el cdigo. Con esta
herramienta se visualiza el contenido de las variables y se sigue la ejecucin de la lgica del
programa.

Si se desea debuggear una transaccin desde el inicio, se utiliza /h en la linea de comandos


para activar el debugging y despus se indica el nombre de la transaccin

Modos de Visualizacin
Campos: Esta opcin proporciona el contenido de hasta ocho campos. El contenido de los
tres campos ms importantes del sistema se visualiza siempre.
Tablas: Visualiza el contenido de una tabla interna. Esta opcin permite visualizar y
corregir las entradas en una tabla interna.
Breakpoints: Se pueden utilizar hasta 30 breakpoints. Al lado de cada uno existe un
contador. Se puede tambin agregar o suprimir breakpoints en esta opcin.
Watchpoints: Se puede fijar un watchpoint para un campo e interrumpir el programa
siempre que el valor de ese campo cambie. Este modo de visualizacin contiene una lista de
watchpoints, los campos y los programas a los cuales se asignan, los valores actuales de los
campos, y las condiciones sobre las cuales se activa el mismo.
Llamadas: Esta opcin visualiza el evento actual y las llamadas hasta el breakpoint actual.
La ltima llamada activa es desplegada al principio de la lista; las llamadas anteriores se
enumeran en orden cronolgico inverso. Cuando un evento (por ejemplo, START-OFSELECTION) concluye, se elimina de la visualizacin.
Resumen: Visualiza la estructura del programa. Enumera sus eventos, subrutinas, y
mdulos, y muestra cuales secciones pertenecen a cuales eventos. Tambin visualiza la
seccin que es procesada actualmente.
Opciones: Visualiza las configuraciones actuales del debugger. Se pueden cambiar las
configuraciones seleccionndolas.

Xioma Consulting - ABAP WORKSHOP"

126

Recorriendo el cdigo fuente


Single Step: Utilice esta opcin para ejecutar el programa lnea por lnea.
Execute: Tambin permite ejecutar el programa lnea por lnea pero en caso de
encontrar una subrutina o una funcin se ejecuta en un solo paso.
Return: El Debugger vuelve al programa anterior despus de ingresar a una subrutina
o funcin.

Continue: Se utiliza para procesar el programa hasta el siguiente breakpoint. Si no hay


mas breakpoints en el programa, el sistema da salida al modo de debugging y ejecuta el
resto del programa normalmente.

Visualizacin y modificacin de campos


Para visualizar el contenido de un campo, se digita el nombre y se oprime <Enter> .
Otra manera es dando doble click a la variable en el cdigo del programa

Visualiza el contenido del campo en formato hexadecimal.


Visualiza el contenido del campo en su formato original de la salida.
Borra todos los nombres de los campos.
Modifica el contenido de los campos.

Xioma Consulting - ABAP WORKSHOP"

127

Procesar tablas internas


Se puede visualizar y cambiar el contenido de las tablas internas en tiempo de
ejecucin (Debugger).

Header Line:
Si la tabla interna tiene una lnea de la cabecera, es indicado por este
icono. Si se le da doble click al icono, el sistema abre la visualizacin estructurada del
campo.

Breakpoints
Existen varias formas de establecer breakpoints:
1) Con la sentencia break-point:
IF SY-SUBRC NE 0.
BREAK-POINT.
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

128

Tambin se pueden enumerar (BREAK-POINT 1, BREAK-POINT 2) para que sean


ms fciles de identificar
2) Breakpoint para usuario especfico:
IF SY-SUBRC NE 0.
BREAK <nombre_usuario>.
endif.

3) En tiempo de ejecucin se puede colocar a la izquierda de la lnea haciendo click en el


botn

Tambin se pueden establecer breakpoints al momento que se esta debuggeando el


programa como por ejemplo breakpoints en sentencias, subrutinas, llamadas a funciones,
mtodos y en excepciones del sistema.

Watchpoints
Si se desea interrumpir un programa cuando el contenido de un campo o de una
estructura cambia, se puede utilizar un watchpoint. Es posible fijar hasta cinco watchpoints,
incluyendo los watchpoints para los strings.

Para crearlos se hace de la siguiente forma

Click en

y seguido indicamos el nombre del campo

Xioma Consulting - ABAP WORKSHOP"

129

Adems se puede modificar el contenido y borrar los watchpoints mediante los


botones

respectivamente que aparecen al lado de cada uno.

Performance Analysis (SQL Trace)


SQL Trace permite registrar los accesos a la base de datos, bloqueo de actividades, y
llamadas remotas de reportes y transacciones en un archivo para desplegar el log de
funcionamiento como una lista. Esto tambin proporciona el apoyo para analizar registros de
rastreo individuales. SQL Trace adems ofrece grandes facilidades analizando registros de
rastreo individuales de una manera detallada.
La manera de accesarla es:

A travs del cdigo de transaccin ST05.

Desde el rbol de navegacin del men SAP->Herramientas->Workbench


ABAP->Test->Trace SQL

En la pantalla inicial, se puede comenzar y detener la grabacin del trace. A partir del
momento en que se activa la funcin de rastreo (trace), y hasta el momento en el que se
desactive, toda la actividad de la base de datos que ocurre para un usuario especfico o para
un sistema completo es almacenada y registrada en un archivo de rastreo. Se puede restringir

Xioma Consulting - ABAP WORKSHOP"

130

la cantidad de datos desplegados en pantalla poniendo un filtro de despliegue. Los datos se


pueden mostrar como una lista bsica o en una lista ampliada.

Performance Analysis contiene las siguientes opciones de rastreo:

SQL Trace

Enqueue Trace

RFC Trace

Buffer Trace

SQL Trace
SQL Trace le permite ver como el cdigo OPEN SQL que se usa en programas
ABAP es convertido a declaraciones de SQL estndar y los parmetros con los cuales las
declaraciones integradas SQL son pasadas al sistema de base de datos.

Del SQL Trace generado se puede determinar:

Cuales instrucciones SQL utiliza la aplicacin

Que valores usa el sistema para determinados accesos y cambios a la base de


datos.

Como traduce el sistema comandos OPEN SQL de ABAP en comandos SQL


estndar.

En que punto ejecuta COMMIT la aplicacin.

Donde la aplicacin hace accesos de base de datos repetidos.

Enqueue Trace
Permite rastrear las instrucciones de bloqueo y desbloqueo que se utilizan en una
aplicacin, y los objetos de bloqueo y parmetros en el cual se aplican. Se puede desplegar y
analizar las entradas del trace registradas en el archivo de rastreo.
Cuando enqueue trace esta habilitado, el sistema registra todo las instrucciones de
bloqueo y desbloqueo que ocurren para un usuario o grupo de usuarios.

Xioma Consulting - ABAP WORKSHOP"

131

El registro contiene la siguiente informacin:

Instrucciones de bloqueo ejecutadas.

Nombre de tablas del evento de bloqueo.

Nombre del programa que coloca el bloqueo.

Tipo de bloqueo.

Dueo del bloqueo.

Tiempo total utilizado por el bloqueo.

Tiempo requerido por el servidor de bloqueos para liberar el bloqueo.

RFC Trace
Se puede rastrear cuales llamadas remotas han sido ejecutadas desde la aplicacin o
el Sistema SAP, y en cuales instancias han sido ejecutadas esas llamadas. Se puede mostrar
y analizar los registros de rastreo en el archivo de rastreo.
Del archivo de rastreo se puede deducir lo siguiente:

Qu mdulos de funcin han sido llamados remotamente por el programa a


ser analizado.

Si el RFC fue ejecutado satisfactoriamente.

El tiempo total utilizado en procesar la llamada remota.

El tipo de comunicacin RFC (RFC cliente o RFC servidor).

En qu instancia fue ejecutada la llamada remota.

Qu parmetros tcnicos componen la instancia.

El nmero de bytes enviados y recibidos por el RFC.

Buffer trace
Utilizando la opcin buffer trace se puede monitorear los accesos realizados al buffer
de tablas. Por defecto, los registros son agrupados por secuencia de instrucciones en una
lnea.
Cuando la opcin buffer trace esta activo, el sistema almacena los accesos del buffer
de un usuario o un grupo de usuarios.
Buffer trace indica:

Qu instrucciones ejecutan accesos al buffer.

Xioma Consulting - ABAP WORKSHOP"

132

Cuales operaciones de buffer son realizadas.

Cmo es administrado el buffer.

Utilizando Performance analysis


Se ejecuta la transaccin ST05 (Performance Analysis)
En esta aplicacin se seleccionan los indicadores de las opciones de rastreo que se quieren
ejecutar.

Posteriormente se selecciona la opcin del men Trace->Trace on.

En un nuevo modo se ejecuta la transaccin a la que se le desea habilitar la funcionalidad


BADI, se realizan los pasos que se requieren de la aplicacin.
Luego se regresa a la transaccin ST05, y se selecciona la opcin del men Trace->Trace
off.

Xioma Consulting - ABAP WORKSHOP"

133

Posteriormente se selecciona la opcin del men Trace->Display Trace.

Al hacer esto aparecer la ventana Set Restrictions for Displaying Trace

Aqu se puede seleccionar la opcin de rastreo (SQL Trace, Enqueue Trace, RFC Trace,
Buffer Trace), y si se desea hacer una lista de rastreo, lista de rastreo detallado, o una lista de rastreo
ordenada por fecha y hora.

Xioma Consulting - ABAP WORKSHOP"

134

Se presiona el botn Display Trace List

Aparecer una lista con llamados a la Base de Datos

Aqu es donde se puede dar el seguimiento de las operaciones obtenidas por el rastreo.
Si se da doble clic a las operaciones entonces se obtendr informacin ms detallada de la
instruccin seleccionada.

Xioma Consulting - ABAP WORKSHOP"

135

Log de Sistema
Se utiliza para sealar y corregir errores que ocurren en el sistema.
La manera de accesarla es:

A travs del cdigo de transaccin SM21.

Desde el rbol de navegacin del Men SAP->Herramientas->Workbench


ABAP->Test->Log de sistema.

El campo "System log entries read" dice cuantas entradas del archivo del log ha ledo
el sistema, inicia con 0.

Seleccionando tipo de log


En el men Log de Sistema->Seleccionar se encuentran varias posibles tipos de log
de sistema a analizar:
SysLog local: Mensajes del servidor de aplicaciones del que se encuentra conectado.

Xioma Consulting - ABAP WORKSHOP"

136

Log de sistema remoto: Log de otro servidor de aplicaciones. Para especificar un


determinado sistema remoto se usa la opcin nombre de instancia.
Todos los log de sistema remotos: El log del sistema en el cual actualmente se esta
loggueado, junto con todos aquellos otros servidores de aplicacin en el mismo sistema.
Log de sistema central: Si se quiere usar esta opcin, se debe haber configurado a
todos los servidores de aplicacin tal que ellos enven los mensajes del log local al log
central. La informacin en el log del sistema central puede diferenciarse de los datos en los
logs individuales locales.

Entorno
El men Entorno provee las siguientes funcionalidades:
Visualizar SAPPARAM: Despliega la configuracin de los parmetros del log en el
perfil del sistema.
Mostrar autorizaciones: Muestra las autorizaciones requeridas por el log de
sistema.
Relojes: Despliega el reloj de sistema que se usa como referencia para determinar la
fecha y hora que ser asignada en el log. Esto para reconocer diferencias de tiempos entre
mensajes de distintos servidores de aplicaciones.
Status de procesos: Despliega el estado actual de los procesos enviados en el log de
sistema.

Leyendo un Reporte log


Para desplegar el log del sistema actual se seleccionan los criterios de filtrado a
aplicar al log, y se presiona el botn Nueva lectura log de sistema, el sistema despliega
una tabla con las entradas del log de sistema que corresponden al criterio seleccionado.
Se puede agrupar el resultado del reporte con la opcin del men Log de sistema>Clasificar, existen diversos criterios de clasificacin.

Xioma Consulting - ABAP WORKSHOP"

137

Se puede desplegar informacin detallada de una entrada especifica seleccionando la


entrada y seleccionando la opcin del men Tratar->Detalles.

Xioma Consulting - ABAP WORKSHOP"

138

Anlisis Dump
Un anlisis Dump es una lista que permite identificar las causas y posibles
soluciones a errores en un programa. El Workbench de ABAP genera un dump siempre que
un reporte o transaccin se terminen debido a un error serio. El sistema ingresa el error en el
log del sistema y crea un snapshot del programa al momento de suceder el error, y lo
almacena en una tabla llamada SNAP.

La manera de accesarla es:

A travs del cdigo de transaccin ST22.

Desde el rbol de navegacin del men SAP->Herramientas->Workbench


ABAP->Test->Anlisis Dump.

Los anlisis Dump dan al usuario o al programador informacin sobre las causas del
error que hacen que el programa se cierre abruptamente. Se pueden usar para identificar
rpidamente donde y por qu ocurri el error.

Parte de la informacin que contiene el Snapshot:

Por qu termino el programa.

Qu caus la terminacin del programa.

En que parte del cdigo fuente ocurri la finalizacin del programa.

Qu se puede hacer para corregir el error.

Valores de campos cuando el programa termin.

Las llamadas o eventos que fueron activados cuando el programa termin.

Otros programas que fueron afectados.

Xioma Consulting - ABAP WORKSHOP"

139

Utilizando el Anlisis Dump


Seleccionar las opciones de filtrado a aplicar.

Presionar el botn Inicio o ir a la opcin del men Errores tiempo ejecucin>Visualizar.


Se desplegar una lista con los errores que cumplen con los criterios de filtrado.

Xioma Consulting - ABAP WORKSHOP"

140

Para ver la informacin detallada del error se selecciona la lnea que se desea revisar
y se presiona doble clic, o se selecciona el botn buscar

Aqu aparecer la explicacin de los motivos del error, a travs de esta es que se
podr hacer el anlisis a profundidad de a qu se debi el error.

Xioma Consulting - ABAP WORKSHOP"

141

CRE ACI N D E F U N CI ONES ( SE 37 )


Las funciones son similares a los procedimientos, pero como ya se mencion anteriormente
se comportan como una caja negra. Su definicin es global en el sistema, por lo cual no es
necesario definirlas en el programa. Las funciones en ABAP se manipulan por medio de la
transaccin SE37. Existen ya una cantidad considerable de funciones estndar definidas en el
sistema y que estn disponibles para el desarrollador.
A continuacin se explicarn los pasos necesarios para crear una funcin. Primero se deber
crear un grupo de funciones y luego se crear la funcin.

Creacin de un grupo de funciones


Los grupos de funciones contienen mdulos de funciones. Estos grupos y mdulos se
administran en la biblioteca de funciones, que se invoca por medio de la transaccin SE37.

Para crear un grupo de funciones se utiliza el men principal con la opcin Pasar a
> Gestin gr. funciones > Crear grupo

Xioma Consulting - ABAP WORKSHOP"

142

En esta pantalla se debe ingresar el nombre del grupo de funciones, una descripcin
breve y el responsable.

Al hacer click en Grabar el sistema solicitar la creacin de una orden de transporte.


Una vez creado satisfactoriamente el grupo de funciones, Deben activarse el programa de
control y sus respectivos includes.

Creacin de una funcin


Para crear una funcin se utiliza la transaccin SE37. Se introduce el nombre de la
funcin y se da click en Crear.

Xioma Consulting - ABAP WORKSHOP"

143

Luego se coloca el Grupo de Funciones dentro del cual estar la funcin y una
descripcin breve. Se indicar el grupo de funciones ZGRUPO_PRUEBA creado en el paso
anterior.

Una vez colocados los datos se da click en Grabar.

El sistema mostrar el Function Builder. Aqu se tienen cuatro tipos de parmetros


que pueden ser creados: IMPORTING, EXPORTING, CHANGING y TABLES. Adems de
una pestaa EXCEPTIONS y otra para el CODIGO FUENTE de la funcin.
Xioma Consulting - ABAP WORKSHOP"

144

Importing
Estos son los parmetros de entrada de la funcin. Cuando la funcin es invocada, un
parmetro actual vlido debe ser especificado para cada parmetro importing que no sea
opcional. El valor que se les transfiere en la invocacin no cambia durante la ejecucin de la
funcin.

Exporting
Estos son los parmetros de salida de la funcin. Cuando se invoca la funcin, un
parmetro actual puede ser especificado para cada parmetro exporting. El contenido del
parmetro exporting es transferido al parmetro actual si la ejecucin de la funcin finaliza
sin errores.

Xioma Consulting - ABAP WORKSHOP"

145

Changing
Estos son parmetros tanto de entrada como de salida. Cuando la funcin es
invocada, un parmetro actual vlido debe ser especificado para cada parmetro changing
que no sea opcional. El contenido del parmetro changing es transferido al parmetro actual
si la ejecucin de la funcin finaliza sin errores.

Tables
Igual que los parmetros changing, estos son parmetros tanto de entrada como de
salida, pero solo pueden ser usados para transferir tablas estndar con header line. En este
ejemplo no utilizaremos este tipo de parmetro.

Xioma Consulting - ABAP WORKSHOP"

146

Exceptions
Se utilizan para capturar un tipo de error especfico durante el tiempo de ejecucin,
de tal manera que se produzca un dump (error fatal) que cancele bruscamente la ejecucin
de la funcin.
EXCEPTIONS lista las excepciones que se manejan cuando el programa realiza la
llamada. Al final de la lista de excepciones, se puede usar OTHERS para referirse al resto de
las excepciones.
Si una de las excepciones listadas ocurre, SY-SUBRC toma el valor definido en la
seccin Exceptions y el control es devuelto al programa principal.

Xioma Consulting - ABAP WORKSHOP"

147

Hay dos maneras de manejarlo:


RAISE <excepcin>.
MESSAGE ... RAISING <excepcin>.

RAISE <excepcin>
La instruccin RAISE excepcin lo que hace es detener la ejecucin de la
funcin, y asignar al SY-SUBRC el valor correspondiente a lo asignado en la seccin
de EXCEPTIONS del CALL FUNCTION.
Ejemplo:
CALL FUNCTION ... EXCEPTIONS div_cero = 5.
cdigo del programa principal
IF SY-SUBRC = 5.
MESSAGE Division por Cero.
cdigo del programa principal
ENDIF.
cdigo en el mdulo de funciones
FUNCTION division IMPORT n1 n2 EXPORT result
EXCEPTION div_zero.
IF n2 = 0.
RAISE div_zero. elevar excepcin
ELSE.

Xioma Consulting - ABAP WORKSHOP"

148

ENDIF.

result = n1 / n2.

ENDFUNCTION.

MESSAGE ... RAISING excepcin


Esta instruccin igualmente asigna al SY-SUBRC el valor correspondiente a lo
asignado en la seccin EXCEPTIONS del CALL FUNCTION. En la funcin se
dispara la excepcin utilizando la siguiente estructura:
MESSAGE ID id_mensaje TYPE tipo NUMBER nmero RAISING
excepcion
Y luego donde se invoc la funcin se construye el mensaje dinmicamente
utilizando el contenido de los campos del sistema SY-MSGID , SY-MSGTY , SYMSGNR y SY-MSGV1-4.

Ejemplo:
CALL FUNCTION division EXCEPTIONS div_zero = 5.
cdigo programa principal
IF SY-SUBRC = 5.
cdigo del programa principal
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3.
ENDIF.
cdigo en el mdulo de funciones
FUNCTION division IMPORT n1 n2
EXPORT result EXCEPTION div_zero.
IF n2 = 0.
MESSAGE ID XXX TYPE E NUMBER 001
WITH Error en proceso n2 no es un divisor vlido
RAISING div_zero.
elevar excepcin asignando valores de retorno
Alternativamente puede usar la siguiente estructura:
MESSAGE E001(ZMM) RAISING EXCEP1.
mensaje 001 de tipo error (E) de la clase ZMM
ELSE.
result = n1 / n2.
ENDIF.
ENDFUNCTION.

Cdigo Fuente
Aqu se escribe el cdigo de la funcin.

Xioma Consulting - ABAP WORKSHOP"

149

En este ejemplo la funcin lo nico que hace es devolver el stock disponible para un
material que se encuentra en un lote, una ubicacin, un centro y un almacn. Si no se
encuentra el material, la funcin devuelve un mensaje de error.

Xioma Consulting - ABAP WORKSHOP"

150

B U S INE S S AP P LICATION P ROG RAMMI N G I NTERFACE ( BAP I )


Una BAPI (Business Application Programming Interface) es una funcin de SAP que
permite llevar a cabo una tarea funcional. Por ejemplo, una BAPI puede decir la disponibilidad de
un material, crear un pedido o incluso un documento financiero.
Existen una gran cantidad de BAPIs disponibles para que sean utilizados por los
desarrolladores, de ah su nombre que viene del viejo concepto de API (Application Programming
Interface). Su aparicin en SAP R/3 fue a partir de la versin 3.1 y se hizo para permitir la
integracin de software entre SAP R/3 y otros fabricantes de software. El nmero total de BAPIs se
ha ido incrementando con la liberacin de nuevas versiones de SAP R/3.
Los objetos contenidos en el repositorio encapsulan los datos y procesos. De esta forma el
acceso a los datos y procesos, por agentes externos, es permitido solo mediante mtodos especficos; representados estos por su BAPI correspondiente. De esto ltimo se desprende que una BAPI
no es ms que un mtodo de un Objeto de Negocio de SAP R/3. Por ejemplo, la funcionalidad implementada para el objeto tipo "Customer" incluye una verificacin para la existencia del cliente.
De esta forma el tipo de objeto "Customer" posee una BAPI llamada "Customer.CheckExistence".
Para que un programa de aplicacin sea capaz de usar la BAPI de un mtodo, solo necesita
saber como invocar el mtodo; es necesario conocer la definicin de la interfase del mtodo. La
interfase de una BAPI se define por:

.- Parmetros de Entrada( Import Parameters )


.- Contiene datos a ser pasados desde el programa llamante a la BAPI
.- Parmetros de Salida( Export Parameters )
.- Contiene los datos que la BAPI pasa al programa invocante
.- Tablas de Entrada/Salida( Import/Export Table Parameters )

Xioma Consulting - ABAP WORKSHOP"

151

Para conocer los parmetros que utiliza una BAPI especfica se puede hacer de las siguientes maneras:
1. Ingresando a la transaccin BAPI.

A. rbol de Navegacin Organizado ya sea de manera jerrquica o alfabticamente, aqu se


busca el nombre de la BAPI requerida segn sea su categora o su nombre, es importante
recordar que por lo general todas las BAPIs comienzan con esta palabra en sus nombres
como por ejemplo: BAPI_GOODSMVT_CREATE, la cual es utilizada para el movimiento de mercancas.
B. Pestaa de opciones y propiedades de una BAPI, aqu se ve informacin relacionada con
una BAPI especifica como es su descripcin, modulo de funciones a la que pertenece y
documentacin entre otras.
C. En el Campo Mdulo de Funciones al dar doble-click aparece la pantalla donde se encuentra el cdigo fuente de la BAPI.
\

Xioma Consulting - ABAP WORKSHOP"

152

2. Ingresando a la Transaccin SE37.

A. SE coloca el nombre de la BAPI en caso de conocerlo, de no ser as, se puede colocar en


este campo BAPI* y de esta manera obtener como resultado todas las BAPIs disponibles,
una ves seleccionada la BAPI se selecciona visualizar y aparece el cdigo fuente de la BAPI.
Cdigo Fuente BAPI.
Al ser una funcin la visualizacin de los parmetros, cdigo o pruebas de la BAPI se realizan desde la transaccin SE37. Las diferentes pestaas ubicadas en la parte superior muestran los
parmetros de entrada, de salida y las tablas que requiere la BAPI para realizar un proceso especfico.
Generalmente es complicado saber para un proceso determinado, usando una BAPI X que
datos se deben enviar para poder obtener el resultado requerido la manera ms comn es analizar
estos parmetros basndose en sus descripciones para as reunir todo lo necesario para realizar el
proceso.
En la actualidad las BAPIs del sistema SAP R/3 se implementan como mdulos de funciones que se tratan con el Function Builder del Workbench ABAP. Cada mdulo de funcin que da
soporte a una BAPI debe cumplir los requisitos siguientes:
.- Soportar el Protocolo Remote Function Call( RFC )
.- Haber sido asignada como un mtodo a un Objeto de Negocio SAP
.- Debe procesarse sin retornar ventanas de dilogo al programa llamante

Xioma Consulting - ABAP WORKSHOP"

153

Ventajas de usar BAPIs


Las BAPIs son mtodos estandarizados de los Objetos de Negocio SAP R/3, que permiten la integracin de los componentes de software de los clientes y de terceros. Algunas de las ventajas de
usar BAPIs son:
.- Es un Estndar de Negocio
.- Es un Estndar Consensuado
.- Garantiza estabilidad y compatibilidad futura
.- Garantiza orientacin a objetos
.- Independencia de entorno( apertura )

Usar BAPIs en programas de aplicacin


Actualmente una BAPI puede ser invocada de dos formas diferentes:
.- Llamar la BAPI en el repositorio
.- Hacer llamada RFC a la funcin que implementa la BAPI
Ejemplo de llamada de una BAPI
*
*

Fecha de posteo
lw_goodsmvt_header-pstng_date =

SY-DATUM.

Fecha de documento
lw_goodsmvt_header-doc_date =

tipo de movimiento
lw_goodsmvt_item-move_type = c_move_type.

codigo de material
lw_goodsmvt_item-MATERIAL = WG_M.

Material Receptor
lw_goodsmvt_item-MOVE_MAT = WG_M.

SY-DATUM.

call function 'BAPI_GOODSMVT_CREATE'


exporting
goodsmvt_header = lw_goodsmvt_header
goodsmvt_code
= c_goodsmvt_code
importing
materialdocument = l_materialdocument
matdocumentyear = l_matdocumentyear
tables
goodsmvt_item
= lt_goodsmvt_item
return
= t_return.
IF SY-SUBRC NE 0. "Si no hubo errores

Xioma Consulting - ABAP WORKSHOP"

154

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
WAIT
= 'X'.
WL_RETURN-TYPE = 'S'.
MESSAGE ID 'S1' TYPE 'S' NUMBER '333' WITH 'Creado Doc
material: '
l_materialdocument
'Ao: '
l_matdocumentyear.
ELSE. "Si hubieron errores
WG_ERROR = 'X'.
ENDIF.

Xioma Consulting - ABAP WORKSHOP"

155

BATCH I NP U TS
La creacin de Batch Inputs no es ms que un proceso automtico que permite usar un guin
para ejecutar transacciones de forma masiva. Cuando se habla de Bacth-Input se puede estar
refiriendo a un fichero plain-text que necesita que un programa standard (o propio) recoja dicha
informacin, o un programa que simula el proceso de llenado de las pantallas como si el usuario
estuviese delante.

Crear una grabacin


Para crear una grabacin se ingresa a la transaccin SM35 y se da click en el botn
o se accesa directamente desde la transaccin SHDB dando click en
y aparece la siguiente ventana donde se coloca el nombre de la grabacin y el cdigo de
transaccin. En este ejemplo es MM01 y se da click en Iniciar Grabacin.

Xioma Consulting - ABAP WORKSHOP"

156

1. Ingresar los datos necesarios:


a. Material: (si es nmero externo colocar el cdigo, si es nmero interno el sistema lo
dar automticamente) Para este caso es externo.
b. Ramo: Ramo de la empresa (en este caso es Alimentos)
c. Tipo de material: es el tipo de material que vamos a crear ( en este caso es Salchicha)

2. Dar Enter
3. En la siguiente pantalla seleccionar las vistas que se van a crear para este material. Para este
ejemplo sern las de Datos bsicos 1 y 2.

Xioma Consulting - ABAP WORKSHOP"

157

4. Dar Enter o click en


5. En la vista de Datos bsicos 1 colocar los siguientes datos
a. Descripcin del material
b. UMB

Xioma Consulting - ABAP WORKSHOP"

158

6. Dar Enter
7. En la vista de Datos bsicos 2 colocamos la informacin correspondiente en los siguientes
campos:
a. Denominacin estndar
b. Formato DIN

Xioma Consulting - ABAP WORKSHOP"

159

8. Dar Enter para la siguiente pantalla:

Xioma Consulting - ABAP WORKSHOP"

160

9. Dar click en la opcin Si para el mensaje que indica que se ha creado el material.

Click en Guardar y volver a la transaccin SHDB donde aparece el ejemplo

Xioma Consulting - ABAP WORKSHOP"

161

Se marca y click en
, y aparece la siguiente pantalla donde se coloca el nombre del
programa donde se va a generar el cdigo de dicha grabacin.

Se introduce la descripcin

Y por ltimo click en


principal.

para que genere el cdigo que se va a utilizar en el programa

Xioma Consulting - ABAP WORKSHOP"

162

B AS E S D E DAT OS L G I CAS
Las bases de datos lgicas son programas especiales ABAP que recuperan datos y los hacen
disponibles para programas de uso. El empleo ms comn de bases de datos lgicas es leer
informacin de la base de datos y unirlos a programas ejecutables ABAP.
Sin embargo, desde la versin 4.5A, tambin ha sido posible llamar bases de datos lgicas
que usan el mdulo de funcin LDB_PROCESS. Esto le permite llamar varias bases de datos
lgicas de cualquier programa ABAP. Es tambin posible llamar una base de datos lgica ms de
una vez en un programa.

Funciones de las bases de datos lgicas


Adems de permitir leer datos de la base de datos, las bases de datos lgicas tambin
son utilizadas para las siguientes tareas:
Lectura de los mismos datos para varios programas: Los programas individuales no
necesitan conocer la estructura exacta de las tablas de base de datos relevantes (y menos sus
llaves forneas).

Definicin de la misma interfaz de usuario para varios programas: Las Bases de datos
lgicas tienen una pantalla de seleccin establecida. Por lo tanto, todos los programas que
usan la base de datos lgica tienen la misma interfaz de usuario.

Comprobacin de autorizacin central: Las comprobacin de autorizacin para datos


centrales y sensibles pueden ser programadas en el centro de la base de datos para
impedirlos y de ese modo evitar el uso de programas simples.

Mejor funcionamiento: Si se quiere mejorar los tiempos de respuesta, las bases de datos
lgicas le permiten tomar un nmero de medidas para lograrlo (por ejemplo, el uso JOINS
en vez de SELECT anidados).

Xioma Consulting - ABAP WORKSHOP"

163

Creacin de una base de datos lgica (SE36)


Para la creacin, modificacin o uso de bases de datos lgicas se cuenta con un
Generador de Bases de Datos Lgicas, y se puede acceder de la siguiente forma:
1)Al hacer login en la aplicacin, en la barra de men, click en herramientas -> Workbench
ABAP -> Desarrollo -> Entorno de Programacin -> Bases Datos Lgicas.

2)Directamente mediante la transaccin SE36.

Xioma Consulting - ABAP WORKSHOP"

164

Seguidamente aparece la pantalla del Generador de bases de datos lgicas.

El siguiente ejemplo utiliza 5 tablas Z que son: ZTESTUDIANTES, ZTNOTAS,


ZTPROFES, ZTPROFES_CURSO y ZTCURSOS en donde ZTESTUDIANTES es el nodo
raz o principal

Xioma Consulting - ABAP WORKSHOP"

165

Se introduce la descripcin de la base de datos lgica

Se coloca el nombre del nodo raz, la descripcin y se especifica el tipo de nodo, para
este caso el nodo raz se llamara ZTESTUDIANTES

Aparece la base de datos lgica con el nico nodo creado hasta el momento

Se procede a insertar los nodos, se marca el nodo actual y click en

Xioma Consulting - ABAP WORKSHOP"

166

Aparece una pantalla en donde se coloca el nombre del nodo que se va a insertar
(ZTNOTAS), la descripcin, se escoge debajo de cual nodo se va a insertar y por ltimo
se especifica el tipo

Se repite el proceso con todos los nodos q se van a insertar y al final quedara la base de
datos lgica de la siguiente forma

Se crean los campos de seleccin (SELECT-OPTIONS), click en


Por ser la primera vez, nos va a mostrar la siguiente pantalla donde se marca para cuales
nodos se quiere que hayan delimitaciones opcionales y SELECT-OPTIONS

Xioma Consulting - ABAP WORKSHOP"

167

De esta forma se crea el include de los SELECT-OPTIONS en donde se cambian los ?


que se generan automticamente por los nombres que se desean, para el ejemplo se
crearon 3: S_EST(estudiantes), S_MAT(cursos) y S_PROF(profesores).

Xioma Consulting - ABAP WORKSHOP"

168

Se regresa a la pantalla principal con

y click en

El nombre del programa creado es SAPDBZLDB_EXAMPLE02 en donde: las primeras 5


letras son SAPDB y van a ser constantes, seguido del nombre de la base de datos lgica
ZLDB_EXAMPLE02
Se genera el programa automticamente con dos includes principales

Donde el include TOP contiene la declaracin de las tablas que se insertaron como
nodos

Xioma Consulting - ABAP WORKSHOP"

169

Y el include NXXX contiene los includes de cada nodo insertado en la base de datos
lgica.

Xioma Consulting - ABAP WORKSHOP"

170

En donde cada include creado por nodo van a haber dos FORMS generados
automticamente y que se pueden modificar dependiendo de lo que se requiera, se puede
ver el caso del include para el nodo ZTESTUDIANTES

El nombre del primer FORM creado es PUT_ZTESTUDIANTES en donde: los primeros


4 caracteres son PUT_ y van a ser constantes, seguido del nombre del nodo
ZTESTUDIANTES.
Y el segundo FORM AUTHORITYCHECK_ZTESTUDIANTES va a estar formado por
AUTHORITYCHECK_, seguido del nombre del nodo ZTESTUDIANTES

Importante: el FORM PUT_ZTESTUDIANTES tiene la siguiente lnea:


PUT ZTESTUDIANTES.
Ah es donde enva el resultado de la bsqueda realizada, en el programa de control el
resultado se va a recibir por medio del evento:
GET ZTESTUDIANTES.
Despus de modificar los includes para cada nodo, se regresa a la pantalla principal y se
da click en
anteriormente

para modificar el texto de los SELECT-OPTIONS que se crearon

Xioma Consulting - ABAP WORKSHOP"

171

Creacin del programa (SE38)


Ahora se procede a crear el programa ejecutable para unirlo con la base de datos
lgica.
Se accesa directamente desde la SE38

Se crea el programa de ejemplo ZLDB_PRUEBA02

Xioma Consulting - ABAP WORKSHOP"

172

En los atributos del programa se coloca la descripcin del mismo, adems se escoge el tipo
(Programa Ejecutable) y lo mas importante se introduce el nombre de la Base de datos
lgica que se creo anteriormente (ZLDB_EXAMPLE02)

Y por ltimo con un pequeo cdigo se extrae la informacin requerida

Xioma Consulting - ABAP WORKSHOP"

173

Y as se vera el programa al momento de ejecutarlo (con los SELECT-OPTIONS que se


crearon en la base de datos lgica)

Funcin LDB_PROCESS
El mdulo de funciones permite que se llame una base de datos lgica directamente
en el mismo modo interno. Los registros ledos por la base de datos lgica se traspasan a las
subrutinas CALLBACK indicadas.
La profundidad de lectura se determina mediante los eventos deseados que se han
indicado en el parmetro CALLBACK. Puede haber como mximo dos llamadas por nodo

Xioma Consulting - ABAP WORKSHOP"

174

que se correspondan con los eventos GET nodo o GET nodo LATE en SUBMIT. Es decir, si
el campo "GET" est marcado, se llamar la subrutina CALLBACK directamente despus
de la lectura de los datos y antes del procesamiento del subrbol que se halla en la base. Si
est marcado "GET_LATE", se llamar la subrutina CALLBACK despus de procesar el
subrbol que se halla en la base.

A pesar de que se pueden llamar diferentes bases de datos lgicas anidadas de la


forma que se desee, existen las siguientes restricciones en cuanto al procesamiento de la
misma base de datos lgica:
a. No se puede volver a llamar la misma base de datos lgica mientras no est finalizada otra ejecucin (excepcin LDB_ALREADY_RUNNING).
b. Se puede llamar varias veces consecutivamente la misma base de datos lgica cuando est prevista para ello (excepcin LDB_NOT_REENTRANT). Que est prevista
para ello significa que el programa de base de datos contiene una subrutina
(LDB_PROCESS_INIT) que prepara la base de datos lgica para un paso posterior.

Existen varias posibilidades para indicar limitaciones de la base de datos que, en su


mayora, se corresponden con el traspaso de parmetros en SUBMIT.

SELECTIONS: estructura RSPARAMS. Se corresponde con el suplemento WITH


SELECTION-TABLE en SUBMIT.

VARIANT: nombre de una variante que pertenece al programa de base de datos de la base
de datos lgica. Se corresponde con el suplemento USING SELECTION-SET en SUBMIT.

EXPRESSIONS: delimitaciones opcionales en el formato RSDS_TEXPR. Se corresponde


con el suplemento WITH FREE SELECTIONS en SUBMIT.

La regulacin en caso de conflicto es idntica a SUBMIT: las delimitaciones


almacenadas en la variante VARIANT se sobrescriben con las indicadas de forma explcita
en SELECTIONS. De forma similar, las delimitaciones opcionales archivadas en la variante
se sobrescriben con las traspasadas de forma explcita en EXPRESSIONS.

Xioma Consulting - ABAP WORKSHOP"

175

El siguiente es un ejemplo del uso de la funcion LDB_PROCESS llamando a la base de


datos logica ZLD_EXAMPLE02
REPORT

ZLDB_PRUEBA01.

TABLES ZTESTUDIANTES.
SELECT-OPTIONS SL_EST FOR ZTESTUDIANTES-ZID_EST.
TYPE-POOLS: RSDS, RSFS.
DATA: CALLBACK TYPE TABLE OF LDBCB,
CALLBACK_WA LIKE LINE OF CALLBACK,
SELTAB TYPE TABLE OF RSPARAMS,
SELTAB_WA LIKE LINE OF SELTAB,
TEXPR TYPE RSDS_TEXPR,
FSEL TYPE RSFS_FIELDS.
***

FORM's que se ejecutan una vez que se llama la LDB

CALLBACK_WA-LDBNODE
CALLBACK_WA-GET
CALLBACK_WA-GET_LATE
CALLBACK_WA-CB_PROG
CALLBACK_WA-CB_FORM

=
=
=
=
=

***

'ZTESTUDIANTES'.
X.
X.
SY-REPID.
'CALLBACK_ZTESTUDIANTES'.

APPEND CALLBACK_WA TO CALLBACK.


CLEAR CALLBACK_WA.
CALLBACK_WA-LDBNODE
= 'ZTNOTAS'.
CALLBACK_WA-GET
= X.
CALLBACK_WA-CB_PROG
= SY-REPID.
CALLBACK_WA-CB_FORM
= 'CALLBACK_ZTNOTAS'.
APPEND CALLBACK_WA TO CALLBACK.
***S_EST es el SELECT-OPTIONS creado en ZLD_EXAMPLE02***

Xioma Consulting - ABAP WORKSHOP"

176

SELTAB_WA-KIND = 'S'.
SELTAB_WA-SELNAME = 'S_EST'.
LOOP AT SL_EST.
MOVE-CORRESPONDING SL_EST TO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.
ENDLOOP.
********** Funcion para llamar LDB a partir de la version 4.5A **********
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
***********Nombre de base de datos logica que se creo**********
LDBNAME
= 'ZLDB_EXAMPLE02'
VARIANT
= ' '
EXPRESSIONS
= TEXPR
FIELD_SELECTION
= FSEL
TABLES
CALLBACK
= CALLBACK
SELECTIONS
= SELTAB
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.
IF SY-SUBRC <> 0.
WRITE: 'Exception with SY-SUBRC', SY-SUBRC.
ENDIF.
FORM CALLBACK_ZTESTUDIANTES USING NAME TYPE LDBN-LDBNODE
WA
TYPE ZTESTUDIANTES
EVT
TYPE C
CHECK TYPE C.
CASE EVT.
WHEN 'G'.
WRITE: / WA-ZNOMBRE, WA-ZAPE1, WA-ZAPE2.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM.
FORM CALLBACK_ZTNOTAS USING NAME
WA
EVT
CHECK
WRITE: / WA-ZNOTA.
ENDFORM.

Xioma Consulting - ABAP WORKSHOP"

TYPE
TYPE
TYPE
TYPE

LDBN-LDBNODE
ZTNOTAS
C
C.

177

OBJE CTOS D E AU T ORIZ ACI N


Creacin de un objeto de autorizacin (SU21)
Para crear un objeto de autorizacin se utiliza la transaccin SU21. A travs de esta
transaccin se pueden crear, visualizar o modificar dichos objetos que a nivel de cdigo
ABAP son verificados a travs de la instruccin Authority-check. Estos objetos se suelen
agrupar por clases.

Para crear el nuevo objeto es necesario seleccionar la clase en la cual se debe incluir,
a travs de un doble click. En caso de querer crear una clase nueva se da click en el botn
donde se indicara el nombre de la clase y la descripcin. Una vez dentro de la clase se
utiliza de nuevo el botn

para crear el nuevo objeto de autorizacin.

Xioma Consulting - ABAP WORKSHOP"

178

Creacin de la clase

Acceso a la clase creada

Los objetos de autorizacin estn compuestos por el nombre del objeto, una
descripcin, la clase a la que pertenecen y los mbitos de autorizacin correspondientes.
Estos ltimos definen el comportamiento del objeto y estn determinados por un elemento
de datos y un dominio (pueden ser creados nuevos mbitos por medio de la transaccin
SU20).

Xioma Consulting - ABAP WORKSHOP"

179

Es usual utilizar un mbito que determine las acciones que se pueden ejercer sobre el
objeto que se desea evaluar en el authority-check. El mbito ACTVT permite definir estas
acciones.

Xioma Consulting - ABAP WORKSHOP"

180

Una vez finalizado el proceso se visualiza el nuevo registro en el listado de objetos.

Utilizando la transaccin SU03 se asigna el perfil que contiene al objeto de autorizacin.

Authority-check
Las verificaciones de autorizacin se deben realizar antes de tratar de acceder
informacin en la base de datos. La instruccin AUTHORITY-CHECK verifica si el
usuario tiene o no derechos sobre los valores que se desean acceder. Si la variable SYSUBRC vale 0, entonces el usuario tiene derechos suficientes para proseguir, si es 12 el
usuario no tiene permiso suficiente y en el caso de 24 no se especificaron suficientes
parmetros para validar la autorizacin.
Para realizar la verificacin de la autorizacin se hace referencia a los objetos de
autorizacin, estos definen la combinacin de campos que sirven como modelo tanto para
las autorizaciones como para las verificaciones de autorizacin. Se organizan en clases de
objetos para facilitar su administracin y localizacin (transaccin SU21).

Xioma Consulting - ABAP WORKSHOP"

181

Sintaxis:
AUTHORITY-CHECK OBJECT <objeto>
ID <identificador1> {FIELD <campo1>} | DUMMY
...
ID <identificador10>{FIELD <campo10>}| DUMMY.

Ejemplo:
PARAMETERS carr TYPE spfli-carrid.
AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD carr
ID 'ACTVT' FIELD '03'.
IF SY-SUBRC NE 0.
MESSAGE 'Sin autorizacin' TYPE 'E'.
ENDIF.

Se puede utilizar la opcin de patrn en el men del editor para obtener facilmente los
parametros de autorizacin de un objeto. En caso de que no se desee enviar un valor, se
envia en su lugar la palabra DUMMY.

Xioma Consulting - ABAP WORKSHOP"

182

OBJE TOS D E BLOQ U EO


SAP puede sincronizar el acceso simultneo de varios usuarios a los mismos datos con un
mecanismo de bloqueo. Cuando se programan las transacciones interactivas, los bloqueos son
fijados y lanzados llamando funciones de bloqueo y desbloqueo. Estas funciones se generan
automticamente al crear los objetos de bloqueo en el diccionario de ABAP.

Estructura de un objeto de bloqueo


Las tablas en las que los datos se deben bloquear se definen en un objeto de bloqueo
junto con sus campos llave. Cuando se seleccionan las tablas, hay una tabla (la tabla
primaria) que es la que primero se selecciona. Otras tablas (tablas secundarias) se pueden
tambin agregar usando llaves forneas.

Bloquear campos
Los argumentos a bloquear de una tabla en el objeto de bloqueo consisten en los
campos llave de la tabla.

Los campos a bloquear de ese objeto de bloqueo son usados como parmetros de
entrada en las funciones de bloqueo y desbloqueo. Cuando se llaman estas funciones, las
filas de la tabla son especificadas definiendo valores en estos campos. Estos valores pueden
tambin ser genricos. Los campos del bloqueo definen qu subconjunto de las filas de la
tabla debe ser bloqueado.

Xioma Consulting - ABAP WORKSHOP"

183

Crear un Objeto de Bloqueo


Para crear un objeto de bloqueo se utiliza la transaccin SE11.

El nombre del Objeto de bloqueo siempre debe de comenzar con la letra E, y usualmente
posterior a eso se coloca Z_ seguido por el nombre del objeto que se desea bloquear.
Al presionar el botn de Crear, veremos la siguiente pantalla:

Xioma Consulting - ABAP WORKSHOP"

184

Permitir RFC:
Si este indicador est seleccionado,
se podrn llamar los mdulos de
funciones generados durante la
generacin del objeto de bloqueo,
los cuales fijan y liberan bloqueos mediante Remote Function Calls (RFC).

Dependencias
En caso que se active permitir RFC para un objeto de bloqueo existente, deber
asegurarse que la llamada de los mdulos de funciones generados se efecte con parmetros
adecuados al tipo. Antes de activar el objeto de bloqueo con la nueva opcin, debera
verificar todos los programas que utilicen los mdulos de funciones en cuestin.
En el siguiente Tab se encuentran las Tablas a utilizar. En un objeto de bloqueo se
indicarn las tablas en las que deben bloquearse registros con una orden de bloqueo.

Xioma Consulting - ABAP WORKSHOP"

185

Tabla primaria

En la seleccin de tablas se partir de una tabla (tabla primaria).


Modo de bloqueo

Determina cmo sincronizar el acceso de varios usuarios a los registros de la tabla.


Existen los siguientes modos:

Proteccin de escritura: los datos bloqueados pueden ser visualizados o tratados


nicamente por un usuario. Tanto la peticin de otra proteccin de escritura como de
otra proteccin de lectura sern rechazadas.

Proteccin de lectura: Varios usuarios pueden tener acceso de slo lectura a los mismos
datos simultneamente. No obstante, en el momento en que un usuario pase a tratar los
datos, stos quedarn bloqueados para los dems usuarios. Las peticiones de nuevas
protecciones de lectura se aceptarn incluso si stas provienen de otros usuarios. Las
protecciones de escritura sern rechazadas.

Xioma Consulting - ABAP WORKSHOP"

186

Proteccin de escritura ampliada: Igual a la de proteccin de escritura, pero slo puede


ser solicitada una vez por la misma transaccin. Cualquier otra nueva peticin de una
proteccin ser rechazada.

Tablas secundarias

A la tabla primaria pueden aadrsele otras tablas (tablas secundarias) mediante


relaciones de llaves externas.
El tercer Tab es de Parmetros de bloqueo, en el cual se indican los valores que sern
pasados a las funciones de bloqueo y desbloqueo

Nombre de parmetro bloqueo

Un parmetro de bloqueo tiene, por lo general, el mismo nombre que el campo de


tabla correspondiente. Una modificacin ser precisa, por ejemplo, cuando varios campos de
diferentes tablas del objeto de bloqueo tienen el mismo nombre.
Indicador Pond

En caso que este indicador est marcado para el campo, se incluir como parmetro
en los mdulos de funciones generados durante la activacin del objeto de bloqueo.
Estos parmetros sirven para la transmisin de la llave a bloquear o para el control
del comportamiento de bloqueo en la transmisin del valor inicial.
El indicador se fija por defecto. En caso de no necesitar el parmetro de bloqueo en
los mdulos de funciones generados, se puede desmarcar. En este caso, en relacin a este
parmetro, se bloquear siempre de forma genrica.

Xioma Consulting - ABAP WORKSHOP"

187

Al finalizar de realizar los cambios solamente se la da al botn Activar


queden listos los cambios.

para que

Funciones de los Objetos de bloqueo


Cuando se ha creado un objeto de bloqueo automticamente se crean dos funciones,
una para bloquear (ENQUEUE_<nombre objeto de bloqueo>) y otra para desbloquear
objetos (DEQUEUE_< nombre objeto de bloqueo >)
Los mdulos generados de la funcin se asignan automticamente a los grupos de la
funcin. No se debe cambiar estos mdulos de la funcin y su asignacin a los grupos de la
funcin puesto que los mdulos de la funcin son generados nuevamente cada vez que el
objeto de bloqueo es activado.

Parmetros de las funciones


Nombres de campo del objeto de Bloqueo
Las llaves que se bloquearn se deben pasar aqu.
Parmetros para pasar bloqueos al programa de actualizacin
Un bloqueo se quita generalmente en el final de la transaccin o cuando se invoca la
funcin de desbloqueo (DEQUEUE). Sin embargo, no sucede as si la transaccin ha
llamado rutinas de actualizacin. En este caso, un parmetro debe comprobar que se haya
quitado el bloqueo.
El parmetro _SCOPE controla cmo el bloqueo o el desbloqueo se pasa al
programa de actualizacin. Se tiene las opciones siguientes:

_SCOPE = 1: Los bloqueos o los desbloqueos no se pasan al programa de


actualizacin. Se quita el bloqueo cuando se termina la transaccin.
_SCOPE = 2: El bloqueo o el desbloqueo se pasa al programa de actualizacin.
El programa de actualizacin es responsable de quitar el bloqueo. El programa
interactivo con el cual el bloqueo fue solicitada no tiene mas influencia en el
comportamiento del bloqueo. sta es la configuracin estndar de la funcin de
bloqueo (ENQUEUE).
_SCOPE = 3: El bloqueo o desbloqueo tambin se pasa al programa de
actualizacin. El bloqueo se debe quitar en el programa interactivo y en el
programa de actualizacin. sta es la configuracin estndar para la funcin de
desbloqueo (DEQUEUE).

Parmetros para el modo de Bloqueo

Xioma Consulting - ABAP WORKSHOP"

188

Un parmetro MODE_<tabla> existe para cada tabla del objeto de bloqueo. El modo
de bloqueo para esta tabla se puede fijar dinmicamente con este parmetro. Los valores
permitidos para este parmetro son S (bloqueo de lectura), E (bloqueo en escritura), X
(ampliado el bloqueo en escritura), y O (bloqueo optimista).
El modo de bloqueo especificado para la tabla respectiva cuando el objeto de
bloqueo fue creado es el valor por defecto para este parmetro. Este valor prefijado puede,
sin embargo, ser eliminado como sea necesario cuando se invoca la funcin.
Si se modifica este valor por defecto, cuando se haga el desbloqueo debe de tener el
mismo valor que se asign a la funcin de bloqueo.
Control de transmisin de bloqueos
El parmetro _COLLECT controla si la peticin de bloqueo o desbloqueo debe ser
realizada directamente o si debe primero ser escrito al contenedor local de bloqueos (las
peticiones de bloqueo y desbloqueo pueden ser almacenados en un contenedor local de
bloqueos y ser enviados juntos invocando la funcin FLUSH_ENQUEUE). Este parmetro
puede tener los valores siguientes:

Valor inicial: La peticin de bloqueo o desbloqueo se enva directamente al


servidor de bloqueos.
X: La peticin de boqueo o desbloqueo se pone en el contenedor local de
bloqueos. Estos se pueden entonces enviar al servidor de bloqueos agrupados
invocando la funcin FLUSH_ENQUEUE.

Siempre que se usa el modo X del bloqueo (ampliar el bloqueo en escritura), los
bloqueos no se deben enviar al contenedor local de bloqueos si hay asignados muchos
bloqueos para determinada tabla. En este caso, habr una prdida considerable en
funcionamiento en comparacin con la transmisin directa de bloqueos.
Comportamiento en conflicto de bloqueos (solo al bloquear)
La funcin ENQUEUE tambin tiene el parmetro _WAIT. Este parmetro
determina el comportamiento del bloqueo cuando hay un conflicto al bloquear.
Se tienen las opciones siguientes:
Valor inicial: Si un intento de bloqueo falla porque ya hay un bloqueo, se acciona la
excepcin FOREIGN_LOCK.
X: Si un intento de bloqueo falla porque hay un bloqueo, el intento de bloquear se
repite despus de esperar cierto tiempo. Se acciona la excepcin FOREIGN_LOCK
solamente si ha transcurrido cierto lmite de tiempo desde el primer intento de bloqueo. El
tiempo de espera y el lmite de tiempo son definidos por parmetros de perfil.
Controlando borrado del bloqueo de entrada (DEQUEUE solamente)
La funcin de desbloqueo tambin tiene el parmetro _SYNCHRON. Si se pasa el
valor X, la funcin DEQUEUE espera hasta que la entrada de bloqueo se ha quitado de la
tabla de bloqueos. Si no, entonces se suprime asincrnicamente, es decir, si la tabla de

Xioma Consulting - ABAP WORKSHOP"

189

bloqueos del sistema se lee despus de que se quita el bloqueo, la entrada en la tabla de
bloqueos puede existir.
Excepciones de la funcin de ENQUEUE
FOREIGN_LOCK': Ya existe un bloqueo. Se puedes obtener el nombre del usuario
que tiene el bloqueo revisando la variable del sistema SY-MSGV1.
SYSTEM_FAILURE: Se acciona esta excepcin cuando en el servidor de bloqueos
ocurri un problema mientras se fijaba el bloqueo. En este caso, el bloqueo no podr ser
fijado. Si las excepciones no son procesadas por el programa que lo llama, entonces los
mensajes apropiados se despliegan.
Campos de referencia para los objetos de bloqueo RFC activados
El tipo de una funcin RFC debe ser definido completamente.
Los parmetros de la funcin tienen los siguientes campos de referencia para los
objetos RFC:

PARMETROS

CAMPOS

DE

REFERENCIA

X_<nombre campo>

DDENQ_LIKE-XPARFLAG

_WAIT

DDENQ_LIKE-WAITFLAG

_SCOPE

DDENQ_LIKE-SCOPE

_SYNCHRON

DDENQ_LIKE-SYNCHRON

Ejemplo con objetos de bloqueo


Se tiene el caso de reservaciones de vuelos.
Los vuelos se registran en la tabla SFLIGHT y las reservaciones para los vuelos en la
tabla SBOOK. Las dos tablas se relacionan con una llave fornea. El objeto de bloqueo
E_BOOKING debe por lo tanto contener la tabla SFLIGHT como tabla primaria y la tabla
SBOOK como tabla secundaria.

Xioma Consulting - ABAP WORKSHOP"

190

El argumento de bloqueo de la tabla SFLIGHT contiene los campos MANDT,


CARRID, CONNID y FLDATE. El argumento de bloqueo de la tabla SBOOK contiene los
campos MANDT, CARRID, CONNID, FLDATE, BOOKID y CUSTOMID.
Al seleccionar el modo exclusivo de bloqueo hace que los datos puedan ser vistos y
modificados solo por el usuario que lo esta invocando.
Cuando se activa el objeto de bloqueo, los mdulos siguientes de la funcin se
generan de su definicin:
* ENQUEUE_E_BOOKING (ejecuta el bloqueo)
* DEQUEUE_E_BOOKING (libera el bloqueo)
La funcin ENQUEUE_E_BOOKING se invoca de la siguiente manera:

Con esta llamada, el vuelo LH 400 del 29 de noviembre de 1998 esta bloqueado de
manera exclusiva (modo E de bloqueo) en la tabla SFLIGHT junto con todas las
reservaciones incorporadas a la tabla SBOOK para este vuelo (puesto que el valor inicial 0
se transfiere para BOOKID y CUSTOMID). El bloqueo se enva al programa de
actualizacin (_SCOPE = `2'). Si hay un conflicto de bloqueos, se hace otra tentativa de fijar
el bloqueo despus de cierto tiempo (_WAIT = `X').
El bloqueo puede ser quitado invocando la funcin DEQUEUE_E_BOOKING:

Xioma Consulting - ABAP WORKSHOP"

191

Las entradas exclusivas de bloqueo existentes para el vuelo LH 400 se suprimen en


la tabla SFLIGHT. La peticin de suprimir las entradas de bloqueo se pasa al programa de
actualizacin (_SCOPE = `3').

Xioma Consulting - ABAP WORKSHOP"

192

AB AP D E V ELOP M EN T WORK BENCH

El ABAP development workbench es una aplicacin que rene prcticamente todas las
herramientas tcnicas del entorno de SAP para dar soporte al desarrollo eficiente de aplicaciones
empresariales de gran escala a travs del ambiente distribuido de cliente/servidor en el R/3.
Esta integracin permite una mayor agilidad durante el desarrollo y el mantenimiento de las
aplicaciones.
El repositorio de R/3 contiene todos los objetos de desarrollo, por ejemplo programas,
definiciones de la base de datos y tipos de datos globales. Es por esto que los objetos de desarrollo
suelen ser conocidos como objetos del repositorio, y estos objetos son independientes del mandate.
El repositorio de R/3 se encuentra organizado por aplicacin, y cada una de estas se encuentra
dividida en subdivisiones lgicas llamadas clases de desarrollo (paquetes). Cada vez que se crea un
nuevo objeto de desarrollo, ste debe ser asignado a un paquete.

MIME Repository
El repositorio de objetos MIME se utiliza para almacenar estilos de hojas, grficos,
iconos, audio, y otros tipos de objetos en el sistema SAP. Se crean como objetos en la base
de datos de SAP y puede ser referidos como parte de diferentes aplicaciones tecnolgicas.

Xioma Consulting - ABAP WORKSHOP"

193

Estos objetos utilizan la infraestructura de desarrollo de SAP. Cualquier cambio realizado


en este repositorio implica la asignacin del objeto en una orden de transporte.

Repository Browser
Este repositorio representa una herramienta que se utiliza para editar todos los
objetos de desarrollo, tales como la edicin de programas ABAP, creacin de transacciones,
aplicaciones de dilogo, funciones, etc

Repository Information System


El repositorio del sistema de informacin facilita la bsqueda de objetos en el
sistema SAP. Se pueden localizar objetos que encajan con un criterio particular.

Tag Browser
El navegador de etiquetas permite agregar etiquetas y sus atributos para el editor
correspondiente. Por ejemplo es muy til para la implementacin del diseo de aplicaciones
Web. Siempre se asume que el usuario entiende el significado de las etiquetas individuales
y sus atributos.

Transport Organizer
El organizador de transportes brinda la funcionalidad para la creacin,
documentacin y liberacin de ordenes de transporte durante todo el perodo de
parametrizacin y desarrollo, as como posteriormente para la reorganizacin del entorno de
desarrollo. Las herramientas que posee estas orientadas especficamente a los equipos de
desarrollo y a los administradores de la implementacin.

Xioma Consulting - ABAP WORKSHOP"

194

AP L ICACI ON ES D E D ILOG O
El desarrollo de aplicaciones de dialogo posee como caracterstica principal el diseo de
pantallas. Estas pantallas son realmente programas dinmicos (DYNPRO) que se encuentran
integrados con el diccionario de ABAP, lo cual permite la verificacin de la consistencia de los
campos automticamente. Por ejemplo la verificacin de campos obligatorios, tipos, llaves o
valores prefijados. La disposicin de los DYNPRO es muy flexible permitiendo el uso de campos
de entrada y salida, botones de radio, cajas de check, botones y otros objetos.

Screen Painter (SE51)

El screen painter permite la creacin de aplicaciones de dilogo por medio del


desarrollo de DYNPROs.
Cada DYNPRO estar asociado a un programa y su
diferenciador es un nmero de 4 dgitos.

Lgica del proceso


La lgica del proceso dicta la manera en que un programa dinmico procesa la
informacin que fluye por l. Esta lgica se compone de dos eventos principales que
determinan el flujo del programa, el proceso antes de la salida (PBO) y el proceso despus
de la entrada (PAI). Estos procesos se crean automticamente por el screen painter.

Xioma Consulting - ABAP WORKSHOP"

195

Process Before Output (PBO)


El PBO se procesa inmediatamente antes de que la disposicin de pantalla
sea mostrada, de tal forma que se pueden invocar todas las rutinas que se requieran
para inicializar los campos y/o variables.

Process After Input (PAI)


El PAI es ejecutado justo despus que un usuario realiza una accin. Toda la
lgica que se desea ejecutar en un programa debe ser invocada desde este evento.

Process on help-request (POH)


El POH se invoca cuando se dispara el evento de ayuda al oprimir la tecla F1.
En este bloque se buscar ejecutar el mdulo que esta relacionado con el campo al
que se le invoc la ayuda. Si existieran varios campos que cumplen el criterio solo
se ejecutar el evento para el primero de ellos. Una vez finalizado el POH se
reinicia la lgica del proceso ejecutando el PBO. Este proceso tiene prioridad sobre
las ayudas definidas en el diccionario de datos.

Process on value-request (POV)


El POV se ejecuta cuando se dispara el evento de ayuda de bsqueda (matchcode) con la tecla F4. En este bloque se buscar ejecutar el mdulo que esta
relacionado con el campo al que se le invoc el match-code. . Si existieran varios
campos que cumplen el criterio solo se ejecutar el evento para el primero de ellos.
Una vez finalizado el POH se reinicia la lgica del proceso ejecutando el PBO. Este
proceso tiene prioridad sobre las ayudas definidas en el diccionario de datos.

MODULE
Dentro de los eventos PBO y PAI se deben crear bloques de cdigo llamados
mdulos, estos son las subrutinas que contienen el cdigo que controla el programa.
Sintaxis:
MODULE <mdulo> [ AT {EXIT COMMAND } | {CURSOR-SELECTION } ]
[ ON {CHAIN-INPUT } | {CHAIN-REQUEST } ].

Ejemplo:
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.

Xioma Consulting - ABAP WORKSHOP"

196

*&------------------------------------------*
*&
Module USER_COMMAND_0100 INPUT
*&------------------------------------------*
*text
*-------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
ENDMODULE. " USER_COMMAND_0100

INPUT

Es importante considerar que no es posible usar sentencias ABAP en la


lgica del proceso, stas deben ir dentro de los mdulos. Por razones
Para el caso del AT EXIT COMMAND la funcin que se utilice debe ser de
tipo E9 y debe estar en el PAI. En caso de existir varios AT EXIT COMMAND,
solo se ejecutar el primero.
En el caso del AT CURSOR-SELECTION la funcin debe ser CS y el tipo
ha de ser S. Adems el cursor debe estar posicionado en un campo de entrada o
salida. Todo esto en el PAI.
Si se quisiera asignar al doble click la funcionalidad del AT CURSOR-SELECTION
se puede conseguir definiendo la funcin CS a la tecla F2.

ON CHAIN-INPUT y ON CHAIN-REQUEST se utilizan para ejecutar los


eventos ON INPUT y ON REQUEST para los campos individuales en una cadena
(CHAIN).

FIELD
Esta instruccin puede ser utilizada en cualquiera de los cuatro bloques de la
lgica de procesos (PAI, PBO, POH y POV), sin embargo no tiene efecto alguno en
el bloque PBO. Su funcin es regular el envo de informacin entre el DYNPRO y
el programa ABAP. Se utiliza en conjunto con la instruccin MODULE cuando se
desea condicionar un mdulo a ejecutar para un campo especfico.
Sintaxis:
FIELD <campo> MODULE <mdulo> {ON INPUT}
| {ON REQUEST}
| {ON {CHAIN-INPUT}|{CHAIN-REQUEST}}
| {AT CURSOR-SELECTION}.

Ver Menu Painter

Xioma Consulting - ABAP WORKSHOP"

197

ON INPUT implica que el mdulo se ejecutar solo si el valor del campo es


vaco o cero en el caso de valores numricos. Si el campo posee un valor inicial
tampoco se ejecutara, sin importar que el usuario lo haya vuelto a digitar.
La condicin ON REQUEST har que se ejecute el mdulo si se da un
cambio en el campo despus del PBO, sin importar el valor que sea.

CHAIN
La instruccin CHAIN permite encadenar una serie de campos en la lgica
del proceso para ser evaluados en un mdulo invocado con un CHAIN-INPUT o con
un CHAIN-REQUEST. CHAIN ha de terminar con un ENDCHAIN. Es importante
recordar que aunque la instruccin es vlida en el PBO no tiene ningn efecto en ste
bloque.

LOOP
El LOOP en la lgica de proceso sirve para iterar en una tabla interna que se
encuentre atada a un objeto en el DYNPRO. Por ejemplo a un TABLE CONTROL
(GRID). Permitiendo as que se puedan evaluar los valores de la tabla interna.

Creacin del DYNPRO


Al crear un DYNPRO el primer paso es la definicin de los valores
bsicos en la pestaa de atributos.

Xioma Consulting - ABAP WORKSHOP"

198

Descripcin Breve: Es obligatorio indicar una descripcin para el DYNPRO.


Tipo de DYNPRO: Existen 4 tipos de dynpros.
Normal: Es el DYNPRO que forma una pantalla por s mismo.
Subscreen: Es una subrea en un DYNPRO normal, pero que posee su
propia lgica de proceso.
Modal: Es una ventana que depende de una ventana padre, y no retorna el
control a la ventana padre sino hasta que es cerrada.
DYNPRO Seleccin: Este tipo de DYNPRO es de uso interno de SAP y es
generado automticamente. Manipular este tipo de DYNPROS por medio
del screen painter no es muy recomendando dado que este tipo de DYNPRO
puede ser regenerado.
Opciones: Existen 5 tipos de opciones.
Retener datos: Esta opcin permite retener los datos para la siguiente
ejecucin del DYNPRO si las opciones del usuario estn activadas en
Sistema -> Valor prefijado para usuario -> Retener datos-> Fijar datos->
Borrar datos.
Desconectar compresin del dynpro para tiempo de ejecucin: Esta
opcin comprime los campos en la pantalla que en tiempo de ejecucin no
sean relevantes dependiente de una serie de criterios.

Xioma Consulting - ABAP WORKSHOP"

199

Dynpro modelo: Esta opcin es de uso interno e identifica DYNPROs que


se utilizan como modelos.
Mantener posicin desplazamiento: Este atributo est pensado para
dynpros largos en los cuales se ha perdido la posicin de desplazamiento
debido a ciertas acciones.
Indica que la posicin de desplazamiento del dynpro principal debe
mantenerse en caso de que el dynpro se visualice sucesivamente.
Sin barra herramientas de aplicacin: la barra de herramientas de
aplicacin correspondiente al status actual del programa no se visualiza,
independientemente de si contiene o no pulsadores.

Otros Atributos:
DYNPRO Siguiente: Indica cual es el siguiente DYNPRO que ha de
ejecutarse al finalizar el actual. Puede invocarse a s mismo para mantenerse
en un DYNPRO y cambiarse en tiempo de ejecucin con la instruccin SET
SCREEN. En caso de hacer un SET SCREEN 0 se finaliza el programa (en
caso de estar en el DYNPRO principal) o al DYNPRO anterior.
Posicin del Cursor: Si no se desea que el cursor sea posicionado en el primer
campo de entrada, sino en otro campo, es necesario indicar el nombre de este campo.
Esta funcin puede ser ejecutada de forma dinmica en el modulpool mediante la
instruccin ABAP
'SET CURSOR FIELD <campo>'.
Lneas/Columnas: La cantidad indicada de lneas y columnas determina el
tamao de DYNPRO previsto para la actualizacin.
Lista de Elementos: Esta pestaa contiene todos los atributos de los diferentes
objetos o elementos que existen en la pantalla.
Lgica del proceso: En la pestaa de lgica de proceso se inserta todo el cdigo
que rige el comportamiento del DYNPRO.
Disposicin: El botn de disposicin invoca al editor grfico (Graphical Screen
Painter).

Xioma Consulting - ABAP WORKSHOP"

200

Graphical Screen Painter


El screen painter grfico muestra un canvas donde se colocan los diferentes
objetos que pueden existir en un DYNPRO. La barra de componentes se encuentra
a la izquierda.

1. Puntero: El puntero se utiliza para seleccionar y mover objetos en el canvas.


2. Campo de Texto: Se utiliza para colocar etiquetas en el canvas.
3. Campo de entrada/salida: Este objeto se relaciona con una variable para capturar
o mostrar su valor en el DYNPRO.
4. Checkbox: Se utiliza para crear un campo de seleccin.
5. Radiobutton: Sirve para crear un conjunto de radio buttons.
6. Botn: Crea un botn.
7. Pestaas: Crea un control de pestaas.
8. Wizard de Pestaas: Crea automticamente el cdigo para controlar las pestaas.
9. Marco: Crea un marco en el canvas. Permite agrupar una serie de objetos.
10. rea de subscreen: Define un rea donde ha de aparecer un subscreen.
11. Control de Tabla: Se utiliza para crear una plantilla en el canvas (GRID).
12. Wizard de Control de Tabla: Genera automticamente el cdigo y los objetos que
se requieren para un Control de Tabla.

Xioma Consulting - ABAP WORKSHOP"

201

13. Contenedor: Permite la creacin de un objeto nuevo en tiempo de ejecucin


utilizando programacin orientada a objetos.
14. Icono: Permite colocar un icono en tiempo de ejecucin.
15. Ventana lista de elementos: Muestras todos los objetos en el canvas con sus
atributos en forma de resumen.
16. Campos del diccionario: Permite seleccionar campos de estructuras del
diccionario o de un programa para generarlos automticamente en el canvas.
17. Ventana de atributos: Muestra y permite la edicin de los atributos de un objeto.
Esta ventana tambin se abre cuando se da doble click sobre un objeto.
Los campos en rojo son obligatorios. Uno de
estos campos obligatorios es el nombre del objeto.
El campo texto se cambia en aquellos objetos
donde sea relevante. En el campo despliegue se
puede seleccionar si es un list box, cuando se
refiere a un campo de entrada o visualizacin.
Aquellos objetos que puedan contener iconos
tendrn un campo para seleccionarlo de la lista de
iconos de SAP. En el campo Quick Info se
introduce un texto a desplegarse en tiempo de
ejecucin al colocar el puntero sobre el objeto.
Cada objeto puede pertenecer a 4 grupos
diferentes (cada uno codificable con 3 dgitos),
esto permite el cambio de atributos grupales. En el
caso de los botones existe el campo cdigo de
funcin, el cual se pasa a la variable SY-UCOMM
al ser oprimido el botn. El tipo de botn de
funcin que sirve para controlar el proceso y que
puede ser de los siguientes tipos: E (ejecuta el
mdulo AT EXIT COMMAND, el OK Code
obtiene el valor /E), H Ayuda (ejecuta el ON
HELP REQUEST dejando el OK CODE en ?, S
Funcin del sistema (OK CODE /), P Funcin
del GUI (OK CODE =), T Transaccin (OK
CODE /n<transaccin>). Por defecto el tipo de
funcin esta en vaco y no es obligatorio.
La seccin de atributos contiene tres pestaas:
diccionario, programa y visualizacin.
La seccin de diccionario se encarga de
brindarle al objeto caractersticas provenientes del
diccionario de datos tales como el formato, si el
campo proviene directamente del diccionario, una

Xioma Consulting - ABAP WORKSHOP"

202

rutina de conversin, definir una ayuda de bsqueda, si existe un campo de


referencia o un PARAMETER ID, indicador de SET PARAMETER ID que sirve
para enviar el valor que tome el campo al parmetro, indicador de GET
PARAMETER ID que toma el valor del parmetro para el campo, verificacin de
clave externa y finalmente el indicador para permitir maysculas y minsculas.
En el caso de los atributos de programa se puede
especificar para los campos de entrada o salida si el
campo es solo de entrada o campo de salida, o si
debe desplegarse en el Dynpro como un campo de
slo salida. Cuando el campo es de entrada es
posible especificar si el tipo de entrada es: posible,
no posible, recomendada y requerida (obligatoria).
El campo de pulsador de entradas posibles sirve
para controlar la aparicin del botn de las ayudas
de bsqueda en el campo. El check de alineacin
derecha justifica el texto que acompaa el objeto a
la derecha. El check de Cero a la izquierda rellena
con ceros cuando el contenido del campo es
numrico. Al activar el check Entrada * se indica
que este campo debe invocar el mdulo en la lgica de proceso que est atado al
campo mediante un FIELD ... MODULE ... ON *-INPUT, cuando el primer
carcter del campo sea un *.
El check de tipo de letra equidistante se encarga de
definir un espaciado equidistante entre los
caracteres.
El indicador de Visible e invisible
implican que el campo se pueda o no ver durante la
ejecucin. El indicador de 2 dimensiones elimina el
efecto de tridimensionalidad en los campos de
entrada y salida durante el tiempo de ejecucin. Los
denominadores de izquierda y derecha conectan el
objeto de texto al siguiente objeto que se encuentre
a la derecha o a la izquierda. La opcin de
sensibilidad al doble click se encarga de asignar un
OK CODE al dar doble click sobre el objeto de
texto o de entrada y salida.

Xioma Consulting - ABAP WORKSHOP"

203

Creacin de transacciones (SE93)

La transaccin SE93 permite la definicin de una transaccin que puede ser colocada
en el men de SAP o ejecutada directamente desde la lnea de comando del SAP GUI. Las
transacciones pueden entenderse como accesos directos a los programas que existen en el sistema.
Todas las transacciones creadas por un usuario han de iniciar por Z, y son objetos independientes
del mandante.

Xioma Consulting - ABAP WORKSHOP"

204

Al crear una nueva transaccin, estas pueden ser de 5 tipos:


1. Transacciones de Dilogo (Module Pool): son aquellas transacciones que estn
atadas a un programa que posee Dynpros.
2. Transaccin de Reporte: Se utilizan para los programas que son imgenes de
selecciones (Reportes).
3. Transaccin de Clase: Ejecuta el mtodo de una clase desde la transaccin.
4. Transaccin con variantes: Crea una transaccin nueva para ejecutar la variante de
otra transaccin. En este caso es importante recordar que las variantes son
dependientes del mandante.
5. Transaccin con parmetros: Ejecuta otra transaccin enviando los parmetros con
los que se desea iniciar.

Menu Painter (SE41)

Los mens (tambin llamados Status GUI) permiten al usuario ejecutar funciones de
un programa desde la barra de herramientas o la barra de mens. Estos mens son
invocados desde el PBO en la lgica de proceso.
Al crear un men se debe indicar el programa al que pertenece y el nombre del status
(men).

Xioma Consulting - ABAP WORKSHOP"

205

Existen 3 bloques principales que son:


1. La barra de men: Contiene todas las opciones del men para el dynpro.
2. La barra de pulsadores: Define todos los botones que se encuentran en la barra de
pulsadores.
3. Teclas de funcin: Asigna el la funcin para las teclas de funcin y sus
respectivas combinaciones con otras teclas. Tambin contiene la asignacin de
los botones estndar de la barra de herramientas del GUI.

Una vez que el men ha sido creado y activado, debe ser invocado por cdigo de la
siguientes manera:

PROCESS BEFORE OUTPUT.


MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
*&-----------------------------------------------------------*&
Module STATUS_0100 OUTPUT
*&------------------------------------------------------------*
text
*------------------------------------------------------------MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PRINCIPAL'.
*

SET TITLEBAR 'xxx'.

Xioma Consulting - ABAP WORKSHOP"

206

ENDMODULE.

" STATUS_0100

OUTPUT

En caso de querer excluir elementos del men ha de ser de la siguiente manera:


*&-----------------------------------------------------------*&
Module STATUS_0100 OUTPUT
*&------------------------------------------------------------*
text
*------------------------------------------------------------MODULE STATUS_0100 OUTPUT.
DATA fcode TYPE TABLE OF sy-ucomm.
...
APPEND 'BU'

TO fcode.

APPEND 'BACK' TO fcode.


SET PF-STATUS 'PRINICIPAL' EXCLUDING fcode.
ENDMODULE.

" STATUS_0100

OUTPUT

Otras Sentencias para DYNPRO


CALLSCREEN
Esta sentencia llama a un DYNPRO por su nmero. Es posible especificar las
coordenadas donde ha de aparecer.
Sintaxis:
CALL SCREEN dynnr
[STARTING AT col1 lin1
[ENDING
AT col2 lin2]].

SET TITLEBAR
En tiempo de ejecucin esta instruccin establece el ttulo que ha de desplegar el
GUI para el DYNPRO actual. El nombre del ttulo actual queda almacenado en la variable
de ambiente SY-TITLE. Es importante considerar que el ttulo ha de ser establecido en el
PBO, de no ser definido ninguno la palabra SAP es desplegada en la barra de ttulos.
Adems el mximo de caracteres que se soporta es de 70, y cualquier cadena superior a sta

Xioma Consulting - ABAP WORKSHOP"

207

longitud ser truncada. Los ttulos puede ser editados mediante la transaccin SE41 y la
opcin Lista de Ttulos.
Sintaxis:
SET TITLEBAR 'XXX.

LOOP AT SCREEN.
La tabla de ambiente SCREEN almacena los atributos de los diferentes objetos que
se encuentran en el canvas del DYNPRO. Para recorrer la tabla se utiliza la instruccin
LOOP. Sin embargo la tabla SCREEN es una tabla sin cabecera y sobre la cual no es
posible realizar un filtro a travs de la adicin WHERE. Por lo tanto ha de ser recorrida
totalmente y filtrada mediante un IF o un CASE. Los campos en la tabla son los siguientes:

COMPONENTE

ATRIBUTO

NAME

Nombre

GROUP1

Grupo 1

GROUP2

Grupo 2

GROUP3

Grupo 3

GROUP4

Grupo 4

REQUIRED

Campo Obligatorio

INPUT

Posible para entrada

OUTPUT

Campo de Salida

INTENSIFIED

Campo intensificado

INVISIBLE

Elemento invisible

LENGHT

Tamao visible

ACTIVE

Campo activo

DISPLAY_3D

Tipo de caja

VALUE_HELP

Ayuda

REQUEST

Existe entrada

VALUE_IN_COMBO

Existe valor en lista

Xioma Consulting - ABAP WORKSHOP"

208

Syntaxis:
LOOP AT SCREEN [INTO wa].
...
ENDLOOP.

Al realizar un loop por los diferentes elementos que se encuentran en la pantalla es


posible cambiar los atributos de la siguiente manera en el PBO:
MODULE modify_0100 OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'VAL'.
screen-required

= '1'.

screen-intensified = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.

SET CURSOR
Durante el proceso del bloque PBO la instruccin SET CURSOR permite que el
cursor se posicione en una ubicacin del DYNPRO.
Sintaxis:
SET CURSOR FIELD <campo>.

Ejemplo:
SET CURSOR FIELD 'EDT_CAMPO2'.

Xioma Consulting - ABAP WORKSHOP"

209

AM P LI ACI ON E S
Las ampliaciones son objetos del usuario que pueden ser utilizados para expandir la
funcionalidad del sistema con el objetivo de satisfacer necesidades muy especficas por parte del
cliente.
A continuacin se explican las posibles tcnicas para realizar ampliaciones.

Tablas
Existen dos maneras de ampliar tablas en SAP sin tener que modificar el objeto
mismo:
Agregando estructuras: estas estructuras estn asignadas a una sola tabla y
aparecen disponibles en el objeto al ser activadas y durante el tiempo de
activacin del objeto ampliado. Pueden existir varias estructuras de este tipo en
el objeto. Esta ampliacin se consigue a travs del botn ESTR.APPEND en la
transaccin SE11. Si fuera necesario eliminar la ampliacin en la tabla, ha de
eliminarse la estructura desde la SE11.

Includes personalizables: permite utilizar las estructuras en mltiples tablas.


Para que esto sea posible la instruccin INCLUDE ha de existir ya en la tabla o
estructura, porque debieron haber sido previstas por los desarrolladores de SAP.

Es importante considerar que si una tabla finaliza con un campo del tipo LCHR o LRAW
no es posible crear ampliaciones dado que estos campos han de ser los ultimos en la
estructura de la tabla siempre.
Otra consideracion improtante es que los campos que se agreguen deben iniciar siempre
con ZZ o YY para evitar conflictos con futuros nombres que SAP pueda incluir en
versiones posteriores.

Customer exit

El customer exit es un mdulo de funcin que permite agregar funcionalidades


propias al estndar de SAP sin modificar los objetos originales. Estas ampliaciones estn
definidas para programas, pantallas y mens especficos. Con la transaccin SMOD se
pueden visualizar los componentes creados por SAP, mientras que con la transaccin
CMOD se activan y administran los proyectos de ampliacin.

Xioma Consulting - ABAP WORKSHOP"

210

Transaccin CMOD

Xioma Consulting - ABAP WORKSHOP"

211

Una vez indicada la descripcin del proyecto, con el botn de asignacin de


ampliacin se incluyen los componentes del proyecto (los componentes se pueden revisar en
la transaccin SMOD).

Despus de agregar las ampliaciones, se pueden seleccionar los componentes


deseados: funciones, mens o pantallas.

Xioma Consulting - ABAP WORKSHOP"

212

Los componentes se activan utilizando el botn . Para agregar el cdigo se da


doble click sobre el nombre de la funcin de la ampliacin, y una vez ah se da de nuevo
doble click sobre el include que se puede editar por el usuario.

Customer Exit
Un customer exit es una subrutina identificada por 3 caracteres numricos y que le
indica al sistema que ha de acceder una rutina en tiempo de ejecucin. Donde se pueden
ejecutar estas ampliaciones y que tipo de datos pueden manipular son definidas por los
programadores de SAP.

Xioma Consulting - ABAP WORKSHOP"

213

Las estructuras y variables que se pueden utilizar son las que se encuentran en las
pestaas de import, export, modif. y tablas. El cdigo de la ampliacin ha de escribirse
dentro del include propuesto. Para crear el include se da doble click sobre l.
Dado que el include se encuentra dentro de un FORM ENDFORM, no es posible
crear subrutinas ni mdulos. De ser necesario crearlos se debern definir en el grupo de
funciones al que pertenece la ampliacin en la zona de usuarios, la cual se encuentra
debidamente etiquetado en el programa de control. Ah se podrn definir las subrutinas,
mdulos y eventos.
Es posible llamar DYNPROs propios utilizando la instruccin CALL SCREEN y
dando doble click sobre el nmero del DYNPRO para que el sistema la cree
automticamente.
Para invocar este tipo de ampliaciones desde los programas estndar de SAP se
utiliza un CALL CUSTOMER-FUNCTION nnn, donde nnn es un nmero de 3 dgitos.
Este llamado nicamente se ejecuta cuando el proyecto de ampliacin se encuentra activado
y puede ser invocado todas las veces que se requiera.
Para localizar los user exits se puede buscar la ocurrencia CALL CUSTOMER de
manera global en el programa principal, o en la transaccin CMOD en el men de
Utilidades -> SAP Enhancements y buscar EXIT_*PROGRAMA*.

Al activar un proyecto de ampliacin todos los programas afectados por las modificaciones
sern regenerados al ser ejecutados por primera vez despues de cada cambio.

Xioma Consulting - ABAP WORKSHOP"

214

Menu Exits
Las ampliaciones de men permiten agregar opciones en el men estndar de SAP.
Se pueden utilizar para llamar nuevos DYNPROs o ejecutar otras aplicaciones desde la
transaccin donde se han implementado.
SAP cre las ampliaciones de men definiendo un tipo especial de men en el Menu
Painter. Estos objetos tienen cdigo especial que inicia con el smbolo +, y estos no
aparecen visibles sino hasta que el proyecto de ampliacin est activado. El texto para el
item en el men y el icono se especifica cuando se activa el proyecto de ampliacin, siempre
que SAP lo haya previsto. Existen dos tipos: por customer exit y por BADI.
Cuando existe en Menu Exit en una ampliacin, al momento de utilizarle se solicita
que se indique el texto que lo identificara en el men, este texto es dependiente del idioma.
Para la invocacin del subscreen se utiliza la instruccin CALL CUSTOMERSUBSCREEN.

Screen Exit
El screen exit es un tipo de customer exit para agregar campos a las pantallas en las
aplicaciones de R/3. Son subscreens que existen en el estndar y que se invocan desde la
lgica del proceso. Tambin los BADIs pueden contener screen exits.
Es importante tomar en cuenta que el OK CODE solo se puede procesar por medio
de la pantalla principal, no se puede indicar un nmero de DYNPRO siguiente y tampoco
definir un nuevo men.

Xioma Consulting - ABAP WORKSHOP"

215

Junto al screen exit siempre habr un user exit que facilite el envo de informacin
bidireccionalmente entre el programa estndar y el subscreen utilizando variables globales.
Al igual que otras ampliaciones los screen exits son manipulados a travs de
proyectos en la transaccin CMOD.

Field Exit
Los field exit permiten crear una lgica de ampliaciones en el sistema SAP basada en
los elementos de datos del diccionario.
Se puede utilizar para realizar validaciones,
conversiones o procesos relacionados con el negocio. Las funciones asociadas a los field
exits son ejecutados en el PAI. Existen 2 tipos de Field exits:

Globales: No estn atadas a ningn dynpro en particular o programa. Por lo


que si en la disposicin existe el elemento de datos, la funcin del field exit
ser ejecutada.
Locales: Son aquellos que estn ligados a un programa y dynpro especfico.
No pueden existir mas de 36 field exists para un mismo elemento de datos. Si
un field exit es creado como local, ya no puede ser definido global.

Para crear un field exit se puede utilizar el reporte RSMODPRF, o se puede invocar
desde la lnea de comando de SAP la transaccin PRFB, mientras se esta dentro de la
transaccin CMOD.
Las funciones de field exit poseen dos parmetros. De entrada el parmetro
INPUT que contiene el valor del elemento de datos en el momento de la invocacin y el

Xioma Consulting - ABAP WORKSHOP"

216

parmetro OUTPUT que enva el valor al elemento de datos una vez finalizada la
funcin.
En los Field Exits no es posible utilizar las siguientes instrucciones: BREAK-POINT,
CALL, SUBMIT, COMMIT WORK, ROLLBACK WORK, STOP, REJECT, MESSAGE
I, MESSAGE W. Adems el debugger ignora los field exits.

Es importa recordar que para activar los field exist se debe acceder la opcin del
men FIELD EXIT -> ACTIVAR. De lo contrario el field exit no tendr efecto alguno.
Adems debe estar activado el check en el sistema SAP que permite la utilizacin de los
field exits.

User exits
Los user exists son mejoras al sistema que originalmente fueron pensadas para el
mdulo de SD (Sales and Distribution). Los desarrolladores de SAP crearon includes
especiales en algunos programas con rutinas que siguen la convencin de nombre
USEREXIT_<nombre>. Estos llamados ya estn en programas estndar y utilizan variables
globales. Las rutinas se encuentras vacas para ser completadas con el cdigo que requiera
la ampliacin.
Un ejemplo es el programa SAPMV45A con el include MV45AFZB.
Para localizar los user exits se puede utilizar como referencia el listado en el SAP
Reference Implementation Guide. Otro mtodo es buscar la palabra USEREXIT global en
el programa principal.

Modificaciones
Las modificaciones son cambios sobre los objetos estndar de SAP. Para SAP los
objetos originales son aquellos que se encuentran en SAP y al pasarlos a otros sistemas son
copias. Cuando un cliente crea sus propios objetos, estos son originales en el sistema en
que se crearon y por ende pueden ser modificados tantas veces sea necesario, sin embargo
esto no se puede hacer con los objetos de SAP estndar pues estos son copias. Al pasar los
objetos creados por el cliente a otro sistema (por ejemplo productivo) estos objetos pasan a
ser copias tambin. Si existiese un motivo realmente bueno para realizar modificaciones
sobre un objeto de SAP, es necesario contar con un conocimiento profundo de los objetos
que se van a modificar, dado que los cambios pueden crear inconsistencias en el sistema o
resultar en problemas durante un proceso de upgrade o durante la aplicacin de un support
package.
Para llevar a acabo cambios en los objetos es necesario utilizar el SSCR (SAP
Software Change Registration), el cual es un sistema de registro de modificaciones que esta
disponible en el portal de SAP. Este asigna una llave de modificacin segn el objeto que
se desea cambiar. Con dicha llave se permite la modificacin, y a su vez permite que el

Xioma Consulting - ABAP WORKSHOP"

217

personal de servicio al cliente de SAP pueda localizar y reparar problemas en el sistema del
cliente ms rpidamente. Una vez que un objeto es modificado ya nunca ms pedir la llave
del SSCR, incluso despus de un upgrade.
Factores de xito al utilizar modificaciones:
1. Siempre que se realicen modificaciones se debe tratar de utilizar cdigo
encapsulado.
2. Utilizar la documentacin en lnea de SAP
3. No borrar el cdigo estndar (si es necesario solo comentarlo)
4. Mantener un log de modificaciones, SAP recomienda tener en consideracin los
siguientes datos: Tipo de objeto, nombre del objeto, rutina (si aplica), mdulo,
nmero de reparacin, fecha de cambio, cambiado por, correccin preliminar,
Nota SAP (si aplica), vlido para la versin x.y.
5. No modificar objetos bsicos del diccionario
6. Liberar siempre todas las ordenes que contienen modificaciones

Xioma Consulting - ABAP WORKSHOP"

218

Você também pode gostar