Está en la página 1de 133

AB AP WORK S HOP

Version 1.0

Xioma Consulting Centroam!rica 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 DE 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

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.

WRITE Hola Mundo!.

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:

C"DIGO
BACK P# P## P+ P++ PL# PL#n PL+n PNOP PP# PP#n PPn PRI,PRINT PS## PS++ PS# PS#n PS+ PSn PZn RW

DE CI"N

F U N#
Regresar

DESCRIPCI"N

Hacer Scroll a la p$gina anterior Hacer Scroll a la primera p$gina Hacer Scroll a la p$gina siguiente Hacer Scroll a la %ltima p$gina Hacer Scroll a la primera l&nea de la p$gina Hacer Scroll n l&neas hacia atr$s Hacer Scroll n l&neas hacia adelante Sin efecto Hacer Scroll una p$gina hacia atr$s Hacer Scroll n p$ginas hacia atr$s Hacer Scroll al inicio de la p$gina n Imprimir Hacer Scroll a la primera columna Hacer Scroll a la %ltima columna Hacer Scroll una columna a la izquierda Hacer Scroll n columnas a la izquierda Hacer Scroll una columna a la derecha Hacer Scroll n columnas a la derecha Hacer Scroll a la l&nea n Cancelar

Xioma Consulting ! ABAP WORKSHOP"

22

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

C"DIGO
'CTX 'EX 'PC 'PRI 'SC 'SC+ 'SL 'ST

DE CI"N

F U N#

DESCRIPCI"N
Llamado a un men% contextual Salir Guardar Archivo Imprimir Buscar Buscar siguiente Buscar en o(cina 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
C N D T X I P F String Xstring

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+ Texto Numrico Fecha (AAAAMMDD) Hora (HHMMSS) Hexadecimal Entero (Integer) Nmero Empaquetado 1 1 8 6 1 4 8 Blanco 000 00000000 000000 X00 0 0 0.0 Blanco Blanco

Nmero de Punto Flotante 8 Cadena de caracteres Secuencia de bytes

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:

C"DIGO
BATCH DATUM DYNNR INDEX MSGNO MSGTY MSGV1 MSGV2 MSGV3 MSGV4 PAGNO REPID SUBRC TABIX TCODE TFILL UZEIT TITLE UCOMM UNAME LISEL

DESCRIPCI"N
Indicador de modo Batch X indica modo de fondo activo. Fecha del Sistema Nmero de la pantalla actual Indica la iteracin del LOOP Nmero de Mensaje Tipo de Mensaje (E,I,W) Lnea de Mensaje 1 Lnea de Mensaje 2 Lnea de Mensaje 3 Lnea de Mensaje 4 Nmero de Pgina Nombre del programa ABAP Valor de retorno de una sentencia ABAP Lnea actual en la tabla interna Cdigo de la Transaccin Total de entradas en la tabla interna Hora Ttulo del programa Funcin ejecutada ID del usuario 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,T ICOS


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.

4 5

El residuo de la divisi-n de 5 entre 3 es 2. El cociente de la divisi-n de 5 entre 3 es 1. 47

Xioma Consulting ! ABAP WORKSHOP"

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.

AND VALOR VALOR 1 2


Verdadero Verdadero Falso Falso Verdadero Falso Verdadero Falso

OR R E S U L#
TADO

V A L O R V A L O R R E S U L# TADO 1 2
Verdadero Verdadero Falso Falso Verdadero Falso Verdadero Falso Verdadero Verdadero Verdadero Falso

Verdadero Falso Falso Falso

NOT VALOR
Verdadero Falso

R E S U LTA D O
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
=,EQ <>, NE >, GT <, LT >=, GE <+, LE BETWEEN

DESCRIPCI"N
Igual que Diferente que Mayor que Menor que Mayor o igual que Menor o igual que 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 DESCRIPCI"N
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. 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. 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. 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.

CN

CA

NA

Xioma Consulting ! ABAP WORKSHOP"

50

OPERADOR DESCRIPCI"N
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. 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. 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. 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.

NS

CP

NP

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. 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.

ENDIF.

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 ITERACI "N


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 EN 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:
ULINE.

Si se desea imprimir una lnea continua pero de un tamao determinado, se puede utilizar la variable del sistema SY-ULINE. 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: NO-GAPS. 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
LOW HIGH OPTION SIGN

DESCRIPCI"N
Valor de la cota inferior, el tipo de este campo se define al definir el rango. Valor de la cota superior, el tipo de este campo se define al definir el rango. 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) 82

Xioma Consulting ! ABAP WORKSHOP"

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
Sintaxis:

OPEN DATASET <dataset> FOR {INPUT | OUTPUT | APPENDING | UPDATE} IN {BINARY MODE | TEXT MODE} ENCODING DEFAULT.

Close dataset cierra un archivo.

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:
8

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. 106

Xioma Consulting ! ABAP WORKSHOP"

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 <cdigo> ENDSELECT. INTO (v1, v2, , vn) FROM <tabla>.

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. Ejemplos:
SELECT * FROM ZESTUDIANTES WHERE NOTA1 IS NULL. SELECT * FROM ZESTUDIANTES WHERE NOTA1 IS NOT NULL.

Al

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

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

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. ENDFUNCTION.

result = n1 / n2.

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

También podría gustarte