Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
Sistema R/3
Programacin en ABAP/4
Indice
1. OBJETIVOS.............................................................................................................................................................4 2. EXPECTATIVAS.....................................................................................................................................................5 3. CONTENIDO............................................................................................................................................................6 3.1. CONCEPTOS GENERALES ............................................................................................................................. 6 3.1.1. Arquitectura.................................................................................................................................................6 3.1.2. Atributos de un programa...........................................................................................................................6 3.1.3. Sintaxis......................................................................................................................................................10 3.1.4. Declaracin WRITE .............................................................................................................................11 3.1.5. Operadores Relacionales..........................................................................................................................11 3.1.6. Expresiones Aritmticas............................................................................................................................12 3.1.7. Elementos de Texto...................................................................................................................................13 3.1.8. Campos del Sistema (System Fields).......................................................................................................14 3.1.9. Declaracin SELECT...........................................................................................................................14 3.2. DECLARACIONES Y DATOS......................................................................................................................... 16 3.2.1. Tipos de Datos y Atributos .......................................................................................................................16 3.2.2. Declaracin de Datos...............................................................................................................................16 3.2.3. Declaracin de Tipos................................................................................................................................17 3.2.4. Declaracin de Campos con los mismos atributos...................................................................................17 3.3. SUB - CAMPOS........................................................................................................................................... 19 3.4. MANEJO DE CADENAS................................................................................................................................ 20 3.5. DECLARACIN DE CAMPOS CON PARAMETROS........................................................................................22 3.6. DECLARACIONES IF, CASE, DO, WHILE, CHECK, EXIT.....................................................23 3.6.1. Declaracin IF .....................................................................................................................................23 3.6.2. Declaracin CASE................................................................................................................................24 3.6.3. Declaracin DO....................................................................................................................................24 3.6.4. Declaracin WHILE.............................................................................................................................25 3.6.5. Declaracin CHECK............................................................................................................................25 3.6.6. Declaracin EXIT.................................................................................................................................25 3.7. DEPURACIN DE PROGRAMAS (DEBUGGING)............................................................................................27 3.7.1. Activacin del modo Debugging .........................................................................................................27 3.7.2. Modo Debugging .................................................................................................................................27 3.7.3. Principales Funciones...............................................................................................................................28 3.7.4. Breakpoints................................................................................................................................................29 3.8. CADENAS DE CAMPOS (FIELD STRING)........................................................................................................ 30 3.8.1. Declaracin de Cadenas de campos.........................................................................................................30 3.8.2. Transportacin de valores campo por campo..........................................................................................30 3.9. TABLAS INTERNAS..................................................................................................................................... 33 3.9.1. Declaracin de Tablas Internas (con lnea de encabezado)....................................................................33 3.9.2. Llenado de Tablas Internas (con lnea de encabezado)...........................................................................33 3.9.3. Declaracin COLLECT .......................................................................................................................34 3.9.4. Procesamiento (con lnea de encabezado)...............................................................................................35 3.9.5. Declaracin SORT................................................................................................................................36 3.9.6. Lectura de Entradas (con lnea de encabezado)......................................................................................36 3.9.7. Cambios (con lnea de encabezado) ........................................................................................................37 3.9.8. Eliminacin (con lnea de encabezado) ...................................................................................................38 3.9.9. Informacin de tablas internas (con lnea de encabezado) ....................................................................38 3.9.10. Declaracin (Sin lnea de encabezado)..................................................................................................39 3.9.11. Lectura de Entradas (Sin lnea de encabezado) ....................................................................................39 3.10. ESTRUCTURAS COMPUESTAS..................................................................................................................... 41 3.11. PANTALLAS DE SELECCIN....................................................................................................................... 44 3.11.1. Opciones de Seleccin...........................................................................................................................44 3.11.2. Estructura ...............................................................................................................................................45 3.11.3. Otros operadores relacionales................................................................................................................45
Pg: 2
Programacin en ABAP/4
3.11.4. Declaracin de campos con parmetros................................................................................................46 3.12. CRITERIOS DE BSQUEDAS (ABAP/4 OPEN SQL)..................................................................................48 3.12.1. Bsqueda nica Single Access ..........................................................................................................48 3.12.2. Bsqueda de varias entradas Several Entries....................................................................................49 3.12.3. Bsqueda de una sola columna de datos Single Column .................................................................49 3.12.4. Las Funciones Agregadas.......................................................................................................................49 3.12.5. Lectura de Datos Componente por Componente...................................................................................50 3.12.6. Rango de seleccin..................................................................................................................................51 3.12.7. Patrones de seleccin..............................................................................................................................52 3.12.8. Nombre de la tabla en forma dinmica .................................................................................................52 3.12.9. Clusula WHERE en forma dinmica ...............................................................................................53 3.12.10. Lectura tabla de base de datos a una tabla interna ............................................................................54 3.12.11. Ordenamiento de seleccin ..................................................................................................................55 3.12.12. Agrupacin de seleccin.......................................................................................................................55 3.13. MODULARIZACIN.................................................................................................................................... 58 3.13.1. Definicin y llamadas de subrutinas......................................................................................................59 3.14. DATOS GLOBALES Y LOCALES.................................................................................................................. 60 3.15. PASO DE VALORES DE PARMETROS ACTUALES A FORMALES......................................................................61 3.15.1. Tipos de paso de parmetros..................................................................................................................61 3.15.2. Pasando parmetros con tipos................................................................................................................62 3.15.3. Verificacin de Paso de parmetros con tipos.......................................................................................63 3.15.4. Paso de Estructuras como parmetros...................................................................................................64 3.15.5. Paso de Tablas Internas como parmetros............................................................................................65 3.16. SUBRUTINAS EXTERNAS........................................................................................................................... 67 3.17. MDULOS DE FUNCIN............................................................................................................................. 68 3.17.1. Creacin..................................................................................................................................................68 3.18. MANEJO DE FUNCIONES............................................................................................................................ 70 3.18.1. Estructura................................................................................................................................................70 3.18.2. Documentacin y llamado de funciones.................................................................................................70 3.19. DESCRIPCIN DE LA INTERFASE ............................................................................................................... 72 3.20. PARMETRO CHANGING ....................................................................................................................... 73 3.21. PASO DE TABLAS INTERNAS...................................................................................................................... 74 3.22. MANEJO DE EXCEPCIONES......................................................................................................................... 75 3.23. AMBIENTE DE PRUEBAS............................................................................................................................ 77 3.24. ORGANIZACIN DE UN PROGRAMA............................................................................................................ 78 3.25. SUBRUTINAS............................................................................................................................................ 79 3.26. DATOS GLOBALES / MEMORIA LOCAL ....................................................................................................... 80 3.27. GENERACIN DE REPORTES...................................................................................................................... 82 3.27.1. Lectura de datos......................................................................................................................................82 3.27.2. Eventos....................................................................................................................................................83 3.27.3. Eventos interactivos...............................................................................................................................84 3.27.4. Panormica de Reportes Interactivos ...................................................................................................85 3.27.5. Seleccin de lnea..................................................................................................................................85 3.27.6. Area HIDE .........................................................................................................................................86 3.27.7. Validacin..............................................................................................................................................87 3.27.8. Manipulacin de los Mensajes del Usuario ..........................................................................................88
3.27.8.1. Panormica....................................................................................................................................................... 88 3.27.8.2. Sintaxis.............................................................................................................................................................89 3.27.8.3. Clasificacin ....................................................................................................................................................89
Pg: 3
Programacin en ABAP/4
1. Objetivos
Proporcionar los conocimientos bsicos del lenguaje de programacin ABAP/4, as como la correcta estructuracin del cdigo (Modularizacin) en la creacin de un programa.
Pg: 4
Programacin en ABAP/4
2. Expectativas
Al finalizar este capitulo el participante podr crear, ejecutar, revisar y corregir sus propios programas bsicos, Accediendo a tablas y/o estructuras as como el uso de los criterios de bsquedas (SQL).
Pg: 5
Programacin en ABAP/4
3. Contenido
3.1. Conceptos Generales
3.1.1. Arquitectura
El ABAP/4 Development Workbench da acceso a el desarrollo de herramientas las cuales cubren al ciclo completo de desarrollo de software. Estas herramientas pueden ser usadas por los clientes tanto para desarrollos especficos as como para resaltar las aplicaciones SAP proporcionadas por R/3.
ABAP/4 Organizador
Screen Painter
Interfase Repositorio
ABAP/4 Diccionario
R/3 Repositorio
Screen Menu
Modelador De Datos
ABAP/4 Procesador
Depurador Trazado Pruebas
Modulo de Funciones
Pg: 6
Programacin en ABAP/4
El primero de los atributos es el Tipo el cual es obligatorio y su finalidad es la de identificar la clase de programa que se va a crear con los siguientes posibles valores de entrada:
Pg: 7
Programacin en ABAP/4
La Aplicacin, atributo obligatorio determina que rea del R/3 est involucrada principalmente a continuacin se muestran algunas de las posibles entradas:
El programa se puede asignar a un Grupo de Autorizaciones, dependiendo de este el sistema verifica si el usuario pertenece a ese grupo de autorizaciones antes de poder ejecutar, editar o actualizar los atributos del programa, a continuacin se muestran algunas de las posibles entradas:
Pg: 8
Programacin en ABAP/4
Otro atributo es la clase de desarrollo la cual es un indicador que interpreta el sistema de transporte, dependiendo de ese indicador el programa se transporta automticamente a otro sistema en el caso de que se indique que es un objeto local o privado, NO se transporta, a continuacin se muestran algunas de las posibles entradas:
Pg: 9
Programacin en ABAP/4 Las clases de desarrollo para un Cliente especfico empiezan con Y o Z, en el caso de que no se deseen transportar los objetos, se deben asignar como objetos locales (development class: $ TMP). Los atributos de Tipo, Aplicacin y Clase de desarrollo son usados internamente por el manejador de programas de ABAP/4. En cualquier momento se puede utilizar la ayuda presionando la tecla F1 las posibles entrada de las valores para los atributos o cualquier otro campo presionando la tecla F4.
3.1.3. Sintaxis
Un programa en ABAP/4 se conforma de declaraciones individuales. Cada declaracin debe finalizar con un punto ( .), como se muestra en la lnea siguiente: WRITE xyz. La primera palabra de una declaracin, es conocida como, palabra clave. La palabra clave debe estar separada del resto de la declaracin por al menos un espacio. Se recomienda identar las declaraciones, como se muestra en la lnea siguiente: IF contador = 0. WRITE Son todas las opciones disponibles !. ELSE. WRITE Rango Vlido. ENDIF. Las declaraciones pueden extenderse sobre varias lneas, como se muestra en la lnea siguiente: WRITE Este es un mensaje mensaje de prueba que puede extenderse por varias lneas.
Se permite la concatenacin de varias declaraciones que sean idnticas, siempre y cuando se utilicen los dos puntos (:) despus de la palabra clave y se separen las partes con comas (,), las siguientes declaraciones son vlidas: WRITE abc. WRITE 123. WRITE xyz. Pero es muy redundante y se recomienda concatenar las declaraciones, como se muestra en la siguiente lnea: WRITE: abc, 123, xyz.
Programacin en ABAP/4 Con un asterisco (*) exclusivamente en la columna 1, marca la lnea entera como comentario como se muestra en la siguiente lnea. *Los ltimos 4 caracteres determinan la orden de compra. WRITE abc-2548. Con comillas () dentro de la lnea seala lo restante de la lnea como comentario. WRITE abc. Clave del producto
Pg: 11
Programacin en ABAP/4 Si uno de los campos es ms corto que el otro cuando comparas dos campos de tipo C, la longitud de el campo ms corto es ajustada a el campo ms largo y llenado con espacios a la derecha. Hay otros operadores que ejecutan comparaciones de cadenas de caracteres. En la siguiente tabla se muestran los posibles operadores relacionales que reconoce ABAP/4, se pueden utilizar las abreviaciones o los signos: Operador EQ = NE <> >< GT > GE >= LT < LE <= BETWEEN f1 and f2 IS INITIAL Significado Igualdad (Equal). Diferente (Not Equal). Mayor que (Greater Than ). Mayor o igual que (Greater than or Equal). Menor que (Less than). Menor o igual que (Less than or Equal) Rango de f1 a f2. Valor Inicial.
Programacin en ABAP/4 Resultado = ( B + EXP(C) ) * E / SIN( 3 - G ). Los valores no numricos son automticamente convertidos a valores numricos antes de ejecutar cualquier operacin aritmtica. Los operadores DIV y MOD, divisin y residuo respectivamente regresan valores enteros como resultado. Resultado = 15 DIV 3. *En este momento: Resultado tiene el valor de 5. La funcin STRLEN regresa la longitud de una cadena de caracteres. Move Prueba TO palabra. Longitud = STRLEN( palabra ). *En estos momentos: longitud tiene el valor de 6.
Para dar mantenimiento a los smbolos de texto, se debe seleccionar la opcin elementos texto -> smbolos texto, desde el editor de programas haciendo doble click en el elemento de texto dentro del cdigo del programa.
Pg: 13
Programacin en ABAP/4
Programacin en ABAP/4 SELECT * FROM Datos_Personales WHERE Edad = 26. *En este espacio se realiza algn proceso con los registros coincidentes WRITE: Datos_Personales-Nombre, Datos_Personales-Apellido, Datos_Personales-edad. ENDSELECT . El campo especificado en la clusula WHERE a la izquierda del operador de igualdad, debe ser un campo de la tabla a ser leda. En este contexto, este debe ser direccionado sin el nombre de la tabla. Si la entrada de la tabla no satisface la condicin WHERE, el sistema regresa un valor diferente de cero (0) en el campo del sistema denominado SY-SUBRC. TABLES: Datos_Personales. SELECT * FROM Datos_Personales WHERE Edad = 26. *En este espacio se realiza algn proceso con los registros coincidentes WRITE: Datos_Personales-Nombre, Datos_Personales-Apellido, Datos_Personales-edad. ENDSELECT. IF SY-SUBRC < > 0. WRITE No se encontr ningn registro coincidente. ENDIF.
Pg: 15
Programacin en ABAP/4
Pg: 16
Programacin en ABAP/4 Si la longitud no es especificada, por omisin el sistema toma la longitud estndar que utiliza ese tipo de dato, en el siguiente ejemplo se define una variable denominada tiene_adeudo la cual tiene una longitud de 1 caracter. DATA tiene_adeudo. Por omisin cada campo es inicializado con su valor inicial dependiendo del tipo. Tambin se pueden inicializar los campos utilizando el parmetro VALUE. Las constantes no son permitidas aqu. *en la siguiente lnea de cdigo la variable contador se inicializa automticamente con el valor *cero (0) DATA contador TYPE I. *para inicializarla con un valor diferente se puede utilizar el parmetro VALUE DATA contador TYPE I VALUE 6. Tambin se puede especificar el nmero de lugares decimales (generalmente con el tipo P donde son posibles ms de 14 decimales), como se muestra a continuacin: DATA sueldo TYPE P DECIMALS 2. Reglas para asignar nombres a los campos : 1. Un nombre puede contener hasta 30 caracteres (incluyendo: letras, dgitos y caracteres especiales). 2. Los siguientes caracteres no estn permitidos : ( ) * . , : 3. Un nombre no puede estar solamente compuesto por dgitos. 4. La palabra SPACE es un campo predefinido, por lo tanto no se debe utilizar. 5. En una declaracin de ABAP/4, no se puede usar el mismo nombre para un parmetro que para un campo.
Programacin en ABAP/4 *de esta forma fecha_embarque adquiere el formato DD/MM/YYYY propio de SY-DATUM. El campo de referencia puede ser interno o de una base de datos. El parmetro LIKE te ayuda a crear programas que son fciles de modificar ya solamente se tiene que cambiar los atributos de datos en un solo lugar, en el siguiente ejemplo se tienen definidos 4 variables que manejan cantidades con 3 nmeros decimales, pero si por polticas de la empresa se deseara cambiar el nmero de decimales a 1, bastara con cambiar cada uno de los nmero 3 por 1, pero esto puede ser muy tedioso y molesto si fueran ms de 10 cambios. DATA: monto TYPE P DECIMALS 3, sueldo_mensual TYPE P DECIMALS 3, saldo TYPE P DECIMALS 3, adeudo TYPE P DECIMALS 3, *Lo ms optimo sera definir las variables de la siguiente forma: DATA: monto TYPE P DECIMALS 3, sueldo_mensual LIKE monto, saldo LIKE sueldo_mensual, adeudo LIKE monto. *De esta forma solamente habra que cambiar solo un nmero 3 por un nmero 1. La palabra clave CLEAR fija un campo a su valor inicial dependiendo del tipo. CLEAR no almacena el valor especificado por VALUE. DATA: monto TYPE P DECIMALS 3 VALUE 56. WRITE monto. mostraria en pantalla 56.000 CLEAR monto. WRITE monto. mostraria en pantalla 0.000
Pg: 18
Programacin en ABAP/4
MOVE 'tuaj700711' TO rfc. clave_nombre(4) = rfc. ao_nacimiento = rfc+4(2). WRITE: / clave_nombre, / ao_nacimiento. En pantalla se mostrara: tuaj En pantalla se mostrara: 70
Pg: 19
Programacin en ABAP/4
DATA:
nombres(30), apellido_paterno(20), apellido_materno(20), nombre_completo(70). MOVE Jaime Armando TO nombres. MOVE Trujillo TO apellido_paterno. MOVE Arrieta TO apellido_materno. CONCATENATE nombres apellido_paterno apellido_materno INTO nombre_completo SEPARATED BY SPACE. * El resultado de concatenacin sera: Jaime Armando Trujillo Arrieta En SPLIT los valores para el cdigo de retorno son: Cdigo de retorno Significado SY-SUBRC = 0 Todos los campos objetivo fueron lo suficientemente largos. SY-SUBRC = 4 Cuando menos uno de los campos objetivo no fue lo suficientemente largo. DATA: nombres(30), apellido_paterno(20), apellido_materno(20), nombre_completo(70). MOVE Jaime Armando TO nombres. MOVE Trujillo TO apellido_paterno. MOVE Arrieta TO apellido_materno. CONCATENATE nombres apellido_paterno apellido_materno INTO nombre_completo SEPARATED BY SPACE. * El resultado de concatenacin sera: Jaime Armando Trujillo Arrieta SPLIT nombre_completo AT SPACE INTO nombres apellido_paterno apellido_materno. *El resultado de divisin sera: en el campo nombres: Jaime Armando, en el campo *apellido_paterno: Trujillo y en el campo apellido_materno: Arrieta.
Pg: 20
Programacin en ABAP/4 Otras cadenas de comandos manejables son: SEARCH, SHIFT, REPLACE, TRANSLATE y CONDENSE.
Pg: 21
Programacin en ABAP/4
Pg: 22
Programacin en ABAP/4
Pg: 23
Programacin en ABAP/4
3.6.3. Declaracin DO
DO -n- TIMES. -procesoENDDO. Se puede especificar el nmero de ciclos (Loops) a travs de una constante o de un campo. El parmetro <n> TIMES es opcional. Si no se utiliza, se debe formular una palabra clave de terminacin para el ciclo (Loop). Se pueden anidar ciclos. Se determinar el nmero de ciclos con la palabra clave SY-INDEX DO 5 TIMES. WRITE: / 'Cliclo Nmero: ', SY-INDEX. ENDDO. Pg: 24
Programacin en ABAP/4
Programacin en ABAP/4 Una declaracin EXIT en una subrutina termina el procesamiento de la subrutina. Si se especifica la declaracin EXIT fuera de un ciclo (loop) o subrutina, el proceso termina despus de que la declaracin EXIT ha sido ejecutada y la lista sea desplegada.
Pg: 26
Programacin en ABAP/4
Pg: 27
Programacin en ABAP/4
Esta ltima funcin permite asignar un nuevo valor a un campo, introducindolo en el lugar de las variables, posteriormente se presiona el botn marcado con una letra R, de esta forma el nuevo valor es utilizado en la sesin del depurador.
Pg: 28
Programacin en ABAP/4
3.7.4. Breakpoints
Existen varias formas de fijar breakpoints, para un programa: Desde el Editor ABAP/4. 1. Se debe posicionar el cursor en una lnea del programa y se coloca el breakpoint escogiendo el men UtilidadesBreakpoints Fijar. Los Breakpoints colocados de esta manera son vlidos en la duracin de una sesin. 2. Tambin se puede usar la palabra clave BREAK-POINT en la lneas de cdigo para fijarlos en el programa. Modo Debugging 3. Se debe posicionar el cursor en la lnea deseada, y fijarlo a travs del men Breakpoint o haciendo doble click en la lnea de cdigo. Las lneas de cdigo que tengan asignadas breakpoint sern marcadas o sealadas por el smbolo STOP . Para revisar si existen y en donde estn fijados los breakpoints se debe elegir el men Pasar a Breakpoints.
Para borrar breakpoints, se posiciona el cursor en la lnea correspondiente y se hace doble click eligiendo el men Breakpoint Borrar todo, para eliminar todos los break-points que se fijaron.
Pg: 29
Programacin en ABAP/4
Programacin en ABAP/4 nombre LIKE P0002-VORNA, apellido_paterno LIKE P0002-NACHN, apellido_materno LIKE P0002-NAME2, END OF nombre_completo. MOVE: Jaime TO nombre_completo-nombre, Trujillo TO nombre_completo- apellido_paterno, Arrieta TO nombre_completo- apellido_materno. / nombre_completo-nombre, / nombre_completo-apellido_paterno, / nombre_completo-apellido_materno.
WRITE:
El resultado de la pantalla sera: Jaime Trujillo Arrieta En el ejemplo anterior se tratan a los campos en forma individual, a continuacin se modifican algunas lneas para que los campos sean tratados en grupo: WRITE: nombre_completo.
Los espacios intermedios se deben a que los campos P0002-VORNA, P0002-NACHN, P0002-NAME2 tienen especificada un longitud de 25 caracteres en el diccionario de datos por lo cual se conserva dicha longitud al momento de mostrarlos en pantalla, para eliminar dichos espacios se puede utilizar la palabra reservada CONDENSE, como se muestra a continuacin: CONDENSE nombre_completo. WRITE: nombre_completo. El resultado de la pantalla sera: Jaime Trujillo Arrieta En el siguiente ejemplo se declara otra cadena de campos con la clave del trabajador y el rea en que labora: DATA: BEGIN OF nombre_completo, nombre LIKE P0002-VORNA, apellido_paterno LIKE P0002-NACHN, apellido_materno LIKE P0002-NAME2, END OF nombre_completo. DATA: BEGIN OF Datos_empresa, nombre LIKE P0002-VORNA, apellido_paterno LIKE P0002-NACHN, Pg: 31
Programacin en ABAP/4 cvetrabajador(5), area(20), END OF Datos_empresa. MOVE: Jaime TO nombre_completo-nombre, Trujillo TO nombre_completo- apellido_paterno, Arrieta TO nombre_completo- apellido_materno.
MOVE-CORRESPONDING nombre_completo TO Datos_empresa. MOVE: 1234 TO Datos_empresa-cvetrabajador. MOVE: Norte TO Datos_empresa-area. CONDENSE Nombre_completo. CONDENSE Datos_empresa. WRITE: Nombre_completo, / Datos_empresa. El resultado de la pantalla sera: Jaime Trujillo Arrieta Jaime Trujillo Arrieta 1234 Norte
Pg: 32
Programacin en ABAP/4
Declarar una tabla interna es parecido a declarar una cadena de campos. Con la diferencia de que al finalizar la declaracin del BEGIN, se debe agregar el parmetro OCCURS el cual indica que se debe crear una tabla interna. Despus de ste parmetro, se debe especificar el mximo numero de registros que va a tener la tabla. Si se sabe de antemano que la tabla interna requiere menos de 8 KB de memoria, se especifica el nmero de registros y el sistema permite solamente esa cantidad de memoria. Esto es particularmente importante en el uso de estructuras anidadas. Si la cantidad de espacio en memoria es insuficiente, el sistema permite ms bloques de 8 KB 16 KB. En caso de que no se pueda estimar el tamao de una tabla interna, el valor del parmetro OCCURS debe ser 0 (cero). El sistema entonces genera bloques de 8 KB 16 KB para acomodar Ubicar los registros de la tabla, dependiendo de su longitud. En el proceso del manejador de memoria, las tablas internas son almacenadas en Memoria Extendida, un rea directamente direccionable de memoria. INCLUDE STRUCTURE permite usar la estructura de una tabla del Diccionario ABAP/4 como la base para una tabla interna o cadena de campo. Tambin se pueden usar los nombres de campo, atributos y conversin de rutinas. Lo mismo aplica para LIKE con campos solos. INCLUDE STRUCTURE, tambin te permite consultar reportes de estructuras internas. DATA: BEGIN OF nombre_completo OCCURS 0, nombre LIKE P0002-VORNA, apellido_paterno LIKE P0002-NACHN, apellido_materno LIKE P0002-NAME2, END OF nombre_completo.
Programacin en ABAP/4 DATA: BEGIN OF nombre_completo OCCURS 0, nombre LIKE P0002-VORNA, apellido_paterno LIKE P0002-NACHN, apellido_materno LIKE P0002-NAME2, END OF nombre_completo. MOVE: Jaime TO nombre_completo-nombre, Trujillo TO nombre_completo- apellido_paterno, Arrieta TO nombre_completo- apellido_materno. APPEND nombre_completo.
En el siguiente ejemplo y tomando como base la tabla UKRST se aprecia el uso de la palabra clave COLLECT: TABLES: UKRST. DATA: BEGIN OF seminarios OCCURS 0, semnr LIKE UKRST-SEMNR, note TYPE P DECIMALS 1, END OF seminarios.
Pg: 34
Programacin en ABAP/4 SELECT * FROM UKRST. MOVE-CORRESPONDING UKRST TO seminarios. COLLECT seminarios. ENDSELECT.
Pg: 35
Programacin en ABAP/4
Pg: 36
Programacin en ABAP/4 TABLES: UKRST. DATA: BEGIN OF seminarios OCCURS 0. INCLUDE STRUCTURE UKRST. DATA: END OF seminarios. SELECT * FROM UKRST. MOVE-CORRESPONDING UKRST TO seminarios. APPEND seminarios. ENDSELECT. SORT seminarios BY SCHNR. READ TABLE seminarios WITH KEY '0000000125'.
Programacin en ABAP/4 ULINE. WRITE:'*********** INSERCION DEL REGISTRO 111 ***********'. seminarios-SCHNR = '0000000111'. seminarios-FABNR = '0200'. seminarios-SEMNR = '0000000001'. seminarios-IMMNR = '11111111'. seminarios-NOTE = '8'. INSERT seminarios INDEX 4. IF SY-SUBRC NE 0. WRITE: '!! No se pudo agregar el registro !!'. ENDIF. LOOP AT seminarios. WRITE: / ' Num. de Certificado: ', seminarios-SCHNR, 'Nota: ', seminarios-NOTE. ENDLOOP. ULINE. WRITE:'*********** ELIMINACION DEL MISMO REGISTRO 111 ***********'. DELETE seminarios INDEX 4. IF SY-SUBRC NE 0. WRITE: '!! No se pudo ELIMINAR EL REGISTRO 4 !!'. ENDIF. LOOP AT seminarios. WRITE: / ' Num. de Certificado: ', seminarios-SCHNR, 'Nota: ', seminarios-NOTE. ENDLOOP.
Programacin en ABAP/4 El parmetro LINES regresa el nmero de entradas existentes en la variable <i>. El parmetro OCCURS regresa el valor OCCURS en la definicin de tabla en la variable <I>. TABLES: UKRST. DATA: i TYPE I, j TYPE I. DATA: BEGIN OF seminarios OCCURS 0. INCLUDE STRUCTURE UKRST. DATA: END OF seminarios. SELECT * FROM UKRST. MOVE-CORRESPONDING UKRST TO seminarios. APPEND seminarios. ENDSELECT. DESCRIBE TABLE seminarios LINES i. DESCRIBE TABLE seminarios OCCURS j. WRITE: i. El resultado sera: 11 WRITE: j. El resultado sera 0 (cero)
3.9.10.
A partir de la versin 3.0, se puede definir tablas internas sin lnea de encabezado. Las tablas sin lnea de encabezado constan de un nmero cualquiera de entradas, con estructuradas idnticas de acuerdo al tipo <type> especificado en el programa. Se puede utilizar el parmetro OCCURS para determinar cuantas entradas de tablas inicialmente se tienen, pero este valor puede incrementarse si es necesario (con excepcin de las palabras clave APPEND...SORTED BY...). Se puede utilizar la palabra clave LIKE...OCCURS...para declarar una tabla interna sin lnea de encabezado. DATA: seminario LIKE UKRST OCCURS 5 . Si se desea que la tabla interna tenga lnea de encabezado, se puede utilizar la palabra clave WITH HEADER LINE. DATA: seminario LIKE UKRST OCCURS 5 WITH HEADER LINE Las palabras claves DATA: <campo>TYPE<tipo>OCCURS<n>. Crean una tabla interna sin lnea de encabezado donde la estructura consta de un campo.
3.9.11.
As como las tablas internas con lnea de encabezado, se puede leer tablas internas sin lnea de encabezado usando la palabra clave READ TABLE la palabra clave LOPP ENDLOOP. Los registros ledos son colocados en estructuras idnticas de reas de trabajo. Lo mismo se aplica a las palabras claves MODIFY e INSERT : Pg: 39
Programacin en ABAP/4 MODIFY <itab>FROM<wa>INDEX<i>. modifica la lnea correspondiente de la tabla interna. INSERT<wa>INTO<itab>INDEX<i>. inserta el registro del rea de trabajo antes de la lnea correspondiente. La palabra clave CLEAR no se comporta de la misma forma para tablas internas con lnea de encabezado y tablas internas sin lnea de encabezado. Cuando se procesa una tabla interna CON lnea de encabezado, este posiciona los campos en la lnea del encabezado con el valor inicial apropiado para su tipo. Cuando se procesa una tabla interna SIN lnea de encabezado, este suprime la tabla entera, algo similar a la palabra clave REFRESH.
Pg: 40
Programacin en ABAP/4
La segunda tabla se denomina: UPERS, con la siguiente informacin: N miembro 2000 4000 2300 2120 4100 Univ. Nombre LENZ, CLAUDIA MLLER, MARIA THIELE, FRANZISKA KRAFT, HOLGER MAIER, RUDI Direccin WORMS WIESLOCH WIESLOCH HEIDELBERG FRANKENTAL
La finalidad del ejemplo es saber cules cursos y a qu departamentos pertenecen las materias que imparten cada profesor, lo cual debe generar una tabla como la siguiente en donde el campo Materias se constituye de tres conceptos como son: N curso, Descripcin, N depto: Prof. Nombre N curso 2000 4000 2300 2120 4100 LENZ, CLAUDIA MLLER, MARIA THIELE, FRANZISKA KRAFT, HOLGER MAIER, RUDI 0000000001 0000000002 0000000001 0000000002 0000000001 0000000001 0000000002 0000000003 0000000001 Materias Descripcin Soziale Randgruppen Geschichte des Sozialismus Didaktik I Mathematikunterricht Schimmen Mikrokonomie I Mikrokonomie II Makrokonomie Strafprozeordnung
N depto 0002 0002 0004 0004 0005 0006 0006 0006 0006
Programacin en ABAP/4 profesor_materias es una tabla interna con una lnea de encabezado y su tercer componente es una tabla interna sin lnea de encabezado , la estructura de esta tabla interna es la misma que la estructura tipo cursos y es direccionada via profesor_materias-materias. El rea de trabajo para esta tabla es materias_wa . Cuando se define esta rea de trabajo, se hace referencia al mismo tipo de estructura para asegurar que se tiene la misma estructura de la tabla interna. TABLES: UKURS, UPERS. TYPES: BEGIN OF cursos, fabnr LIKE UKURS-FABNR, krsnr LIKE UKURS-KRSNR, kname LIKE UKURS-KNAME, prfnr LIKE UKURS-PRFNR, END OF CURSOS. DATA: materias_wa TYPE cursos. DATA: BEGIN OF profesor_materias OCCURS 10, eunr LIKE UPERS-EUNR, "Clave Profesor euna LIKE UPERS-EUNA, "Nombre Profesor materias TYPE cursos OCCURS 5, "Materias (#depto, #curso,Desc) END OF profesor_materias. *----- Se limita el rea de resultados a todos los nmero de depto entre 0002 y 0008-----* SELECT * FROM UKURS. CHECK UKURS-FABNR BETWEEN 0002 AND 0008. MOVE-CORRESPONDING UKURS TO materias_wa. APPEND materias_wa TO profesor_materias-materias. ENDSELECT. SORT profesor_materias-materias BY PRFNR. *----- Se limita el rea de resultados a todos las claves de prof entre 2000 y 4100-----* SELECT * FROM UPERS. CHECK UPERS-EUNR BETWEEN 2000 AND 4100. MOVE-CORRESPONDING UPERS TO profesor_materias. APPEND profesor_materias. ENDSELECT. SORT profesor_materias BY EUNR. Para mostrar el resultado de las estructuras complejas, se utilizan LOOPs anidados: Continuando con el ejemplo anterior, la primera palabra clave LOOP AT profesor_materias... ENDLOOP. Coloca las entradas individuales de la tabla profesor_materias en su lnea de encabezado. Los campos EUNR y EUNA son campos individuales y pueden por lo tanto ser desplegados directamente. El tercer componente de profesor_materias como ya hemos mencionado, es una salida de otra tabla interna por lo tanto es necesario otro LOOP. Sin embargo, como esta tabla no tiene lnea de encabezado, su salida o rea de trabajo es en la tabla interna materias_wa .
Pg: 42
Programacin en ABAP/4 LOOP AT profesor_materias. WRITE: / profesor_materias-EUNR, 12 profesor_materias-EUNA. LOOP AT profesor_materias-materias INTO materias_wa. CHECK profesor_materias-EUNR = materias_wa-PRFNR. WRITE: /30 materias_wa-KRSNR, 45 materias_wa-KNAME, 75 materias_wa-FABNR. ENDLOOP. ENDLOOP.
Pg: 43
Programacin en ABAP/4
3.11.1.
Opciones de Seleccin
SELECT-OPTIONS <selection name> FOR<field> Con la palabra clave SELECT -OPTIONS, se define un criterio de seleccin. Para cada criterio, la pantalla de seleccin despliega una lnea la cual empieza con un texto (por default el nombre del criterio de seleccin definido) y finaliza con las posibles entradas para esa seleccin en particular. El nombre del criterio de seleccin NO puede constar de ms de 8 caracteres. Despus del parmetro FOR, se debe especificar el campo del cual se va a verificar el contenido en relacin a la entrada realizada. Para cada seleccin, ABAP/4 crea una tabla interna con una estructura estndar, esta tabla es llenada con las entradas de la pantalla de seleccin. Se puede utilizar la palabra clave SELECT para leer de una tabla de base de datos, todos los registros que correspondan a las selecciones definidas por la tabla interna. En el ejemplo anterior se limitaba a nivel de lneas de cdigo (hard code) el nmero de departamento as como la clave del profesor, pero de esta forma se dificulta el cambiar cualquiera de estos valores ya que se tendra que modificar el programa fuente para hacerlo ms flexible agregaron las siguientes lneas de cdigo, para generar una pantalla de seleccin: SELECT-OPTIONS depto FOR UKURS-FABNR DEFAULT '0002' TO '0008'. SELECT-OPTIONS cve_prof FOR UPERS-EUNR DEFAULT '2000' TO '4100'. *----- Se limita el rea de resultados a todos los nmero de depto entre 0002 y 0008-----* SELECT * FROM UKURS. CHECK UKURS-FABNR BETWEEN depto-LOW AND depto-HIGH. MOVE-CORRESPONDING UKURS TO materias_wa. APPEND materias_wa TO profesor_materias-materias. ENDSELECT. SORT profesor_materias-materias BY PRFNR. *----- Se limita el area de resultados a todos las claves de prof entre 2000 y 4100-----* SELECT * FROM UPERS. CHECK UPERS-EUNR BETWEEN cve_prof-LOW AND cve_prof-HIGH. MOVE-CORRESPONDING UPERS TO profesor_materias. APPEND profesor_materias. ENDSELECT. SORT profesor_materias BY EUNR. Para poder determinar el rango seleccionado por el usuario se utilizan dos campos dentro del sistema denominados LOW (rango inferior) y HIGH (rango superior), Pg: 44
Programacin en ABAP/4 distinguindose entre si por el nombre de seleccin definido (en el caso del ejemplo anterior: depto, cve_prof). Al ejecutar el programa lo primero que se muestra es la siguiente ventana:
3.11.2.
Estructura
La tabla interna que se genera automticamente consta de 4 campos con los nombres fijos SIGN, OPTION, LOW y HIGH. Cada lnea de esta tabla formula una condicin con un operador de comparacin, con los siguientes significados: SIGN (signo) I E OPTION (Opcin) EQ NE LE LT GE GT BT NB CP NP Descripcin Incluyente Excluyente Descripcin Igual No Igual Menor Igual Menor Mayor Igual Mayor Entre NO entre (solamente en rangos) Con patrn Sin patrn (solo para plantillas como LIKE).
3.11.3.
Dentro de la pantalla de seleccin se puede introducir un nico valor o un rango. Haciendo doble clic en la entrada del campo o presionando el botn de Opciones de Seleccin , se obtiene un cuadro de dilogo donde se puede especificar otro tipo de operadores relacionales. Las opciones disponibles aqu dependen de los valores que han introducido en el campo From y To. Con doble clic en la lnea vaca de opciones de seleccin, se puede seleccionar un valor inicial. para eliminar esto, presione el botn correspondiente.
Pg: 45
Programacin en ABAP/4
3.11.4.
Se pueden incluir parmetros en la pantalla de seleccin al igual que en las opciones de seleccin . A diferencia de las opciones de seleccin, se puede especificar exclusivamente valores nicos con parmetros, mas no rangos. Se debe almacenar una lnea de texto para cada campo creado con PARAMETERS escogiendo TEXT ELEMENTS en el Editor de ABAP/4 y despus SELECTION TEXTS . Se pueden mezclar parmetros con opciones de seleccin. SELECT-OPTIONS depto FOR UKURS-FABNR DEFAULT '0002' TO '0008'. SELECT-OPTIONS cve_prof FOR UPERS-EUNR DEFAULT '2000' TO '4100'. PARAMETERS: nombre_prof LIKE UPERS-EUNA.
Pg: 46
Programacin en ABAP/4
Pg: 47
Programacin en ABAP/4
3.12.1.
SELECT SINGLE * FROM <tabla> [WHERE ] [AND ]. Usando la palabra clave SELECT mas el modificador SINGLE se puede acceder a una sola entrada. Al hacer esto, se debe especificar en la clusula WHERE la llave completa de la entrada en la tabla. Si la llave no se especifica por completo se obtiene un mensaje de advertencia cuando la revisin de sintaxis es ejecutada, en este caso, la primera lnea del conjunto de soluciones es seleccionada. El regreso del cdigo de valores tiene el siguiente significado: 0: La lectura fue exitosa 4: La entrada de la tabla no existe. TABLES:UKURS. SELECT SINGLE * FROM UKURS WHERE FABNR EQ 0004 AND KRSNR EQ 0000000001. IF SY-SUBRC = 0. WRITE: / UKUR- FABNR, UKUR- KRSNR, UKUR-KNAME, UKUR- PRFNR. ELSE. WRITE: / text-001. ENDIF.
Pg: 48
Programacin en ABAP/4
3.12.2.
Es la bsqueda tradicional y ms comn que se realiza a travs de la declaracin SELECT la cual se explica en el capitulo Conceptos Generales .
3.12.3.
SELECT<a1><a2>... INTO (<f1>,<f2>,...) FROM... WHERE.... ENDSELECT . Hasta ahora, hemos visto como SELECT *... siempre lee todos los campos de uno o varios registros de datos. En el ejemplo siguiente se desea obtener todos los cursos que se imparten en el seminario nmero 0000000001. TABLES: UKURS. DATA: num_curso LIKE UKURS-KRSNR, desc_curso LIKE UKURS-KNAME. SELECT KRSNR KNAME INTO (num_curso, desc_curso) FROM UKURS WHERE KRSNR EQ '0000000001'. WRITE: / num_curso, desc_curso. ENDSELECT. IF SY-SUBRC NE 0. WRITE: / text-001. ENDIF. En el ejemplo anterior, solo los campos KRSNR y KNAME son ledos de la tabla UKURS para el curso nmero 0000000001. Despus se le agrega el modificador INTO a la palabra clave SELECT , y se especifica el rea de trabajo (en este ejemplo los campos num_curso, desc_curso) los cuales son llenados cada vez que el ciclo es procesado. La lista de argumentos de la clusula SELECT <a1><a2>... debe contener el mismo nmero de elementos que la clusula INTO (<f1>,<f2>...).
3.12.4.
El ejemplo de abajo determina el nmero total de registros de datos en la tabla SPFLI, tanto la distancia ms grande como la ms corta entre la salida de un aeropuerto y el destino del aeropuerto. En el ejemplo mencionado se agregan funciones MIN, MAX y COUNT, tambin puedes usar las funciones AVG y SUM (pero solo para campos numricos). Parntesis deben ir inmediatamente despus del agregado ID sin espacios intermedios y cada componente en la expresin debe ser separada de las otras por al menos un espacio.
Pg: 49
Programacin en ABAP/4 Si especificas la opcin DISTINCT, la funcin agregada solo opera con diferentes valores en una columna. No ENDSELECT. Vea tambin la documentacin de la palabra clave SELECT.
EJEMPLO
Funciones agregadas SELECT MAX (DISTANCE) MIN (DISTANCE) COUNT(*) FROM <> INTO (..., ..., ...) WHERE....
REPORT RSAAA08E. TABLES: SPFLI. DATA : MAXFIELD LIKE SFLIGHT-DISTANCE, MINFIELD LIKE SFLIGHT-DISTANCE, SELECT MAX( DISTANCE ) MIN( DISTANCE ) COUNT ( * ) FROM SPFLI INTO (MAXFIELD, MINFIELD, COUNTER). WRITE: / TEXT-001, MAXFIELD, / TEXT-002, MINFIELD, / TEXT-003, COUNTER.
COUNTER TYPE I.
3.12.5.
Para leer datos componente por componente dentro de un rea dada, use la opcin INTO CORRESPONDING FIELDS OF... No todos los campos de las lneas seleccionadas son ledas dentro del rea de trabajo, pero solo esas columnas para las cuales hay componentes nombrados idnticamente en el rea dada. En el ejemplo slo las columnas CITYFROM y CITYTO de la tabla SPFLI son ledas y transportadas con campos nombrados idnticamente en el rea de trabajo definida para el propsito. purpose CORRESPONDING FIELDS te permite llenar cadenas de campos simples tanto como de tablas internas. Con tablas internas, puedes usar ...APPENDING CORRESPONDING FIELDS... el cual no sobre escribe entradas de tablas existentes, pero adiciona los nuevos a los que ya existen.
Pg: 50
Programacin en ABAP/4 Cuando una tabla interna es procesada con ...CORRESPONDING...o...APPENDING CORRESPONDING..., no ENDSELECT es necesitado en el cdigo del programa.
EJEMPLO
Lectura de datos componente por componente SELECT ... INTO CORRESPONDING FIELDS OF <wa>. SELECT ... INTO CORRESPONDING FIELDS OF TABLE<itab>. SELECT ... APPENDING CORRESPONDING FIELDS OF TABLE <itab>. REPORT RSAAA08N. TABLES: SPFLI. DATA: BEGIN OF
ITAB OCCURS 10, CITYFROM LIKE SPFLI-CITYFROM, CITYTO LIKE SPFLI-CITYTO, END OF ITAB. SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE ITAB. . . LOOP AT ITAB. WRITE: / 10 ITAB-CITYFROM, ITAB-CITYTO. ENDLOOP.
3.12.6.
Rango de seleccin
...BETWEEN... te permite procesar un rango con la clusula WHERE. ABAP/4 interpreta los lmites de rango ms bajos y el ms altos como parte de un rango especfico. El siguiente ejemplo lee todos los vuelos de la tabla SFLIGHT donde el mximo nmero disponibles de asientos se elev entre 100 y 900.
EJEMPLO
RANGO DE SELECCIN SELECT * FROM <tabla> WHERE <campo de tabla> BETWEEN <campo1> AND <campo2>. REPORT RSAAA08H. TABLES: SFLIGHT. SELECT * FROM SFLIGHT WHERE SEATSMAX BETWEEN 100 AND 900. WRITE: / SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-SEATSMAX. ENDSELECT.
Pg: 51
Programacin en ABAP/4
3.12.7.
Patrones de seleccin
El ejemplo de abajo selecciona todos los registros donde un R occurs en la segunda posicin en el campo CITYFROM y seguida por una sequencia cualquiera de caracteres. Los caracteres _ u % tienen una significado particular : _ % stands para un solo caracter stands para una secuencia cualquiera de caracteres
Puedes usar solo caracteres wildcard con campos de texto. Este uso de caracteres wildcard en la condicin LIKE corresponde a SQL estandar.
EJEMPLO
Patrones de Seleccin SELECT * FROM <table> WHERE <campo de tabla> LIKE ... REPORT RSAAA08I. TABLES: SPFLI. SELECT * FROM SPFLI WHERE CITYFROM LIKE _R%. WRITE: ENDSELECT. / SPLIT-CARRID, SPFLI-CITYFROM. SPFLI-CONNID,
3.12.8.
El nombre de la tabla de base de datos no es conocida hasta especificar unos campos at runtime PARAMETERS. El contenido de estos campos determina el nombre de la tabla. La palabra clave TABLES no requiere de este tipo de asignacin de nombre. Este variante de la palabra clave SELECT puede solamente ser usado con la palabra clave INTO... . Especificando dinmicamente el nombre de la tabla en una palabra clave SELECT siempre toma ms tiempo en el CPU que especificando el nombre estticamente en el programa.
Pg: 52
Programacin en ABAP/4 El nombre de tabla es case-sensitive (por ejem. upper/lower case should be taken into account). Los caracteres numricos en campos de texto no pueden ser correctamente desplegados.
EJEMPLO
Tabla en forma Dinmica SELECT * FROM (<table>) INTO <wrok area>. REPORT RSAAA08F. DATA: BEGIN OF WA. LINE(100), END OF WA. PARAMETERS: TABNAME(10) DEFAULT SPFLI. SELECT * FROM (TABNAME) INTO WA. WRITE: / WA-LINE. ENDSELECT.
3.12.9.
Con la clusula dinmica WHERE, puedes dejar la especificacin de la condicin de seleccin hasta runtime. La condicin WHERE es tomada de una tabla interna con lneas que constan de campos tipo C y un mximo de 72 caracteres. Se especifica el nombre de una tabla interna en parntesis sin dejar espacios entre cada parntesis y el nombre de la tabla. La condicin formulada en una tabla interna debe tener la misma forma correspondiente a una condicin en el cdigo fuente. Syntax checking cannot take place until runtime. Unicamente literales son permitidos como valores.
Pg: 53
Programacin en ABAP/4
EJEMPLO
SELECT * FROM <table> WHERE <Itab>. REPORT RSAAA08G. DATA : LINE(72) OCCURS 10 WITH HEADER-LINE, AND(3). PARAMETERS : PCARRID LIKE SFLIGHT-CARRID, PCONNID LIKE SFLIGHT-CONNID. CONCATENATE CARRID = PCARRID INTO LINE. APPEND LINE. AND = AND. CONCATENATE AND CONNID = PCONNID INTO LINE. APPEND LINE. SELECT * FROM SPFLI WHERE (LINE). WRITE: / SPLIT-CARRID, SPFLI-CONNID,.... SPFLI-CITYFROM. ENDSELECT.
3.12.10.
Puedes usar solo la palabra clave SELECT para leer registros de una tabla de base de datos en una tabla interna. El sistema de base de datos lee los registros como un conjunto, no individualmente, dentro de una tabla interna. Este proceso es ms rpido que la lectura de tabla de bases de datos en un ciclo y colocando cada registro en una tabla interna uno por uno. Ya que no hay ciclo procesndose, el ENDSELECT no es necesario. La forma bsica de la palabra clave (...INTO TABLE...) llena la tabla interna con los registros de datos encontrados y sobre escribe cualquier entrada existente. The variant...APPENDING TABLE... appends records to existing entries. EJEMPLO SELECT * FROM <table> INTO TABLE <itab>. SELECT * FROM (<table>) APPENDING TABLE <itab>. REPORT RSAAA08L. TABLES: SFLIGHT. DATA: ITAB LIKE SFLIGHT OCCURS
LINE. = AA.
SELECT * FROM SFLIGHT INTO TABLE ITAB WHERE CARRID LOOP AT ITAB. WRITE: / ITAB-CARRID, ITAB-CONNID,.... SPFLI-CITYFROM. ENDLOOP.
Pg: 54
Programacin en ABAP/4
3.12.11.
Ordenamiento de seleccin
...ORDER BY... te permite ordenar los elementos de una tabla en una secuencia dada.. ...ORDER BY PRIMARY KEY ordena las entradas ledas por la llave primaria en orden ascendente. ...ORDER BY f1...fn ordena las entradas de los campos de tabla especificados. Puedes definir el orden de secuencia explcitamente con ASCENDING y DESCENDING. La secuencia estndar ordenada, est en orden ascendente. Puedes especificar el orden de los campos at runtime, por ejem. ... ORDEN BY<itab>. En este caso, la tabla interna<itab> debe contener la lista <f1>...<fn>. Las entradas de <itab> deben ser de tipo C y tener una longitud mxima de 72.
EJEMPLO
SELECT * FROM (<tabla>) ORDER BY <campo1><campo2>.. PRIMARY KEY. REPORT RSAAA08O. TABLES: SPFLI. SELECT * FROM SPFLI ORDER BY CITYFROM. WRITE: / SPLIT-CARRID, SPFLI-CONNID, SPFLI-CITYFROM. ENDSELECT. IF SY-SUBRC NE 0. WRITE: / TEXT-001. ENDSELECT.
3.12.12.
Agrupacin de seleccin
El siguiente ejemplo agrupa las entradas del contenido de el campo CARRID. Esto se usa para agregar funciones para determinar valores ms pequeos y ms grandes de el campo PRICE y obtenerlos. Un grupo consta de entradas las cuales son listadas en las columnas especificadas por GROUP BY y tienen los mismo valores. Con excepcin de expresiones agregadas, todos los campos de bases de la clusula SELECT (en este caso CARRID) deben tambin aparecer en la lista de argumentos de la clusula GROUP BY .
Pg: 55
Programacin en ABAP/4 Si el nombre de la tabla de bases de datos no es conocida until runtime, no puedes usar ...GROUP BY... . EJEMPLO: SELECT <a1><a2>... INTO <f1>, <f2>,... FROM (<tabla>) GROUP BY... REPORT RSAAA08Q. TABLES: SPFLIGHT. CARRID LIKE SFLIGHT-CARRID, MINIMUM TYPE P DECIMALS 2, MAXIMUM TYPE P DECIMALS 2, SELECT CARRID MIN (PRICE) MAX(PRICE) INTO (CARRID, MINIMUM, MAXIMUM) FROM SFLIGHT GROUP BY CARRID. WRITE: / CARRID, MINIMUM, MAXIMUM. ENDSELECT. IF SY-SUBRC NE 0. WRITE: / TEXT-001. ENDIF.
Pg: 56
Programacin en ABAP/4
EJERCICIOS : 1. Nombre del Reporte: ##: Clase de Desarrollo: ZBCA##H1. Nmero de Grupo. $TMP (local)
Tarea: Crea una lista de datos de la tabla SPFLI. Esta lista deber incluir los campos de: Cdigo de la Aereolnea (SPFLI-CARRID), Cdigo de Vuelo (SPFLI-CONNID), Ciudad de Partida (SPFLI-CITYFROM) y, Ciudad Destino (SPFLI-CITYTO). La lista deber estar ordenada por Cdigo de Aereolnea, Ciudad de Partida y Ciudad Destino. Permite que el usuario indique una Aereolnea en particular en una Ventana de seleccin. 2. Nombre del Reporte: ##: Clase de Desarrollo: ZBCA##H2. Nmero de Grupo. $TMP (local).
Tarea: Crea un reporte que indique el nmero de asientos ocupados para cada Aereolnea en particular. Para hacer esto, determina el mximo, el minimo, y el promedio del campo SFLIGHT-SEATSOCC (Occupied seats) de la tabla SFLIGHT. Lista estos valores en el reporte. Permite que el usuario seleccione una Aereolnea en la pantalla. 3. Nombre del Reporte: ##: Clase de Desarrollo: ZBCA##H3. Nmero de Grupo. $TMP (local).
Tarea: Use SQL nativo para determinar : la duracin del vuelo (FLTIME) ciudad de partida (CITYFROM) ciudad destino (CITYTO), del vuelo LH (CARRID), 0400 (CONNID) de la tabla SPFLI.
Pg: 57
Programacin en ABAP/4
3.13. Modularizacin
Modularizando tus programas de ABAP/4, puedes evitar : - Redundancia Si tu programa contiene lo mismo o secuencias de a travs de la modularizacin.
- Hace tus programas fciles para leer y mejora la utilizacin de sus estructuras. - Una secuencia de instrucciones estn en un mdulo y puede ser llamado desde diferentes lugares dentro del programa. - Re-usar los componentes de programa. Algunas partes de tu programa pueden ser usadas otra vez en otros programas. Cuando usas subrutinas, tenemos 3 posibles escenarios: 1. 2. 3. Ambas, la subrutina y la llamada (call) estn en el mismo programa ABAP/4 (llamada interna). La subrutina por s misma est en un programa externo (llamada externa). Los mdulos de funciones son asignados a grupos de funciones y estn almacenados centralmente en la Function Library. En contraste a las subrutinas externas, la funcin de mdulos tiene una interfase claramente definida.
PROGRAMA RSAAA10D.
External subroutine: Calculate loss
Pg: 58
Programacin en ABAP/4
3.13.1.
Para declarar una subrutina, usas la clave FORM y ENDFORM. Despus FORM, especificas un nombre (de ms de 30 caracteres). Para mayor claridad, debes colocar todas las subrutinas juntas al final del programa. Para llamar subrutinas, debes usar la palabra clave PERFORM, seguida por el nombre de la subrutina. Puedes ejecutar llamadas de subrutinas anidadas y recursivas.
EJEMPLO
Definicin y llamadas de Subrutinas. REPORT RSAAA10A. * Global1 data TABLES : ... . DATA : ... .
X1
Y2
* Subroutine calls (main program) PERFORM calculate_loss. PERFORM write_loss. . . * Subroutines FORM calculate_loss. * statements ENDFORM. FORM write_loss. * statements ENDFORM.
Pg: 59
Programacin en ABAP/4
En una subrutina, puedes direccionar: - Parmetros formales - Campos declarados localmente. - Dato global
EJEMPLO
REPORT Dictionary tables TABLES : ... . (not program-specific) DATA: ... global data X1 Y1 Subrutine call X1 Subrutines Parameters DATA : ... Parameters DATA : ... X local data statements local data statements X1 Y1 Y
Pg: 60
Programacin en ABAP/4
SFLIGHTPRICE 1
SFLIGHTSEATSOCC 1
SFLIGHTPAYMENTSUM 1
REVENUE 2
LOSS 3
PRICE
Formal parameter FORM calculate_loss
SEATS
PAYMENTSUM
REVENUE
LOSS
Call by value
Call by reference
3.15.1.
ABAP/4 distingue los siguientes tipos de paso de parmetros : Llamada por valor : Cuando una subrutina es llamada, los parmetros formales son creados como copias de los parmetros actuales ( en su propio espacio de memoria).
Pg: 61
Programacin en ABAP/4 Llamada por valor y resultado: Los parmetros formales tienen su propio espacio de memoria. Al dejar la subrutina., el valor de un parmetro formal es copiado al espacio de memoria del parmetro actual asignado. Llamada por referencia: Cuando una subrutina es llamada, solo la direccin del parmetro actual se pasa al parmetro formal. Si cambias el valor de el parmetro formal, el contenido del campo en el programa principal tambin cambia.
a1 f1 Call by value
a1 f1 Call by reference
3.15.2.
Despus de USING, especificas los parmetros para ser pasados por valor o por referencia: Llamada por valor : Cuando se especifican parmetros formales individuales, se usa VALUE. VALUE aparece inmediatamente antes del nombre del parmetro en parntesis. Esto define una llamada por valor para un parmetro formal ( por ejem. FORM upro USING VALUE(f1) VALUE(f2 )...). Llamada por referencia : Especificas los parmetros individuales despus de USING. Esto Pg: 62
Programacin en ABAP/4 define una llamada por referencia para parmetros formales (por ejem. FORM upro USING f1 f2 ...). Despus de CHANGING, especificas los parmetros para ser pasados por valor o resultado. Cuando la subrutina es llamada, estos son asignados a su propio espacio de memoria. Tambin, los contenidos actuales de los parmetros formales son automticamente pasados a los parmetros actuales asignados al final de la subrutina (at ENDFORM). Si la palabra clave CHECK <expresin lgica> en una subrutina regresa un resultado negativo o sales de la subrutina con EXIT, la transferencia es tambin ejecutada por que t sales de la subrutina usando ENDFORM. El procesamiento de la subrutina termina inmediatamente y ENDFORM no es ejecutado si aparece un error de mensaje (MESSAGE Ennn) o una palabra clave STOP ocurre.
PROGRAM RSAAA10B. . . . PERFORM <name> USING a1 a2 a3 a4 a5. . . . FORM <name> USING VALUE(f1) VALUE(f2) VALUE(f3) f4 CHANGING VALUE(f5). <statements> ENDFORM.
a1
a2
a3
a4
a5
f1
f2
f3
f4
f5
Call by value
Call by reference
3.15.3.
Para asegurar que un parmetro formal de una subrutina es de cierto tipo, puedes especificarlo en la palabra clave FORM. Para hacer esto, teclee TYPE <t> o LIKE<f> despus del parmetro formal en la lista TABLES, USING, o CHANGING. Cuando llamas una subrutina con PERFORM, el sistema checa si los tipos de los parmetros actuales en la palabra clave PERFORM son compatibles con los tipos asignados a parmetros formales. Si los tipos son incompatibles, el sistema despliega un mensaje durante el chequeo de sintaxis para una llamadas de subrutina interna. Los siguientes tipos de verificacin estn disponibles cuando se llama una subrutina : No type, TYPE ANY El sistema acepta parmetros actuales de cualquier tipo. Pg: 63
Programacin en ABAP/4 Todos los atributos del parmetro actual son pasados a el parmetro formal. El sistema checa si el parmetro actual esta en una tabla interna. Todos los atributos y la estructura de una tabla son transferidos del parmetro actual al parmetro formal. El sistema verifica si el parmetro actual es de tipo C, N, P, o X. La longitud de el parmetro y su especificacin DECIMALS (para el tipo P) son pasados del parmetro actual al parmetro formal. Estos tipos son determinados. El sistema verifica si el LIKE<f>, TYPE<> tipo de dato de el parmetro actual es de acuerdo al parmetro formal (<ud>= user-defined).
TYPE D, F, I, o T
f1
f2
f3
f4
f5
Call by value
Call by reference
3.15.4.
Puedes pasar estructuras de datos (por ejem. cadenas de campo, lneas de encabezado de tablas internas, reas de trabajo de tabla) especificando LIKE o TYPE despus del parmetro formal relevante. Si no asignas un tipo a el parmetro formal, el nico campo de la cadena de campo en la subrutina no puede ser direccionado.
EJEMPLO
Paso de estructuras como parmetros Pg: 64
Programacin en ABAP/4
REPORT RSAAA10D. TABLES: SFLIGHT. DATA : ... . . . . PERFORM WRITE_sflight1 PERFORM WRITE_sflight2 . . . FORM write_sflight1 ENDFORM. FORM write_sflight2 USIG REC LIKE SFLIGHT. WRITE: / REC-CARRID, REC-CONNID, REC-FLDATE. ENDFORM.
USING USING
SFLIGHT. SFLIGHT.
USING WRITE:
REC. / REC.
3.15.5.
Si deseas pasar una tabla interna a una subrutina y acceder la os campos individuales de las entradas de tablas, debes especificar el tipo del parmetro formal correspondiente (como con estructuras en instrucciones FORM). Puedes pasar tablas internas con USING o TABLES. En contraste a TABLES, USING pasa de una tabla interna junto con la lnea de encabezado. En la subrutina, debes definir el parmetro TABLES antes de USING. Las tablas internas estn siempre verificadas por referencia. Asignar un tipo a la tabla, use STRUCTURE.
Pg: 65
Programacin en ABAP/4
EJEMPLO.
REPORT DATA: PERFORM PERFORM . . . FORM DATA: LOOP RSAAA10E. TAB LIKE SFLIGHT OCCURS calc_write1 calc_write2 USING TABLES 50 WITH HEADER LINE
calc_write1 USING TABBODY LIKE TAB LIKE SFLIGHT. AT TABBODY INTO TAB. WRITE : / TAB-CARRID. ENDLOOP. ENDFORM. FORM calc_write2 LOOP AT ITAB. WRITE: / ENDLOOP. ENDFORM. TABLES ITAB STRUCTURE
TAB [].
TAB.
ITAB-CARRID.
Pg: 66
Programacin en ABAP/4
Pg: 67
Programacin en ABAP/4
Function Library
Using function modules
FM_02 ...
3.17.1.
Creacin
Un mdulo de funcin pertenece a un grupo de funciones. Cada grupo de funcin es asignado a una persona que est autorizada para liberar mdulos de funciones. Todos los mdulos de funciones de un grupo de funciones son manejados en un programa ABAP/4. Los nombres de mdulos de funciones pueden ser ms de 30 caracteres y pueden constar solo de caracteres alfanumricos y el caracter de subrayado especial (_). Los nombres de grupos de funciones comienzan de Z y los nombres de mdulos de funcin que empiezan con los caracteres Z- estn reservados para clientes (customers). Pg: 68
Programacin en ABAP/4
Function Library
Function Module
Z_FREESEATS
Create
Z_DEM
F4
Pg: 69
Programacin en ABAP/4
3.18.1.
Estructura
Para cada mdulo de funcin, el sistema genera una estructura de programa base. Esto inserta la interfase definida y las Excepciones con lneas comentadas. Puedes declarar tipos de datos locales. Puedes escribir las declaraciones de datos e instrucciones relativas al mdulo de funcin en el bloque FUNCTION.....ENDFUNCTION.
EJEMPLO
FUNCTION Z_FREESEAT. * IMPORTING * EXPORTING * CHANGING * TABLES * EXCEPTIONS declaraciones locales statements ENDFUNCTION.
3.18.2.
La entrada y salida de parmetros estn definidas para cada mdulo de funcin. Todos los elementos de un mdulo de funcin pueden estar descritos pro significado en una corta descripcin y documentacin comprensible. Cuando un mdulo de funcin es llamado, los campos y cadenas de campos de los parmetros EXPORTING son transferidos al mdulo de funcin .En respuesta al programa que los invoc, los valores son regresados a los parmetros IMPORTING. Los parmetros son asignados en el programa principal como sigue: parmetro formal = parmetro actual
Pg: 70
Programacin en ABAP/4
RSAAA10G. SFLIGHT. loss like sflight-paymentsum, revenue like .... CALCULATE_REVENUE_LOSS PAYMENTSUM = SFLIGHT-PAYMENTSUM SEATSOCC = SFLIGHTSEATSOCC PRICE = SFLIGHT-PRICE IMPORTING LOSS REVENUE = = LOSS REVENUE
Pg: 71
Programacin en ABAP/4
CALL FUNCTION
EXPORTING
Pg: 72
Programacin en ABAP/4
. . . . . . IMPORTING . . . . . . CHANGING f1 = a1
Pg: 73
Programacin en ABAP/4
Pg: 74
Programacin en ABAP/4
RAISE<excepcin>.
Pg: 75
Programacin en ABAP/4
CASE SY-SUBRC. WHEN 1. WRITE NO ENTRY WHEN 2. WRITE OTHER ERROR. ENDCASE.
Ejemplo 2:
PROGRAM . . . IF SEATSOCC > SEAETSMAX. RAISE PLANE_OVERLOAD. * MESSAGE . . . RAISING PLANE_OVELOAD. ENDIF. CALL . . . CALL FUNCTION EXPORTING ... IMPORTING ... EXCEPTIONS ... PLANE_OVERLOAD = 01. CASE SY-SUBRC. WHEN 1. . . . ENDCASE.
Pg: 76
Programacin en ABAP/4
Function module
Pg: 77
Programacin en ABAP/4
Pg: 78
Programacin en ABAP/4
3.25. Subrutinas
Puedes crear un llamado de subrutina nicamente de un mdulo de funcin en el mdulo de programa apropiado (after ENDFUNCTION). Creas un llamado de subrutina de diferentes mdulos de funcin del mismo grupo de funciones en un programa include por separado. Para hacer esto, introduce el nombre del programa include en el programa principal del grupo de funcin. (use la funcin de Main program). Use L<group>Fxx como el nombre para el programa include.
Main Program
* System-defined include programs INCLUDE L<gr>TOP. Global Data * User-defined include programs INCLUDE L<gr>F01. Subroutines
Call
Pg: 79
Programacin en ABAP/4
Global Data
Subroutine L <gr> F01. FORM SUB1 USING . . . DATA: . . . . MOVE ... TO X. ENDFORM.
Pg: 80
Programacin en ABAP/4
Tarea: Para cada cdigo de vuelo, calcula las ventas de todos los vuelos de una Aereolnea. Copia el reporte RSAAA107 y usalo como modelo. In este reporte, una tabla interna es definida con aereolnea, vuelo, moneda y las ventas del vuelo. Cuando llenes la tabla interna, el reporte deber calcular las ventas para los vuelos. Utiliza una Tabla interna en una subroutina para el paso de parmetros. 2. Nombre del Reporte: Nombre del rea funcional: Nombre del mdulo de Funcin: ##: ZBCA##J3. ZT##. Z_OCCUPANCY##. Nmero de Grupo.
Tarea: Calcula los asientos ocupados para todos los vuelos de una aereolnea e indica el porcentaje de ocupacin. Para hacer esto, crea un mdulo de funcin el cual calcule los asientos ocupados para un vuelo, as como tambin el porcentaje.
Pg: 81
Programacin en ABAP/4
Report
REPORT QUERY
3.27.1.
Lectura de datos
Bsicamente, hay 2 formas que puedes leer datos: 1. Crea la lectura en el programa usando la palabra clave SELECT (reportdriven data retrieval). por razones de desempeo, es mejor usar SELECT ... FOR ALL ENTRIES IN <itab> WHERE<cond> que anidar instrucciones SELECT. Usar un programa especial read - conocida como una base de datos lgica - para leer los datos requeridos y hacerlo disponible a tu programa en la secuencia correcta. En este caso, solo tienes que programar las instrucciones de procesos de datos.
2.
Puedes usar report-driven data retrieve y bases de datos lgicas lado por lado en el mismo reporte. En un reporte, la conexin entre el reporte y la base de datos lgica esta dada por el evento clave GET. Este evento es ejecutado por la base de datos lgica despus de que la base de datos ha ledo un registro en particular y lo ha almacenado en el rea Pg: 82
Programacin en ABAP/4 de trabajo del reporte. El reporte por s mismo no lee los registros porque esto ya estn disponible para procesarlos. Cuando comienzas un reporte el cual est asignado a una base de datos lgica, el ABAP/4 runtime systems indica a la base de datos lgica evaluar el criterio de seleccin del usuario. La base de datos lgica lee un registro de dato y, en el evento GET apropiado, provoca que la tabla sea leda con el SELECT disponible al reporte. El registro de dato es procesado en el evento GET y el control regresa a la base de datos lgica.
ABAP/4 DICTIONARY
3.27.2.
Eventos
ABAP/4 es un lenguaje de programacin. Reporta cuales son ligadas a bases de datos lgicas no son procesadas secuencialmente. A lado del evento GET, el reporte puede usar un nmero de otras claves de evento para ejecutar el proceso. Estos eventos son triggered by por el procesador ABAP/4 el cual determina la secuencia de eventos. Si el proceso es scheduled en la base de datos lgica para estos eventos, es ejecutado antes del evento en el reporte es triggered. El bloque de proceso definido para un evento clave es ejecutado procedurally y concluye cuando el prximo evento ocurre. El evento START-OF-SELECCTION es ejecutado antes de que la base de datos empiece la lectura de datos. Este evento es dado por default.
Pg: 83
Programacin en ABAP/4
TOP-OF-PAGE . END-OF-PAGE .
3.27.3.
Eventos interactivos
Pg: 84
Programacin en ABAP/4 T puedes definir eventos interactivos en ABAP/4 reports. Estos eventos son ejecutados cuando el usuario presiona una llave de funcin particular o pushbutton. Ellos te permiten la creacin de listas secundarias las cuales despliegan informacin detallada.
EVENTOS UTILIZADOS EN REPORTES INTERACTIVOS AT LINE-SELECTION.
3.27.4.
Los reportes interactivos te permiten crear listas secundarias y ventanas. Para llamarlas y desplegarlas en la pantalla, debes usar funciones claves. Puedes distribuir toda la informacin regresada por el reporte cruzando varias pantallas, gradualmente obteniendo ms y ms informacin detallada. Usando funciones claves, el usuario puede tambin activar : - Una transaccin - Otro reporte.
SECONDARY LIST WINDOWS
INTERACTIVE REPORTING
CALLING A TRANSACTION
CALLING A REPORT
3.27.5.
Seleccin de lnea
Pg: 85
Programacin en ABAP/4 El usuario activo no puede seleccionar una lnea en una lista y desplegar informacin detallada de esta lnea en una segunda lista, puedes usar el evento AT LINE SELECTION. Este evento es procesado cuando el usuario selecciona con el cursor una lnea vlida en la lista y activa la funcin llave asignada a la funcin PICK en la definicin de interfase. Si no existe una interfase definida, el evento se ejecuta presionando F2 o con doble clic. En seguida que el usuario selecciona una lnea con doble clic o posicionando el cursor y ejecuta un evento interactivo (en este caso AT LINE SELECTION) presionando una funcin llave o pushbutton, el sistema pasa los valores almacenados en esta linea al rea HIDE del rea de trabajo correspondiente. Los contenidos de la lnea seleccionada estn tambin almacenados en el campo de sistema SY-LISEL.
START-OF-SELECTION. SELECT * FROM SPFLI WHERE . . . WRITE: /SPFLI-CARRID, SPFLI-CONNID . . . HIDE: SPFLI-CARRID, SPFLI-CONNID. ENDSELECT. AT LINE-SELECTION. SKIP TO LINE 12. WRITE : TEXT-001, SPFLI-CARRID, SPFLI-CONNID, TEXT-002. *D : TEXT-001 : YOU HAVE CHOOSEN *D : TEXT-002 : THE CONNECTION.
Car LH LH ... LH
Secondary list
3.27.6.
Area HIDE
HIDE <field> .
Por omisin, el dato de la lista bsica no est disponible cuando ests en la lista secundaria. Sin embargo, la palabra clave HIDE te permite almacenar contenidos de campo para una lnea de lista particular en un area especial. Para cada campo, el sistema almacena el nombre de campo y el valor.
Pg: 86
Programacin en ABAP/4 El comando HIDE debe seguir inmediatamente la palabra clave WRITE ya que la informacin es almacenada para cada salida de linea. Puedes tambin usar el rea HIDE para almacenar campos los cuales no aparecen en la lista.
Car LH LH ... LH
REPORT RSAAA11A. . . . START-OF-SELECTION. SELECT * FROM SPFLI WHERE . . . . WRITE: SPFLI-CARRID, SPFLICONNID, . . . . HIDE: SPFLI-CARRID, SPFLICONNID, . . . . ENDSELECT.
3.27.7.
Validacin
El sistema no debe generar una lista secundaria en una seleccin de linea invalida del programa. En el programa de ejemplo el contenido de cada campo es almacenado en el area HIDE y se asigna al valor inicial. Si el usuario selecciona una linea invalida, el sistema no encuentra un valor correspondiente en el area HIDE. Con un resultado negativo de la palabra clave CHECK, el bloque actual procesndose se termina. El sistema no genera una lista secundaria.
Hide area Header line SPFLI-CARRID LH SPFLI-CONNID 0400 SPFLI-CARRID LH SPFLI-CONNID 3577
Footer line
REPORT RSAAA11A.
Pg: 87
Programacin en ABAP/4
START-OF-SELECTION. SELECT * FROM SPFLI WHERE . . . .
WRITE: SPFLI-CARRID, SPFLI-CONNID. HIDE: SPFLI-CARRID, SPFLI-CONNID. END-OF-SELECTION. CLEAR SPFLI-CARRID. AT LINE-SELECTION. CHECK NOT SPFLI-CARRID IS INITIAL. CLEAR SPFLI-CARRID
3.27.8.
Si el usuario ha introducido valores inconsistentes o ha seleccionado valores sin tener la autorizacin apropiada, se abtiene un mensaje de dilogo con la clave MESSAGE. Los mensajes de dilogo son almacenados en tabla T100. Estn clasificados por lenguaje dos-caracter ID y tres-nombre de caracter. Los mensajes pueden contener ms de cuatro variables (&, &2, &3 y &4). Si quieres obtener & en un mensaje Este no representa una variable, se debe introducir dos veces. Por ejem.: Este es un mensaje con &&. A lo largo del texto del mensaje puedes usar &v1, &v2, &v3 variables correspondientes. y &v4 en vez de las
Puedes crear tus propios mensajes usando ID, los cuales comienzan tambin con Y (Head-office) o Z (branch). TABLE T100 S D . D . D ID AT .. AT .. AT No. 001 ... 011 ... 027 Message Text Record &1 &2 does not exist. .... Error when updating .... Not authorized
Pg: 88
Los mensajes se obtienen con la palabra clave MESSAGE. El lenguaje usado para la tabla T100 es el lenguaje logon. Especificas el mensaje ID despus del parmetro MESSAGE-ID de la palabra clave REPORT. Este mensaje ID se aplica al reporte entero. Especificas el nmero de mensaje en la insrtruccin MESSAGE. Justo antes del nmero three-digit, especificas el tipo de mensaje el cual determina como el usuario is meant reacciona al mensaje. Despus del parmetro WITH, introduce los valores para la variable (arriba de cuatro). Puedes tambin especificar campos o literales. El campo i-th reeemplaza a la variable &i en el mensaje. Si las variables en el mensaje estn solo representadas por & o $ estos placeholders son apoyados con los valores de los campos en la palabra clave MESSAGE de acuerdo a su posicin. Si no te gusta el mensaje ID en la palabra clave REPORT, puedes introducir un mensaje ID en la palabra clave MESSAGE, especificando el ID inmediatamente despus del nmero de mensaje en parntesis. Sin embargo, este ID aplica solo al mensaje actual. Por ejem.: MESSAGE E004(UD). Si quieres enviar un mensaje dinmico, puedes usar la sig. sintaxis : MESSAGE ID <mid> TYPE <mtyp> WITH<campo1><campo2><campo3><campo4>. NUMBER <mno>
Los campos del sistema SY-MSGID, SY-MSGTY y SY-MSGNO contienen el mensaje ID, el tipo de mensaje y el nmero de mensaje respectivamente, mientras que los campos de sistema SY-MSGV1 a travs de SY-MSGV4 contiene los campos para the placeholders. Annn Xnnn Ennn Wnnn Innn Snnn
MESSAGE
WITH
Clasificacin
Termina el proceso y el usuario tiene que reiniciar la transaccin. Como mensaje tipo A pero con un sort dump MESSAGE _TYPE_X. El proceso es interrumpido y el usuario debe asignar un nuevo valor. Pg: 89
Programacin en ABAP/4 W Warning El proceso es interrumpido y el usuario puede asignar un nuevo valor. (los efectos como con mensajes de E ) o solo presionando ENTER para confirmar los valores ( los efectos como los mensajes I ). El proceso es interrumpido y el sistema reinicia despus de que el usuario ha presionado ENTER. La informacin es mostrada en la siguiente pantalla.
I S
Information Success
Para hacer que la seleccin de pantalla est lista para la otra entrada cuando los mensajes E y W ocurran, obtienes estos mensajes en el evento AT SELECTIONSCREEN. En uno de los siguientes eventos (por ejem. START-OF-SELECTION, GET o END-OF-SELECTION),estos tipos de mensajes se comportan como mensajes tipo A.
Selection Screen
Selection Screen
Pg: 90
Programacin en ABAP/4
WARNING Function call INFORMATION Function call SUCCESS Function call
Selection Screen
Selection Screen
Selection Screen
W message
List
List
List S message
Pg: 91
Programacin en ABAP/4
Ejercicios: 1. Nombre del reporte: ##: Tarea: Crea un lista de todos los vuelos para una areolnea. Obten los siguientes campos: SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-CITYTO, SPFLI-DEPTIME, SPFLI-ARRTIME. Define una pantalla de seleccin en la cual el usuario indique la areolnea (SPFLICARRID) y el vuelo (SPFLI-CONNID). Lee la tabla SPFLI de acuerdo con la eleccin. Cuando el usuario seleccione una lnea, el programa deber mostrar una lista secundaria (tabla SFLIGHT) como lo muestra el ejemplo: Lista basica
CARRID
AA
CONNID
0017
CITYFROM
NEW YORK
CITYTO
SAN FRANCISCO
DEPTIME
13:30:00
ARRTIME
16:31:00
Lista secundaria
DATE
29.10.1995 11.11.1995 16.11.1995 19.11.1995 29.11.1995 19.12.1995 21.12.1995
PRICE
666,67 666,67 666,67 666,67 666,67 666,67 666,67
CURRENCY
USD USD USD USD USD USD USD
MAX
660 660 660 660 660 660 660
SEATS OCCUPIED
10 20 38 38 10 20 38
FREE
650 640 622 622 622 640 622
Deberas calcular el nmero de asientos vacantes por cada vuelo. Realiza la validacin de la lnea seleccionada.
Pg: 92
Programacin en ABAP/4
Copia el programa del ejercicio anterior y obten un mensaje de error (nmero 037 de AT ) cuando los datos seleccionados por el usuario no existen en la taba SFLIGHT. Lee la tabla SPFLI en el evento AT SELECTION-SCREEN y guarda el registro en una tabla interna para evitar repetir el acceso a la base de datos.
Pg: 93