You are on page 1of 125

ABAP

Funcionales

1

Índice
Unidad 1 ......................................................................................................................... 4
Introducción a ABAP Workbench ............................................................... 4
Repositorio Navegador de Objetos ............................................................... 4
Buscar Objetos en el Repositorio. .................................................................. 5
Trabajando con el Navegador de Objetos. ................................................... 6
Desarrollo de Programas y Órdenes de Transporte .................................. 8
Creación de Paquetes (Ex Clase de desarrollo) .......................................... 8
Introducción al Lenguaje de Programación ABAP. ................................... 9
Crear un Programa ABAP. .............................................................................. 11
Activación de Programas ................................................................................ 12
Barra de botos del Editor ABAP .................................................................... 13
Crear Transacciones......................................................................................... 13
Ejercicio 1: Paquete y Orden de Transporte ............................................ 15
Ejercicio 2: Programa ................................................................................. 15
Ejercicio 3: Transacción............................................................................. 15
Estructura de un Programa ABAP ............................................................ 16
Unidad 2 ....................................................................................................................... 17
Introducción al Diccionario ABAP ............................................................ 17
Ejercicio 1: Ingresar a la transacción SE11 y visualizar la tabla SCARR.
...................................................................................................................... 19
Unidad 3 ....................................................................................................................... 20
Introducción a los Eventos ABAP ............................................................. 20
Unidad 4 ....................................................................................................................... 23
Elementos Básicos del Lenguaje ABAP ................................................... 23
Trabajando con DATA OBJECTS .................................................................. 23
Data Types y Data Objects .............................................................................. 23
Sentencias básicas ABAP ............................................................................... 26
Sentencias Condicionales............................................................................... 28
Sentencias LOOPS o repetitivas. .................................................................. 29
Creación de Mensajes. ..................................................................................... 29
Trabajando con ABAP Debugger ................................................................. 31
Selection Screen ......................................................................................... 32
Declarando campos como parámetros. .................................................... 33
Ejercicio 1: Calculadora ............................................................................. 35
Trabajando con Estructuras ...................................................................... 36
Trabajando con ABAP Debugger ................................................................. 38
Trabajando con Tablas Internas ................................................................ 39
Ejercicio 2: Estructuras y Tablas .............................................................. 48
Unidad 5 ....................................................................................................................... 49
Acceso a Base de Datos ............................................................................ 49
Leyendo Tablas de Base de Datos ............................................................... 49
Obteniendo Información .................................................................................. 49
Leyendo Múltiples Tablas de Base de Datos ............................................. 52
Ejercicio 1: Estructuras y Tablas .............................................................. 53
. Unidad 6 ..................................................................................................................... 54
Subrutinas en ABAP ................................................................................... 54
2

Subrutinas ........................................................................................................... 54
Ejercicio 1: Listas - Subrutinas - Eventos ................................................ 59
. Unidad 7 ..................................................................................................................... 60
Procesamiento de Lista Clásica ................................................................ 60
La lista .................................................................................................................. 60
Pantalla de Selección ................................................................................. 68
Ventajas de las pantallas de selección ..................................................... 68
Declarando Campos con Select Options .................................................... 74
Diseño de pantallas de selección con Selection Screen ........................ 76
Authority-Check ................................................................................................. 77
Unidad 8 ....................................................................................................................... 79
Sentencias Útiles ABAP ............................................................................. 79
CONCATENATE ................................................................................................. 79
SPLIT ..................................................................................................................... 79
COMMIT WORK .................................................................................................. 80
TRANSLATE ........................................................................................................ 80
CONDENSE ......................................................................................................... 80
UNPACK ............................................................................................................... 81
Unidad 9: Creación y llamadas a Grupo de Funciones y a Módulos de
Funciones.
1.
2.
3.
4.
5.

Creación de Grupo de Funciones
Creación de Módulos de Funciones
Implementación y llamada a Funciones
Bapis en SAP
RFC: Remote Function Call

Unidad 10: Ampliaciones sobre SAP Standard.
1.
2.
3.
4.
5.
6.

User Exit
Field Exit
Screen Exit
BADIS
Ampliación de Tablas SAP
Ampliación del Menú SAP

3

El repositorio está en la base de datos y siempre es independiente de mandante. Aparte del repositorio. que suelen ser específicos del cliente. es decir. así como objetos definida por clientes. un objeto de repositorio puede ser asesado desde cualquier cliente. la base de datos también contiene tablas de aplicación y customizing. El Repositorio se utiliza para mantener los objetos definidos por SAP.Unidad 1 Introducción a ABAP Workbench Repositorio Navegador de Objetos El repositorio consta de todos los objetos de desarrollo del sistema: los programas. las definiciones de tablas de base de datos y otros objetos. 4 . es decir. módulos de función. que tienen un columna de cliente.

El Repositorio es Cross Aplication. La única diferencia entre los programas son las tablas de donde toman la información. La transacción para acceder es la SE80. Buscar Objetos en el Repositorio. o sea que los programas no están divididos por modulo. 5 .

etc. Con el “Object browser” podemos crear.Trabajando con el Navegador de Objetos. Aquí podremos crear todo tipo de objetos abap. se puede acceder tambien a una transacción especifica por objeto. borrar. Hay que tener en cuenta que cualquier objeto que se cree tienen que comenzar con la letra Z o Y. modificar. Para poder acceder ingresamos en la transacción SE80 y ahí oprimimos el botón Browser de Repository. 6 . La diferencia entre una y la otra es que la Z se utiliza para transportar ese objeto a producción y la Y es para programas de prueba que van a ser borrados. Estas transacciones son las siguientes: SE38: ABAP Editor SE11: ABAP Dictionary SE51: Screen Painter SE37: Function Builder La pantalla del Objeto Navigator se divide en dos áreas:  El área de navegación para mostrar una lista de objetos jerárquica. cualquier objeto de SAP. Para crear cada uno de estos objetos.

 Un área de herramienta para visualizar y editar un objeto mediante el desarrollo de la herramienta adecuada. usted puede elegir las funciones mediante un menú contextual. que se acceso mediante el botón derecho del ratón. En ambas áreas. Puede mostrar u ocultar el área de navegación. 7 . (Pantalla completa on / off). El menú contextual ofrece sólo las funciones que han sido diseñados para el objeto en cuestión.

seleccionar tipo de objeto paquete y entrar en el nombre del paquete en el campo de abajo. (Asegúrese de cumplir con el convenio de espacio de nombres del cliente. Ahora tiene dos opciones: a) En el área de navegación. haga clic en el botón para crear el objeto (F5). En el cuadro de diálogo.Desarrollo de Programas y Órdenes de Transporte Los proyectos de desarrollo se llevan a cabo en un sistema de desarrollo. Después. En el comienzo de un desarrollo el director del proyecto crea una solicitud de cambio “Orden de transporte. el sistema nos permitirá crearlo. Si el paquete no existe. El organizador del transporte crea una tarea para cada empleado y para cada solicitud de cambio.) Luego oprima ENTER. Navegue hasta el Navegador de Objetos SE80. b) Seleccione Edición de objetos en la pantalla inicial de la SE80. con los nombres de los que van a participar de ese proyecto. Los objetos de desarrollo se modifican o crean en un proyecto y son transportados a los sistemas posteriores (prueba de y / o sistema de producción) al finalizar el proyecto. Busque la opción de especificar un paquete y entrar en el nombre del paquete. 8 . Creación de Paquetes (Ex Clase de desarrollo) 1.

Al crear un paquete. pero el 4GL se fue volviendo demasiado complicado para usuarios normales. ABAP (Advanced Business Application Programming) es un lenguaje de cuarta generación. Capa De Transporte: A cada sistema de desarrollo R/3 se asigna una capa de transporte como capa de transporte estándar.2. en el que casi todo el sistema. que suministraba un alto nivel de abstracción para el acceso a bases de datos. Si se utiliza el control de transporte ampliado. Componente De Software: Siempre poner HOME. bases de datos. 3. Componente De Aplicación: Modulo Funcional. Permite conexiones RFC (Remote Function Calls) para conectar a los sistemas SAP con cualquier otro sistema o lenguaje de programación. Se puede definir como máximo un destino de consolidación por Sistema R/3 y capa de transporte. ABAP fue pensado como un lenguaje de programación para que los usuarios finales pudieran manipular la información. con el lanzamiento de la 9 . menos las llamadas al sistema básicas estaban escritas en ABAP. propiedad de SAP. se podrán asignar capas de transporte estándar diferentes a determinados mandantes. se precisa la autorización de gestión del Change and Transport System. palabras alemanas para procesador genérico para la preparación de informes. En 1999. etc. originalmente significaba Allgemeiner Berichtsaufbereitungsprozessor. muy parecido al COBOL en sus orígenes. Cuenta con miles de funciones para el manejo de archivos. Asignarle una Orden de Transporte al paquete: Introducción al Lenguaje de Programación ABAP. Sin embargo. ABAP se mantuvo como el lenguaje de desarrollo para la siguiente versión cliente-servidor de SAP R/3. que fue lanzada al mercado en 1992. que se utiliza para programar la mayoría de sus productos. fechas. una plataforma que permitía a las grandes corporaciones construir aplicaciones de negocios para gestión de materiales y finanzas. se le asigna la capa de transporte del Sistema R/3. por lo que es necesario programadores experimentados para realizar desarrollos. para asignar a un paquete una capa de transporte que no sea la estándar. ABAP. Pasos para crear un paquete: Atributos. En sus inicios ABAP incluía el concepto de Bases de datos lógicas. ABAP fue desarrollado por SAP como lenguaje de informes para SAP R/2 en los años 80. Utiliza sentencias de Open SQL para conectarse con prácticamente cualquier base de datos.

NetWeaver. La programación ABAP no distingue entre mayúsculas y minúsculas. La versión más actual en estos momentos de SAP es la release 6.0. Los dos puntos se usan APRA informar mas de una cosa con la misma palabra reservada y se va separando con coma. soporta ABAP y Java como lenguajes de programación. Toda palabra reservada se cierra con un Punto. SAP lanzó una extensión orientada a objetos denominada ABAP Objects. La última plataforma de desarrollo de SAP. El * se usa como comentario al igual que “ doble comilla.versión 4.6 de R/3. 10 .

su código fuente se distribuye a varios programas. el sistema abre un cuadro de diálogo que le permite crear un programa. en este paso. elegir el tipo de objeto de programa y entrar el nombre del programa en el espacio de abajo. SY-UZEIT: Hora del día Crear un Programa ABAP. Navegue hasta la transacción SE80. Hay tres opciones disponibles: a) En el área de navegación.Hay varias variables de sistema las mas importantes son las siguientes: SY-SUBRC: Determina el estado de finalización de una acción. b) Ingrese el Paquete y la orden de transporte correspondiente. 2. Si el programa no existe. Quite el tilde de TOP Include. siempre se elige programa ejecutable como el tipo de programa. Consulte la ayuda en F1 para más detalles. 11 . 1. Todos los otros programas atributos son opcionales. (De lo contrario. (Solo ingresar programas que comiencen con Z o Y) Confirme con ENTER. SY-DATUM: Fecha del día. Cambiar el título de texto explicativo y.) 3.

Inactivo. 12 . Inactivo tratado.Activación de Programas Los diferentes estados en los que se puede encontrar un programa son Activo. Tengan en cuenta que cuando un programa esta inactivo siempre van a tener otro programa es estado Activo.

Barra de botos del Editor ABAP Cambiar De Editable a Visualización Cambiar de Activo a Inactivo Cambiar de Programa Chequear Sintaxis Activar un Programa Ejecutar un Programa Tabular el programa y poner en mayúscula palabras claves Crear Transacciones Una Transacción es como un acceso directo a un programa. Se ejecutan en el cuadro de comando y se pueden agregar a favoritos. Botón Derecho del Mouse 13 . Se pueden crear desde la transacción SE80 o la SE93. de la siguiente manera.

14 .

Ejercicio 1: Paquete y Orden de Transporte 1) Crear una Paquete y asociarlo a una Orden de Transporte. 15 . Copiar dentro del programa el código propuesto por el instructor. Ejercicio 2: Programa 1) Crear un Programa asociado al Paquete y a la Orden de Tranporte creado anteriormente. Ejercicio 3: Transacción 2) Crear una Transacción y asociarla al Programa creado.

. ….. INCLUDE zi_zcursos_top.. INCLUDE zi_zcursos_form. INCLUDE zi_zcursos_screen. …. …. INITIALIZATION. START-OF-SELECTION. …. ….. ….. 16 . AT SELECTION-SCREEN.Estructura de un Programa ABAP Programa Main: Report ZCURSOS..

Unidad 2 Introducción al Diccionario ABAP El Diccionario ABAP permite la gestión central de todos los tipo de definiciones utilizadas en el sistema R / 3. la definición de un Ayuda de entrada (F4 de ayuda). índices y vistas. Por ejemplo. el establecimiento y la liberación de los cierres. Estructuras y tipos de tabla) para su uso en programas de ABAP o Módulos de Función y en objetos de base de datos como tablas. El Diccionario ABAP también ofrece una serie de servicios que apoyan programa desarrollo. En el Diccionario de ABAP. puede crear tipos definidos por el usuario (Elementos de datos. La transacción para ingresar al diccionario es SE11 17 . y adjuntar una ayuda de campo (Ayuda F1) a un campo de pantalla se apoyo.

Estructura: Z_DATOS_PERSONALES Nombre Apellido Teléfono El Diccionario ABAP esta integrado activamente en el desarrollo y ejecución de programas.Include Z_DATOS_PERSONALES Etc. Hay diferentes categorías en el Diccionario ABAP: Elemento de Datos: Determina la descripción de un campo. Cada cambio tiene efecto inmediato en los programas y pantallas ABAP. Estructuras: Son componentes que pueden tener cualquier tipo.Tablas y vistas de base de datos puede ser definido en el diccionario ABAP. Ejemplo de Estructuras: Tabla de Clientes Cod.Include Z_DATOS_PERSONALES Antigüedad Tabla de Proveedores Cod. 18 . Tipos Tabla: Describen la estructura de una tabla interna.Proveedor . Los cambios en la definición de una tabla o vista base de datos son también automáticamente realizados en la base de datos. Estos objetos son creados en la base de datos. Cliente .

19 .Ejercicio 1: Ingresar a la transacción SE11 y visualizar la tabla SCARR.

Después de eso. AT SELECTION-SCREEN Es utilizado para valida los datos ingresados en la pantalla y para validar niveles de autorización. las declaraciones de este bloque se ejecutan en secuencia. previo a que esta sea mostrada. 3. El orden como se ejecutan es el siguiente: 1. START-OF-SELECTION Es utilizado para la ejecución completa del programa. Es lanzado siempre que se oprime ENTER en la pantalla de selección o cuando se oprime F8. 20 .Unidad 3 Introducción a los Eventos ABAP ABAP es un lenguaje de programación estructurado y secuencial. en tiempo de ejecución se desencadena varios acontecimientos en sucesión. Si existe un bloque de procesamiento en un evento en el programa. INITIALIZATION Se utiliza para inicializar o para cargar valores en la pantalla de de selección. Es recomendable utilizar Subrutinas para la ejecución del código. Es lanzado luego de oprimir F8. Este proceso se ejecuta desde que se lanzo la transacción y hasta que se muestra la pantalla de selección. todos los objetos de datos globales de los programas son los primeros creado en la memoria de trabajo (asignación de memoria). del los cuales podemos destacar:    INITIALIZATION AT SELECTION-SCREEN START-OF-SELECTION Cuando se inicia un programa de ABAP. Para poder manejar diferentes situaciones se encuentran los eventos. 2.

este evento se ejecuta cuando el usuario hace doble clic en una lista. contiene una pantalla de selección con un campo de entrada para una fecha. Sin embargo. 21 .El ejemplo dado a continuación. la fecha actual es la de aparecer como el valor por defecto (DEFAULT SY-DATUM). Si no hay ningún evento implementado dentro del programa. Simplemente. Además de los eventos ya mencionados existen otro que veremos más adelante en este mismo manual. Ej.). no hay instrucciones ejecutadas por el correspondiente y se continua con el evento siguiente. AT LINE-SELECTION. En circunstancias normales. bajo ciertas condiciones (IF) se mostrara el mismo día de la semana siguiente (pa_date = pa_date + 7. En el mismo gráfico se muestra cómo el sistema de ejecución reacciona cuando un bloque falta. asume que todas las sentencias corresponden al STAR-OF-SELECTION.

PARAMETERS: SELECT-OPTIONS: INCLUDE zi_zcursos_form.. …. …. se pueden utilizar otros bloques de procesamiento. El siguiente grafico muestra la estructura general de un programa ABAP: Report ZCURSOS. INCLUDE zi_zcursos_top. TYPES: DATA: INCLUDE zi_zcursos_screen. AT SELECTION-SCREEN. Además de los eventos ya mencionados...Este evento puede ser utilizado. …. …... 22 . Por ejemplo las Subrutinas (FORM ENDFORM) este bloque es ejecutado por la sentencia (PERFORM). INITIALIZATION. FORM ENDFORM. por ejemplo. …. START-OF-SELECTION. ….. para mostrar la información detallada del registro seleccionado en la lista.

length 4 (fixed) F Type for floating point number (F). Esto significa que no contienen la longitud definida. Vamos a echar un vistazo a los tipos estándar predefinidos por SAP ABAP (Implementados con TYPES) en primer lugar. Complete ABAP standard types D Type for date(D). Los siguientes tipos de datos ABAP Standard son completos.Unidad 4 Elementos Básicos del Lenguaje ABAP Trabajando con DATA OBJECTS Data Types y Data Objects El tipo de datos de un objeto define técnicamente y semánticamente sus atributos. Se dividen en dos grupos: tipos completos e incompletos. format: HHMMSS. length 8 (fixed) T Type for time (T). length 6 (fixed) I Type for integer (I). C Type for character string (Character) for which the fixed length is to be specified N Type for numerical character string (Numerical character) for which the fixed length is to be specified X Type for byte sequence (HeXadecimal string) for which the fixed length is to be specified 23 . format: YYYYMMDD. length 8 (fixed) STRING Type for dynamic length character string XSTRING Type for dynamic length byte sequence (HeXadecimal string) Los siguientes tipos de datos ABAP Standard son incompletos. Esto significa que ya contienen el tipo de datos y longitud.

Los tipos de datos Standard son los vistos anteriormente. Local y Global.) Para más información de los tipos de datos ABAP ir a la documentación de las sentencias DATA y TYPES oprimiendo F1 sobre dichas palabras reservadas. Veamos a continuación como declarar con TYPES: Un tipo de datos declarado en el diccionario ABAP es llamado global y puede ser usado por cualquier programada ABAP. (In the definition of a packed number.P Type for packed number (Packed number) for which the fixed length is to be specified. the number of decimal points may also be specified. Los datos tipos de datos globales se podrán ver en el curso de Diccionario de Datos. Ej type C. En este capítulo podremos ver como declarar internamente en nuestros programas cada uno de los tipos de datos. Los tipos de datos Locales son los declarados con TYPES. Hay 3 tipos de categorías de tipos de datos: Standard. son los declarados en el Diccionario SAP. 24 . Los tipos de datos Globales.

25 . Si no ponemos el tipo de datos se asume que es del tipo Standard C. Si falta la longitud en los tipos de datos standard incompletos asume que es de 1 (un) carácter.En el siguiente grafico podremos ver la palabra reservada VALUE para inicializar una variable con un valor predefinido.

En el diccionario ABAP usted tiene la opción de utilizar where-used list para mediante referencia de utilización ver donde se usa. Se define de manera similar a los DATA Elements con el agregado de la palabra VALUE que es un requisito obligatorio. se asume un CHAR de 1 carácter. Sentencias básicas ABAP 26 . Se pueden modificar los tipos de datos sin tocar el código ABAP. Los tipos de datos locales solo pueden ser usadas en el programa que fueron definidas. Usted puede definir constantes con la palabra reservada CONSTANTS.Ejemplo: DATA: MYVAR. En este ejemplo al faltar el tipo de datos y la extensión. En contraposición los tipos de datos globales pueden ser usados por todo el sistema. además de las siguientes ventajas:    Proporcionan la ventaja de la reusabilidad y mantienen la consistencia del sistema. Constantes: Tipos de datos fijos requieren valores fijos que se deben cargar cuando se declaran las constantes.

el contexto del programa se carga en un área de memoria del servidor de aplicaciones y la memoria se pone a disposición de los objetos de datos definidos en el programa. Los siguientes dos sintaxis tienen el mismo efecto:  MOVE var1 TO var2.  var2 = var1. En ABAP podrás utilizar sentencias aritméticas. En ambos casos los objetos var1 y var2 son de diferentes tipos. la conversión de tipos se realiza de forma automática. Todos los Data Objects son asignados previamente con el valor inicial del tipo específico. En este caso. Usted puede utilizar la instrucción MOVE para transferir el contenido de un objeto de datos a otro objeto de datos.Cuando se inicia el programa.. por lo tanto podría haber un conflicto de tipos..      + * / ** SUMA RESTA Multiplicación División Exponencial 27 . excepto si un valor diferente fue pre-asignado mediante la sentencia VALUE. La sentencia CLEAR borra el contenido de la variable.

dependiendo de las necesidades. los demás son opcionales. Si se cumple la condición. De lo contrario. Si la comparación es incorrecta. A excepción del primer WHEN. Apenas encuentre una coincidencia ejecuta esa parte del código y luego salta hasta el ENDIF o el ENDCASE. Usted puede utilizar CASE para distinguir claramente los casos. En ambas sentencias la secuencia de comparación es de arriba hacia abajo. ELSEIF y ramas ELSE son opcionales. el sistema ejecuta el bloque de instrucciones correspondiente. Si el contenido de los campos coinciden. Para obtener información detallada sobre la formulación de una expresión lógica consulte la documentación de la palabra clave en la instrucción IF. Si ninguna de las condiciones especificadas se cumplen. el bloque de instrucciones respectivas se procesa. si está disponible. entonces el sistema ejecuta la rama ELSE.   En la construcción IF puede definir cualquier expresiones lógicas como las condiciones de verificación. la condición especificada en la rama ELSEIF (varios son posibles) se comprueba y así sucesivamente. El contenido del campo especificado en la parte CASE se compara con los objetos de datos que figuran en el WHEN para ver si coinciden.Sentencias Condicionales En ABAP usted tiene 2 maneras de ejecutar diferentes secuencias de sentencias. 28 . el sistema ejecuta la rama OTHERS si está disponible.

DO. Por lo tanto. EXIT. Hay cuatro construcciones de bucle en ABAP. Sentencias ABAP ENDIF. En la DO y en el WHILE el campo del sistema SY-INDEX contiene el número de vuelta que se está ejecutando. Sentencias ABAP ENDSELECT. solo tiene sentido si colocamos la palabra reservada EXIT con alguna condición que amerite salir. DO n TIMES. Creación de Mensajes. se va a ejecutar siempre que la condición sea verdadera.. SY-INDEX contiene siempre el número de vuelta del bucle en el que se encuentra. Sentencias ABAP ENDLOOP. ENDDO.. WHILE <condición>. La sentencia DO ENDDO. IF <condición>. Para crear mensajes se utiliza la transacción SE91. Sentencias ABAP ENDWHILE.. LOOP AT <Tabla Interna>. consultar este campo del sistema sólo tiene sentido dentro de un bucle. 29 . SELECT . la primera tablas de base de datos y la segunda tablas internas. En ella se crea una clase de mensajes y dentro podremos agregar todos los mensajes que queramos. ENDIF.Sentencias LOOPS o repetitivas.. En bucles anidados. FROM <dbtab> . La sentencia WHILE ENDWHILE. La idea es no poner los textos de los mensajes dentro de código sino dentro de esta clase de mensajes en donde también se los puede traducir y que tomen el idioma que el usuario esta logueado. para salir tendremos que cambiar el valor de la condición. La sentencia SELECT y la sentencia LOOP se utilizan para recorrer tablas.

30 . A continuación vemos los distintos tipos de mensajes que podemos seleccionar.Dentro de nuestro programa ABAP con el botón PATRON podremos agregar nuestro mensaje en el código.

debe especificar el número de tres dígitos y la clase de mensaje. Esto nos va a proporcionar que frene en es punto nuestro programa en tiempo de ejecución. Se utiliza el tipo de mensaje para indicar qué tipo de mensaje se va a mostrar.Usted utiliza la instrucción MENSSAGE para enviar mensajes de diálogo a los usuarios de su programa. Mensaje número y clase de mensaje identifica claramente el mensaje que se mostrará. F6. Ya dentro de la aplicación para debuguiar podremos utilizar las teclas F5. Trabajando con ABAP Debugger Hay varias maneras de activar el debug: Colocando un BreakPoint dentro del código de mi programa. 31 . F7 y F8 para ejecutar distintos comandos. Al hacer esto. Colocando la sentencia /h en el cuadro de comando y dándole ENTER. Esto activa el modo debug y va a empezar a debuggiar a partir de ese punto.

La tecla F5 nos permite avanzar paso a paso por nuestro código. La tecla F6 nos permite saltear Subrutinas. o sea línea por línea de código. La tecla F7 nos permite regresar a la sentencia siguiente a una subrutina o un modulo de función. La tecla F8 nos permite finalizar la ejecución o pasar al próximo BreakPoint. ETC. Aclaro que igual se ejecutan pero sin que veamos ese código de ejecución. Selection Screen Figure: Selection Screen: Overview 32 . Módulos de Función.

Las pantallas de selección sirven como interfaces entre el programa y el usuario. Se utilizan
para limitar la cantidad de información a leer de la base de datos.
Usted puede utilizar las palabras reservadas PARAMETERS y SELECT-OPTIONS, para
generar una pantalla de selección con parámetros de entrada.
Además de las pantallas de selección por defecto, usted puede crear pantallas de selección
usando SELECTION-SCREEN BEGIN OF .... y llamar a esas pantallas usando CALL
SELECTION-SCREEN. Cree las variantes para ahorrar los valores de la pantalla de la
selección que se utilizan en varias ocasiones. Estas variantes se pueden recordar para el uso
cuando están requeridas. Una variante es necesaria si un informe se ejecute en un proceso de
trabajo de fondo.

Declarando campos como parámetros.

La sentencia PARAMETERS se declara en lenguaje elemental. Como con la sentencia DATA,
usted puede declarar los parameters con TYPE o LIKE. El sistema genera un campo de
entrada en la pantalla de selección. La cantidad de caracteres en el nombre no puede superar
los 8 caracteres. Los textos de los parámetros de selección se modifican en el menu: Pasar A -> Elementos de Texto --> Textos de Selección.
Usted puede colocar valores por default con la sentencia DEFAULT valor. Si asigna una ID
<pid> MEMORIA, el sistema recupera el valor actual de la memoria de SAP y muestra de forma
automática. Si se declara campos obligatorios con la adición OBLIGATORY, los usuarios no
pueden salir de la pantalla de selección hasta que los valores se han especificado en estos
campos.
El Control automático por el Diccionario ABAP se apaga para pantalla de selección de
informes, de forma predeterminada. Sin embargo, si usted hace una referencia a un objeto de
diccionario que tiene una clave externa definida, con VALUE CHECK hará que el diccionario
verifique que la entrada es válida.

33

Usted puede definir un parámetro como check Box (AS CHECKBOX). Esto crea un campo de
un carácter que puede contener los valores de blanco o X. Usted podrá evaluarlos usando las
sentencias IF/ENDIF.
Usted puede también definir una serie de botones de radio para una pantalla de la selección
con el GRUPO de la adición RADIOBUTTON GROUP. La longitud máxima del nombre para un
GRUPO de RADIOBUTTON GROUP es cuatro caracteres. Solamente un botón de radio en un
grupo puede ser activo y evaluado durante el proceso del programa. Usted puede evaluar el
contenido de los botones de radio usando las estructuras de control de CASE/ENDCASE.

34

Ejercicio 1: Calculadora
Calculadora con 3 parámetros de selección. 2 para el ingreso de números y 1 para el
operando.
Luego con esa información imprimimos el resultado de la cuenta.
1) Declarar 3 parámetros de selección. 2 de tipo numérico y una alfanumérico.
2) Declarar una variable con 2 decimales para poner el resultado.
3) En la estructura del programa validar que solo se pueda realizar (+ - * /)
4) Imprimir por pantalla un mensaje de error si se ingreso un operando invalido.
5) Validar y dar error en caso de que se quiera realizar una división por cero.
6) Realizar la cuenta con un CASE
7) Imprimir el resultado.

35

36 . En el programa. a structure type that is locally declared in the program El siguiente grafico muestra una WORK AREA declarada del tipo de una estructura previamente definida con TYPES. When you set the types. A una tabla transparente A una estructura A tipos de datos declarados localmente en el programa In the program. Cuando usted define los tipos de datos con TYPES. structure variables are defined with the DATA statement. in the same way as elementary data objects.Trabajando con Estructuras En ABAP. Esto le permite combinar variables de diferentes tipos dentro de una unidad lógica denominada estructura. a Dictionary structure . puede referenciarlos a:     Elementos de datos del diccionario. a transparent table (that is then used as a structure type) or . las variables de las estructuras son definidas con DATA. Esto significa que los componentes o variables pueden ser parte de una estructure e incluso de una tabla interna. usted puede definir estructuras. you can refer to .

. BEGIN OF structure_type_name. Los componentes de la estructura son accedidos utilizando el -.Usted puede usar la sentencia TYPES para definir estructuras locales. 37 .. END OF structure_type_name. Por esta razón usted no debe usar guiones en los nombres. Para mas información puede oprimir F1 sobre la sentencia TYPES. . END OF structure_name. Puede asignar cualquier tipo de datos usando TYPE. . También puede definir la WorkArea directamente usando DATA: DATA: BEGIN OF structure_name. ... .

38 . Solo son considerados los componentes con el mismo nombre. Trabajando con ABAP Debugger Cuando estamos en modo debugg. Para asignar individualmente cada valor se utiliza la sentencia MOVE. haciéndole doble click en la estructura podremos ver su contenido.La sentencia MOVE-CORRESPONDING copia el contenido de la estructura de origen a la de destino un componente a la vez.

incluyendo su ordenamiento. La cantidad de información que puede tener cada tabla interna está restringida solo por la capacidad del sistema. Módulos de Función. Tanto el índice y los accesos principales son posibles. 39 . Table kind Usted puede elegir entre 3 diferentes tipos de tablas: Standard. and Hashed. por lo tanto son una forma simple de procesamiento de grandes conjuntos de datos de manera estructurada. Dependiendo el tipo de acceso que utilice. . Las tablas internas. Por esta razón cada componente individual en un registro se lo llama campo o columna. para el ordenamiento según sus campos claves.Trabajando con Tablas Internas Una tabla interna es un objeto que puede tener muchos registros de una misma estructura. El orden de los campos clave se utiliza. El tipo de registro está definido previamente con DATA o con TYPES. Sorted. Cada elemento de una tabla interna se lo denomina registro o entrada de una tabla. Las aplicaciones típicas incluyen:    Obtener información de la base de datos. Key La clave de una tabla interna se compone de los campos claves. Etc. Con STANDARD TABLES la fila de numeración (índice) se mantiene internamente. entre otras cosas. Formatear información para una salida de reporte Formatear información para otros servicios (Ej.) Las siguientes propiedades definen una tabla interna por completo: Line type El tipo de línea describe la estructura de las filas de la tabla. Subrutinas. puede ser más apropiado uno u otro tipo de tabla.

Con las tablas hash sólo tiene acceso clave son posibles. También en este caso. Con SORT TABLES los registros de datos se ordenan automáticamente en orden ascendente de los campos clave. En el grafico anterior podemos ver como declarar una tabla declarada de un tipo de datos proveniente del diccionario. 40 . sobre todo el índice para acceder a la tabla interna. Los tipos de tabla pueden definirse globalmente en el diccionario de SAP o de forma local en el programa con la sentencia TYPES. Con HASHED TABLES los registros de datos se gestionan clave para un acceso rápido mediante el procedimiento de hashing.Usted debe elegir este tipo de tabla cuando se utilizan. Tanto el índice y los accesos principales son posibles. Usted debe elegir este tipo de tabla si todo acceso a la tabla interna con la llave o le gustaría que la tabla se ordenan automáticamente por clave. Usted puede definirle una clave con la sentencia KEY y los campos de la tabla. . En el grafico anterior muestra un tabla interna declarada de forma local. El tipo de datos de una tabla interna es denominado Tipo Tabla. . el índice se mantiene internamente. Una clave única es requerida.

41 . Si la tabla interna es del tipo Standard no es necesario aclararlo.En el ejemplo dado. Cualquiera de los casos descriptos en el grafico anterior declaran una misma tabla interna. Hashed). Sorted. declaramos una estructura con campos apuntando al diccionario y con esa estructura declaramos una tabla interna indicando el tipo de tabla interna (Standard.

en caso contrario inserta el registro. COLLECT Acumula el contenido de una WorkArea en una tabla interna que tengan la misma clave. DELETE Borra registros de una tabla interna.Para el proceso de un solo registro de una tabla interna. Esta operación solo puede ser usada en tablas Standard. MODIFY Modifica un registro de una tabla interna con el contenido de una WorkArea. siempre necesitara la creación de una WorkArea con el mismo formato. READ Copia el contenido de un registro de una tabla interna a una WorkArea. APPEND Agrega el contenido de una workarea en una tabla interna. En el caso de las tablas internas de tipo Sort y Hashed serán ingresados donde correspondan. 42 . En el caso de las talas Standard funciona igual que el APPEND ingresando el registro en la última posición. INSERT Inserta el contenido de una WorkArea en una tabla interna.

ENDLOOP Recorre la tabla interna registro por registro poniendo el resultado en una WorkArea especificada con la sentencia INTO. DELETE Borra los registros de una tabla interna cuando coincide con la condición. APPEND Agrega los registros de una tabla interna a otra cuando se cumple la condición y siempre que tengan el mismo formato. INSERT Inserta el contenido de varios registros de una tabla interna a otra cuando se cumple con la condición.LOOP . . 43 . .

Usted puede insertar un registro en un atabla interna agregando los datos en una WorkArea y utilizando la sentencia INSERT. o sea la vuelta de loop que corresponda. MODIFY itab FROM wa. Para modificar el contenido de la tabla que está recorriendo. La variable de sistema SY-TABIX contiene el número de registro que está trabajando. Según el tipo de tabla será insertado donde corresponda. primero modificar la WorkArea y luego con la sentencia MODIFY modificar la tabla. El ejemplo del grafico anterior muestra el recorrido de una tabla interna y la impresión de los datos que se encuentran en la WorkArea con la sentencia WRITE. 44 . En la tablas de tipo Hashed y en las de tipo Standard el Insert funciona como el Append. Puede leer y editar el contenido de una tabla interna registro por registro usando la sentencia LOOP.

La variable de sistema SY-SUBRC se setea en cero cuando se ha encontrado un registro. En este caso usted utiliza la sintaxis WITH TABLE KEY para elegir el registro correcto. Usted puede agregar la sentencia INDEX para especificar el número especifico de registro a leer. Si no se especifica forma de ordenamiento el mismo es de forma ascendente. Usted puede usar el READ TABLE para leer un registro de una tabla interna.En el LOOP. En el ejemplo anterior el sistema recorre solo los primeros 5 registros. En el ejemplo anterior solo recorre los registros en donde carrid sea igual a LH. 45 . Usted puede usar el READ TABLE para leer un solo registro. usted podrá restringir el acceso a ciertos registros usando el agregado de FORMTO. En el loop usted podrá restringir los accesos usando el agregado WHERE. La tablas de tipo Standard y Hashed pueden ser ordenadas de forma ascendente o descendente por cualquier columna utilizando la sentencia SORT.

usted puede monitorear el contenido de una tabla interna. FREE Borra el contenido de la tabla y también el espacio de memoria que ocupa. borra la cabecera. En las que tienen cabecera.REFRESH Borra el contenido de la tabla interna. En el debug. 46 . CLEAR Para tablas sin header line borra el contenido de la tabla.

Sólo las operaciones con líneas de cabecera! itab1[] = itab2[] .El CON HEADER LINE además en la definición de la tabla interna le da la opción de crear una tabla con la línea de cabecera. porque: -El área de trabajo generados automáticamente tiene el mismo nombre que la tabla interna. itab1 = itab2 . . DATA itab2 LIKE itab1. DATA: BEGIN OF itab OCCURS n. . field1 TYPE .. por lo que ya no tiene que ser especificado explícitamente. END OF itab. . Es por ello que las particularidades más de la línea de cabecera son los siguientes: Si una tabla interna con la línea de cabecera se llama ITAB. -Tablas con líneas de cabecera no están permitidos en: -objetos de datos complejas (estructuras y tablas internas que tienen las tablas internas como componentes). Las operaciones con cuerpo tabla La siguiente sintaxis muy antigua también define una tabla interna con la línea de cabecera. ... a pesar de que no se indica específicamente.. ya que el sistema siempre se refiere al área de trabajo generados automáticamente. 47 .objetos ABAP (objeto de extensión orientadas de ABAP) Sólo mencionar las tablas internas con líneas de encabezado aquí por algunos programas más antiguos todavía los utilizan y tienes que trabajar con estos programas de vez en cuando.. A pesar de las ventajas mencionadas ya no desea utilizar la tabla con líneas de cabecera.. entonces ITAB-tablefield se utiliza para abordar el campo correspondiente en el área de trabajo. El siguiente ejemplo ilustra la situación antes mencionada: DATA itab1 TYPE TABLE OF scarr WITH HEADER LINE. . Usted puede abordar el cuerpo de la tabla con ITAB []. Cuando esto se hace un área de trabajo (línea de encabezado) que se adapte a la tabla se crea automáticamente de modo que la definición adicional de la misma no es necesaria. que no contribuye a hacer que el programa de lectura. field2 TYPE . Esto también simplifica la sintaxis de los comandos de tabla.

Elegir los campos a listar.Ejercicio 2: Estructuras y Tablas 1) Declarar un parámetro de selección del tipo scarr-carrid. carrname y url de esa estructura. 48 . 8) Listar la tabla interna. 2) Declarar una tabla interna del tipo Tipo tabla SPFLI_TAB 3) Declarar una wa del tipo spfli. 9) Copiar con MOVE-CORRESPONDING de WA_SCARR a otra estructura con menos campos. ********************************************** 5) Levantar un registro de la tabla scarr filtrado por el parámetro de selección y poner los valores en la estructura del mismo tipo creada anteriormente. 4) Declarar una wa del tipo scarr. 6) Listar los campos carrid. 7) Levantar la información de la tabla spfli y cargarla en la tabla interna creada anteriormente.

evitando problemas con futuros cambios de base de datos. que es especifico para esa base de datos. En ABAP uno programa en Open SQL. Work Area o tabla Interna en donde guardaremos la información que obtendremos de la Base de Datos. WHERE: sirve para filtrar la información que queremos traer de la base de datos. FROM: Indicamos el nombre de la tabla que a va ser accedida.Unidad 5 Acceso a Base de Datos Leyendo Tablas de Base de Datos Obteniendo Información SQL es la abreviatura de (Structured Query Language). funcionando sobre cualquier base de datos. 49 . SELECT: describe que campos de la tabla van a ser leídos. cambia. cread y lee el acceso a Base de datos. Open SQL es convertido dinámicamente a SQL Nativo. INTO: determina la Variable. El siguiente grafico no muestra de forma genérica como es la sentencia de acceso a Base de datos. Cada Base de Datos relacional tiene un SQL Nativo. un lenguaje que define.

field_n) 50 . La variable de sistema SY-SUBRC igual a 0 nos indica que se han seleccionado registros de la base de datos. En vez de una work Area podrá poner nombre de variables de la siguiente manera: INTO (field_1. ..La sentencia SELECT SINGLE sirve para acceder a un solo registro en la base de datos y el resultado será guardado en un Work Area o en una variable. Solo la sentencia CORRESPONDING FIELDS OF machea por nombre de campo. . Usted puede poner * en lugar de especificar los campos a seleccionar siempre que quiera traer todas las columnas. Si uno no define el Mandante es asumido el mandante actual. Si usted desea seleccionar algunos campos lo podrá hacer después de la sentencia SELECT. En la clausula INTO tendrá que poner una estructura que tenga los campos seleccionados en el mismo orden..

tiene sentido utilizar el INTO CORRESPONDING FIELDS. Por favor. asegúrese de que los tipos de campo correspondientes son también los mismas. una conversión (complicada) ocurre y es posible que los datos incompletos (causadas por cortes) pueden ser transportados a los campos . 51 . porque de lo contrario (como en la declaración MOVE). el orden de campos es diferente). pero tiene una estructura diferente (campos adicionales. que tiene campos con los mismos nombres que los campos en la lista de objetivos. Si desea utilizar una WORK AREA para recibir el registro leído.En el grafico anterior nos muestra la sentencia INTO CORRESPONDING FIELDS OF con la cual podremos tener una work area con los campos en distinto orden y machea por nombre de campo. se llenan en la zona objetivo. Esto tiene el efecto de que los únicos campos del mismo nombre.

si tiene el campo (MANDT) como primer campo clave. Son subrutinas guardadas en el sistema SAP usando la encapsulación de funcionalidad. Leyendo Múltiples Tablas de Base de Datos Hay a menudo un requisito para leer datos de diferentes tablas y mostrarlo.Usted puede usar la sentencia INTO TABLE para copiar los registros seleccionados dentro de una tabla interna. El índice primario. Logical databases: Base de datos Lógicas. la base de datos optimizara automáticamente el índice cuando un programa es ejecutado. Si usted selecciona información de tablas con MANDT sin especificar el mismo. Si una tabla de Base de Datos es frecuentemente accedida por campos que no son claves. Podrá agregarse la sentencia INTO CORRESPONDING FIELDS OF para que ingrese la información en los campos del mismo nombre de la tabla interna. Function modules: Módulos de Funciones. Una tabla de Base de Datos es llamada CLIENT-SPECIFIC. . Hay cuatro formas para acceder a la información usando componentes reusables: . 52 . siempre que ayude a la rapidez del acceso. solo la información del mandante en el cual se encuentra será accedida. (Programas de recuperación de datos que leer los datos de las tablas que van de la mano jerárquicamente). y es creado automáticamente. debería definir un índice secundario por los campos accedidos en orden para agilizar el acceso. consiste en todos los campos claves de la tabla. Después de crear y activar un índice. La variable de sistema SY-DBCNT nos dice la cantidad de registros traídos de la Base de Datos. Optimiza todos los acceso que se realicen por todos o por parte de la clave. La variable de sistema SY-SUBRC en cero significa que por lo menos un registro fue copiado.

Methods of global classes: Métodos de Clases Globales. 53 . Ejercicio 1: Estructuras y Tablas 1) Terminar con el ejercicio de la Unidad 4. La información correspondiente a estas 4 formas se verán en las unidades correspondientes. -En un programa usted utiliza la sentencia Select con el agregado de INNER JOIN. . Figura: Ejemplo de un Table Join Hay 2 opciones para implementar un Join entre tablas: -En el Diccionario ABAP. usted puede crear una vista de Base de Datos. mas adelante. Si no hay reutilización de componentes utilizables disponibles para su selección de datos. usted tiene que aplicar el mismo acceso de lectura. Implementando TABLE JOIN.. BAPIs: Módulos de Función que encapsulan Objetos de Negocio.

sino que solo sean utilizadas o modificadas en la rutina. Usando subrutinas significa que su programa se vuelve mas fácil de mantener porque los cambios de funcionalidad solo tienen que ser aplicados en la subrutina y no en varios puntos de un programa. Usted saca una parte de un programa a una subrutina para obtener una mejor visión de conjunto del programa principal y usar la secuencia correspondiente en diversas ocasiones. Ose variables locales que no quiere que se modifiquen. 54 . Unidad 6 Subrutinas en ABAP Subrutinas Una subrutina es una unidad dentro de la modularización del programa donde se encapsula una función en forma de código fuente. haciendo mas fácil encontrar un error. puede llamar n veces a una misma rutina pasándole valores diferente.. Además puede procesar una subrutina on debugg como una unidad y luego ver el resultado. Como muestra el siguiente grafico.

2) Llamada por valor y resultado y 3) llamado por referencia: 55 . pudiendo cambiarle los nombres: Hay 3 formas de pasar valores a una subrutina: 1) Llamado por valor.La asignación de las variable es uno a uno.

Call by reference La variable f3 es llamada por referencia sin el prefijo VALUE. Call by value and result La variable F2 es llamado por valor y resultado usando el CHANCHING y el prefijo VALUE. En este caso se pasa el valor de la variable se modifica en la subrutina y luego es devuelto el valor modificado. En todo momento estoy modificando el valor original de la variable.La llamada ala subrutina se realiza con la palabra reservada PERFORM. La ejecución de la subrutina se realizara entre el FORM y el ENDFORM. En este caso los valores originales de la variable no se ven afectados. Es un puntero a la memoria de la variable original. 56 . Call by value La variable F1 es llamada por valor usando el USING y el prefijo VALUE.

Existen la variables globales y locales en un programa. Naces cuando la rutina se ejecuta y mueren cuando esta termina. Solo es obligatorio cuando son tablas o Work Areas. Work Areas y tablas internas. Se pueden pasar variables. y con CHANGING una variable. En el siguiente ejemplo se esta pasando con USING una variable y una tabla interna. La globales son las declaradas en el TOP y pueden ser usadas en cualquier parte del programa.Se debe especificar el tipo de datos de los objetos que se están recibiendo. y las locales son las declaradas en una subrutina. 57 .

58 .

9) Si el usuario realizo un doble click sobre una línea imprimir la siguiente información: a. connid fldate seatsmax seatsocc seatsocc_b seatsmax_f seatsocc_f percentage(2) TYPE p DECIMALS 2. custtype. 4) Pantalla: Declarar un parameter de tipo S_CARR_ID y Declarar un select-options del tipo wa-connid. colocando el resultado en la tabla interna también declarada anteriormente. c. La guardada anteriormente con hide más: b. 7) Y guardar con HIDE la siguiente info: carrid. 3) Declarar 2 tablas internas de los tipos de estructuras declarados anteriormente. seatsocc.Subrutinas .'%'. Cada uno de estos tiene su tipo con el mismo nombre en la tabla del DD sflight. connid y fldate. order_date. customid. 2) Declarar una work area del tipo antes creado y otra de tipo sbook. 59 . class.Eventos 1) Declarar un tipo estructura con los siguientes campos: carrid TYPE sflight-carrid. cancelled.Ejercicio 1: Listas . seatsmax. filtrada por carrid. Imprimir los siguientes datos loopeando la tabla bookid. (seatsocc_b + seatsmax_f + seatsocc_f) / seatsmax Imprimir: carrid. 6) Por cada loop endloop imprimir por pantalla la siguiente información: En el campo de la estructura percentage calcular el porcentaje de ocupación del avión. Guardar dicha información en la tabla interna del tipo sbook creada anteriormente. percentage. fldate 8) Si en el select no se encontró ningún dato. smoker. imprimir un mensage advirtiendo eso. 5) Hacer un select a la tabla sflight filtrando con los parámetros de selección declarados anteriormente. fldate. Realizar un select a la tabla sbook. connid. connid.

Unidad 7 Procesamiento de Lista Clásica La lista El objetivo principal de una lista es para mostrar los datos con un mínimo de esfuerzos de programación. .Pantalla: Se puede añadir colores e iconos. 60 .Internet / Intranet: El sistema es capaz de convertir automáticamente a formato HTML. .. por ejemplo. el uso de programas de hoja de cálculo). Las listas también se adoptarán las necesidades especiales de los datos empresariales en cuenta: -Las listas pueden ser diseñados en varios idiomas: Los textos y las cabeceras en la lengua de inicio de sesión cada vez que una traducción correspondiente está disponible. .Guardar: Le permite guardar listas en el sistema SAP.Las listas pueden mostrar los valores monetarios en la moneda correspondiente. Las siguientes opciones están disponibles cuando se programa una lista: . así como exterior (para su posterior procesamiento.Impresoras . .

A continuación. 61 . La Interfaz de usuario.Figure: Standard List Functions La lista estándar de interfaz gráfica de usuario ofrece al usuario varias funciones: Usted puede utilizar el Pintor Menú para adaptar la lista predeterminada de interfaz a tus propias necesidades. primero debe activar su programa. A continuación. crear la lista mediante la ejecución del programa. Figure: List and Column Headers Cada lista puede tener una cabecera de línea única lista y hasta cuatro líneas de encabezados de columna. lección proporciona más información sobre este. puede mantener los encabezados directamente encima de la lista mediante el menú Sistema → Lista → Lista de cabecera. Si no se define cabecera de la lista. Para el mantenimiento inicial de los titulos. el nombre del programa (breve descripción) se utiliza como el encabezado.

aparecerá automáticamente en la lista. a partir del editor en el que se carga el programa puede llegar al entorno de mantenimiento para el cambio de las cabeceras seleccionando Pasar a → Texto Elementos encabezados Lista → . los elementos pertinentes de texto siempre se muestra automáticamente en el idioma de inicio de sesión del usuario (automática de idioma).. pertenece a los elementos de texto de un programa. como los encabezados. así como un texto traducible y. dirección que el símbolo de texto en su código fuente utilizando la sintaxis se describe a continuación y haga doble clic en su ID (navegación hacia delante).. En lugar. 62 . Arriba). Con el fin de especificar un símbolo de texto más intuitiva también puede utilizar la sintaxis siguiente en lugar de TEXT-xxx: xxx'.' debe ser el texto del símbolo de texto en el idioma original del programa.'(). la dirección en un símbolo de texto con texto-xxx. Traducción de los elementos de texto. Aquí. Figura: capacidades multilingües de las listas Los elementos de texto de un programa . seleccione el menú Pasar a → → Elementos de Texto Texto Símbolos o . Para el diseño de textos en la lista del cuerpo en varios idiomas y utilizar el lenguaje automático. Si desea cambiar el encabezado de mantenimiento (seguimiento de mantenimiento) . símbolos de texto se utilizan. Hay dos opciones para definir los símbolos de texto para su programa:.La próxima vez que inicie el programa. Desde el Editor de ABAP. Se trata de traducir los elementos de texto de su programa de elegir el menú Ir → Traducción de la ABAP-Editor. En tiempo de ejecución el texto se inserta en la lengua de inicio de sesión del usuario si existe la traducción correspondiente (ver.'.. Un símbolo de texto se compone de un xxx ID de tres dígitos alfanuméricos. Desde su programa. Sugerencia: Tenga en cuenta que los elementos de texto también tiene que ser activado.. entonces usted no tiene que comenzar de nuevo el programa y generar la lista.se incluyen también en la cabecera .se puede traducir a diferentes idiomas. Cuando un usuario ejecuta un programa.

se genera automáticamente. usted puede leer los datos solicitados por el usuario y salida de ellos. con la declaración ESCRITURA. el evento ABAP AT-LINE-SELECTION selección se ha disparado. a continuación. Allí. Los detalles lista con los datos de salida. Si usted quiere tener la pantalla del sistema una lista con la información requerida detallado (lista interactiva) como la respuesta a esta acción del usuario. debe implementar esto en su programa en la forma de un bloque de tratamiento correspondiente. Consulte la documentación de la palabra clave de ABAP para estos dos estados. que. Además de la instrucción WRITE. sobrescribe. también puede utilizar SKIP y Uline a la estructura de la lista. Figura: Generación de una lista de detalles Cuando el usuario selecciona una lista de base por medio de doble clic en la tecla F2 o función.Figura: Generación de un Listado Básico Lo anterior muestra gráfica de la generación de la lista básica como introducción a la lista de detalles. Al 63 . la lista de base.

o la tecla de función F3.1. un botón con el símbolo de la lupa también aparece encima de la lista. el usuario puede volver a la lista de base y elegir otra fila. Listas Figura: Generación de varios detalles La selección de filas en la lista de detalles también desencadena el evento AT LINESELECTION.pulsar el botón con la flecha. Verde. . el sistema muestra el mismo nivel en que la selección se llevó a cabo la fila. cada regresar a la lista anterior se reduce el nivel SY-lsind en 1. Marcado de la fila de la lista y luego elegir este botón tiene el mismo efecto que hacer doble clic en la lista de fila. por medio de una instrucción CASE). de la lista básica. Sugerencia: Si un bloque de AT LINE-SELECCIÓN se implementa en el programa. Si no se genera la lista de detalles de una selección de filas en el bloque de conducto AT. 64 . Usted puede utilizar el campo del sistema SY-lsind para ello. SY-lsind se reduce automáticamente a uno. Hasta 20 niveles de lista son posibles. Posteriormente. Por lo tanto usted debe ser capaz de determinar dentro de este bloque en el que la lista de la selección de la fila actual se hizo para que pueda reaccionar adecuadamente. El valor de SY-lsind se debe utilizar para controlar el procesamiento en el bloque de AT LINEselección (por ejemplo.0. El gráfico anterior muestra el valor de SY-lsind y como se establece en cada caso: Cada selección de filas aumenta automáticamente sy-lsind por 1. para la lista de los primeros detalles. Esto significa que el bloque de procesamiento correspondiente en el programa se ejecuta en este caso también. Este campo muestra la lista actual nivel: . Una declaración WRITE se ejecuta siempre en el nivel actual lista. y así sucesivamente. a continuación.

Figura: Ejemplo de sintaxis simple
El programa de ejemplo anterior tiene la siguiente función:
- En la lista básica, el texto. Básica lista. es la salida seguido por el sy-lsind valor actual de 0.. - Cuando una fila está seleccionada lista de base, el texto .1 er detalles lista. aparece en la lista
se detallan seguida de la SY-lsind valor actual de 1.
- Cuando el usuario selecciona una fila de la lista de detalles, él o ella recibe una lista de
detalles segunda en la que el texto .2 ª lista de detalles. aparece seguido por el valor actual de
la SY-lsind 2.
- Si una línea de la lista de detalles es segundo seleccionado, SY-lsind se incrementa a 3, pero
no hay una lista más información se genera. Por lo tanto sy-lsind se reduce automáticamente
en 1 y la lista de detalles segunda se muestra de nuevo.

Figura: Ejemplo de aplicación de una lista de detalles
El gráfico anterior muestra un ejemplo de aplicación de un programa con una lista básica y una
lista de detalles:
- Las conexiones de vuelo con datos detallados se debe mostrar en la lista básica. Se trata de
leer desde una tabla de base de datos SPFLI.
- En la lista de detalles, los planes de vuelo para la conexión de vuelo seleccionado debe
aparecer con los datos detallados correspondientes. Estos se leen de la tabla de base de datos
SFLIGHT. Con el fin de poder seleccionar la información pertinente para la lista de detalles
cuando una fila de lista de base se selecciona la fila seleccionada o por lo menos los valores

65

clave de la fila debe estar disponible para el evento AT LINE-SELECTION. Los gráficos
siguientes muestran cómo se puede implementar.

Figura: Almacenamiento en búfer de datos específicos de fila en el Área Ocultar
Con el fin de poder tener acceso a los principales valores de la fila seleccionada cuando
una fila de lista de base se selecciona, usted tiene que aplicar el siguiente concepto:
- Para cada fila lista básica, los valores clave de interés se almacenan en el área HIDE
dentro del programa.
- Cuando se selecciona una fila los datos que se ha ocultado para esa fila particular, se
pondrá a disposición de nuevo.
El registro específico de los valores fundamentales en el ámbito HIDE ocurre por medio de la
declaración HIDE (aquí: HIDE: wa_spfli-carrid, wa_spfli-connid.), Que debe ser ejecutado
inmediatamente después de la generación de cada fila lista de base. Cuando se selecciona
la fila, los valores clave de interés son transportados de regreso a los campos de origen (en
este caso-wa_spfli carrid y wa_spfli connid-) y el evento AT LINE-La selección se ha disparado.
El siguiente gráfico ilustra este.
Sugerencia: Usted no tiene a la salida de los campos HIDE con la declaración de
escribir primero. Esto significa: para cada fila de lista de base, también puede
almacenar información que no aparece en la lista básica en el área HIDE por medio de
la declaración HIDE. El campo HIDE también puede ser un "plano" estructura.

66

Figura: Flujo de datos para la selección de fila
Sugerencia: las listas de los detalles no han fijado encabezados estándar como listas básicas,
ya que pueden variar de forma dinámica. Por lo tanto, puede que tenga que aplicar sus propias
cabeceras utilizando instrucciones WRITE.
El siguiente gráfico muestra la totalidad AT LINE-SELECTION bloque del programa de ejemplo.
En este bloque, básicamente de datos (en este caso los horarios de vuelo) se lee y la
producción por medio de los valores HIDE que se han transportado a los campos de origen.

Figura: Fragmento de código fuente (Ejemplo de Aplicación)

67

si el programa crea una lista de datos de una tabla de base de datos muy grandes. a menudo tiene sentido para el usuario para seleccionar los registros de datos que realmente requiere la lectura y sólo los de la base de datos. las pantallas de selección se utilizan para introducir criterios de selección para la selección de datos. Por ejemplo. Además de reducir el requisito de memoria. Figura: Pantalla de selección de atributos 68 .Pantalla de Selección Ventajas de las pantallas de selección Figura: Arquitectura y efectos de selección de pantalla En general. esto también reduce la carga de red.

Cada pantalla de selección contiene un icono de información (también conocido como una ayuda "en pantalla" icono).Si el campo de entrada se define mediante un elemento de diccionario (por ejemplo. . utilizando la F1 (Ayuda para entradas) la tecla de función. . también se puede aplicar selecciones complejas (SELECT-OPTIONS) en la pantalla de selección. entonces el campo de la documentación (documentación del elemento de datos) se pueden mostrar en el campo de entrada. El usuario puede entonces introducir intervalos. que permiten entradas complejas.Usted puede ahorrar fácilmente completado pantallas de selección de variantes para su reutilización o el uso en el fondo la operación. . datos de elementos). 69 . las condiciones comparativas o incluso los patrones como las restricciones. En tiempo de ejecución de los textos se muestran automáticamente en el idioma de inicio de sesión del usuario.La pantalla de selección tiene las siguientes funciones estándar: -Textos sobre la pantalla de selección (textos de selección) se puede mantener en varios idiomas.La ayuda del elemento de datos de búsqueda para mostrar las posibles entradas se pueden llamar con el F4 (Ayuda para entradas) la tecla de función.El sistema verifica los tipos de forma automática: Si el usuario escribe algo que no se corresponde con el tipo del campo de entrada. la interfaz gráfica de usuario SAP lo ignorará.Además de las entradas solo valor (PARAMETERS). Figura: Uso de las opciones de selección El gráfico anterior ilustra el uso de selection options. (Automática del idioma) . . Seleccione este icono para mostrar información adicional. por lo que ni siquiera van a aparecer en la pantalla de selección.

está disponible como una ayuda de entrada (ayuda F4). la ayuda de búsqueda del elemento de datos. de la que puede seleccionar uno para la entrada. entonces antes descrita información semántica del elemento de datos está disponible en la pantalla de selección. Figura: Selección de Textos 70 .) Si el campo de entrada se escribe con un campo de estructura que se define a su vez se utiliza un elemento de datos.La etiqueta del campo a largo del elemento de datos se puede copiar para describir el campo de entrada en la pantalla de selección (selección de texto). La documentación del elemento de datos está disponible automáticamente como una ayuda de entrada (ayuda F1).Si ayuda de busqueda está relacionada con el elemento de datos. Si el campo de la estructura también se copia en un buscar ayuda. (Una ayuda de búsqueda es un objeto independiente diccionario que muestra una lista de posibles valores de entrada para el usuario (posiblemente con otra información). Sobrescribe. (Véase el gráfico siguiente).Figura: Información sobre Tipos Semántica Mundial en la pantalla de selección Si un campo de entrada se escribe con un elemento de dato. consulte la documentación en línea para el Diccionario ABAP. la siguiente información semántica adicional está disponible en la pantalla de selección: . . Para obtener más información. entonces esto.

el usuario debe contar con la autorización correspondiente (en el sistema de producción). Para definir las variantes específicas-programa por iniciar el programa. Si el campo de entrada se escribe directamente o indirectamente con un elemento de datos. elija el menú Herramientas → Transporte Solicitud (Tools → Transport Request) para especificar las variantes para ser transportado. los textos de selección son mostrados en la lengua de inicio de sesión del usuario (automática de idioma). Allí. Todas las otras variantes son específica del cliente y debe ser transportado por separado. donde se puede realizar en marcha para su mantenimiento siga variantes con respecto a los valores y atributos. Puede implementar su traducción con el menú Ir →.Traducción (GoTo → Translation..). textos de selección pertenecen a los elementos de texto del programa. Variante conseguir . Esto le proporciona una opción fácil para la normalización de los textos. puede reemplazarlos por los textos de selección correspondientes. Si las variantes ya han sido definidos para un programa. En tiempo de ejecución. Con el fin de poder definir sus propias variantes. los nombres de los campos de entrada aparecen como su descripción de forma predeterminada. seleccione el menú Ir GoTo → Text Elements→Selection Texts para su mantenimiento. Este botón se enumeran las variantes definidas para la selección. Sin embargo. Después de que el programa ha sido iniciado. puede copiar el nombre del campo a largo de uno de los textos guardados en el diccionario (. así como solicitar una. Diccionario de referencia.. Desde el Editor de ABAP. como entradas de usuario no son posibles en el fondo. completando la pantalla de selección y guardarlo (botón de disco). Para obtener más información sobre las variantes. el usuario puede cargar variantes a la pantalla de selección respectivo para facilitar repetidas o casi idénticos entradas idénticas. Variantes con el prefijo de nombre 'CUS &' son variantes del sistema.. que luego se puede traducir a los idiomas más que usted requiere. Desde el Editor de ABAP. Usted tiene que incluir una variante cuando se programa un programa de ABAP en corrida de fondo. a continuación. Figura: Variantes Las pantallas de selección efectuada son las variantes del programa.. un pulsador adicional aparece en la pantalla de selección con la bandera de texto. Son transportados como objetos del repositorio común y no específica del cliente. El transporte pasa cuando la solicitud se libera. Al igual que los encabezados de la lista y los símbolos de texto. si el programa tiene una pantalla de selección.En la pantalla de selección. También puede definir los diferentes atributos de la variante. 71 . seleccione el menú Ir → variantes (GoTo → Variants) para ir a la variante de la gestión de su programa. Pero también puede definir variantes en el sistema de desarrollo y luego los han transportado al sistema de producción.). elija el botón de información sobre atributos de la variante en la pantalla a fin de mantener sus atributos de la variante.

genera una pantalla de selección con una opción de entrada correspondiente. Una vez más. . Si el usuario introduce un valor y elige Ejecutar. los valores de entrada se transfieren a la validez interna y. pero con la adición DEFAULT.Opciones de entrada en la pantalla de selección Figura: un solo valor de entrada (Declaración PARÁMETROS) Lo anterior muestra el uso de gráficos y el comportamiento en tiempo de ejecución de una variable de entrada se define mediante una instrucción PARÁMETROS. Una asignación de valores por defecto por medio de la adición DEFAULT o el valor de asignación antes de mostrar la pantalla de selección (inicialización) se muestra en la pantalla de selección como un valor predeterminado que se puede sobrescribir. Una variable de entrada se define en la misma forma que una variable ordinaria. Usted tiene que considerar tres características: .La asignación de un valor predeterminado no se implementa con la adición de valor. implícitamente. se puede utilizar para restringir la selección de base de datos. la definición de dicha variable de entrada crea una variable en el sistema e.No puede ser escrita con la F tipos estándar. Figura: Introducción de restricciones complejas (la instrucción SELECT-OPTIONS) 72 . .El nombre de la variable de entrada puede ser de hasta ocho caracteres de longitud. La única diferencia es que la palabra clave Parámetros se utiliza en lugar de datos. por ejemplo. cuerda y XSTRING.

se genera una fila con los valores "E" (exclusivo). entradas del usuario son transportados a la tabla interna generada automáticamente cuando se selecciona Ejecutar. Para más detalles. . . consulte la documentación de la palabra clave para SELECT. opción.. la condición de compuestos siguientes se utiliza para limitar la selección de datos: ( I_1 OR .. Sugerencia: El operador IN también se puede utilizar en expresiones lógicas: SIwa_spfli carrid EN so_car.. El contenido de la tabla se interpreta de la siguiente manera: Si i_1. Esta definición crea una tabla interna con el nombre especificado en el programa (en este caso so_car) y genera una pantalla de selección con una opción de entrada para limitar la variable especificada (en este caso-wa_spfli carrid). Para definir una opción de selección. los mismos tres particularidades de aplicación a la declaración parámetros (véase más arriba). OR I_n ) AND ( NOT E_1 ) AND . que se crean entradas para los que la entrada del usuario: -Si "LH" se introduce. las condiciones en que se aplica siempre en el campo respectivo. Y I_n E_1. "BA" y del Espacio. Evento después de la Selección Screen Figura: En el evento AT SELECTION-SCREEN 73 . "LH" y del Espacio. su contenido se muestra en la pantalla de selección tal como se sugiere las condiciones que se pueden sobrescribir. AND (NOT E_m ) Si la tabla está vacía porque no hay restricciones. Si la tabla interna de la opción de selección se rellena con la adición DEFAULT o APPEND declaración antes de la pantalla de selección (inicialización... "EQ" (igual). La tabla interna llena los criterios de selección se inscriben pueden ser utilizados para la selección de bases de datos.opciones de selección se determinarán en el momento de usar el nombre SELECT-OPTIONS PARA data_object.Si el intervalo de "AA" a "DL" se introduce. .. Este cuadro siempre tiene cuatro columnas: signo. . .. Lo anterior muestra gráfica. se genera una fila con los valores "I" (inclusive). "BT" (entre). donde nombre es el nombre de la opción de seleccionar y data_object es una variable ya definida. Son los e_m incluido / condiciones exclusivas de la tabla interna. de bajo y alto. "EQ" (igual). se genera una fila con los valores "I" (inclusive). Norma.OPTIONS. "AA" y "DL”.. . como se ilustra en el gráfico.Si "BA" se introduce como el valor único que se excluye.

NP (Contains Pattern not) The selection set is the union of all includes (I1... option. SELECTOPTIONS permits a range of values and complex selections instead of just a single inputready field. NE. CP (Contains Pattern). This field must be declared in a DATA or TABLES statement. you can maintain the selection text using the menu path Goto → Text elements → Selection texts.. . and high. 74 . BT (Between). all rows are returned from the database. If no values are entered in the SELECT-OPTIONS object. Unlike thePARAMETERS keyword. Just as with PARAMETERS. SIGN: I (Include). This table has four columns: sign. low. NB (Not Between). GT. LE.Declarando Campos con Select Options Figure: Selections with SELECT-OPTIONS The SELECT-OPTIONS keyword is a declarative language element with the same eightcharacter naming restriction as PARAMETERS. In) minus the union of all excludes (E1. Use the addition FOR to specify the field against which the system should check selection entries.. Both high and low fields inherit the attributes of the referenced field. Each line of the selection table <seltab> formulates a condition using one of the following relational operators: . LT. OPTION: EQ. The SELECT-OPTIONS keyword generates an internal table <seltab> with a standard structure and a header line.. E (Exclude) .. Em).. GE.

DEFAULT enables you to set default values for low or low and high parameters. You can use OPTION and SIGN to set default values for option and sign .Figure: SELECT-OPTIONS with Multiple Selection Criteria When the user makes entries in a SELECT-OPTIONS object. To change the default entries for table fields SIGN and OPTION. Figure: Syntax of the SELECT-OPTIONS Statement Additions to the SELECT-OPTIONS statements are: . use the menu Edit → Delete selection criterion. If the traffic signal icon is green during Select. the system offers alternatives appropriate for the selection. which differ from the normal default <value> addition. choose menu Edit → Selection options. To delete a table entry. If multiple selections are present. Each selection criterion can be used to make multiple selections unless otherwise defined. A red light indicates (E)xclude. because the attribute set in the Dictionary takes precedence. This addition is not permitted for Dictionary fields.. the color of the arrow changes from white to green. the system retrieves the current value from the SAP system memory and displays it automatically. You can set a default value for a SELECT-OPTIONS keyword with the DEFAULT <value> addition. the system automatically populates the internal table. LOWER CASE suppresses conversion of the entry to upper case. If you assign a MEMORY ID <pid>. 75 . there is an (I)nclusive in the sign column.

OBLIGATORY generates a mandatory field. . NO INTERVALS suppresses the seltab-high (upper interval limit) entry on the selection screen. Diseño de pantallas de selección con Selection Screen Figure: Designing the Selection Screen I You can use the SELECTION-SCREEN keyword to design the layout of the selection screen. 76 . You can nest frames to a maximum depth of five. You can use the additional screen. . You can group screen elements that logically belong together using the extension BEGIN OF BLOCK <block> . Before designing a selection screen. You can declare the title as either text-xxx or a field name with maximum length of eight characters. you should become familiar with the screen design guidelines listed in transaction BIBS. Figure: Designing the Selection Screen II You can display multiple parameters and comments on the same line on the screen.. You can assign a title to the block only if you use a frame. to specify ranges. you set the text at runtime in the INITIALIZATION event. NO-EXTENSION suppresses multiple single or multiple range selections. You can place a frame around the screen elements using WITH FRAME. Multiple selection. In the second case. A question mark is displayed in the entry field in the selection screen and the user should enter a value.

Después de que se haya procesado el bloque de proceso correspondiente.. Adding COMMENT . se acciona el acontecimiento siguiente de START-OF-SELECTION y el proceso relevante comenzado. If you hide the parameter (selection variant: attribute invisible). 77 .. The COMMENT parameter enables you to include text in the line.. si Enter fue elegido. FOR FIELD <f> ensures that F1 Help for the field <f> is displayed for the comment text and the parameter. Sin embargo.To do so. si ejecute fue utilizado. you need to enclose the parameters between the SELECTION-SCREEN BEGIN OF LINE and SELECTION-SCREEN END OF LINE statements. The latter are low and high positions for the SELECTOPTIONS field on the selection screen. the comment text is also hidden. Comment text must always have a format (position and output length). The position can be set using a data field or pos_low or pos_high. BEGIN OF LINE . END OF LINE). Authority-Check En la pantalla de la selección EN el acontecimiento AT SELECTION-SCREEN están ambos accionados cerca el elegir Enter tan bien como ejecute (F8). You can use POSITION <pos> to set the cursor for the next output position (only within . la pantalla de la selección se exhibe otra vez....

tiene sentido para la aplicación requiere comprobaciones de autorización de entrada y en este bloque de tratamiento. Por lo tanto.Figura: Diálogos de error en AT-SELECCIÓN DE PANTALLA Inmediatamente antes de procesar el AT SELECTION-SCREEN bloque. un mensaje de error en el START-OF-SELECTION bloque se mostrará en el programa de terminación. sólo tiene que enviar un mensaje de error al usuario y tener la pantalla de selección de muestra de nuevo. " SELECTION-SCREEN. Si el resultado de verificación es negativa. Figura: Ejemplo de Sintaxis: Consulte con autorización de diálogo de error Información adicional se puede encontrar en la documentación de palabras clave. Por el contrario. 78 . las entradas de usuario se transfiere automáticamente a las variables correspondientes en el programa. El usuario tiene entonces la opción de hacer nuevas entradas. El siguiente gráfico ilustra un simple programa de ejemplo con el cheque de autorización y de diálogo de error en la pantalla de selección.

Sintaxis: SPLIT <campo> AT <delimitador> INTO <c1> .. Esta sentencia concatena los campos campos <c1> . <cn> en el campo <campo>.. SY-SUBRC = 4.. Esta sentencia utiliza el campo indicado en <delimitador> para separar los campos <c1> . SY-SUBRC vale 0. En caso contrario SY-SUBRC vale 4.. La variable NAME valdría: IvanRodrigoBaños Ejemplo 2: DATA: ONE(10) VALUE 'Ivan'. Con la cláusula SEPARATED BY se puede especificar un campo alfanumérico (el campo <s>) que será utilizado como separador entre los campos <c1> . TWO(3) VALUE 'Rodrigo'. También se puede situar las partes del campo que se quiere separar en una tabla interna con el siguiente formato: SPLIT <campo> AT <delimitador> INTO TABLE <tabla>. gracias a algún separador. <cn> el contenido del campo <campo>.. NAME(20). SEPARATOR(4) VALUE 'GAUSS'. NAME(20). La variable NAME valdría: Ivan Rodrigo Baños. Si no hay especificado los suficientes campos para poder separar todo el contenido del campo <campo>. THREE(10) VALUE 'Baños'.. <cn>. Sintaxis: CONCATENATE <c1> . SPLIT Definición Divide un campo alfanumérico en varios campos. <cn>. CONCATENATE ONE TWO THREE INTO NAME. <cn> INTO <campo> [ SEPARATED BY <s> ].Unidad 8 Sentencias Útiles ABAP CONCATENATE Definición Se utiliza para concatenar varios campos alfanuméricos en uso solo.. 79 . Si todos los campos destino son lo suficientemente grandes como para almacenar las partes de <campo>. SY-SUBRC = 0. TWO(3) VALUE ' Rodrigo'. Los espacios en blanco se ignoran durante la operación. es necesario el truncamiento. si por el contrario.... sobre el último se rellena el resto del campo <campo>. Ejemplo 1: DATA: ONE(10) VALUE 'Ivan'. CONCATENATE SPACE ONE TWO THREE INTO NAME SEPARATED BY SPACE. Si el resultado de la concatenación entra en el campo <campo>. THREE(10) VALUE ' Baños'.

END OF ITAB. SY-SUBRC toma un valor distinto de 0. la primera en blanco. la primera de ellas indica el carácter a sustituir.'. SPLIT 'STOP Two STOP Three STOP ' AT 'STOP' INTO TABLE ITAB. ONE(10). Con la cláusula AND WAIT. a veces es necesario deshacer algunos cambios realizados en la base de datos. la segunda contiene "Two" y la tercera contiene "Three". COMMIT WORK Definición A veces es necesario asegurarse que los cambios en la base de datos se han realizado. Si la actualización es satisfactoria. Peter'. TRANSLATE <campo> USING <regla>. ONE valdrá "Charly" y TWO tendrá el valor "John ". Estas sentencias tienen un papel importante en la programación de transacciones de diálogo. 80 . antes de continuar con el proceso. TWO(10). Y con la opción LOWER las letras mayúsculas se convierten en minúsculas. el programa se para hasta que la tarea de actualización termina.Por cada parte del campo <campo el sistema añade una nueva línea en la tabla interna <tabla>. CONDENSE Definición Para borrar espacios en blanco superfluos en campos alfanuméricos. o para realizar sustituciones de caracteres a través de ciertas reglas. en caso contrario. SY-SUBRC vale 0. Para utilizar reglas de conversión se utiliza la siguiente sintaxis. La regla de sustitución contiene pares de letras. Con la opción UPPER. La tabla interna tendrá tres líneas. DELIMITER(2) VALUE '. SPLIT NAMES AT DELIMITER INTO ONE TWO. <regla> puede ser una variable. las letras minúsculas de <campo> se convierten en mayúsculas. John. Sintaxis: TRANSLATE <campo> TO { UPPER | LOWE } CASE. Ejemplo 1: DATA: NAMES(30) VALUE 'Charly. Esta sentencia reemplaza todos los caracteres de <campo> que cumplan la regla de sustitución <regla>. la segunda indica el carácter de sustitución. para deshacer los cambios realizados en la base de datos se utiliza la sentencia ROLLBACK WORK. Por el contrario. WORD(20). Ejemplo 2: DATA: BEGIN OF ITAB OCCURS 10. Para confirmar los cambios realizados sobre la base de datos se utiliza la sentencia COMMIT WORK Sintaxis: COMMIT WORK [ AND WAIT ]. TRANSLATE Definición Se utiliza para convertir caracteres de mayúscula a minúscula o viceversa.

P_FIELD: P'103C' -> C_FIELD: C'0103'. UNPACK P_FIELD TO C_FIELD. La variable NAME valdría: Dr.'. Michael Hofmann Ejemplo 2: DATA: BEGIN OF NAME. WRITE NAME. END OF NAME. Desempaqueta el campo <campo1> en el campo <campo2>. FIRST_NAME(10). CONDENSE NAME. Ejemplo 1: DATA: BEGIN OF NAME. VALUE 'Michael'. END OF NAME. 81 . VALUE 'Dr. Sintaxis: UNPACK <campo1> TO <campo2>. Ejemplo: DATA: P_FIELD(2) TYPE P VALUE 103. VALUE 'Hofmann'. Los espacios en blanco por la izquierda también desaparecen. TITLE(8).'. FIRST_NAME(10). TITLE(8).MichaelHofmann UNPACK Definición Desempaqueta el contenido de un campo sobre otro.Sintaxis: CONDENSE <campo> [ NO-GAPS ]. dejando sólo uno que exista entre palabras existentes en <campo>. Borra cualquier secuencia de espacios en blanco. La salida en pantalla sería: Dr. VALUE 'Hofmann'. VALUE 'Michael'. SURNAME(10). VALUE 'Dr. SURNAME(10). C_FIELD(4) TYPE C. Es la operación contraria a la sentencia PACK. CONDENSE NAME NO-GAPS. Con la cláusula NO-GAPS todos los espacios en blanco desaparecen.

Asynchronous execution Módulos de función se ejecuta en paralelo en un proceso de trabajo por separado.Unit 9 Modulo de funciones Módulos de función son procedimientos especiales que son visibles de forma global y que se puede llamar desde otros programas ABAP. El programa de llamada no espera hasta que la transformación del módulo de funciones se haya completado. Testeo modulo de funciones standard TRX: SE37 Modulo Funciones “POPUP_TO_CONFIRM” -> Ejecutar 82 . sino que al final de la unidad lógica de trabajo (LUW). Screens Grupos de función puede contener pantallas. Update Algunos módulos de función (módulos de actualización) puede ser utilizado para las actualizaciones. Sólo pueden ser definidas y aplicadas de programas especiales de ABAP. Remote capability Módulos de función se puede llamar por sistemas externos (Remote Function Call). No se ejecutan directamente cuando se le llama. denominados grupos de funciones. que permite encapsular los cuadros de diálogo de usuario en los módulos de función.

retorna: Presionando No. retorna: exporting depende de donde me encuentro. en invocación de la función es abreves. 83 .Presionando Si. exporting es lo que mando e importing es lo que envío. en la solapa tabla tengo el problema que no se si es de entrada o salida. En importing puedo declarar una tabla (TYPE tabla del diccionario).

Datos declaraciones (objetos de datos globales) . 84 . es decir. Grupos de funciones no son programas ejecutables. donde permanece hasta que el programa de llamada termina. Subrutinas . no se puede iniciar con los códigos de operación o por sus nombres. Si el programa llama a los módulos de varias funciones del mismo grupo de funciones (o la misma función que el módulo varias veces) de forma consecutiva. los grupos de función también puede contener los siguientes elementos: . el grupo de función correspondiente se carga en la sesión de residente. Cuando un programa ABAP llama a un módulo de funciones. Sirven exclusivamente como programas principales de los módulos de función. En la mayoría de los casos. Pantallas Estos elementos pueden ser utilizados por todos los módulos de función en el grupo de funciones. un grupo de funciones contiene varios módulos de función que realizan funciones relacionadas o actuar en los mismos datos. el grupo de funciones sólo se carga durante la primera llamada.Grupo de funciones Es un repositorio que agrupa funciones y que se utiliza principalmente para compartir subrutinas y declaraciones de variables entre las distintas funciones pertenecientes al grupo. Logical View of a Function Group Aparte de los módulos de función.

Para crear un grupo de funciones. debemos seleccionar en el menú de la transacción SE37 la ruta Goto/Functions Groups/Create Group O tambien se puede hacer desde la TRX SE80 Aquí ingresaremos el nombre de nuestro grupo de función y presionamos el botón Save como vemos a continuación: 85 .

Allí escribiremos el nombre de nuestra función y presionaremos el boton Create Attributes: aquí especificamos la descripción de la función y el tipo de función que puede ser Normal.Ejercicio 1: Crear un Grupo de Funciones Objetivos del Ejercicio Después de completar este ejercicio usted va a poder: . Crear un grupo de funciones Tarea: Crear un Grupo de Funciones 1. Crear el grupo de funciones ZBC402_##_CONN. Creando Modulo de Funciones: SE37 -> crear O tambien por SE80 Para crear un módulo de función accedemos a la transacción SE37. RFC o Update module. 86 .

Los cambios en los parámetros formales no afectan a los parámetros actuales.Import: aquí especificamos los parámetros de salida de la función Export: aquí especificamos los parámetros de entrada de la función Paso por valor: los parámetros formales son creados como copias de los parámetros actuales. 87 . Dentro de la subrutina. Paso por referencia: solo la dirección de los parámetros actuales se transfieren a los parámetros formales. se trabaja con el campo del programa que hace la llamada. el contenido del campo del programa que hace la llamada también cambia. Si cambiamos los parámetros formales.

Source Code: aquí pondremos el código Abap de la función.Changing: aquí especificamos los parámetros de salida que cambiarán de valor con la ejecución de la función. Exceptions: aquí especificamos las excepciones de la función. Tables: aquí especificamos las tablas que se utilizan en la función. Una excepción es un error que se produce al ejecutar la función y que ha sido catalogado cuando se creo el módulo de función de modo de poder identificar rápidamente el motivo del error Documentacion 88 .

. . L<fgrp>O02... L<fgrp>F02. Utilizado para PAI 89 .Estructura del grupo de funciones Programa principal. O includes Include L<fgrp>O01. F includes Include L<fgrp>F01. merely contains INCLUDE statements for the following include programs: . U includes Include L<fgrp>UXX contendra los includes L<fgrp>U01. .. Estos contendran el codigo adicionado en cada modulo de funciones . . I includes The include programs L<fgrp>I01... . puede ser utilizado para generar subrrutinas . TOP include Include L<fgrp>TOP contendra las declaraciones de variable globales. Utilizado para PBO .. SAPL<fgrp>. L<fgrp>I02. L<fgrp>U02.. ..

Crear un Modulo de Funciones . Defina un parámetro de salida para la lista de vuelos. Definir las interfaces del modulo de funciones . Elegir los mismos tipos de datos que en las tablas correspondientes. Tiene sentido crear los parámetros opcionales? Elija si los parámetros a transferir van a ser por parámetros o por valor? 3. para los parámetros y par alas excepciones.Ejercicio 2: Crear un Modulo de Funciones Objetivos del Ejercicio Después de completar este ejercicio usted va a poder: . 2. 4. 2. Si no ha creado aun el grupo de funciones crearlo en este momento. Crear un Nuevo modulo de funciones y nombrarlo Z_BC402_##_GET_CONN_LIST en el grupo de funciones creado anteriormente. ver ZSAP_P_46_GRF01 90 . Utilice un tipo de tabla apropiada para el parámetro. CREAR modulo de funciones Z_BC402_46_get_conn_list e implementarlo. Definir un parámetro de entrada para ciudades de origen y destino “departure and destination cities”. Tarea 2: Crear un modulo de funciones para la lista de vuelos 1. Documentar un modulo de funciones Tarea 1: Preparación 1. Desplegar una modulo de funciones existente con la Transacción SE37 y Familiarizarse con los tipos de parámetros de la interface. Ingrese la documentación necesaria para el modulo de funciones.

llamamos POPUP_TO_CONFIRM 91 .Llamado de modulo de funciones: Boton PATTERN.

Si la tabla se encuentra vacía generar una excepción para este caso. WHEN 3. Crear una subrutina en la función en donde manipularemos los resultados obtenidos para solo devolver algunos Tarea 2: (Opcional) 1. Objetivos del Ejercicio Después de completar este ejercicio usted va a poder: . WHEN 2. 2. Ejercicio 4: Usando declaraciones globales en un grupo de funciones. 92 . Usar declaraciones globales . WHEN 1. Testiar secuencial mente módulos de Funciones Tarea 1: 1.Tomando las exepciones se borra el IF y se pone case sy-subrc. Entender como es el procesamiento de un modulo de funciones . Crear una tabla interna en el Top de la función y luego llenarla con un Select.

93 . El objetivo principal de las RFC es acceder a otros ambientes para obtener datos. Los parámetros que se crean en una función RFC no se pueden pasar por Referencia. Cómo crear una RFC? Una función RFC se crea de la misma manera que se crea un función. La comunicación puede darse entre sistemas Sap o entre un sistema Sap y otro sistema que no sea Sap. deben pasarse por valor. EXPORT y CHANGING. Esto se logra tildando el check Pass value para cada parámetro en las solapas IMPORT.Qué es un módulo de función RFC? Un módulo de función RFC consiste en una llamada a una función que existe en un sistema distinto al del programa que la llama. Para llamar a una función RFC se debe agregar la claúsula DESTINATION al momento de declarar la función. como vemos en el siguiente ejemplo. Se accede a la transacción SE37 y se completan los mismos parámetros que completamos para crear una función a excepción de que se debe seleccionar en la solapa de Atributos la opción Remote Enabled Module.

Crear programa usuario de la funcion 1..Crear grupo de funciones Grupo funciones: ZUAXRFC Descripcion: Lectura de la tabla ZUAXRFC en produccion Aplicacion: F( contabilidad financiera ) Tablas: parametro tabla estructura referencia TAB_ZUAXRFC ZUAXRFC Forma de ejecucion Remote Function Call soportado( marcar este ) Inicio inmediato( marcar este ) 3.RFC( Remote Function Call ) en SAP R/3 Esta tecnología se usa para comunicar entornos diferentes que pueden ser del mismo o de tipos diferentes...... Pasos del Proceso 1.Conexion con maquina de produccion Destino RFC ZUAXRFC Tipo Conexion 3( Conexion R/3 ) Distribucion carga Si Maquina destino Direccion IP de maquina fuente No. Sistema 00 No( marcar este ) Opciones de seguridad Trusted system: si no(marcar este) SNC act inact(marcar este) Descripcion: Conexion con la maquina productiva Acceso a sistema Idioma: ES Mandante: 0400 Usuario: IDUSUARIO Clave acceso: ********** Usuario actual( desmarcado ) Clave acceso no codificada( desmarcado ) 2.Crear funcion 4.Crear función( pertenece al grupo ZUAXRFC ) FUNCTION Z_UAX_RFC...Crear destino 2. otra forma de realizar conexión entre procesos es por medido del uso de las tecnologías OLE.Crear Destino( se usa transaccion SM59 ) Nodo Conexiones R/3( se hace en la maquina destino ) Nombre conexión ZUAXRFC. 94 ..Crear grupo de funciones 3.

Llama la función rfc z_uax_rfc que le devuelve la tabla tab_zuaxxrfc * 3.SELECT * FROM ZUAXRFC INTO TABLE TAB_ZUAXRFC. 4.Crear PROGRAMA( llama la función Z_UAX_RFC ) REPORT ZUAXRFC.. INCLUDE STRUCTURE ZUAXRFC.. ENDFUNCTION.Actualiza la tabla zuaxrfc de la maquina destino en función de los datos recibidos de la función rfc * -------------------------------------------------------------------* -------------------------------------------------------------------DATA: BEGIN OF TAB_ZUAXRFC OCCURS 0.. CALL FUNCTION 'Z_UAX_RFC' DESTINATION 'ZUAXRFC' TABLES TAB_ZUAXRFC = TAB_ZUAXRFC MODIFY ZUAXRFC FROM TAB_ZUAXRFC.Crea tabla interna en función de la tabla ZUAXRFC * 2. 95 . DATA: END OF TAB_ZUAXRFC.. * -------------------------------------------------------------------* -------------------------------------------------------------------* Programa : zuaxrfc * autor : Francisco Reyes * fecha : 13 de abril del 2000 * objetivo : Probar comunicación RFC * -------------------------------------------------------------------* tablas usadas por el proceso * tabla descripción * zuaxrfc tabla de prueba para comunicación rfc * -------------------------------------------------------------------* Descripción del proceso * 1.

Por lo general cuando se hace un modificación de un objeto con una BAPI es necesario realizar un COMMIT explícito mediante la función BAPI_TRANSACTION_COMMIT. de manera de poder ejecutar primero la BAPI y después la función BAPI_TRANSACTION_COMMIT para probar si efectivamente el dato que necesitan cargar es cargado por la BAPI que estén probando.Llamar la BAPI en el repositorio ..Independencia de entorno (apertura) Usar BAPIs en programas de aplicación Actualmente una BAPI puede ser invocada de dos formas diferentes: .. Allí se pueden encadenar funciones... que permiten la integración de los componentes de software de los clientes y de terceros... Algunas de las ventajas de usar BAPIs son: .Es un Estándar Consensuado . y gracias a ellos podemos realizar cargas evitando utilizar Batch Inputs por Call Transaction.Garantiza orientación a objetos . Ventajas de usar BAPI Las BAPIs son métodos estandarizados de los Objetos de Negocio Sap R/3. de salida..Es un Estándar de Negocio . así que poseen las mismas características: parámetros de entrada. Son en realidad métodos de los objetos de negocios. Si quieren probar si una función les sirve para cargar algún dato en particular..Hacer llamada RFC a la función que implementa la BAPI Listado de BAPIs SAP: BAPI de creación de Pedidos de Venta: BAPI de creación de Pedidos de Compra: BAPI de Verificación de Facturas: BAPI de facturación: Bapi de Movimiento de mercancias: BAPI modificación Pedido de ventas: BAPI_SALESORDER_CREATEFROMDAT2 BAPI_PO_CREATE BAPI_INCOMINGINVOICE_CREATE BAPI_BILLINGDOC_CREATEMULTIPLE BAPI_GOODSMVT_CREATE BAPI_SALESORDER_CHANGE 96 . excepciones. Básicamente son funciones como cualquier otra función en ABAP. pueden utilizar la transacción SE37 e ir al menú Módulo de Funciones->Verificar->Secuencias Test.Business Application Programming Interface( BAPIs ) de SAP R/3 Las BAPI's son funciones que sirven para realizar acciones sobre los objetos de negocios de SAP.Garantiza estabilidad y compatibilidad futura . tablas..

.............3) Pasos para realizar un Menu Exit .....................................................................................................................................2) Desventajas ................ 118 8) Transacciones relacionadas 122 97 ....... 104 4......................................... 112 6. 100 4) Field Exit 104 4........ 112 6.............................. 117 8.........3) Pasos para realizar un User Exit .................................................................2) Desventajas ............................Unidad 10 Ampliaciones en SAP Índice: 1) 2) 3) ¿Qué son las ampliaciones? Ventajas y Desventajas 98 Tipos de ampliaciones 98 User Exit 99 3..................................3) Pasos para realizar un Field Exit ...................................................... 104 5) Screen Exit 108 5..................... 117 8................2) Desventajas ....................... 108 5...1) Ventajas .....1) Ventajas ......................................3) Pasos para realizar un Screen Exit .............................................................. 100 3................................................ 109 5..............2) Desventajas ......................................................................................................1) Ventajas . 109 6) Menu Exit 112 6.............................. 104 4............................................3) Pasos para realizar un Include a Tabla Transparente .........2) Desventajas ...............................................1) Ventajas ........................... 100 3..........................................................................................1) Ventajas ........................ 112 7) Include en tablas transparentes 117 8..................................................................................................................

ya que la mayoría de las ampliaciones están preparadas para una determinada tarea y momento dentro de la ejecución de un programa. Algunos programas estándares están preparados como para agregarles funcionalidad nueva a la existente. cada una con sus particularidades que serán explicadas en detalle más adelante. Por ejemplo todos los programas no tienen User Exit. Las ampliaciones se generan y codifican en módulos a parte del código estándar. agregar una nueva opción dentro de un menú o agregar campos a tablas estándares.  Field Exit 98 .¿Qué son las ampliaciones? Ventajas y Desventajas Las ampliaciones son diferentes herramientas que presenta SAP para realizar mejoras. que son utilizadas de acuerdo al tipo de mejora que se quiera desarrollar.  User Exit Un User Exit es un punto dentro de un programa en donde se puede invocar a un programa propio agregando una funcionalidad nueva al programa original. Tipos de ampliaciones En SAP existen varios tipos de ampliaciones. manteniendo el buen funcionamiento y las características que tenía. Desventajas:  No siempre se pueden hacer todas las modificaciones de manera satisfactoria. agregar campos a una pantalla con código que permita tratar esos datos nuevos.  Permite realizar mejoras a un programa sin modificar el código original del mismo. agregando nuevas características a las existentes.  No todos los programas estándares están preparados para agregar ampliaciones. modificaciones o agregados a un programa. en general un programa estándar. Ventajas:  Permite modificar ciertos programas para adaptarlo a necesidades particulares de la empresa. En algunos casos se puede validar campos de alguna dynpro en particular.  Los cambios toman efecto con sólo transportar los nuevos objetos. con lo cual no se necesita modificarlo. manteniendo la funcionalidad original y el buen funcionamiento.

 Menu Exit Un Menu Exit permite agregar una transacción dentro de un menú estándar de SAP. ya sea campos. etc.  Include o Append a tablas transparentes Los Include en tablas transparentes permiten agregar nuevos campos a tablas transparentes estándares. Este número es la terminación del nombre del módulo de función que está asociado al programa. sus etiquetas o denominaciones y la documentación que presenta SAP al presionar F1 sobre el elemento de datos. En la tabla MODSAP se encuentran todos los módulos de función que se utilizan para User Exit. llamadas a módulos de funciones que pueden ser modificados por el programador. botones. o también llamado Customer Exit. 99 .Los Field Exit se utilizan para relacionar un campo de una dynpro de un determinado programa con un módulo de función.  Business Transaction Events (BTE) Un BTE (Business Transaction Events) es un evento dentro de una transacción que se puede utilizar validar datos o para el agregado de Módulos de Función.  Screen Exit Un Screen Exit se utiliza para agregar nuevos elementos a una dynpro de un programa estándar. textos. Los User Exit se programan en módulos de funciones definidos de acuerdo al programa al cual va a ser referido.  Keyword Exit Los Keyword Exit permiten cambiar la descripción breve de un elemento de datos. Algunos programas estándares tienen dentro de su código. Los User Exit son llamados dentro de los programas estándares por un número. donde generalmente es utilizado para validar ciertos campos de la pantalla. User Exit Un User Exit. es un punto dentro de un programa en donde se puede llamar a un programa propio. Los Screen Exits son definidos en áreas especiales llamadas Subscreens. como también a tablas Z.

que es la que maneja las ampliaciones en SAP. No siempre pueden ser utilizados los User Exits como se pretende ya que no cumple con todas las condiciones que se quiere. En esta transacción se debe completar el nombre de la ampliación que contiene el módulo de función a utilizar por el User Exit. No existe una búsqueda de User Exit por programa con una aclaración amplia de su utilización. para buscarlos hay que realizar una búsqueda del string CALL CUSTOMER-FUNCTION dentro del programa control estándar y su funcionamiento se prueba sin saber exactamente si es el correcto para lo que se quiere hacer. Si no se conoce el nombre aún.1) Ventajas   El User Exit es una buena herramienta para agregar funcionalidad nueva a un programa estándar como puede ser una validación o la ejecución de rutinas de control sin modificar el código original.3) Pasos para realizar un User Exit 1°) Ir a la transacción SMOD. con la tabla MODSAP. qué hace luego con los datos que devuelve. CALL CUSTOMER-FUNCTION '003' EXPORTING XVBAK = VBAK XVBUK = VBUK XKOMK = LVS_KOMK IMPORTING LVF_SUBRC = LVF_SUBRC TABLES XVBKD = XVBKD XVBFA = XVBFA XVBAP = XVBAP XVBUP = XVBUP. campo MEMBER completar con el nombre del módulo de función a buscar 100 . 3. Saber cuándo se ejecuta. 3. sin tocar el programa original.2) Desventajas   No siempre se ajusta el User Exit a las necesidades del programador ya que los objetos que importa o exporta son fijos y pueden no tener todos los objetos que se requieren. Por ejemplo el programa SAPMV45A llama al módulo de función EXIT_SAPMV45A_003 pasándole ciertos parámetros y tomando otros como resultado de la ejecución del mismo. Lo importante de esto es saber si sirve para lo que se quiere hacer. Ejemplo: EXIT_SAPMV45A_002. 3.Los módulos de función tienen una nomenclatura estándar: EXIT_nombre del programa_número de función. hay que ir a la transacción SE16. Para transportar y activar los User Exit es suficiente con el Include nuevo únicamente. qué datos utiliza.

El número del final puede ir cambiando si presenta más de una llamada. Si tampoco se conoce el módulo de función específico. en este ejemplo V45A0003. que generalmente están como CALL CUSTOMER-FUNCTION ‘001’. Una vez que se tiene el nombre de la ampliación. es decir varios User Exit.(Ejemplo EXIT_SAPMV45A_003). 101 . colocarlo en el campo Ampliación de la transacción SMOD y presionar Visualizar. El campo NAME nos dirá la ampliación que la contiene. Cada uno va a ser ejecutado en algún momento determinado de la ejecución del programa al cual pertenecen. se visualizarán todos los módulos de funciones que contiene esta ampliación. 2°) Presionando el botón Componentes (o habiendo seleccionado la opción Componentes de la pantalla anterior). En este caso existen dos módulos de función. en este caso SAPMV45A. debe buscarse en el código del programa estándar las llamadas a funciones de usuario.

3°)
Una vez que ya se sabe qué modulo de función usar se debe hacer doble clic
sobre el mismo y derivará a otra pantalla, en la cual se puede ver qué objetos importa y
exporta esta función, como así también las tablas que importa y que pueden
modificarse, los cuales se utilizarán en el código fuente.
En la solapa Cód.fte. se encuentra un Include Z que se utiliza para agregar el
código del usuario. Si este Include no existe al hacer doble clic sobre el mismo pedirá al
usuario que le asigne una orden de transporte para poder generarlo. Una vez creado es
posible codificar utilizando todos los objetos que figuren en la solapa de Import,
Modific., y Tablas, pudiendo devolver resultados modificando los objetos que se
encuentran en las solapas Export, Modif. y Tablas.

4°)
Una vez terminada la codificación, la ampliación debe activarse e incluirse en un
proyecto. Los proyectos son creados en la transacción CMOD. Allí se debe generar un
proyecto Z en el cual se incluirán las ampliaciones que se desee.

102

5°)
En la sección Asignación Ampliación se colocan todas las ampliaciones que
integrarán el proyecto. Simplemente se completa cada línea con una ampliación.

6°)
El último paso a seguir es activar el proyecto con todas sus ampliaciones. Para
esto se debe presionar el botón Componentes ir al menú Proyecto y seleccionar la
opción Activar.

103

Field Exit
Los Field Exit se utilizan para relacionar un campo de una dynpro de un
determinado programa con un código de programa o mejor dicho con una función. El
nexo de unión entre la función y el campo es a través del elemento de datos de dicho
campo.
Los Field Exit generalmente se utilizan para validar los campos de una dynpro
sin modificar el código fuente del programa en el cual está funcionando. Su codificación
se realiza aparte. El Field Exit se codifica por elemento de datos y luego se asocia a un
programa y a una dynpro en particular. El código es ejecutado automáticamente al dar
ENTER sobre la dynpro que tiene el campo específico, al pasar de pantalla (o salir de la
pantalla) o en algunos casos al presionar el botón Grabar de la dynpo.
En la transacción SE37, biblioteca de funciones, y colocando field_exit_* y
luego pulsando F4 nos saldrán todos los Field Exit del sistema.
Una de las desventajas del Field Exit es que no se puede hacer un DEBUG al
código, la forma de hacerlo es ir colocando mensajes (MESSAGE) dentro del código
para ir viendo por donde pasa dentro del código y qué valores está manejando.

4.1) Ventajas


Facilita la validación de campos en un programa estándar sin modificar el
código original.
Puede utilizarse el mismo código para varias transacciones.
Se puede aplicar globalmente (para todos los programas) o para determinados
programas y dynpro que se le asignen.

4.2) Desventajas


Toma de la dynpro (Import) un solo valor, que es el del campo al cual hace
referencia, por lo que no se pueden utilizar tablas internas específicas del
programa estándar en el código del Field Exit.
El mismo código del Field Exit tiene que servir para todos los programas que se
quieran utilizar, por lo que se tiene que especificar en el código que acción
tomará de acuerdo al programa en el cual se esté ejecutando.
No es posible hacer un Debug del código del Field Exit de forma directa, a
través de un Breakpoint. Para esto se utilizan mensajes de error para ir viendo
que valores va tomando los diferentes objetos (variables, tablas, etc.) y por
donde va pasando dentro del código del Field Exit.

4.3) Pasos para realizar un Field Exit
1°)
El primer paso para realizar un Field Exit es ir a la transacción CMOD (Gestión
de proyectos de ampliaciones SAP) y ejecutar la transacción PRFB dentro de la CMOD,
sin anteponer /N.

104

105 . Este dato se obtiene presionando la tecla F1 sobre el campo de la dynpro y luego presionando el botón Información técnica . pudiendo ver también si están activados a nivel Global (para todas las transacciones) o tienen algún programa y dynpro asignados. Este elemento de datos debe ser el mismo que tiene el campo de la dynpro al cuál se quiere relacionar. Allí pedirá el elemento de datos al cual estará relacionado el Field Exit. 3°) Para crear un nuevo Field Exit se debe ir al menú Exit campo y seleccionar la opción Crear.2°) En esta transacción se encuentran todos los Field Exits del sistema.

del elemento de datos que se quiere crear.4°) Al colocar el elemento de datos y dar ENTER aparece la dynpro de biblioteca de funciones (SE37) con la función FIELD_EXIT_CHARG_D. Al presionar el botón Crear aparece una nueva pantalla en la cual se debe colocar un Grupo de funciones y un Texto breve del Field Exit. 106 .

107 . Este módulo de función tiene la particularidad de tener un parámetro de Import o entrada y uno de Export o salida. Dentro del módulo de función sólo se pueden trabajar con estos parámetros. pero si se quiere obtener valores de otros campos de la dynpro se puede utilizar otros Field Exits en los cuales se utilizará el comando SET PARAMETER para poder grabar en memoria al valor del campo y utilizarlo en el Field Exit anterior tomándolo de memoria con GET PARAMETER. Otra opción es utilizar la Función GET_DYNP_VALUE para obtener valores de otros campos de la dynpro./dynpro. Éste derivará a la transacción SE37 para poder modificar la función.5°) Una vez creado va a aparecer en la pantalla de la transacción PRFB. Para eso se debe ir a la pantalla de administración de Field Exit (CMOD PRFB). seleccionar el Field Exit y presionar el botón Asignar proa. El parámetro de salida OUTPUT es el valor que tomará el campo al salir del Field Exit. El parámetro de entrada es INPUT y contendrá el valor del campo al cual se ha asignado el Field Exit (recordar que un Field Exit se relaciona con un elemento de datos y con un programa y dynpro). 6°) Una vez terminada la codificación se debe asignar un programa y dynpro al Field Exit (si no se quiere hacer Global – para todos los programas). Si en la función no se quiere modificar el campo donde esta colocado el Field Exit entonces al principio de todo se debe escribir: OUTPUT = INPUT para devolver el mismo valor que se ingresó. Para poder codificar seleccionar el check box correspondiente al elemento y presionar el botón Tratar MF.

ir al menú Exit campo y presionar la opción Activar. campos.1) Ventajas   Permite agregar funcionalidad a un programa incluyendo nuevos elementos a una dynpro estándar tales como textos. etc. botones. por lo que si debe funcionar para varios programas se debe preguntar dentro del mismo código.Este esta pantalla se solicita el nombre del programa y la dynpro. No altera la funcionalidad del programa estándar original. textos. para esto se debe seleccionar el elemento de datos correspondiente. Se pueden asignar varios programas y dynpro al mismo Field Exit. Los Screen Exits son definidos en áreas especiales llamadas Subscreens. 7°) El último paso es activar el Field Exit. Otra de las desventajas del Field Exit. Al igual que los User Exits. ya sean campos. etc. además del que se puede hacer un Debug es que el mismo módulo de función debe servir para todos los programas. Los Screen Exits también se incluyen dentro de ampliaciones o enhancements. botones. en qué programa o transacción se encuentra para actuar de una forma u otra. no todas las dynpro estándares tienen subscreen para poder introducir cambios. 108 . Screen Exit Un Screen Exit se utiliza para agregar nuevos elementos a una dynpro de un programa estándar. 5.

A este proyecto Z se le agregará la ampliación que contiene el Screen Exit. Si se hace doble clic sobre la ampliación se pasa a la pantalla que detalla los componentes del mismo.2) Desventajas   No todos los programas estándares tienen Screen Exit como para realizar estas mejoras. En la sección Ámbitos dynpros se ubican los Screen Exits. por lo que no se pueden agregar campos indiscriminadamente en la pantalla.5.3) Pasos para realizar un Screen Exit 1°) Crear un proyecto en la transacción CMOD. detallando el programa. dynpro y área que llama al Screen Exit y el programa y dynpro que va a contener la subscreen nueva. Para eso se debe entrar desde la CMOD con la opción Asignación ampliaciones cliente o presionar el botón Asignación ampliación. El espacio que se destina para la subscreen nueva es limitado. 109 . Por ejemplo la ampliación QQMA0001. 5. En este caso existen dos User Exit y tres Screen Exit.

110 .2°) Una vez que se determina cuál es la dynpro a crear se ejecuta la transacción SE80 y se completa el nombre del programa que va a tener la subscreen. Por ejemplo SAPLXQQM.

4°) Una vez terminado. La programación de la misma se realizará a través del PAI y PBO de la dynpro subscreen y en algunos casos dentro de los módulos de función (User Exit) que contiene la ampliación que incluye el Screen Exit en cuestión. 3°) Dentro de esta nueva dynpro se podrán colocar nuevos elementos que integrarán la dynpro estándar que la llamará. colocando una orden de transporte y así aparecerá la nueva dynpro en la lista de objetos del programa. presionar el botón Componentes para ver todos los componentes que tiene el proyecto y elegir dentro del Menú Proyecto la opción Activar. Se completa la descripción de la dynpro y en Tipo de dynpro se debe colocar Subscreen.Para crear la nueva dynpro hacer clic derecho sobre el objeto principal. en este caso XQQM y seleccionar Crear / Dynpro. En el ejemplo serían EXIT_SAPMIWO0_008 y EXIT_SAPMIWO0_009. se debe activar el proyecto y sus componentes para que tome efecto la llamada al Screen Exit junto con su lógica de procesamiento. Luego se graba. 111 . Para esto se debe ir a la transacción CMOD. En este caso la 0100. Allí pedirá el número de dynpro a crear.

Son limitados los Menu Exits disponibles por SAP y ya tienen asignados lugares específicos dentro del menú.1) Ventajas  Poder agregar programas Z dentro de un menú estándar de SAP sin tener que estar ubicándolo dentro del menú.2) Desventajas   No se puede cambiar el código de la transacción que vincula el Menu Exit. 112 . Poner un nombre y presionar el botón Crear.Menu Exit La ampliación de tipo Menu Exit permite agregar una transacción dentro de un menú estándar de SAP. 6. Estas transacciones pueden estar vinculadas a algún determinado programa pero serán ubicadas dentro del menú SAP. 6. tan sólo con crear la transacción y asignarle un programa. en una posición específica.3) Pasos para realizar un Menu Exit 1°) Crear un proyecto a través de la transacción CMOD. a través de la transacción SE43. 6.

en este ejemplo el código de la transacción es +C06. Por ejemplo CUST6. ir a la pantalla de Asignación ampliación y completar con las ampliaciones que se desean incluir. Luego grabar. .2°) Al entrar. en la sección Componentes. Todas las transacciones utilizadas para Menu Exit empiezan con +. 113 . que contiene el Menu Exit MENUS000 con el código de transacción +C06. 3°) El paso siguiente es activar el proyecto. 4°) Luego hay que crear la transacción específica para incluirla en el menú de SAP. Esto se hace en la transacción SE93.

Para este ejemplo se utilizará la opción Programa y dynpro (transacción de diálogo). Luego grabarla. 6°) Allí se deberá completar con el nombre del programa y dynpro inicial que tendrá la nueva transacción. 114 .5°) Luego aparecerá una pantalla preguntando que tipo de transacción se desea crear.

En la transacción SE43 se debe completar el Menú ámbito al cual pertenece el Menu Exit. Por lo tanto el Menú ámbito es S000. 115 .7°) Por último queda por cambiar la descripción de la transacción para que aparezca en el menú con un nombre apropiado. que se determinará del nombre del componente de la ampliación. En el ejemplo el componente se llama MENUS000.

9°) Una vez terminado aparecerá en el menú de SAP. A continuación se debe buscar el nuevo Menú y presionar el botón Modificar nodo para poder cambiarle la descripción del menú. 116 .8°) Allí hay que presionar el botón Modificar y en la pantalla siguiente Modif.

en este caso para poder agregar nuevos campos a tablas transparentes estándares. Como SAP no permite agregar campos a las tablas transparentes estándares. se ofrece la solución de anexar una estructura Z a la tabla.2) Desventajas  Es un poco tedioso borra campos del Include o borra totalmente el Include a la tabla. ya que debe adaptarse la tabla a los cambios. Para ello se debe crear primero una estructura Z con los campos deseados y luego se hace un Append a la tabla. 8. Luego de esto se puede grabar o consultar a los nuevos campos de la tabla transparente como cualquier otro campo estándar. 8. como también a tablas Z.1) Ventajas  Permite ampliar una tabla estándar agregando nuevos campos ante la necesidad del negocio.Include en tablas transparentes Los Include en tablas transparentes son otro de los tipos de ampliaciones utilizados en SAP. 117 .

Allí aparecerá una pantalla preguntando el nombre de la estructura que se desea crear.3) Pasos para realizar un Include a Tabla Transparente 1°) Abrir la tabla transparente a la cual se quiere agregar los campos adicionales. en este caso ZAPPENDMARA. Esta estructura va a ser completada con los campos que se desee y la tabla transparente va a tomar todos los campos de la estructura como propios.8. En este caso la tabla MARA. 2°) Luego se debe presionar el botón Estr.append… para agregar una estructura nueva a la tabla transparente. 118 .

5°) Si se desean quitar campos de la estructura. grabarla y luego ir a la transacción SE14 para ajustar la tabla transparente a los cambios realizados. incorporándolos a la vez a la tabla transparente a la cual se le agregó el Append.3°) En la pantalla siguiente se completan los campos de la estructura con sus elementos de datos. Una vez activado aparecen los nuevos campos en la tabla transparente a la cual se le agregó la estructura. 119 . luego debe activarse. De esta manera también se pueden agregar campos a la estructura sin ninguna restricción. Solicitará una clase desarrollo y una orden de transporte. se deben borrar de la estructura. Además debe activarse la tabla transparente.

120 .En la transacción SE14 se completa el campo Objeto con el nombre de la tabla a la cual se le agregó el Include y se presiona el botón Tratar.

Una vez completado el proceso se debe activar la estructura. se debe completar el campo Tabla base de datos con el nombre de la estructura y presionar el botón Borrar (Icono Tacho de basura). Para continuar presionar el botón Borrar. Allí aparecerá un mensaje de advertencia diciendo que se borrará la estructura Append y que luego se debe adaptar la tabla en la cual se hace referencia.En la pantalla principal de la SE14 se debe presionar el botón Activar y adaptar base de datos. Por lo tanto después se debe ir a la transacción SE14 y adaptar la tabla transparente (MARA) como se explicó anteriormente. En el caso de que se quisiera quitar por completo el Include con todos sus campos en la transacción SE11. 121 .

Include en Tablas transparentes)  PRFB – Field Exit para los elementos de datos (Field Exit)  SPRO – Customizing (BTE)  SE37 – Biblioteca de funciones (Field Exit. Menu Exit. Include en Tablas transparentes)  CMOD – Gestión de proyectos de ampliaciones SAP (User Exit. Screen Exit. Screen Exit. Menu Exit. Screen Exit. Field Exit. BTE)  SE93 – Actualizar transacción (Menu Exit)  SE43 – Actualizar menú de ámbito (Menu Exit)  SE14 – Diccionario ABAP – Utilidad para base de datos (Include en tablas transparentes)  SE80 – Object Navigator (User Exit.Transacciones relacionadas  SMOD – Ampliaciones SAP (User Exit. Menu Exit)  SE11 – Diccionario ABAP 122 . BTE.

Al principio y al final de cada FORM.En modulos de funciones.Dentro de cada estructura de las tablas internas para insertar nuevos campos. . .Enhancement-Point Se puede insertar codigo en distintos puntos del programa estandar . Con todo esto se puede ver que tenemos casi a nuestra disposición todo el código de cualquier programa. Para ello vamos a: Tratar -> Operaciones ampliación -> Insertar puntos de ampliación implícitos 123 .Donde se declaran las tablas. .

solo tenemos que ponernos encima de la línea deseada y seleccionamos: Tratar -> Operaciones ampliación -> Crear 124 .Una vez marcados todos los puntos de ampliación.

125 .