AB AP WORK S HOP

Version 1.0

Xioma Consulting Centroam!rica 2007

Xioma Consulting ! ABAP WORKSHOP"

1

IN T ROD U CCI "N
ABAP (Advanced Business Application Programming), o ABAP/4 es un lenguaje de programación desarrollado por la empresa alemana SAP (Systeme, Anwendungen, Produkte in der Datenverarbeitung)1. Los alcances del lenguaje ABAP se han ampliado según se ha ido desarrollando el escenario de desarrollo de software. Han sido actualizaciones periódicas, como la adición de instrucciones orientadas a objetos dentro del lenguaje y herramientas más poderosas para el desarrollo de formularios. ABAP fue desarrollado en la década de los 80 a partir de una investigación que produjo toda una serie de lenguajes de cuarta generación de aplicación específica y cuyo objetivo apuntaba a la producción de alto nivel de reportes. Fue incluido al producto SAP R/2. El objetivo de éste producto era brindar una aplicación de negocios en mainframe para grandes corporaciones para la administración de materiales, finanzas y contabilidad. Originalmente se suponía que los usuarios del lenguaje de programación serian usuarios, que pudieran manipular la información 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 requería de una alta destreza. Según fueron disminuyendo las

consideraciones de desempeño, el lenguaje empezó a convertirse en un componente central del sistema SAP. En los 90, SAP empezó a convertir todo el código clave del SAP R/3 a ABAP, de tal forma que para el año 2003 el proyecto SAP se basaba ya en ABAP para las funciones más básicas.

1

Systems, Applications & Products in Data Processing

Xioma Consulting ! ABAP WORKSHOP"

2

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 presentación, una de aplicación y una de base de datos; pueden estar alojadas en diferentes computadores sirviendo esto como base para la escalabilidad del sistema.

Capa de presentación: 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 Aplicación: Es en esta capa donde se ejecuta ABAP, tanto las aplicaciones desarrollas por SAP como las desarrolladas por los usuarios. Desde esta capa ABAP envía y recibe datos a la capa de base de datos. Capa de Base de datos: Este es el nivel más bajo en el modelo, y es donde se administra la información con la ayuda del sistema de administración de base de datos relacional (RDBMS). Este nivel almacena no solamente datos maestros y transaccionales, sino también los programas y metadatos que describen el sistema R/3 son administrados y almacenados acá. Toda la distribución técnica del software es independiente de la ubicación física del hardware, tanto vertical como horizontalmente.

Xioma Consulting ! ABAP WORKSHOP"

3

Xioma Consulting ! ABAP WORKSHOP" 4 . Con la opción de visualización se puede ver la lista objetos locales y aquellos que se encuentren en una orden de transporte esperando a ser liberados. En el caso de las órdenes de Customizing. Las órdenes que pertenecen a la clase Workbench incluyen todos los objetos relacionados con el desarrollo de aplicaciones.TRAN S P ORT ORG ANIZ E R El Transport Organizer permite la administración de las órdenes de transporte de un usuario. Existen dos estados posibles para las ordenes. éstas contienen a los objetos generados por los cambios en la parametrización del sistema. las liberadas que son aquellas ordenes que están listas para ser transportadas a otro mandante y las modificables que son aquellas ordenes que están esperando una liberación. Las órdenes liberadas pueden ser visualizadas desde una fecha específica.

Para liberar la orden. seleccionándolo y pulsando el botón LIBERAR DIRECTAMENTE . Solamente se pueden liberar las ordenes propias. Xioma Consulting ! ABAP WORKSHOP" 5 . por lo que si fuera necesario liberar una tarea o una orden que perteneciera a otro usuario es necesario reasignarla utilizando el botón MODIFICAR TITULAR . Se libera un objeto a la vez. se debe liberar primero todas las tareas incluidas en la orden de transporte y posteriormente la orden.

la barra estándar de herramientas. Xioma Consulting ! ABAP WORKSHOP" 6 . que poseen una disposición y lógica que se controla únicamente a través de sentencias ABAP. Pantallas Contiene toda la disposición de pantallas y la lógica de flujo asociada a las mismas. Documentación La documentación es dependiente del idioma. Esto suele ser muy útil durante los periodos de prueba o para la ejecución de tareas repetitivas. Contiene también los títulos y status. se hace a través de comentarios en el código directamente. Variantes Las variantes permiten predefinir valores en la pantalla de selección (selection screen) de los programas. como el selection screen en los reportes. Sin embargo existen pantallas especiales. Elementos de Texto Estos son dependientes del idioma. Es importante recordar escribir la documentación orientada al usuario. En caso de querer documentar código. Interfase Contiene todas las opciones de los menús. Normalmente se crea la disposición de pantallas utilizando una herramienta llamada screen painter o desde el ABAP Workbench. Puede ser traducidos directamente desde la herramienta de mantenimiento de textos o utilizando una herramienta especial de traducción. la barra de herramientas de aplicación y los botones.COMP OS I CI ON DE U N P ROG RAM A ABAP Código fuente Es la parte esencial del programa que contiene todas las sentencias ABAP que dirigen la mayor parte del comportamiento del programa.

EDITOR ABAP. Imagen Inicial En la imagen inicial del editor se indica el nombre del programa que se desea tratar. Xioma Consulting ! ABAP WORKSHOP" 7 .E DITOR El editor ABAP se invoca a través de la transacción SE38. y cuenta con las siguientes opciones en la barra de herramientas: 1. o por la ruta del menú SAP HERRAMIENTAS->WORKBENCH ABAP->DESARROLLO->SE38 . Verificar Esta opción se encarga de revisar la sintaxis del programa.

Referencia de Utilización Las referencias de utilización sirven para identificar otros objetos del ambiente que utilicen el programa indicado. 6. y otros componentes que formen parte del mismo de serle indicado. 4. Xioma Consulting ! ABAP WORKSHOP" 8 . Análisis de Entorno Verifica todos los objetos de repositorio a la cual se les hace referencia dentro del programa. 3. Borrar Elimina el programa. Activar La activación ejecuta una revisión sintáctica.2. 5. almacena y posteriormente deja disponible al programa para ser ejecutado en el ambiente del R/3. Manual Online Invoca la ayuda de ABAP disponible en línea en el sistema. 7. Ejecutar Ejecuta el programa.

Renombrar Cambia el nombre del programa.8. 10. Debugging Ejecuta el programa a través del de la herramienta de Debugging 11. Copiar Crea una copia del programa con otro nombre. 9. Con Variante Ejecuta el programa con una variante creada con la opción de variantes. Xioma Consulting ! ABAP WORKSHOP" 9 .

12. Crear Crea el programa e invoca el editor de código. 13. siempre y cuando el programa reciba algún tipo de parámetro de entrada. Variantes Crea una variante para el programa. Xioma Consulting ! ABAP WORKSHOP" 10 .

15. Xioma Consulting ! ABAP WORKSHOP" 11 .14. Modificar Invoca el editor de código para modificar un programa que ya existe. Visualizar Invoca el editor de código en modo de solo visualización. Editor de Código El editor de Código es el ambiente donde se encuentran las herramientas básicas de desarrollo y donde se introduce el código ABAP.

La barra del editor contiene las siguientes herramientas:

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

3. Visualizar <-> Modificar Cambia el estado del editor entre modo de visualización o modo de modificación. 4. Activo <-> Inactivo Cambia el estado del programa entre activo e inactivo. 5. Otro Objeto Ésta opción permite cambiar el objeto actual por otro que se desee editar. Se divide en varias categorías de las cuales las más importantes son: diccionario de datos, bibliotecas de clases, programa y grupo de funciones.

Xioma Consulting ! ABAP WORKSHOP"

12

6. Verificar Ésta opción se encarga de revisar la sintaxis del programa. 7. Activar La activación ejecuta una revisión sintáctica, 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 Utilización Las referencias de utilización 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 Navegación Muestra la ventana de navegación que consiste en una pila con los últimos objetos revisados. 12. Imagen Completa Muestra la venta del objeto en revisión 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 línea actual, que será ejecutado solamente para el usuario que lo fijó. 15. Patrón Inserta una plantilla a partir de la línea actual. Sobre todo en el caso de la invocación de funciones o la invocación del método de un objeto, ésta función puede ser de gran utilidad para conocer los parámetros que pueden ser utilizados.

Xioma Consulting ! ABAP WORKSHOP"

13

16. Pretty Printer Ajusta el formato del código para que sea mucho más fácil de leer por el usuario.

Creación de un nuevo programa
Los programas en SAP que no pertenecen al estándar deben iniciar su nombre con la letra Z, distinguiéndose así los programas de usuarios. En la imagen inicial se digita el nombre del programa y se utiliza el botón CREAR. En éste momento se deben llenar las propiedades básicos del programa en la ventana de atributos.

Xioma Consulting ! ABAP WORKSHOP"

14

están los siguientes: 1. 5. Esta parte de programa puede incluirse en otro programa mediante la instrucción INCLUDE. Modulpool (M) para dynpros2 SAP Screen Painter Contiene pasos para procesar módulos de dynpro de las transacciones y sólo puede llamarse mediante un código de transacción o una función de menú. Pool de clases (K) Contiene clases. Pool de interfaces (J) Contiene interfaces. Programa ejecutable (1) Estos son los programas que pueden iniciarse directamente sin código de transacción y en fondo. 2. El generador de clases gestiona las interfaces y las clases. si se trata de un programa productivo. que se invoca por medio de la transacción SE37. Pool de subrutinas (S) Contiene partes de programa (FORM) que pueden ser invocadas desde instrucciones PERFORM externas. 4. 6. 2 Un dynpro se suele llamar una pantalla de SAP Xioma Consulting ! ABAP WORKSHOP" 15 . El generador de clases gestiona las interfaces y las clases. Estos grupos y módulos se administran en la biblioteca de funciones. de test o de sistema.Entre los tipos de programa que se pueden crear. desde la transacción SE38 o la SA38. Grupo de funciones (F) Contiene módulos de funciones. Dependiendo de esta propiedad se genera cierto tipo de control en la administración de los programas. El status del programa indica. 3. Report de Include (I) Contiene un código de programa que no puede ejecutarse por sí sólo. 7.

Esta puede ser una orden ya existente o una orden nueva. Los objetos locales pertenecen a la clase de desarrollo $TMP (Objeto Local) y no son transportables. Las órdenes de transporte pueden ser revisadas y editadas por medio de la transacción SE09. es necesario indicar la clase de desarrollo (paquete) a la que pertenece el programa.La propiedad de grupo de autorizaciones indica a que grupo ha sido asignado el programa. si ésta no es local. sirviendo como referencia para validar los derechos que un usuario pueda tener sobre éste. Las clases de desarrollo o paquetes se agrupan a los objetos que pertenecen al ABAP Workbench. La asignación a una clase de desarrollo se indica en el catálogo de objetos. o definirlo como un objeto local. el sistema procede a solicitar una orden de transporte válida a la que se encontrará atado el programa. 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 opción de grabar. Una vez seleccionada la clase de desarrollo. Xioma Consulting ! ABAP WORKSHOP" 16 .

el parámetro adicional NO STARNDARD PAGE HEADING elimina del reporte la línea que imprime el título del reporte. Todos los programas ejecutables deben iniciar con la instrucción REPORT <Nombre del programa>. El sistema asignará automáticamente un número para la orden de transporte y otro para la nueva tarea vinculada al programa. Programa Hola Mundo Los programas tipo REPORT son el tipo más básico. Para imprimir un texto en la pantalla se utiliza la instrucción WRITE <string>. batch inputs3 e interfases.. 3 Programas de carga. Xioma Consulting ! ABAP WORKSHOP" 17 . Un ejemplo de un programa tipo REPORT es el siguiente: REPORT ZHOLA no standard page heading. posteriormente se le asigna la descripción a la nueva orden y se graba . usualmente a partir de archivos planos.Para crear la orden se oprime el botón de crear . y se utilizan primordialmente para la generación de reportes. WRITE 'Hello World!'. Una vez finalizado el programa es necesario activarlo y posteriormente puede ser ejecutado .

La comilla doble se utiliza para introducir un comentario. Xioma Consulting ! ABAP WORKSHOP" 18 .Los strings o cadenas de caracteres en ABAP se encierran entre comillas simples.

QUAL_DAY = QUAL_DAY . START-OF-SELECTION Se puede interpretar como el evento principal y es ejecutado justo después del evento SELECTION-SCREEN. Xioma Consulting ! ABAP WORKSHOP" 19 . Los eventos más utilizados se presentan a continuación en el orden que son ejecutados: LOAD-OF-PROGRAM Este evento se ejecuta justamente después de que el sistema ha cargado un programa de tipo 1. F o S en memoria.1. El código dentro de cada evento se ejecuta siguiendo el clásico comportamiento TOP-DOWN. los cuales se disparan dependiendo de una condición. QUAL_DAY+6(2) = '01'. Sintaxis: LOAD-OF-PROGRAM. Siendo este bloque ejecutado únicamente una vez por cada programa en cada sesión interna. Normalmente es utilizado para inicializar valores clave para la ejecución del programa. <Código a ejecutar> Ejemplo: START-OF-SELECTION.E V ENTOS ABAP es un lenguaje estructurado orientado a eventos. Sintaxis: START-OF-SELECTION. <Código a ejecutar> INITIALIZATION Este evento se ejecuta antes de que se muestre la pantalla de selección. M. INITIALIZATION. <inicialización de variables> Ejemplo: PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM. Sintaxis: INITIALIZATION.

Las líneas definidas en el TOP-OF-PAGE se mantienen fijas al visualizar el reporte en pantalla a la hora de realizar un desplazamiento vertical. El evento se ejecuta una vez que se haya procesado la pantalla de selección. ! ! Sintaxis: ! AT SELECTION-SCREEN {OUTPUT} | {ON <PARAM>} {ON HELP-REQUEST}FOR <PARAM> | {ON VALUE-REQUEST FOR <PARA>} {ON EXIT-COMMAND}. <Código>. De esta forma permite la creación de una cabecera definida por el programador siempre que se haya suprimido la cabecera estándar (REPORT <NOMBRE> NO STANDARD PAGE HEADING). y justo antes de que se muestre la impresión del reporte. ENDIF. ! Ejemplo: Parameters: numero(2). AT SELECTION-SCREEN. AT SELECTION-SCREEN Este evento solamente tiene sentido en los reportes. Por lo tanto todo el código entre la instrucción REPORT y el siguiente evento se ejecuta en el START-OF-SELECTION. WRITE ‘Hola Mundo!’. TOP-OF-PAGE Se ejecuta antes que se imprima información en la primera página de un reporte.La instrucción REPORT siempre tiene implícito el evento START-OFSELECTION. Xioma Consulting ! ABAP WORKSHOP" 20 . IF NUMERO > 10. En el caso que se genere un error todos los campos presentes en la pantalla de selección estarán disponibles nuevamente para recibir datos. Por lo que no es conveniente utilizar toda una página como cabecera dado que el usuario no podría desplazarse. END-OF-SELECTION Se procesa después que toda la información se ha leído. message s333(s1) with ‘Número mayor que 10'.

Si se utiliza la adición OUTPUT se ejecutara el código dentro del AT SELECTION-SCREEN antes que el usuario introduzca información en los campos. pues en caso de enviar un error el cursor se quedará posicionado sobre el parámetro indicado en el AT SELECTION-SCREEN. EXIT( ) o CANCEL ( ). Xioma Consulting ! ABAP WORKSHOP" 21 . igualmente para el ON VALUE-REQUEST FOR. será invocado el bloque al oprimir el botón de la ayuda de búsqueda (F4). El evento asigna a la variable de ambiente SYUCOMM el valor PICK. En el caso del ON HELP-REQUEST FOR. el doble click automáticamente asume el nuevo código. La adición ON <parámetro> asume que se ejecutará el bloque cuando un parámetro o select-options ha sido modificado. se espera la ejecución del bloque cuando se oprime el botón de ayuda (F1) sobre el campo indicado después del FOR . AT LINE-SELECTION El evento se ejecuta al oprimir la tecla F2 o al dar doble click sobre una línea en la pantalla de salida del reporte. El valor de la linea seleccionada quedará en la variable de ambiente SY-LISEL. ON EXIT-COMMAND ejecutará el bloque cuando el usuario oprima los botones de BACK ( ). Esto es muy útil cuando se desea realizar validaciones sobre los campos en la pantalla de selección. MESSAGE S333(S1) WITH SY-LISEL. Esto provocará que se deba evaluar en en el bloque de AT USER-COMMAND. Si a la tecla F2 se le cambia el código PICK. ! ! Sintaxis: ! AT LINE-SELECTION. Ejemplo: AT LINE-SELECTION. Este evento se ejecuta después del INITIALIZATION y el LOAD-OF-PROGRAM.

en otras palabras cuando el usuario ejecute un evento en la pantalla. Cuando la función es PICK o cuando inicia con el símbolo ‘% ‘ el bloque no se ejecuta.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 . A continuación se muestra una tabla con los códigos de función estándar: C"DIGO BACK P# P## P+ P++ PL# PL#n PL+n PNOP PP# PP#n PPn PRI.AT USER-COMMAND Este bloque se ejecutará cuando el sistema ejecute un código de función.

Los siguientes códigos é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 .

Al igual que en los tipos de datos estándar los nuevos tipos serán utilizables al crear nuevos objetos de datos y al asignar los tipos a los parámetros formales y símbolos de texto. En ABAP/4 existen los siguientes tipos de datos estándar: 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 Numérico Fecha (AAAAMMDD) Hora (HHMMSS) Hexadecimal Entero (Integer) Número Empaquetado 1 1 8 6 1 4 8 Blanco ’00…0’ ‘00000000’ ‘000000’ X’00’ 0 0 ‘0. NOMBRE(20) TYPE C.0’ Blanco Blanco Número de Punto Flotante 8 Cadena de caracteres Secuencia de bytes Definición de Tipos Es posible la definición de nuevos tipos de datos utilizando la instrucción TYPES.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. Xioma Consulting ! ABAP WORKSHOP" 24 . o nuevos tipos de datos definidos por el usuario (ya sea local en un programa o en el diccionario de datos de SAP). TYPES: BEGIN OF PERSONA. Sintaxis: TYPES <Nuevo tipo> TYPE <tipo>. Estos pueden ser nativos del sistema. Ejemplos: TYPES Numero TYPE I.

Todos los demás tipos debían estar disponibles debían ser definidos con la instrucción TYPES en un TYPE-POOL. El nombre del tipo puede ser de hasta 30 caracteres. Los números pueden ser utilizados. '.'. Ejemplos: *------------------------------------------------------* Autor: * Fecha de creación * Fecha de Modificación *------------------------------------------------------Contador = Contador + 1. y de esta manera ayudar a mejorar su interpretación. '-'. pero el nombre no puede consistir solo de números. Línea Completa: Este se activa al colocar el símbolo ‘*’ en la primera posición de la línea.EDAD TYPE I.0 solo se podían definir tipos de datos elementales y estructuras planas en el diccionario. sin embargo los TYPEPOOLS definidos en versiones anteriores siguen disponibles y pueden ser utilizados. ')'. '. Ejemplo: TYPE-POOLS: VRM. Desde la versión 6. Existen dos tipos de comentarios en ABAP: 1. 2. Antes de la versión 4. Y no se pueden END OF PERSONA. TYPE-POOLS Los TYPE-POOLS son precursores de la definición general de tipos en el diccionario ABAP. '+'. utilizar los caracteres especiales '('. '<' y '>'. Comentarios Los comentarios se utilizan para documentar el código. Al final de la línea: Se utiliza el símbolo ‘ “ ‘ .'.40 se ha reemplazado el uso de TYPE-POOLS por clases globales. “Contador de impresión Xioma Consulting ! ABAP WORKSHOP" 25 . Sintaxis: TYPE-POOLS: <type-pool>. ':'.

pero el nombre no puede consistir solo de números. DATA Nombre(40). CONSTANTS: BEGIN OF CONST_REC. El nombre de la variable puede ser de hasta 30 caracteres. C(2) TYPE I VALUE 'XX'. La declaración de las variables en ABAP se realiza con la instrucción DATA. '. Y no se pueden utilizar los caracteres especiales '(' . Ejemplos: CONSTANTS: CHAR1 VALUE ‘X’. Ejemplos: DATA Cumpleaños TYPE D. heredando así las mismas características. Ésta puede ser invocada desde cualquier lugar de un programa ABAP. '+' . Constantes La instrucción CONSTANTS permite la definición de objetos de datos estáticos declarados en un programa ABAP. Éstos pueden ser de cualquier tipo definido en el sistema.' y ':' . Los números pueden ser utilizados. ')' . Al utilizar la opción LIKE se crea la variable con referencia a otro objeto de datos en el sistema. Sintaxis: DATA <Variable> [TYPE <tipo>] | [LIKE <referencia>]. '-' . Ejemplo: DATA: Nombre(40). Nombre2 LIKE Nombre.Variables Las variables son valores que puede cambiar en el transcurso de la ejecución de un programa dependiendo de ciertas condiciones o información recibida en un programa. N(2) TYPE N VALUE '12'. Xioma Consulting ! ABAP WORKSHOP" 26 . INT TYPE I VALUE 99. Sintaxis: CONSTANTS <Constante> [TYPE <tipo>] VALUE <valor>.

etc. DATA: FECHA LIKE SY-DATUM. Para crear un field symbol se utiliza la siguiente sintaxis: Sintaxis: FIELD-SYMBOLS: <Símbolo1>. El símbolo “:” se utiliza para evitar la repetición consecutiva de ciertas instrucciones como DATA.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. <E1> = '19751130'. ENDIF. CONSTANTS. Ejemplo: DATA: contador type i. WRITE.99E9'. 99. '19950101'. … <Símbolo1>. '9. Fecha LIKE SY-DATUM. '235959'. UNASSIGN <E1>. Temporal(10). IF <E1> IS ASSIGN. 99. ASSIGN FECHA TO <E1>. Para asignar la referencia al símbolo creado se utiliza la instrucción ASSIGN: Sintaxis: ASSIGN <OBJETO> TO <SIMBOLO>. 'FF'. PARAMETERS. Separando los parámetros correspondientes a cada ocurrencia por medio de la coma. También es posible preguntar en las cláusulas condicionales si un Field Symbol esta asignado mediante la condición IS ASSIGN. WRITE FECHA. Field Symbols Los field symbols son nombres simbólicos que apuntan a un área de memoria durante el tiempo de ejecución. Es posible liberar estos punteros con la instrucción UNASSING. Ejemplo: FIELD-SYMBOLS: <E1>. Xioma Consulting ! ABAP WORKSHOP" 27 .

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]. Creación de textos Se puede crear textos dependientes del idioma o símbolos de texto para todos los programas ABAP. Estos generan una pantalla automática de entrada donde los parámetros tienen ciertas características especiales según el tipo al que pertenecen. Se asigna un código de tres dígitos <xxx> a cada símbolo de texto. Xioma Consulting ! ABAP WORKSHOP" 28 .Los símbolos de texto se pueden accesar en el menú del editor con la opción pasar a -> Elementos de Texto. El nombre de cada parámetro no puede exceder los 8 caracteres. Ejemplo: WRITE text-t01. También por medio de la transacción SE38 indicando el nombre del programa y seleccionando la opción Elementos de Texto. Parameters La instrucción PARAMETERS crea una variable de entrada con las mismas características que la instrucción DATA. Para accesarlo en el programa se utiliza de la siguiente manera: Sintaxis: text-<xxx>. Parámetros Los parámetros son variables de entrada en un programa tipo REPORT.

Ejemplo: TYPE-POOLS : VRM. values TYPE vrm_values. Ejemplo: PARAMETERS: ESTUDIA AS CHECKBOX. MATERIAL LIKE MARA-MATNR.Ejemplo: PARAMETERS: Nombre(40). Xioma Consulting ! ABAP WORKSHOP" 29 . Cada parámetro. B2 RADIOBUTTON GROUP R1. donde n indica el largo del campo a desplegar. La opción AS CHECKBOX permite que el campo en pantalla aparezca solamente como un campo de entrada binario (marcado o no marcado). Para definir los textos de los parámetros utilice en el menú la opción IR A-> Elementos de Texto>Textos de Selección. Ejemplo: PARAMETERS: B1 RADIOBUTTON GROUP R1. Para llenar la lista se puede utilizar la función VRM_SET_VALUES desde el evento AT SELECTION-SCREEN OUTPUT y el TYPE-POOL VRM. El parámetro por ende poseerá una longitud de 1 y será tipo CHAR. B3 RADIOBUTTON GROUP R1. Cuando se desean crear parámetros a seleccionar de una lista. La adición RADIOBUTTON genera un grupo de campos en la pantalla de selección de los cuales el usuario solamente puede seleccionar uno. al igual que en el caso anterior. DATA: param TYPE vrm_id. se utiliza la opción AS LIST BOX VISIBLE LENGHT <n>. es del tipo CHAR con longitud de uno. más no el tamaño de la variable. FECHA TYPE DATUM. value LIKE LINE OF values. El nombre de un parámetro no puede exceder los 8 caracteres. Esto aplica igualmente para los parámetros definidos en el Selection-Screen.

Ejemplo: PARAMETERS: MAT LIKE MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL. value-key = '1'. Ejemplo: PARAMETERS: nombre LIKE zusuario-nombre LOWER CASE. value-text = 'Crystalis'. Cuando se requiere que el parámetro sea obligatorio se agrega la instrucción OBLIGATORY. Al definir un valor por defecto para el parámetro se utiliza la instrucción DEFAULT. Si existiera una ayuda de búsqueda ya asignada a la referencia. APPEND value TO values. La instrucción LOWER CASE permite que se introduzcan letras minúsculas en el parámetro. ésta será ignorada. En caso que sea necesario definir un parámetro para ser utilizado Xioma Consulting ! ABAP WORKSHOP" 30 . AT SELECTION-SCREEN OUTPUT. Si el elemento de datos de la referencia posee un dominio que debe ser validado. value-text = 'Xioma'. APPEND value TO values. Ejemplo: PARAMETERS: werks LIKE bsis-werks VALUE CHECK. param = 'P_NAME'. Ejemplo: PARAMETERS: MAT LIKE MARA-MATNR DEFAULT ‘00001’. Cuando sea necesario asignar un objeto de ayuda al parámetro se ha de utilizar la instrucción MATCH CODE OBJECT. es necesario utilizar la instrucción VALUE CHECK. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = param values = values. value-key = '2'.PARAMETERS: p_name(1) AS LISTBOX VISIBLE LENGTH 20.

Xioma Consulting ! ABAP WORKSHOP" 31 . column(30) TYPE c. SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW. DATA name(80) TYPE c.únicamente para la invocación del reporte mediante SUBMIT. Select-Options Select-options indica un parámetro de tipo especial (RANGES) que permite que el usuario defina un conjunto de valores para el parámetro. MEINS LIKE MARA-MEINS NO-DISPLAY. se utiliza la instrucción NO-DISPLAY. CONCATENATE dbtab '-' column INTO name. Ejemplo: PARAMETERS: MAT LIKE MARA-MATNR OBLIGATORY. SELECTION-SCREEN END OF SCREEN 500. El nombre de cada parámetro no puede exceder los 8 caracteres. Ejemplo: PARAMETERS: dbtab(30) TYPE c. Sintaxis: SELECT-OPTIONS <parámetro> 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. SELECT-OPTIONS opcion FOR (name). Cuando se desea que el parámetro para el SELECT-OPTIONS sea dinámico se coloca la variable de referencia entre paréntesis. Esto no modifica el tamaño de la variable. CALL SELECTION-SCREEN 500 STARTING AT 10 10. Si es necesario reducir el tamaño del área de entrada se utiliza la instrucción VISIBLE LENGHT.

Ejemplo: SELECT-OPTIONS: nombre for zusuario-nombre LOWER CASE. se utiliza la instrucción NO INTERVALS. La instrucción LOWER CASE permite que se introduzcan letras minúsculas en el parámetro. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR OBLIGATORY. Si es necesario reducir el tamaño del área de entrada se utiliza la instrucción VISIBLE LENGHT. En caso que sea necesario definir un parámetro para ser utilizado únicamente para la invocación del reporte mediante SUBMIT. MEINS FOR MARA-MEINS NO-DISPLAY.Cuando se requiere que el parámetro sea obligatorio se agrega la instrucción OBLIGATORY. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR DEFAULT ‘00001’ TO ‘0002’ SIGN ‘I’ OPTION ‘BT’. se utiliza la instrucción NO-DISPLAY. Xioma Consulting ! ABAP WORKSHOP" 32 . Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR NO-EXTENSION. Al definir un valor por defecto para el parámetro se utiliza la instrucción DEFAULT. Esto no modifica el tamaño de la variable. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR VISIBLE LENGHT 10. y si fuera el caso de eliminar el campo para el hasta. Para eliminar el botón de múltiples selecciones se utiliza la instrucción NOEXTENSION. MEINS FOR MARA-MEINS NO INTERVALS.

Cuando sea necesario asignar un objeto de ayuda al parámetro se ha de utilizar la instrucción MATCH CODE OBJECT. Xioma Consulting ! ABAP WORKSHOP" 33 . <Parámetros> SELECTION-SCREEN END OF BLOCK bloque. PARAMETERS: P_PARA(20). Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL. Si existiera una ayuda de búsqueda ya asignada a la referencia. SELECTION-SCREEN END OF BLOCK EJE_1. Recuadros y Títulos Es posible crear recuadros que encapsulen los parámetros de selección y textos. Controles de Selección de Pantalla Utilizando el comando SELECTION-SCREEN es posible brindar un formato a la pantalla de selección en un reporte. Ejemplo: Report Zejemplo. Sintaxis: SELECTION-SCREEN BEGIN OF BLOCK bloque <WITH FRAME> <TITLE título> <NO INTERVALS>. *Ejemplo 1 SELECTION-SCREEN BEGIN OF BLOCK EJE_1 WITH FRAME TITLE EJE_1 NO INTERVALS. ésta será ignorada. SELECT-OPTIONS: S_FECHA FOR SY-DATUM.

SELECT-OPTIONS: S_FECHA3 FOR SY-DATUM. PARAMETERS: P_PARA2(20). PARAMETERS: P_PARA3(20). SELECTION-SCREEN END OF BLOCK EJE_2. MOVE ‘EJE 1’ TO EJE_1. SELECTION-SCREEN END OF BLOCK EJE_3. El recuadro se genera alrededor del código incluido en el ámbito del SELECTION-SCREEN al utilizar la adición WITH FRAME. pero éste no puede superar los 8 caracteres. Xioma Consulting ! ABAP WORKSHOP" 34 . En combinación con el WITH FRAME se puede utilizar la adición TITLE para agregar un título al recuadro. *Ejemplo 3 SELECTION-SCREEN BEGIN OF BLOCK EJE_3.*Ejemplo 2 SELECTION-SCREEN BEGIN OF BLOCK EJE_2 WITH FRAME TITLE EJE_2. SELECT-OPTIONS: S_FECHA2 FOR SY-DATUM. La adición NO INTERVALS hace que el SELECT-OPTIONS aparezca dentro del recuadro como un campo único. INITIALIZATION. MOVE ‘EJE 2’ TO EJE_2.

PARAM3(8). para ello se utiliza la adición BEGIN OF LINE y END OF LINE. SELECTION-SCREEN END OF LINE.Existen dos limitantes para éste comando. SELECTION-SCREEN BEGIN OF LINE. Ejemplos: REPORT EJEMPLO2. La primera es que solamente es posible anidar 5 bloques en profundidad y la segunda es que la adición NO INTERVALS se hereda a los bloques anidados solo si la adición WITH FRAME esta presente. <parámetros / texto> SELECTION-SCREEN END OF LINE. PARAM2(8). PARAMETERS: PARAM1(8). Sintaxis: SELECTION-SCREEN BEGIN OF LINE. Xioma Consulting ! ABAP WORKSHOP" 35 . Agrupación de Ítemes Utilizando el SELECTION-SCREEN es posible agrupar parámetros o textos en una misma línea.

SELECTION-SCREEN END OF LINE. Es posible incluir parámetros. PARAMETERS: PARAM1(8). W_NOMBRE = ‘Comentario’. SELECTION-SCREEN BEGIN OF LINE. El SELECT-OPTIONS no es permitido dado que la naturaleza de éste es crear múltiples objetos en una sola línea (la cota inferior y la cota superior). comentarios o bloques subrayados como campos de entrada en el ámbito del BEGIN OF LINE y END OF LINE. SELECTION-SCREEN COMMENT (15) W_NOMBRE. W_BOTON = ‘Botón’. Sintaxis: SELECTION-SCREEN POSITION <posición>. SELECTION-SCREEN ULINE (10). PARAMETERS: P_PARAM1(10). Xioma Consulting ! ABAP WORKSHOP" 36 . INITIALIZATION.REPORT EJEMPLO2. botones. SELECTION-SCREEN PUSHBUTTON (10) W_BOTON USER-COMMAND UCOM. Ésta opción se utiliza para definir la posición en la línea definida por el BEGIN OF LINE. Posicionamiento de Ítemes Dentro del conjunto de instrucciones posibles para la adición BEGIN OF LINE se encuentra la opción POSITION. Ejemplo: SELECTION-SCREEN BEGIN OF LINE.

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 selección 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 también 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 selección no será generada. Si se incluye el parámetro 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 función del usuario dentro del código para interactuar dinámicamente 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 = 'Botón'. AT SELECTION-SCREEN. IF SSCRFIELDS-UCOMM = 'UCOM'. MESSAGE S333(S1) WITH 'Se ha oprimido el botón'. ENDIF.

Xioma Consulting ! ABAP WORKSHOP"

39

y se pueden crear en ésta hasta cinco botones en el nivel de la barra de herramientas. Ejemplo: TABLES: SSCRFIELDS. Botones en la Barra de Herramientas Muchos de los reportes estándar de SAP poseen botones en la barra de herramientas junto al botón de ejecución . Sintaxis: SELECTION-SCREEN FUNCTION KEY <número>. SELECTION-SCREEN FUNCTION KEY 1. Entonces se puede hacer una evaluación de este campo en el evento SELECTION-SCREEN para poder determinar si un éste fue o no oprimido y ejecutar el código que corresponde. SELECTION-SCREEN END OF LINE. Este tipo de botón también puede ser utilizado en el momento que se genera la pantalla de selección. El parámetro número puede tener valores de 1 a 5. Xioma Consulting ! ABAP WORKSHOP" 40 . SELECTION-SCREEN BEGIN OF LINE. el campo del sistema SSRFIELDS-UCOMM obtiene el valor del valor que se le ha asignado al botón en su definición. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM. Cuando se hace click sobre el botón.Puede notarse en el ejemplo que el botón puede existir por si mismo dado que es un campo de entrada.

Se puede asociar el campo FUNCTXT_02 al botón dos. Para asignar texto al botón que se esta creando. MOVE ‘Botón de Aplicación’ to SSCRFIELDS-FUNCTXT_01. SELECTION-SCREEN END OF LINE. y así sucesivamente hasta el botón cinco. y así sucesivamente. Al ejecutar el programa. para el campo SSCRFIELDS-FUNCTXT_02 para la tecla de función 2.SELECTION-SCREEN SKIP 9. Este valor es entonces desplegado en el botón en tiempo de ejecución. La variable toma el valor en el momento de realizar el click sobre el botón y puede ser evaluado en el evento AT SELECTION-SCREEN. El momento para realizar estas asignaciones es en el evento INITIALIZATION. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2 USER-COMMAND UCOW. El sistema inicializa el campo SSCRFIELDS-UCOMM a FC01 para la tecla de función 1. el campo SSCRFIELDS-FUNCTXT_01se asocia al botón 1 de la barra de herramientas en el evento de inicialización. Algunas variables del sistema son inicializadas cuando se utiliza este comando. Xioma Consulting ! ABAP WORKSHOP" 41 . W_BUTTON = ‘Botón 1’. SELECTION-SCREEN BEGIN OF LINE. INITIALIZATION. FC02 para la tecla de función 2 y así sucesivamente. es necesario asegurarse de asignar un texto al campo SSCRFIELDS-FUNCTXT_01 para la tecla de función 1. W_BUTTO2 = ‘Botón 2’.

SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2 USER-COMMAND UCOW. SELECTION-SCREEN END OF LINE. Ejemplo: SELECTION-SCREEN BEGIN OF LINE. W_BUTTO2 = 'Botón 2'. W_BUTTON = 'Botón 1'. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM.Líneas en Blanco Las líneas en blanco permiten dejar espacios en la pantalla de selección para facilitar la lectura de ésta. Para dejar una línea en blanco se utiliza el comando SKIP de la misma manera que se hace en un reporte ABAP. en caso de ser solamente 1 se puede omitir el número. Sintaxis: SELECTION-SCREEN SKIP <número de líneas>. SELECTION-SCREEN END OF LINE. Xioma Consulting ! ABAP WORKSHOP" 42 . INITIALIZATION. SELECTION-SCREEN BEGIN OF LINE. El número de líneas en blanco puede ser de 1 a 9. SELECTION-SCREEN SKIP 9.

. SELECTION-SCREEN END OF SCREEN 1001. Sintaxis: SELECTION-SCREEN BEGIN OF SCREEN <DYNPRO> TITLE <título> AS WINDOW. select-options: centro for t001-waers. . Ejemplos: SELECTION-SCREEN BEGIN OF SCREEN 1001 TITLE title AS WINDOW. . . parameters: nombre(10). .Ventanas de Selección Es posible definir ventanas de selección que pueden ser llamadas desde programas de diálogo. CALL SELECTION-SCREEN ‘1001’ STARTING AT 5 5 Xioma Consulting ! ABAP WORKSHOP" 43 . SELECTION-SCREEN END OF SCREEN <DYNPRO>. .

Fecha del Sistema Número de la pantalla actual Indica la iteración del LOOP Número de Mensaje Tipo de Mensaje (E.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 ejecución por el sistema mientras se ejecuta un programa. No es necesario definir la estructura y ésta estará disponible desde cualquier parte de un programa.I.W) Línea de Mensaje 1 Línea de Mensaje 2 Línea de Mensaje 3 Línea de Mensaje 4 Número de Página Nombre del programa ABAP Valor de retorno de una sentencia ABAP Línea actual en la tabla interna Código de la Transacción Total de entradas en la tabla interna Hora Título del programa Función ejecutada ID del usuario Valor de la línea seleccionada Xioma Consulting ! ABAP WORKSHOP" 44 . El siguiente cuadro describe los campos que pueden resultar de uso más 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.

Ejemplo: … Select single * from T001. IF SY-SUBRC EQ 0. WRITE: ‘Existen valores en la tabla T001’. … Xioma Consulting ! ABAP WORKSHOP" 45 . ENDIF.

OP E RAD ORES ARI TM. muchas de éstas se pueden conseguir bajo la cláusula COMPUTE. Ejemplo: A = A * 2. ADD 1 to A. La Resta El símbolo ‘-‘ indica la operación de sustracción. SUBSTRACT 1 TO A. La suma Para realizar una suma se utiliza el símbolo ‘+’ o la instrucción ADD. MULTIPLY A BY 2. Sin embargo en el presente documento solamente se nombraran los operadores aritméticos de uso más frecuente. La Multiplicación La Multiplicación utiliza el símbolo ‘*’ o en su defecto puede utilizarse la instrucción MULTIPLY. siendo esta última la menos eficiente. Xioma Consulting ! ABAP WORKSHOP" 46 . así mismo es posible la utilización de la instrucción SUBSTRACT. Ejemplo: A = A + 1.T ICOS Existen varias operaciones en el estándar. Ejemplo: A = A – 1. Sin embargo se recomienda utilizar la primera forma del ejemplo por ser más eficiente. Es más eficiente la utilización del símbolo ‘-‘.

El Exponente Para elevar un valor a una potencia n se utiliza dos veces el símbolo ‘*’ quedando de la siguiente manera: ‘**’. 47 Xioma Consulting ! ABAP WORKSHOP" . Ejemplo: A = A / 2. 4 5 El residuo de la divisi-n de 5 entre 3 es 2. Ejemplo: B = A MOD 3. Ejemplo: B = A DIV 3. Ejemplo: A = A ** 2. El Residuo4 Para obtener el residuo de la división se utiliza el operador MOD. El cociente de la divisi-n de 5 entre 3 es 1. DIVIDE A BY 2. El cociente5 Para obtener el cociente de la división se utiliza el operador DIV.La División Para la división se utiliza el símbolo ‘/’ o al igual que en los otros casos existe una instrucción equivalente en lenguaje natural llamada DIVIDE siendo esta menos eficiente.

OPERADORES LÓGICOS o BOOLEANOS Los operadores lógicos sirven para definir relaciones entre expresiones generando de esta manera nuevos valores de verdad. Los operadores que existen en ABAP son los siguientes: AND.IN S T RU CCIO NES DE D ECIS I "N Las instrucciones de decisión evalúan una expresión y en base al valor de verdad que tenga dicha expresión se ejecuta el código que corresponda. Xioma Consulting ! ABAP WORKSHOP" 48 . Ejemplo: Incorrecto: f1 EQ f2 AND (f3 EQ f4). OR y NOT. Estos operadores respetan las reglas de la lógica Booleana. En la lógica Booleana solamente existen dos valores: VERDADERO o FALSO. 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 encerrándolas entre paréntesis. Los valores y campos deben separarse utilizando espacios en blanco.

NE >.EQ <>.Correcto: f1 EQ f2 AND ( f3 EQ f4 ). LE BETWEEN DESCRIPCI"N Igual que Diferente que Mayor que Menor que Mayor o igual que Menor o igual que Entre Es recomendable la utilización de los mnemónicos dado que puede resultar menos confusa durante la interpretación del código. 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 operándos. GT <. Xioma Consulting ! ABAP WORKSHOP" 49 . GE <+. En ABAP existen los siguientes: OPERADOR =. LT >=. El NOT toma prioridad sobre el operador AND.

sy-fdpos contiene el offset del primer carácter en el operando1 que también está contenido en el operando2. si operando1 sólo contiene caracteres del operando2. Si el resultado de la comparación es positivo. sy-fdpos contiene la longitud de operando1. que no está contenido en el operando2. minúsculas y espacios en blanco son tomados en cuenta para ambos operandos. Contains Any: Verdadero. CN CA NA Xioma Consulting ! ABAP WORKSHOP" 50 . sy-fdpos contiene la longitud del operando1. Contains Not Any: Es verdadero si la expresión lógica utilizada con CA es falsa. sino también otros caracteres no incluidos en el operando2. Si el resultado de la comparación es negativo. minúsculas y espacios en blanco son tomados en cuenta en ambos operandos. sy-fdpos contiene la longitud de operando1. Si la comparación es verdadera. Contains Not Only: Es verdadero si una expresión lógica con CO (Contains Only) es falsa. Si el operando1 o operando2 son iniciales. en cuyo caso la expresión lógica es siempre verdadera. Si el resultado de la comparación es negativo. es decir. a no ser que operando1 sea inicial también. la expresión lógica es siempre falsa. Mayúsculas. Mayúsculas. si operando1 contiene al menos un carácter del operando2. Si el resultado de la comparación es verdadero. OPERADOR DESCRIPCI"N CO Contains Only: Es verdadero. sy-fdpos contiene el offset del primer carácter en el operando1 que también está contenido en el operando2. si el operando1 no contiene ningún carácter del operando2. entonces la expresión lógica es falsa. Si el resultado de la comparación es negativo. Si el resultado de la comparación es positivo. es decir si el operando1 no solo contiene caracteres de operando2. sy-fdpos contiene la longitud del operando1. Sy-fdpos es puesto de la misma manera como con CO. Si el operando2 es inicial. sy-fdpos contiene el offset del primer carácter en el operando1. sy-fdpos contiene el offset del primer carácter en el operando1 que no está contenido en el operando2.Además existe una serie de operadores relacionales que están orientados a la evaluación de cadenas de caracteres. Si la comparación es falsa.

NS CP NP Xioma Consulting ! ABAP WORKSHOP" 51 .OPERADOR DESCRIPCI"N CS Contains String: Es verdadero si el valor del operando2 está contenido en el operando1. es decir. Si el operando1 es inicial (contiene caracteres sólo en blanco). Los caracteres especiales pueden ser usados para formar el patrón del operando. si el operando1 no contiene el valor del operando2. sy-fdpos contiene el offset del operando2 en el operando1. la diferencia entre mayúsculas y minúsculas es tomada en cuenta. Si la comparación es verdadera. Contains Pattern: Es verdadero. No Pattern: Es verdadero. y "+" representa cualquier carácter. donde "*" representa cualquier cadena de caracteres. sy-fdpos contiene el offset del operando2 en el operando1. la expresión lógica es falsa. sy-fdpos contiene el offset del operando2. a no ser que el operando2 sea también inicial. Se puede seleccionar caracteres en el operando2 para una comparación directa añadiendo el símbolo "#" antes de los caracteres requeridos. si el contenido del operando1 encaja con el patrón en el operando2. Si el resultado de la comparación es negativo. caracteres especiales "*" en el operando2 son ignorados si el operando2 también contiene otros caracteres. Si la comparación es verdadera. sy-fdpos contiene la longitud del operando1. Para estos caracteres. es decir si el operando1 no encaja en el patrón del operando2. sy-fdpos contiene la longitud del operando1. Diferenciaciones entre mayúsculas y minúsculas no son tomadas en cuenta. por lo que caracteres especiales "*" en el operando2 son ignorados si el operando2 también contiene otros caracteres. Contains No String: Es verdadero si la expresión lógica utilizada con CS es falsa. sy-fdpos contiene la longitud del operando1. En este caso la expresión lógica es siempre verdadera. sy-fdpos contiene el offset del operando2 en el operando1. Si la comparación es falsa. syfdpos contiene la longitud del operando1. Si el resultado de la comparación es verdadero. Diferenciación entre mayúsculas y minúsculas o espacios en blanco no son tomados en cuenta. si una expresión lógica con CP es falsa. Si el resultado de la comparación es negativo. Si la comparación es verdadera. Si la comparación es falsa.

str2 = 'ABCDE'.Contains Only DATA: str1 TYPE string. ENDIF. Sintaxis: IF <expresión>.IF IF evalúa una expresión lógica. IF str1 CO str2. ENDIF. Ejemplos: IF A GT 10. WRITE:/ ‘A es mayor que 10 y menor que 20’. IF A LT 20. “ resultado = verdadero “ SY-FDPOS = 3 ENDIF. str1 = 'BD '. “MENOR QUE 20 ENDIF. El bloque debe cerrarse con la instrucción ENDIF. str2 = 'ABCD '. Xioma Consulting ! ABAP WORKSHOP" 52 . “MAYOR QUE 10 IF A BETWEEN 10 AND 20. ejecuta el código que contiene su bloque. “Comparación de 10 IF A GT 10. WRITE:/ ‘A es mayor que 10’. <Código>. IF str1 CO str2. “Entre 10 y 20 **Ejemplo de CO . str2 TYPE string. ENDIF. str1 = 'BD '. WRITE:/ ‘A es mayor que 10 y menor que 20’. ENDIF. En caso que el valor de la expresión sea verdadera. de lo contrario continua con el código siguiente.

str1 = 'ABABC'.Contains not only DATA: str1 TYPE string. str1 = 'ABcde'.. str2 TYPE string. str2 TYPE string. “ resultado = falso “ SY-FDPOS = 0 ENDIF. IF str1 NA str2. Xioma Consulting ! ABAP WORKSHOP" 53 . **Ejemplo de CA .Contains Any DATA: str1 TYPE string. str1 = 'ABcde'. IF str1 CA str2.ENDIF. str2 TYPE string. str2 = 'ABCD '. IF str1 NA str2. str2 = 'AB '. **Ejemplo de Contains Not Any DATA: str1 TYPE string.. “ resultado = falso “ SY-FDPOS = 5 ENDIF. IF str1 CN str2. “ resultado = verdadero “ SY-FDPOS = 3 ENDIF. str2 = 'Bd '. . IF str1 CA str2. str1 = 'ababa'. IF str1 CN str2. “ resultado = falso “ SY-FDPOS = 5 ENDIF. “ resultado = falso “ SY-FDPOS = 2 **Ejemplo de CN . str1 = 'ABAB '. str2 ='bD '. str2 = 'ABCD '. “ resultado = true “ SY-FDPOS = 1 ENDIF. str1 = 'ABC12'. str2 = 'AB '.

str2 = '*C*F+H'. str2 = 'ce '. “ resultado = verdadero “ SY-FDPOS = 5 ENDIF. **Ejemplo de NS . str1 = 'ABcde'. “ La expresión lógica evaluada con CP es verdadera “ por lo que ejecutará al código dentro del IF ENDIF. IF str1 CS str2. IF str1 CP str2. str2 = 'ce '. str1 = ' ABcde'. “ resultado = falso “ SY-FDPOS = 1 ENDIF. Xioma Consulting ! ABAP WORKSHOP" 54 . “ resultado = falso “ SY-FDPOS = 5 ENDIF. “ resultado = verdadero “ SY-FDPOS = 1 ENDIF. str2 = ' *b*'. str2 TYPE string.ENDIF. **Ejemplo de CP . “ resultado = verdadero “ SY-FDPOS = 1 ENDIF. str2 TYPE string.Contains Pattern DATA: str1 TYPE string. IF str1 NS str2. str1 = 'ABCDEFGH'. IF str1 NS str2.Constains no String DATA: str1 TYPE string. “ resultado = verdadero “ SY-FDPOS = 5 **Ejemplo de CS . str1 = 'ABcde'. str2 TYPE string. str2 = 'bC '. IF str1 CP str2.Contains String DATA: str1 TYPE string. str1 = 'ABcde'. IF str1 CS str2. str2 = 'bC '. str1 = 'ABcde'.

“ resultado = falso “ SY-FDPOS = 1 ENDIF. str2 TYPE string. str2 = '*C*F+H'. IF str1 NP str2. “ resultado = verdadero “ SY-FDPOS = 5 ENDIF. IF str1 NP str2. IF str1 NP str2. serán ejecutadas solo si la expresión en la sentencia IF no se cumple. Sintaxis: IF <expresión>. Se puede colocar tantos ELSEIF como se necesiten. por lo que “ el resultado de la evaluacion con NP es verdadero ENDIF. Si se desea hacer otra verificación si la primera no se cumple.str1 = ' ABcde'. IF str1 NP str2. str2 = ' *b*'. IF str1 CP str2. por lo que “ el resultado de la evaluacion con NP es falso ENDIF. str2 = ' *#b*'. str2 = ' *#b*'. **Ejemplo de NP . IF <expresión>. str2 = '*C*F+H'. Xioma Consulting ! ABAP WORKSHOP" 55 . <Código>. <Código>. se recomienda utilizar ELSEIF. str1 = 'ABCDEFGH'. ELSE. str1 = 'ABDEFCGH'. str1 = ' ABcde'. ENDIF. ELSE (ELSEIF) Las sentencias que se coloquen después del ELSE. “ resultado = falso “ SY-FDPOS = 5 ENDIF. str1 = ' ABcde'.NO Pattern DATA: str1 TYPE string. “ str1 coincide con el patron de str2. “ str1 no coincide con el patron de str2.

WHEN 1 OR 2. WHEN OTHERS. . pasa a la siguiente iteración al encontrarse en un DO. WRITE:/ ‘A es igual a 3’.. WHEN 3. ENDIF...<Código>. ENDCASE. ELSE. pasa a la siguiente sentencia. WRITE:/ ‘A tiene un valor diferente a 1. Xioma Consulting ! ABAP WORKSHOP" 56 . WHEN OTHERS. .. CASE Dependiendo del valor del campo. ELSEIF. pero si no. WHEN f11 OR f12 . Si es así. . WHEN f21 OR f22 . WRITE:/ ‘A es menor que 20’. ENDIF.. ELSEIF.. WRITE:/ ‘A es igual a 1 o a 2’. ..2 o 3’. OR f2m.. Sintaxis: CASE f. <Código>. Con la instrucción WHEN especificas las condiciones que se quieren evaluar sobre dicho campo. Ejemplo: IF A LT 20. <Código>. Ejemplo: CASE A. ELSEIF A GT 50. CHECK Verifica que la expresión lógica subsecuente es verdadera. <Código>. ELSE. ENDCASE. OR f1n. WRITE:/ ‘A es mayor o igual a 20 y menor que 50’. . se ejecutarán diferentes bloques de sentencias de ejecución. WRITE:/ ‘A es mayor que 50’.

o sale de la rutina.WHILE. el CHECK evalúa la condición y no permite que se ejecute el resto del código sino hasta que el contador sea mayor que 10. … ENDDO. Contador = contador + 1. Sintaxis: CHECK <expresión>. si se encuentra en un FORM. Xioma Consulting ! ABAP WORKSHOP" 57 . CHECK contador LT 10. LOOP o SELECT. FUNCTION o MODULE. En el ejemplo. Ejemplo: DO.

DATA COUNT TYPE I.Begin:'. DO Repite las sentencias encerradas entre el DO y el ENDDO. ADD 1 TO NUMBER. Sintaxis: WHILE <expresión>. ENDDO. ENDIF. WRITE: / NUMBER. ADD SY-INDEX TO COUNT. WRITE: / 'SY-INDEX . Sintaxis: DO N TIMES [VARYING f FROM f1 NEXT f2]. ya sea por cantidad de veces determinada o hasta que se cumpla cierta expresión lógica. (3) SY-INDEX. DO 10 TIMES. EXIT. IF SY-INDEX = 10. ENDWHILE. Ejemplo: DO. (3) SY-INDEX. ENDWHILE. ENDDO. <Código>. Xioma Consulting ! ABAP WORKSHOP" 58 . STOP o REJECT. WHILE NUMBER <> SEARCH_ME. WRITE: 'End:'.I N S TRU CCI ONES D E ITERACI "N A continuación instrucciones que permiten ejecutar un bloque de sentencias de forma repetitiva. Ejemplo: SEARCH_ME = 23. WHILE Repite las sentencias encerradas entre el WHILE y el ENDWHILE. La opción VARYING le permite hacer iteraciones entre un valor y otro. de forma infinita hasta que es detenido por un EXIT. mientras se cumpla la expresión lógica asociada.

WHILE. Sintaxis: CONTINUE. Ejemplo: DO. IF contador LT 9. Xioma Consulting ! ABAP WORKSHOP" 59 . START-OF-SELECTION y GET. LOOP o SELECT. CONTINUE. ENDDO. Sintaxis: EXIT. … CONTINUE Salta de inmediato a la siguiente iteración. FUNCTION y MODULE. ENDIF. Contador = contador + 1. Sintaxis: STOP. IF contador GT 9. ENDDO … STOP Esta instrucción solo puede ser utilizada en programas ejecutables y en los siguientes eventos: AT SELECTION-SCREEN (sin ninguna adicion). STOP sale de inmediato de estos eventos y ejecuta el evento END-OF-SELECTION. si se encuentra en un FORM.EXIT Permite salir de la iteración. si se encuentra en un DO. EXIT. Contador = contador + 1. Ejemplo: DO. o sale de la rutina. ENDIF.

D E S P LI EG U E EN PANTALLA
Existen dos maneras de enviar la información en SAP hacia la pantalla y/o impresora. La más elaborada es la elaboración de formularios (vía Smartforms o SAPScript) y la otra por medio de reportes que se construyen utilizando únicamente instrucciones de ABAP. Las más utilizadas para generar estos reportes se describen a continuación.

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 <posición> <(tamaño)> <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 <adición> <ON/OFF>.

Xioma Consulting ! ABAP WORKSHOP"

60

Las adiciones más comunes son: 1. COLOR: Específica 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 línea continua por todo el ancho de la salida del reporte. Sintaxis:
ULINE.

Si se desea imprimir una línea continua pero de un tamaño determinado, se puede utilizar la variable del sistema SY-ULINE. Esta variable contiene una línea continua de 255 caracteres en tiempo de ejecución. Ejemplo:
WRITE: / SY-ULINE(80).

SKIP
Permite saltar n líneas en una salida de reporte. Si no se indica la cantidad de líneas, solo saltará una línea. 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 posición 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 símbolo ‘+’ para indicar el desplazamiento en el string (de izquierda a derecha) y entre paréntesis el tamaño del substring. Ejemplo:
DATA: descripción(40) value ‘Mazanas, Peras y Uvas’, Fruta(7). Fruta = * Fruta Fruta = * Fruta descripción+0(7). obtiene el valor ‘Manzanas’. descripción+9(5). obtiene el valor ‘Peras’.

Es posible también utilizar el substring sin asignarlo a una variable.
IF descripción+9(5) EQ ‘Peras’. Descripción+9(5) = ‘Fresa’. ENDIF.

Si se desea incluir el símbolo ‘ 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

se puede agregar la opción: NO-GAPS. FIRST VALUE ' John '. VALUE 'F. TYPE STRING. eliminando todos los espacios que ese encuentren antes del primer carácter.'. WRITE NAME. Ejemplo: CONCATENATE ONE TWO THREE INTO NAME SEPARATED BY SPACE. si se desea separar cada componente por un espacio.Ejemplo: DATA: ONE(10) TWO(3) THREE(10) NAME(20). Sí se quisieran eliminar todos los espacios en blanco contenidos en la cadena de caracteres. Condense Permite desplazar toda la cadena de caracteres que se encuentre en una variable hacia el lado izquierdo. VALUE ' Kennedy'. Ejemplo: DATA NAME (30). Ejemplo: CONDENSE NAME NO-GAPS. El valor final de la variable NAME es: “JohnF. NAME+20(10) = ' CA'. NAME(10) = ' Xioma'. La opción SPACE puede ser sustituido por cualquier cadena de caracteres o una variable. Sintaxis: CONDENSE f1. se debe agregar la opción: SEPARATED BY SPACE.Kennedy”. CONCATENATE ONE TWO THREE INTO NAME. El valor final de la variable NAME será entonces “Xioma Consulting CA”. NAME+10(10) = 'Consulting'. Xioma Consulting ! ABAP WORKSHOP" 63 . CONDENSE NAME.

Al ejecutar. Sintaxis: STRLEN( <variable> ). Sintaxis: SPLIT <string> AT <ocurrencia> INTO [<var1> <var2>.. MOVE 'ABCB' TO FIELD. Ejemplo: DATA: TAM TYPE I. STRLEN Esta función calcula el tamaño de un string y lo retorna a una variable. la reemplaza. Ejemplo: DATA FIELD(10). De tener exito retorna SY-SUBRC igual a cero. Una vez que la instrucción encuentra la primera ocurrencia. tam = STRLEN( nombre ).Replace Se utiliza REPLACE para reemplazar una ocurrencia dentro de una cadena de caracteres. En la variable SY-SUBRC se retorna el valor 0 si el reemplazo fue exitoso ó 4 en caso de que no lo fuera. SPLIT Divide un string en varias secciones a partir de una ocurrencia. el valor de field es ‘AstringCB’. Sintaxis: REPLACE <substring> WITH <ocurrencia> INTO <string>. Xioma Consulting ! ABAP WORKSHOP" 64 ..<varn> | TABLE <itab>]. En ese momento finaliza la búsqueda. REPLACE 'B' WITH 'string' INTO field.

TABLE OF string. SPLIT text AT space INTO: str1 str2 str3. string. string. TABLE itab. string. text = `Ejemplo preparado por xioma Consulting `. Xioma Consulting ! ABAP WORKSHOP" 65 .Ejemplo: DATA: str1 str2 str3 itab text TYPE TYPE TYPE TYPE TYPE string.

B(2). MOVE Mueve el contenido de una variable a otra. Sintaxis: MOVE <v_origen> TO <v_destino>. Xioma Consulting ! ABAP WORKSHOP" 66 . S (mensaje). A (Abortar transacción). sin modificar el contenido de la variable original. contempla los tipos W (advertencia). X(Salir con un mensaje de dump). MESSAGE Envía un mensaje al usuario debidamente clasificado en el repositorio de SAP que aparece en la parte inferior de la ventana. I (informativo) . MOVE A+0(1) TO C. Sintaxis: MESSAGE ID ‘<Clase>’TYPE ‘<tipo>’NUMBER ‘<número>’WITH <param 1> … <param n>. MOVE A TO B. Sintaxis: CLEAR <variable>. C(1). E (error). Esto es equivalente a: B = A. Ejemplo: MESSAGE ID ‘BC400’TYPE ‘I’ NUMBER ‘040’ WITH wa_itab-campo1 wa_itab-campo2. No necesariamente la variable de destino es del mismo tipo que la variable de origen.OT RAS I N STRU CCI ON ES CLEAR Permite inicializar una variable con los valores iniciales. Ejemplo: DATA: A(2) value 'A1'. C = A+0(1).

se pasa a la siguiente pantalla Xioma Consulting ! ABAP WORKSHOP" 67 .La administración de las clases de mensajes se realizan a través de la transacción SE91. Después de darle al botón Crear.

por ende siempre aparecen en el idioma en que se haya ingresado el usuario.Se selecciona transporte.Param1 valor1 WITH param2 valor2.. SUBMIT Ejecuta un programa tipo reporte desde otro programa. Cada mensaje puede contener parámetros que son indicados con el símbolo &. y se asigna el nuevo objeto su respectivo paquete y orden de Seleccionando la pestaña Mensajes.. Sintaxis: SUBMIT <REPORT> [VIA SELECTION-SCREEN ] [AND RETURN ] [WITH.] Ejemplo: SUBMIT REPORT01 VIA SELECTION-SCREEN. se puede empezar a insertar los mensajes que se desea utilizar. Xioma Consulting ! ABAP WORKSHOP" 68 . Los mensajes pueden ser traducidos.

ENDFORM. 7 La utilización de la SE37 no esta contemplada en este manual Xioma Consulting ! ABAP WORKSHOP" 69 . por lo que puede ser complicado determinar errores. Los procedimientos pueden definirse en cualquier parte del código ABAP. Una vez que se define el procedimiento todas las definiciones que se hacen de constantes y variables son locales. Sintaxis: FORM <procedimiento> [USING <variables de entrada> | USING VALUE <variable de entrada>] [CHANGING <variables de salida> | CHANGING VALUE(variable de salida) ]. Es importante recordar que un macro puede contener otros macros en su código más no puede invocarse a si mismo. SAP almacena los macros del estándar en la tabla TRMAC. <Código>.P ROCED IM I ENT OS. Ejemplo: 6 Caja negra es un término que se utiliza para referirse a un sistema que recibe una entrada y retorna una salida. Un macro es un código simple que se reemplaza en el código principal en tiempo de ejecución. por lo cual no es necesario definirlas en el programa. F U N CI ONE S Y MACROS Los procedimientos son subprogramas que se utilizan para modulizar una aplicación. pero se comportan como una “caja negra”6. En ABAP los procedimientos reciben y retornan valores por medio de parámetros. No es recomendable que los macros posean un código extenso pues no es posible colocar break points ni debuggear el código definido en ellos. FORM Se utiliza para indicar el inicio del procedimiento con sus parámetros de entrada y salida. Su definición es global en el sistema. Esta instrucción debe finalizar con un END FORM. Estos parámetros pueden ser por valor (al utilizar VALUE) o por referencia. Las funciones son similares a los procedimientos. Las funciones en ABAP se manipulan por medio de la transacción SE377. pero del cual se desconoce su mecanismo interno. El uso de los mismos hace que los programas sean más entendibles. Puede recibir hasta 9 parámetros. Existen ya una cantidad considerable de funciones estándar definidas en el sistema y que están disponibles para el desarrollador.

aunque el procedimiento no haya finalizado. Cuando los parámetros que recibe el procedimiento son por referencia. CALL Este comando invoca a una función. "suma Al utilizar el parámetro por valor en el CHANGING el parámetro original no cambia sino hasta que el procedimiento terminar. y éste genera el CALL con los parámetros de entrada y salida. Normalmente es más sencillo utilizar la opción de PATRON en el editor ABAP (SE38) para seleccionar del pool de funciones la función que se desea utilizar. si se cambia el valor de los parámetros (tanto los del USING como los del CHANGING) también cambian los valores de los parámetros originales. Sintaxis: PERFORM <procedimiento> USING <variables de entrada> CHANGING <variables de salida>. Sintaxis: CALL ‘<función>’ <IMPORTING <EXPORTING param param param param 1 n 1 n = valor 1 … = valor n> = valor 1 … = valor n>. PERFORM Sirve para realizar la invocación de un procedimiento. WRITE / 'Hello world'. Ejemplo: CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = total IMPORTING OUTPUT = salida. ENDFORM. Xioma Consulting ! ABAP WORKSHOP" 70 . resultado = num1 + num2. FORM suma USING num1 num2 CHANGING resultado.FORM WELCOME. Ejemplo: PERFORM suma USING 2 3 CHANGING total. ENDFORM.

Una vez cargada la estructura en nuestro programa. 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 . Xioma Consulting ! ABAP WORKSHOP" 71 . Los parámetros opcionales pueden ser omitidos comentando la línea con un asterisco (*).Invocación de una función Para hacer la invocación de una función lo haremos utilizando el botón de Patrón . En este caso utilizaremos la función creada anteriormente (ZF_FUNCION1). a la derecha del igual “=” los valores que serán enviados a la función y las variables en las que se recibirán los resultados. IF SY-SUBRC <> 0. Esta opción nos permite insertar en nuestro programa toda la estructura que deberá tener la sentencia CALL FUNCTION con cada uno de los parámetros requeridos. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. se deben colocar. Solamente se debe escribir el nombre de la función que deseamos invocar en nuestro programa.

. END-OF-DEFINITION. SUMA A B C.. Sintaxis: DEFINE <macro> . &1 = &2 + &3. Ejemplo: DEFINE SUMA. C(2). DATA: A(2). *En la variable A queda la suma de B y C.. START-OF-SELECTION.DEFINE Se utiliza DEFINE para definir un macro. Xioma Consulting ! ABAP WORKSHOP" 72 . END-OF-DEFINITION. B(2).. .

Los programas tipo include puede ser muy útiles cuando se desea crear librerias de procedimientos. es importante recordar que no se pueden hacer includes recursivos. macros. definición de datos. Xioma Consulting ! ABAP WORKSHOP" 73 . Estos programas no son ejecutables por si mismos y no necesitan de ninguna sentencia de inicialización. Aunque es posible llamar a un include dentro de otro include. Se de indicar en el tipo que el programa es de include. etc.I NCLU D E S Los programas includes se utilizan para modularizar los programas ABAP y crear bloques de código reutilizables. Ejemplo: INCLUDE ZINC_EJEMPLO. Para crear un programa tipo include se puede utilizar la transacción SE38 o desde el ABAP Workbench (SE80) . Sintaxis: INCLUDE <programa tipo include>. esto es que no es posible que un include se invoque asi mismo.

desde las matemáticas (estructuras algebraicas: grupo. anillo o cuerpo) hasta el mundo de los negocios (estructura de una empresa). no depende del lenguaje de programación empleado. relacionadas (conectadas) entre sí de diversas formas y las operaciones definidas sobre esa agrupación. Operaciones típicas sobre estructuras de datos suelen ser: acceder a los elementos (por la posición que ocupan o por la información que contienen).ES TRU CT U RAS DE DATOS Las estructuras de datos son conjuntos de variables. END OF Camisa. Las estructuras de datos se caracterizan por el tipo de los elementos de la estructura. Precio Type P decimals 2. la estructura en sí. que está definida por el tipo de relación entre los elementos. Color(2). En ABAP los tres tipos de estructuras que son más utilizados son: los registros. … Start-of-Selection. las tablas internas (llamadas ITABS) y las tablas transparentes. END OF <nombre>. Xioma Consulting ! ABAP WORKSHOP" 74 .. Sin embargo. quizás de tipos distintos. buscar elementos. … <Campo n> <[TYPE] [LIKE]> <Tipo>. DATA: BEGIN OF Camisa. modificar las relaciones entre los elementos. <Campo 1> <[TYPE] [LIKE]> <Tipo>. etc. Sintaxis: DATA: BEGIN OF <nombre>. el símbolo ‘-‘ y el nombre del campo. Ejemplos de estructuras de datos las podemos encontrar en muchos ámbitos. Ejemplo: DATA: TipoCambio type P decimals 2 value ‘470’. Los elementos de una estructura de datos dependen del lenguaje de programación a través de los tipos de datos que los definen. Para acceder a cada campo se utiliza el nombre del registro. PrecioUSD type P decimals 2. NrMaterial LIKE MARA-MATNR. Talla(2). Para definir el registro se utiliza la instrucción DATA con la opción BEGIN OF. las relaciones definidas sobre los elementos y las operaciones permitidas sobre la estructura. insertar o borrar elementos.. Registros Un registro se puede definir como una variable subdividida en varios campos.

Si el campo destino es de menor tamaño que el origen. Campo9(10). MOVE-CORRESPONDING La instrucción MOVE-CORRESPONDING se utiliza para mover información entre los campos de estructuras que posean el mismo nombre. origen-campo1 origen-campo2 origen-campo3 origen-campo4 = = = = 'Hola'. 1701. que el orden de los campos en la estructura no es relevante.Camisa-NrMaterial = 60001. Aquellos campos en la estructura destino que no coincidan con los definidos en la estructura origen son ignorados y no se modifican. Campo1(20). Campo4(3). destino-campo8 = 'NCC-74656'. MOVE-CORRESPONDING origen TO destino. Campo4(5). la información será truncada. END OF destino. Es importante considerar en el ejemplo. Campo3 type i. Camisa-color = 1. Campo3 type i. “Color Blanco Camisa-Talla = ‘M’. Camisa-Precio = 4000. DATA: BEGIN OF destino. 'NCC'. 'Mundo!'. Camisa-PrecioUSD = Camisa-Precio / TipoCambio. Xioma Consulting ! ABAP WORKSHOP" 75 . END OF origen. Campo8(15). Campo1(20). Sintaxis: MOVE-CORRESPONDING <ESTRUCTURA ORIGEN> TO <ESTRUCTURA DESTINO>. Campo2(10). así como no lo es el tamaño. Ejemplo: DATA: BEGIN OF origen.

sin embargo dependiendo del volumen de información. END OF <nombre>. Esta opción especifica cuantas líneas debe reservar el sistema para los bloques de la tabla interna. “Color Blanco Camisa-Talla = ‘M’. asignar un número muy grande o uno muy pequeño puede tener una repercusión en el rendimiento del programa. sin importar el nombre de estos. Ejemplo: DATA: TipoCambio type P decimals 2 value ‘470’. Camisa-PrecioUSD = Camisa-Precio / TipoCambio.Si ambas estructuras poseen campos definidos exactamente igual. Se puede definir dos tipos de tablas internas: • Con Cabecera: La cabecera es un espacio de la tabla interna donde se almacena la información del registro al que se esta apuntando en el cuerpo de la tabla. Xioma Consulting ! ABAP WORKSHOP" 76 . NrMaterial LIKE MARA-MATNR. Se declara en forma similar a un registro incluyendo la opción OCCURS. Color(2). es posible realizar la asignación directamente de la siguiente manera: Tablas Internas Las tablas internas se utilizan para almacenar los datos provenientes de la base de datos o de información que ha sido generada en tiempo de ejecución. Sintaxis: DATA: BEGIN OF <nombre> OCCURS <n>. … <Campo n> <[TYPE] [LIKE]> <Tipo>. … Start-of-Selection. PrecioUSD type P decimals 2. <Campo 1> <[TYPE] [LIKE]> <Tipo>. APPEND Camisa. Talla(2). Camisa-color = 1. Precio Type P decimals 2. END OF Camisa. normalmente se utiliza 0. Camisa-Precio = 4000. DATA: BEGIN OF Camisa OCCURS 0. Camisa-NrMaterial = 60001.

Sin embargo es necesario definir un registro de cabecera para poder agregar o leer registros de la tabla. • Sin Cabecera: Es un tipo de tabla interna que esta compuesto únicamente de cuerpo y su definición se hace con respecto a un tipo definido previamente o a una estructura ya existente. Estos tres tipos de tablas puede ser declarados de la siguiente manera: TYPES: BEGIN OF S_ITAB. C_Miembro-Nombre = ‘Jose’. Edad TYPE I. DATA: Miembro TYPE PERSONA OCCURS 0. Sintaxis: DATA: <itab> TYPE <tipo> OCCURS <n>. por lo que suele ser más eficiente cargar los datos de la base de datos a estas estructuras que manipularlos directamente. Append C_miembro to Miembro. DATA: C_Miembro type persona. C_Miembro-Edad = 20. El procesamiento de información en las tablas internas es mucho más rápido que en las tablas transparentes. DATA: ITAB2 TYPE T_ITAB WITH HEADER LINE. END OF PERSONA. Xioma Consulting ! ABAP WORKSHOP" 77 . EDAD TYPE I. Sorted y Hashed. Sintaxis: DATA: <ITAB> [LIKE | TYPE] <estructura> [OCCURS <n>] WITH HEADER LINE.Otra manera de agregar la cabecera es utilizar la instrucción WITH HEADER LINE. Nombre(10) TYPE C. Ejemplo: TYPES: BEGIN OF PERSONA. NOMBRE(20) TYPE C. Ejemplos: DATA: ITAB LIKE MARA OCCURS 0 WITH HEADER LINE. Start-of-selection. Las tablas internas pueden ser de 3 tipos: estándar (que son las que tratamos en este manual).

Ejemplo: APPEND C_Miembro TO Personas. DATA: ITAB1 TYPE T_ITAB1.END OF S_ITAB. Xioma Consulting ! ABAP WORKSHOP" 78 . Sintaxis: DELETE [TABLE] <ITAB> [FROM wa] [WHERE <Cond>]. Es importante tomar en cuenta que la instrucción REFRESH no limpia la cabecera de la tabla. a continuación se van a describir las más comunes. Sintaxis: REFRESH <ITAB>. en su lugar debe utilizarse la instrucción INSERT. Delete Esta instrucción borra un registro de la tabla interna. Sintaxis: APPEND [<registro> TO] <itab>. TYPES: T_ITAB1 TYPE STANDARD TABLE OF S_ITAB. ITAB3 TYPE T_ITAB3. T_ITAB3 TYPE HASHED TABLE OF S_ITAB. 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. Para limpiar el contenido de la cabecera de puede utilizar la instrucción CLEAR. Cuando las tablas internas son del tipo SORT o HASHED no es posible utilizar la instrucción APPEND. Existen varias instrucciones que se utilizan para la manipulación de las tablas internas. ITAB2 TYPE T_ITAB2. únicamente el cuerpo de la misma. Refresh Borra todo el contenido de la tabla interna. T_ITAB2 TYPE SORTED TABLE OF S_ITAB WITH KEY Nombre.

Modify Se utiliza para actualizar los cambios realizados al registro de la cabecera en la tabla interna. 3. hasta conseguir un valor numérico. DELETE Camisa WHERE Talla EQ ‘XL’. Y empieza a acumular los valores numéricos que se encuentran a la derecha de la llave. NAME(20) TYPE C. Ejemplo: DATA: BEGIN OF COMPANY OCCURS 0. 2. Utilizando una condición. COLLECT COMPANY. Registro actual de una tabla con cabecera: DELETE Camisa. Sintaxis: MODIFY <ITAB>. son la llave de la tabla interna. COMPANY-SALES = 20. Xioma Consulting ! ABAP WORKSHOP" 79 . COMPANY-SALES = 10. COMPANY-NAME = 'Tiger'. SALES TYPE I. Registro de una tabla sin cabecera DELETE TABLE Miembro FROM Miembro. Collect El COLLECT asume que todos los valores alfanuméricos de izquierda a derecha. COLLECT COMPANY.Ejemplos: 1. Si el registro no existe lo agrega a la tabla interna. COMPANY-NAME = 'Duck'. Sintaxis: COLLECT <ITAB>. COMPANY-NAME = 'Duck'. END OF COMPANY.

. COLLECT COMPANY. <campo n> [DESCENDING | ASCENDING ].COMPANY-SALES = 30. “cuando son tablas internas sin cabecera Xioma Consulting ! ABAP WORKSHOP" 80 . Sintaxis: DESCRIBE TABLE <ITAB> LINES <Variable>. Sintaxis: SORT <ITAB> BY <campo1> <campo2> . *Ordena TABLA por los campos Talla y color de forma *descendente. SORT camisa BY talla ASCENDING color DESCENDING. SORT Se utiliza SORT para ordenar una tabla interna indicándole que campos debe asumir como referencia para dicho ordenamiento. Describe La función de esta instrucción es obtener el número de registros que contiene una tabla interna y almacenarlo en una variable. F y P de forma ascendente. *Aquí al no indicarle criterios la ordena por todos los *campos exceptuando los de tipo: I. *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. Ejemplo: DESCRIBE TABLE camisa LINES cant_reg. Ejemplo: SORT camisa. SORT camisa BY talla color.

cuando cambia un valor en un campo de la tabla interna. <Código>. ENDLOOP. . Ejemplos: LOOP AT ITAB INTO WA_ITAB. ENDAT.LOOP Esta instrucción permite recorrer una tabla interna para acceder a todo su contenido o puede ser utilizado con ciertas condiciones para obtener información específica. WRITE WA_ITAB-CAMPO1. . Ejemplo: LOOP AT itab. AT El AT dentro de un LOOP permite evaluar ciertas circunstancias durante la iteración como lo son la primera iteración. LOOP AT ITAB INTO WA_ITAB FROM 1 TO 100. ENDAT. Sintaxis: AT {FIRST | NEW | END OF | LAST ]. WRITE: ‘Primera iteración’. ENDLOOP. LOOP AT ITAB INTO WA_ITAB WHERE CAMPO1 GT 1000. Xioma Consulting ! ABAP WORKSHOP" 81 . ENDLOOP. AT FIRST. Sintaxis: LOOP AT <ITAB> [INTO <variable>] [WHERE <condiciones>] [FROM <índice 1> TO <índice 2>]. ENDLOOP. WRITE WA_ITAB-CAMPO1. cuando se encuentra en la última ocurrencia de un valor en la tabla interna o cuando se encuentra en la última iteración. WRITE WA_ITAB-CAMPO1. <código>. ENDLOOP.

La estructura de la tabla es la siguiente: CAMPO LOW HIGH OPTION SIGN DESCRIPCI"N Valor de la cota inferior. READ TABLE ITAB INTO WA_ITAB INDEX 1.] [WITH TABLE KEY <campo1> = <valor1> . Indica si el subrango es inclusivo o exclusivo. ENDIF. Indica que operador relacional (EQ.. 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. Si se utiliza la opción de TABLE KEY deben indicarse todos los campos que conforman la llave de la tabla. Cada registro de la tabla se puede asumir como un subrango que define al rango.... WRITE WA_ITAB-CAMPO1.BT. Al definir un rango se genera una tabla interna donde se almacenan los valores que definen el rango. IF SY-SUBRC EQ 0.] [INDEX <índice>]. IF o en el WHILE. el tipo de este campo se define al definir el rango. READ El Read nos permite acceder a un registro de la tabla interna a través de un índice o de una llave.Al utilizar el AT es importante considerar que la cabecera de la tabla interna queda con todos sus campos con el valor ‘*’. ENDIF.. Su utilización y estructura es idéntica a la que se logra con la instrucción SELECT-OPTIONS. IF SY-SUBRC EQ 0.. 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í. WRITE WA_ITAB-CAMPO4..LT. Ejemplos: READ TABLE ITAB INTO WA_ITAB WITH TABLE KEY CAMPO1 = 100 CAMPO2 = ‘ALFA’ CAMPO3 = SY-DATUM.) define el comportamiento del subrango. el tipo de este campo se define al definir el rango. Valor de la cota superior. Sintaxis: READ TABLE <ITAB> INTO <variable> [WITH KEY <campo1> = <valor1> <campo2> = <valor2> . Los valores son: I (Inclusivo) y E (exclusivo) 82 Xioma Consulting ! ABAP WORKSHOP" . con SUBMIT. CHECK.

por lo que si se excede el límite de condiciones de éste se va a presentar un error en tiempo de ejecución. mismos nombres de campos y mismo número de registros). Informix. etc) que son independientes de la plataforma que se este usando. WRITE:/'Y no es 10 de octubre'. IF SY-DATUM IN FECHA. Tablas Transparentes Una tabla transparente es aquella tabla que. tiene una relación uno a uno contra su equivalente en la base de datos (mismo nombre de tabla. Es importante tomar en cuenta que en el caso del Select se evalúa cada elemento del rango como una condición independiente. Sintaxis: RANGES: <nombre> FOR <Tipo>. Ejemplo: RANGES: FECHA FOR SY-DATUM. FECHA-SIGN = 'I'. y la comparación se realiza únicamente contra el campo LOW. WRITE:/'El día de hoy esta entre el 1ero de octubre'.Cuando se utiliza el campo SIGN diferente de BT (entre). APPEND FECHA. ENDIF. y que se encuentran almacenados en una base de datos (Oracle. ' y el 1ero de diciembre. SQL Server. el valor que se almacena en HIGH es ignorado. FECHA-LOW = 200510010. FECHA-OPTION = 'EQ'. APPEND FECHA. El diccionario de datos puede ser definido como una interfase a datos (información. etc). Xioma Consulting ! ABAP WORKSHOP" 83 . FECHA-OPTION = 'BT'. FECHA-SIGN = 'E'. pantallas. FECHA-HIGH = ''. programas. FECHA-HIGH = 20051201. FECHA-LOW = 20051001.'. estando definida en el diccionario de datos. En SAP existen otros tipos de tablas en el diccionario como las Pooled tables y las Cluster tables.

de la transacción SE11.SE11/SE16 Existe en SAP dos formas de acceder al diccionario de datos. FIG. y la SE11 que contiene todas las herramientas necesarias para manipular el diccionario de datos. Xioma Consulting ! ABAP WORKSHOP" 84 . Fig de la transacción SE16. la transacción SE16 que se utiliza para visualizar datos en las tablas del diccionario.

Seguidamente se deben definir los campos de la tabla transparente. Es necesario indicar una descripción para la tabla. al crear una nueva tabla se le debe agregar la letra Z al inicio. Xioma Consulting ! ABAP WORKSHOP" 85 . Es importante tomar en cuenta que al igual que en la mayoría de las adiciones de nuevos objetos en el sistema. Y oprimir el botón Crear. para ello se selecciona la pestaña etiquetada como Campos.Creación de una Tabla Z La creación se realiza utilizando la transacción SE11 y seleccionando la opción Tabla base de datos. además de especificar la clase de entrega con el valor A para indicar que la tabla es de tipo aplicación (específicamente para almacenar datos maestros y movimientos).

como la moneda. es importante asignar cual es la tabla de referencia o verificación que puedan tener valores como moneda y cantidad. El tipo de campo MANDT es el que hace que el contenido de la tabla sea dependiente del mandante. Una vez que se han definido todos los campos que tendrá la tabla. Xioma Consulting ! ABAP WORKSHOP" 86 . En algunos casos. 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. Para agregar campos en una línea determinada se puede utilizar el botón de agregar o en caso de que se quiera eliminar una línea se selecciona y se oprime el botón de eliminar campo . Es posible definir nuevos tipos en el diccionario. del cual tomará las características el campo de la tabla que se esta creando. establecer esta relación es obligatorio. pues el sistema se encarga de manipularlo automáticamente. es importante siempre colocarlo como parte de la llave. o bien se puede utilizar el botón Elemento datos/Tipo directo para poder agregar una definición personalizada.En esta parte se indican todos los campos que se utilizaran. La columna llamada Tipo campo sirve para indicar uno de los tipos ya definidos en el sistema. Al agregar datos a la tabla no es necesario llenar este campo.

Una vez definido todo esto. esta opción se considera dependiendo del volumen de información que se almacenará en la tabla. En el caso de la selección APPL0. En esa opción es necesario definir los parámetros de memoria lógicos.En el cuadro anterior TCURC-WAERS hace referencia al tipo de moneda que utiliza el campo SALARIO. La clase de datos indica en el sistema administrador de bases de datos a que ámbito físico al que pertenece la tabla. hace es necesario definir la configuración básica en las opciones técnicas de la tabla oprimiendo el botón correspondiente en la barra de herramientas. indica que pertenece al ámbito de datos maestros. Xioma Consulting ! ABAP WORKSHOP" 87 . La categoría de tamaño se refiere a la cantidad de espacio que debe reservar por bloque la base de datos.

Ejemplo: TABLES: T001. TABLES Se utiliza para declarar las tablas del diccionario de datos que se desean utilizar en un programa.Para finalizar se almacenan estas modificaciones y se retorna a la pantalla principal. <tabla 2>. Xioma Consulting ! ABAP WORKSHOP" 88 . Para que la tabla pueda ser accesada en el sistema es necesaria activarla utilizando el botón de activación (éste botón realiza la verificación. MARA. <tabla N>. Sintaxis: TABLES: <tabla 1>. guarda los cambios y finalmente activa el objeto en el sistema). donde se puede realizar una verificación de la definición de la tabla utilizando el botón verificar . ….

Existen tres formas distintas para hacerlo. se desplaza el cursor hasta la definición. Sintaxis: INSERT <tabla> FROM TABLE <ITAB>. Siendo posible regresar al lugar de origen la el botón Back. Insert Para añadir registro a registro o varios registros a la vez. Sintaxis: DELETE <tabla> FROM <estruc>. REGISTRO A REGISTRO Sintaxis: INSERT INTO <tabla> [CLIENT SPECIFIED] VALUES <estruct>. UN SOLO REGISTRO. VARIOS REGISTROS. Delete Con ésta instrucción se borran los registros de la tabla. el sistema muestra automáticamente la definición de éste en el diccionario. En los dos casos se puede usar la orden INSERT pero con diferentes opciones.Al dar doble click sobre el nombre de una tabla u otro elemento del diccionario. VARIOS REGISTROS Sintaxis: DELETE FROM <tabla> [CLIENT SPECIFIED] WHERE <condiciones>. Xioma Consulting ! ABAP WORKSHOP" 89 . Si fue definido en el programa. Se puede guardar una tabla interna en una tabla de diccionario con una sola instrucción sin tener que hacer ningún ciclo.

<Sn> [WHERE <condición>]. f = f–g Al campo ‘f’ se le resta lo que vale ‘g’. pero de diferente forma. UN SOLO REGISTRO Para modificar un sólo registro utilizamos la orden UPDATE. Sintaxis: UPDATE <tabla> [SET <S1> . En el SET se colocan los campos a modificar con sus nuevos valores. o sea. VARIOS CAMPOS A LA VEZ Para este campo utilizamos también la orden UPDATE.A TRAVÉS DE UNA TABLA INTERNA Sintaxis: DELETE tabla_dicc FROM TABLE tabla-int. Sintaxis: UPDATE <tabla> FROM <estructura>. UPDATE Actualiza una tabla del diccionario. S1 a Sn pudiéndose 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’. Xioma Consulting ! ABAP WORKSHOP" 90 .

Al oprimir el botón Sí se muestra la pantalla de creación para el elemento de datos. Una vez definido todo esto se debe activar el elemento de texto para que este disponible. Y ) o una subestructura. es decir indica qué se está almacenando en el campo que tiene este elemento de datos (por ejemplo un nº de factura. Xioma Consulting ! ABAP WORKSHOP" 91 . tienen un carácter semántico. Describen el significado de un campo independientemente de las tablas dónde se utilizan. 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. El elemento de datos puede ser uno ya existente en el diccionario.Elementos de datos. un importe. y colocamos el nombre del nuevo elemento de datos en la referencia del nuevo campo seguido de un doble click. También es importante definir para el elemento de texto una descripción y los denominadores de campo respectivos que permiten al sistema desplegar la descripción de los campos del diccionario que utilicen el elemento de texto. etc). Para crear un nuevo elemento de datos utilizamos la transacción SE11. Los elementos de datos están definidos por un dominio. Si en el nombre del campo se utiliza . El elemento de datos proporciona la información sobre la funcionalidad de este tipo de datos en el sistema. Es decir. uno creado por el usuario ( Z.INCLUDE hace referencia a una substructura.

Xioma Consulting ! ABAP WORKSHOP" 92 . La creación de nuevos dominios se realiza a través de la transacción SE11.Dominios El dominio es una agrupación 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. En la definición de un dominio se puede introducir una rutina de conversión para los datos de este dominio. Con esto lo que se consigue es que la introducción o salida de datos se hagan con un formato determinado a partir de otro formato de datos. el código de los materiales tienen el dominio MATNR el cual se tienen las siguientes rutinas de conversión : CONVERSION_EXIT_MATN1_INPUT (para entrada) CONVERSION_EXIT_MATN1_OUTPUT (para salida) Estas rutinas almacenan los datos añadiéndoles ceros hasta completar 18 posiciones. de tal forma que al cambiar la definición de un dominio todos los elementos de datos relacionados cambian automáticamente. Por ejemplo.

un tipo de datos (que proviene de los tipos de datos que existen en el sistema. si existe una rutina de conversión de datos. si es un valor numérico indicar si es posible que represente valores negativos y si es un valor de texto si es posible que contenga letras minúsculas. este debe ser activado para que pueda ser utilizado en el sistema. En la pestaña de ámbito se definen los valores posibles que puede tomar el dominio.Se debe indicar para el dominio una descripción. Igualmente puede hacerse referencia a una tabla que contenga esos valores. Xioma Consulting ! ABAP WORKSHOP" 93 . los cuales van a determinar la longitud que puede desplegar el dominio. Al finalizar la definición del rango. También es posible indicar los atributos de salida. una cantidad de posiciones. o los rangos en los que puede estar.

Siempre que sea posible es importante tomar campos que sean parte de la llave primaria para establecer la relación entre las tablas. sino que se deriva de una o más tablas. Para crear una vista se utiliza la transacción SE11. Con el botón RELACIONES es posible invocar relaciones predefinidas en el sistema para las tablas que se hayan indicado. y siempre indicar el campo MANDT en tablas que son dependientes de mandante. no se almacena físicamente.Vistas de Base de Datos Una vista es una visión lógica de una ó más tablas. es decir. Xioma Consulting ! ABAP WORKSHOP" 94 .

Xioma Consulting ! ABAP WORKSHOP" 95 .En la pestaña 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" 96 .En la pestaña condiciones de selección se determinan una serie de condiciones básicas para filtrar los resultados de la selección.

Su creación es a través de la transacción SE11. Sin embargo no permiten el almacenamiento de información en la base de datos.Estructuras Las estructuras son objetos de datos globales en el sistema que estan formados por varios campos. Xioma Consulting ! ABAP WORKSHOP" 97 .

igualmente no requieren de la definición de llaves. La creación se realiza a través de la transacción SE11. Ayudas de Búsqueda Las ayudas de búsqueda permiten crear un diálogo de selección para un campo de la interfase de usuario donde los usuarios pueden seleccionar valores dentro de una lista de valores propuestos.Las estructuras no son objetos dependientes de mandante. Xioma Consulting ! ABAP WORKSHOP" 98 . y se pueden crear ayudas de búsqueda elemental o compuestas (basadas en otras ayudas de búsqueda ya existentes). por lo que no es importante declarar el campo MANDT.

y en el menú seleccionar Utilidades->Generador actualiz tab. Xioma Consulting ! ABAP WORKSHOP" 99 . La creación de grupos de funciones será explicada más adelante. P. Es importante que la tabla en las opciones de entrega permita la actualización y que con anterioridad se tenga claro cual es el grupo de funciones que se utilizará para generar la vista.El campo método de selección indica cual tabla del diccionario contiene los datos sobre los cuales se basa la propuesta. Se debe seleccionar la tabla transparente a la que se le desea crear la vista de actualización. Vista de Actualización Las vistas de actualización se generan desde la transacción SE11.I indica el orden de las columnas en la ventana de selección y PosS el orden en la ventana de filtros. el check de export indica que el parámetro es de salida y debe indicarse al menos uno. Los parámetros 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 selección de la ayuda de búsqueda.

El tipo de actualización determinara si la modificación o inclusión de nuevos registros se hará en una o dos imágenes. en la descripción de este proceso se utilizara el grupo &NC& que indica que no se desea utilizar ningún grupo de autorización. Xioma Consulting ! ABAP WORKSHOP" 100 . Es necesario también definir el paquete donde se creará la vista.En las vistas de actualización es posible indicar un grupo de autorizaciones que permite brindar mayor seguridad.

Para realizar la edición o inclusión de registros se debe utilizar la transacción SM30. Y oprimir el botón Actualizar. Xioma Consulting ! ABAP WORKSHOP" 101 .

Xioma Consulting ! ABAP WORKSHOP" 102 .En la siguiente imagen se muestra como se despliega el contenido de la tabla transparente. Si un campo no tuviese asignado un elemento de texto se mostraría únicamente el símbolo ‘+’. Los títulos que aparecen sobre las columnas son derivados de los elementos de texto de cada campo.

indicando en los parámetros VIEWNAME el nombre de la tabla y en el parámetro UPDATE el valor ‘X’.Las vistas de actualización son muy útiles para crear diálogos de parametrización y pueden ser asignadas a transacciones mediante la transacción SE93 mediante la opción Transacción con Parámetros. Xioma Consulting ! ABAP WORKSHOP" 103 .

funciones RFC y por medio de archivos planos. Sintaxis: TRANSFER <Objeto de datos> TO <DATASET>. TRANSFER `1234567890` TO file. Ejemplo: DATA: file TYPE string VALUE `test. Close dataset cierra un archivo. Las más comunes se establecen por medio de IDOCs. De ser exitoso la instrucción retornará 0 en la variable SY-SUBRC. sino retornará 8. En este caso siempre es necesario realizar una apertura del archivo. OPEN DATASET file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT. luego ejecutar la transferencia del contenido y finalmente cerrar el archivo. Transfer La instrucción TRANSFER envía el contenido de un objeto de datos a un dataset abierto. En esta sección se explicará ésta última. El máximo de archivos que pueden estar abiertos en una sesión es de 100.T RAN S F ERE NCI A D E DATOS Normalmente en SAP las transferencias de datos están relacionadas con la necesidad de establecer una interfase con algún sistema externo. Open dataset Esta instrucción hace la apertura del archivo. Xioma Consulting ! ABAP WORKSHOP" 104 .dat`. CLOSE DATASET <dataset>. Sintaxis: Close dataset Sintaxis: OPEN DATASET <dataset> FOR {INPUT | OUTPUT | APPENDING | UPDATE} IN {BINARY MODE | TEXT MODE} ENCODING DEFAULT. Transferencia Local La transferencia de archivos planos de manera local se refiere a la creación o lectura de archivos en el servidor SAP. que posteriormente pueden ser extraídos por el medio del sistema operativo o por medio de FTP. Se suele establecer una ruta donde se colocan los archivos de entrada y los archivos de salida.

Ejemplo: DATA: file TYPE string VALUE `test. Sintaxis: DELETE DATASET <dataset>. 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. y retornará 0 si logró borrar el archivo ó 4 en caso de no lograrlo. Line type string. Delete Dataset Se utiliza para eliminar un archivo. Transferencia Remota En el caso de la transferencia remota. Utilizando la transacción AL11 es posible revisar los ficheros en el servidor. Los parámetros más importantes son: Xioma Consulting ! ABAP WORKSHOP" 105 . Esta función descarga el contenido de una tabla interna a un archivo plano. CLOSE DATASET file.CLOSE DATASET file. En la variable SY-SUBRC queda el valor 0 después de una lectura exitosa y 4 cuando se leyó el último registro del archivo o si se trata de leer después del EOF. No requiere de un OPEN. Sintaxis: READ DATASET <dataset> INTO <objeto datos>. GUI_DOWNLOAD. OPEN DATASET file FOR INPUT IN TEXT MODE ENCODING DEFAULT. READ DATASET FILE INTO LINE. Read Dataset READ permite la lectura de un dataset abierto. se asume que la creación de los archivos o la carga de los mismos se hace desde la terminal desde la cual se esta ejecutando el SAP GUI.dat`.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. FILETYPE: Determina el tipo de archivo. FILETYPE: Determina el tipo de archivo.• • • • FILENAME: Debe ser de tipo string y determina el nombre del dataset. DATA_TAB: Indica cual es la tabla interna. Esta función carga el contenido de un archivo plano a una tabla interna. IF SY-SUBRC <> 0. HAS_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN. GUI_UPLOAD. Los parámetros más importantes son: • • • 8 FILENAME: Debe ser de tipo string y determina el nombre del dataset. 106 Xioma Consulting ! ABAP WORKSHOP" . WRITE_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN 8. Un archivo PRN es un archivo cuyos campos estan separados por tabuladores. 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. ENDIF.

Xioma Consulting ! ABAP WORKSHOP" 107 . F4_FILENAME Esta función se puede utilizar en la pantalla de selección de un programa tipo report en el evento AT SELECTION-SCREEN ON VALUE-REQUEST FOR <campo>. 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 .• DATA_TAB: Indica cual es la tabla interna.0 se utilizaban las funciones WS_DOWNLOAD y WS_UPLOAD. IF SY-SUBRC <> 0. Antes de la versión 5. . Reemplazando así la ayuda de búsqueda por una ventana que permita buscar el nombre del archivo en el computado remoto. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.

Ejemplo: SELECT * FROM ztest WHERE salario GT 100000 AND salario LT 500000. El select se comporta como una instrucción de iteración. correspondiendo cada ciclo con uno de los registros seleccionados en la ejecución. y es utilizado para crear. Where La opción WHERE en el SELECT sirve para especificar un filtro en la selección de información Sintaxis: SELECT <campos> FROM <tabla> WHERE <condiciones>. Si la búsqueda fue exitosa SY-SUBRC obtiene el valor de cero. Indicar solo los campos que se utilizaran puede mejorar el rendimiento de un select. y es la que permite la manipulación de la información de la base de datos. incluso permite invocar SQL nativo desde su código en caso de ser estrictamente necesario.OP E N S QL El Structured Query Language (SQL) se ha convertido en uno de los lenguajes computacionales más populares. Ejemplo: SELECT * FROM ztest. “ztest El símbolo * es un comodín que indica que todos los campos de la tabla son seleccionados. ENDSELECT. Select Esta es una de las instrucciones más importantes en el lenguaje. ENDSELECT. modificar y obtener información de los sistemas administradores de base de datos relacionales. Sintaxis: SELECT <campos> FROM <TABLA>. ENDSELECT. <código>. “ztest Xioma Consulting ! ABAP WORKSHOP" 108 . ABAP cuenta con una serie de adaptaciones que provienen de este lenguaje para facilitar la manipulación de la información en su base de datos.

Single La opción Single trae únicamente el primer registro de la tabla que cumpla con las condiciones del Select. Es importante recordar que el campo por el cual se realizará el ordenamiento debe estar incluido en los campos que se están seleccionando en la consulta. Ejemplo: DATA: CARRID LIKE SCARR-CARRID. Order by Esta opción indica en el select de que manera debe ordenar la información que se obtiene con la consulta. Al utilizar esta opción no es necesario utilizar el ENDSELECT. …. CARRNAME LIKE SCARR-CARRNAME. v2. Sintaxis: SELECT <campos> FROM <tabla> ORDER BY <campo> [ASCENDING | DESCENDING]. CARRNAME) FROM SCARR. SELECT CARRID CARRNAME INTO (CARRID. INTO (v1. Into Coloca los valores de los campos indicados en los que indique el into. CARRNAME. Ejemplo: SELECT SINGLE * FROM ztest. vn) FROM <tabla>. Sintaxis: SELECT f1 f2 … fn <código> ENDSELECT. Sintaxis: SELECT SINGLE <campos> FROM <tabla>. WRITE: / CARRID. Xioma Consulting ! ABAP WORKSHOP" 109 . ENDSELECT.

. Data: STR_MARA LIKE MARA. Ejemplos: TABLES: MARA. SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM MARA. para llenar una tabla interna con todas las tuplas del resultado. Into Corresponding Fields of Coloca la información seleccionada en los campos del mismo nombre en la estructura destino.Ejemplo: SELECT * FROM ztest ORDER BY apellido DESCENDING Salario ASCENDING. Es posible utilizar . Distinct Selecciona el conjunto de valores diferentes para las columnas seleccionadas. Es posible calcular el número de tuplas distintas utilizando la instrucción DISTINCT. Count ! Count(*) determina el número de tuplas en el conjunto resultante.. ! Ejemplos: SELECT COUNT( * ) INTO CANTIDAD FROM MARA. Xioma Consulting ! ABAP WORKSHOP" 110 . ENDSELECT.INTO CORRESPONDING FIELDS OF TABLE. SELECT single * INTO CORRESPONDING FIELDS OF STR_MARA FROM MARA. WRITE:/ MARA-MTART.. IT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.. ! ! ! ! SELECT COUNT( DISTINCT MTART ) INTO CANTIDAD FROM MARA. Ejemplo: SELECT DISTINCT MTART INTO MARA-MTART FROM MARA.

Ejemplo: SELECT SUM( PESO ) INTO PESOTOTAL FROM ZPESO. Min Retorna el valor más bajo en la columna seleccionada. Avg ! ! Devuelve el promedio de todos los valores en la columna indicada. en tal caso el resultado es NULL. en tal caso el resultado es NULL. Xioma Consulting ! ABAP WORKSHOP" 111 . El alias puede tener un tamaño máximo de 14 caracteres y solamente es válido durante el SELECT. Ejemplo: SELECT MIN( PESO ) INTO PESO_Minimo FROM ZPESO. Solo puede ser utilizada en columnas del tipo numérico y se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean. Se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean. en tal caso el resultado es NULL. Alias Es posible definir alias tanto para tablas como para vistas del diccionario mediante la adición AS. Se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean. Max ! Retorna el valor más alto en la columna seleccionada. en tal caso el resultado es NULL. Ejemplo: SELECT MAX( PESO ) INTO PESO_Maximo FROM ZPESO. Solo puede ser utilizada en columnas del tipo numérico y se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean.Sum ! Devuelve la suma de todos los valores en la columna indicada. Ejemplo: SELECT AVG( PESO ) INTO PESOTOTAL FROM ZPESO.

y en caso de ser éste cero se retornan todas las tuplas en el resultado. SELECT * FROM doktl INTO TABLE text_tab WHERE doktext LIKE srch_str. wa-mtart. primero se ordenan todas las tuplas en el servidor y se pasan las n primeras.Ejemplo: DATA wa TYPE mara. Up to n Rows Esta adición restringe el número de tuplas en el resultado. y ‘_’ que representa cualquier caracter excepto el blanco. WRITE: / wa-matnr. Si se utiliza la opción ORDER BY. El número n debe ser un entero positivo. By Passing Buffer Al utilizar esta opción se evita el uso del SAP buffering y se lee directamente de la base de datos en el servidor de aplicación. Client Specified La adición CLIENT SPECIFIED apaga el manejo automático del mandante. Ejemplo: PARAMETERS srch_str(20) TYPE c. SELECT * FROM mara AS s INTO wa ORDER BY s~MTART. de no ser así se pasan las primeras n tuplas seleccionadas por las condiciones del WHERE. Esta opción solo funciona con campos del tipo caracter y utiliza los siguientes comodines: ‘%’ que representa cualquier caracter en el string (inclusive uno blanco). DATA text_tab TYPE TABLE OF doktl. Like La expresión será verdadera si el valor de la columna coincide (o no) con el patrón indicado. haciendo necesaria indicar el filtro para el campo MANDT. ENDSELECT. Xioma Consulting ! ABAP WORKSHOP" 112 . CONCATENATE '%' srch_str '%' INTO srch_str.

SELECT carrid connid fldate FROM sflight INTO CORRESPONDING FIELDS OF TABLE sflight_tab WHERE fldate BETWEEN sy-datum AND date.'Y'). utilizar esta opción la instrucción SELECT se salta el SAP buffering. Xioma Consulting ! ABAP WORKSHOP" 113 . SELECT * FROM sbook INTO TABLE sbook_tab WHERE class NOT IN ('C'.Null La expresión NULL es verdadera si el valor de la columna es un valor nulo. Ejemplo: DATA sbook_tab TYPE TABLE OF sbook. Ejemplos: SELECT * FROM ZESTUDIANTES WHERE NOTA1 IS NULL. Al In La opción IN es verdadera si lo valores de la columna coinciden (o no) con los contenidos de la lista a evaluar. date = sy-datum + 30. Group By La adición GROUP BY combina grupos de tuplas que tienen el mismo contenido en las columnas de resultado especificadas en una sola tupla. DATA date TYPE d. Between La expresión 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. Esta lista puede ser un rango o una enumeración entre paréntesis y separando cada elemento por comas. SELECT * FROM ZESTUDIANTES WHERE NOTA1 IS NOT NULL.'F'. Como prerequisito se tiene que se deben indicar columnas individuales y no todas las columnas (al usar *).

En el subquery no es posible utilizar las adiciones INTO ni ORDER BY. longi TYPE p DECIMALS 2. sflight_tab TYPE SORTED TABLE OF sflight WITH UNIQUE KEY carrid connid fldate.For All Entries in Se utiliza la opción 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. connid TYPE spfli-connid. SELECT SINGLE city latitude longitude Xioma Consulting ! ABAP WORKSHOP" 114 . El subquery solo tiene como resultado un conjunto de una sola columna. DATA: city TYPE sgeocity-city. lati TYPE p DECIMALS 2. Ejemplo: PARAMETERS p_city TYPE spfli-cityfrom. conn_id TYPE spfli-connid. TYPES: BEGIN OF entry_tab_type. Ejemplo: PARAMETERS: carr_id TYPE spfli-carrid. Subquery El subquery es un SELECT entre paréntesis que se utiliza como una condición de la cláusula WHERE. Los componentes de la tabla interna deben ser compatibles con las columnas de la tabla transparente sobre la cual se realiza el SELECT. 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. END OF entry_tab_type. DATA: entry_tab TYPE TABLE OF entry_tab_type. ABAP permite anidar hasta un máximo de 9 subqueries. carrid TYPE spfli-carrid.

Xioma Consulting ! ABAP WORKSHOP" 115 . Sintaxis: SELECT <campos> INTO (<campos>) FROM <tabla1> AS <alias1> INNER JOIN <tabla2> AS <alias2> ON <alias1>~<campo1> = <alias2>~<campo1> WHERE <condiciones>. CARRID LIKE SFLIGHT-CARRID. Join Se utiliza para realizar enlaces dinámicos a través de instrucciones del lenguaje ABAP. Ejemplo: DATA: DATE LIKE SFLIGHT-FLDATE. En el siguiente ejemplo el join se establece a través del campo D.INTO (city. longi) FROM sgeocity WHERE city IN ( SELECT cityfrom FROM spfli WHERE carrid = carr_id AND connid = conn_id ). Inner Join De esta manera se enlazan dos tablas por medio de n campos. CONNID LIKE SFLIGHT-CONNID. donde la intersección de ambas tablas genera una nueva tabla por medio de los campos comunes establecidos. lati. ENDSELECT.

Xioma Consulting ! ABAP WORKSHOP" 116 . ENDSELECT. WRITE: / DATE. aquellas tuplas en la tabla de la derecha que esten excluidas quedan como campos nulos en la nueva tabla. CONNID. Ejemplo: DATA: CUSTOMER TYPE SCUSTOM. CARRID. Sintaxis: SELECT <campos> INTO (<campos>) FROM <tabla1> AS <alias1> LEFT OUTER JOIN <tabla2> AS <alias2> ON <alias1>~<campo1> = <alias2>~<campo1> WHERE <condiciones>. Left Outer Join Al realizar un Left Outer Join la unión se basa en la tabla de la izquierda. ENDSELECT. CONNID. aún cuando no existe intersección con la tabla de la derecha. 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. BOOKING TYPE SBOOK.SELECT F~CARRID F~CONNID F~FLDATE INTO (CARRID.

BOOKING-BOOKID) FROM SCUSTOM LEFT OUTER JOIN SBOOK ON SCUSTOM~ID = SBOOK~CUSTOMID AND SBOOK~FLDATE = '19971015' ORDER BY SCUSTOM~NAME SBOOK~FLDATE. APPEND ‘MTART = ‘’005’’ ‘ TO STR_WHERE. BOOKING-CARRID. Xioma Consulting ! ABAP WORKSHOP" 117 . CUSTOMER-POSTCODE. BOOKING-FLDATE. WRITE: / CUSTOMER-NAME. CUSTOMER-CITY. CUSTOMER-POSTCODE. DATA: STR_WHERE TYPE TABLE OF EDPLINE. SELECT * FROM (TABLA) WHERE (STR_WHERE).SELECT SCUSTOM~NAME SCUSTOM~POSTCODE SCUSTOM~CITY SBOOK~FLDATE SBOOK~CARRID SBOOK~CONNID SBOOK~BOOKID INTO (CUSTOMER-NAME. Ejemplos: DATA: TABLA(20) VALUE ‘MARA’. WHERE. CUSTOMER-CITY. BOOKING-BOOKID. SQL Dinámico El SQL dinámico consiste en la capacidad de armar sentencias SQL en tiempo de ejecución. BOOKING-CONNID. APPEND ‘MTART = ‘’001’’ AND‘ TO STR_WHERE. BOOKING-CONNID. BOOKING-CARRID. FROM. ENDSELECT. Esto se logra a través de crear los strings con los parámetros correspondientes para el SELECT. SELECT * FROM (TABLA). BOOKING-FLDATE.

Se puede también agregar o suprimir breakpoints en esta opción. Breakpoints: Se pueden utilizar hasta 30 breakpoints. las llamadas anteriores se enumeran en orden cronológico inverso. subrutinas. Esta opción permite visualizar y corregir las entradas en una tabla interna. Watchpoints: Se puede fijar un watchpoint para un campo e interrumpir el programa siempre que el valor de ese campo cambie. Llamadas: Esta opción visualiza el evento actual y las llamadas hasta el breakpoint actual. Si se desea debuggear una transacción desde el inicio. Cuando un evento (por ejemplo. Este modo de visualización contiene una lista de watchpoints. y las condiciones sobre las cuales se activa el mismo. Resumen: Visualiza la estructura del programa. los valores actuales de los campos.D E P U RACI "N El Debugger es una herramienta de programación que se puede utilizar para ejecutar programas ABAP por línea o por sección con el propósito de depurar el código. los campos y los programas a los cuales se asignan. Al lado de cada uno existe un contador. se elimina de la visualización. START-OFSELECTION) concluye. se utiliza /h en la linea de comandos para activar el debugging y después se indica el nombre de la transacción Modos de Visualización Campos: Esta opción proporciona el contenido de hasta ocho campos. Tablas: Visualiza el contenido de una tabla interna. Se pueden cambiar las configuraciones seleccionándolas. Opciones: Visualiza las configuraciones actuales del debugger. Enumera sus eventos. También visualiza la sección que es procesada actualmente. El contenido de los tres campos más importantes del sistema se visualiza siempre. y muestra cuales secciones pertenecen a cuales eventos. y módulos. La última llamada activa es desplegada al principio de la lista. Con esta herramienta se visualiza el contenido de las variables y se sigue la ejecución de la lógica del programa. Xioma Consulting ! ABAP WORKSHOP" 126 .

Continue: Se utiliza para procesar el programa hasta el siguiente breakpoint. Return: El Debugger vuelve al programa anterior después de ingresar a una subrutina o función. Si no hay mas breakpoints en el programa. Otra manera es dando doble click a la variable en el código del programa Visualiza el contenido del campo en formato hexadecimal.Recorriendo el código fuente Single Step: Utilice esta opción para ejecutar el programa línea por línea. Modifica el contenido de los campos. el sistema da salida al modo de debugging y ejecuta el resto del programa normalmente. Execute: También permite ejecutar el programa línea por línea pero en caso de encontrar una subrutina o una función se ejecuta en un solo paso. se digita el nombre y se oprime <Enter> . Visualización y modificación de campos Para visualizar el contenido de un campo. Xioma Consulting ! ABAP WORKSHOP" 127 . Borra todos los nombres de los campos. Visualiza el contenido del campo en su formato original de la salida.

Si se le da doble click al icono. Header Line: Si la tabla interna tiene una línea de la cabecera. es indicado por este icono.Procesar tablas internas Se puede visualizar y cambiar el contenido de las tablas internas en tiempo de ejecución (Debugger). Breakpoints Existen varias formas de establecer breakpoints: 1) Con la sentencia break-point: IF SY-SUBRC NE 0. Xioma Consulting ! ABAP WORKSHOP" 128 . ENDIF. BREAK-POINT. el sistema abre la visualización estructurada del campo.

BREAK <nombre_usuario>. subrutinas. llamadas a funciones. endif. Es posible fijar hasta cinco watchpoints. Para crearlos se hace de la siguiente forma Click en y seguido indicamos el nombre del campo Xioma Consulting ! ABAP WORKSHOP" 129 . Watchpoints Si se desea interrumpir un programa cuando el contenido de un campo o de una estructura cambia.También se pueden enumerar (BREAK-POINT 1. se puede utilizar un watchpoint. También se pueden establecer breakpoints al momento que se esta debuggeando el programa como por ejemplo breakpoints en sentencias. 3) En tiempo de ejecución se puede colocar a la izquierda de la línea haciendo click en el botón . incluyendo los watchpoints para los strings. BREAK-POINT 2) para que sean más fáciles de identificar 2) Breakpoint para usuario específico: IF SY-SUBRC NE 0. métodos y en excepciones del sistema.

Desde el Árbol de navegación del menú SAP->Herramientas->Workbench ABAP->Test->Análisis Dump. Parte de la información que contiene el Snapshot: • • • • • • • Por qué termino el programa. Las llamadas o eventos que fueron activados cuando el programa terminó. Se pueden usar para identificar rápidamente donde y por qué ocurrió el error. Qué causó la terminación del programa. Valores de campos cuando el programa terminó. Otros programas que fueron afectados. Qué se puede hacer para corregir el error. y lo almacena en una tabla llamada SNAP.Análisis Dump Un análisis Dump es una lista que permite identificar las causas y posibles soluciones a errores en un programa. Xioma Consulting ! ABAP WORKSHOP" 139 . La manera de accesarla es: • • A través del código de transacción ST22. El Workbench de ABAP genera un dump siempre que un reporte o transacción 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. Los análisis Dump dan al usuario o al programador información sobre las causas del error que hacen que el programa se cierre abruptamente. En que parte del código fuente ocurrió la finalización del programa.

Utilizando el Análisis Dump Seleccionar las opciones de filtrado a aplicar. Presionar el botón Inicio o ir a la opción del menú Errores tiempo ejecución>Visualizar. Xioma Consulting ! ABAP WORKSHOP" 140 . Se desplegará una lista con los errores que cumplen con los criterios de filtrado.

Para ver la información detallada del error se selecciona la línea que se desea revisar y se presiona doble clic. a través de esta es que se podrá hacer el análisis a profundidad de a qué se debió el error. Xioma Consulting ! ABAP WORKSHOP" 141 . Aquí aparecerá la explicación de los motivos del error. o se selecciona el botón buscar .

A continuación se explicarán los pasos necesarios para crear una función. Las funciones en ABAP se manipulan por medio de la transacción SE37. Estos grupos y módulos se administran en la biblioteca de funciones. Primero se deberá crear un grupo de funciones y luego se creará la función. por lo cual no es necesario definirlas en el programa. pero como ya se mencionó anteriormente se comportan como una “caja negra”. Para crear un grupo de funciones se utiliza el menú principal con la opción Pasar a – > Gestión gr. Su definición es global en el sistema. Existen ya una cantidad considerable de funciones estándar definidas en el sistema y que están disponibles para el desarrollador. funciones –> Crear grupo Xioma Consulting ! ABAP WORKSHOP" 142 .CRE ACI "N D E F U N CI ONES * SE 37 + Las funciones son similares a los procedimientos. que se invoca por medio de la transacción SE37. Creación de un grupo de funciones Los grupos de funciones contienen módulos de funciones.

Al hacer click en Grabar el sistema solicitará la creación de una orden de transporte. Se introduce el nombre de la función y se da click en Crear. Deben activarse el programa de control y sus respectivos includes. Creación de una función Para crear una función se utiliza la transacción SE37. una descripción breve y el responsable. Una vez creado satisfactoriamente el grupo de funciones.En esta pantalla se debe ingresar el nombre del grupo de funciones. Xioma Consulting ! ABAP WORKSHOP" 143 .

Se indicará el grupo de funciones ZGRUPO_PRUEBA creado en el paso anterior. EXPORTING. Una vez colocados los datos se da click en Grabar. El sistema mostrará el Function Builder. Aquí se tienen cuatro tipos de parámetros que pueden ser creados: IMPORTING. CHANGING y TABLES. Además de una pestaña EXCEPTIONS y otra para el CODIGO FUENTE de la función. Xioma Consulting ! ABAP WORKSHOP" 144 .Luego se coloca el Grupo de Funciones dentro del cual estará la función y una descripción breve.

Cuando se invoca la función. El contenido del parámetro exporting es transferido al parámetro actual si la ejecución de la función finaliza sin errores. - Exporting Estos son los parámetros de salida de la función. Cuando la función es invocada.- Importing Estos son los parámetros de entrada de la función. un parámetro actual válido debe ser especificado para cada parámetro importing que no sea opcional. El valor que se les transfiere en la invocación no cambia durante la ejecución de la función. Xioma Consulting ! ABAP WORKSHOP" 145 . un parámetro actual puede ser especificado para cada parámetro exporting.

- Changing Estos son parámetros tanto de entrada como de salida. Xioma Consulting ! ABAP WORKSHOP" 146 . un parámetro actual válido debe ser especificado para cada parámetro changing que no sea opcional. pero solo pueden ser usados para transferir tablas estándar con header line. El contenido del parámetro changing es transferido al parámetro actual si la ejecución de la función finaliza sin errores. - Tables Igual que los parámetros changing. estos son parámetros tanto de entrada como de salida. Cuando la función es invocada. En este ejemplo no utilizaremos este tipo de parámetro.

- Exceptions Se utilizan para capturar un tipo de error específico durante el tiempo de ejecución. se puede usar OTHERS para referirse al resto de las excepciones. Xioma Consulting ! ABAP WORKSHOP" 147 . Al final de la lista de excepciones. SY-SUBRC toma el valor definido en la sección Exceptions y el control es devuelto al programa principal. de tal manera que se produzca un dump (error fatal) que cancele bruscamente la ejecución de la función. Si una de las excepciones listadas ocurre. EXCEPTIONS lista las excepciones que se manejan cuando el programa realiza la llamada.

EXCEPTIONS div_cero = 5. “código en el módulo de funciones FUNCTION division IMPORT n1 n2 EXPORT result EXCEPTION div_zero. y asignar al SY-SUBRC el valor correspondiente a lo asignado en la sección de EXCEPTIONS del CALL FUNCTION. “ elevar excepción ELSE. RAISE <excepción> La instrucción “RAISE excepción” lo que hace es detener la ejecución de la función. MESSAGE ‘Division por Cero’.. IF n2 = 0. RAISING <excepción>.. “código del programa principal IF SY-SUBRC = 5. RAISE div_zero. “código del programa principal ENDIF.. Ejemplo: CALL FUNCTION .Hay dos maneras de manejarlo: ! RAISE <excepción>. ! MESSAGE .. Xioma Consulting ! ABAP WORKSHOP" 148 .

MESSAGE ID ‘XXX’ TYPE ‘E’ NUMBER ‘001’ WITH ‘Error en proceso’ n2 ‘no es un divisor válido’ RAISING div_zero. SY-MSGTY .. ENDIF. RAISING excepción Esta instrucción igualmente asigna al SY-SUBRC el valor correspondiente a lo asignado en la sección EXCEPTIONS del CALL FUNCTION.ENDIF.. “código en el módulo de funciones FUNCTION division IMPORT n1 n2 EXPORT result EXCEPTION div_zero. SYMSGNR y SY-MSGV1-4. result = n1 / n2. - Código Fuente Aquí se escribe el código de la función. “elevar excepción asignando valores de retorno “Alternativamente puede usar la siguiente estructura: “ MESSAGE E001(ZMM) RAISING EXCEP1. Ejemplo: CALL FUNCTION division EXCEPTIONS div_zero = 5. ENDFUNCTION. MESSAGE . En la función se dispara la excepción utilizando la siguiente estructura: MESSAGE ID id_mensaje TYPE tipo NUMBER número RAISING excepcion Y luego donde se invocó la función se construye el mensaje dinámicamente utilizando el contenido de los campos del sistema SY-MSGID . ENDFUNCTION. ENDIF. IF n2 = 0. “ mensaje 001 de tipo error (E) de la clase ZMM ELSE. “código del programa principal MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3. Xioma Consulting ! ABAP WORKSHOP" 149 . result = n1 / n2. “código programa principal IF SY-SUBRC = 5.

Si no se encuentra el material. Xioma Consulting ! ABAP WORKSHOP" 150 .En este ejemplo la función lo único que hace es devolver el stock disponible para un material que se encuentra en un lote. la función devuelve un mensaje de error. un centro y un almacén. una ubicación.

Sign up to vote on this title
UsefulNot useful