Está en la página 1de 93

Programacin en ABAP/4

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.

Sistema de Transporte ABAP/4 Editor Reportes


Navegacin

ABAP/4 Organizador

Screen Painter

Llamada de Funcin Remota

Interfase Repositorio

ABAP/4 Diccionario

R/3 Repositorio

Screen Menu

Modelador De Datos

ABAP/4 Procesador
Depurador Trazado Pruebas

Modulo de Funciones

3.1.2. Atributos de un programa


Lo primero que se debe hacer en la creacin de un programa en ABAP/4 es asignar los atributos correspondientes, como en el ejemplo que se muestra en la figura siguiente:

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

El Status es un atributo recomendable con las siguientes posibles entradas:

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.

El uso de comentarios dentro de un programa se puede realizar de dos formas: Pg: 10

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

3.1.4. Declaracin WRITE


La salida de la declaracin WRITE coloca en pantalla el contenido de un campo o una constante en el formato apropiado segn su tipo. Declaraciones consecutivas WRITE, colocan los datos en pantalla en una misma lnea. Si no hay espacio en la misma lnea, continua en la prxima lnea. WRITE abc. WRITE 123. WRITE xyz. El resultado en pantalla seria: abc123xyz SKIP genera lneas en blanco. WRITE abc. SKIP. WRITE 123. SKIP. WRITE xyz. El resultado en pantalla seria: abc 123 xyz Tambin se puede utilizar el carcter de la diagonal (/) para saltar un rengln. La palabra clave ULINE genera una lnea subrayada, a la cual se le puede Asignar una posicin as como una longitud, en el siguiente ejemplo la declaracin genera en un rengln nuevo una lnea subrayada a partir de la quinta columna de 30 caracteres de longitud. ULINE /5 (30). Por omisin ABAP/4 genera dos lneas de encabezados por cada pgina. El primero de ese contiene la fecha y el nmero de pgina. Tambin despliega el ttulo (si hay uno).

3.1.5. Operadores Relacionales


Si los operadores no son del mismo tipo de datos, el sistema ajusta a un tipo.

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.

3.1.6. Expresiones Aritmticas


Existen varias declaraciones en ABAP/4, las cuales asignan valores a los campos. Las ms importantes de estas son MOVE y COMPUTE, esta ltima es opcional, como se muestra en el siguiente ejemplo: Contador eq 0. MOVE 1 TO contador. *contador es estos momentos tiene valor 1 COMPUTE contador = contador + 2. *tambin es correcto suprimir la palabra clave COMPUTE contador = contador + 2. En el caso de que el tipo o longitud no coincidiera entre el campo y el valor asignado, el sistema ejecuta un ajuste conversin automtica. Para operaciones simples de aritmtica, tambin se pueden usar las siguientes declaraciones: ADD, SUBTRACT, MULTIPLY y DIVIDE , como se muestra en el siguiente ejemplo: ADD 2 TO contador. Es posible anidar expresiones utilizando cualquier nmero de parntesis necesarios. Cada operador entre parntesis es interpretado como una palabra, por lo tanto es necesario separarlos con espacios ( ). Sin embargo, los parntesis abiertos, es decir, los pertenecientes a las declaraciones, no llevan espacio, aparecen justo al lado derecho de los nombres de funciones, por ejemplo: EXP(C).

*Incorrecto : Resultado = (B+EXP(C))*E/SIN(3-G). *Correcto : Pg: 12

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.

3.1.7. Elementos de Texto


Una de las ventajas de usar smbolos de texto es que la cadena de texto no esta incluida directamente en el cdigo (hard-coded) del programa. Esto significa que se puede dar mantenimiento al texto sin tener que acceder al cdigo fuente. De esta forma, un procedimiento que sea particularmente significativo para el sistema R/3 desarrollo en ABAP/4, puede existir en varios lenguajes. Hay dos formas de Asignar smbolos de texto en un programa: 1. TEXT-xxx. 2. cadena(xxx) . Las xxx son una cadena de tres caracteres. WRITE: TEXT-001, / TEXT-CIA, / 'Del 15 de Junio al 15 de julio de 1997'(FEC).

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

Se pueden traducir los textos a otros lenguajes usando la funcin Traduccin.

3.1.8. Campos del Sistema (System Fields)


ABAP/4 provee varios campos de sistema, los cuales devuelven valores predeterminados por el sistema como sera: la fecha y hora del sistema, el usuario, el cliente que se esta utilizando, el idioma, etc. Para obtener una lista de estos campos y sus definiciones, se debe teclear la palabra clave SHOW en el editor de comandos la cual muestra la estructura del nombre de tabla que se le indique a continuacin, para el caso de los campos de sistemas la tabla se llama SY todo esto en el caso de que se encuentre en el modo comando , o en el caso de estar en el modo PC se presiona el icono i, se selecciona la opcin estructura de tabla y se teclea el nombre de la tabla en este caso SY. Dentro de un programa se asignan los campos de sistema especificando la tabla y el campo: SY-nombre del campo . WRITE: Fecha actual : , SY-DATUM, Nombre del programa : , SY-REPID, Lenguaje de acceso : , SY-LANGU.

3.1.9. Declaracin SELECT


La Declaracin SELECT se usa para leer la entrada (registros) de una (base de datos) tabla. Se puede utilizar el parmetro WHERE para restringir el nmero de estradas que deben ser ledas en la tabla. El siguiente ejemplo lee exclusivamente las entradas de la tabla, donde el campo Edad tengan el valor de 26.

TABLES: Datos_Personales. Pg: 14

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

3.2. Declaraciones y Datos


3.2.1. Tipos de Datos y Atributos
Con los campos PACKED, dos dgitos son almacenados en un byte. En el ltimo byte del campo la primera mitad contiene el dgito, la otra mitad del byte contiene el signo. Un campo de tipo I es creado como un nmero binario con un rango garantizado de -2147483648 to +2147483647. Se recomienda usar para tipos de datos numricos: I : valores enteros (por ejemplo: contadores) P: problemas comerciales (nmeros decimales, grandes rangos de valores) F: problemas matemticos (grandes nmeros, doble precisin) La entrada de datos al rea de un programa ABAP/4 esta restringido a 64 KB. En la siguiente tabla se muestran los tipos de datos que utiliza ABAP/4, junto con sus respectivos atributos. Tipo Dato P I F N C D T X Significado Nmero empacado Entero Nmero con punto flotante Caracter que acepta solamente nmeros Caracter Fecha en formato YYYYMMDD Tiempo en formato HHMMSS. Hexadecimal Valor Inicial 0 0 0.000... 00...0 blank 00000000 000000 X00 Longitud estndar 8 * * 1 1 8 6 1 Longitud permitida 1-16 1-max. 1-max. 8 6 1-max

3.2.2. Declaracin de Datos


Para declarar datos es necesario utilizar la siguiente sintaxis: Data nombre_variable TYPE tipo_de_dato . DATA contador TYPE I. Recomendaciones : 1. Siempre use una letra para el primer caracter del nombre de la variable. Los restantes caracteres pueden ser letras y/o dgitos. 2. El nico caracter especial que se puede utilizar es el guin bajo ( _), cuando se especifican nombres con ms de una palabra. Si el tipo no es especficado, por omisin el campo es tratado como tipo C, en el siguiente ejemplo se define una variable denominada nombre con una longitud de 20 caracteres. DATA nombre(20).

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.

3.2.3. Declaracin de Tipos


Se utilizan las mismas convenciones de las declaracin de datos , con la condicin de sustituir la palabra DATA por TYPES. TYPES : clave TYPE I, producto(25), fecha_embarque TYPE D, monto TYPE P DECIMALS 2. Reglas para asignar nombres a los campos, son las mismas de las declaracin de datos.

3.2.4. Declaracin de Campos con los mismos atributos


El parmetro LIKE permite asignar los atributos a un campo de otro campo previamente definido.

DATA fecha_embarque LIKE SY-DATUM. Pg: 17

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

3.3. Sub - Campos


Se puede modificar el contenido de un campo realizando desplazamientos dentro del mismo cambiando su longitud, generalmente se realiza con la declaracin WRITE, en el siguiente ejemplo se busca obtener el ao de nacimiento y la clave del nombre de un campo que contiene estos datos y otros ms. DATA: rfc(11), clave_nombre LIKE rfc, ao_nacimiento(2) TYPE I.

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

3.4. Manejo de Cadenas


Las palabras claves CONCATENATE y SPLIT son usadas para concatenar y dividir cadenas. Los operadores son tratados como campos de tipo C, por lo tanto, si los campos no son de este tipo no se podr continuar con la operacin ya que el sistema no realiza la conversin para estos casos. En CONCATENATE los valores para el cdigo de retorno son: Cdigo de retorno SY-SUBRC = 0 SY-SUBRC = 4 Significado El resultado de la concatenacin cupo en el campo objetivo. El resultado de la concatenacin excede a la longitud del campo objetivo, por lo tanto solamente se transfiere la longitud especificada en el campo objetivo.

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

3.5. Declaracin de campos con PARAMETROS


La palabra clave PARAMETERS sirve para declarar campos internos. en contraste a la descripcin DATA, los campos declarados con PARAMETERS se despliegan en una pantalla especial (selection screen) en espera de los datos de entrada necesarios. PARAMETERS ofrece las mismas variantes o modificadores que la palabra clave DATA como por ejemplo: TYPE, LIKE, DECIMALS, etc. La variante DEFAULT para la palabra clave PARAMETERS sirve para asignar valores iniciales a los campos, al igual que la variante VALUE de la palabra clave DATA. PARAMETERS: fecha LIKE SY-DATUM DEFAULT SY-DATUM, codigo(4) DEFAULT '1234', zona(10). El resultado de la pantalla para el ejemplo anterior sera:

Pg: 22

Programacin en ABAP/4

3.6. Declaraciones IF, CASE, DO, WHILE, CHECK, EXIT


3.6.1. Declaracin IF
IF ENDIF IF ELSE. -procesoENDIF. IF -expresin lgica-. -procesoELSEIF -expresin lgica-. -procesoELSEIF -expresin lgica-. -procesoELSE. -procesoENDIF. Las declaraciones ELSE y ELSEIF son opcionales. Si la expresin lgica es satisfecha, la siguiente declaracin es ejecutada. La palabra clave subsecuente es ejecutada. Si la expresin lgica no es satisfecha, la parte de ELSE or ELSEIF es ejecutada. Si no hay un PALABRA CLAVE ELSE o ELSEIF, el programa continua despus del ENDIF. Se pueden utilizar tantas instrucciones ELSEIF como sean necesarias entre IF y ENDIF. PARAMETERS: fecha LIKE SY-DATUM DEFAULT SY-DATUM, codigo(4) DEFAULT '1234', zona(10). WRITE: 'Fecha del Reporte: ', fecha. IF codigo EQ '1234'. WRITE / '!! BUSQUEDA ESTANDAR !!'. ELSE. WRITE: / '!! BUSQUEDA ', codigo, ' !!'. ENDIF. WRITE: / 'Ubicacin: ', zona. -expresin lgica-. -proceso-expresin lgica-. -proceso-

Pg: 23

Programacin en ABAP/4

3.6.2. Declaracin CASE


CASE -campo-. WHEN -value-. -procesoWHEN -value2-. -procesoWHEN -value3-. -procesoWHEN OTHERS. -procesoENDCASE. Solo una de la secuencia de instrucciones es procesada. La declaracin WHEN OTHERS es opcional. Solo un valor puede seguir a la palabra clave WHEN. Este valor puede ser una literal o el nombre del campo el cual contiene el valor. PARAMETERS: fecha LIKE SY-DATUM DEFAULT SY-DATUM, codigo(4) DEFAULT '1234', zona(10). WRITE: 'Fecha del Reporte: ', fecha. CASE codigo. WHEN '1234'. WRITE / '!! BUSQUEDA ESTANDAR !!'. WHEN '9876'. WRITE / '!! BUSQUEDA VARIABLE !!'. WHEN OTHERS. WRITE: / '!! BUSQUEDA ', codigo, ' !!'. ENDCASE. WRITE: / 'Ubicacin: ', zona.

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

3.6.4. Declaracin WHILE


WHILE -expresin lgica-. -procesoENDWHILE. Mientras que la expresin lgica es satisfecha, la instruccin siguiente es ejecutada. Se pueden anidar ciclos. Se determina el nmero de ciclos con la palabra clave SY-INDEX WHILE contador 0. SUBTRACT 1 FROM contador. ENDWHILE.

3.6.5. Declaracin CHECK


WHILE contador GT 0 -procesoCHECK bandera NE SPACE. -procesoENDWHILE. -procesoCHECK -condicin-. -proceso Si se ha especificado la palabra clave CHECK en un ciclo y la expresin lgica no es satisfecha, las declaraciones en el ciclo actual no son ejecutadas y continan el proceso con el siguiente ciclo. Si una condicin CHECK en una subrutina no es satisfecha, la subrutina termina. Si hay una palabra clave CHECK fuera de un ciclo y la expresin lgica no es satisfecha, las instrucciones en el bloque de procesamiento actual no son ejecutadas.

3.6.6. Declaracin EXIT


DO -procesoIF contador GE 25. EXIT. ENDIF. -procesoENDDO. -procesoIF contador LE 24. EXIT. ENDIF. -proceso Una declaracin EXIT en un ciclo termina las iteraciones de ese ciclo. Pg: 25

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

3.7. Depuracin de programas (Debugging)


3.7.1. Activacin del modo Debugging
Existen diferentes maneras de activar el modo del depurador: 1. Comenzar el programa llamando la funcin Debugging (de la pantalla principal del editor de ABAP/4). 2. Colocando breakpoints en el programa (seleccionando el men UtilidadesBreakpointsFijar) y ejecutando el programa (seleccionando el men ProgramaEjecutar). 3. Se puede utilizar la transaccin /h y ejecutando el programa. 4. Tambin se puede acceder al modo del depurador mediante el Object Browser (Transaccin SE80), escogiendo del cuadro Lista de Objetos la opcin ProgramaVisualizar de la opcin Objetos Programa Tratar, despus se presiona el botn Test / ejecutar.

3.7.2. Modo Debugging


Estando en el modo del depurador, las lneas del programa aparecen en la parte superior de la pantalla. La prxima lnea a ser procesada es sealada por el caracter . Se puede navegar a travs del cdigo del programa usando las funciones estndar. En la parte inferior de la pantalla, se despliega el contenido de los campos. Para hacer esto, posicione el cursor en el campo y haga doble click en el.

Pg: 27

Programacin en ABAP/4

3.7.3. Principales Funciones


Funcin Paso a Paso Ejecutar Continuar Tabla Breakpoint Editor X R Significado Ejecuta la siguiente lnea. En contraste con paso a paso, ejecuta todo el proceso que pertenece a una lnea completa. Ejecuta el cdigo restante hasta encontrar el siguiente breakpoint o hasta que finalice el programa. Despliega el contenido de las tablas internas. Se deben utilizar la funciones en este men para definir los breakpoints. Activa el editor de ABAP/4 en una nueva sesin. Despliega datos en formato hexadecimal. Te permite cambiar datos cuando se est depurando.

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

3.8. Cadenas de campos (Field string)


Las cadenas de campos nos permiten como su nombre lo dice encadenar varios campos que tengan un objetivo comn con la posibilidad de tratarlos como un solo grupo cada campo en forma individual.

3.8.1. Declaracin de Cadenas de campos


Las cadenas de campos se declaran con la palabra clave DATA. Se debe, especificar el comienzo y el final de la cadena de campo con las palabras claves: BEGIN OF <nombre cadena de campo> y END OF <nombre cadena de campo >. Los sub-campos de las cadenas de campos se pueden definir como campos individuales con una longitud, tipo y un valor inicial. Tambin se puede utilizar el parmetro LIKE para tomar los atributos previamente declarados en campos internos o campos definidos en el diccionario ABAP/4. Se deben direccionar los sub-campos de una cadena de campo como se muestra a continuacin: <cadena de campo>-<nombre campo> . Puedes por supuesto, direccionar una cadena de campo en su totalidad (ejemplo: WRITE: <cadena de campo>) . Sin embargo, el campo es tratado como de tipo C, y no se pueden realizar conversiones internas en forma automtica. DATA: BEGIN OF nombre_completo, nombre LIKE P0002-VORNA, apellido_paterno LIKE P0002-NACHN, apellido_materno LIKE P0002-NAME2, END OF nombre_completo.

3.8.2. Transportacin de valores campo por campo


La palabra reservada MOVE-CORRESPONDING <f1> TO <f2> transporta los valores de campo por campo entre las estructuras de datos de ABAP/4 <f1> y <f2>. Este transporte slo es posible si los nombres de campos son idnticos . El sistema busca en <f1> Aquellos nombres de campos que tambin ocurran en <f2> y entonces se generan las siguientes declaraciones para todos los campos coincidentes en forma interna: MOVE <f1>-<nombre campo> TO <f2>-<nombre del campo>. Los otros campos que no coincidan permanecen sin cambio. Si la estructura de datos <f1> y <f2> son los mismos y todos los sub-campos coinciden en trminos de secuencias y atributos, tambin se puede usar la declaracin: MOVE <f1> TO <f2> la cual no requiere mucho tiempo de ejecucin. La palabra reservada CLEAR <f> asigna el valor inicial correspondiente para todos los sub-campos de <f>, dependiendo de su tipo. DATA: BEGIN OF nombre_completo, Pg: 30

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.

El resultado de la pantalla sera: Jaime Trujillo Arrieta

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

3.9. Tablas Internas


3.9.1. Declaracin de Tablas Internas (con lnea de encabezado)
DATA : BEGIN OF <tab> OCCURS <n> - declaraciones END OF <tab>.

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.

3.9.2. Llenado de Tablas Internas (con lnea de encabezado)


APPEND <itab>. La palabra clave APPEND <itab> almacena el contenido de la lnea del encabezado al final de una tabla interna (<itab>). Las declaraciones APPEND <itab> SORTED BY <campo> permite generar un lista ordenada. Cada vez que se agrega una nueva entrada con esta declaracin, la tabla se re-ordena por el campo <campo> en orden descendente. Si la tabla est llena y hay nuevas entradas para ser agregadas y ordenadas, la entrada o entradas al final de la tablas son forzadas. Si no deseas llenar una tabla interna, de su lnea de encabezado, pero si de una estructura idntica ya sea una cadena de campos <wa>, usa la declaracin: APPEND <wa> TO <itab>. Esto es ms rpido que <itab> = <wa. APPEND <itab>. Pg: 33

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.

3.9.3. Declaracin COLLECT


COLLECT <itab>. La declaracin COLLECT suma los contenidos de la lnea de encabezado de la tabla interna, a la tabla, como si fuera una nueva entrada, o lo suma a una entrada existente que sea del mismo tipo. ABAP/4 busca en la tabla una entrada que coincida con el contenido de la lnea del encabezado en todos los campos de tipo P, I, F. Si se encuentran como entrada, este suma todos los campos tipo P, I y F en la lnea de encabezado para el campo correspondiente en la entrada de tabla. En caso de que la entrada de la tabla no coincida, los contenidos del encabezado de lnea son agregados al final de la tabla como una entrada nueva. La siguiente tabla se encuentra en el sistema con el nombre: UKRST N certif 110 123 124 125 130 135 136 139 140 144 1223 N depto 0020 0020 0020 0020 0020 0020 0020 0020 0020 0020 0002 N semin. 0000000001 0000000002 0000000002 0000000002 0000000002 0000000002 0000000002 0000000002 0000000002 0000000002 0000000001 N inscr 16180322 200 16156946 201 17985761 10221 11822283 14328369 20392133 21779483 15606811 Cal. 1.0 4.0 4.0 2.0 2.0 3.0 3.0 2.0 2.0 1.0 1.0

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.

3.9.4. Procesamiento (con lnea de encabezado)


LOOP AT <I tab> ENDLOOP. El procesamiento de una tabla interna se realiza a travs de la declaracin del ciclo LOOP AT ... ENDLOOP. Cada vez que el proceso pasa a travs de un ciclo, el sistema coloca la siguiente entrada en la lnea de encabezado. Si se direcciona un campo de una tabla en el programa, el valor del campo es tomado de la lnea del encabezado. Con la palabra clave WHERE, se puede especificar una expresin lgica. Si una entrada de tabla no satisface la expresin lgica, el ciclo no es procesado y el campo de sistema SY-SUBRC es fijado a un valor diferente de 0 (cero). Sin embargo, la tabla es leda en su totalidad. Cuando una tabla interna est siendo leda, el campo de sistema SY-TABIX contiene el valor ndice de la entrada de la tabla actual en el encabezado de lnea. Al ejemplo anterior le agregamos las siguientes lneas al final del cdigo: LOOP AT seminarios. WRITE: / ' Num. de Seminario: ', seminarios-semnr, seminarios-note. ENDLOOP. El resultado de la pantalla seria: Num. de Seminario: 0000000001 Num. de Seminario: 0000000002 2.0 23.0

Pg: 35

Programacin en ABAP/4

3.9.5. Declaracin SORT


SORT <nombre tabla>. Para ordenar una tabla interna, se utiliza la declaracin SORT, si no se especifica un criterio de ordenamiento, la tabla es ordenada en todos sus campos, con excepcin de los datos tipo P, I F, en orden ascendente de su declaracin. Si se le agrega la palabra clave BY <nombre de campo> y posteriormente la palabra clave ASCENDING DESCENDING, permite restringir el ordenamiento de campos particulares y determinar la secuencia de ordenamiento. Utilizando el ejemplo anterior se le agrega la siguiente lnea de cdigo para ordenar el resultado por nmero de seminario (SEMNR) en forma descendente antes del ciclo de lectura / escritura de los seminarios: SORT seminarios BY SEMNR DESCENDING. LOOP AT seminarios. WRITE: / ' Num. de Seminario: ', seminarios-semnr, seminarios-note. ENDLOOP. El resultado de la pantalla seria: Num. de Seminario: 0000000002 Num. de Seminario: 0000000001 23.0 2.0

3.9.6. Lectura de Entradas (con lnea de encabezado)


READ TABLE <itab> WITH KEY -criterio Se puede utilizar la palabra reservada READ TABLE<itab> WITH KEY.para leer una entrada especifica. Despus del acceso ledo, la entrada de tabla se mantiene en la lnea de encabezado. Si el acceso fue exitoso, el valor del cdigo que regresa al campo de sistema SY-SUBRC es 0 (cero). El parmetro KEY debe ser vlido para el argumento buscado. ABAP/4 compara el comienzo de cada entrada de tabla con el argumento buscado, el cual es usualmente un cadena de campo. Si la tabla interna est ordenada por el argumento buscado, se puede utilizar la palabra clave BINARY SEARCH. Est ejecuta una bsqueda binaria para la entrada y es ms eficiente que una bsqueda ordinaria. Si la tabla interna contiene ms de una lnea idntica en el argumento, el comando READ regresa a la primera entrada (an con la palabra clave BINARY SEARCH). En el siguiente ejemplo se transfieren los datos de la tabla UKRST a una tabla interna denominada seminarios la cual cuenta con la misma estructura, con la finalidad de buscar una entrada especifica.

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

3.9.7. Cambios (con lnea de encabezado)


INSERT <itab> INDEX <i>. MODIFY <itab> INDEX <i>. DELETE <itab> INDEX <i>. La palabra clave MODIFY <tab> INDEX <i> sobre escribe la entrada de la tabla <i> con el contenido de la lnea de encabezado. La entrada <i> ya debe existir. La palabra clave INSERT <tab> INDEX <I> usa el contenido de la lnea de encabezado para generar una nueva entrada de tabla antes de la entrada <i>. Si la tabla <i> tiene -1 entradas, el contenido de la lnea de encabezado es agregado a la tabla. La palabra clave DELETE <tab> INDEX <i> borra la entrada de la tabla <i>. Varias adiciones estn disponibles con la palabra clave DELETE (ver lo correspondiente a la palabra clave LOOP) estos incluyen : WHERE <condicin>. En este caso, la palabra clave DELETE es aplicada solo en las entradas que satisfacen la condicin. ...FROM <n1> TO <n2> Aqu, todas las entradas de <n1> a <n2> son borradas, incluyendo los lmites ms altos y bajos del rango. Si se especifica solo FROM solo TO en la palabra clave DELETE , todas las entradas de <n1> finales son borradas, o todas las que comienzan con <n2>. Al ejemplo anterior se le agregan las siguientes lneas de cdigo, con la finalidad de modificar un registro, agregar uno nuevo y eliminarlo. MOVE '8' TO seminarios-NOTE. MODIFY seminarios INDEX SY-TABIX. IF SY-SUBRC NE 0. WRITE: '!! No se encontr ninguna entrada con la llave 0000000125 !!'. ENDIF. LOOP AT seminarios. WRITE: / ' Num. de Certificado: ', seminarios-SCHNR, 'Nota: ', seminarios-NOTE. ENDLOOP. Pg: 37

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.

3.9.8. Eliminacin (con lnea de encabezado)


CLEAR <itab> REFRESH <itab> FREE <itab> La palabra clave CLEAR <itab> inicializa cada campo de la lnea de encabezado de la una tabla interna de acuerdo a su tipo. La palabra clave REFRESH <itab> borra todas las entradas de la tabla. El espacio de memoria usado por la tabla no se libera y la lnea de encabezado permanece sin cambio. La palabra clave FREE <itab> hace lo mismo que REFRESH a excepcin de que, si libera el espacio de memoria utilizado por la tabla.

3.9.9. Informacin de tablas internas (con lnea de encabezado)


DESCRIBE TABLE <tab> LINES <i> DESCRIBE TABLE <tab> OCCURS <i> Se puede utilizar la palabra clave DESCRIBE TABLE para obtener informacin acerca de una tabla interna. Pg: 38

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.

Declaracin (Sin lnea de encabezado)

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.

Lectura de Entradas (Sin lnea de encabezado)

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

3.10. Estructuras Compuestas


Usar tablas internas SIN lnea de encabezado permite construir tablas internas multi-dimensionales, de las cuales una parte de est es construida de componentes de otra tabla interna. En el siguiente ejemplo, se utilizan dos tablas existentes en el sistema la primera denominada: UKURS, con la siguiente informacin: N depto. 0002 0002 0004 0004 0005 0006 0006 0006 0008 N curso 0000000001 0000000002 0000000001 0000000002 0000000001 0000000001 0000000002 0000000003 0000000001 Descripcin Soziale Randgruppen Geschichte des Sozialismus Didaktik I Mathematikunterricht Schimmen Mikrokonomie I Mikrokonomie II Makrokonomie Strafprozeordnung Profesor 2000 2000 4000 4000 2300 2120 2120 2120 4100

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

La palabra clave TYPE define la estructura tipo denominada cursos. Pg: 41

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 .

"Nmero de departamento "Nmero de curso "Descripcin del curso "Clave Profesor.

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. Pantallas de Seleccin


La finalidad de crear una pantalla de seleccin para un reporte, es que el usuario pueda simplemente teclear las opciones del mismo, el listado resultante contiene exclusivamente los datos que correspondan a los valores seleccionados por el usuario.

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.

Otros operadores relacionales

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.

Declaracin de campos con parmetros

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. Criterios de Bsquedas (ABAP/4 Open SQL)


Para leer datos de tablas de base de datos, se usa la palabra clave SELECT . ABAP/4 contiene instrucciones similares a SQL estndar, las cuales se pueden utilizar para acceder a la base de datos. ABAP/4 Open SQL tiene las siguientes caractersticas : La sintaxis de ABAP/4 Open SQL corresponde a la sintaxis de SQL estndar. ABAP/4 Open SQL es un subconjunto de SQL estndar. ABAP/4 Open SQL contiene formas pequeas de SAP. Se utiliza la palabra clave SELECT para evaluar tablas de base de datos a travs de la interfase de ABAP/4 Open SQL. Las tablas deben ser definidas en el Repositorio de ABAP/4 y deben tener una llave primaria. SELECT no ejecuta ningn tipo de validacin de autorizaciones. La clusula SELECT tiene 3 variantes, las cuales son descritas en este captulo. Estas incluyen: Lectura de todos los datos de una sola entrada Lectura de todos los datos de varias entradas Lectura de datos de columnas especficas.

3.12.1.

Bsqueda nica Single Access

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.

Bsqueda de varias entradas Several Entries

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.

Bsqueda de una sola columna de datos Single Column

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.

Las Funciones Agregadas

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.

Lectura de Datos Componente por Componente

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.

Nombre de la tabla en forma dinmica

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.

Clusula WHERE en forma dinmica

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.

Lectura tabla de base de datos a una tabla interna

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

100 WITH HEADER

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


Call: Calculate loss
: :

Internal subroutine: Calculate loss

PROGRAMA RSAAA10C. External Subroutine


Call: Calculate loss
: :

PROGRAMA RSAAA10D.
External subroutine: Calculate loss

PROGRAMA RSAAA10E. Function Module


Call: Calculate loss
: :

ABAP/4 FUNCTION LIBRARY Function Module: Calculate loss

Pg: 58

Programacin en ABAP/4

3.13.1.

Definicin y llamadas de subrutinas

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

3.14. Datos Globales y locales


En una subrutina, puedes definir datos locales. Puedes usar la palabra clave DATA para crear estructuras internas con espacio de memoria cuando se llama subrutina. Las estructuras definidas con la palabra clave TABLES son siempre globales. Si deseas utilizar el rea de trabajo local en una subrutina, puedes definirlos utilizando la palabra clave LOCAL.

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

3.15. Paso de valores de parmetros actuales a formales


Cuando se llama una subrutina, el programa principal puede pasar datos a la subrutina por interfase. Cualquier dato determinado en la subrutina est disponible a la llamada del programa. El programa y la subrutina pueden comunicarse a travs de parmetros, Cuando se define una subrutina, especificas parmetros formales. Cuando se llama una subrutina, especificas los parmetros actuales. La asignacin de parmetros actuales y formales depende de su posicin . Dado que cada parmetro formal debe ser asignado a un parmetro actual, ah deben estar tanto parmetros actuales como parmetros formales. Hay dos tipos de parmetros - parmetros de entrada y parmetros de salida. Tu defines parmetros de entrada como llamadas de valor, y salida de parmetros como llamada de referencia o llamados de valor y resultado.

PROGRAM RSAAA10B PERFORM calculate_loss Actual Parameters

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

Call by value and result

3.15.1.

Tipos de paso de parmetros

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 value and result

a1 f1 Call by reference

3.15.2.

Pasando parmetros con tipos

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

Call by value and result

3.15.3.

Verificacin de Paso de parmetros con tipos

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 TABLE TYPE C, N, P, o X

TYPE D, F, I, o T

EJEMPLO Verificacin de paso de parmetros con tipo


PROGRAM RSAAA10C. DATA: REVENUE ... . . PERFORM <name> USING a1 a2 a3 a4 a5. . . . FORM <name> USING VALUE(f1) TYPE P VALUE(f2) TYPE I VALUE(f3) TYPE P f4 LIKE REVENUE CHANGING VALUE(f5) TYPE P. <statements> ENDFORM. a1 a2 a3 a4 a5

f1

f2

f3

f4

f5

Call by value

Call by reference

Call by value and result

3.15.4.

Paso de Estructuras como parmetros

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.

Paso de Tablas Internas como parmetros

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

TAB []. TAB.

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

3.16. Subrutinas Externas


El reporte RSAAA10B es llamado dinmicamente a tiempo de ejecucin. Los programas llamados pertenecen al rea de trabajo de ABAP/4Dictionary tables (TABLES). Como con subrutinas , puedes asignar tipos a los parmetros formales. Con subrutinas externas, las incompatibilidades de tipo provocan un error en tiempo de ejecucin. EJEMPLO PERFORM<>(<>)USING ... . REPORT RSAAA10F. TABLES: SFLIGHT, SPFLI. . . . PERFORM calculate_loss (RSAAA10B). . . . REPORT RSAAA10B. TABLES: SFLIGHT. . . . FORM calculate_loss. . . . ENDFORM.

Pg: 67

Programacin en ABAP/4

3.17. Mdulos de funcin


Los mdulos de funcin estn clasificados en grupos de funciones y almacenados en la Function Library. Un grupo de funciones contienen funciones las cuales tienen propsitos similares (por ejem. calendar functions) o funciones con los mismos datos basis (1ra funcin llena la tabla interna, 2da. funcin edita la tabla interna, etc.) Puedes asignar un grupo de funcin a una aplicacin particular (FI, HR) o sealarlo para uso general (*).

Function Library
Using function modules

FM group: FIBU FM_01 ...

Maintaining function modules


FM_02 Interface Import Export Tables Exceptions Program Documentation Administration

FM_02 ...

PROGRAM ... ZIBU TABLES ...

FM group: FM_03 ... FM_04 ...

CALL FUNCTION FM_02 EXPORTING ... IMPORTING ...

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

Function Group Aplication Short text

Z_DEM

F4

Pg: 69

Programacin en ABAP/4

3.18. Manejo de Funciones

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.

Documentacin y llamado de funciones

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

Documentation for CALCULATE_REVANUE_LOSS Parameter name Short text Parameters type


PAYMENTSUM SEATSOCC PRICE LOSS REVENUE Earned Revenue Occupied seats Price per passanger Loss Revenue I I I E E

REPORT TABLES: DATA:

RSAAA10G. SFLIGHT. loss like sflight-paymentsum, revenue like .... CALCULATE_REVENUE_LOSS PAYMENTSUM = SFLIGHT-PAYMENTSUM SEATSOCC = SFLIGHTSEATSOCC PRICE = SFLIGHT-PRICE IMPORTING LOSS REVENUE = = LOSS REVENUE

CALL FUNCTION EXPORTING

Pg: 71

Programacin en ABAP/4

3.19. Descripcin de la interfase


Los parmetros exportados son pasados por valor (por ejem. una copia es pasada con el contenidos del campo) o por referencia. Los parmetros de EXPORT, la especificacin de parmetros actuales son opcional. Los parmetros de IMPORT son pasados por valor (por ejem. una copia es pasada con el contenidos de los campos) o por referencia. Los parmetros import pueden contener valores por omisin. Por default los valores pueden ser literales, constantes numricas, campos de sistema (SY-DATUM, SYLANGU) o el campo predefinido SPACE. Cuando pasan parmetros, puedes omitir el parmetro actual solo si hay un valor definido o el parmetro import es sealado como opcional. Los parmetros Import con valores definidos son siempre opcionales. Si especificas un campo de referencia del Diccionario ABAP/4 para un parmetro, el sistema verifica el tipo y la longitud de el parmetro actual. Si el campo de referencia no es verificado, el sistema convierte los parmetros actuales de acuerdo a las convenciones de ABAP/4 y no ejecuta ninguna verificacin.
REPORT TABLES: DATA: RSAAA10G. SFLIGHT. loss like sflight-paymentsum, revenue like .... CALCULATE_REVENUE_LOSS PAYMENTSUM = SFLIGHT-PAYMENTSUM SEATSOCC = SFLIGHT-SEATSOCC PRICE = SFLIGHT-PRICE IMPORTING LOSS REVENUE = LOSS = REVENUE

CALL FUNCTION

EXPORTING

Pg: 72

Programacin en ABAP/4

3.20. Parmetro Changing


El parmetro CHANGING contiene campos de cadenas de campos las cuales son pasadas del programa a el mdulo de funcin cuando el mdulo de funcin es llamado, y de el mdulo de funcin regresa al llamado de programa. Los parmetros CHANGING Import parameters son pasados por valor (i.e. una copia del contenido de los campos) o por referencia. Los parmetros CHANGING deben contener siempre valores cuando son llamados. Cuando pasan los parmetros, los parmetros actuales pueden ser omitidos solo si hay un valor definido o el parmetro CHANGING sealado como opcional.
REPORT TABLES: DATA: RSAAA10G. SFLIGHT. loss like sflight-paymentsum, revenue like .... ...........

CALL FUNCTION EXPORTING

. . . . . . IMPORTING . . . . . . CHANGING f1 = a1

Pg: 73

Programacin en ABAP/4

3.21. Paso de tablas internas


Cuando las tablas internas son pasadas, no son copiadas (call by reference). Puedes asignar tablas internas a estructuras de referencia. Estas estructuras deben ser objetos de ABAP/4 Dictionary. El tipo y la longitud verificadas sean ejecutadas por los parmetros actuales en base de esta asignacin. Como todos los parmetros, las tablas pueden ser marcadas como opcionales.
REPORT TABLES: DATA: RSAAA10G. SFLIGHT. ITAB like BCAXX OCURRS 10 WITH HEADERS LINE. FILL_SEATTAB YEAR = TABLES SEATTAB = ITAB YEAR

CALL FUNCTION EXPORTING

Pg: 74

Programacin en ABAP/4

3.22. Manejo de excepciones


Cuando se crean mdulos de funciones, puedes definir excepciones. El llamado de programa determina cules excepciones se manejan. Puedes asignar el mismo nmero de error a varias excepciones. La clusula OTHERS cubre todas las excepciones no especificadas explcitamente. Si ocurre una excepcin durante la ejecucin de un mdulo de funcin, la excepcin tambin es manejada en el mdulo de funcin por si misma. (vgr. sale un mensaje de error), o el control regresa inmediatamente al llamado del programa . Esto ltimo es solo posible si la excepcin es especificada en el parmetro EXCEPTIONS de la llamada. Puedes direccionar la excepcin general ERROR_MESSAGE para cualquier mdulo de funcin: Un mensaje de error fue desplegado en el mdulo de funcin. T defines los nombres de excepciones en la interfase de tu mdulo de funcin. En el programa, se produce una excepcin con los siguientes instrucciones: MESSAGE ... RAISI NG<excepcin>. El efecto de estas instrucciones dependen de si la llamada de programa es manejable la excepcin (raised) por si misma o no. Si el llamado de programa es manejable la excepcin, regresa el control inmediatamente a el llamado de programa sin terminar y sin salir mensaje. En este caso, el parmetro EXPORT estn siempre fijado a su valor. Si la excepcin no es manejable por el llamado del programa. El mdulo de funcin termina despus la palabra clave RAISE. En el caso de MESSAGE con RAISING, el mensaje apropiado esta fuera. Ejemplo 1:
REPORT RSAAA10H. CALL FUNCTION FILL_SEATAB EXPORTING YEAR TABLES SEATAB EXCEPTIONS NO_ENTRY OTHERS = ITAB = 01 = 02. = YEAR

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

3.23. Ambiente de pruebas


Cuando has creado un mdulo de funcin, puedes aprobarlo en el ambiente de pruebas. Puedes especificar entrada de valores para el parmetro IMPORT en una plantilla de entrada. El sistema transporta el resultado a los parmetros EXPORT y entonces despliega una lista. Si una excepcin ocurre, la excepcin raise es marcada. El tiempo requerido para ejecutar el mdulo de funcin es desplegado en micro segundos. La misma restriccin aplica a los valores calculados aqu como en la funcin Runtime analysis. Debes tambin repetir la prueba con el mismo dato varias veces. Puedes almacenar datos de prueba en un directorio de prueba de datos. Puedes probar mdulos de funciones con parmetros de tabla dentro del ambiente de prueba. Puedes crear secuencia de pruebas.

Function module

Z_FREESEAT value 100 200 value 100 Number of lines

Import parameter SEATSOCC SEATSMAX Export parameter SEATFREE Tables

Pg: 77

Programacin en ABAP/4

3.24. Organizacin de un programa


Creas y mantienes mdulos de funciones con la funcin Function Library o en el Object Browser. ABAP/4 maneja los diferentes programas y tablas. T acceso incluye programas individuales solo en casos excepcionales (subrutinas, mdulos de dilogo). Cuando se crea un nuevo mdulo de funcin, ABAP/4 crea otro programa include y determina el nombre (nmero) del programa.
L<gr>TOP SAPL <gr>
System-defined include programs

FUNCTION-POOL <gr> MESSAGE-ID ZZ. DATA: GLOBAL DATA.

INCLUDE L<gr>TOP. INCLUDE L<gr>UXX


User-defined include programs

L<gr>UXX. INCLUDE L<gr>U01. INCLUDE L<gr>U02.

L<gr>U01. FUNCTION FA. L<gr>U02. FUNCTION FB.

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

ABAP/4 Program L<gr>F01.

Call

FORM SUB1 USING . . . . . . ENDFORM . . .

FUNCTION . . . . . . PERFORM SUB1 USING . . . . . . ENDFUNCTION

Pg: 79

Programacin en ABAP/4

3.26. Datos globales / memoria local


Puedes usar la funcin Global data para crear campos y tablas internas que quieras estn disponibles como datos globales para todos los mdulos de funcin y subrutinas en un grupo de funciones. El rea de trabajo de la tabla (TABLES) son siempre globales. Los campos locales de un mdulo de funcin los cuales declaraste en el programa de mdulo de funcin son inicializados cada vez que el mdulo de funcin es llamado. Los campos globales son inicializados cuando un mdulo de funcin perteneciente a un grupo de funcin particular es llamado por vez primera. Cuando este mdulo de funcin u otros mdulos de funciones en el mismo grupo son llamados otra vez, los datos globales disponibles contienen los valores de la ltima llamada. Usando datos globales te permite implementar memoria local para un grupo de funciones.

Global Data

L<gr>TOP FUNCTION-POOL <gr>. DATA: X. TABLES: . . . .

Program FUNCTION . . . . DATA: . . . . MOVE X TO ... . ENDFUNCTION.

Subroutine L <gr> F01. FORM SUB1 USING . . . DATA: . . . . MOVE ... TO X. ENDFORM.

Pg: 80

Programacin en ABAP/4

EJERCICIOS: 1. Nombre del Reporte: ##: ZBCA##J1. Nmero de Grupo.

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

3.27. Generacin de Reportes


Un reporte ABAP/4 es un programa el cual lee datos de bases de datos, ordena los datos de acuerdo a cierto criterio y salidas de datos en forma de una lista en la pantalla. Para generar una lista, Puedes usar crear una consulta con ABAP/4 Query o escribir tu propio reporte ABAP/4. ABAP/4 Query es una herramienta muy amistosa la cual te permite definir el layout (una lista) sin ningn conocimiento de programacin. Cuando se programa en ABAP/4 report, puedes usar todas las facilidades disponibles en el lenguaje de programacin para evaluar datos complejos. Las consultas y reportes usan bases de datos lgicas para recuperar datos.

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

1 REPORT . . . TABLES: . . . SELECT . . . SELECT . . . PROCESSING ENDSELECT ENDSELECT

2 LOGICAL DATABASE TABLES: . . . SELECT . . . SELECT . . . . . . ENDSELECT. ENDSELECT.

REPORT . . . TABLES: . . . GET PROCESSING

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

EVENTOS UTILIZADOS CON BASE DE DATOS LOGICAS

INITIALIZATION. AT SELECTION-SCREEN OUTPUT. AT SELECTION-SCREEN. START-OF-SELECTION. GET . . . . END-OF-SELECTION.

EVENTOS UTILIZADOS CON LISTAS

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.

AT PFxx . AT USER-COMMAND. TOP-OF-PAGE DURING LINE-SELECTION.

3.27.4.

Panormica de Reportes Interactivos

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.

Basic list REPORT RSAAA11A. TABLES: SPFLI. SELECT-OPTIONS: SCARRID . . .

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

Con 0400 0402 3577

from to FKT NY FKT NY ROM FKT

departure 10:10:00 13:30:00 07:05:00

Secondary list

You have choosen the connection LH 0402

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

Con 0400 0402 3577

from to FKT NY FKT NY ROM FKT

departure 10:10:00 13:30:00 07:05:00

HIDE area . Line SPFLI-CARRID SPFLI-CONNID 1 2 ... 11 LH LH LH 0400 0402 3577

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.

Manipulacin de los Mensajes del Usuario


3.27.8.1. Panormica

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

Programacin en ABAP/4 3.27.8.2. Sintaxis

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

<field 1> <field 2> <field 3> <field 4> .

3.27.8.3. Hay 6 tipos de mensajes : A X E Abend Exit Error

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.

ABEND Function call

ERROR Function call

Selection Screen

Selection Screen

A message X message Restart

E message New input required

Pg: 90

Programacin en ABAP/4
WARNING Function call INFORMATION Function call SUCCESS Function call

Selection Screen

Selection Screen

Selection Screen

W message New input possible

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

ZBCA##k1. Nmero de grupo.

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

2. Nombre del reporte: ##: Tarea:

ZBCA##k2. Nmero de grupo.

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