100% encontró este documento útil (2 votos)
1K vistas218 páginas

ABAP Completo

El documento proporciona una introducción al lenguaje de programación ABAP desarrollado por SAP. Explica que ABAP se originó en los años 80 y actualmente es el componente central del sistema SAP. Describe la arquitectura de tres capas de SAP, incluidas las capas de presentación, aplicación y base de datos. También resume las funciones del Transport Organizer para administrar órdenes de transporte entre sistemas SAP y explica los componentes clave de un programa ABAP, como el código fuente, pantallas, interfaz y documentación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (2 votos)
1K vistas218 páginas

ABAP Completo

El documento proporciona una introducción al lenguaje de programación ABAP desarrollado por SAP. Explica que ABAP se originó en los años 80 y actualmente es el componente central del sistema SAP. Describe la arquitectura de tres capas de SAP, incluidas las capas de presentación, aplicación y base de datos. También resume las funciones del Transport Organizer para administrar órdenes de transporte entre sistemas SAP y explica los componentes clave de un programa ABAP, como el código fuente, pantallas, interfaz y documentación.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

AB AP WORK S HOP

Version 1.0

Xioma Consulting Centroamérica


2007

Xioma Consulting - ABAP WORKSHOP


1
I N TROD U CCI ÓN

ABAP (Advanced Business Application Programming), o ABAP/4 es un lenguaje de


programación desarrollado por la empresa alemana SAP (Systeme, Anwendungen, Produkte in der
Datenverarbeitung)1.
Los alcances del lenguaje ABAP se han ampliado según se ha ido desarrollando el escenario
de desarrollo de software. Han sido actualizaciones periódicas, como la adición de instrucciones
orientadas a objetos dentro del lenguaje y herramientas más poderosas para el desarrollo de
formularios.
ABAP fue desarrollado en la década de los 80 a partir de una investigación que produjo toda
una serie de lenguajes de cuarta generación de aplicación específica y cuyo objetivo apuntaba a la
producción de alto nivel de reportes. Fue incluido al producto SAP R/2. El objetivo de éste
producto era brindar una aplicación de negocios en mainframe para grandes corporaciones para la
administración de materiales, finanzas y contabilidad.
Originalmente se suponía que los usuarios del lenguaje de programación serian usuarios,
que pudieran manipular la información por sí mismos, pero el lenguaje resultó ser demasiado
complejo para usuarios ordinarios, haciendo necesario que fueran programadores quienes lo
manipularan debido a que se requería de una alta destreza. Según fueron disminuyendo las
consideraciones de desempeño, el lenguaje empezó a convertirse en un componente central del
sistema SAP.
En los 90, SAP empezó a convertir todo el código clave del SAP R/3 a ABAP, de tal forma
que para el año 2003 el proyecto SAP se basaba ya en ABAP para las funciones más básicas.

1 Systems, Applications & Products in Data Processing

Xioma Consulting - ABAP WORKSHOP


2
ARQU I TE CTU RA D E S AP
El sistema R/3 posee una arquitectura de software modular que sigue los principios de la
arquitectura Cliente/Servidor. El modelo en 3 capas compuesto por una capa de presentación, una
de aplicación y una de base de datos; pueden estar alojadas en diferentes computadores sirviendo
esto como base para la escalabilidad del sistema.

Capa de presentación: Esta es la capa donde se ejecuta la interfase de usuario (SAPGUI)


para brindar el acceso a las aplicaciones por parte de los usuarios finales.

Capa de Aplicación: Es en esta capa donde se ejecuta ABAP, tanto las aplicaciones
desarrollas por SAP como las desarrolladas por los usuarios. Desde esta capa ABAP envía y
recibe datos a la capa de base de datos.

Capa de Base de datos: Este es el nivel más bajo en el modelo, y es donde se administra la
información con la ayuda del sistema de administración de base de datos relacional
(RDBMS). Este nivel almacena no solamente datos maestros y transaccionales, sino
también los programas y metadatos que describen el sistema R/3 son administrados y
almacenados acá.

Toda la distribución técnica del software es independiente de la ubicación física del


hardware, tanto vertical como horizontalmente.

Xioma Consulting - ABAP WORKSHOP


3
TRAN S P ORT ORG ANI Z E R
El 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
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
COMP OS I CI ON D E U N P ROG RAM A
AB AP
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
E D I TOR

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
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
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
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
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
La barra del editor contiene las siguientes herramientas:

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

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

3. Visualizar <-> Modificar


Cambia el estado del editor entre modo de visualización o modo de modificación.

4. Activo <-> Inactivo


Cambia el estado del programa entre activo e inactivo.

5. Otro Objeto
Ésta opción permite cambiar el objeto actual por otro que se desee editar. Se divide en varias
categorías de las cuales las más importantes son: diccionario de datos, bibliotecas de clases,
programa y grupo de funciones.

Xioma Consulting - ABAP WORKSHOP


12
6. Verificar
Ésta opción se encarga de revisar la sintaxis del programa.

7. Activar
La activación ejecuta una revisión sintáctica, almacena y posteriormente deja disponible al
programa para ser ejecutado en el ambiente del R/3.

8. Verificar (Ejecutar)
Ejecuta el programa.

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

10. Visualizar Lista de Objetos


Ejecuta el ABAP Development Workbench donde se muestran los objetos relacionados con
el programa.

11. Visualizar Ventana de Navegación


Muestra la ventana de navegación que consiste en una pila con los últimos objetos
revisados.

12. Imagen Completa


Muestra la venta del objeto en revisión maximizada.

13. Ayuda
Invoca la ayuda del sistema.

14. Fijar/Borrar Break Point


Si el programa se encuentra en modo activo, se fija un Break-point en la línea actual, que
será ejecutado solamente para el usuario que lo fijó.

15. Patrón
Inserta una plantilla a partir de la línea actual. Sobre todo en el caso de la invocación de
funciones o la invocación del método de un objeto, ésta función puede ser de gran utilidad para
conocer los parámetros que pueden ser utilizados.

Xioma Consulting - ABAP WORKSHOP


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

Creación de un nuevo programa

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

Xioma Consulting - ABAP WORKSHOP


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

2 Un dynpro se suele llamar una pantalla de SAP

Xioma Consulting - ABAP WORKSHOP


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

• Antes de lanzar o editar un programa

• Al actualizar los atributos

• Al utilizar otra utilidad del desarrollo de programas

Al ejecutar la 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
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 .

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

Xioma Consulting - ABAP WORKSHOP


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

Xioma Consulting - ABAP WORKSHOP


18
E V E NTOS
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>

INITIALIZATION
Este 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
WRITE ‘Hola Mundo!’.
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.

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-PAGE
Se 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).

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.

AT SELECTION-SCREEN
Este 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
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-SELECTION
El evento se ejecuta al oprimir la tecla F2 o al dar doble click sobre una línea
en la pantalla de salida del reporte. El 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.

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.

Sintaxis:
AT LINE-SELECTION.

Ejemplo:

AT LINE-SELECTION.

MESSAGE S333(S1) WITH SY-LISEL.

Xioma Consulting - ABAP WORKSHOP


21
AT USER-COMMAND
Este bloque se ejecutará cuando el sistema ejecute un 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:

CÓDIGO DE F U N- DESCRIPCIÓN
CIÓ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

Xioma Consulting - ABAP WORKSHOP


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

CÓDIGO DE F U N- DESCRIPCIÓN
CIÓN
%CTX Llamado a un menú contextual
%EX Salir
%PC Guardar Archivo
%PRI Imprimir
%SC Buscar
%SC+ Buscar siguiente
%SL Buscar en oficina
%ST Guardar en reporte de árbol

Xioma Consulting - ABAP WORKSHOP


23
D E F I N I CI ON D E DATOS
Tipos de Datos

Los tipos de datos indican el ámbito al que pertenece un objeto de datos. Estos
pueden ser nativos del sistema, o nuevos tipos de datos definidos por el usuario (ya sea
local en un programa o en el diccionario de datos de SAP).
En ABAP/4 existen los siguientes tipos de datos estándar:

TIPO D E S C R I P C I Ó N T A M A Ñ O VA L O R I N I C I A L
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

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

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

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.

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

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.

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

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

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

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.

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

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
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
SELECTION-SCREEN POSITION 20.
PARAMETERS: PARAM2(8).
SELECTION-SCREEN POSITION 30.
PARAMETERS: PARAM3(8).
SELECTION-SCREEN END OF LINE.

Subrayado

El subrayado puede ser generado en las pantallas de selección así como en


los reportes ABAP. Sin embargo difieren en su sintaxis.

Sintaxis:

SELECTION-SCREEN UNLINE <formato>

Ejemplos:

SELECTION-SCREEN BEGIN OF LINE.


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

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

SELECTION-SCREEN BEGIN OF LINE.

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

SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP


37
Comentarios

En el SELECTION-SCREEN también es posible generar comentarios.


Siempre que se utilice el comando COMMENT.

Sintaxis:

SELECTION-SCREEN COMMENT <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
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
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>.

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

Ejemplo:

TABLES: SSCRFIELDS.

SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON


USER-COMMAND UCOM.

SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP


40
SELECTION-SCREEN SKIP 9.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2


USER-COMMAND UCOW.

SELECTION-SCREEN END OF LINE.

INITIALIZATION.

MOVE ‘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
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
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
VARI AB LE S D E AMB I EN TE (S Y)
SY es una estructura que contiene las variables de ambiente que se modifican en tiempo de
ejecución por el sistema mientras se ejecuta un programa. No es necesario definir la estructura y
ésta estará disponible desde cualquier parte de un programa.

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

CÓDIGO DESCRIPCIÓ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

Xioma Consulting - ABAP WORKSHOP


44
Ejemplo:

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

Xioma Consulting - ABAP WORKSHOP


45
OP E RAD ORE S ARI TM É TI COS

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

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.

Xioma Consulting - ABAP WORKSHOP


47
I N S TRU CCI ONE S D E D E CI S I ÓN
Las instrucciones de decisión evalúan una expresión y en base al valor de verdad que tenga
dicha expresión se ejecuta el código que corresponda.

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.

AND OR
VALOR VALOR R E S U L- V A L O R V A L O R R E S U L-
1 2 TADO 1 2 TADO

Verdadero Verdadero Verdadero Verdadero Verdadero Verdadero


Verdadero Falso Falso Verdadero Falso Verdadero
Falso Verdadero Falso Falso Verdadero Verdadero
Falso Falso Falso Falso Falso Falso

NOT
VALOR R E S U LTA D O
Verdadero Falso
Falso Verdadero

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

OPERADOR DESCRIPCIÓ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

Es recomendable la utilización de los mnemónicos dado que puede


resultar menos confusa durante la interpretación del código.

Xioma Consulting - ABAP WORKSHOP


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

OPERADOR DESCRIPCIÓ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
OPERADOR DESCRIPCIÓ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
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 = 3
ENDIF.
str1 = 'BD '.
str2 = 'ABCDE'.

IF str1 CO str2.

Xioma Consulting - ABAP WORKSHOP


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

**Ejemplo de CN - Contains not only


DATA: str1 TYPE string,
str2 TYPE string.

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

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

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

**Ejemplo de CA - Contains Any

DATA: str1 TYPE string,


str2 TYPE string.

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

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

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

**Ejemplo de Contains Not Any


DATA: str1 TYPE string,
str2 TYPE string.

str1 = 'ABAB '.


str2 = 'AB '.

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

IF str1 NA str2.

Xioma Consulting - ABAP WORKSHOP


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

**Ejemplo de CS - Contains String


DATA: str1 TYPE string,
str2 TYPE string.

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

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

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

**Ejemplo de NS - Constains no String


DATA: str1 TYPE string,
str2 TYPE string.

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

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

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

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

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

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

Xioma Consulting - ABAP WORKSHOP


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

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

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

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

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

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

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

ELSE (ELSEIF)

Las sentencias que se coloquen 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
<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.

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

CHECK
Verifica 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
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
I N S TRU CCI ONE S D E I TE RACI Ó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
EXIT
Permite 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
D E S P LI E G U E E N PANTALLA
Existen dos maneras de enviar la información en SAP hacia la pantalla y/o impresora. La más
elaborada es la elaboración de formularios (vía Smartforms o SAPScript) y la otra por medio de
reportes que se construyen utilizando únicamente instrucciones de ABAP. Las más utilizadas para
generar estos reportes se describen a continuación.

WRITE
Despliega un valor en la pantalla o en su defecto puede utilizarse para trasladar un
valor entre variables (incluso de diferente tipo).

Sintaxis:

WRITE <posición> <(tamaño)> <variable/constante> [UNDER <objeto>]


WRITE <variable/constante> TO <variable2>
[CENTERED | LEFT-JUSTIFIED | RIGHT-JUSTIFIED].

Ejemplos:

Write ‘Hola Mundo!’.

WRITE: /(60) 'Izquierda' LEFT-JUSTIFIED,


/(60) 'Centro' CENTERED,
/(60) 'Derecha' RIGHT-JUSTIFIED.

DATA: MATNR TYPE mara-matnr,


MEINS TYPE mara-meins.

WRITE: 10 'Material', 40 'UM'.


ULINE.

SELECT MATNR MEINS


FROM MARA
INTO (matnr,meins).
WRITE: / matnr UNDER 'Material',
meins UNDER 'UM'.
ENDSELECT.

FORMAT
Se utiliza para modificar el formato de salida de los textos en el reporte controlando
el color del fondo del texto y la intensidad del mismo.

Sintaxis:
FORMAT <adición> <ON/OFF>.

Xioma Consulting - ABAP WORKSHOP


60
Las adiciones más comunes son:

1. COLOR: Específica el color de fondo para un texto


2. INTENSIFIED: Cambia la intensidad del color
3. RESET: Restaura los valores iniciales

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

ULINE
Esta sentencia imprime una línea continua por todo el ancho de la salida del reporte.

Sintaxis:
ULINE.

Si se desea imprimir una línea continua pero de un tamaño determinado, se puede


utilizar la variable del sistema SY-ULINE. Esta variable contiene una línea continua de 255
caracteres en tiempo de ejecución.

Ejemplo:

WRITE: / SY-ULINE(80).

SKIP

Permite saltar n líneas en una salida de reporte. Si no se indica la cantidad de líneas,


solo saltará una línea.

Sintaxis:
SKIP [N].

Ejemplo:
SKIP 5.

Xioma Consulting - ABAP WORKSHOP


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

Ejemplo:

DATA: Nombre TYPE STRING, “String de longitud indefinida


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

Substrings
Para manipular el contenido de un string se utiliza el símbolo ‘+’ para indicar el
desplazamiento en el string (de izquierda a derecha) y entre paréntesis el tamaño del
substring.

Ejemplo:

DATA: descripción(40) value ‘Mazanas, Peras y Uvas’,


Fruta(7).

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

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

Concatenate
Permite concatenar cadenas de caracteres de distintas variables o textos.

Sintaxis:
CONCATENATE f1 f2 f3 f4 … fn INTO target.

Xioma Consulting - ABAP WORKSHOP


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

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.

Xioma Consulting - ABAP WORKSHOP


63
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
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
OTRAS I N S TRU CCI ON ES
CLEAR
Permite inicializar una variable con los valores iniciales.

Sintaxis:

CLEAR <variable>.

MOVE
Mueve el contenido de una variable a otra, sin modificar el contenido de la variable
original. No necesariamente la variable de destino es del mismo tipo que la variable de
origen.

Sintaxis:

MOVE <v_origen> TO <v_destino>.

Ejemplo:

DATA: A(2) value 'A1',


B(2),
C(1).

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

Esto es equivalente a:

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

MESSAGE
Enví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
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
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
P ROCE D I M I E NTOS, F U NCI ONE S 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:

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

Xioma Consulting - ABAP WORKSHOP


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

FORM suma USING num1


num2
CHANGING resultado.

resultado = num1 + num2.

ENDFORM. "suma
Al utilizar el 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
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
DEFINE
Se utiliza DEFINE para definir un macro.

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

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

...

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

START-OF-SELECTION.

SUMA A B C.

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

Xioma Consulting - ABAP WORKSHOP


72
I N CLU D E S
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.

Aunque es posible llamar a un include dentro de otro include, es importante recordar


que no se pueden hacer includes recursivos, esto es que no es posible que un include
se invoque asi mismo.

Para crear un programa tipo include se puede utilizar la 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
E S TRU CTU RAS D E DATOS
Las 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
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
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
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
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>.

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.

Append
Agrega un registro a una tabla interna con los valores que se encuentren en la
cabecera o en un registro que corresponda con la estructura de la tabla.

Sintaxis:

APPEND [<registro> TO] <itab>.

Ejemplo:
APPEND C_Miembro TO Personas.

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

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

Sintaxis:

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

Xioma Consulting - ABAP WORKSHOP


78
Ejemplos:

1. Registro actual de una tabla con cabecera:


DELETE Camisa.

2. Registro de una tabla sin cabecera


DELETE TABLE Miembro FROM Miembro.

3. Utilizando una 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
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).

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


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

Xioma Consulting - ABAP WORKSHOP


80
LOOP
Esta 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
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:

CAMPO DESCRIPCIÓ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)
Xioma Consulting - ABAP WORKSHOP
82
Cuando se utiliza el campo SIGN diferente de BT (entre), el valor que se almacena
en HIGH es ignorado, y la 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.

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.

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
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
Creación de una Tabla Z
La creación se realiza utilizando la transacción SE11 y seleccionando la
opción Tabla base de datos. 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
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.

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.

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

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
A TRAVÉS DE UNA TABLA INTERNA

Sintaxis:

DELETE tabla_dicc FROM TABLE tabla-int.

UPDATE

Actualiza una tabla del diccionario.

UN SOLO REGISTRO
Para 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
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
Dominios
El dominio es una agrupación de propiedades formales de campos, tales como tipo de datos
y cantidad de posiciones del campo. Define principalmente el ámbito de valores para todos los
campos que hacen referencia al dominio, 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
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
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
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
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
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
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
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
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
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
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
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
TRAN S F E RENCI A D E DATOS
Normalmente en SAP las transferencias de datos están relacionadas con la necesidad de
establecer una interfase con algún sistema externo. 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
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.

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

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

Sintaxis:

DELETE DATASET <dataset>.

Transferencia Remota
En el caso de la transferencia remota, se asume que la 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
• FILENAME: Debe ser de tipo string y determina el nombre del dataset.
• FILETYPE: Determina el tipo de archivo.
• WRITE_FIELD_SEPARATOR: Permite indicar si es un archivo tipo PRN 8.
• DATA_TAB: Indica cual es la tabla interna.

Ejemplo:

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
FILENAME = 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.

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

Xioma Consulting - ABAP WORKSHOP


106
• DATA_TAB: Indica cual es la tabla interna.

Ejemplo:

CALL FUNCTION 'GUI_UPLOAD'

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

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

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
OP E N S QL
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

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.

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
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
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
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
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
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
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
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
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
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
AB AP LI S T V I E WE R (ALV )
Mediante el ALV Grid es posible implementar la funcionalidad de un listado y muchas
opciones más dentro de un dynpro.

Uso de la función REUSE_ALV_GRID_DISPLAY

Esta función permite mostrar el contenido de una tabla en formato ALV Grid. Es
importante conocer algunos de sus parámetros más importantes a la hora ajustar la
visualización del ALV según lo que se necesite.

IT_FIELDCAT: (Catálogo del campo con sus descripciones)

Campos más comunes:

• ROW_POS: número de fila


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

IT_LAYOUT: (Especificación del formato de la lista)

Campos más comunes:

• COLWIDTH_OPTIMIZE: optimización del ancho de la columna


• ZEBRA: filas en formato de zebra
• F2CODE: código para ejecutar código con “F2”
• EDIT: para editar

Xioma Consulting - ABAP WORKSHOP


118
• KEY: columna marcada como llave
• NO_VLINE: columnas separadas por espacio
• NO_HLINE: filas separadas por espacio

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

Campos más comunes:

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


• FORM: nombre de la subrutina q se desea invocar

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

Campos más comunes:


• FIELDNAME: campo q se desea ordenar
• TABNAME: nombre de la tabla interna
• UP: indicador de orden ascendente
• DOWN: indicador de orden descendente
• SUBTOT: para mostrar subtotales

I_CALLBACK_USER_COMMAND: nombre de la subrutina q se ejecutara al momento


de que se realice alguna acción sobre algún campo.

Xioma Consulting - ABAP WORKSHOP


119
Como subir una imagen

Primero ingresar a la transacción OAOR

Se coloca la información necesaria y se ejecuta. Por medio de la clave del objeto


(LOGO XIOMA) se invoca la imagen.

En la pestaña Crear se le da click en Imagen, aparece un explorador y se selecciona


la imagen.

Xioma Consulting - ABAP WORKSHOP


120
Muestra la información

Muestra el siguiente mensaje si se subió con éxito.

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

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

Xioma Consulting - ABAP WORKSHOP


121
Creación de un ALV simple

Se debe incluir el type pool SLIS.

Type-pools: slis.

***** Declaraciones globales *****

tables: rseg.

data: begin of tab_arseg occurs 0.

include structure rseg.

data: end of tab_arseg.

data: gt_fieldcat type slis_t_fieldcat_alv, “ catalogo de campos


gd_layout type slis_layout_alv, “ formato de salida
gt_header type slis_t_listheader, “ encabezado
gt_footer type slis_t_listheader, “ pie de pagina
t_event type slis_t_event, “ tabla con los eventos
it_sort type slis_sortinfo_alv occurs 1,” criterio de
“ordenamiento
gt_sort like line of it_sort.

***** Declaracion de subrutinas *****

form fieldcat.

data: fieldcat type slis_fieldcat_alv.

clear fieldcat.
fieldcat-fieldname = 'BELNR'.
fieldcat-tabname = 'TAB_ARSEG'.
fieldcat-ref_tabname = 'RSEG'.
fieldcat-ref_fieldname = 'BELNR'.
fieldcat-hotspot = ‘X’.
fieldcat-col_pos = 1.
fieldcat-key = ‘X’.

append fieldcat to gt_fieldcat.

Xioma Consulting - ABAP WORKSHOP


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

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

clear fieldcat.
fieldcat-fieldname = 'MENGE'.
fieldcat-tabname = 'TAB_ARSEG'.
fieldcat-ref_tabname = 'RSEG'.
fieldcat-ref_fieldname = 'MENGE'.
fieldcat-col_pos = 4.
fieldcat-do_sum = ‘X’.
append fieldcat to gt_fieldcat.

end form.

form layout.

*** gd_layout-colwitdh_optimize = ‘X’.


gd_layout-zebra = ‘X’.

end form.

form header_and_footer.

data: x_heading type slis_listheader,


x_footer type slis_listheader,
x_event type line of slis_t_event.

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

Xioma Consulting - ABAP WORKSHOP


123
clear gt_footer[].
clear x_footer.
x_footer-typ = 'S'.
x_footer-KEY = 'Footer: '.
x_footer-info = 'Ejemplo Pie de Pagina'.
append x_footer to gt_footer.

*** Top of page event ***

x_event-name = slis_ev_top_of_page.
x_event-form = 'TOP_OF_PAGE'.
append x_event to t_event.

*** End of list event


x_event-name = slis_ev_end_of_list.
x_event-form = 'END_OF_LIST'.
append x_event to t_event.

endform.

form sort_alv.

clear gt_sort.
gt_sort-fieldname = 'gjahr'.
gt_sort-subtot = ‘X’.
gt_sort-comp = ‘X’.
gt_sort-up = ‘X’.
append gt_sort to it_sort.

endform.

form TOP_OF_PAGE.

call function 'reuse_alv_commentary_write'


exporting
i_logo = 'logo xioma' "subir logo en transaccion oaor
it_list_commentary = gt_header.

endform.

form END_OF_LIST.

call function 'reuse_alv_commentary_write'


exporting
it_list_commentary = gt_footer
i_end_of_list_grid = ‘X’. “ indicador para pie de pagina
endform.

***** Código *****

START-OF-SELECTION.

select * up to 10 rows from rseg into table tab_arseg.

Xioma Consulting - ABAP WORKSHOP


124
perform fieldcat.
perform layout.
perform header_and_footer.
perform sort_alv.

call function 'reuse_alv_grid_display'


exporting
i_buffer_active = space
i_callback_program = sy-repid
* i_callback_user_command =
* i_structure_name =
it_sort = it_sort
is_layout = gd_layout
it_events = t_event
it_fieldcat = gt_fieldcat[]
tables
t_outtab = TAB_ARSEG
exceptions
program_error = 1
others = 2.

El resultado final después de la ejecución sería el siguiente:

Xioma Consulting - ABAP WORKSHOP


125
D E P U RACI ÓN
El Debugger es una herramienta de programación que se puede utilizar para ejecutar
programas ABAP por línea o por sección con el propósito de depurar el código. 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
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
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
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.

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

Para crearlos se hace de la siguiente forma

Click en y seguido indicamos el nombre del campo

Xioma Consulting - ABAP WORKSHOP


129
Además se puede modificar el contenido y borrar los watchpoints mediante los

botones y respectivamente que aparecen al lado de cada uno.

Performance Analysis (SQL Trace)

SQL Trace permite registrar los accesos a la base de datos, bloqueo de actividades, y
llamadas remotas de reportes y transacciones en un archivo para desplegar el log de
funcionamiento como una lista. Esto también proporciona el apoyo para analizar registros de
rastreo individuales. SQL Trace además ofrece grandes facilidades analizando registros de
rastreo individuales de una manera detallada.
La manera de accesarla es:
• A través del código de transacción ST05.
• Desde el Árbol de navegación del menú SAP->Herramientas->Workbench
ABAP->Test->Trace SQL

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

Xioma Consulting - ABAP WORKSHOP


130
la cantidad de datos desplegados en pantalla poniendo un filtro de despliegue. Los datos se
pueden mostrar como una lista básica o en una lista ampliada.

Performance Analysis contiene las siguientes opciones de rastreo:


• SQL Trace
• Enqueue Trace
• RFC Trace
• Buffer Trace

SQL Trace
SQL Trace le permite ver como el código OPEN SQL que se usa en programas
ABAP es convertido a declaraciones de SQL estándar y los parámetros con los cuales las
declaraciones integradas SQL son pasadas al sistema de base de datos.

Del SQL Trace generado se puede determinar:


• Cuales instrucciones SQL utiliza la aplicación
• Que valores usa el sistema para determinados accesos y cambios a la base de
datos.
• Como traduce el sistema comandos OPEN SQL de ABAP en comandos SQL
estándar.
• En que punto ejecuta COMMIT la aplicación.
• Donde la aplicación hace accesos de base de datos repetidos.

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

Xioma Consulting - ABAP WORKSHOP


131
El registro contiene la siguiente información:
• Instrucciones de bloqueo ejecutadas.
• Nombre de tablas del evento de bloqueo.
• Nombre del programa que coloca el bloqueo.
• Tipo de bloqueo.
• Dueño del bloqueo.
• Tiempo total utilizado por el bloqueo.
• Tiempo requerido por el servidor de bloqueos para liberar el bloqueo.

RFC Trace
Se puede rastrear cuales llamadas remotas han sido ejecutadas desde la aplicación o
el Sistema SAP, y en cuales instancias han sido ejecutadas esas llamadas. Se puede mostrar
y analizar los registros de rastreo en el archivo de rastreo.
Del archivo de rastreo se puede deducir lo siguiente:
• Qué módulos de función han sido llamados remotamente por el programa a
ser analizado.
• Si el RFC fue ejecutado satisfactoriamente.
• El tiempo total utilizado en procesar la llamada remota.
• El tipo de comunicación RFC (RFC cliente o RFC servidor).
• En qué instancia fue ejecutada la llamada remota.
• Qué parámetros técnicos componen la instancia.
• El número de bytes enviados y recibidos por el RFC.

Buffer trace
Utilizando la opción buffer trace se puede monitorear los accesos realizados al buffer
de tablas. Por defecto, los registros son agrupados por secuencia de instrucciones en una
línea.
Cuando la opción buffer trace esta activo, el sistema almacena los accesos del buffer
de un usuario o un grupo de usuarios.
Buffer trace indica:
• Qué instrucciones ejecutan accesos al buffer.

Xioma Consulting - ABAP WORKSHOP


132
• Cuales operaciones de buffer son realizadas.
• Cómo es administrado el buffer.

Utilizando Performance analysis


Se ejecuta la transacción ST05 (Performance Analysis)
En esta aplicación se seleccionan los indicadores de las opciones de rastreo que se quieren
ejecutar.

Posteriormente se selecciona la opción del menú Trace->Trace on.

En un nuevo modo se ejecuta la transacción a la que se le desea habilitar la funcionalidad


BADI, se realizan los pasos que se requieren de la aplicación.
Luego se regresa a la transacción ST05, y se selecciona la opción del menú Trace->Trace
off.

Xioma Consulting - ABAP WORKSHOP


133
Posteriormente se selecciona la opción del menú Trace->Display Trace.

Al hacer esto aparecerá la ventana “Set Restrictions for Displaying Trace”

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

Xioma Consulting - ABAP WORKSHOP


134
Se presiona el botón “Display Trace List” .
Aparecerá una lista con llamados a la Base de Datos

Aquí es donde se puede dar el seguimiento de las operaciones obtenidas por el rastreo.
Si se da doble clic a las operaciones entonces se obtendrá información más detallada de la
instrucción seleccionada.

Xioma Consulting - ABAP WORKSHOP


135
Log de Sistema

Se utiliza para señalar y corregir errores que ocurren en el sistema.


La manera de accesarla es:
• A través del código de transacción SM21.
• Desde el Árbol de navegación del Menú SAP->Herramientas->Workbench
ABAP->Test->Log de sistema.

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

Seleccionando tipo de log


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

Xioma Consulting - ABAP WORKSHOP


136
Log de sistema remoto: Log de otro servidor de aplicaciones. Para especificar un
determinado sistema remoto se usa la opción nombre de instancia.
Todos los log de sistema remotos: El log del sistema en el cual actualmente se esta
loggueado, junto con todos aquellos otros servidores de aplicación en el mismo sistema.
Log de sistema central: Si se quiere usar esta opción, se debe haber configurado a
todos los servidores de aplicación tal que ellos envíen los mensajes del log local al log
central. La información en el log del sistema central puede diferenciarse de los datos en los
logs individuales locales.

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

Leyendo un Reporte log


Para desplegar el log del sistema actual se seleccionan los criterios de filtrado a
aplicar al log, y se presiona el botón “Nueva lectura log de sistema”, el sistema despliega
una tabla con las entradas del log de sistema que corresponden al criterio seleccionado.
Se puede agrupar el resultado del reporte con la opción del menú Log de sistema-
>Clasificar, existen diversos criterios de clasificación.

Xioma Consulting - ABAP WORKSHOP


137
Se puede desplegar información detallada de una entrada especifica seleccionando la
entrada y seleccionando la opción del menú Tratar->Detalles.

Xioma Consulting - ABAP WORKSHOP


138
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
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
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
CRE ACI ÓN D E F U N CI ONE S (S E 37 )
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
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 de
control 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
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
- 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
- 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
- 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
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
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 funciones


FUNCTION division IMPORT n1 n2
EXPORT result EXCEPTION div_zero.
IF n2 = 0.
MESSAGE ID ‘XXX’ TYPE ‘E’ NUMBER ‘001’
WITH ‘Error en proceso’ n2 ‘no es un divisor 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
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
B U S I N E S S AP P LI CATI ON P ROG RAM-
MI N G I N TERFACE (B AP I )
Una BAPI (Business Application Programming Interface) es una función de SAP que
permite llevar a cabo una tarea funcional. Por ejemplo, una BAPI puede decir la disponibilidad de
un material, crear un pedido o incluso un documento financiero.
Existen una gran cantidad de BAPIs disponibles para que sean utilizados por los
desarrolladores, de ahí su nombre que viene del viejo concepto de API (Application Programming
Interface). Su aparición en SAP R/3 fue a partir de la versión 3.1 y se hizo para permitir la
integración de software entre SAP R/3 y otros fabricantes de software. El número total de BAPIs se
ha ido incrementando con la liberación de nuevas versiones de SAP R/3.
Los objetos contenidos en el repositorio encapsulan los datos y procesos. De esta forma el
acceso a los datos y procesos, por agentes externos, es permitido solo mediante métodos específi-
cos; representados estos por su BAPI correspondiente. De esto último se desprende que una BAPI
no es más que un método de un Objeto de Negocio de SAP R/3. Por ejemplo, la funcionalidad im-
plementada para el objeto tipo "Customer" incluye una verificación para la existencia del cliente.
De esta forma el tipo de objeto "Customer" posee una BAPI llamada "Customer.CheckExistence".

Para que un programa de aplicación sea capaz de usar la BAPI de un método, solo necesita
saber como invocar el método; es necesario conocer la definición de la interfase del método. La
interfase de una BAPI se define por:

.- Parámetros de Entrada( Import Parameters )


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

Xioma Consulting - ABAP WORKSHOP


151
Para conocer los parámetros que utiliza una BAPI específica se puede hacer de las siguien-
tes maneras:
1. Ingresando a la transacción BAPI.

A. Árbol de Navegación Organizado ya sea de manera jerárquica o alfabéticamente, aquí se


busca el nombre de la BAPI requerida según sea su categoría o su nombre, es importante
recordar que por lo general todas las BAPIs comienzan con esta palabra en sus nombres
como por ejemplo: BAPI_GOODSMVT_CREATE, la cual es utilizada para el movi-
miento de mercancías.
B. Pestaña de opciones y propiedades de una BAPI, aquí se ve información relacionada con
una BAPI especifica como es su descripción, modulo de funciones a la que pertenece y
documentación entre otras.
C. En el Campo Módulo de Funciones al dar doble-click aparece la pantalla donde se en-
cuentra el código fuente de la BAPI.

Xioma Consulting - ABAP WORKSHOP


152
2. Ingresando a la Transacción SE37.

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


este campo “BAPI*” y de esta manera obtener como resultado todas las BAPIs disponibles,
una ves seleccionada la BAPI se selecciona visualizar y aparece el código fuente de la BA-
PI.
Código Fuente BAPI.
Al ser una función la visualización de los parámetros, código o pruebas de la BAPI se reali-
zan desde la transacción SE37. Las diferentes pestañas ubicadas en la parte superior muestran los
parámetros de entrada, de salida y las tablas que requiere la BAPI para realizar un proceso específi-
co.
Generalmente es complicado saber para un proceso determinado, usando una BAPI “X” que
datos se deben enviar para poder obtener el resultado requerido la manera más común es analizar
estos parámetros basándose en sus descripciones para así reunir todo lo necesario para realizar el
proceso.

En la actualidad las BAPIs del sistema SAP R/3 se implementan como módulos de funcio-
nes que se tratan con el Function Builder del Workbench ABAP. Cada módulo de función que da
soporte a una BAPI debe cumplir los requisitos siguientes:

.- Soportar el Protocolo Remote Function Call( RFC )


.- Haber sido asignada como un método a un Objeto de Negocio SAP
.- Debe procesarse sin retornar ventanas de diálogo al programa llamante

Xioma Consulting - ABAP WORKSHOP


153
Ventajas de usar BAPIs

Las BAPIs son métodos estandarizados de los Objetos de Negocio SAP R/3, que permiten la inte-
gración de los componentes de software de los clientes y de terceros. Algunas de las ventajas de
usar BAPIs son:

.- Es un Estándar de Negocio
.- Es un Estándar Consensuado
.- Garantiza estabilidad y compatibilidad futura
.- Garantiza orientación a objetos
.- Independencia de entorno( apertura )

Usar BAPIs en programas de aplicación

Actualmente una BAPI puede ser invocada de dos formas diferentes:

.- Llamar la BAPI en el repositorio


.- Hacer llamada RFC a la función que implementa la BAPI

Ejemplo de llamada de una BAPI


* Fecha de posteo
*
lw_goodsmvt_header-pstng_date = SY-DATUM.

* Fecha de documento
lw_goodsmvt_header-doc_date = SY-DATUM.

* tipo de movimiento
lw_goodsmvt_item-move_type = c_move_type.

* codigo de material
lw_goodsmvt_item-MATERIAL = WG_M.

* Material Receptor
lw_goodsmvt_item-MOVE_MAT = WG_M.

call function 'BAPI_GOODSMVT_CREATE'


exporting
goodsmvt_header = lw_goodsmvt_header
goodsmvt_code = c_goodsmvt_code
importing
materialdocument = l_materialdocument
matdocumentyear = l_matdocumentyear

tables
goodsmvt_item = lt_goodsmvt_item
return = t_return.
IF SY-SUBRC NE 0. "Si no hubo errores

Xioma Consulting - ABAP WORKSHOP


154
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.

WL_RETURN-TYPE = 'S'.

MESSAGE ID 'S1' TYPE 'S' NUMBER '333' WITH 'Creado Doc


material: '
l_materialdocument
'Año: '
l_matdocumentyear.

ELSE. "Si hubieron errores

WG_ERROR = 'X'.

ENDIF.

Xioma Consulting - ABAP WORKSHOP


155
B ATCH I NP U TS
La creación de Batch Inputs no es más que un proceso automático que permite usar un guión
para ejecutar transacciones de forma masiva. Cuando se habla de Bacth-Input se puede estar
refiriendo a un fichero plain-text que necesita que un programa standard (o propio) recoja dicha
información, o un programa que simula el proceso de llenado de las pantallas como si el usuario
estuviese delante.

Crear una grabación

Para crear una grabación se ingresa a la transacción SM35 y se da click en el botón


o se accesa directamente desde la transacción SHDB dando click en
y aparece la siguiente ventana donde se coloca el nombre de la grabación y el código de
transacción. En este ejemplo es MM01 y se da click en Iniciar Grabación.

Xioma Consulting - ABAP WORKSHOP


156
1. Ingresar los datos necesarios:
a. Material: (si es número externo colocar el código, si es número interno el sistema lo
dará automáticamente) Para este caso es externo.
b. Ramo: Ramo de la empresa (en este caso es Alimentos)
c. Tipo de material: es el tipo de material que vamos a crear ( en este caso es Salchi-
cha)

2. Dar Enter
3. En la siguiente pantalla seleccionar las vistas que se van a crear para este material. Para este
ejemplo serán las de Datos básicos 1 y 2.

Xioma Consulting - ABAP WORKSHOP


157
4. Dar Enter o click en
5. En la vista de Datos básicos 1 colocar los siguientes datos
a. Descripción del material
b. UMB

Xioma Consulting - ABAP WORKSHOP


158
6. Dar Enter
7. En la vista de Datos básicos 2 colocamos la información correspondiente en los siguientes
campos:
a. Denominación estándar
b. Formato DIN

Xioma Consulting - ABAP WORKSHOP


159
8. Dar Enter para la siguiente pantalla:

Xioma Consulting - ABAP WORKSHOP


160
9. Dar click en la opción “Si” para el mensaje que indica que se ha creado el material.

Click en Guardar y volver a la transacción SHDB donde aparece el ejemplo

Xioma Consulting - ABAP WORKSHOP


161
Se marca y click en , y aparece la siguiente pantalla donde se coloca el nombre del
programa donde se va a generar el código de dicha grabación.

Se introduce la descripción

Y por último click en para que genere el código que se va a utilizar en el programa
principal.

Xioma Consulting - ABAP WORKSHOP


162
B AS E S D E DATOS LÓG I CAS

Las bases de datos lógicas son programas especiales ABAP que recuperan datos y los hacen
disponibles para programas de uso. El empleo más común de bases de datos lógicas es leer
información de la base de datos y unirlos a programas ejecutables ABAP.
Sin embargo, desde la versión 4.5A, también ha sido posible llamar bases de datos lógicas
que usan el módulo de función LDB_PROCESS. Esto le permite llamar varias bases de datos
lógicas de cualquier programa ABAP. Es también posible llamar una base de datos lógica más de
una vez en un programa.

Funciones de las bases de datos lógicas

Además de permitir leer datos de la base de datos, las bases de datos lógicas también
son utilizadas para las siguientes tareas:

Lectura de los mismos datos para varios programas: Los programas individuales no
necesitan conocer la estructura exacta de las tablas de base de datos relevantes (y menos sus
llaves foráneas).

Definición de la misma interfaz de usuario para varios programas: Las Bases de datos
lógicas tienen una pantalla de selección establecida. Por lo tanto, todos los programas que
usan la base de datos lógica tienen la misma interfaz de usuario.

Comprobación de autorización central: Las comprobación de autorización para datos


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

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

Xioma Consulting - ABAP WORKSHOP


163
Creación de una base de datos lógica (SE36)

Para la creación, modificación o uso de bases de datos lógicas se cuenta con un


Generador de Bases de Datos Lógicas, y se puede acceder de la siguiente forma:

1)Al hacer login en la aplicación, en la barra de menú, click en herramientas -> Workbench
ABAP -> Desarrollo -> Entorno de Programación -> Bases Datos Lógicas.

2)Directamente mediante la transacción SE36.

Xioma Consulting - ABAP WORKSHOP


164
Seguidamente aparece la pantalla del Generador de bases de datos lógicas.

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


ZTPROFES, ZTPROFES_CURSO y ZTCURSOS en donde ZTESTUDIANTES es el nodo
raíz o principal

Xioma Consulting - ABAP WORKSHOP


165
Se introduce la descripción de la base de datos lógica

Se coloca el nombre del nodo raíz, la descripción y se especifica el tipo de nodo, para
este caso el nodo raíz se llamara ZTESTUDIANTES

Aparece la base de datos lógica con el único nodo creado hasta el momento

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

Xioma Consulting - ABAP WORKSHOP


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

Se repite el proceso con todos los nodos q se van a insertar y al final quedaría la base de
datos lógica de la siguiente forma

Se crean los campos de selección (SELECT-OPTIONS), click en

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

Xioma Consulting - ABAP WORKSHOP


167
De esta forma se crea el include de los SELECT-OPTIONS en donde se cambian los ‘?’
que se generan automáticamente por los nombres que se desean, para el ejemplo se
crearon 3: S_EST(estudiantes), S_MAT(cursos) y S_PROF(profesores).

Xioma Consulting - ABAP WORKSHOP


168
Se regresa a la pantalla principal con y click en

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


letras son ‘SAPDB’ y van a ser constantes, seguido del nombre de la base de datos lógica
‘ZLDB_EXAMPLE02’

Se genera el programa automáticamente con dos includes principales

Donde el include TOP contiene la declaración de las tablas que se insertaron como
nodos

Xioma Consulting - ABAP WORKSHOP


169
Y el include NXXX contiene los includes de cada nodo insertado en la base de datos
lógica.

Xioma Consulting - ABAP WORKSHOP


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

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


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

Importante: el FORM ‘PUT_ZTESTUDIANTES’ tiene la siguiente línea:

PUT ZTESTUDIANTES.

Ahí es donde envía el resultado de la búsqueda realizada, en el programa de control el


resultado se va a recibir por medio del evento:

GET ZTESTUDIANTES.

Después de modificar los includes para cada nodo, se regresa a la pantalla principal y se
da click en para modificar el texto de los SELECT-OPTIONS que se crearon
anteriormente

Xioma Consulting - ABAP WORKSHOP


171
Creación del programa (SE38)

Ahora se procede a crear el programa ejecutable para unirlo con la base de datos
lógica.

Se accesa directamente desde la SE38

Se crea el programa de ejemplo ZLDB_PRUEBA02

Xioma Consulting - ABAP WORKSHOP


172
En los atributos del programa se coloca la descripción del mismo, además se escoge el tipo
(Programa Ejecutable) y lo mas importante se introduce el nombre de la Base de datos
lógica que se creo anteriormente (ZLDB_EXAMPLE02)

Y por último con un pequeño código se extrae la información requerida

Xioma Consulting - ABAP WORKSHOP


173
Y así se vería el programa al momento de ejecutarlo (con los SELECT-OPTIONS que se
crearon en la base de datos lógica)

Función LDB_PROCESS

El módulo de funciones permite que se llame una base de datos lógica directamente
en el mismo modo interno. Los registros leídos por la base de datos lógica se traspasan a las
subrutinas CALLBACK indicadas.

La profundidad de lectura se determina mediante los eventos deseados que se han


indicado en el parámetro CALLBACK. Puede haber como máximo dos llamadas por nodo

Xioma Consulting - ABAP WORKSHOP


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

A pesar de que se pueden llamar diferentes bases de datos lógicas anidadas de la


forma que se desee, existen las siguientes restricciones en cuanto al procesamiento de la
misma base de datos lógica:

a. No se puede volver a llamar la misma base de datos lógica mientras no esté finaliza-
da otra ejecución (excepción LDB_ALREADY_RUNNING).
b. Se puede llamar varias veces consecutivamente la misma base de datos lógica cuan-
do está prevista para ello (excepción LDB_NOT_REENTRANT). Que esté prevista
para ello significa que el programa de base de datos contiene una subrutina
(LDB_PROCESS_INIT) que prepara la base de datos lógica para un paso posterior.

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


mayoría, se corresponden con el traspaso de parámetros en SUBMIT.

SELECTIONS: estructura RSPARAMS. Se corresponde con el suplemento WITH


SELECTION-TABLE en SUBMIT.

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

EXPRESSIONS: delimitaciones opcionales en el formato RSDS_TEXPR. Se corresponde


con el suplemento WITH FREE SELECTIONS en SUBMIT.

La regulación en caso de conflicto es idéntica a SUBMIT: las delimitaciones


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

Xioma Consulting - ABAP WORKSHOP


175
El siguiente es un ejemplo del uso de la funcion LDB_PROCESS llamando a la base de
datos logica ZLD_EXAMPLE02

REPORT ZLDB_PRUEBA01.

TABLES ZTESTUDIANTES.

SELECT-OPTIONS SL_EST FOR ZTESTUDIANTES-ZID_EST.

TYPE-POOLS: RSDS, RSFS.

DATA: CALLBACK TYPE TABLE OF LDBCB,


CALLBACK_WA LIKE LINE OF CALLBACK,
SELTAB TYPE TABLE OF RSPARAMS,
SELTAB_WA LIKE LINE OF SELTAB,
TEXPR TYPE RSDS_TEXPR,
FSEL TYPE RSFS_FIELDS.

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

CALLBACK_WA-LDBNODE = 'ZTESTUDIANTES'.
CALLBACK_WA-GET = ‘X’.
CALLBACK_WA-GET_LATE = ‘X’.
CALLBACK_WA-CB_PROG = SY-REPID.
CALLBACK_WA-CB_FORM = 'CALLBACK_ZTESTUDIANTES'.

APPEND CALLBACK_WA TO CALLBACK.


CLEAR CALLBACK_WA.
CALLBACK_WA-LDBNODE = 'ZTNOTAS'.
CALLBACK_WA-GET = ‘X’.
CALLBACK_WA-CB_PROG = SY-REPID.
CALLBACK_WA-CB_FORM = 'CALLBACK_ZTNOTAS'.
APPEND CALLBACK_WA TO CALLBACK.

***S_EST es el SELECT-OPTIONS creado en ZLD_EXAMPLE02***

Xioma Consulting - ABAP WORKSHOP


176
SELTAB_WA-KIND = 'S'.
SELTAB_WA-SELNAME = 'S_EST'.

LOOP AT SL_EST.
MOVE-CORRESPONDING SL_EST TO SELTAB_WA.
APPEND SELTAB_WA TO SELTAB.

ENDLOOP.

********** Funcion para llamar LDB a partir de la version 4.5A **********


CALL FUNCTION 'LDB_PROCESS'
EXPORTING
***********Nombre de base de datos logica que se creo**********
LDBNAME = 'ZLDB_EXAMPLE02'
VARIANT = ' '
EXPRESSIONS = TEXPR
FIELD_SELECTION = FSEL
TABLES
CALLBACK = CALLBACK
SELECTIONS = SELTAB
EXCEPTIONS
LDB_NOT_REENTRANT = 1
LDB_INCORRECT = 2
LDB_ALREADY_RUNNING = 3
LDB_ERROR = 4
LDB_SELECTIONS_ERROR = 5
LDB_SELECTIONS_NOT_ACCEPTED = 6
VARIANT_NOT_EXISTENT = 7
VARIANT_OBSOLETE = 8
VARIANT_ERROR = 9
FREE_SELECTIONS_ERROR = 10
CALLBACK_NO_EVENT = 11
CALLBACK_NODE_DUPLICATE = 12
OTHERS = 13.

IF SY-SUBRC <> 0.
WRITE: 'Exception with SY-SUBRC', SY-SUBRC.
ENDIF.

FORM CALLBACK_ZTESTUDIANTES USING NAME TYPE LDBN-LDBNODE


WA TYPE ZTESTUDIANTES
EVT TYPE C
CHECK TYPE C.
CASE EVT.
WHEN 'G'.
WRITE: / WA-ZNOMBRE, WA-ZAPE1, WA-ZAPE2.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM.

FORM CALLBACK_ZTNOTAS USING NAME TYPE LDBN-LDBNODE


WA TYPE ZTNOTAS
EVT TYPE C
CHECK TYPE C.
WRITE: / WA-ZNOTA.
ENDFORM.

Xioma Consulting - ABAP WORKSHOP


177
OB JE CTOS D E AU TORI Z ACI ÓN

Creación de un objeto de autorización (SU21)


Para crear un objeto de autorización se utiliza la transacción SU21. A través de esta
transacción se pueden crear, visualizar o modificar dichos objetos que a nivel de código
ABAP son verificados a través de la instrucción Authority-check. Estos objetos se suelen
agrupar por clases.

Para crear el nuevo objeto es necesario seleccionar la clase en la cual se debe incluir,
a través de un doble click. En caso de querer crear una clase nueva se da click en el botón
donde se indicara el nombre de la clase y la descripción. Una vez dentro de la clase se
utiliza de nuevo el botón para crear el nuevo objeto de autorización.

Xioma Consulting - ABAP WORKSHOP


178
Creación de la clase

Acceso a la clase creada

Los objetos de autorización están compuestos por el nombre del objeto, una
descripción, la clase a la que pertenecen y los ámbitos de autorización correspondientes.
Estos últimos definen el comportamiento del objeto y están determinados por un elemento
de datos y un dominio (pueden ser creados nuevos ámbitos por medio de la transacción
SU20).

Xioma Consulting - ABAP WORKSHOP


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

Xioma Consulting - ABAP WORKSHOP


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

Utilizando la transacción SU03 se asigna el perfil que contiene al objeto de autorización.

Authority-check

Las verificaciones de autorización se deben realizar antes de tratar de acceder


información en la base de datos. La instrucción AUTHORITY-CHECK verifica si el
usuario tiene o no derechos sobre los valores que se desean acceder. Si la variable SY-
SUBRC vale 0, entonces el usuario tiene derechos suficientes para proseguir, si es 12 el
usuario no tiene permiso suficiente y en el caso de 24 no se especificaron suficientes
parámetros para validar la autorización.
Para realizar la verificación de la autorización se hace referencia a los objetos de
autorización, estos definen la combinación de campos que sirven como modelo tanto para
las autorizaciones como para las verificaciones de autorización. Se organizan en clases de
objetos para facilitar su administración y localización (transacción SU21).

Xioma Consulting - ABAP WORKSHOP


181
Sintaxis:

AUTHORITY-CHECK OBJECT ‘<objeto>’


ID ‘<identificador1>’ {FIELD ‘<campo1>’} | DUMMY
...
ID ‘<identificador10>’{FIELD ‘<campo10>’}| DUMMY.

Ejemplo:

PARAMETERS carr TYPE spfli-carrid.

AT SELECTION-SCREEN.

AUTHORITY-CHECK OBJECT 'S_CARRID'


ID 'CARRID' FIELD carr

ID 'ACTVT' FIELD '03'.


IF SY-SUBRC NE 0.
MESSAGE 'Sin autorización' TYPE 'E'.
ENDIF.

Se puede utilizar la opción de patrón en el menú del editor para obtener facilmente los
parametros de autorización de un objeto. En caso de que no se desee enviar un valor, se
envia en su lugar la palabra DUMMY.

Xioma Consulting - ABAP WORKSHOP


182
OB JE TOS D E B LOQU E O

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

Estructura de un objeto de bloqueo


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

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

Los campos a bloquear de ese objeto de bloqueo son usados como parámetros de
entrada en las funciones de bloqueo y desbloqueo. Cuando se llaman estas funciones, las
filas de la tabla son especificadas definiendo valores en estos campos. Estos valores pueden
también ser genéricos. Los campos del bloqueo definen qué subconjunto de las filas de la
tabla debe ser bloqueado.

Xioma Consulting - ABAP WORKSHOP


183
Crear un Objeto de Bloqueo
Para crear un objeto de bloqueo se utiliza la transacción SE11.

El nombre del Objeto de bloqueo siempre debe de comenzar con la letra E, y usualmente
posterior a eso se coloca “Z_” seguido por el nombre del objeto que se desea bloquear.

Al presionar el botón de Crear, veremos la siguiente pantalla:

Xioma Consulting - ABAP WORKSHOP


184
Permitir RFC:

Si este indicador está seleccionado, se podrán llamar los módulos de


funciones generados durante la generación del objeto de bloqueo,
los cuales fijan y liberan bloqueos mediante Remote Function Calls (RFC).

Dependencias
En caso que se active permitir RFC para un objeto de bloqueo existente, deberá
asegurarse que la llamada de los módulos de funciones generados se efectúe con parámetros
adecuados al tipo. Antes de activar el objeto de bloqueo con la nueva opción, debería
verificar todos los programas que utilicen los módulos de funciones en cuestión.
En el siguiente Tab se encuentran las Tablas a utilizar. En un objeto de bloqueo se
indicarán las tablas en las que deben bloquearse registros con una orden de bloqueo.

Xioma Consulting - ABAP WORKSHOP


185
Tabla primaria

En la selección de tablas se partirá de una tabla (tabla primaria).

Modo de bloqueo

Determina cómo sincronizar el acceso de varios usuarios a los registros de la tabla.

Existen los siguientes modos:

• Protección de escritura: los datos bloqueados pueden ser visualizados o tratados


únicamente por un usuario. Tanto la petición de otra protección de escritura como de
otra protección de lectura serán rechazadas.

• Protección de lectura: Varios usuarios pueden tener acceso de sólo lectura a los mismos
datos simultáneamente. No obstante, en el momento en que un usuario pase a tratar los
datos, éstos quedarán bloqueados para los demás usuarios. Las peticiones de nuevas
protecciones de lectura se aceptarán incluso si éstas provienen de otros usuarios. Las
protecciones de escritura serán rechazadas.

Xioma Consulting - ABAP WORKSHOP


186
• Protección de escritura ampliada: Igual a la de protección de escritura, pero sólo puede
ser solicitada una vez por la misma transacción. Cualquier otra nueva petición de una
protección será rechazada.

Tablas secundarias

A la tabla primaria pueden añadírsele otras tablas (tablas secundarias) mediante


relaciones de llaves externas.
El tercer Tab es de Parámetros de bloqueo, en el cual se indican los valores que serán
pasados a las funciones de bloqueo y desbloqueo

Nombre de parámetro bloqueo

Un parámetro de bloqueo tiene, por lo general, el mismo nombre que el campo de


tabla correspondiente. Una modificación será precisa, por ejemplo, cuando varios campos de
diferentes tablas del objeto de bloqueo tienen el mismo nombre.

Indicador Pond

En caso que este indicador esté marcado para el campo, se incluirá como parámetro
en los módulos de funciones generados durante la activación del objeto de bloqueo.
Estos parámetros sirven para la transmisión de la llave a bloquear o para el control
del comportamiento de bloqueo en la transmisión del valor inicial.
El indicador se fija por defecto. En caso de no necesitar el parámetro de bloqueo en
los módulos de funciones generados, se puede desmarcar. En este caso, en relación a este
parámetro, se bloqueará siempre de forma genérica.

Xioma Consulting - ABAP WORKSHOP


187
Al finalizar de realizar los cambios solamente se la da al botón Activar para que
queden listos los cambios.

Funciones de los Objetos de bloqueo

Cuando se ha creado un objeto de bloqueo automáticamente se crean dos funciones,


una para bloquear (ENQUEUE_<nombre objeto de bloqueo>) y otra para desbloquear
objetos (DEQUEUE_< nombre objeto de bloqueo >)
Los módulos generados de la función se asignan automáticamente a los grupos de la
función. No se debe cambiar estos módulos de la función y su asignación a los grupos de la
función puesto que los módulos de la función son generados nuevamente cada vez que el
objeto de bloqueo es activado.

Parámetros de las funciones

Nombres de campo del objeto de Bloqueo


Las llaves que se bloquearán se deben pasar aquí.

Parámetros para pasar bloqueos al programa de actualización


Un bloqueo se quita generalmente en el final de la transacción o cuando se invoca la
función de desbloqueo (DEQUEUE). Sin embargo, no sucede así si la transacción ha
llamado rutinas de actualización. En este caso, un parámetro debe comprobar que se haya
quitado el bloqueo.
El parámetro _SCOPE controla cómo el bloqueo o el desbloqueo se pasa al
programa de actualización. Se tiene las opciones siguientes:

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


actualización. Se quita el bloqueo cuando se termina la transacción.
• _SCOPE = 2: El bloqueo o el desbloqueo se pasa al programa de actualización.
El programa de actualización es responsable de quitar el bloqueo. El programa
interactivo con el cual el bloqueo fue solicitada no tiene mas influencia en el
comportamiento del bloqueo. Ésta es la configuración estándar de la función de
bloqueo (ENQUEUE).
• _SCOPE = 3: El bloqueo o desbloqueo también se pasa al programa de
actualización. El bloqueo se debe quitar en el programa interactivo y en el
programa de actualización. Ésta es la configuración estándar para la función de
desbloqueo (DEQUEUE).

Parámetros para el modo de Bloqueo

Xioma Consulting - ABAP WORKSHOP


188
Un parámetro MODE_<tabla> existe para cada tabla del objeto de bloqueo. El modo
de bloqueo para esta tabla se puede fijar dinámicamente con este parámetro. Los valores
permitidos para este parámetro son S (bloqueo de lectura), E (bloqueo en escritura), X
(ampliado el bloqueo en escritura), y O (bloqueo optimista).
El modo de bloqueo especificado para la tabla respectiva cuando el objeto de
bloqueo fue creado es el valor por defecto para este parámetro. Este valor prefijado puede,
sin embargo, ser eliminado como sea necesario cuando se invoca la función.
Si se modifica este valor por defecto, cuando se haga el desbloqueo debe de tener el
mismo valor que se asignó a la función de bloqueo.

Control de transmisión de bloqueos


El parámetro _COLLECT controla si la petición de bloqueo o desbloqueo debe ser
realizada directamente o si debe primero ser escrito al contenedor local de bloqueos (las
peticiones de bloqueo y desbloqueo pueden ser almacenados en un contenedor local de
bloqueos y ser enviados juntos invocando la función FLUSH_ENQUEUE). Este parámetro
puede tener los valores siguientes:

• Valor inicial: La petición de bloqueo o desbloqueo se envía directamente al


servidor de bloqueos.
• “X”: La petición de boqueo o desbloqueo se pone en el contenedor local de
bloqueos. Estos se pueden entonces enviar al servidor de bloqueos agrupados
invocando la función FLUSH_ENQUEUE.

Siempre que se usa el modo X del bloqueo (ampliar el bloqueo en escritura), los
bloqueos no se deben enviar al contenedor local de bloqueos si hay asignados muchos
bloqueos para determinada tabla. En este caso, habrá una pérdida considerable en
funcionamiento en comparación con la transmisión directa de bloqueos.

Comportamiento en conflicto de bloqueos (solo al bloquear)


La función ENQUEUE también tiene el parámetro _WAIT. Este parámetro
determina el comportamiento del bloqueo cuando hay un conflicto al bloquear.
Se tienen las opciones siguientes:
Valor inicial: Si un intento de bloqueo falla porque ya hay un bloqueo, se acciona la
excepción FOREIGN_LOCK.
“X”: Si un intento de bloqueo falla porque hay un bloqueo, el intento de bloquear se
repite después de esperar cierto tiempo. Se acciona la excepción FOREIGN_LOCK
solamente si ha transcurrido cierto límite de tiempo desde el primer intento de bloqueo. El
tiempo de espera y el límite de tiempo son definidos por parámetros de perfil.

Controlando borrado del bloqueo de entrada (DEQUEUE solamente)


La función de desbloqueo también tiene el parámetro _SYNCHRON. Si se pasa el
valor “X”, la función DEQUEUE espera hasta que la entrada de bloqueo se ha quitado de la
tabla de bloqueos. Si no, entonces se suprime asincrónicamente, es decir, si la tabla de

Xioma Consulting - ABAP WORKSHOP


189
bloqueos del sistema se lee después de que se quita el bloqueo, la entrada en la tabla de
bloqueos puede existir.

Excepciones de la función de ENQUEUE


· FOREIGN_LOCK': Ya existe un bloqueo. Se puedes obtener el nombre del usuario
que tiene el bloqueo revisando la variable del sistema SY-MSGV1.
· SYSTEM_FAILURE: Se acciona esta excepción cuando en el servidor de bloqueos
ocurrió un problema mientras se fijaba el bloqueo. En este caso, el bloqueo no podrá ser
fijado. Si las excepciones no son procesadas por el programa que lo llama, entonces los
mensajes apropiados se despliegan.

Campos de referencia para los objetos de bloqueo RFC activados


El tipo de una función RFC debe ser definido completamente.

Los parámetros de la función tienen los siguientes campos de referencia para los
objetos RFC:

PARÁMETROS CAMPOS DE REFERENCIA


X_<nombre campo> DDENQ_LIKE-XPARFLAG
_WAIT DDENQ_LIKE-WAITFLAG
_SCOPE DDENQ_LIKE-SCOPE
_SYNCHRON DDENQ_LIKE-SYNCHRON

Ejemplo con objetos de bloqueo


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

Xioma Consulting - ABAP WORKSHOP


190
El argumento de bloqueo de la tabla SFLIGHT contiene los campos MANDT,
CARRID, CONNID y FLDATE. El argumento de bloqueo de la tabla SBOOK contiene los
campos MANDT, CARRID, CONNID, FLDATE, BOOKID y CUSTOMID.

Al seleccionar el modo exclusivo de bloqueo hace que los datos puedan ser vistos y
modificados solo por el usuario que lo esta invocando.
Cuando se activa el objeto de bloqueo, los módulos siguientes de la función se
generan de su definición:
* ENQUEUE_E_BOOKING (ejecuta el bloqueo)
* DEQUEUE_E_BOOKING (libera el bloqueo)

La función ENQUEUE_E_BOOKING se invoca de la siguiente manera:

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

Xioma Consulting - ABAP WORKSHOP


191
Las entradas exclusivas de bloqueo existentes para el vuelo LH 400 se suprimen en
la tabla SFLIGHT. La petición de suprimir las entradas de bloqueo se pasa al programa de
actualización (_SCOPE = `3').

Xioma Consulting - ABAP WORKSHOP


192
AB AP D E V E LOP ME N T WORK B E NCH

El ABAP development workbench es una aplicación que reúne prácticamente todas las
herramientas técnicas del entorno de SAP para dar soporte al desarrollo eficiente de aplicaciones
empresariales de gran escala a través del ambiente distribuido de cliente/servidor en el R/3.
Esta integración permite una mayor agilidad durante el desarrollo y el mantenimiento de las
aplicaciones.
El repositorio de R/3 contiene todos los objetos de desarrollo, por ejemplo programas,
definiciones de la base de datos y tipos de datos globales. Es por esto que los objetos de desarrollo
suelen ser conocidos como objetos del repositorio, y estos objetos son independientes del mandate.
El repositorio de R/3 se encuentra organizado por aplicación, y cada una de estas se encuentra
dividida en subdivisiones lógicas llamadas clases de desarrollo (paquetes). Cada vez que se crea un
nuevo objeto de desarrollo, éste debe ser asignado a un paquete.

MIME Repository

El repositorio de objetos MIME se utiliza para almacenar estilos de hojas, gráficos,


iconos, audio, y otros tipos de objetos en el sistema SAP. Se crean como objetos en la base
de datos de SAP y puede ser referidos como parte de diferentes aplicaciones tecnológicas.

Xioma Consulting - ABAP WORKSHOP


193
Estos objetos utilizan la infraestructura de desarrollo de SAP. Cualquier cambio realizado
en este repositorio implica la asignación del objeto en una orden de transporte.

Repository Browser

Este repositorio representa una herramienta que se utiliza para editar todos los
objetos de desarrollo, tales como la edición de programas ABAP, creación de transacciones,
aplicaciones de diálogo, funciones, etc

Repository Information System

El repositorio del sistema de información facilita la búsqueda de objetos en el


sistema SAP. Se pueden localizar objetos que encajan con un criterio particular.

Tag Browser

El navegador de etiquetas permite agregar etiquetas y sus atributos para el editor


correspondiente. Por ejemplo es muy útil para la implementación del diseño de aplicaciones
Web. Siempre se asume que el usuario entiende el significado de las etiquetas individuales
y sus atributos.

Transport Organizer
El organizador de transportes brinda la funcionalidad para la creación,
documentación y liberación de ordenes de transporte durante todo el período de
parametrización y desarrollo, así como posteriormente para la reorganización del entorno de
desarrollo. Las herramientas que posee estas orientadas específicamente a los equipos de
desarrollo y a los administradores de la implementación.

Xioma Consulting - ABAP WORKSHOP


194
AP LI CACI ON E S D E D I ÁLOG O
El desarrollo de aplicaciones de dialogo posee como característica principal el diseño de
pantallas. Estas pantallas son realmente programas dinámicos (DYNPRO) que se encuentran
integrados con el diccionario de ABAP, lo cual permite la verificación de la consistencia de los
campos automáticamente. Por ejemplo la verificación de campos obligatorios, tipos, llaves o
valores prefijados. La disposición de los DYNPRO es muy flexible permitiendo el uso de campos
de entrada y salida, botones de radio, cajas de check, botones y otros objetos.

Screen Painter (SE51)

El screen painter permite la creación de aplicaciones de diálogo por medio del


desarrollo de DYNPROs. Cada DYNPRO estará asociado a un programa y su
diferenciador es un número de 4 dígitos.

Lógica del proceso

La lógica del proceso dicta la manera en que un programa dinámico procesa la


información que fluye por él. Esta lógica se compone de dos eventos principales que
determinan el flujo del programa, el proceso antes de la salida (PBO) y el proceso después
de la entrada (PAI). Estos procesos se crean automáticamente por el screen painter.

Xioma Consulting - ABAP WORKSHOP


195
Process Before Output (PBO)
El PBO se procesa inmediatamente antes de que la disposición de pantalla
sea mostrada, de tal forma que se pueden invocar todas las rutinas que se requieran
para inicializar los campos y/o variables.

Process After Input (PAI)


El PAI es ejecutado justo después que un usuario realiza una acción. Toda la
lógica que se desea ejecutar en un programa debe ser invocada desde este evento.

Process on help-request (POH)


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

Process on value-request (POV)


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

MODULE
Dentro de los eventos PBO y PAI se deben crear bloques de código llamados
módulos, estos son las subrutinas que contienen el código que controla el programa.

Sintaxis:

MODULE <módulo> [ AT {EXIT COMMAND } | {CURSOR-SELECTION } ]


[ ON {CHAIN-INPUT } | {CHAIN-REQUEST } ].

Ejemplo:
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*

PROCESS AFTER INPUT.

MODULE USER_COMMAND_0100.

Xioma Consulting - ABAP WORKSHOP


196
*&------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&------------------------------------------*
*text
*-------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

ENDMODULE. " USER_COMMAND_0100 INPUT

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


lógica del proceso, éstas deben ir dentro de los módulos. Por razones

Para el caso del AT EXIT COMMAND la función que se utilice debe ser de
tipo ‘E’9 y debe estar en el PAI. En caso de existir varios AT EXIT COMMAND,
solo se ejecutará el primero.

En el caso del AT CURSOR-SELECTION la función debe ser ‘CS’ y el tipo


ha de ser ‘S’. Además el cursor debe estar posicionado en un campo de entrada o
salida. Todo esto en el PAI.

Si se quisiera asignar al doble click la funcionalidad del AT CURSOR-SELECTION


se puede conseguir definiendo la función CS a la tecla F2.

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


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

FIELD
Esta instrucción puede ser utilizada en cualquiera de los cuatro bloques de la
lógica de procesos (PAI, PBO, POH y POV), sin embargo no tiene efecto alguno en
el bloque PBO. Su función es regular el envío de información entre el DYNPRO y
el programa ABAP. Se utiliza en conjunto con la instrucción MODULE cuando se
desea condicionar un módulo a ejecutar para un campo específico.

Sintaxis:
FIELD <campo> MODULE <módulo> {ON INPUT}
| {ON REQUEST}
| {ON {CHAIN-INPUT}|{CHAIN-REQUEST}}
| {AT CURSOR-SELECTION}.

9 Ver Menu Painter

Xioma Consulting - ABAP WORKSHOP


197
ON INPUT implica que el módulo se ejecutará solo si el valor del campo es
vacío o cero en el caso de valores numéricos. Si el campo posee un valor inicial
tampoco se ejecutara, sin importar que el usuario lo haya vuelto a digitar.

La condición ON REQUEST hará que se ejecute el módulo si se da un


cambio en el campo después del PBO, sin importar el valor que sea.

CHAIN

La instrucción CHAIN permite encadenar una serie de campos en la lógica


del proceso para ser evaluados en un módulo invocado con un CHAIN-INPUT o con
un CHAIN-REQUEST. CHAIN ha de terminar con un ENDCHAIN. Es importante
recordar que aunque la instrucción es válida en el PBO no tiene ningún efecto en éste
bloque.

LOOP

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

Creación del DYNPRO

Al crear un DYNPRO el primer paso es la definición de los valores


básicos en la pestaña de atributos.

Xioma Consulting - ABAP WORKSHOP


198
Descripción Breve: Es obligatorio indicar una descripción para el DYNPRO.

Tipo de DYNPRO: Existen 4 tipos de dynpros.


Normal: Es el DYNPRO que forma una pantalla por sí mismo.
Subscreen: Es una subárea en un DYNPRO normal, pero que posee su
propia lógica de proceso.
Modal: Es una ventana que depende de una ventana padre, y no retorna el
control a la ventana padre sino hasta que es cerrada.
DYNPRO Selección: Este tipo de DYNPRO es de uso interno de SAP y es
generado automáticamente. Manipular este tipo de DYNPROS por medio
del screen painter no es muy recomendando dado que este tipo de DYNPRO
puede ser regenerado.
Opciones: Existen 5 tipos de opciones.
Retener datos: Esta opción permite retener los datos para la siguiente
ejecución del DYNPRO si las opciones del usuario están activadas en
Sistema -> Valor prefijado para usuario -> Retener datos-> Fijar datos->
Borrar datos.

Desconectar compresión del dynpro para tiempo de ejecución: Esta


opción comprime los campos en la pantalla que en tiempo de ejecución no
sean relevantes dependiente de una serie de criterios.

Xioma Consulting - ABAP WORKSHOP


199
Dynpro modelo: Esta opción es de uso interno e identifica DYNPROs que
se utilizan como modelos.

Mantener posición desplazamiento: Este atributo está pensado para


dynpros largos en los cuales se ha perdido la posición de desplazamiento
debido a ciertas acciones.
Indica que la posición de desplazamiento del dynpro principal debe
mantenerse en caso de que el dynpro se visualice sucesivamente.

Sin barra herramientas de aplicación: la barra de herramientas de


aplicación correspondiente al status actual del programa no se visualiza,
independientemente de si contiene o no pulsadores.

Otros Atributos:
DYNPRO Siguiente: Indica cual es el siguiente DYNPRO que ha de
ejecutarse al finalizar el actual. Puede invocarse a sí mismo para mantenerse
en un DYNPRO y cambiarse en tiempo de ejecución con la instrucción SET
SCREEN. En caso de hacer un SET SCREEN 0 se finaliza el programa (en
caso de estar en el DYNPRO principal) o al DYNPRO anterior.

Posición del Cursor: Si no se desea que el cursor sea posicionado en el primer


campo de entrada, sino en otro campo, es necesario indicar el nombre de este campo.
Esta función puede ser ejecutada de forma dinámica en el modulpool mediante la
instrucción ABAP
'SET CURSOR FIELD <campo>'.

Líneas/Columnas: La cantidad indicada de líneas y columnas determina el


tamaño de DYNPRO previsto para la actualización.

Lista de Elementos: Esta pestaña contiene todos los atributos de los diferentes
objetos o elementos que existen en la pantalla.

Lógica del proceso: En la pestaña de lógica de proceso se inserta todo el código


que rige el comportamiento del DYNPRO.

Disposición: El botón de disposición invoca al editor gráfico (Graphical Screen


Painter).

Xioma Consulting - ABAP WORKSHOP


200
Graphical Screen Painter

El screen painter gráfico muestra un canvas donde se colocan los diferentes


objetos que pueden existir en un DYNPRO. La barra de componentes se encuentra
a la izquierda.

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


2. Campo de Texto: Se utiliza para colocar etiquetas en el canvas.
3. Campo de entrada/salida: Este objeto se relaciona con una variable para capturar
o mostrar su valor en el DYNPRO.
4. Checkbox: Se utiliza para crear un campo de selección.
5. Radiobutton: Sirve para crear un conjunto de radio buttons.
6. Botón: Crea un botón.
7. Pestañas: Crea un control de pestañas.
8. Wizard de Pestañas: Crea automáticamente el código para controlar las pestañas.
9. Marco: Crea un marco en el canvas. Permite agrupar una serie de objetos.
10. Área de subscreen: Define un área donde ha de aparecer un subscreen.
11. Control de Tabla: Se utiliza para crear una plantilla en el canvas (GRID).
12. Wizard de Control de Tabla: Genera automáticamente el código y los objetos que
se requieren para un Control de Tabla.

Xioma Consulting - ABAP WORKSHOP


201
13. Contenedor: Permite la creación de un objeto nuevo en tiempo de ejecución
utilizando programación orientada a objetos.
14. Icono: Permite colocar un icono en tiempo de ejecución.
15. Ventana lista de elementos: Muestras todos los objetos en el canvas con sus
atributos en forma de resumen.
16. Campos del diccionario: Permite seleccionar campos de estructuras del
diccionario o de un programa para generarlos automáticamente en el canvas.
17. Ventana de atributos: Muestra y permite la edición de los atributos de un objeto.
Esta ventana también se abre cuando se da doble click sobre un objeto.

Los campos en rojo son obligatorios. Uno de


estos campos obligatorios es el nombre del objeto.
El campo texto se cambia en aquellos objetos
donde sea relevante. En el campo despliegue se
puede seleccionar si es un list box, cuando se
refiere a un campo de entrada o visualización.
Aquellos objetos que puedan contener iconos
tendrán un campo para seleccionarlo de la lista de
iconos de SAP. En el campo Quick Info se
introduce un texto a desplegarse en tiempo de
ejecución al colocar el puntero sobre el objeto.
Cada objeto puede pertenecer a 4 grupos
diferentes (cada uno codificable con 3 dígitos),
esto permite el cambio de atributos grupales. En el
caso de los botones existe el campo código de
función, el cual se pasa a la variable SY-UCOMM
al ser oprimido el botón. El tipo de botón de
función que sirve para controlar el proceso y que
puede ser de los siguientes tipos: E (ejecuta el
módulo AT EXIT COMMAND, el OK Code
obtiene el valor ‘/E’), H Ayuda (ejecuta el ON
HELP REQUEST dejando el OK CODE en ‘?’, S
Función del sistema (OK CODE ‘/’), P Función
del GUI (OK CODE ‘=’), T Transacción (OK
CODE ‘/n<transacción>’). Por defecto el tipo de
función esta en vacío y no es obligatorio.
La sección de atributos contiene tres pestañas:
diccionario, programa y visualización.
La sección de diccionario se encarga de
brindarle al objeto características provenientes del
diccionario de datos tales como el formato, si el
campo proviene directamente del diccionario, una

Xioma Consulting - ABAP WORKSHOP


202
rutina de conversión, definir una ayuda de búsqueda, si existe un campo de
referencia o un PARAMETER ID, indicador de SET PARAMETER ID que sirve
para enviar el valor que tome el campo al parámetro, indicador de GET
PARAMETER ID que toma el valor del parámetro para el campo, verificación de
clave externa y finalmente el indicador para permitir mayúsculas y minúsculas.

En el caso de los atributos de programa se puede


especificar para los campos de entrada o salida si el
campo es solo de entrada o campo de salida, o si
debe desplegarse en el Dynpro como un campo de
sólo salida. Cuando el campo es de entrada es
posible especificar si el tipo de entrada es: posible,
no posible, recomendada y requerida (obligatoria).
El campo de pulsador de entradas posibles sirve
para controlar la aparición del botón de las ayudas
de búsqueda en el campo. El check de alineación
derecha justifica el texto que acompaña el objeto a
la derecha. El check de Cero a la izquierda rellena
con ceros cuando el contenido del campo es
numérico. Al activar el check Entrada * se indica
que este campo debe invocar el módulo en la lógica de proceso que esté atado al
campo mediante un FIELD ... MODULE ... ON *-INPUT, cuando el primer
carácter del campo sea un ‘*’.

El check de tipo de letra equidistante se encarga de


definir un espaciado equidistante entre los
caracteres. El indicador de Visible e invisible
implican que el campo se pueda o no ver durante la
ejecución. El indicador de 2 dimensiones elimina el
efecto de tridimensionalidad en los campos de
entrada y salida durante el tiempo de ejecución. Los
denominadores de izquierda y derecha conectan el
objeto de texto al siguiente objeto que se encuentre
a la derecha o a la izquierda. La opción de
sensibilidad al doble click se encarga de asignar un
OK CODE al dar doble click sobre el objeto de
texto o de entrada y salida.

Xioma Consulting - ABAP WORKSHOP


203
Creación de transacciones (SE93)

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

Xioma Consulting - ABAP WORKSHOP


204
Al crear una nueva transacción, estas pueden ser de 5 tipos:

1. Transacciones de Diálogo (Module Pool): son aquellas transacciones que están


atadas a un programa que posee Dynpros.
2. Transacción de Reporte: Se utilizan para los programas que son imágenes de
selecciones (Reportes).
3. Transacción de Clase: Ejecuta el método de una clase desde la transacción.
4. Transacción con variantes: Crea una transacción nueva para ejecutar la variante de
otra transacción. En este caso es importante recordar que las variantes son
dependientes del mandante.
5. Transacción con parámetros: Ejecuta otra transacción enviando los parámetros con
los que se desea iniciar.

Menu Painter (SE41)

Los menús (también llamados Status GUI) permiten al usuario ejecutar funciones de
un programa desde la barra de herramientas o la barra de menús. Estos menús son
invocados desde el PBO en la lógica de proceso.

Al crear un menú se debe indicar el programa al que pertenece y el nombre del status
(menú).

Xioma Consulting - ABAP WORKSHOP


205
Existen 3 bloques principales que son:

1. La barra de menú: Contiene todas las opciones del menú para el dynpro.
2. La barra de pulsadores: Define todos los botones que se encuentran en la barra de
pulsadores.
3. Teclas de función: Asigna el la función para las teclas de función y sus
respectivas combinaciones con otras teclas. También contiene la asignación de
los botones estándar de la barra de herramientas del GUI.

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

PROCESS BEFORE OUTPUT.

MODULE STATUS_0100.

PROCESS AFTER INPUT.

MODULE USER_COMMAND_0100.

*&------------------------------------------------------------
-
*& Module STATUS_0100 OUTPUT
*&------------------------------------------------------------
-* text
*-------------------------------------------------------------
-
MODULE STATUS_0100 OUTPUT.

SET PF-STATUS 'PRINCIPAL'.

* SET TITLEBAR 'xxx'.

Xioma Consulting - ABAP WORKSHOP


206
ENDMODULE. " STATUS_0100 OUTPUT

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

*&------------------------------------------------------------
-
*& Module STATUS_0100 OUTPUT
*&------------------------------------------------------------
-* text
*-------------------------------------------------------------
-
MODULE STATUS_0100 OUTPUT.

DATA fcode TYPE TABLE OF sy-ucomm.

...

APPEND 'BU' TO fcode.

APPEND 'BACK' TO fcode.

SET PF-STATUS 'PRINICIPAL' EXCLUDING fcode.

ENDMODULE. " STATUS_0100 OUTPUT

Otras Sentencias para DYNPRO

CALLSCREEN
Esta sentencia llama a un DYNPRO por su número. Es posible especificar las
coordenadas donde ha de aparecer.

Sintaxis:
CALL SCREEN dynnr
[STARTING AT col1 lin1
[ENDING AT col2 lin2]].

SET TITLEBAR
En tiempo de ejecución esta instrucción establece el título que ha de desplegar el
GUI para el DYNPRO actual. El nombre del título actual queda almacenado en la variable
de ambiente SY-TITLE. Es importante considerar que el título ha de ser establecido en el
PBO, de no ser definido ninguno la palabra SAP es desplegada en la barra de títulos.
Además el máximo de caracteres que se soporta es de 70, y cualquier cadena superior a ésta

Xioma Consulting - ABAP WORKSHOP


207
longitud será truncada. Los títulos puede ser editados mediante la transacción SE41 y la
opción “Lista de Títulos”.

Sintaxis:

SET TITLEBAR 'XXX’.

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

COMPONENTE ATRIBUTO
NAME Nombre
GROUP1 Grupo 1
GROUP2 Grupo 2
GROUP3 Grupo 3
GROUP4 Grupo 4
REQUIRED Campo Obligatorio
INPUT Posible para entrada
OUTPUT Campo de Salida
INTENSIFIED Campo intensificado
INVISIBLE Elemento invisible
LENGHT Tamaño visible
ACTIVE Campo activo
DISPLAY_3D Tipo de caja
VALUE_HELP Ayuda
REQUEST Existe entrada
VALUE_IN_COMBO Existe valor en lista

Xioma Consulting - ABAP WORKSHOP


208
Syntaxis:

LOOP AT SCREEN [INTO wa].

...
ENDLOOP.

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


posible cambiar los atributos de la siguiente manera en el PBO:

MODULE modify_0100 OUTPUT.

LOOP AT SCREEN.

IF screen-name = 'VAL'.

screen-required = '1'.

screen-intensified = '1'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDMODULE.

SET CURSOR
Durante el proceso del bloque PBO la instrucción SET CURSOR permite que el
cursor se posicione en una ubicación del DYNPRO.

Sintaxis:

SET CURSOR FIELD <campo>.

Ejemplo:

SET CURSOR FIELD 'EDT_CAMPO2'.

Xioma Consulting - ABAP WORKSHOP


209
AMP LI ACI ONE S
Las ampliaciones son objetos del usuario que pueden ser utilizados para expandir la
funcionalidad del sistema con el objetivo de satisfacer necesidades muy específicas por parte del
cliente.
A continuación se explican las posibles técnicas para realizar ampliaciones.

Tablas
Existen dos maneras de ampliar tablas en SAP sin tener que modificar el objeto
mismo:
• Agregando estructuras: estas estructuras están asignadas a una sola tabla y
aparecen disponibles en el objeto al ser activadas y durante el tiempo de
activación del objeto ampliado. Pueden existir varias estructuras de este tipo en
el objeto. Esta ampliación se consigue a través del botón ESTR.APPEND en la
transacción SE11. Si fuera necesario eliminar la ampliación en la tabla, ha de
eliminarse la estructura desde la SE11.

• Includes personalizables: permite utilizar las estructuras en múltiples tablas.


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

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

Customer exit
El customer exit es un módulo de función que permite agregar funcionalidades
propias al estándar de SAP sin modificar los objetos originales. Estas ampliaciones están
definidas para programas, pantallas y menús específicos. Con la transacción SMOD se
pueden visualizar los componentes creados por SAP, mientras que con la transacción
CMOD se activan y administran los proyectos de ampliación.

Xioma Consulting - ABAP WORKSHOP


210
Transacción CMOD

Xioma Consulting - ABAP WORKSHOP


211
Una vez indicada la descripción del proyecto, con el botón de asignación de
ampliación se incluyen los componentes del proyecto (los componentes se pueden revisar en
la transacción SMOD).

Después de agregar las ampliaciones, se pueden seleccionar los componentes


deseados: funciones, menús o pantallas.

Xioma Consulting - ABAP WORKSHOP


212
Los componentes se activan utilizando el botón . Para agregar el código se da
doble click sobre el nombre de la función de la ampliación, y una vez ahí se da de nuevo
doble click sobre el include que se puede editar por el usuario.

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

Xioma Consulting - ABAP WORKSHOP


213
Las estructuras y variables que se pueden utilizar son las que se encuentran en las
pestañas de import, export, modif. y tablas. El código de la ampliación ha de escribirse
dentro del include propuesto. Para crear el include se da doble click sobre él.
Dado que el include se encuentra dentro de un FORM … ENDFORM, no es posible
crear subrutinas ni módulos. De ser necesario crearlos se deberán definir en el grupo de
funciones al que pertenece la ampliación en la zona de usuarios, la cual se encuentra
debidamente etiquetado en el programa de control. Ahí se podrán definir las subrutinas,
módulos y eventos.
Es posible llamar DYNPROs propios utilizando la instrucción CALL SCREEN y
dando doble click sobre el número del DYNPRO para que el sistema la cree
automáticamente.
Para invocar este tipo de ampliaciones desde los programas estándar de SAP se
utiliza un CALL CUSTOMER-FUNCTION ‘nnn’, donde ‘nnn’ es un número de 3 dígitos.
Este llamado únicamente se ejecuta cuando el proyecto de ampliación se encuentra activado
y puede ser invocado todas las veces que se requiera.
Para localizar los user exits se puede buscar la ocurrencia CALL CUSTOMER de
manera global en el programa principal, o en la transacción CMOD en el menú de
Utilidades -> SAP Enhancements y buscar EXIT_*PROGRAMA*.

Al activar un proyecto de ampliación todos los programas afectados por las modificaciones
serán regenerados al ser ejecutados por primera vez despues de cada cambio.

Xioma Consulting - ABAP WORKSHOP


214
Menu Exits

Las ampliaciones de menú permiten agregar opciones en el menú estándar de SAP.


Se pueden utilizar para llamar nuevos DYNPROs o ejecutar otras aplicaciones desde la
transacción donde se han implementado.
SAP creó las ampliaciones de menú definiendo un tipo especial de menú en el Menu
Painter. Estos objetos tienen código especial que inicia con el símbolo “+”, y estos no
aparecen visibles sino hasta que el proyecto de ampliación esté activado. El texto para el
item en el menú y el icono se especifica cuando se activa el proyecto de ampliación, siempre
que SAP lo haya previsto. Existen dos tipos: por customer exit y por BADI.
Cuando existe en Menu Exit en una ampliación, al momento de utilizarle se solicita
que se indique el texto que lo identificara en el menú, este texto es dependiente del idioma.
Para la invocación del subscreen se utiliza la instrucción CALL CUSTOMER-
SUBSCREEN.

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

Xioma Consulting - ABAP WORKSHOP


215
Junto al screen exit siempre habrá un user exit que facilite el envío de información
bidireccionalmente entre el programa estándar y el subscreen utilizando variables globales.
Al igual que otras ampliaciones los screen exits son manipulados a través de
proyectos en la transacción CMOD.

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

• Globales: No están atadas a ningún dynpro en particular o programa. Por lo


que si en la disposición existe el elemento de datos, la función del field exit
será ejecutada.
• Locales: Son aquellos que están ligados a un programa y dynpro específico.
No pueden existir mas de 36 field exists para un mismo elemento de datos. Si
un field exit es creado como local, ya no puede ser definido global.

Para crear un field exit se puede utilizar el reporte RSMODPRF, o se puede invocar
desde la línea de comando de SAP la transacción PRFB, mientras se esta dentro de la
transacción CMOD.
Las funciones de field exit poseen dos parámetros. De entrada el parámetro
INPUT que contiene el valor del elemento de datos en el momento de la invocación y el

Xioma Consulting - ABAP WORKSHOP


216
parámetro OUTPUT que envía el valor al elemento de datos una vez finalizada la
función.

En los Field Exits no es posible utilizar las siguientes instrucciones: BREAK-POINT,


CALL, SUBMIT, COMMIT WORK, ROLLBACK WORK, STOP, REJECT, MESSAGE
I, MESSAGE W. Además el debugger ignora los field exits.

Es importa recordar que para activar los field exist se debe acceder la opción del
menú FIELD EXIT -> ACTIVAR. De lo contrario el field exit no tendrá efecto alguno.
Además debe estar activado el check en el sistema SAP que permite la utilización de los
field exits.

User exits
Los user exists son mejoras al sistema que originalmente fueron pensadas para el
módulo de SD (Sales and Distribution). Los desarrolladores de SAP crearon includes
especiales en algunos programas con rutinas que siguen la convención de nombre
USEREXIT_<nombre>. Estos llamados ya están en programas estándar y utilizan variables
globales. Las rutinas se encuentras vacías para ser completadas con el código que requiera
la ampliación.
Un ejemplo es el programa SAPMV45A con el include MV45AFZB.

Para localizar los user exits se puede utilizar como referencia el listado en el SAP
Reference Implementation Guide. Otro método es buscar la palabra USEREXIT global en
el programa principal.

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

Xioma Consulting - ABAP WORKSHOP


217
personal de servicio al cliente de SAP pueda localizar y reparar problemas en el sistema del
cliente más rápidamente. Una vez que un objeto es modificado ya nunca más pedirá la llave
del SSCR, incluso después de un upgrade.

Factores de éxito al utilizar modificaciones:

1. Siempre que se realicen modificaciones se debe tratar de utilizar código


encapsulado.
2. Utilizar la documentación en línea de SAP
3. No borrar el código estándar (si es necesario solo comentarlo)
4. Mantener un log de modificaciones, SAP recomienda tener en consideración los
siguientes datos: Tipo de objeto, nombre del objeto, rutina (si aplica), módulo,
número de reparación, fecha de cambio, cambiado por, corrección preliminar,
Nota SAP (si aplica), válido para la versión x.y.
5. No modificar objetos básicos del diccionario
6. Liberar siempre todas las ordenes que contienen modificaciones

Xioma Consulting - ABAP WORKSHOP


218

Common questions

Con tecnología de IA

In SAP, transaction codes (T-codes) serve as shortcuts to execute applications or modules like dynpros (dynamic programs or screens), which are GUI elements managing user input and display . Dynpros combine with lock objects to manage data consistency and concurrency. Lock objects ensure that certain data records are exclusively manipulated by a single user at a time to avoid inconsistencies, using locking functions (ENQUEUE/DEQUEUE). This interaction ensures both intuitive access through T-codes and robust data integrity through locking mechanisms, especially critical in multi-user environments like SAP. Program execution typically involves these elements for efficient operation in complex business processes.

Selection screens in ABAP enable user interaction by providing interfaces for input parameters prior to executing reports. Using statements like SELECTION-SCREEN BEGIN OF BLOCK and PARAMETERS, developers can structure input fields, buttons, and logic that display dynamically according to user selections . These screens support options like frames, titles, and positioned item layout, enhancing user experience by logically grouping inputs and actions. Achieving intuitive data input and manipulation thus becomes straightforward, empowering users to tailor report outputs based on their specific input criteria .

The _SCOPE parameter determines how a lock or unlock request in SAP is propagated to an update program. A value of 1 indicates that locks/unlocks are not transferred to the update program, and are removed when the transaction ends. A value of 2 indicates that locks/unlocks are transferred, making the update program responsible for their removal. A value of 3 requires removal by both the interactive and update programs . The _WAIT parameter defines behavior during lock conflicts; if set to 'X', it retries the lock request after a wait, triggering a FOREIGN_LOCK exception if timed out; without it, the lock fails immediately on conflict .

SAP integrates and manages different development components through the use of development classes (packages), which group related objects in the ABAP Workbench . Programs, function modules, and other resources are assigned to packages, defining their organizational context and ensuring streamlined transport across systems via defined transport requests. If a development class is marked as local ($TMP), the objects are non-transportable . This classification ensures that only thoroughly vetted and approved components are integrated into the broader system landscape, while also streamlining the management of dependencies and version control within the development environment.

The ABAP Development Workbench provides several key functionalities to manage program objects, such as conducting a syntactical review, storing, and making programs available for execution in the R/3 environment . It allows users to execute the program, view utilization references, and display lists of related objects. It also provides navigation windows showing recently reviewed objects, enables setting/breaking breakpoints only for the user who set them, and allows inserting templates for function or method invocations to help understand parameter usage . Other utilities include the Pretty Printer for code formatting and the ABAP Help function .

The program status in SAP, which can be productive, test, or system, influences the type of control implemented in program management. A productive status indicates a fully functional program meant for end-users, requiring strict version controls and testing regimes. A test status is used for development and testing purposes outside the production environment. System status programs are essential for system operations and maintenance . These status settings determine access, usage rights, and the level of scrutiny in handling and deploying different program versions.

In SAP, 'customer exit' refers to enhancement points in standard SAP applications where custom code can be inserted without altering the original code. It usually requires activation of project-specific extensions and facilitates customization through menu enhancements, data fetching, or processing logic adjustments . Unlike customer exits, 'screen exits' specifically target the addition of custom fields to SAP application screens, usually implemented as subscreens activated via process logic . While customer exits allow for broader application customization, screen exits are fundamentally about UI-level enhancements.

Encapsulating program logic in 'Include' programs in ABAP allows developers to divide complex applications into manageable parts for easier maintenance, reuse, and organization. This modular approach streamlines updates and expands capabilities without altering the main program structure directly . However, dependencies and reference tracking can become challenging as complexity increases, possibly leading to difficulties in understanding code flow if 'Includes' are overused or improperly documented. The trade-off between flexibility and maintainability must be carefully managed to maximize the benefits of modular design while minimizing confusion and potential errors.

SAP allows the creation of several types of programs, each with distinct purposes. Executable programs (type 1) can be run directly and are used for tasks like generating reports. Module pools (type M) handle multiple screens and require transaction codes. Includes (type I) don't run standalone but are included in other programs. Subroutine pools (type S) hold reusable routines. Function groups (type F) manage function modules in a library. Interface pools (type J) and class pools (type K) handle interfaces and classes respectively. User programs are distinctively named starting with 'Z' .

In ABAP, the MATCH CODE OBJECT is used to assign a specific help object to a selection screen field, even if there is existing search help . This instruction can override default search help with a customized match code that better fits the report's requirements. For instance, using 'SELECT-OPTIONS MAT FOR MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL.' ensures that a defined search pattern is used instead, facilitating more effective data selection and user interaction on screen . This functionality is significant in customizing screen behavior and improving user experience in data input processes.

También podría gustarte