Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ABAP Basico para Consultores Funcionales

6,251 views

Published on

http://docserve.blogspot.com

Introducción a ABAP Workbench
Introducción al Diccionario ABAP
Introducción a los Eventos ABAP
Elementos Básicos del Lenguaje ABAP
Acceso a Base de Datos
Subrutinas en ABAP
Procesamiento de Lista Clásica
Sentencias Útiles ABAP
Creación y llamadas a Grupo de Funciones y a Módulos de Funciones
Ampliaciones sobre SAP Standard

Published in: Software

ABAP Basico para Consultores Funcionales

  1. 1. 1 ABAP Funcionales
  2. 2. 2 Í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
  3. 3. 3 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. Creación de Grupo de Funciones 2. Creación de Módulos de Funciones 3. Implementación y llamada a Funciones 4. Bapis en SAP 5. RFC: Remote Function Call Unidad 10: Ampliaciones sobre SAP Standard. 1. User Exit 2. Field Exit 3. Screen Exit 4. BADIS 5. Ampliación de Tablas SAP 6. Ampliación del Menú SAP
  4. 4. 4 Unidad 1 Introducción a ABAP Workbench Repositorio Navegador de Objetos El repositorio consta de todos los objetos de desarrollo del sistema: los programas, módulos de función, las definiciones de tablas de base de datos y otros objetos. El Repositorio se utiliza para mantener los objetos definidos por SAP, así como objetos definida por clientes. El repositorio está en la base de datos y siempre es independiente de mandante, es decir, un objeto de repositorio puede ser asesado desde cualquier cliente. Aparte del repositorio, la base de datos también contiene tablas de aplicación y customizing, que suelen ser específicos del cliente, es decir, que tienen un columna de cliente.
  5. 5. 5 El Repositorio es Cross Aplication, o sea que los programas no están divididos por modulo. La única diferencia entre los programas son las tablas de donde toman la información. Buscar Objetos en el Repositorio. La transacción para acceder es la SE80.
  6. 6. 6 Trabajando con el Navegador de Objetos. Con el “Object browser” podemos crear, modificar, borrar, etc. cualquier objeto de SAP. Para poder acceder ingresamos en la transacción SE80 y ahí oprimimos el botón Browser de Repository. Aquí podremos crear todo tipo de objetos abap. Hay que tener en cuenta que cualquier objeto que se cree tienen que comenzar con la letra Z o Y. 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. Para crear cada uno de estos objetos, se puede acceder tambien a una transacción especifica por objeto. 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.
  7. 7. 7  Un área de herramienta para visualizar y editar un objeto mediante el desarrollo de la herramienta adecuada. Puede mostrar u ocultar el área de navegación. (Pantalla completa on / off). En ambas áreas, usted puede elegir las funciones mediante un menú contextual, que se acceso mediante el botón derecho del ratón. El menú contextual ofrece sólo las funciones que han sido diseñados para el objeto en cuestión.
  8. 8. 8 Desarrollo de Programas y Órdenes de Transporte Los proyectos de desarrollo se llevan a cabo en un sistema de desarrollo. 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. En el comienzo de un desarrollo el director del proyecto crea una solicitud de cambio “Orden de transporte, con los nombres de los que van a participar de ese proyecto. El organizador del transporte crea una tarea para cada empleado y para cada solicitud de cambio. Creación de Paquetes (Ex Clase de desarrollo) 1. Navegue hasta el Navegador de Objetos SE80. Ahora tiene dos opciones: a) En el área de navegació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.) Luego oprima ENTER. Si el paquete no existe, el sistema nos permitirá crearlo. b) Seleccione Edición de objetos en la pantalla inicial de la SE80. En el cuadro de diálogo, Busque la opción de especificar un paquete y entrar en el nombre del paquete. Después, haga clic en el botón para crear el objeto (F5).
  9. 9. 9 2. Pasos para crear un paquete: Atributos. Componente De Aplicación: Modulo Funcional. Componente De Software: Siempre poner HOME. Capa De Transporte: A cada sistema de desarrollo R/3 se asigna una capa de transporte como capa de transporte estándar. Si se utiliza el control de transporte ampliado, se podrán asignar capas de transporte estándar diferentes a determinados mandantes. Se puede definir como máximo un destino de consolidación por Sistema R/3 y capa de transporte. Al crear un paquete, se le asigna la capa de transporte del Sistema R/3. Sin embargo, para asignar a un paquete una capa de transporte que no sea la estándar, se precisa la autorización de gestión del Change and Transport System. 3. Asignarle una Orden de Transporte al paquete: Introducción al Lenguaje de Programación ABAP. ABAP (Advanced Business Application Programming) es un lenguaje de cuarta generación, propiedad de SAP, que se utiliza para programar la mayoría de sus productos. Utiliza sentencias de Open SQL para conectarse con prácticamente cualquier base de datos. Cuenta con miles de funciones para el manejo de archivos, bases de datos, fechas, etc. Permite conexiones RFC (Remote Function Calls) para conectar a los sistemas SAP con cualquier otro sistema o lenguaje de programación. ABAP fue desarrollado por SAP como lenguaje de informes para SAP R/2 en los años 80, una plataforma que permitía a las grandes corporaciones construir aplicaciones de negocios para gestión de materiales y finanzas. ABAP, muy parecido al COBOL en sus orígenes, originalmente significaba Allgemeiner Berichtsaufbereitungsprozessor, palabras alemanas para procesador genérico para la preparación de informes. En sus inicios ABAP incluía el concepto de Bases de datos lógicas, que suministraba un alto nivel de abstracción para el acceso a bases de datos. ABAP fue pensado como un lenguaje de programación para que los usuarios finales pudieran manipular la información, pero el 4GL se fue volviendo demasiado complicado para usuarios normales, por lo que es necesario programadores experimentados para realizar desarrollos. 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, en el que casi todo el sistema, menos las llamadas al sistema básicas estaban escritas en ABAP. En 1999, con el lanzamiento de la
  10. 10. 10 versión 4.6 de R/3, SAP lanzó una extensión orientada a objetos denominada ABAP Objects. La versión más actual en estos momentos de SAP es la release 6.0. La última plataforma de desarrollo de SAP, NetWeaver, soporta ABAP y Java como lenguajes de programación. La programación ABAP no distingue entre mayúsculas y minúsculas. Toda palabra reservada se cierra con un Punto. El * se usa como comentario al igual que “ doble comilla. Los dos puntos se usan APRA informar mas de una cosa con la misma palabra reservada y se va separando con coma.
  11. 11. 11 Hay varias variables de sistema las mas importantes son las siguientes: SY-SUBRC: Determina el estado de finalización de una acción. SY-DATUM: Fecha del día. SY-UZEIT: Hora del día Crear un Programa ABAP. 1. Navegue hasta la transacción SE80. Hay tres opciones disponibles: a) En el área de navegación, elegir el tipo de objeto de programa y entrar el nombre del programa en el espacio de abajo. (Solo ingresar programas que comiencen con Z o Y) Confirme con ENTER. Si el programa no existe, el sistema abre un cuadro de diálogo que le permite crear un programa. b) Ingrese el Paquete y la orden de transporte correspondiente. 2. Quite el tilde de TOP Include. (De lo contrario, su código fuente se distribuye a varios programas.) 3. Cambiar el título de texto explicativo y, en este paso, siempre se elige programa ejecutable como el tipo de programa. Todos los otros programas atributos son opcionales. Consulte la ayuda en F1 para más detalles.
  12. 12. 12 Activación de Programas Los diferentes estados en los que se puede encontrar un programa son Activo, Inactivo, Inactivo tratado. Tengan en cuenta que cuando un programa esta inactivo siempre van a tener otro programa es estado Activo.
  13. 13. 13 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. Se pueden crear desde la transacción SE80 o la SE93, de la siguiente manera. Botón Derecho del Mouse
  14. 14. 14
  15. 15. 15 Ejercicio 1: Paquete y Orden de Transporte 1) Crear una Paquete y asociarlo a una Orden de Transporte. Ejercicio 2: Programa 1) Crear un Programa asociado al Paquete y a la Orden de Tranporte creado anteriormente. Copiar dentro del programa el código propuesto por el instructor. Ejercicio 3: Transacción 2) Crear una Transacción y asociarla al Programa creado.
  16. 16. 16 Estructura de un Programa ABAP Programa Main: Report ZCURSOS. INCLUDE zi_zcursos_top. INCLUDE zi_zcursos_screen. INCLUDE zi_zcursos_form. INITIALIZATION. ….. ….. AT SELECTION-SCREEN. ….. ….. START-OF-SELECTION. ….. …..
  17. 17. 17 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. En el Diccionario de ABAP, puede crear tipos definidos por el usuario (Elementos de datos, 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, índices y vistas. El Diccionario ABAP también ofrece una serie de servicios que apoyan programa desarrollo. Por ejemplo, el establecimiento y la liberación de los cierres, la definición de un Ayuda de entrada (F4 de ayuda), y adjuntar una ayuda de campo (Ayuda F1) a un campo de pantalla se apoyo. La transacción para ingresar al diccionario es SE11
  18. 18. 18 Tablas y vistas de base de datos puede ser definido en el diccionario ABAP. Estos objetos son creados en la base de datos. 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. Hay diferentes categorías en el Diccionario ABAP: Elemento de Datos: Determina la descripción de un campo. Estructuras: Son componentes que pueden tener cualquier tipo. Tipos Tabla: Describen la estructura de una tabla interna. Ejemplo de Estructuras: Tabla de Clientes Tabla de Proveedores Cod. Cliente Cod.Proveedor .Include Z_DATOS_PERSONALES .Include Z_DATOS_PERSONALES Antigüedad Etc. Estructura: Z_DATOS_PERSONALES Nombre Apellido Teléfono El Diccionario ABAP esta integrado activamente en el desarrollo y ejecución de programas. Cada cambio tiene efecto inmediato en los programas y pantallas ABAP.
  19. 19. 19 Ejercicio 1: Ingresar a la transacción SE11 y visualizar la tabla SCARR.
  20. 20. 20 Unidad 3 Introducción a los Eventos ABAP ABAP es un lenguaje de programación estructurado y secuencial. Para poder manejar diferentes situaciones se encuentran los eventos, del los cuales podemos destacar:  INITIALIZATION  AT SELECTION-SCREEN  START-OF-SELECTION Cuando se inicia un programa de ABAP, todos los objetos de datos globales de los programas son los primeros creado en la memoria de trabajo (asignación de memoria). Después de eso, en tiempo de ejecución se desencadena varios acontecimientos en sucesión. Si existe un bloque de procesamiento en un evento en el programa, las declaraciones de este bloque se ejecutan en secuencia. El orden como se ejecutan es el siguiente: 1. INITIALIZATION Se utiliza para inicializar o para cargar valores en la pantalla de de selección, previo a que esta sea mostrada. Este proceso se ejecuta desde que se lanzo la transacción y hasta que se muestra la pantalla de selección. 2. AT SELECTION-SCREEN Es utilizado para valida los datos ingresados en la pantalla y para validar niveles de autorización. Es lanzado siempre que se oprime ENTER en la pantalla de selección o cuando se oprime F8. 3. START-OF-SELECTION Es utilizado para la ejecución completa del programa. Es lanzado luego de oprimir F8. Es recomendable utilizar Subrutinas para la ejecución del código.
  21. 21. 21 El ejemplo dado a continuación, contiene una pantalla de selección con un campo de entrada para una fecha. En circunstancias normales, la fecha actual es la de aparecer como el valor por defecto (DEFAULT SY-DATUM). Sin embargo, 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. Simplemente, no hay instrucciones ejecutadas por el correspondiente y se continua con el evento siguiente. Si no hay ningún evento implementado dentro del programa, asume que todas las sentencias corresponden al STAR-OF-SELECTION. Además de los eventos ya mencionados existen otro que veremos más adelante en este mismo manual. Ej. AT LINE-SELECTION, este evento se ejecuta cuando el usuario hace doble clic en una lista.
  22. 22. 22 Este evento puede ser utilizado, por ejemplo, para mostrar la información detallada del registro seleccionado en la lista. Además de los eventos ya mencionados, se pueden utilizar otros bloques de procesamiento. Por ejemplo las Subrutinas (FORM ENDFORM) este bloque es ejecutado por la sentencia (PERFORM). El siguiente grafico muestra la estructura general de un programa ABAP: Report ZCURSOS. INCLUDE zi_zcursos_top. TYPES: DATA: INCLUDE zi_zcursos_screen. PARAMETERS: SELECT-OPTIONS: INCLUDE zi_zcursos_form. FORM ENDFORM. INITIALIZATION. ….. ….. AT SELECTION-SCREEN. ….. ….. START-OF-SELECTION. ….. …..
  23. 23. 23 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. Vamos a echar un vistazo a los tipos estándar predefinidos por SAP ABAP (Implementados con TYPES) en primer lugar. Se dividen en dos grupos: tipos completos e incompletos. Los siguientes tipos de datos ABAP Standard son completos. Esto significa que ya contienen el tipo de datos y longitud. Complete ABAP standard types D Type for date(D), format: YYYYMMDD, length 8 (fixed) T Type for time (T), format: HHMMSS, length 6 (fixed) I Type for integer (I), length 4 (fixed) F Type for floating point number (F), 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 no contienen la longitud definida. 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
  24. 24. 24 P Type for packed number (Packed number) for which the fixed length is to be specified. (In the definition of a packed number, the number of decimal points may also be specified.) 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. En este capítulo podremos ver como declarar internamente en nuestros programas cada uno de los tipos de datos. Los datos tipos de datos globales se podrán ver en el curso de Diccionario de Datos. Hay 3 tipos de categorías de tipos de datos: Standard, Local y Global. Los tipos de datos Standard son los vistos anteriormente, Ej type C. Los tipos de datos Locales son los declarados con TYPES. Los tipos de datos Globales, son los declarados en el Diccionario SAP.
  25. 25. 25 En el siguiente grafico podremos ver la palabra reservada VALUE para inicializar una variable con un valor predefinido. 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.
  26. 26. 26 Ejemplo: DATA: MYVAR. En este ejemplo al faltar el tipo de datos y la extensión, se asume un CHAR de 1 carácter. Constantes: Tipos de datos fijos requieren valores fijos que se deben cargar cuando se declaran las constantes. Usted puede definir constantes con la palabra reservada CONSTANTS. Se define de manera similar a los DATA Elements con el agregado de la palabra VALUE que es un requisito obligatorio. Los tipos de datos locales solo pueden ser usadas en el programa que fueron definidas. 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.  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 pueden modificar los tipos de datos sin tocar el código ABAP. Sentencias básicas ABAP
  27. 27. 27 Cuando se inicia el programa, 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. Todos los Data Objects son asignados previamente con el valor inicial del tipo específico, excepto si un valor diferente fue pre-asignado mediante la sentencia VALUE. Usted puede utilizar la instrucción MOVE para transferir el contenido de un objeto de datos a otro objeto de datos. Los siguientes dos sintaxis tienen el mismo efecto:  MOVE var1 TO var2..  var2 = var1.. En ambos casos los objetos var1 y var2 son de diferentes tipos, por lo tanto podría haber un conflicto de tipos. En este caso, la conversión de tipos se realiza de forma automática. La sentencia CLEAR borra el contenido de la variable. En ABAP podrás utilizar sentencias aritméticas.  + SUMA  - RESTA  * Multiplicación  / División  ** Exponencial
  28. 28. 28 Sentencias Condicionales En ABAP usted tiene 2 maneras de ejecutar diferentes secuencias de sentencias, dependiendo de las necesidades.  En la construcción IF puede definir cualquier expresiones lógicas como las condiciones de verificación. Si se cumple la condición, el sistema ejecuta el bloque de instrucciones correspondiente. De lo contrario, la condición especificada en la rama ELSEIF (varios son posibles) se comprueba y así sucesivamente. Si ninguna de las condiciones especificadas se cumplen, entonces el sistema ejecuta la rama ELSE, si está disponible. ELSEIF y ramas ELSE son opcionales. 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.  Usted puede utilizar CASE para distinguir claramente los casos. 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. Si el contenido de los campos coinciden, el bloque de instrucciones respectivas se procesa. Si la comparación es incorrecta, el sistema ejecuta la rama OTHERS si está disponible. A excepción del primer WHEN, los demás son opcionales. En ambas sentencias la secuencia de comparación es de arriba hacia abajo. Apenas encuentre una coincidencia ejecuta esa parte del código y luego salta hasta el ENDIF o el ENDCASE.
  29. 29. 29 Sentencias LOOPS o repetitivas. DO. IF <condición>. EXIT. ENDIF. ENDDO. DO n TIMES. Sentencias ABAP ENDIF. WHILE <condición>. Sentencias ABAP ENDWHILE. SELECT ... FROM <dbtab> ... Sentencias ABAP ENDSELECT. LOOP AT <Tabla Interna>. Sentencias ABAP ENDLOOP. Hay cuatro construcciones de bucle en ABAP. En la DO y en el WHILE el campo del sistema SY-INDEX contiene el número de vuelta que se está ejecutando. Por lo tanto, consultar este campo del sistema sólo tiene sentido dentro de un bucle. En bucles anidados, SY-INDEX contiene siempre el número de vuelta del bucle en el que se encuentra. La sentencia DO ENDDO, solo tiene sentido si colocamos la palabra reservada EXIT con alguna condición que amerite salir. La sentencia WHILE ENDWHILE, se va a ejecutar siempre que la condición sea verdadera, para salir tendremos que cambiar el valor de la condición. La sentencia SELECT y la sentencia LOOP se utilizan para recorrer tablas, la primera tablas de base de datos y la segunda tablas internas. Creación de Mensajes. Para crear mensajes se utiliza la transacción SE91. En ella se crea una clase de mensajes y dentro podremos agregar todos los mensajes que queramos. 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.
  30. 30. 30 Dentro de nuestro programa ABAP con el botón PATRON podremos agregar nuestro mensaje en el código. A continuación vemos los distintos tipos de mensajes que podemos seleccionar.
  31. 31. 31 Usted utiliza la instrucción MENSSAGE para enviar mensajes de diálogo a los usuarios de su programa. Al hacer esto, debe especificar el número de tres dígitos y la clase de mensaje. Mensaje número y clase de mensaje identifica claramente el mensaje que se mostrará. Se utiliza el tipo de mensaje para indicar qué tipo de mensaje se va a mostrar. Trabajando con ABAP Debugger Hay varias maneras de activar el debug: Colocando un BreakPoint dentro del código de mi programa. Esto nos va a proporcionar que frene en es punto nuestro programa en tiempo de ejecución. 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. Ya dentro de la aplicación para debuguiar podremos utilizar las teclas F5, F6, F7 y F8 para ejecutar distintos comandos.
  32. 32. 32 La tecla F5 nos permite avanzar paso a paso por nuestro código, o sea línea por línea de código. La tecla F6 nos permite saltear Subrutinas, Módulos de Función, ETC. Aclaro que igual se ejecutan pero sin que veamos ese código de ejecución. 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. Selection Screen Figure: Selection Screen: Overview
  33. 33. 33 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.
  34. 34. 34 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.
  35. 35. 35 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.
  36. 36. 36 Trabajando con Estructuras En ABAP, usted puede definir estructuras. Esto le permite combinar variables de diferentes tipos dentro de una unidad lógica denominada estructura. Esto significa que los componentes o variables pueden ser parte de una estructure e incluso de una tabla interna. En el programa, las variables de las estructuras son definidas con DATA. Cuando usted define los tipos de datos con TYPES, puede referenciarlos a:  Elementos de datos del diccionario.  A una tabla transparente  A una estructura  A tipos de datos declarados localmente en el programa In the program, structure variables are defined with the DATA statement, in the same way as elementary data objects. When you set the types, you can refer to . a Dictionary structure . a transparent table (that is then used as a structure type) or . 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.
  37. 37. 37 Usted puede usar la sentencia TYPES para definir estructuras locales. BEGIN OF structure_type_name, ... , END OF structure_type_name. Puede asignar cualquier tipo de datos usando TYPE. Para mas información puede oprimir F1 sobre la sentencia TYPES. También puede definir la WorkArea directamente usando DATA: DATA: BEGIN OF structure_name, ... , END OF structure_name. Los componentes de la estructura son accedidos utilizando el -. Por esta razón usted no debe usar guiones en los nombres.
  38. 38. 38 La sentencia MOVE-CORRESPONDING copia el contenido de la estructura de origen a la de destino un componente a la vez. Solo son considerados los componentes con el mismo nombre. Para asignar individualmente cada valor se utiliza la sentencia MOVE. Trabajando con ABAP Debugger Cuando estamos en modo debugg, haciéndole doble click en la estructura podremos ver su contenido.
  39. 39. 39 Trabajando con Tablas Internas Una tabla interna es un objeto que puede tener muchos registros de una misma estructura. La cantidad de información que puede tener cada tabla interna está restringida solo por la capacidad del sistema. Cada elemento de una tabla interna se lo denomina registro o entrada de una tabla. Por esta razón cada componente individual en un registro se lo llama campo o columna. El tipo de registro está definido previamente con DATA o con TYPES. Las tablas internas, por lo tanto son una forma simple de procesamiento de grandes conjuntos de datos de manera estructurada. Las aplicaciones típicas incluyen:  Obtener información de la base de datos.  Formatear información para una salida de reporte  Formatear información para otros servicios (Ej. Subrutinas, Módulos de Función, Etc.) 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. Key La clave de una tabla interna se compone de los campos claves, incluyendo su ordenamiento. El orden de los campos clave se utiliza, entre otras cosas, para el ordenamiento según sus campos claves. Table kind Usted puede elegir entre 3 diferentes tipos de tablas: Standard, Sorted, and Hashed. Dependiendo el tipo de acceso que utilice, puede ser más apropiado uno u otro tipo de tabla. . Con STANDARD TABLES la fila de numeración (índice) se mantiene internamente. Tanto el índice y los accesos principales son posibles.
  40. 40. 40 Usted debe elegir este tipo de tabla cuando se utilizan, sobre todo el índice para acceder a la tabla interna. . Con SORT TABLES los registros de datos se ordenan automáticamente en orden ascendente de los campos clave. También en este caso, el índice se mantiene internamente. 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. . Con HASHED TABLES los registros de datos se gestionan clave para un acceso rápido mediante el procedimiento de hashing. Una clave única es requerida. Con las tablas hash sólo tiene acceso clave son posibles. El tipo de datos de una tabla interna es denominado Tipo Tabla. Los tipos de tabla pueden definirse globalmente en el diccionario de SAP o de forma local en el programa con la sentencia TYPES. En el grafico anterior podemos ver como declarar una tabla declarada de un tipo de datos proveniente del diccionario. En el grafico anterior muestra un tabla interna declarada de forma local. Usted puede definirle una clave con la sentencia KEY y los campos de la tabla.
  41. 41. 41 En el ejemplo dado, declaramos una estructura con campos apuntando al diccionario y con esa estructura declaramos una tabla interna indicando el tipo de tabla interna (Standard, Sorted, Hashed). Cualquiera de los casos descriptos en el grafico anterior declaran una misma tabla interna. Si la tabla interna es del tipo Standard no es necesario aclararlo.
  42. 42. 42 Para el proceso de un solo registro de una tabla interna, siempre necesitara la creación de una WorkArea con el mismo formato. APPEND Agrega el contenido de una workarea en una tabla interna. Esta operación solo puede ser usada en tablas Standard. INSERT Inserta el contenido de una WorkArea en una tabla interna. En el caso de las talas Standard funciona igual que el APPEND ingresando el registro en la última posición. En el caso de las tablas internas de tipo Sort y Hashed serán ingresados donde correspondan. READ Copia el contenido de un registro de una tabla interna a una WorkArea. MODIFY Modifica un registro de una tabla interna con el contenido de una WorkArea. DELETE Borra registros de una tabla interna. COLLECT Acumula el contenido de una WorkArea en una tabla interna que tengan la misma clave, en caso contrario inserta el registro.
  43. 43. 43 LOOP . . . 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. INSERT Inserta el contenido de varios registros de una tabla interna a otra cuando se cumple 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.
  44. 44. 44 Usted puede insertar un registro en un atabla interna agregando los datos en una WorkArea y utilizando la sentencia INSERT. Según el tipo de tabla será insertado donde corresponda. 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-TABIX contiene el número de registro que está trabajando, o sea la vuelta de loop que corresponda. 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. Para modificar el contenido de la tabla que está recorriendo, primero modificar la WorkArea y luego con la sentencia MODIFY modificar la tabla. MODIFY itab FROM wa.
  45. 45. 45 En el LOOP, usted podrá restringir el acceso a ciertos registros usando el agregado de FORM- TO. En el ejemplo anterior el sistema recorre solo los primeros 5 registros. Usted puede usar el READ TABLE para leer un solo registro. Usted puede agregar la sentencia INDEX para especificar el número especifico de registro a leer. En el loop usted podrá restringir los accesos usando el agregado WHERE. En el ejemplo anterior solo recorre los registros en donde carrid sea igual a LH. Usted puede usar el READ TABLE para leer un registro de una tabla interna. En este caso usted utiliza la sintaxis WITH TABLE KEY para elegir el registro correcto. La variable de sistema SY-SUBRC se setea en cero cuando se ha encontrado un registro. La tablas de tipo Standard y Hashed pueden ser ordenadas de forma ascendente o descendente por cualquier columna utilizando la sentencia SORT. Si no se especifica forma de ordenamiento el mismo es de forma ascendente.
  46. 46. 46 REFRESH Borra el contenido de la tabla interna. CLEAR Para tablas sin header line borra el contenido de la tabla. En las que tienen cabecera, borra la cabecera. FREE Borra el contenido de la tabla y también el espacio de memoria que ocupa. En el debug, usted puede monitorear el contenido de una tabla interna.
  47. 47. 47 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. 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. Esto también simplifica la sintaxis de los comandos de tabla, ya que el sistema siempre se refiere al área de trabajo generados automáticamente, por lo que ya no tiene que ser especificado explícitamente. A pesar de las ventajas mencionadas ya no desea utilizar la tabla con líneas de cabecera, porque: -El área de trabajo generados automáticamente tiene el mismo nombre que la tabla interna, que no contribuye a hacer que el programa de lectura. -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). - 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. 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, entonces ITAB-tablefield se utiliza para abordar el campo correspondiente en el área de trabajo. Usted puede abordar el cuerpo de la tabla con ITAB []. El siguiente ejemplo ilustra la situación antes mencionada: DATA itab1 TYPE TABLE OF scarr WITH HEADER LINE. DATA itab2 LIKE itab1. itab1 = itab2 . Sólo las operaciones con líneas de cabecera! itab1[] = itab2[] . 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. DATA: BEGIN OF itab OCCURS n, field1 TYPE ... , field2 TYPE ... , ... , END OF itab.
  48. 48. 48 Ejercicio 2: Estructuras y Tablas 1) Declarar un parámetro de selección del tipo scarr-carrid. 2) Declarar una tabla interna del tipo Tipo tabla SPFLI_TAB 3) Declarar una wa del tipo spfli. 4) Declarar una wa del tipo scarr. ********************************************** 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. 6) Listar los campos carrid, carrname y url de esa estructura. 7) Levantar la información de la tabla spfli y cargarla en la tabla interna creada anteriormente. 8) Listar la tabla interna. Elegir los campos a listar. 9) Copiar con MOVE-CORRESPONDING de WA_SCARR a otra estructura con menos campos.
  49. 49. 49 Unidad 5 Acceso a Base de Datos Leyendo Tablas de Base de Datos Obteniendo Información SQL es la abreviatura de (Structured Query Language), un lenguaje que define, cambia, cread y lee el acceso a Base de datos. Cada Base de Datos relacional tiene un SQL Nativo, que es especifico para esa base de datos. En ABAP uno programa en Open SQL, funcionando sobre cualquier base de datos. Open SQL es convertido dinámicamente a SQL Nativo, evitando problemas con futuros cambios de base de datos. El siguiente grafico no muestra de forma genérica como es la sentencia de acceso a Base de datos. SELECT: describe que campos de la tabla van a ser leídos. FROM: Indicamos el nombre de la tabla que a va ser accedida. INTO: determina la Variable, 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.
  50. 50. 50 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. Si uno no define el Mandante es asumido el mandante actual. Usted puede poner * en lugar de especificar los campos a seleccionar siempre que quiera traer todas las columnas. La variable de sistema SY-SUBRC igual a 0 nos indica que se han seleccionado registros de la base de datos. 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. Solo la sentencia CORRESPONDING FIELDS OF machea por nombre de campo. En vez de una work Area podrá poner nombre de variables de la siguiente manera: INTO (field_1, ... , field_n)
  51. 51. 51 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. Si desea utilizar una WORK AREA para recibir el registro leído, que tiene campos con los mismos nombres que los campos en la lista de objetivos, pero tiene una estructura diferente (campos adicionales, el orden de campos es diferente), tiene sentido utilizar el INTO CORRESPONDING FIELDS. Esto tiene el efecto de que los únicos campos del mismo nombre, se llenan en la zona objetivo. Por favor, asegúrese de que los tipos de campo correspondientes son también los mismas, porque de lo contrario (como en la declaración MOVE), una conversión (complicada) ocurre y es posible que los datos incompletos (causadas por cortes) pueden ser transportados a los campos .
  52. 52. 52 Usted puede usar la sentencia INTO TABLE para copiar los registros seleccionados dentro de una tabla interna. Podrá agregarse la sentencia INTO CORRESPONDING FIELDS OF para que ingrese la información en los campos del mismo nombre de la tabla interna. La variable de sistema SY-SUBRC en cero significa que por lo menos un registro fue copiado. La variable de sistema SY-DBCNT nos dice la cantidad de registros traídos de la Base de Datos. Una tabla de Base de Datos es llamada CLIENT-SPECIFIC, si tiene el campo (MANDT) como primer campo clave. Si usted selecciona información de tablas con MANDT sin especificar el mismo, solo la información del mandante en el cual se encuentra será accedida. Si una tabla de Base de Datos es frecuentemente accedida por campos que no son claves, debería definir un índice secundario por los campos accedidos en orden para agilizar el acceso. Después de crear y activar un índice, la base de datos optimizara automáticamente el índice cuando un programa es ejecutado, siempre que ayude a la rapidez del acceso. El índice primario, consiste en todos los campos claves de la tabla, y es creado automáticamente. Optimiza todos los acceso que se realicen por todos o por parte de la clave. Leyendo Múltiples Tablas de Base de Datos Hay a menudo un requisito para leer datos de diferentes tablas y mostrarlo. Hay cuatro formas para acceder a la información usando componentes reusables: . Logical databases: Base de datos Lógicas. (Programas de recuperación de datos que leer los datos de las tablas que van de la mano jerárquicamente). . Function modules: Módulos de Funciones. Son subrutinas guardadas en el sistema SAP usando la encapsulación de funcionalidad.
  53. 53. 53 . BAPIs: Módulos de Función que encapsulan Objetos de Negocio. . Methods of global classes: Métodos de Clases Globales. La información correspondiente a estas 4 formas se verán en las unidades correspondientes, 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. 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. -En un programa usted utiliza la sentencia Select con el agregado de INNER JOIN. Ejercicio 1: Estructuras y Tablas 1) Terminar con el ejercicio de la Unidad 4.
  54. 54. 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. 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. 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. Además puede procesar una subrutina on debugg como una unidad y luego ver el resultado, haciendo mas fácil encontrar un error. Como muestra el siguiente grafico, puede llamar n veces a una misma rutina pasándole valores diferente. Ose variables locales que no quiere que se modifiquen, sino que solo sean utilizadas o modificadas en la rutina.
  55. 55. 55 La asignación de las variable es uno a uno, pudiendo cambiarle los nombres: Hay 3 formas de pasar valores a una subrutina: 1) Llamado por valor, 2) Llamada por valor y resultado y 3) llamado por referencia:
  56. 56. 56 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. Call by value La variable F1 es llamada por valor usando el USING y el prefijo VALUE. En este caso los valores originales de la variable no se ven afectados. 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. Call by reference La variable f3 es llamada por referencia sin el prefijo VALUE. Es un puntero a la memoria de la variable original. En todo momento estoy modificando el valor original de la variable.
  57. 57. 57 Se debe especificar el tipo de datos de los objetos que se están recibiendo. Solo es obligatorio cuando son tablas o Work Areas. Existen la variables globales y locales en un programa. La globales son las declaradas en el TOP y pueden ser usadas en cualquier parte del programa, y las locales son las declaradas en una subrutina. Naces cuando la rutina se ejecuta y mueren cuando esta termina. Se pueden pasar variables, Work Areas y tablas internas. En el siguiente ejemplo se esta pasando con USING una variable y una tabla interna; y con CHANGING una variable.
  58. 58. 58
  59. 59. 59 Ejercicio 1: Listas - Subrutinas - Eventos 1) Declarar un tipo estructura con los siguientes campos: carrid TYPE sflight-carrid, connid fldate seatsmax seatsocc seatsocc_b seatsmax_f seatsocc_f percentage(2) TYPE p DECIMALS 2, Cada uno de estos tiene su tipo con el mismo nombre en la tabla del DD sflight. 2) Declarar una work area del tipo antes creado y otra de tipo sbook. 3) Declarar 2 tablas internas de los tipos de estructuras declarados anteriormente. 4) Pantalla: Declarar un parameter de tipo S_CARR_ID y Declarar un select-options del tipo wa-connid. 5) Hacer un select a la tabla sflight filtrando con los parámetros de selección declarados anteriormente, colocando el resultado en la tabla interna también declarada anteriormente. 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. (seatsocc_b + seatsmax_f + seatsocc_f) / seatsmax Imprimir: carrid, connid, fldate, seatsocc, seatsmax, percentage,'%'. 7) Y guardar con HIDE la siguiente info: carrid, connid, fldate 8) Si en el select no se encontró ningún dato, imprimir un mensage advirtiendo eso. 9) Si el usuario realizo un doble click sobre una línea imprimir la siguiente información: a. La guardada anteriormente con hide más: b. Realizar un select a la tabla sbook, filtrada por carrid, connid y fldate. Guardar dicha información en la tabla interna del tipo sbook creada anteriormente. c. Imprimir los siguientes datos loopeando la tabla bookid, customid, custtype, class, order_date, smoker, cancelled.
  60. 60. 60 . 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. 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. - Las listas pueden mostrar los valores monetarios en la moneda correspondiente. Las siguientes opciones están disponibles cuando se programa una lista: - Pantalla: Se puede añadir colores e iconos. - Impresoras . - Internet / Intranet: El sistema es capaz de convertir automáticamente a formato HTML. - Guardar: Le permite guardar listas en el sistema SAP, así como exterior (para su posterior procesamiento, por ejemplo, el uso de programas de hoja de cálculo).
  61. 61. 61 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. La Interfaz de usuario. lección proporciona más información sobre este. 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. Si no se define cabecera de la lista, el nombre del programa (breve descripción) se utiliza como el encabezado. Para el mantenimiento inicial de los titulos, primero debe activar su programa. A continuación, crear la lista mediante la ejecución del programa. A continuación, puede mantener los encabezados directamente encima de la lista mediante el menú Sistema → Lista → Lista de cabecera.
  62. 62. 62 La próxima vez que inicie el programa, aparecerá automáticamente en la lista. Si desea cambiar el encabezado de mantenimiento (seguimiento de mantenimiento) , entonces usted no tiene que comenzar de nuevo el programa y generar la lista. En lugar, 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 → . Figura: capacidades multilingües de las listas Los elementos de texto de un programa - se incluyen también en la cabecera - se puede traducir a diferentes idiomas. Cuando un usuario ejecuta un programa, los elementos pertinentes de texto siempre se muestra automáticamente en el idioma de inicio de sesión del usuario (automática de idioma). Se trata de traducir los elementos de texto de su programa de elegir el menú Ir → Traducción de la ABAP-Editor. Para el diseño de textos en la lista del cuerpo en varios idiomas y utilizar el lenguaje automático, símbolos de texto se utilizan. Un símbolo de texto se compone de un xxx ID de tres dígitos alfanuméricos, así como un texto traducible y, como los encabezados, pertenece a los elementos de texto de un programa. Hay dos opciones para definir los símbolos de texto para su programa:. Desde el Editor de ABAP, seleccione el menú Pasar a → → Elementos de Texto Texto Símbolos o . 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). Desde su programa, la dirección en un símbolo de texto con texto-xxx. 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. Traducción de los elementos de texto. 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'...'(). Aquí,'...' debe ser el texto del símbolo de texto en el idioma original del programa. Sugerencia: Tenga en cuenta que los elementos de texto también tiene que ser activado.
  63. 63. 63 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. Además de la instrucción WRITE, también puede utilizar SKIP y Uline a la estructura de la lista. Consulte la documentación de la palabra clave de ABAP para estos dos estados. 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, el evento ABAP AT-LINE-SELECTION selección se ha disparado. 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, a continuación, debe implementar esto en su programa en la forma de un bloque de tratamiento correspondiente. Allí, usted puede leer los datos solicitados por el usuario y salida de ellos, con la declaración ESCRITURA. Los detalles lista con los datos de salida, que. sobrescribe. la lista de base, se genera automáticamente. Al
  64. 64. 64 pulsar el botón con la flecha. Verde. o la tecla de función F3, el usuario puede volver a la lista de base y elegir otra fila. Sugerencia: Si un bloque de AT LINE-SELECCIÓN se implementa en el programa, a continuación, un botón con el símbolo de la lupa también aparece encima de la lista. 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. Listas Figura: Generación de varios detalles La selección de filas en la lista de detalles también desencadena el evento AT LINE- SELECTION. Esto significa que el bloque de procesamiento correspondiente en el programa se ejecuta en este caso también. 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. Usted puede utilizar el campo del sistema SY-lsind para ello. Este campo muestra la lista actual nivel: .0. de la lista básica, .1. para la lista de los primeros detalles, y así sucesivamente. 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, cada regresar a la lista anterior se reduce el nivel SY-lsind en 1. Hasta 20 niveles de lista son posibles. El valor de SY-lsind se debe utilizar para controlar el procesamiento en el bloque de AT LINE- selección (por ejemplo, por medio de una instrucción CASE). Una declaración WRITE se ejecuta siempre en el nivel actual lista. Si no se genera la lista de detalles de una selección de filas en el bloque de conducto AT, SY-lsind se reduce automáticamente a uno. Posteriormente, el sistema muestra el mismo nivel en que la selección se llevó a cabo la fila.
  65. 65. 65 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
  66. 66. 66 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.
  67. 67. 67 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)
  68. 68. 68 Pantalla de Selección Ventajas de las pantallas de selección Figura: Arquitectura y efectos de selección de pantalla En general, las pantallas de selección se utilizan para introducir criterios de selección para la selección de datos. Por ejemplo, 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. Además de reducir el requisito de memoria, esto también reduce la carga de red. Figura: Pantalla de selección de atributos
  69. 69. 69 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. En tiempo de ejecución de los textos se muestran automáticamente en el idioma de inicio de sesión del usuario. (Automática del idioma) - 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á, por lo que ni siquiera van a aparecer en la pantalla de selección. - Además de las entradas solo valor (PARAMETERS), también se puede aplicar selecciones complejas (SELECT-OPTIONS) en la pantalla de selección. El usuario puede entonces introducir intervalos, las condiciones comparativas o incluso los patrones como las restricciones. - Si el campo de entrada se define mediante un elemento de diccionario (por ejemplo, datos de elementos), entonces el campo de la documentación (documentación del elemento de datos) se pueden mostrar en el campo de entrada, utilizando la F1 (Ayuda para entradas) la tecla de función. - 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. - 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. Figura: Uso de las opciones de selección El gráfico anterior ilustra el uso de selection options, que permiten entradas complejas. Cada pantalla de selección contiene un icono de información (también conocido como una ayuda "en pantalla" icono). Seleccione este icono para mostrar información adicional.
  70. 70. 70 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, la siguiente información semántica adicional está disponible en la pantalla de selección: - 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). (Véase el gráfico siguiente). 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, está disponible como una ayuda de entrada (ayuda F4). (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), de la que puede seleccionar uno para la entrada.) Si el campo de entrada se escribe con un campo de estructura que se define a su vez se utiliza un elemento de datos, entonces antes descrita información semántica del elemento de datos está disponible en la pantalla de selección. Si el campo de la estructura también se copia en un buscar ayuda, entonces esto. Sobrescribe. la ayuda de búsqueda del elemento de datos. Para obtener más información, consulte la documentación en línea para el Diccionario ABAP. Figura: Selección de Textos
  71. 71. 71 En la pantalla de selección, los nombres de los campos de entrada aparecen como su descripción de forma predeterminada. Sin embargo, puede reemplazarlos por los textos de selección correspondientes, que luego se puede traducir a los idiomas más que usted requiere. En tiempo de ejecución, los textos de selección son mostrados en la lengua de inicio de sesión del usuario (automática de idioma). Al igual que los encabezados de la lista y los símbolos de texto, textos de selección pertenecen a los elementos de texto del programa. Desde el Editor de ABAP, seleccione el menú Ir GoTo → Text Elements→Selection Texts para su mantenimiento. Puede implementar su traducción con el menú Ir →.Traducción (GoTo → Translation.). Si el campo de entrada se escribe directamente o indirectamente con un elemento de datos, puede copiar el nombre del campo a largo de uno de los textos guardados en el diccionario (. Diccionario de referencia.). Esto le proporciona una opción fácil para la normalización de los textos. Figura: Variantes Las pantallas de selección efectuada son las variantes del programa. Después de que el programa ha sido iniciado, el usuario puede cargar variantes a la pantalla de selección respectivo para facilitar repetidas o casi idénticos entradas idénticas. Usted tiene que incluir una variante cuando se programa un programa de ABAP en corrida de fondo, si el programa tiene una pantalla de selección, como entradas de usuario no son posibles en el fondo. Para definir las variantes específicas-programa por iniciar el programa, completando la pantalla de selección y guardarlo (botón de disco). También puede definir los diferentes atributos de la variante. Si las variantes ya han sido definidos para un programa, a continuación, un pulsador adicional aparece en la pantalla de selección con la bandera de texto. Variante conseguir ..... Este botón se enumeran las variantes definidas para la selección. Con el fin de poder definir sus propias variantes, el usuario debe contar con la autorización correspondiente (en el sistema de producción). Pero también puede definir variantes en el sistema de desarrollo y luego los han transportado al sistema de producción. Variantes con el prefijo de nombre 'CUS &' son variantes del sistema. Son transportados como objetos del repositorio común y no específica del cliente. Todas las otras variantes son específica del cliente y debe ser transportado por separado. Desde el Editor de ABAP, seleccione el menú Ir → variantes (GoTo → Variants) para ir a la variante de la gestión de su programa, donde se puede realizar en marcha para su mantenimiento siga variantes con respecto a los valores y atributos. Allí, elija el menú Herramientas → Transporte Solicitud (Tools → Transport Request) para especificar las variantes para ser transportado, así como solicitar una. El transporte pasa cuando la solicitud se libera. Para obtener más información sobre las variantes, elija el botón de información sobre atributos de la variante en la pantalla a fin de mantener sus atributos de la variante.
  72. 72. 72 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 vez más, la definición de dicha variable de entrada crea una variable en el sistema e, implícitamente, genera una pantalla de selección con una opción de entrada correspondiente. Una variable de entrada se define en la misma forma que una variable ordinaria. La única diferencia es que la palabra clave Parámetros se utiliza en lugar de datos. Usted tiene que considerar tres características: - El nombre de la variable de entrada puede ser de hasta ocho caracteres de longitud. - No puede ser escrita con la F tipos estándar, cuerda y XSTRING. - La asignación de un valor predeterminado no se implementa con la adición de valor, pero con la adición DEFAULT. 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. Si el usuario introduce un valor y elige Ejecutar, los valores de entrada se transfieren a la validez interna y, por ejemplo, se puede utilizar para restringir la selección de base de datos. Figura: Introducción de restricciones complejas (la instrucción SELECT-OPTIONS)
  73. 73. 73 opciones de selección se determinarán en el momento de usar el nombre SELECT-OPTIONS PARA data_object. Norma, donde nombre es el nombre de la opción de seleccionar y data_object es una variable ya definida. 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). entradas del usuario son transportados a la tabla interna generada automáticamente cuando se selecciona Ejecutar. Este cuadro siempre tiene cuatro columnas: signo, opción, de bajo y alto. Lo anterior muestra gráfica, que se crean entradas para los que la entrada del usuario: -Si "LH" se introduce, se genera una fila con los valores "I" (inclusive), "EQ" (igual), "LH" y del Espacio. - Si el intervalo de "AA" a "DL" se introduce, se genera una fila con los valores "I" (inclusive), "BT" (entre), "AA" y "DL”. - Si "BA" se introduce como el valor único que se excluye, se genera una fila con los valores "E" (exclusivo), "EQ" (igual), "BA" y del Espacio. La tabla interna llena los criterios de selección se inscriben pueden ser utilizados para la selección de bases de datos, como se ilustra en el gráfico. El contenido de la tabla se interpreta de la siguiente manera: Si i_1, ... , Y I_n E_1, ... , Son los e_m incluido / condiciones exclusivas de la tabla interna, la condición de compuestos siguientes se utiliza para limitar la selección de datos: ( I_1 OR ... OR I_n ) AND ( NOT E_1 ) AND ... AND (NOT E_m ) Si la tabla está vacía porque no hay restricciones, las condiciones en que se aplica siempre en el campo respectivo. Sugerencia: El operador IN también se puede utilizar en expresiones lógicas: SI- wa_spfli carrid EN so_car. 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). 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, su contenido se muestra en la pantalla de selección tal como se sugiere las condiciones que se pueden sobrescribir. Para más detalles, consulte la documentación de la palabra clave para SELECT- OPTIONS. Evento después de la Selección Screen Figura: En el evento AT SELECTION-SCREEN
  74. 74. 74 Declarando Campos con Select Options Figure: Selections with SELECT-OPTIONS The SELECT-OPTIONS keyword is a declarative language element with the same eight- character naming restriction as PARAMETERS. Unlike thePARAMETERS keyword, SELECT- OPTIONS permits a range of values and complex selections instead of just a single input- ready field. The SELECT-OPTIONS keyword generates an internal table <seltab> with a standard structure and a header line. This table has four columns: sign, option, low, and high. Just as with PARAMETERS, you can maintain the selection text using the menu path Goto → Text elements → Selection texts. Use the addition FOR to specify the field against which the system should check selection entries. This field must be declared in a DATA or TABLES statement. 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: . SIGN: I (Include), E (Exclude) . OPTION: EQ, NE, LE, LT, GE, GT, BT (Between), NB (Not Between), CP (Contains Pattern), NP (Contains Pattern not) The selection set is the union of all includes (I1,..., In) minus the union of all excludes (E1, ..., Em). If no values are entered in the SELECT-OPTIONS object, all rows are returned from the database.
  75. 75. 75 Figure: SELECT-OPTIONS with Multiple Selection Criteria When the user makes entries in a SELECT-OPTIONS object, the system automatically populates the internal table. To change the default entries for table fields SIGN and OPTION, choose menu Edit → Selection options., the system offers alternatives appropriate for the selection. If the traffic signal icon is green during Select, there is an (I)nclusive in the sign column. A red light indicates (E)xclude. To delete a table entry, use the menu Edit → Delete selection criterion. Each selection criterion can be used to make multiple selections unless otherwise defined. If multiple selections are present, the color of the arrow changes from white to green. Figure: Syntax of the SELECT-OPTIONS Statement Additions to the SELECT-OPTIONS statements are: . 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 , which differ from the normal default <value> addition. You can set a default value for a SELECT-OPTIONS keyword with the DEFAULT <value> addition. If you assign a MEMORY ID <pid>, the system retrieves the current value from the SAP system memory and displays it automatically. LOWER CASE suppresses conversion of the entry to upper case. This addition is not permitted for Dictionary fields, because the attribute set in the Dictionary takes precedence.
  76. 76. 76 . OBLIGATORY generates a mandatory field. A question mark is displayed in the entry field in the selection screen and the user should enter a value. . NO-EXTENSION suppresses multiple single or multiple range selections. . NO INTERVALS suppresses the seltab-high (upper interval limit) entry on the selection screen. You can use the additional screen, Multiple selection, to specify ranges. 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. You can group screen elements that logically belong together using the extension BEGIN OF BLOCK <block> . You can place a frame around the screen elements using WITH FRAME. You can nest frames to a maximum depth of five. You can assign a title to the block only if you use a frame. You can declare the title as either text-xxx or a field name with maximum length of eight characters. In the second case, you set the text at runtime in the INITIALIZATION event. Before designing a selection screen, 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.
  77. 77. 77 To do so, you need to enclose the parameters between the SELECTION-SCREEN BEGIN OF LINE and SELECTION-SCREEN END OF LINE statements. The COMMENT parameter enables you to include text in the line. 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. The latter are low and high positions for the SELECT- OPTIONS field on the selection screen. Adding COMMENT ... FOR FIELD <f> ensures that F1 Help for the field <f> is displayed for the comment text and the parameter. If you hide the parameter (selection variant: attribute invisible), the comment text is also hidden. You can use POSITION <pos> to set the cursor for the next output position (only within ... 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). Después de que se haya procesado el bloque de proceso correspondiente, se acciona el acontecimiento siguiente de START-OF-SELECTION y el proceso relevante comenzado, si ejecute fue utilizado. Sin embargo, si Enter fue elegido, la pantalla de la selección se exhibe otra vez.
  78. 78. 78 Figura: Diálogos de error en AT-SELECCIÓN DE PANTALLA Inmediatamente antes de procesar el AT SELECTION-SCREEN bloque, las entradas de usuario se transfiere automáticamente a las variables correspondientes en el programa. Por lo tanto, tiene sentido para la aplicación requiere comprobaciones de autorización de entrada y en este bloque de tratamiento. Si el resultado de verificación es negativa, sólo tiene que enviar un mensaje de error al usuario y tener la pantalla de selección de muestra de nuevo. El usuario tiene entonces la opción de hacer nuevas entradas. Por el contrario, un mensaje de error en el START-OF-SELECTION bloque se mostrará en el programa de terminación. 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. 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. " SELECTION-SCREEN.
  79. 79. 79 Unidad 8 Sentencias Útiles ABAP CONCATENATE Definición Se utiliza para concatenar varios campos alfanuméricos en uso solo. Sintaxis: CONCATENATE <c1> ... <cn> INTO <campo> [ SEPARATED BY <s> ]. Esta sentencia concatena los campos campos <c1> ... <cn> en el campo <campo>. Los espacios en blanco se ignoran durante la operación. 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> ... <cn>. Si el resultado de la concatenación entra en el campo <campo>, SY-SUBRC = 0, si por el contrario, es necesario el truncamiento, SY-SUBRC = 4. Ejemplo 1: DATA: ONE(10) VALUE 'Ivan', TWO(3) VALUE ' Rodrigo', THREE(10) VALUE ' Baños', NAME(20). CONCATENATE ONE TWO THREE INTO NAME. La variable NAME valdría: IvanRodrigoBaños Ejemplo 2: DATA: ONE(10) VALUE 'Ivan', TWO(3) VALUE 'Rodrigo', THREE(10) VALUE 'Baños', NAME(20), SEPARATOR(4) VALUE 'GAUSS'. CONCATENATE SPACE ONE TWO THREE INTO NAME SEPARATED BY SPACE. La variable NAME valdría: Ivan Rodrigo Baños. SPLIT Definición Divide un campo alfanumérico en varios campos, gracias a algún separador. Sintaxis: SPLIT <campo> AT <delimitador> INTO <c1> ... <cn>. Esta sentencia utiliza el campo indicado en <delimitador> para separar los campos <c1> ... <cn> el contenido del campo <campo>. Si no hay especificado los suficientes campos para poder separar todo el contenido del campo <campo>, sobre el último se rellena el resto del campo <campo>. Si todos los campos destino son lo suficientemente grandes como para almacenar las partes de <campo>, SY-SUBRC vale 0. En caso contrario SY-SUBRC vale 4. 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>.
  80. 80. 80 Por cada parte del campo <campo el sistema añade una nueva línea en la tabla interna <tabla>. Ejemplo 1: DATA: NAMES(30) VALUE 'Charly, John, Peter', ONE(10), TWO(10), DELIMITER(2) VALUE ','. SPLIT NAMES AT DELIMITER INTO ONE TWO. ONE valdrá "Charly" y TWO tendrá el valor "John ". Ejemplo 2: DATA: BEGIN OF ITAB OCCURS 10, WORD(20), END OF ITAB. SPLIT 'STOP Two STOP Three STOP ' AT 'STOP' INTO TABLE ITAB. La tabla interna tendrá tres líneas, la primera en blanco, 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, antes de continuar con el proceso. Por el contrario, a veces es necesario deshacer algunos cambios realizados en la base de datos. Para confirmar los cambios realizados sobre la base de datos se utiliza la sentencia COMMIT WORK Sintaxis: COMMIT WORK [ AND WAIT ]. para deshacer los cambios realizados en la base de datos se utiliza la sentencia ROLLBACK WORK. Estas sentencias tienen un papel importante en la programación de transacciones de diálogo. Con la cláusula AND WAIT, el programa se para hasta que la tarea de actualización termina. Si la actualización es satisfactoria, SY-SUBRC vale 0, en caso contrario, SY-SUBRC toma un valor distinto de 0. TRANSLATE Definición Se utiliza para convertir caracteres de mayúscula a minúscula o viceversa, o para realizar sustituciones de caracteres a través de ciertas reglas. Sintaxis: TRANSLATE <campo> TO { UPPER | LOWE } CASE. Con la opción UPPER, las letras minúsculas de <campo> se convierten en mayúsculas. Y con la opción LOWER las letras mayúsculas se convierten en minúsculas. Para utilizar reglas de conversión se utiliza la siguiente sintaxis. TRANSLATE <campo> USING <regla>. Esta sentencia reemplaza todos los caracteres de <campo> que cumplan la regla de sustitución <regla>. La regla de sustitución contiene pares de letras, la primera de ellas indica el carácter a sustituir, la segunda indica el carácter de sustitución. <regla> puede ser una variable. CONDENSE Definición Para borrar espacios en blanco superfluos en campos alfanuméricos.
  81. 81. 81 Sintaxis: CONDENSE <campo> [ NO-GAPS ]. Borra cualquier secuencia de espacios en blanco, dejando sólo uno que exista entre palabras existentes en <campo>. Los espacios en blanco por la izquierda también desaparecen. Con la cláusula NO-GAPS todos los espacios en blanco desaparecen. Ejemplo 1: DATA: BEGIN OF NAME, TITLE(8), VALUE 'Dr.', FIRST_NAME(10), VALUE 'Michael', SURNAME(10), VALUE 'Hofmann', END OF NAME. CONDENSE NAME. WRITE NAME. La salida en pantalla sería: Dr. Michael Hofmann Ejemplo 2: DATA: BEGIN OF NAME, TITLE(8), VALUE 'Dr.', FIRST_NAME(10), VALUE 'Michael', SURNAME(10), VALUE 'Hofmann', END OF NAME. CONDENSE NAME NO-GAPS. La variable NAME valdría: Dr.MichaelHofmann UNPACK Definición Desempaqueta el contenido de un campo sobre otro. Sintaxis: UNPACK <campo1> TO <campo2>. Desempaqueta el campo <campo1> en el campo <campo2>. Es la operación contraria a la sentencia PACK. Ejemplo: DATA: P_FIELD(2) TYPE P VALUE 103, C_FIELD(4) TYPE C. UNPACK P_FIELD TO C_FIELD. P_FIELD: P'103C' -> C_FIELD: C'0103'.
  82. 82. 82 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. Sólo pueden ser definidas y aplicadas de programas especiales de ABAP, denominados grupos de funciones. Screens Grupos de función puede contener pantallas, que permite encapsular los cuadros de diálogo de usuario en los módulos de función. Remote capability Módulos de función se puede llamar por sistemas externos (Remote Function Call). Update Algunos módulos de función (módulos de actualización) puede ser utilizado para las actualizaciones. No se ejecutan directamente cuando se le llama, sino que al final de la unidad lógica de trabajo (LUW). Asynchronous execution Módulos de función se ejecuta en paralelo en un proceso de trabajo por separado. 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
  83. 83. 83 Presionando Si, retorna: Presionando No, retorna: exporting depende de donde me encuentro. exporting es lo que mando e importing es lo que envío, en invocación de la función es abreves. En importing puedo declarar una tabla (TYPE tabla del diccionario). en la solapa tabla tengo el problema que no se si es de entrada o salida.
  84. 84. 84 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. Grupos de funciones no son programas ejecutables, es decir, no se puede iniciar con los códigos de operación o por sus nombres. Sirven exclusivamente como programas principales de los módulos de función. En la mayoría de los casos, un grupo de funciones contiene varios módulos de función que realizan funciones relacionadas o actuar en los mismos datos. Cuando un programa ABAP llama a un módulo de funciones, el grupo de función correspondiente se carga en la sesión de residente, donde permanece hasta que el programa de llamada termina. 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, el grupo de funciones sólo se carga durante la primera llamada. Logical View of a Function Group Aparte de los módulos de función, los grupos de función también puede contener los siguientes elementos: . Datos declaraciones (objetos de datos globales) . Subrutinas . Pantallas Estos elementos pueden ser utilizados por todos los módulos de función en el grupo de funciones.
  85. 85. 85 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:
  86. 86. 86 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. 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, RFC o Update module.
  87. 87. 87 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. Los cambios en los parámetros formales no afectan a los parámetros actuales. Paso por referencia: solo la dirección de los parámetros actuales se transfieren a los parámetros formales. Dentro de la subrutina, se trabaja con el campo del programa que hace la llamada. Si cambiamos los parámetros formales, el contenido del campo del programa que hace la llamada también cambia.
  88. 88. 88 Changing: aquí especificamos los parámetros de salida que cambiarán de valor con la ejecución de la función. Tables: aquí especificamos las tablas que se utilizan en la función. Source Code: aquí pondremos el código Abap de la función. Exceptions: aquí especificamos las excepciones de 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
  89. 89. 89 Estructura del grupo de funciones Programa principal, SAPL<fgrp>, merely contains INCLUDE statements for the following include programs: . TOP include Include L<fgrp>TOP contendra las declaraciones de variable globales. . U includes Include L<fgrp>UXX contendra los includes L<fgrp>U01, L<fgrp>U02, ... . Estos contendran el codigo adicionado en cada modulo de funciones . F includes Include L<fgrp>F01, L<fgrp>F02, ... puede ser utilizado para generar subrrutinas . O includes Include L<fgrp>O01, L<fgrp>O02, ... Utilizado para PBO . I includes The include programs L<fgrp>I01, L<fgrp>I02, ... Utilizado para PAI
  90. 90. 90 Ejercicio 2: Crear un Modulo de Funciones Objetivos del Ejercicio Después de completar este ejercicio usted va a poder: . Crear un Modulo de Funciones . Definir las interfaces del modulo de funciones . 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. 2. Si no ha creado aun el grupo de funciones crearlo en este momento. Tarea 2: Crear un modulo de funciones para la lista de vuelos 1. Crear un Nuevo modulo de funciones y nombrarlo Z_BC402_##_GET_CONN_LIST en el grupo de funciones creado anteriormente. 2. Definir un parámetro de entrada para ciudades de origen y destino “departure and destination cities”. 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. Defina un parámetro de salida para la lista de vuelos. Utilice un tipo de tabla apropiada para el parámetro. 4. Ingrese la documentación necesaria para el modulo de funciones, para los parámetros y par alas excepciones. CREAR modulo de funciones Z_BC402_46_get_conn_list e implementarlo, ver ZSAP_P_46_GRF01
  91. 91. 91 Llamado de modulo de funciones: Boton PATTERN, llamamos POPUP_TO_CONFIRM
  92. 92. 92 Tomando las exepciones se borra el IF y se pone case sy-subrc. WHEN 1. WHEN 2. WHEN 3. Ejercicio 4: Usando declaraciones globales en un grupo de funciones. Objetivos del Ejercicio Después de completar este ejercicio usted va a poder: . Usar declaraciones globales . Entender como es el procesamiento de un modulo de funciones . Testiar secuencial mente módulos de Funciones Tarea 1: 1. Crear una tabla interna en el Top de la función y luego llenarla con un Select. 2. Crear una subrutina en la función en donde manipularemos los resultados obtenidos para solo devolver algunos Tarea 2: (Opcional) 1. Si la tabla se encuentra vacía generar una excepción para este caso.
  93. 93. 93 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. El objetivo principal de las RFC es acceder a otros ambientes para obtener datos. La comunicación puede darse entre sistemas Sap o entre un sistema Sap y otro sistema que no sea Sap. 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. Cómo crear una RFC? Una función RFC se crea de la misma manera que se crea un función. 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. Los parámetros que se crean en una función RFC no se pueden pasar por Referencia, deben pasarse por valor. Esto se logra tildando el check Pass value para cada parámetro en las solapas IMPORT, EXPORT y CHANGING.
  94. 94. 94 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, otra forma de realizar conexión entre procesos es por medido del uso de las tecnologías OLE. Pasos del Proceso 1.- Crear destino 2.- Crear grupo de funciones 3.- Crear funcion 4.- Crear programa usuario de la funcion 1.- Crear Destino( se usa transaccion SM59 ) Nodo Conexiones R/3( se hace en la maquina destino ) Nombre conexión ZUAXRFC...Conexion con maquina de produccion Destino RFC ZUAXRFC Tipo Conexion 3( Conexion R/3 ) Distribucion carga Si No( marcar este ) Maquina destino Direccion IP de maquina fuente No. Sistema 00 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 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.- Crear función( pertenece al grupo ZUAXRFC ) FUNCTION Z_UAX_RFC.
  95. 95. 95 SELECT * FROM ZUAXRFC INTO TABLE TAB_ZUAXRFC. ENDFUNCTION. 4.- Crear PROGRAMA( llama la función Z_UAX_RFC ) REPORT 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.- Crea tabla interna en función de la tabla ZUAXRFC * 2.- Llama la función rfc z_uax_rfc que le devuelve la tabla tab_zuaxxrfc * 3.- 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. INCLUDE STRUCTURE ZUAXRFC. DATA: END OF TAB_ZUAXRFC. CALL FUNCTION 'Z_UAX_RFC' DESTINATION 'ZUAXRFC' TABLES TAB_ZUAXRFC = TAB_ZUAXRFC MODIFY ZUAXRFC FROM TAB_ZUAXRFC.
  96. 96. 96 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. Son en realidad métodos de los objetos de negocios, y gracias a ellos podemos realizar cargas evitando utilizar Batch Inputs por Call Transaction. Básicamente son funciones como cualquier otra función en ABAP, así que poseen las mismas características: parámetros de entrada, de salida, tablas, excepciones... 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. Si quieren probar si una función les sirve para cargar algún dato en particular, pueden utilizar la transacción SE37 e ir al menú Módulo de Funciones->Verificar->Secuencias Test. Allí se pueden encadenar funciones, 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. Ventajas de usar BAPI Las BAPIs son métodos estandarizados de los Objetos de Negocio Sap R/3, 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 de Negocio .- Es un Estándar Consensuado .- Garantiza estabilidad y compatibilidad futura .- Garantiza orientación a objetos .- Independencia de entorno (apertura) Usar BAPIs en programas de aplicación Actualmente una BAPI puede ser invocada de dos formas diferentes: .- Llamar la BAPI en el repositorio .- Hacer llamada RFC a la función que implementa la BAPI Listado de BAPIs SAP: BAPI de creación de Pedidos de Venta: BAPI_SALESORDER_CREATEFROMDAT2 BAPI de creación de Pedidos de Compra: BAPI_PO_CREATE BAPI de Verificación de Facturas: BAPI_INCOMINGINVOICE_CREATE BAPI de facturación: BAPI_BILLINGDOC_CREATEMULTIPLE Bapi de Movimiento de mercancias: BAPI_GOODSMVT_CREATE BAPI modificación Pedido de ventas: BAPI_SALESORDER_CHANGE

×