ABAP Basico

133
ABAP WORKSHOP Version 1.0 Xioma Consulting Centroam!rica 2007 Xioma Consulting ! ABAP WORKSHOP 1

Transcript of ABAP Basico

Page 1: ABAP Basico

ABAP WORKSHOPVersion 1.0

Xioma Consulting Centroam!rica2007

Xioma Consulting ! ABAP WORKSHOP" 1

Page 2: ABAP Basico

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

Xioma Consulting ! ABAP WORKSHOP" 2

1 Systems, Applications & Products in Data Processing

Page 3: ABAP Basico

ARQUITECTURA DE SAP

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

Page 4: ABAP Basico

TRANSPORT ORGANIZEREl Transport Organizer permite la administración de las órdenes de transporte de un usuario.

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. Las órdenes que pertenecen a la clase Workbench incluyen todos los objetos relacionados con el desarrollo de aplicaciones. En el caso de las órdenes de Customizing, éstas contienen a los objetos generados por los cambios en la parametrización del sistema.

Existen dos estados posibles para las ordenes, 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.

Xioma Consulting ! ABAP WORKSHOP" 4

Page 5: ABAP Basico

Para liberar la orden, se debe liberar primero todas las tareas incluidas en la orden de transporte y posteriormente la orden. Se libera un objeto a la vez, seleccionándolo y pulsando el

botón LIBERAR DIRECTAMENTE . Solamente se pueden liberar las ordenes propias, por lo que si fuera necesario liberar una tarea o una orden que perteneciera a otro usuario es necesario

reasignarla utilizando el botón MODIFICAR TITULAR .

Xioma Consulting ! ABAP WORKSHOP" 5

Page 6: ABAP Basico

COMPOSICION DE UN PROGRAMA

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.

Pantallas Contiene toda la disposición de pantallas y la lógica de flujo asociada a las mismas. Normalmente se crea la disposición de pantallas utilizando una herramienta llamada screen

painter o desde el ABAP Workbench. Sin embargo existen pantallas especiales, como el selection screen en los reportes, que poseen una disposición y lógica que se controla únicamente a través de sentencias ABAP.

Interfase Contiene todas las opciones de los menús, la barra estándar de herramientas, la barra de herramientas de aplicación y los botones. Contiene también los títulos y status.

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

Documentación La documentación es dependiente del idioma. Es importante recordar escribir la documentación orientada al usuario. En caso de querer documentar código, 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. Esto suele ser muy útil durante los periodos de prueba o para la ejecución de tareas repetitivas.

Xioma Consulting ! ABAP WORKSHOP" 6

Page 7: ABAP Basico

EDITOR

El editor ABAP se invoca a través de la transacción SE38, o por la ruta del menú SAP HERRAMIENTAS->WORKBENCH ABAP->DESARROLLO->SE38 - EDITOR ABAP.

Imagen Inicial

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

1. Verificar

Esta opción se encarga de revisar la sintaxis del programa.

Xioma Consulting ! ABAP WORKSHOP" 7

Page 8: ABAP Basico

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

3. Ejecutar

Ejecuta el programa.

4. Referencia de Utilización

Las referencias de utilización sirven para identificar otros objetos del ambiente que utilicen el programa indicado.

5. Análisis de Entorno

Verifica todos los objetos de repositorio a la cual se les hace referencia dentro del programa.

6. Manual Online

Invoca la ayuda de ABAP disponible en línea en el sistema.

7. Borrar

Elimina el programa, y otros componentes que formen parte del mismo de serle indicado.

Xioma Consulting ! ABAP WORKSHOP" 8

Page 9: ABAP Basico

8. Copiar

Crea una copia del programa con otro nombre.

9. Renombrar

Cambia el nombre del programa.

10. Debugging

Ejecuta el programa a través del de la herramienta de Debugging

11. Con Variante

Ejecuta el programa con una variante creada con la opción de variantes.

Xioma Consulting ! ABAP WORKSHOP" 9

Page 10: ABAP Basico

12. Variantes

Crea una variante para el programa, siempre y cuando el programa reciba algún tipo de parámetro de entrada.

13. Crear

Crea el programa e invoca el editor de código.

Xioma Consulting ! ABAP WORKSHOP" 10

Page 11: ABAP Basico

14. Visualizar

Invoca el editor de código en modo de solo visualización.

15. Modificar

Invoca el editor de código para modificar un programa que ya existe.

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.

Xioma Consulting ! ABAP WORKSHOP" 11

Page 12: ABAP Basico

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

Page 13: ABAP Basico

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

Page 14: ABAP Basico

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

Page 15: ABAP Basico

Entre los tipos de programa que se pueden crear, están los siguientes:

1. Programa ejecutable (1)

Estos son los programas que pueden iniciarse directamente sin código de transacción y en fondo, desde la transacción SE38 o la SA38.

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

3. Report de Include (I)

Contiene un código de programa que no puede ejecutarse por sí sólo.Esta parte de programa puede incluirse en otro programa mediante la instrucción INCLUDE.

4. Pool de subrutinas (S)

Contiene partes de programa (FORM) que pueden ser invocadas desde instrucciones PERFORM externas.

5. Grupo de funciones (F)

Contiene módulos de funciones. Estos grupos y módulos se administran en la biblioteca de funciones, que se invoca por medio de la transacción SE37.

6. Pool de interfaces (J)

Contiene interfaces. El generador de clases gestiona las interfaces y las clases.

7. Pool de clases (K)

Contiene clases. El generador de clases gestiona las interfaces y las clases.

El status del programa indica, si se trata de un programa productivo, de test o de sistema. Dependiendo de esta propiedad se genera cierto tipo de control en la administración de los programas.

Xioma Consulting ! ABAP WORKSHOP" 15

2 Un dynpro se suele llamar una pantalla de SAP

Page 16: ABAP Basico

La propiedad de grupo de autorizaciones indica a que grupo ha sido asignado el programa, sirviendo como referencia para validar los derechos que un usuario pueda tener sobre éste. El sistema verificará si el usuario pertenece a este grupo de autorizaciones:

• Antes de lanzar o editar un programa

• Al actualizar los atributos

• Al utilizar otra utilidad del desarrollo de programas

Al ejecutar la opción de grabar, es necesario indicar la clase de desarrollo (paquete) a la que pertenece el programa, o definirlo como un objeto local.

Las clases de desarrollo o paquetes se agrupan a los objetos que pertenecen al ABAP Workbench. La asignación a una clase de desarrollo se indica en el catálogo de objetos. Los objetos locales pertenecen a la clase de desarrollo $TMP (Objeto Local) y no son transportables.

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

Xioma Consulting ! ABAP WORKSHOP" 16

Page 17: ABAP Basico

Para crear la orden se oprime el botón de crear , posteriormente se le asigna la descripción a la nueva orden y se graba . 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, y se utilizan primordialmente para la generación de reportes, batch inputs3 e interfases. Un ejemplo de un programa tipo REPORT es el siguiente:

REPORT ZHOLA no standard page heading.

WRITE 'Hello World!'.

Todos los programas ejecutables deben iniciar con la instrucción REPORT <Nombre del programa>, el parámetro adicional NO STARNDARD PAGE HEADING elimina del reporte la línea que imprime el título del reporte.

Para imprimir un texto en la pantalla se utiliza la instrucción WRITE <string>. Una vez

finalizado el programa es necesario activarlo y posteriormente puede ser ejecutado .

Xioma Consulting ! ABAP WORKSHOP" 17

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

Page 18: ABAP Basico

Xioma Consulting ! ABAP WORKSHOP" 18

Los strings o cadenas de caracteres en ABAP se encierran entre comillas simples. La comilla doble se utiliza para introducir un comentario.

Page 19: ABAP Basico

EVENTOS ABAP es un lenguaje estructurado orientado a eventos, los cuales se disparan dependiendo de una condición. El código dentro de cada evento se ejecuta siguiendo el clásico comportamiento TOP-DOWN. 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, M, F o S en memoria. Siendo este bloque ejecutado únicamente una vez por cada programa en cada sesión interna.

Sintaxis:

LOAD-OF-PROGRAM.

<Código a ejecutar>

INITIALIZATIONEste evento se ejecuta antes de que se muestre la pantalla de selección.

Normalmente es utilizado para inicializar valores clave para la ejecución del programa.

Sintaxis:

INITIALIZATION.

<inicialización de variables>

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

START-OF-SELECTION Se puede interpretar como el evento principal y es ejecutado justo después del evento SELECTION-SCREEN.

Sintaxis:

START-OF-SELECTION.

<Código a ejecutar>

Ejemplo:

START-OF-SELECTION.

Xioma Consulting ! ABAP WORKSHOP" 19

Page 20: ABAP Basico

WRITE ‘Hola Mundo!’.

END-OF-SELECTION Se procesa después que toda la información se ha leído, y justo antes de que se muestre la impresión del reporte.

TOP-OF-PAGESe ejecuta antes que se imprima información en la primera página de un

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

AT SELECTION-SCREENEste evento solamente tiene sentido en los reportes. El evento se ejecuta una

vez que se haya procesado la pantalla de selección. 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.

! Sintaxis:

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

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

<Código>.

! Ejemplo:

Parameters: numero(2).

AT SELECTION-SCREEN.

IF NUMERO > 10. message s333(s1) with ‘Número mayor que 10'.

ENDIF.

Xioma Consulting ! ABAP WORKSHOP" 20

La instrucción REPORT siempre tiene implícito el evento START-OF-SELECTION. Por lo tanto todo el código entre la instrucción REPORT y el siguiente evento se ejecuta en el START-OF-SELECTION.

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. Por lo que no es conveniente utilizar toda una página como cabecera dado que el usuario no podría desplazarse.

Page 21: ABAP Basico

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. Este evento se ejecuta después del INITIALIZATION y el LOAD-OF-PROGRAM.

La adición ON <parámetro> asume que se ejecutará el bloque cuando un parámetro o select-options ha sido modificado. Esto es muy útil cuando se desea realizar validaciones sobre los campos en la pantalla de selección, pues en caso de enviar un error el cursor se quedará posicionado sobre el parámetro indicado en el AT SELECTION-SCREEN.

En el caso del ON HELP-REQUEST FOR, se espera la ejecución del bloque cuando se oprime el botón de ayuda (F1) sobre el campo indicado después del FOR , igualmente para el ON VALUE-REQUEST FOR, será invocado el bloque al oprimir el botón de la ayuda de búsqueda (F4).

ON EXIT-COMMAND ejecutará el bloque cuando el usuario oprima los

botones de BACK ( ), EXIT( ) o CANCEL ( ).

AT LINE-SELECTIONEl 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 evento asigna a la variable de ambiente SY-UCOMM el valor PICK. El valor de la linea seleccionada quedará en la variable de ambiente SY-LISEL.

! Sintaxis:

! ! AT LINE-SELECTION.

Ejemplo:

AT LINE-SELECTION.

MESSAGE S333(S1) WITH SY-LISEL.

Xioma Consulting ! ABAP WORKSHOP" 21

Si a la tecla F2 se le cambia el código PICK, el doble click automáticamente asume el nuevo código. Esto provocará que se deba evaluar en en el bloque de AT USER-COMMAND.

Page 22: ABAP Basico

AT USER-COMMAND

Este bloque se ejecutará cuando el sistema ejecute un código de función, 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. A continuación se muestra una tabla con los códigos de función estándar:

Xioma Consulting ! ABAP WORKSHOP" 22

C " D I G O D E F U N#C I " N

D E S C R I P C I " N

BACK Regresar

P# Hacer Scroll a la p$gina anterior

P## Hacer Scroll a la primera p$gina

P+ Hacer Scroll a la p$gina siguiente

P++ Hacer Scroll a la %ltima p$gina

PL# Hacer Scroll a la primera l&nea de la p$gina

PL#n Hacer Scroll n l&neas hacia atr$s

PL+n Hacer Scroll n l&neas hacia adelante

PNOP Sin efecto

PP# Hacer Scroll una p$gina hacia atr$s

PP#n Hacer Scroll n p$ginas hacia atr$s

PPn Hacer Scroll al inicio de la p$gina n

PRI,PRINT Imprimir

PS## Hacer Scroll a la primera columna

PS++ Hacer Scroll a la %ltima columna

PS# Hacer Scroll una columna a la izquierda

PS#n Hacer Scroll n columnas a la izquierda

PS+ Hacer Scroll una columna a la derecha

PSn Hacer Scroll n columnas a la derecha

PZn Hacer Scroll a la l&nea n

RW Cancelar

Page 23: ABAP Basico

Los siguientes códigos éstandar no pasan por el AT USER-COMMAND:

Xioma Consulting ! ABAP WORKSHOP" 23

C " D I G O D E F U N#C I " N

D E S C R I P C I " N

'CTX Llamado a un men% contextual

'EX Salir

'PC Guardar Archivo

'PRI Imprimir

'SC Buscar

'SC+ Buscar siguiente

'SL Buscar en o(cina

'ST Guardar en reporte de $rbol

Page 24: ABAP Basico

DEFINICION DE DATOS

Tipos de Datos

Los tipos de datos indican el ámbito al que pertenece un objeto de datos. Estos pueden ser nativos del sistema, o nuevos tipos de datos definidos por el usuario (ya sea local en un programa o en el diccionario de datos de SAP).

En ABAP/4 existen los siguientes tipos de datos estándar:

Definición de Tipos

Es posible la definición de nuevos tipos de datos utilizando la instrucción TYPES. 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.

Sintaxis: TYPES <Nuevo tipo> TYPE <tipo>.

Ejemplos:

TYPES Numero TYPE I.

TYPES: BEGIN OF PERSONA, NOMBRE(20) TYPE C,

Xioma Consulting ! ABAP WORKSHOP" 24

T I P O D E S C R I P C I " N T A M A ) O V A L O R I N I C I A L

C Texto *Caracter+ 1 Blanco

N Texto Numérico 1 ’00…0’

D Fecha (AAAAMMDD) 8 ‘00000000’

T Hora (HHMMSS) 6 ‘000000’

X Hexadecimal 1 X’00’

I Entero (Integer) 4 0

P Número Empaquetado 8 0

F Número de Punto Flotante 8 ‘0.0’

String Cadena de caracteres Blanco

Xstring Secuencia de bytes Blanco

Page 25: ABAP Basico

EDAD TYPE I, END OF PERSONA.

TYPE-POOLS

Los TYPE-POOLS son precursores de la definición general de tipos en el diccionario ABAP. Antes de la versión 4.0 solo se podían definir tipos de datos elementales y estructuras planas en el diccionario. Todos los demás tipos debían estar disponibles debían ser definidos con la instrucción TYPES en un TYPE-POOL. Desde la versión 6.40 se ha reemplazado el uso de TYPE-POOLS por clases globales, sin embargo los TYPE-POOLS definidos en versiones anteriores siguen disponibles y pueden ser utilizados.

Sintaxis: TYPE-POOLS: <type-pool>.

Ejemplo:

TYPE-POOLS: VRM.

Comentarios

Los comentarios se utilizan para documentar el código, y de esta manera ayudar a mejorar su interpretación. Existen dos tipos de comentarios en ABAP:

1. Línea Completa: Este se activa al colocar el símbolo ‘*’ en la primera posición de la línea.

2. Al final de la línea: Se utiliza el símbolo ‘ “ ‘ .

Ejemplos:

*-------------------------------------------------------

* Autor: * Fecha de creación * Fecha de Modificación *-------------------------------------------------------

Contador = Contador + 1. “Contador de impresión

Xioma Consulting ! ABAP WORKSHOP" 25

El nombre del tipo puede ser de hasta 30 caracteres. Y no se pueden utilizar los caracteres especiales '(', ')', '+', '.', ',', ':', '-', '<' y '>'. Los números pueden ser utilizados, pero el nombre no puede consistir solo de números.

Page 26: ABAP Basico

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. La declaración de las variables en ABAP se realiza con la instrucción DATA. Ésta puede ser invocada desde cualquier lugar de un programa ABAP.

Sintaxis: DATA <Variable> [TYPE <tipo>] | [LIKE <referencia>].

Ejemplos:

DATA Cumpleaños TYPE D.

DATA Nombre(40).

Al utilizar la opción LIKE se crea la variable con referencia a otro objeto de datos en el sistema, heredando así las mismas características.

Ejemplo: DATA: Nombre(40), Nombre2 LIKE Nombre.

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.

Sintaxis: CONSTANTS <Constante> [TYPE <tipo>] VALUE <valor>.

Ejemplos:

CONSTANTS: CHAR1 VALUE ‘X’, INT TYPE I VALUE 99.

CONSTANTS: BEGIN OF CONST_REC, C(2) TYPE I VALUE 'XX', N(2) TYPE N VALUE '12',

Xioma Consulting ! ABAP WORKSHOP" 26

El nombre de la variable puede ser de hasta 30 caracteres. Y no se pueden utilizar los caracteres especiales '(' , ')' , '+' , '-' , ',' y ':' . Los números pueden ser utilizados, pero el nombre no puede consistir solo de números.

Page 27: ABAP Basico

X TYPE X VALUE 'FF', I TYPE I VALUE 99, P TYPE P VALUE 99, F TYPE F VALUE '9.99E9', D TYPE D VALUE '19950101', T TYPE T VALUE '235959', END OF CONST_REC.

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. También es posible preguntar en las cláusulas condicionales si un Field Symbol esta asignado mediante la condición IS ASSIGN. Para crear un field symbol se utiliza la siguiente sintaxis:

Sintaxis:

FIELD-SYMBOLS: <Símbolo1>, … <Símbolo1>.

Para asignar la referencia al símbolo creado se utiliza la instrucción ASSIGN:

Sintaxis:ASSIGN <OBJETO> TO <SIMBOLO>.

Ejemplo:

FIELD-SYMBOLS: <E1>.

DATA: FECHA LIKE SY-DATUM.

IF <E1> IS ASSIGN. UNASSIGN <E1>. ASSIGN FECHA TO <E1>. <E1> = '19751130'. WRITE FECHA.ENDIF.

Xioma Consulting ! ABAP WORKSHOP" 27

El símbolo “:” se utiliza para evitar la repetición consecutiva de ciertas instrucciones como DATA, CONSTANTS, PARAMETERS, WRITE, etc. Separando los parámetros correspondientes a cada ocurrencia por medio de la coma.

Ejemplo:DATA: contador type i, Temporal(10), Fecha LIKE SY-DATUM.

Page 28: ABAP Basico

Creación de textos

Se puede crear textos dependientes del idioma o símbolos de texto para todos los programas ABAP. Se asigna un código de tres dígitos <xxx> a cada símbolo de texto. Para accesarlo en el programa se utiliza de la siguiente manera:

Sintaxis:

text-<xxx>.

Ejemplo:

WRITE text-t01.

Parámetros

Los parámetros son variables de entrada en un programa tipo REPORT. Estos generan una pantalla automática de entrada donde los parámetros tienen ciertas características especiales según el tipo al que pertenecen.

Parameters

La instrucción PARAMETERS crea una variable de entrada con las mismas características que la instrucción DATA. El nombre de cada parámetro no puede exceder los 8 caracteres.

Sintaxis: PARAMETERS <param> [{LIKE <referencia> } | { TYPE <tipo> } | { AS CHECKBOX [USER-COMMAND fcode] } { RADIOBUTTON GROUP <grupo> [USER-COMMAND fcode]} | { AS LISTBOX VISIBLE LENGTH vlen

[OBLIGATORY] [USER-COMMAND fcode] }]

[DEFAULT val] [LOWER CASE] [MATCHCODE OBJECT search_help] [VALUE CHECK] [OBLIGATORY|NO-DISPLAY].

Xioma Consulting ! ABAP WORKSHOP" 28

Los símbolos de texto se pueden accesar en el menú del editor con la opción pasar a -> Elementos de Texto. También por medio de la transacción SE38 indicando el nombre del programa y seleccionando la opción Elementos de Texto.

Page 29: ABAP Basico

Ejemplo:

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

La opción AS CHECKBOX permite que el campo en pantalla aparezca solamente como un campo de entrada binario (marcado o no marcado). El parámetro por ende poseerá una longitud de 1 y será tipo CHAR.

Ejemplo:

PARAMETERS: ESTUDIA AS CHECKBOX.

La adición RADIOBUTTON genera un grupo de campos en la pantalla de selección de los cuales el usuario solamente puede seleccionar uno. Cada parámetro, al igual que en el caso anterior, es del tipo CHAR con longitud de uno.

Ejemplo:

PARAMETERS: B1 RADIOBUTTON GROUP R1, B2 RADIOBUTTON GROUP R1, B3 RADIOBUTTON GROUP R1.

Cuando se desean crear parámetros a seleccionar de una lista, se utiliza la opción AS LIST BOX VISIBLE LENGHT <n>, donde n indica el largo del campo a desplegar, más no el tamaño de la variable. 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.

Ejemplo:

TYPE-POOLS : VRM.

DATA: param TYPE vrm_id, values TYPE vrm_values, value LIKE LINE OF values.

Xioma Consulting ! ABAP WORKSHOP" 29

El nombre de un parámetro no puede exceder los 8 caracteres. Para definir los textos de los parámetros utilice en el menú la opción IR A-> Elementos de Texto->Textos de Selección.Esto aplica igualmente para los parámetros definidos en el Selection-Screen.

Page 30: ABAP Basico

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

AT SELECTION-SCREEN OUTPUT.

param = 'P_NAME'. value-key = '1'. value-text = 'Xioma'. APPEND value TO values. value-key = '2'. value-text = 'Crystalis'. APPEND value TO values.

CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = param values = values.

Al definir un valor por defecto para el parámetro se utiliza la instrucción DEFAULT.

Ejemplo:

PARAMETERS: MAT LIKE MARA-MATNR DEFAULT ‘00001’.

La instrucción LOWER CASE permite que se introduzcan letras minúsculas en el parámetro.

Ejemplo:

PARAMETERS: nombre LIKE zusuario-nombre LOWER CASE.

Cuando sea necesario asignar un objeto de ayuda al parámetro se ha de utilizar la instrucción MATCH CODE OBJECT. Si existiera una ayuda de búsqueda ya asignada a la referencia, ésta será ignorada.

Ejemplo:

PARAMETERS: MAT LIKE MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL.

Si el elemento de datos de la referencia posee un dominio que debe ser validado, es necesario utilizar la instrucción VALUE CHECK.

Ejemplo:

PARAMETERS: werks LIKE bsis-werks VALUE CHECK.

Cuando se requiere que el parámetro sea obligatorio se agrega la instrucción OBLIGATORY. En caso que sea necesario definir un parámetro para ser utilizado

Xioma Consulting ! ABAP WORKSHOP" 30

Page 31: ABAP Basico

únicamente para la invocación del reporte mediante SUBMIT, se utiliza la instrucción NO-DISPLAY.

Ejemplo:

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

Si es necesario reducir el tamaño del área de entrada se utiliza la instrucción VISIBLE LENGHT. Esto no modifica el tamaño de la variable.

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. El nombre de cada parámetro no puede exceder los 8 caracteres.

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.

Cuando se desea que el parámetro para el SELECT-OPTIONS sea dinámico se coloca la variable de referencia entre paréntesis.

Ejemplo:

PARAMETERS: dbtab(30) TYPE c, column(30) TYPE c.

DATA name(80) TYPE c.

SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW. SELECT-OPTIONS opcion FOR (name). SELECTION-SCREEN END OF SCREEN 500.

CONCATENATE dbtab '-' column INTO name.

CALL SELECTION-SCREEN 500 STARTING AT 10 10.

Xioma Consulting ! ABAP WORKSHOP" 31

Page 32: ABAP Basico

Cuando se requiere que el parámetro sea obligatorio se agrega la instrucción OBLIGATORY. En caso que sea necesario definir un parámetro para ser utilizado únicamente para la invocación del reporte mediante SUBMIT, se utiliza la instrucción NO-DISPLAY.

Ejemplo:

SELECT-OPTIONS: MAT FOR MARA-MATNR OBLIGATORY, MEINS FOR MARA-MEINS NO-DISPLAY.

Si es necesario reducir el tamaño del área de entrada se utiliza la instrucción VISIBLE LENGHT. Esto no modifica el tamaño de la variable.

Ejemplo:

SELECT-OPTIONS: MAT FOR MARA-MATNR VISIBLE LENGHT 10.

Para eliminar el botón de múltiples selecciones se utiliza la instrucción NO-EXTENSION, y si fuera el caso de eliminar el campo para el hasta, se utiliza la instrucción NO INTERVALS.

Ejemplo:

SELECT-OPTIONS: MAT FOR MARA-MATNR NO-EXTENSION, MEINS FOR MARA-MEINS NO INTERVALS.

Al definir un valor por defecto para el parámetro se utiliza la instrucción DEFAULT.

Ejemplo:

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

La instrucción LOWER CASE permite que se introduzcan letras minúsculas en el parámetro.

Ejemplo:

SELECT-OPTIONS: nombre for zusuario-nombre LOWER CASE.

Xioma Consulting ! ABAP WORKSHOP" 32

Page 33: ABAP Basico

Cuando sea necesario asignar un objeto de ayuda al parámetro se ha de utilizar la instrucción MATCH CODE OBJECT. Si existiera una ayuda de búsqueda ya asignada a la referencia, ésta será ignorada.

Ejemplo:

SELECT-OPTIONS: MAT FOR MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL.

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.

Recuadros y Títulos

Es posible crear recuadros que encapsulen los parámetros de selección y textos.

Sintaxis:

SELECTION-SCREEN BEGIN OF BLOCK bloque <WITH FRAME> <TITLE título> <NO INTERVALS>.

<Parámetros>

SELECTION-SCREEN END OF BLOCK bloque.

Ejemplo:

Report Zejemplo.

*Ejemplo 1

SELECTION-SCREEN BEGIN OF BLOCK EJE_1

WITH FRAME TITLE EJE_1 NO INTERVALS.

SELECT-OPTIONS: S_FECHA FOR SY-DATUM.

PARAMETERS: P_PARA(20).

SELECTION-SCREEN END OF BLOCK EJE_1.

Xioma Consulting ! ABAP WORKSHOP" 33

Page 34: ABAP Basico

*Ejemplo 2

SELECTION-SCREEN BEGIN OF BLOCK EJE_2 WITH FRAME TITLE EJE_2.

SELECT-OPTIONS: S_FECHA2 FOR SY-DATUM. PARAMETERS: P_PARA2(20).

SELECTION-SCREEN END OF BLOCK EJE_2.

*Ejemplo 3

SELECTION-SCREEN BEGIN OF BLOCK EJE_3.

SELECT-OPTIONS: S_FECHA3 FOR SY-DATUM. PARAMETERS: P_PARA3(20).

SELECTION-SCREEN END OF BLOCK EJE_3.

INITIALIZATION.

MOVE ‘EJE 1’ TO EJE_1. MOVE ‘EJE 2’ TO EJE_2.

El recuadro se genera alrededor del código incluido en el ámbito del SELECTION-SCREEN al utilizar la adición WITH FRAME. En combinación con el WITH FRAME se puede utilizar la adición TITLE para agregar un título al recuadro, pero éste no puede superar los 8 caracteres. La adición NO INTERVALS hace que el SELECT-OPTIONS aparezca dentro del recuadro como un campo único.

Xioma Consulting ! ABAP WORKSHOP" 34

Page 35: ABAP Basico

Agrupación de Ítemes

Utilizando el SELECTION-SCREEN es posible agrupar parámetros o textos en una misma línea, para ello se utiliza la adición BEGIN OF LINE y END OF LINE.

Sintaxis:

SELECTION-SCREEN BEGIN OF LINE. <parámetros / texto> SELECTION-SCREEN END OF LINE.

Ejemplos:

REPORT EJEMPLO2.

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

SELECTION-SCREEN END OF LINE.

Xioma Consulting ! ABAP WORKSHOP" 35

Existen dos limitantes para éste comando. 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.

Page 36: ABAP Basico

REPORT EJEMPLO2.

SELECTION-SCREEN BEGIN OF LINE.

PARAMETERS: P_PARAM1(10). SELECTION-SCREEN COMMENT (15) W_NOMBRE.

SELECTION-SCREEN ULINE (10). SELECTION-SCREEN PUSHBUTTON (10) W_BOTON

USER-COMMAND UCOM.

SELECTION-SCREEN END OF LINE.

INITIALIZATION. W_NOMBRE = ‘Comentario’. W_BOTON = ‘Botón’.

Es posible incluir parámetros, botones, comentarios o bloques subrayados como campos de entrada en el ámbito del BEGIN OF LINE y END OF LINE. El SELECT-OPTIONS no es permitido dado que la naturaleza de éste es crear múltiples objetos en una sola línea (la cota inferior y la cota superior).

Posicionamiento de Ítemes Dentro del conjunto de instrucciones posibles para la adición BEGIN OF LINE se encuentra la opción POSITION. Ésta opción se utiliza para definir la posición en la línea definida por el BEGIN OF LINE.

Sintaxis:

SELECTION-SCREEN POSITION <posición>.

Ejemplo:

SELECTION-SCREEN BEGIN OF LINE.

PARAMETERS: PARAM1(8).

Xioma Consulting ! ABAP WORKSHOP" 36

Page 37: ABAP Basico

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

Page 38: ABAP Basico

Comentarios

En el SELECTION-SCREEN también es posible generar comentarios. Siempre que se utilice el comando COMMENT.

Sintaxis:

SELECTION-SCREEN COMMENT <formato> <nombre> FOR FIELD <campo> MODIF ID <id de modificador> VISIBLE LENGHT <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

Page 39: ABAP Basico

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

Page 40: ABAP Basico

Puede notarse en el ejemplo que el botón puede existir por si mismo dado que es un campo de entrada. Cuando se hace click sobre el botón, el campo del sistema SSRFIELDS-UCOMM obtiene el valor del valor que se le ha asignado al botón en su definición. 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.

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 . Este tipo de botón también puede ser utilizado en el momento que se genera la pantalla de selección, y se pueden crear en ésta hasta cinco botones en el nivel de la barra de herramientas.

Sintaxis:SELECTION-SCREEN FUNCTION KEY <número>.

Ejemplo:

TABLES: SSCRFIELDS.

SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM.

SELECTION-SCREEN END OF LINE.

Xioma Consulting ! ABAP WORKSHOP" 40

El parámetro número puede tener valores de 1 a 5.

Page 41: ABAP Basico

SELECTION-SCREEN SKIP 9.

SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2 USER-COMMAND UCOW.

SELECTION-SCREEN END OF LINE. INITIALIZATION.

MOVE ‘Botón de Aplicación’ to SSCRFIELDS-FUNCTXT_01.W_BUTTON = ‘Botón 1’.W_BUTTO2 = ‘Botón 2’.

Al ejecutar el programa, el campo SSCRFIELDS-FUNCTXT_01se asocia al botón 1 de la barra de herramientas en el evento de inicialización. Este valor es entonces desplegado en el botón en tiempo de ejecución. Se puede asociar el campo FUNCTXT_02 al botón dos, y así sucesivamente hasta el botón cinco. Algunas variables del sistema son inicializadas cuando se utiliza este comando. El sistema inicializa el campo SSCRFIELDS-UCOMM a FC01 para la tecla de función 1, FC02 para la tecla de función 2 y así sucesivamente. 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. Para asignar texto al botón que se esta creando, es necesario asegurarse de asignar un texto al campo SSCRFIELDS-FUNCTXT_01 para la tecla de función 1, para el campo SSCRFIELDS-FUNCTXT_02 para la tecla de función 2, y así sucesivamente. El momento para realizar estas asignaciones es en el evento INITIALIZATION.

Xioma Consulting ! ABAP WORKSHOP" 41

Page 42: ABAP Basico

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.

Sintaxis:

SELECTION-SCREEN SKIP <número de líneas>.

El número de líneas en blanco puede ser de 1 a 9, en caso de ser solamente 1 se puede omitir el número.

Ejemplo:

SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM. SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN SKIP 9.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2 USER-COMMAND UCOW.

SELECTION-SCREEN END OF LINE.

INITIALIZATION. W_BUTTON = 'Botón 1'. W_BUTTO2 = 'Botón 2'.

Xioma Consulting ! ABAP WORKSHOP" 42

Page 43: ABAP Basico

Ventanas de Selección

Es posible definir ventanas de selección que pueden ser llamadas desde programas de diálogo.

Sintaxis:

SELECTION-SCREEN BEGIN OF SCREEN <DYNPRO> TITLE <título> AS WINDOW. . . .

SELECTION-SCREEN END OF SCREEN <DYNPRO>.

Ejemplos:

SELECTION-SCREEN BEGIN OF SCREEN 1001 TITLE title AS WINDOW. parameters: nombre(10). select-options: centro for t001-waers.

SELECTION-SCREEN END OF SCREEN 1001.

. . . CALL SELECTION-SCREEN ‘1001’ STARTING AT 5 5

Xioma Consulting ! ABAP WORKSHOP" 43

Page 44: ABAP Basico

VARIABLES DE AMBIENTE *SY +

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.

El siguiente cuadro describe los campos que pueden resultar de uso más frecuente:

Xioma Consulting ! ABAP WORKSHOP" 44

C " D I G O D E S C R I P C I " N

BATCH Indicador de modo Batch X indica modo de fondo activo.

DATUM Fecha del Sistema

DYNNR Número de la pantalla actual

INDEX Indica la iteración del LOOP

MSGNO Número de Mensaje

MSGTY Tipo de Mensaje (E,I,W)

MSGV1 Línea de Mensaje 1

MSGV2 Línea de Mensaje 2

MSGV3 Línea de Mensaje 3

MSGV4 Línea de Mensaje 4

PAGNO Número de Página

REPID Nombre del programa ABAP

SUBRC Valor de retorno de una sentencia ABAP

TABIX Línea actual en la tabla interna

TCODE Código de la Transacción

TFILL Total de entradas en la tabla interna

UZEIT Hora

TITLE Título del programa

UCOMM Función ejecutada

UNAME ID del usuario

LISEL Valor de la línea seleccionada

Page 45: ABAP Basico

Ejemplo:…Select single * from T001.IF SY-SUBRC EQ 0. WRITE: ‘Existen valores en la tabla T001’.ENDIF.…

Xioma Consulting ! ABAP WORKSHOP" 45

Page 46: ABAP Basico

OPERADORES ARITM,TICOS

Existen varias operaciones en el estándar, muchas de éstas se pueden conseguir bajo la cláusula COMPUTE. Sin embargo en el presente documento solamente se nombraran los operadores aritméticos de uso más frecuente.

La suma Para realizar una suma se utiliza el símbolo ‘+’ o la instrucción ADD. Sin

embargo se recomienda utilizar la primera forma del ejemplo por ser más eficiente.

Ejemplo:

A = A + 1.

ADD 1 to A.

La Resta El símbolo ‘-‘ indica la operación de sustracción, así mismo es posible la utilización de la instrucción SUBSTRACT. Es más eficiente la utilización del símbolo ‘-‘.

Ejemplo:

A = A – 1.

SUBSTRACT 1 TO A.

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.

Ejemplo:

A = A * 2.

MULTIPLY A BY 2.

Xioma Consulting ! ABAP WORKSHOP" 46

Page 47: ABAP Basico

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.

Ejemplo:

A = A / 2.

DIVIDE A BY 2.

El Exponente

Para elevar un valor a una potencia n se utiliza dos veces el símbolo ‘*’ quedando de la siguiente manera: ‘**’.

Ejemplo:

A = A ** 2.

El Residuo4

Para obtener el residuo de la división se utiliza el operador MOD.

Ejemplo:

B = A MOD 3.

El cociente5

Para obtener el cociente de la división se utiliza el operador DIV.

Ejemplo:

B = A DIV 3.

Xioma Consulting ! ABAP WORKSHOP" 47

4 El residuo de la divisi-n de 5 entre 3 es 2.

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

Page 48: ABAP Basico

INSTRUCCIONES DE DECISI"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.

OPERADORES LÓGICOS o BOOLEANOS Los operadores lógicos sirven para definir relaciones entre expresiones generando de esta manera nuevos valores de verdad. En la lógica Booleana solamente existen dos valores: VERDADERO o FALSO. Los operadores que existen en ABAP son los siguientes: AND, OR y NOT. Estos operadores respetan las reglas de la lógica Booleana.

Es posible agrupar las expresiones encerrándolas entre paréntesis. Los valores y campos deben separarse utilizando espacios en blanco.

Ejemplo:

Incorrecto:

f1 EQ f2 AND (f3 EQ f4).

Xioma Consulting ! ABAP WORKSHOP" 48

A N D

V A L O R

1V A L O R

2R E S U L#

T A D O

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

O R

V A L O R

1V A L O R

2R E S U L#

T A D O

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

N O T

V A L O R R E S U L T A D O

Verdadero Falso

Falso Verdadero

Page 49: ABAP Basico

Correcto:

f1 EQ f2 AND ( f3 EQ f4 ).

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

NOT f1 EQ f2 OR f3 EQ f4 AND f5 EQ f6

Esto corresponde a

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

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

Xioma Consulting ! ABAP WORKSHOP" 49

Es recomendable la utilización de los mnemónicos dado que puede resultar menos confusa durante la interpretación del código.

O P E R A D O R D E S C R I P C I " N

=,EQ Igual que

<>, NE Diferente que

>, GT Mayor que

<, LT Menor que

>=, GE Mayor o igual que

<+, LE Menor o igual que

BETWEEN Entre

Page 50: ABAP Basico

Además existe una serie de operadores relacionales que están orientados a la evaluación de cadenas de caracteres.

O P E R A D O R D E S C R I P C I " N

CO Contains Only: Es verdadero, si operando1 sólo contiene caracteres del operando2. Mayúsculas, minúsculas y espacios en blanco son tomados en cuenta en ambos operandos. Si el operando2 es inicial, entonces la expresión lógica es falsa, a no ser que operando1 sea inicial también, en cuyo caso la expresión lógica es siempre verdadera. Si el resultado de la comparación es negativo, sy-fdpos contiene el offset del primer carácter en el operando1, que no está contenido en el operando2. Si el resultado de la comparación es positivo, sy-fdpos contiene la longitud de operando1.

CN Contains Not Only: Es verdadero si una expresión lógica con CO (Contains Only) es falsa, es decir si el operando1 no solo contiene caracteres de operando2, sino también otros caracteres no incluidos en el operando2. Sy-fdpos es puesto de la misma manera como con CO. Si la comparación es verdadera, sy-fdpos contiene el offset del primer carácter en el operando1 que no está contenido en el operando2. Si la comparación es falsa, sy-fdpos contiene la longitud de operando1.

CA Contains Any: Verdadero, si operando1 contiene al menos un carácter del operando2. Mayúsculas, minúsculas y espacios en blanco son tomados en cuenta para ambos operandos. Si el operando1 o operando2 son iniciales, la expresión lógica es siempre falsa. Si el resultado de la comparación es positivo, sy-fdpos contiene el offset del primer carácter en el operando1 que también está contenido en el operando2. Si el resultado de la comparación es negativo, sy-fdpos contiene la longitud del operando1.

NA Contains Not Any: Es verdadero si la expresión lógica utilizada con CA es falsa, es decir, si el operando1 no contiene ningún carácter del operando2. Si el resultado de la comparación es negativo, sy-fdpos contiene el offset del primer carácter en el operando1 que también está contenido en el operando2. Si el resultado de la comparación es verdadero, sy-fdpos contiene la longitud del operando1.

Xioma Consulting ! ABAP WORKSHOP" 50

Page 51: ABAP Basico

O P E R A D O R D E S C R I P C I " N

CS Contains String: Es verdadero si el valor del operando2 está contenido en el operando1. Diferenciación entre mayúsculas y minúsculas o espacios en blanco no son tomados en cuenta. Si el operando1 es inicial (contiene caracteres sólo en blanco), la expresión lógica es falsa, a no ser que el operando2 sea también inicial. En este caso la expresión lógica es siempre verdadera. Si el resultado de la comparación es verdadero, sy-fdpos contiene el offset del operando2 en el operando1. Si el resultado de la comparación es negativo, sy-fdpos contiene la longitud del operando1.

NS Contains No String: Es verdadero si la expresión lógica utilizada con CS es falsa, es decir, si el operando1 no contiene el valor del operando2. Si el resultado de la comparación es negativo, sy-fdpos contiene el offset del operando2. Si la comparación es verdadera, sy-

fdpos contiene la longitud del operando1.

CP Contains Pattern: Es verdadero, si el contenido del operando1 encaja con el patrón en el operando2. Los caracteres especiales pueden ser usados para formar el patrón del operando, donde "*" representa cualquier cadena de caracteres, y "+" representa cualquier carácter. Diferenciaciones entre mayúsculas y minúsculas no son tomadas en cuenta. Si la comparación es verdadera, sy-fdpos contiene el offset del operando2 en el operando1, por lo que caracteres especiales "*" en el operando2 son ignorados si el operando2 también contiene otros caracteres. Si la comparación es falsa, sy-fdpos contiene la longitud del operando1.

Se puede seleccionar caracteres en el operando2 para una comparación directa añadiendo el símbolo "#" antes de los caracteres requeridos. Para estos caracteres, la diferencia entre mayúsculas y minúsculas es tomada en cuenta.

NP No Pattern: Es verdadero, si una expresión lógica con CP es falsa, es decir si el operando1 no encaja en el patrón del operando2. Si la comparación es falsa, sy-fdpos contiene el offset del operando2 en el operando1. 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.

Xioma Consulting ! ABAP WORKSHOP" 51

Page 52: ABAP Basico

IF IF evalúa una expresión lógica. En caso que el valor de la expresión sea verdadera, ejecuta el código que contiene su bloque, de lo contrario continua con el código siguiente. El bloque debe cerrarse con la instrucción ENDIF. Sintaxis:

IF <expresión>.

<Código>.

ENDIF.

Ejemplos:

IF A GT 10.

WRITE:/ ‘A es mayor que 10’.

ENDIF. “Comparación de 10

IF A GT 10.

IF A LT 20.

WRITE:/ ‘A es mayor que 10 y menor que 20’.

ENDIF. “MENOR QUE 20 ENDIF. “MAYOR QUE 10

IF A BETWEEN 10 AND 20.

WRITE:/ ‘A es mayor que 10 y menor que 20’.

ENDIF. “Entre 10 y 20

**Ejemplo de CO - Contains Only

DATA: str1 TYPE string, str2 TYPE string.

str1 = 'BD '. str2 = 'ABCD '.

IF str1 CO str2. “ resultado = verdadero “ SY-FDPOS = 3ENDIF. str1 = 'BD '. str2 = 'ABCDE'.

IF str1 CO str2.

Xioma Consulting ! ABAP WORKSHOP" 52

Page 53: ABAP Basico

“ resultado = falso “ SY-FDPOS = 2ENDIF.

**Ejemplo de CN - Contains not onlyDATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABC12'. str2 = 'ABCD '.

IF str1 CN str2. “ resultado = verdadero “ SY-FDPOS = 3ENDIF. str1 = 'ABABC'. str2 = 'ABCD '.

IF str1 CN str2. ... “ resultado = falso “ SY-FDPOS = 5ENDIF.

**Ejemplo de CA - Contains Any

DATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABcde'. str2 = 'Bd '.

IF str1 CA str2. “ resultado = true “ SY-FDPOS = 1ENDIF. str1 = 'ABcde'. str2 ='bD '.

IF str1 CA str2. “ resultado = falso “ SY-FDPOS = 5ENDIF.

**Ejemplo de Contains Not AnyDATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABAB '. str2 = 'AB '.

IF str1 NA str2. “ resultado = falso “ SY-FDPOS = 0ENDIF. str1 = 'ababa'. str2 = 'AB '.

IF str1 NA str2.

Xioma Consulting ! ABAP WORKSHOP" 53

Page 54: ABAP Basico

“ resultado = verdadero “ SY-FDPOS = 5ENDIF.

**Ejemplo de CS - Contains StringDATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABcde'. str2 = 'bC '.

IF str1 CS str2. “ resultado = verdadero “ SY-FDPOS = 1ENDIF. str1 = 'ABcde'. str2 = 'ce '.

IF str1 CS str2. “ resultado = falso “ SY-FDPOS = 5ENDIF.

**Ejemplo de NS - Constains no StringDATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABcde'. str2 = 'bC '.

IF str1 NS str2. “ resultado = falso “ SY-FDPOS = 1ENDIF. str1 = 'ABcde'. str2 = 'ce '.

IF str1 NS str2. “ resultado = verdadero “ SY-FDPOS = 5ENDIF.**Ejemplo de CP - Contains PatternDATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABCDEFGH'. str2 = '*C*F+H'.

IF str1 CP str2. “ La expresión lógica evaluada con CP es verdadera “ por lo que ejecutará al código dentro del IFENDIF. str1 = ' ABcde'. str2 = ' *b*'.

IF str1 CP str2. “ resultado = verdadero “ SY-FDPOS = 1ENDIF.

Xioma Consulting ! ABAP WORKSHOP" 54

Page 55: ABAP Basico

str1 = ' ABcde'. str2 = ' *#b*'.

IF str1 CP str2. “ resultado = falso “ SY-FDPOS = 5ENDIF.**Ejemplo de NP - NO PatternDATA: str1 TYPE string, str2 TYPE string.

str1 = 'ABCDEFGH'. str2 = '*C*F+H'.

IF str1 NP str2. “ str1 coincide con el patron de str2, por lo que “ el resultado de la evaluacion con NP es falsoENDIF. str1 = 'ABDEFCGH'. str2 = '*C*F+H'.

IF str1 NP str2. “ str1 no coincide con el patron de str2, por lo que “ el resultado de la evaluacion con NP es verdaderoENDIF.str1 = ' ABcde'. str2 = ' *b*'.

IF str1 NP str2. “ resultado = falso “ SY-FDPOS = 1ENDIF.str1 = ' ABcde'. str2 = ' *#b*'.

IF str1 NP str2. “ resultado = verdadero “ SY-FDPOS = 5ENDIF.

ELSE (ELSEIF)

Las sentencias que se coloquen después del ELSE, serán ejecutadas solo si la expresión en la sentencia IF no se cumple. Si se desea hacer otra verificación si la primera no se cumple, se recomienda utilizar ELSEIF. Se puede colocar tantos ELSEIF como se necesiten.

Sintaxis:

IF <expresión>. <Código>. ELSE. <Código>. ENDIF.

IF <expresión>.

Xioma Consulting ! ABAP WORKSHOP" 55

Page 56: ABAP Basico

<Código>. ELSEIF. <Código>. ELSEIF. <Código>. ELSE. <Código>. ENDIF.

Ejemplo:

IF A LT 20. WRITE:/ ‘A es menor que 20’. ELSEIF A GT 50. WRITE:/ ‘A es mayor que 50’. ELSE. WRITE:/ ‘A es mayor o igual a 20 y menor que 50’. ENDIF.

CASEDependiendo del valor del campo, se ejecutarán diferentes bloques de sentencias de

ejecución. Con la instrucción WHEN especificas las condiciones que se quieren evaluar sobre dicho campo.

Sintaxis:

CASE f. WHEN f11 OR f12 ... OR f1n. ... WHEN f21 OR f22 ... OR f2m. ... WHEN OTHERS. . . . ENDCASE.

Ejemplo:

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

CHECKVerifica que la expresión lógica subsecuente es verdadera. Si es así, pasa a la

siguiente sentencia, pero si no, pasa a la siguiente iteración al encontrarse en un DO,

Xioma Consulting ! ABAP WORKSHOP" 56

Page 57: ABAP Basico

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

Sintaxis:

CHECK <expresión>.

Ejemplo:

DO.

Contador = contador + 1. CHECK contador LT 10.

ENDDO.

En el ejemplo, 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.

Xioma Consulting ! ABAP WORKSHOP" 57

Page 58: ABAP Basico

INSTRUCCIONES DE ITERACI"N

A continuación instrucciones que permiten ejecutar un bloque de sentencias de forma repetitiva, ya sea por cantidad de veces determinada o hasta que se cumpla cierta expresión lógica.

DO

Repite las sentencias encerradas entre el DO y el ENDDO, de forma infinita hasta que es detenido por un EXIT, STOP o REJECT. La opción VARYING le permite hacer iteraciones entre un valor y otro.

Sintaxis: DO N TIMES [VARYING f FROM f1 NEXT f2].

Ejemplo:

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

WHILE Repite las sentencias encerradas entre el WHILE y el ENDWHILE, mientras se cumpla la expresión lógica asociada.

Sintaxis:

WHILE <expresión>. <Código>.ENDWHILE.

Ejemplo:

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

Xioma Consulting ! ABAP WORKSHOP" 58

Page 59: ABAP Basico

EXITPermite salir de la iteración, si se encuentra en un DO, WHILE, LOOP o SELECT, o

sale de la rutina, si se encuentra en un FORM, FUNCTION y MODULE.

Sintaxis:

EXIT.

Ejemplo:

DO.

Contador = contador + 1. IF contador GT 9. EXIT. ENDIF.

… ENDDO.

CONTINUE Salta de inmediato a la siguiente iteración.

Sintaxis:

CONTINUE.

Ejemplo:

DO.

Contador = contador + 1. IF contador LT 9. CONTINUE. ENDIF.

… ENDDO

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

Sintaxis:

STOP.

Xioma Consulting ! ABAP WORKSHOP" 59

Page 60: ABAP Basico

DESPLIEGUE 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

Page 61: ABAP Basico

Las adiciones más comunes son:

1. COLOR: Específica el color de fondo para un texto2. INTENSIFIED: Cambia la intensidad del color3. 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

Page 62: ABAP Basico

STRINGS 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 = descripción+0(7). * Fruta obtiene el valor ‘Manzanas’. Fruta = descripción+9(5). * Fruta 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.

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

Si se desea incluir el símbolo ‘ en un string, este debe escribirse doble ‘’.

Page 63: ABAP Basico

Ejemplo:

DATA: ONE(10) VALUE ' John ', TWO(3) VALUE 'F.', THREE(10) VALUE ' Kennedy', NAME(20), FIRST TYPE STRING. CONCATENATE ONE TWO THREE INTO NAME.

El valor final de la variable NAME es: “JohnF.Kennedy”, si se desea separar cada componente por un espacio, se debe agregar la opción: SEPARATED BY SPACE.

Ejemplo:

CONCATENATE ONE TWO THREE INTO NAME SEPARATED BY SPACE.

La opción SPACE puede ser sustituido por cualquier cadena de caracteres o una variable.

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

Sintaxis:

CONDENSE f1.

Ejemplo:

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

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

Xioma Consulting ! ABAP WORKSHOP" 63

Sí se quisieran eliminar todos los espacios en blanco contenidos en la cadena de caracteres, se puede agregar la opción: NO-GAPS.

Ejemplo:

CONDENSE NAME NO-GAPS.

Page 64: ABAP Basico

Replace Se utiliza REPLACE para reemplazar una ocurrencia dentro de una cadena de caracteres. Una vez que la instrucción encuentra la primera ocurrencia, la reemplaza. En ese momento finaliza la búsqueda. En la variable SY-SUBRC se retorna el valor 0 si el reemplazo fue exitoso ó 4 en caso de que no lo fuera.

Sintaxis:

REPLACE <substring> WITH <ocurrencia> INTO <string>.

Ejemplo:

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

Al ejecutar, el valor de field es ‘AstringCB’.

STRLEN Esta función calcula el tamaño de un string y lo retorna a una variable.

Sintaxis:

STRLEN( <variable> ).

Ejemplo:

DATA: TAM TYPE I.

tam = STRLEN( nombre ).

SPLIT

Divide un string en varias secciones a partir de una ocurrencia. De tener exito retorna SY-SUBRC igual a cero.

Sintaxis:

SPLIT <string> AT <ocurrencia> INTO [<var1> <var2>...<varn> | TABLE <itab>].

Xioma Consulting ! ABAP WORKSHOP" 64

Page 65: ABAP Basico

Ejemplo:

DATA: str1 TYPE string, str2 TYPE string, str3 TYPE string, itab TYPE TABLE OF string, text TYPE string.

text = `Ejemplo preparado por xioma Consulting `.

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

Xioma Consulting ! ABAP WORKSHOP" 65

Page 66: ABAP Basico

OTRAS INSTRUCCIONES

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

CLEAR <variable>.

MOVEMueve el contenido de una variable a otra, sin modificar el contenido de la variable

original. No necesariamente la variable de destino es del mismo tipo que la variable de origen.

Sintaxis:

MOVE <v_origen> TO <v_destino>.

Ejemplo:

DATA: A(2) value 'A1', B(2), C(1).

MOVE A TO B.MOVE A+0(1) TO C.

Esto es equivalente a:

B = A.C = A+0(1).

MESSAGEEnvía un mensaje al usuario debidamente clasificado en el repositorio de SAP que

aparece en la parte inferior de la ventana, contempla los tipos W (advertencia), E (error), S (mensaje), A (Abortar transacción), X(Salir con un mensaje de dump), I (informativo) .

Sintaxis:

MESSAGE ID ‘<Clase>’TYPE ‘<tipo>’NUMBER ‘<número>’WITH <param 1> … <param n>.

Ejemplo:MESSAGE ID ‘BC400’TYPE ‘I’ NUMBER ‘040’ WITH wa_itab-campo1 wa_itab-campo2.

Xioma Consulting ! ABAP WORKSHOP" 66

Page 67: ABAP Basico

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, se pasa a la siguiente pantalla

Xioma Consulting ! ABAP WORKSHOP" 67

Page 68: ABAP Basico

Se selecciona y se asigna el nuevo objeto su respectivo paquete y orden de transporte.

Seleccionando la pestaña Mensajes, se puede empezar a insertar los mensajes que se desea utilizar. Cada mensaje puede contener parámetros que son indicados con el símbolo &.

Los mensajes pueden ser traducidos, por ende siempre aparecen en el idioma en que se haya ingresado el usuario.

SUBMIT

Ejecuta un programa tipo reporte desde otro programa.

Sintaxis:

SUBMIT <REPORT> [VIA SELECTION-SCREEN ] [AND RETURN ] [WITH.Param1 valor1 WITH param2 valor2...]

Ejemplo:

SUBMIT REPORT01 VIA SELECTION-SCREEN.

Xioma Consulting ! ABAP WORKSHOP" 68

Page 69: ABAP Basico

PROCEDIMIENTOS, FUNCIONES Y

MACROS

Los procedimientos son subprogramas que se utilizan para modulizar una aplicación. El uso de los mismos hace que los programas sean más entendibles. En ABAP los procedimientos reciben y retornan valores por medio de parámetros. Los procedimientos pueden definirse en cualquier parte del código ABAP. Las funciones son similares a los procedimientos, pero se comportan como una “caja negra”6. Su definición es global en el sistema, por lo cual no es necesario definirlas en el programa. Las funciones en ABAP se manipulan por medio de la transacción SE377. Existen ya una cantidad considerable de funciones estándar definidas en el sistema y que están disponibles para el desarrollador. Un macro es un código simple que se reemplaza en el código principal en tiempo de ejecución. Puede recibir hasta 9 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, por lo que puede ser complicado determinar errores. SAP almacena los macros del estándar en la tabla TRMAC. Es importante recordar que un macro puede contener otros macros en su código más no puede invocarse a si mismo.

FORM

Se utiliza para indicar el inicio del procedimiento con sus parámetros de entrada y salida. Estos parámetros pueden ser por valor (al utilizar VALUE) o por referencia. Una vez que se define el procedimiento todas las definiciones que se hacen de constantes y variables son locales. Esta instrucción debe finalizar con un END FORM.

Sintaxis:

FORM <procedimiento> [USING <variables de entrada> | USING VALUE <variable de entrada>] [CHANGING <variables de salida> | CHANGING VALUE(variable de salida) ].

<Código>.

ENDFORM.

Ejemplo:

Xioma Consulting ! ABAP WORKSHOP" 69

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

7 La utilización de la SE37 no esta contemplada en este manual

Page 70: ABAP Basico

FORM WELCOME. WRITE / 'Hello world'. ENDFORM.

FORM suma USING num1 num2 CHANGING resultado.

resultado = num1 + num2.

ENDFORM. "suma

Al utilizar el parámetro por valor en el CHANGING el parámetro original no cambia sino hasta que el procedimiento terminar. Cuando los parámetros que recibe el procedimiento son por referencia, 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, aunque el procedimiento no haya finalizado.

PERFORM Sirve para realizar la invocación de un procedimiento.

Sintaxis: PERFORM <procedimiento> USING <variables de entrada> CHANGING <variables de salida>.

Ejemplo:PERFORM suma USING 2 3 CHANGING total.

CALL Este comando invoca a una función. 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, y éste genera el CALL con los parámetros de entrada y salida.

Sintaxis: CALL ‘<función>’ <IMPORTING param 1 = valor 1 … param n = valor n> <EXPORTING param 1 = valor 1 … param n = valor n>.

Ejemplo:

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

Xioma Consulting ! ABAP WORKSHOP" 70

Page 71: ABAP Basico

Invocación de una función

Para hacer la invocación de una función lo haremos utilizando el botón de Patrón

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

Solamente se debe escribir el nombre de la función que deseamos invocar en nuestro programa. En este caso utilizaremos la función creada anteriormente (ZF_FUNCION1).

CALL FUNCTION 'ZF_FUNCION1' EXPORTING I_MATNR = I_WERKS = I_LGORT = I_LGPLA = I_CHARG =* IMPORTING* E_VERME = CHANGING ERROR = MESSAGE =* EXCEPTIONS* EXCEP1 = 1* OTHERS = 2 .

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

Una vez cargada la estructura en nuestro programa, se deben colocar, a la derecha del igual “=” los valores que serán enviados a la función y las variables en las que se recibirán los resultados. Los parámetros opcionales pueden ser omitidos comentando la línea con un asterisco (*).

Xioma Consulting ! ABAP WORKSHOP" 71

Page 72: ABAP Basico

DEFINE Se utiliza DEFINE para definir un macro.

Sintaxis:DEFINE <macro> ...END-OF-DEFINITION.

Ejemplo:DEFINE SUMA. &1 = &2 + &3.END-OF-DEFINITION.

...

DATA: A(2), B(2), C(2).

START-OF-SELECTION.

SUMA A B C.

*En la variable A queda la suma de B y C.

Xioma Consulting ! ABAP WORKSHOP" 72

Page 73: ABAP Basico

INCLUDES

Los programas includes se utilizan para modularizar los programas ABAP y crear bloques de código reutilizables. Estos programas no son ejecutables por si mismos y no necesitan de ninguna sentencia de inicialización.

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

Los programas tipo include puede ser muy útiles cuando se desea crear librerias de procedimientos, macros, definición de datos, etc.

Sintaxis:

INCLUDE <programa tipo include>.

Ejemplo:

INCLUDE ZINC_EJEMPLO.

Xioma Consulting ! ABAP WORKSHOP" 73

Aunque es posible llamar a un include dentro de otro include, es importante recordar que no se pueden hacer includes recursivos, esto es que no es posible que un include se invoque asi mismo.

Page 74: ABAP Basico

ESTRUCTURAS DE DATOSLas estructuras de datos son conjuntos de variables, quizás de tipos distintos,

relacionadas (conectadas) entre sí de diversas formas y las operaciones definidas sobre esa agrupación. Ejemplos de estructuras de datos las podemos encontrar en muchos ámbitos, desde las matemáticas (estructuras algebraicas: grupo, anillo o cuerpo) hasta el mundo de los negocios (estructura de una empresa). Los elementos de una estructura de datos dependen del lenguaje de programación a través de los tipos de datos que los definen. Sin embargo, la estructura en sí, que está definida por el tipo de relación entre los elementos, no depende del lenguaje de programación empleado.

Las estructuras de datos se caracterizan por el tipo de los elementos de la estructura, las relaciones definidas sobre los elementos y las operaciones permitidas sobre la estructura. Operaciones 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), buscar elementos, insertar o borrar elementos, modificar las relaciones entre los elementos, etc...

En ABAP los tres tipos de estructuras que son más utilizados son: los registros, las tablas internas (llamadas ITABS) y las tablas transparentes.

Registros

Un registro se puede definir como una variable subdividida en varios campos. Para acceder a cada campo se utiliza el nombre del registro, el símbolo ‘-‘ y el nombre del campo.

Para definir el registro se utiliza la instrucción DATA con la opción BEGIN OF.

Sintaxis: DATA: BEGIN OF <nombre>, <Campo 1> <[TYPE] [LIKE]> <Tipo>, … <Campo n> <[TYPE] [LIKE]> <Tipo>, END OF <nombre>.

Ejemplo:

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

Start-of-Selection.

Xioma Consulting ! ABAP WORKSHOP" 74

Page 75: ABAP Basico

Camisa-NrMaterial = 60001. Camisa-color = 1. “Color Blanco Camisa-Talla = ‘M’.

Camisa-Precio = 4000. Camisa-PrecioUSD = Camisa-Precio / TipoCambio.

MOVE-CORRESPONDING

La instrucción MOVE-CORRESPONDING se utiliza para mover información entre los campos de estructuras que posean el mismo nombre. Aquellos campos en la estructura destino que no coincidan con los definidos en la estructura origen son ignorados y no se modifican.

Sintaxis:

MOVE-CORRESPONDING <ESTRUCTURA ORIGEN> TO <ESTRUCTURA DESTINO>.

Ejemplo:

DATA: BEGIN OF origen, Campo1(20), Campo2(10), Campo3 type i, Campo4(3),END OF origen.

DATA: BEGIN OF destino, Campo9(10), Campo3 type i, Campo1(20), Campo4(5), Campo8(15),END OF destino.

origen-campo1 = 'Hola'.origen-campo2 = 'Mundo!'.origen-campo3 = 1701.origen-campo4 = 'NCC'.

destino-campo8 = 'NCC-74656'.

MOVE-CORRESPONDING origen TO destino.

Es importante considerar en el ejemplo, que el orden de los campos en la estructura no es relevante, así como no lo es el tamaño. Si el campo destino es de menor tamaño que el origen, la información será truncada.

Xioma Consulting ! ABAP WORKSHOP" 75

Page 76: ABAP Basico

Si ambas estructuras poseen campos definidos exactamente igual, sin importar el nombre de estos, 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. 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. Se declara en forma similar a un registro incluyendo la opción OCCURS. Esta opción especifica cuantas líneas debe reservar el sistema para los bloques de la tabla interna, normalmente se utiliza 0, sin embargo dependiendo del volumen de información, asignar un número muy grande o uno muy pequeño puede tener una repercusión en el rendimiento del programa.

Sintaxis:

DATA: BEGIN OF <nombre> OCCURS <n>, <Campo 1> <[TYPE] [LIKE]> <Tipo>, … <Campo n> <[TYPE] [LIKE]> <Tipo>, END OF <nombre>.

Ejemplo:

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

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

Xioma Consulting ! ABAP WORKSHOP" 76

Page 77: ABAP Basico

Otra manera de agregar la cabecera es utilizar la instrucción WITH HEADER LINE.

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

Ejemplos:

DATA: ITAB LIKE MARA OCCURS 0 WITH HEADER LINE.

DATA: ITAB2 TYPE T_ITAB WITH HEADER LINE.

• Sin Cabecera: Es un tipo de tabla interna que esta compuesto únicamente de cuerpo y su definición se hace con respecto a un tipo definido previamente o a una estructura ya existente. Sin embargo es necesario definir un registro de cabecera para poder agregar o leer registros de la tabla.

Sintaxis:

DATA: <itab> TYPE <tipo> OCCURS <n>.

Ejemplo:

TYPES: BEGIN OF PERSONA, NOMBRE(20) TYPE C, EDAD TYPE I, END OF PERSONA.

DATA: C_Miembro type persona. DATA: Miembro TYPE PERSONA OCCURS 0.

Start-of-selection.

C_Miembro-Nombre = ‘Jose’. C_Miembro-Edad = 20. Append C_miembro to Miembro.

El procesamiento de información en las tablas internas es mucho más rápido que en las tablas transparentes, por lo que suele ser más eficiente cargar los datos de la base de datos a estas estructuras que manipularlos directamente.

Las tablas internas pueden ser de 3 tipos: estándar (que son las que tratamos en este manual), Sorted y Hashed. Estos tres tipos de tablas puede ser declarados de la siguiente manera:

TYPES: BEGIN OF S_ITAB, Nombre(10) TYPE C, Edad TYPE I,

Xioma Consulting ! ABAP WORKSHOP" 77

Page 78: ABAP Basico

END OF S_ITAB.

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

DATA: ITAB1 TYPE T_ITAB1, ITAB2 TYPE T_ITAB2, ITAB3 TYPE T_ITAB3.

Existen varias instrucciones que se utilizan para la manipulación de las tablas internas, a continuación se van a describir las más comunes.

Refresh

Borra todo el contenido de la tabla interna.

Sintaxis:

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

Sintaxis:

APPEND [<registro> TO] <itab>.

Ejemplo:

APPEND C_Miembro TO Personas.

Delete

Esta instrucción borra un registro de la tabla interna.

Sintaxis:

DELETE [TABLE] <ITAB> [FROM wa] [WHERE <Cond>].

Xioma Consulting ! ABAP WORKSHOP" 78

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

Es importante tomar en cuenta que la instrucción REFRESH no limpia la cabecera de la tabla, únicamente el cuerpo de la misma. Para limpiar el contenido de la cabecera de puede utilizar la instrucción CLEAR.

Page 79: ABAP Basico

Ejemplos:

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

2. Registro de una tabla sin cabecera

DELETE TABLE Miembro FROM Miembro.

3. Utilizando una condición. DELETE Camisa WHERE Talla EQ ‘XL’.

Modify

Se utiliza para actualizar los cambios realizados al registro de la cabecera en la tabla interna.

Sintaxis:

MODIFY <ITAB>.

Collect

El COLLECT asume que todos los valores alfanuméricos de izquierda a derecha, hasta conseguir un valor numérico, son la llave de la tabla interna. Y empieza a acumular los valores numéricos que se encuentran a la derecha de la llave. Si el registro no existe lo agrega a la tabla interna.

Sintaxis:

COLLECT <ITAB>.

Ejemplo:

DATA: BEGIN OF COMPANY OCCURS 0, NAME(20) TYPE C, SALES TYPE I, END OF COMPANY.

COMPANY-NAME = 'Duck'. COMPANY-SALES = 10. COLLECT COMPANY.

COMPANY-NAME = 'Tiger'. COMPANY-SALES = 20. COLLECT COMPANY.

COMPANY-NAME = 'Duck'.

Xioma Consulting ! ABAP WORKSHOP" 79

Page 80: ABAP Basico

COMPANY-SALES = 30. COLLECT COMPANY.

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.

Sintaxis:

DESCRIBE TABLE <ITAB> LINES <Variable>.

Ejemplo:

DESCRIBE TABLE camisa LINES cant_reg.

SORT

Se utiliza SORT para ordenar una tabla interna indicándole que campos debe asumir como referencia para dicho ordenamiento.

Sintaxis:

SORT <ITAB> BY <campo1> <campo2> ... <campo n> [DESCENDING | ASCENDING ].

Ejemplo:

SORT camisa. *Aquí al no indicarle criterios la ordena por todos los *campos exceptuando los de tipo: I, F y P de forma ascendente.

SORT camisa BY talla color. *Ordena TABLA por los campos Talla y color de forma *descendente.

SORT camisa BY talla ASCENDING color DESCENDING. *Ordena TABLA por los campos Talla (Ascendentemente) y Color *(Descendentemente).

Xioma Consulting ! ABAP WORKSHOP" 80

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 cabeceraoITAB1 = ITAB2. “cuando son tablas internas sin cabecera

Page 81: ABAP Basico

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.

Sintaxis:

LOOP AT <ITAB> [INTO <variable>] [WHERE <condiciones>] [FROM <índice 1> TO <índice 2>]. . <Código>. . ENDLOOP.

Ejemplos:

LOOP AT ITAB INTO WA_ITAB. WRITE WA_ITAB-CAMPO1. ENDLOOP.

LOOP AT ITAB INTO WA_ITAB WHERE CAMPO1 GT 1000. WRITE WA_ITAB-CAMPO1. ENDLOOP.

LOOP AT ITAB INTO WA_ITAB FROM 1 TO 100. WRITE WA_ITAB-CAMPO1. ENDLOOP.

AT

El AT dentro de un LOOP permite evaluar ciertas circunstancias durante la iteración como lo son la primera iteración, cuando cambia un valor en un campo de la tabla interna, cuando se encuentra en la última ocurrencia de un valor en la tabla interna o cuando se encuentra en la última iteración.

Sintaxis:

AT {FIRST | NEW | END OF | LAST ]. <código>. ENDAT.

Ejemplo:

LOOP AT itab.

AT FIRST. WRITE: ‘Primera iteración’. ENDAT.

ENDLOOP.

Xioma Consulting ! ABAP WORKSHOP" 81

Page 82: ABAP Basico

Al utilizar el AT es importante considerar que la cabecera de la tabla interna queda con todos sus campos con el valor ‘*’. Por lo que es necesario crear un área de trabajo igual a la tabla interna para copiar la cabecera antes de entrar en el AT si es que se requieren evaluar ahí.

READ

El Read nos permite acceder a un registro de la tabla interna a través de un índice o de una llave. Si se utiliza la opción de TABLE KEY deben indicarse todos los campos que conforman la llave de la tabla.

Sintaxis: READ TABLE <ITAB> INTO <variable>

[WITH KEY <campo1> = <valor1> <campo2> = <valor2> ...] [WITH TABLE KEY <campo1> = <valor1> ...]

[INDEX <índice>].

Ejemplos:

READ TABLE ITAB INTO WA_ITAB WITH TABLE KEY CAMPO1 = 100

CAMPO2 = ‘ALFA’ CAMPO3 = SY-DATUM.

IF SY-SUBRC EQ 0. WRITE WA_ITAB-CAMPO4.

ENDIF.

READ TABLE ITAB INTO WA_ITAB INDEX 1. IF SY-SUBRC EQ 0.

WRITE WA_ITAB-CAMPO1. ENDIF.

Rangos

Los rangos en ABAP se utilizan para definir un conjunto de valores que posteriormente se pueden utilizar como parte de un filtro en una consulta SQL, con SUBMIT, CHECK, IF o en el WHILE. Su utilización y estructura es idéntica a la que se logra con la instrucción SELECT-OPTIONS.

Al definir un rango se genera una tabla interna donde se almacenan los valores que definen el rango. Cada registro de la tabla se puede asumir como un subrango que define al rango. La estructura de la tabla es la siguiente:

Xioma Consulting ! ABAP WORKSHOP" 82

C A M P O D E S C R I P C I " N

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

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

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

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

Page 83: ABAP Basico

Cuando se utiliza el campo SIGN diferente de BT (entre), el valor que se almacena en HIGH es ignorado, y la comparación se realiza únicamente contra el campo LOW.

Sintaxis:

RANGES: <nombre> FOR <Tipo>.

Ejemplo:

RANGES: FECHA FOR SY-DATUM.

FECHA-LOW = 200510010. FECHA-HIGH = ''. FECHA-SIGN = 'E'. FECHA-OPTION = 'EQ'. APPEND FECHA.

FECHA-LOW = 20051001. FECHA-HIGH = 20051201. FECHA-SIGN = 'I'. FECHA-OPTION = 'BT'. APPEND FECHA. IF SY-DATUM IN FECHA. WRITE:/'El día de hoy esta entre el 1ero de octubre', ' y el 1ero de diciembre.'. WRITE:/'Y no es 10 de octubre'. ENDIF.

Tablas Transparentes

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

tables y las Cluster tables.

Xioma Consulting ! ABAP WORKSHOP" 83

Es importante tomar en cuenta que en el caso del Select se evalúa cada elemento del rango como una condición independiente, por lo que si se excede el límite de condiciones de éste se va a presentar un error en tiempo de ejecución.

Page 84: ABAP Basico

SE11/SE16

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

Fig de la transacción SE16.

FIG. de la transacción SE11.

Xioma Consulting ! ABAP WORKSHOP" 84

Page 85: ABAP Basico

Creación de una Tabla ZLa creación se realiza utilizando la transacción SE11 y seleccionando la

opción Tabla base de datos. Y oprimir el botón Crear. Es importante tomar en cuenta que al igual que en la mayoría de las adiciones de nuevos objetos en el sistema, al crear una nueva tabla se le debe agregar la letra Z al inicio.

Es necesario indicar una descripción para la tabla, 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).

Seguidamente se deben definir los campos de la tabla transparente, para ello se selecciona la pestaña etiquetada como Campos.

Xioma Consulting ! ABAP WORKSHOP" 85

Page 86: ABAP Basico

En esta parte se indican todos los campos que se utilizaran. 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 .La columna llamada Tipo campo sirve para indicar uno de los tipos ya

definidos en el sistema, del cual tomará las características el campo de la tabla que se esta creando. Por ejemplo en el cuadro anterior se puede observar que el campo NOMBRE toma el tipo CHAR20 que es un tipo definido en el sistema como de 20 caracteres. Es posible definir nuevos tipos en el diccionario, o bien se puede utilizar el botón Elemento datos/Tipo directo para poder agregar una definición personalizada.

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

Xioma Consulting ! ABAP WORKSHOP" 86

El tipo de campo MANDT es el que hace que el contenido de la tabla sea dependiente del mandante, es importante siempre colocarlo como parte de la llave. Al agregar datos a la tabla no es necesario llenar este campo, pues el sistema se encarga de manipularlo automáticamente.

Page 87: ABAP Basico

En el cuadro anterior TCURC-WAERS hace referencia al tipo de moneda que utiliza el campo SALARIO.

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

Xioma Consulting ! ABAP WORKSHOP" 87

Page 88: ABAP Basico

Para finalizar se almacenan estas modificaciones y se retorna a la pantalla principal, donde se puede realizar una verificación de la definición de la tabla

utilizando el botón verificar . 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, guarda los cambios y finalmente activa el objeto en el sistema).

TABLES

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

Sintaxis:TABLES: <tabla 1>, <tabla 2>, …, <tabla N>.

Ejemplo:

TABLES: T001, MARA.

Xioma Consulting ! ABAP WORKSHOP" 88

Page 89: ABAP Basico

Insert

Para añadir registro a registro o varios registros a la vez. En los dos casos se puede usar la orden INSERT pero con diferentes opciones.

REGISTRO A REGISTRO

Sintaxis:

INSERT INTO <tabla> [CLIENT SPECIFIED] VALUES <estruct>.

VARIOS REGISTROS.

Se puede guardar una tabla interna en una tabla de diccionario con una sola instrucción sin tener que hacer ningún ciclo.

Sintaxis:

INSERT <tabla> FROM TABLE <ITAB>.

Delete

Con ésta instrucción se borran los registros de la tabla. Existen tres formas distintas para hacerlo.

UN SOLO REGISTRO.

Sintaxis:

DELETE <tabla> FROM <estruc>.

VARIOS REGISTROS

Sintaxis:

DELETE FROM <tabla> [CLIENT SPECIFIED] WHERE <condiciones>.

Xioma Consulting ! ABAP WORKSHOP" 89

Al dar doble click sobre el nombre de una tabla u otro elemento del diccionario, el sistema muestra automáticamente la definición de éste en el diccionario. Si fue definido en el programa, se desplaza el cursor hasta la definición. Siendo posible regresar al lugar de origen la el botón Back.

Page 90: ABAP Basico

A TRAVÉS DE UNA TABLA INTERNA

Sintaxis:

DELETE tabla_dicc FROM TABLE tabla-int.

UPDATE

Actualiza una tabla del diccionario.

UN SOLO REGISTROPara modificar un sólo registro utilizamos la orden UPDATE.

Sintaxis:

UPDATE <tabla> FROM <estructura>.

VARIOS CAMPOS A LA VEZ

Para este campo utilizamos también la orden UPDATE, pero de diferente forma.

Sintaxis:

UPDATE <tabla> [SET <S1> .. <Sn> [WHERE <condición>].

En el SET se colocan los campos a modificar con sus nuevos valores, o sea, 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’.

f = f – g

Al campo ‘f’ se le resta lo que vale ‘g’.

Xioma Consulting ! ABAP WORKSHOP" 90

Page 91: ABAP Basico

Elementos de datos.

Describen el significado de un campo independientemente de las tablas dónde se utilizan. Es decir, tienen un carácter semántico.

El elemento de datos puede ser uno ya existente en el diccionario, uno creado por el usuario ( Z, Y ) o una subestructura. Si en el nombre del campo se utiliza .INCLUDE hace referencia a una substructura. El elemento de datos proporciona la información sobre la funcionalidad de este tipo de datos en el sistema, es decir indica qué se está almacenando en el campo que tiene este elemento de datos (por ejemplo un nº de factura, un importe, etc). Los elementos de datos están definidos por un dominio.

Para crear un nuevo elemento de datos utilizamos la transacción SE11, y colocamos el nombre del nuevo elemento de datos en la referencia del nuevo campo seguido de un doble click.

Al oprimir el botón Sí se muestra la pantalla de creación para el elemento de datos, acá se debe definir a que dominio pertenece el elemento de datos o si el elemento de datos hace referencia a un tipo instalado o a otro elemento de texto. 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. Una vez definido todo esto se debe activar el elemento de texto para que este disponible.

Xioma Consulting ! ABAP WORKSHOP" 91

Page 92: ABAP Basico

DominiosEl 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, de tal forma que al cambiar la definición de un dominio todos los elementos de datos relacionados cambian automáticamente.

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. Por ejemplo, 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.

La creación de nuevos dominios se realiza a través de la transacción SE11.

Xioma Consulting ! ABAP WORKSHOP" 92

Page 93: ABAP Basico

Se debe indicar para el dominio una descripción, un tipo de datos (que proviene de los tipos de datos que existen en el sistema, una cantidad de posiciones. También es posible indicar los atributos de salida, los cuales van a determinar la longitud que puede desplegar el dominio, 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.

En la pestaña de ámbito se definen los valores posibles que puede tomar el dominio, o los rangos en los que puede estar. Igualmente puede hacerse referencia a una tabla que contenga esos valores.

Al finalizar la definición del rango, este debe ser activado para que pueda ser utilizado en el sistema.

Xioma Consulting ! ABAP WORKSHOP" 93

Page 94: ABAP Basico

Vistas de Base de Datos

Una vista es una visión lógica de una ó más tablas, es decir, no se almacena físicamente, sino que se deriva de una o más tablas. Para crear una vista se utiliza la transacción SE11.

Siempre que sea posible es importante tomar campos que sean parte de la llave primaria para establecer la relación entre las tablas, y siempre indicar el campo MANDT en tablas que son dependientes de mandante.

Con el botón RELACIONES es posible invocar relaciones predefinidas en el sistema para las tablas que se hayan indicado.

Xioma Consulting ! ABAP WORKSHOP" 94

Page 95: ABAP Basico

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" 95

Page 96: ABAP Basico

En la pestaña condiciones de selección se determinan una serie de condiciones básicas para filtrar los resultados de la selección.

Xioma Consulting ! ABAP WORKSHOP" 96

Page 97: ABAP Basico

Estructuras

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

Xioma Consulting ! ABAP WORKSHOP" 97

Page 98: ABAP Basico

Las estructuras no son objetos dependientes de mandante, por lo que no es importante declarar el campo MANDT, igualmente no requieren de la definición de llaves.

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. La creación se realiza a través de la transacción SE11, y se pueden crear ayudas de búsqueda elemental o compuestas (basadas en otras ayudas de búsqueda ya existentes).

Xioma Consulting ! ABAP WORKSHOP" 98

Page 99: ABAP Basico

El campo método de selección indica cual tabla del diccionario contiene los datos sobre los cuales se basa la propuesta. 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 check de export indica que el parámetro es de salida y debe indicarse al menos uno. P.I indica el orden de las columnas en la ventana de selección y PosS el orden en la ventana de filtros.

Vista de Actualización

Las vistas de actualización se generan desde la transacción SE11. Se debe seleccionar la tabla transparente a la que se le desea crear la vista de actualización, y en el menú seleccionar Utilidades->Generador actualiz tab. 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. La creación de grupos de funciones será explicada más adelante.

Xioma Consulting ! ABAP WORKSHOP" 99

Page 100: ABAP Basico

En las vistas de actualización es posible indicar un grupo de autorizaciones que permite brindar mayor seguridad, 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. Es necesario también definir el paquete donde se creará la vista. El tipo de actualización determinara si la modificación o inclusión de nuevos registros se hará en una o dos imágenes.

Xioma Consulting ! ABAP WORKSHOP" 100

Page 101: ABAP Basico

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

Page 102: ABAP Basico

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

Xioma Consulting ! ABAP WORKSHOP" 102

Page 103: ABAP Basico

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, indicando en los parámetros VIEWNAME el nombre de la tabla y en el parámetro UPDATE el valor ‘X’.

Xioma Consulting ! ABAP WORKSHOP" 103

Page 104: ABAP Basico

TRANSFERENCIA DE DATOS

Normalmente en SAP las transferencias de datos están relacionadas con la necesidad de establecer una interfase con algún sistema externo. Las más comunes se establecen por medio de IDOCs, funciones RFC y por medio de archivos planos. En esta sección se explicará ésta última.

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

Open dataset

Esta instrucción hace la apertura del archivo. De ser exitoso la instrucción retornará 0 en la variable SY-SUBRC, sino retornará 8. El máximo de archivos que pueden estar abiertos en una sesión es de 100.

Sintaxis: OPEN DATASET <dataset> FOR {INPUT | OUTPUT | APPENDING | UPDATE}

IN {BINARY MODE | TEXT MODE}ENCODING DEFAULT.

Close dataset Close dataset cierra un archivo.

Sintaxis: CLOSE DATASET <dataset>.

Transfer

La instrucción TRANSFER envía el contenido de un objeto de datos a un dataset abierto.

Sintaxis: TRANSFER <Objeto de datos> TO <DATASET>.

Ejemplo: DATA: file TYPE string VALUE `test.dat`.

OPEN DATASET file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

TRANSFER `1234567890` TO file.

Xioma Consulting ! ABAP WORKSHOP" 104

Page 105: ABAP Basico

CLOSE DATASET file.

Read Dataset

READ permite la lectura de un dataset abierto. 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.

Sintaxis:

READ DATASET <dataset> INTO <objeto datos>.

Ejemplo:

DATA: file TYPE string VALUE `test.dat`, Line type string.

OPEN DATASET file FOR INPUT IN TEXT MODE ENCODING DEFAULT.

READ DATASET FILE INTO LINE.

CLOSE DATASET file.

Delete Dataset

Se utiliza para eliminar un archivo. No requiere de un OPEN, y retornará 0 si logró borrar el archivo ó 4 en caso de no lograrlo.

Sintaxis:

DELETE DATASET <dataset>.

Transferencia Remota En el caso de la transferencia remota, se asume que la 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. Para esto se utilizan funciones de SAP que se hacen cargo de la apertura, lectura y cierre de los archivos dejando el contenido de éstos en una tabla interna.

GUI_DOWNLOAD. Esta función descarga el contenido de una tabla interna a un archivo plano. Los parámetros más importantes son:

Xioma Consulting ! ABAP WORKSHOP" 105

Utilizando la transacción AL11 es posible revisar los ficheros en el servidor.

Page 106: ABAP Basico

• FILENAME: Debe ser de tipo string y determina el nombre del dataset.• FILETYPE: Determina el tipo de archivo.• WRITE_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN8.• DATA_TAB: Indica cual es la tabla interna.

Ejemplo:

CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING FILENAME = ARCHIVO FILETYPE = 'ASC' WRITE_FIELD_SEPARATOR = 'X' TABLES DATA_TAB = ITAB EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 8 FILESIZE_NOT_ALLOWED = 9 HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR_WRITE = 13 UNKNOWN_DP_ERROR = 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16 DISK_FULL = 17 DP_TIMEOUT = 18 FILE_NOT_FOUND = 19 DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 21 OTHERS = 22.

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

GUI_UPLOAD.

Esta función carga el contenido de un archivo plano a una tabla interna. Los parámetros más importantes son:

• FILENAME: Debe ser de tipo string y determina el nombre del dataset.• FILETYPE: Determina el tipo de archivo.• HAS_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN.

Xioma Consulting ! ABAP WORKSHOP" 106

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

Page 107: ABAP Basico

• DATA_TAB: Indica cual es la tabla interna.

Ejemplo:

CALL FUNCTION 'GUI_UPLOAD'

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

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>. Reemplazando así la ayuda de búsqueda por una ventana que permita buscar el nombre del archivo en el computado remoto.

.

Xioma Consulting ! ABAP WORKSHOP" 107

Antes de la versión 5.0 se utilizaban las funciones WS_DOWNLOAD y WS_UPLOAD.

Page 108: ABAP Basico

OPEN SQL El Structured Query Language (SQL) se ha convertido en uno de los lenguajes computacionales más populares, y es utilizado para crear, modificar y obtener información de los sistemas administradores de base de datos relacionales. 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, incluso permite invocar SQL nativo desde su código en caso de ser estrictamente necesario.

Select Esta es una de las instrucciones más importantes en el lenguaje, y es la que permite la manipulación de la información de la base de datos. El select se comporta como una instrucción de iteración, correspondiendo cada ciclo con uno de los registros seleccionados en la ejecución. Si la búsqueda fue exitosa SY-SUBRC obtiene el valor de cero.

Sintaxis:

SELECT <campos> FROM <TABLA>.

Ejemplo:

SELECT * FROM ztest.

ENDSELECT. “ztest

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

<código>.

ENDSELECT.

Ejemplo:

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

ENDSELECT. “ztest

Xioma Consulting ! ABAP WORKSHOP" 108

El símbolo * es un comodín que indica que todos los campos de la tabla son seleccionados. Indicar solo los campos que se utilizaran puede mejorar el rendimiento de un select.

Page 109: ABAP Basico

Single La opción Single trae únicamente el primer registro de la tabla que cumpla con las condiciones del Select. Al utilizar esta opción no es necesario utilizar el ENDSELECT.

Sintaxis:

SELECT SINGLE <campos> FROM <tabla>.

Ejemplo:

SELECT SINGLE * FROM ztest.

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

Sintaxis:

SELECT f1 f2 … fn INTO (v1, v2, …, vn) FROM <tabla>.

<código>

ENDSELECT.

Ejemplo:

DATA: CARRID LIKE SCARR-CARRID, CARRNAME LIKE SCARR-CARRNAME,

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

Order by Esta opción indica en el select de que manera debe ordenar la información que se obtiene con la consulta. Es importante recordar que el campo por el cual se realizará el ordenamiento debe estar incluido en los campos que se están seleccionando en la consulta.

Sintaxis:

SELECT <campos> FROM <tabla>

ORDER BY <campo> [ASCENDING | DESCENDING].

Xioma Consulting ! ABAP WORKSHOP" 109

Page 110: ABAP Basico

Ejemplo:

SELECT * FROM ztest

ORDER BY apellido DESCENDING Salario ASCENDING.

Into Corresponding Fields of Coloca la información seleccionada en los campos del mismo nombre en la estructura destino. Es posible utilizar ...INTO CORRESPONDING FIELDS OF TABLE... para llenar una tabla interna con todas las tuplas del resultado.

Ejemplos:

TABLES: MARA.

Data: STR_MARA LIKE MARA,

IT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.

SELECT single * INTO CORRESPONDING FIELDS OF STR_MARA FROM MARA.

SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_MARA FROM MARA.

Distinct Selecciona el conjunto de valores diferentes para las columnas seleccionadas.

Ejemplo:

SELECT DISTINCT MTART INTO MARA-MTART

FROM MARA. WRITE:/ MARA-MTART. ENDSELECT.

Count! Count(*) determina el número de tuplas en el conjunto resultante. Es posible calcular el número de tuplas distintas utilizando la instrucción DISTINCT.

!

Ejemplos:

SELECT COUNT( * ) INTO CANTIDAD

FROM MARA.

! ! SELECT COUNT( DISTINCT MTART ) INTO CANTIDAD FROM MARA.

! !

Xioma Consulting ! ABAP WORKSHOP" 110

Page 111: ABAP Basico

Sum! Devuelve la suma de todos los valores en la columna indicada. 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, en tal caso el resultado es NULL.

Ejemplo:

SELECT SUM( PESO ) INTO PESOTOTAL

FROM ZPESO.

Avg! ! Devuelve el promedio de todos los valores en la columna indicada. Solo puede ser

utilizada en columnas del tipo numérico y se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean, en tal caso el resultado es NULL.

Ejemplo:

SELECT AVG( PESO ) INTO PESOTOTAL

FROM ZPESO.

Max! Retorna el valor más alto en la columna seleccionada. Se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean, en tal caso el resultado es NULL.

Ejemplo:

SELECT MAX( PESO ) INTO PESO_Maximo

FROM ZPESO.

Min

Retorna el valor más bajo en la columna seleccionada. Se ignoran los valores NULL (nulos) a no ser que todos los valores lo sean, en tal caso el resultado es NULL.

Ejemplo:

SELECT MIN( PESO ) INTO PESO_Minimo

FROM ZPESO.

Alias Es posible definir alias tanto para tablas como para vistas del diccionario mediante la adición AS. El alias puede tener un tamaño máximo de 14 caracteres y solamente es válido durante el SELECT.

Xioma Consulting ! ABAP WORKSHOP" 111

Page 112: ABAP Basico

Ejemplo:

DATA wa TYPE mara.

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

Client Specified La adición CLIENT SPECIFIED apaga el manejo automático del mandante, haciendo necesaria indicar el filtro para el campo MANDT.

Up to n Rows

Esta adición restringe el número de tuplas en el resultado. El número n debe ser un entero positivo, y en caso de ser éste cero se retornan todas las tuplas en el resultado. Si se utiliza la opción ORDER BY, primero se ordenan todas las tuplas en el servidor y se pasan las n primeras, de no ser así se pasan las primeras n tuplas seleccionadas por las condiciones del WHERE.

By Passing Buffer Al utilizar esta opción se evita el uso del SAP buffering y se lee directamente de la base de datos en el servidor de aplicación.

Like

La expresión será verdadera si el valor de la columna coincide (o no) con el patrón indicado. 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), y ‘_’ que representa cualquier caracter excepto el blanco.

Ejemplo:

PARAMETERS srch_str(20) TYPE c.

DATA text_tab TYPE TABLE OF doktl.

CONCATENATE '%' srch_str '%' INTO srch_str.

SELECT * FROM doktl INTO TABLE text_tab WHERE doktext LIKE srch_str.

Xioma Consulting ! ABAP WORKSHOP" 112

Page 113: ABAP Basico

Null La expresión NULL es verdadera si el valor de la columna es un valor nulo. Al utilizar esta opción la instrucción SELECT se salta el SAP buffering.

Ejemplos:

SELECT * FROM ZESTUDIANTES WHERE NOTA1 IS NULL.

SELECT * FROM ZESTUDIANTES WHERE NOTA1 IS NOT NULL.

In

La opción IN es verdadera si lo valores de la columna coinciden (o no) con los contenidos de la lista a evaluar. Esta lista puede ser un rango o una enumeración entre paréntesis y separando cada elemento por comas.

Ejemplo:

DATA sbook_tab TYPE TABLE OF sbook. SELECT * FROM sbook INTO TABLE sbook_tab WHERE class NOT IN ('C','F','Y').

Between

La 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. DATA date TYPE d.

date = sy-datum + 30.

SELECT carrid connid fldate FROM sflight INTO CORRESPONDING FIELDS OF TABLE sflight_tab WHERE fldate BETWEEN sy-datum AND date.

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

Xioma Consulting ! ABAP WORKSHOP" 113

Page 114: ABAP Basico

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. Los componentes de la tabla interna deben ser compatibles con las columnas de la tabla transparente sobre la cual se realiza el SELECT.

Ejemplo:

PARAMETERS p_city TYPE spfli-cityfrom.

TYPES: BEGIN OF entry_tab_type, carrid TYPE spfli-carrid, connid TYPE spfli-connid, END OF entry_tab_type.

DATA: entry_tab TYPE TABLE OF entry_tab_type, sflight_tab TYPE SORTED TABLE OF sflight WITH UNIQUE KEY carrid connid fldate.

SELECT carrid connid FROM spfli INTO CORRESPONDING FIELDS OF TABLE entry_tab WHERE cityfrom = p_city.

SELECT carrid connid fldate FROM sflight INTO CORRESPONDING FIELDS OF TABLE sflight_tab FOR ALL ENTRIES IN entry_tab WHERE carrid = entry_tab-carrid AND connid = entry_tab-connid.

Subquery

El subquery es un SELECT entre paréntesis que se utiliza como una condición de la cláusula WHERE. En el subquery no es posible utilizar las adiciones INTO ni ORDER BY. El subquery solo tiene como resultado un conjunto de una sola columna. ABAP permite anidar hasta un máximo de 9 subqueries.

Ejemplo: PARAMETERS: carr_id TYPE spfli-carrid, conn_id TYPE spfli-connid.

DATA: city TYPE sgeocity-city, lati TYPE p DECIMALS 2, longi TYPE p DECIMALS 2.

SELECT SINGLE city latitude longitude

Xioma Consulting ! ABAP WORKSHOP" 114

Page 115: ABAP Basico

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

Join Se utiliza para realizar enlaces dinámicos a través de instrucciones del lenguaje ABAP.

Inner Join

De esta manera se enlazan dos tablas por medio de n campos, donde la intersección de ambas tablas genera una nueva tabla por medio de los campos comunes establecidos. En el siguiente ejemplo el join se establece a través del campo D.

Sintaxis:

SELECT <campos> INTO (<campos>)

FROM <tabla1> AS <alias1> INNER JOIN <tabla2> AS <alias2> ON <alias1>~<campo1> = <alias2>~<campo1> WHERE <condiciones>. ENDSELECT.

Ejemplo:

DATA: DATE LIKE SFLIGHT-FLDATE, CARRID LIKE SFLIGHT-CARRID,

CONNID LIKE SFLIGHT-CONNID.

Xioma Consulting ! ABAP WORKSHOP" 115

Page 116: ABAP Basico

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

WRITE: / DATE, CARRID, CONNID.

ENDSELECT.

Left Outer Join

Al realizar un Left Outer Join la unión se basa en la tabla de la izquierda, aún cuando no existe intersección con la tabla de la derecha, aquellas tuplas en la tabla de la derecha que esten excluidas quedan como campos nulos en la nueva tabla.

Sintaxis:

SELECT <campos> INTO (<campos>)

FROM <tabla1> AS <alias1> LEFT OUTER JOIN <tabla2> AS <alias2> ON <alias1>~<campo1> = <alias2>~<campo1> WHERE <condiciones>. ENDSELECT.

Ejemplo:

DATA: CUSTOMER TYPE SCUSTOM, BOOKING TYPE SBOOK.

Xioma Consulting ! ABAP WORKSHOP" 116

Page 117: ABAP Basico

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

WRITE: / CUSTOMER-NAME, CUSTOMER-POSTCODE, CUSTOMER-CITY, BOOKING-FLDATE, BOOKING-CARRID, BOOKING-CONNID, BOOKING-BOOKID.

ENDSELECT.

SQL Dinámico

El SQL dinámico consiste en la capacidad de armar sentencias SQL en tiempo de ejecución. Esto se logra a través de crear los strings con los parámetros correspondientes para el SELECT, FROM, WHERE.

Ejemplos:

DATA: TABLA(20) VALUE ‘MARA’.

SELECT * FROM (TABLA).

DATA: STR_WHERE TYPE TABLE OF EDPLINE.

APPEND ‘MTART = ‘’001’’ AND‘ TO STR_WHERE. APPEND ‘MTART = ‘’005’’ ‘ TO STR_WHERE.

SELECT * FROM (TABLA) WHERE (STR_WHERE).

Xioma Consulting ! ABAP WORKSHOP" 117

Page 118: ABAP Basico

DEPURACI"NEl 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. Con esta herramienta se visualiza el contenido de las variables y se sigue la ejecución de la lógica del programa.

Si se desea debuggear una transacción desde el inicio, 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. El contenido de los tres campos más importantes del sistema se visualiza siempre.

Tablas: Visualiza el contenido de una tabla interna. Esta opción permite visualizar y corregir las entradas en una tabla interna.

Breakpoints: Se pueden utilizar hasta 30 breakpoints. Al lado de cada uno existe un contador. Se puede también agregar o suprimir breakpoints en esta opción.

Watchpoints: Se puede fijar un watchpoint para un campo e interrumpir el programa siempre que el valor de ese campo cambie. Este modo de visualización contiene una lista de watchpoints, los campos y los programas a los cuales se asignan, los valores actuales de los campos, y las condiciones sobre las cuales se activa el mismo.

Llamadas: Esta opción visualiza el evento actual y las llamadas hasta el breakpoint actual. La última llamada activa es desplegada al principio de la lista; las llamadas anteriores se enumeran en orden cronológico inverso. Cuando un evento (por ejemplo, START-OF-SELECTION) concluye, se elimina de la visualización.

Resumen: Visualiza la estructura del programa. Enumera sus eventos, subrutinas, y módulos, y muestra cuales secciones pertenecen a cuales eventos. También visualiza la sección que es procesada actualmente.

Opciones: Visualiza las configuraciones actuales del debugger. Se pueden cambiar las configuraciones seleccionándolas.

Xioma Consulting ! ABAP WORKSHOP" 126

Page 119: ABAP Basico

Recorriendo el código fuente

Single Step: Utilice esta opción para ejecutar el programa línea por línea.

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.

Return: El Debugger vuelve al programa anterior después de ingresar a una subrutina o función.

Continue: Se utiliza para procesar el programa hasta el siguiente breakpoint. Si no hay mas breakpoints en el programa, el sistema da salida al modo de debugging y ejecuta el resto del programa normalmente.

Visualización y modificación de campos

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

Visualiza el contenido del campo en formato hexadecimal.

Visualiza el contenido del campo en su formato original de la salida.

Borra todos los nombres de los campos.

Modifica el contenido de los campos.

Xioma Consulting ! ABAP WORKSHOP" 127

Page 120: ABAP Basico

Procesar tablas internas

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

Header Line: Si la tabla interna tiene una línea de la cabecera, es indicado por este icono. Si se le da doble click al icono, el sistema abre la visualización estructurada del campo.

Breakpoints

Existen varias formas de establecer breakpoints:

1) Con la sentencia break-point:

IF SY-SUBRC NE 0.

BREAK-POINT.

ENDIF.

Xioma Consulting ! ABAP WORKSHOP" 128

Page 121: ABAP Basico

También se pueden enumerar (BREAK-POINT 1, BREAK-POINT 2) para que sean más fáciles de identificar

2) Breakpoint para usuario específico:

IF SY-SUBRC NE 0.

BREAK <nombre_usuario>.

endif.

3) En tiempo de ejecución se puede colocar a la izquierda de la línea haciendo click en el

botón .

También se pueden establecer breakpoints al momento que se esta debuggeando el

programa como por ejemplo breakpoints en sentencias, subrutinas, llamadas a funciones,

métodos y en excepciones del sistema.

WatchpointsSi se desea interrumpir un programa cuando el contenido de un campo o de una

estructura cambia, se puede utilizar un watchpoint. Es posible fijar hasta cinco watchpoints,

incluyendo los watchpoints para los strings.

Para crearlos se hace de la siguiente forma

Click en y seguido indicamos el nombre del campo

Xioma Consulting ! ABAP WORKSHOP" 129

Page 122: ABAP Basico

Análisis Dump

Un análisis Dump es una lista que permite identificar las causas y posibles

soluciones a errores en un programa. El Workbench de ABAP genera un dump siempre que

un reporte o 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, y lo

almacena en una tabla llamada SNAP.

La manera de accesarla es:

• A través del código de transacción ST22.

• Desde el Árbol de navegación del menú SAP->Herramientas->Workbench

ABAP->Test->Análisis Dump.

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. Se pueden usar para identificar

rápidamente donde y por qué ocurrió el error.

Parte de la información que contiene el Snapshot:

• Por qué termino el programa.

• Qué causó la terminación del programa.

• En que parte del código fuente ocurrió la finalización del programa.

• Qué se puede hacer para corregir el error.

• Valores de campos cuando el programa terminó.

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

• Otros programas que fueron afectados.

Xioma Consulting ! ABAP WORKSHOP" 139

Page 123: ABAP Basico

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.

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

Xioma Consulting ! ABAP WORKSHOP" 140

Page 124: ABAP Basico

Para ver la información detallada del error se selecciona la línea que se desea revisar

y se presiona doble clic, o se selecciona el botón buscar .

Aquí aparecerá la explicación de los motivos del error, 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

Page 125: ABAP Basico

CREACI"N DE FUNCIONES *SE37 +

Las funciones son similares a los procedimientos, pero como ya se mencionó anteriormente se comportan como una “caja negra”. Su definición es global en el sistema, por lo cual no es necesario definirlas en el programa. Las funciones en ABAP se manipulan por medio de la transacción SE37. Existen ya una cantidad considerable de funciones estándar definidas en el sistema y que están disponibles para el desarrollador.

A continuación se explicarán los pasos necesarios para crear una función. Primero se deberá crear un grupo de funciones y luego se creará la función.

Creación de un grupo de funciones

Los grupos de funciones contienen módulos de funciones. Estos grupos y módulos se administran en la biblioteca de funciones, que se invoca por medio de la transacción SE37.

Para crear un grupo de funciones se utiliza el menú principal con la opción Pasar a –> Gestión gr. funciones –> Crear grupo

Xioma Consulting ! ABAP WORKSHOP" 142

Page 126: ABAP Basico

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

Al hacer click en Grabar el sistema solicitará la creación de una orden de transporte.Una vez creado satisfactoriamente el grupo de funciones, Deben activarse el programa decontrol y sus respectivos includes.

Creación de una función

Para crear una función se utiliza la transacción SE37. Se introduce el nombre de la función y se da click en Crear.

Xioma Consulting ! ABAP WORKSHOP" 143

Page 127: ABAP Basico

Luego se coloca el Grupo de Funciones dentro del cual estará la función y una descripción breve. Se indicará el grupo de funciones ZGRUPO_PRUEBA creado en el paso anterior.

Una vez colocados los datos se da click en Grabar.

El sistema mostrará el Function Builder. Aquí se tienen cuatro tipos de parámetros que pueden ser creados: IMPORTING, EXPORTING, 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

Page 128: ABAP Basico

- Importing

Estos son los parámetros de entrada de la función. Cuando la función es invocada, 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.

- Exporting

Estos son los parámetros de salida de la función. Cuando se invoca la función, un parámetro actual puede ser especificado para cada parámetro exporting. El contenido del parámetro exporting es transferido al parámetro actual si la ejecución de la función finaliza sin errores.

Xioma Consulting ! ABAP WORKSHOP" 145

Page 129: ABAP Basico

- Changing

Estos son parámetros tanto de entrada como de salida. Cuando la función es invocada, un parámetro actual válido debe ser especificado para cada parámetro changing

que no sea opcional. 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, pero solo pueden ser usados para transferir tablas estándar con header line. En este ejemplo no utilizaremos este tipo de parámetro.

Xioma Consulting ! ABAP WORKSHOP" 146

Page 130: ABAP Basico

- Exceptions

Se utilizan para capturar un tipo de error específico durante el tiempo de ejecución, de tal manera que se produzca un dump (error fatal) que cancele bruscamente la ejecución de la función.

EXCEPTIONS lista las excepciones que se manejan cuando el programa realiza la llamada. Al final de la lista de excepciones, se puede usar OTHERS para referirse al resto de las excepciones.

Si una de las excepciones listadas ocurre, SY-SUBRC toma el valor definido en la sección Exceptions y el control es devuelto al programa principal.

Xioma Consulting ! ABAP WORKSHOP" 147

Page 131: ABAP Basico

Hay dos maneras de manejarlo:! RAISE <excepción>.! MESSAGE ... RAISING <excepción>.

RAISE <excepción>

La instrucción “RAISE excepción” lo que hace es detener la ejecución de la función, y asignar al SY-SUBRC el valor correspondiente a lo asignado en la sección de EXCEPTIONS del CALL FUNCTION.

Ejemplo: CALL FUNCTION ... EXCEPTIONS div_cero = 5. “código del programa principal

IF SY-SUBRC = 5. MESSAGE ‘Division por Cero’. “código del programa principal ENDIF.

“código en el módulo de funciones

FUNCTION division IMPORT n1 n2 EXPORT result EXCEPTION div_zero. IF n2 = 0. RAISE div_zero. “ elevar excepción ELSE.

Xioma Consulting ! ABAP WORKSHOP" 148

Page 132: ABAP Basico

result = n1 / n2. ENDIF.

ENDFUNCTION.

MESSAGE ... 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. 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 , SY-MSGTY , SY-

MSGNR y SY-MSGV1-4.

Ejemplo:CALL FUNCTION division EXCEPTIONS div_zero = 5. “código programa principal

IF SY-SUBRC = 5. “código del programa principal MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3.ENDIF.

“código en el módulo de funcionesFUNCTION division IMPORT n1 n2 EXPORT result EXCEPTION div_zero.IF n2 = 0. MESSAGE ID ‘XXX’ TYPE ‘E’ NUMBER ‘001’ WITH ‘Error en proceso’ n2 ‘no es un divisor válido’ RAISING div_zero. “elevar excepción asignando valores de retorno “Alternativamente puede usar la siguiente estructura: “ MESSAGE E001(ZMM) RAISING EXCEP1. “ mensaje 001 de tipo error (E) de la clase ZMM

ELSE. result = n1 / n2.ENDIF.

ENDFUNCTION.

- Código Fuente

Aquí se escribe el código de la función.

Xioma Consulting ! ABAP WORKSHOP" 149

Page 133: ABAP Basico

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

Xioma Consulting ! ABAP WORKSHOP" 150