174

Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

  • Upload
    others

  • View
    23

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta
Page 2: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Indice1. OBJETIVOS...........................................................................................................6

2. EXPECTATIVAS....................................................................................................7

3. CONTENIDO..........................................................................................................93.1. Conceptos Generales.........................................................................................9

3.1.1. Arquitectura.....................................................................................................93.1.2. Atributos de un programa................................................................................93.1.3. Estructura de un programa............................................................................133.1.4. El Editor ABAP/4............................................................................................153.1.5. Sintaxis..........................................................................................................153.1.6. Declaración “WRITE”.....................................................................................163.1.7. Operadores Relacionales..............................................................................173.1.8. Expresiones Aritméticas................................................................................193.1.9. Elementos de Texto.......................................................................................203.1.10. Campos del Sistema (System Fields).......................................................203.1.11. Declaración “SELECT”...............................................................................21

3.2. Declaraciones y Datos......................................................................................233.2.1. Tipos de Datos y Atributos.............................................................................233.2.2. Constantes.....................................................................................................233.2.3. Declaración de Datos....................................................................................243.2.4. Declaración de Tipos.....................................................................................253.2.5. Declaración de Campos con los mismos atributos........................................26

3.3. Sub - Campos...................................................................................................273.4. Manejo de Cadenas..........................................................................................283.5. Declaración de campos con PARAMETROS....................................................313.6. Declaraciones “IF”, “CASE”, “DO”, “WHILE”, “CHECK”, “EXIT”........................32

3.6.1. Declaración “IF”.............................................................................................323.6.2. Declaración “CASE”.......................................................................................333.6.3. Declaración “DO”...........................................................................................343.6.4. Declaración “WHILE”.....................................................................................343.6.5. Declaración “CHECK”....................................................................................353.6.6. Declaración “EXIT”........................................................................................35

3.7. Depuración de programas (“Debugging”).........................................................363.7.1. Activación del modo “Debugging”..................................................................363.7.2. Modo “Debugging”.........................................................................................363.7.3. Principales Funciones....................................................................................373.7.4. Breakpoints....................................................................................................37

3.8. Cadenas de campos (Field string)....................................................................383.8.1. Declaración de Cadenas de campos.............................................................383.8.2. Transportación de valores campo por campo...............................................39

3.9. Tablas Internas.................................................................................................413.9.1. Declaración de Tablas Internas (con línea de encabezado).........................41

Pág: 2

Page 3: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.9.2. Llenado de Tablas Internas (con línea de encabezado)...............................423.9.3. Declaración “COLLECT”................................................................................443.9.4. Procesamiento (con línea de encabezado)...................................................453.9.5. Declaración “SORT”......................................................................................463.9.6. Clasificación de tablas internas y cortes de listas.........................................473.9.7. Lectura de Entradas (con línea de encabezado)...........................................483.9.8. Cambios (con línea de encabezado).............................................................513.9.9. Eliminación (con línea de encabezado).........................................................523.9.10. Información de tablas internas (con linea de encabezado)........................533.9.11. Declaración (Sin línea de encabezado).....................................................533.9.12. Llenado de tablas internas (Sin línea de encabezado)..............................543.9.13. Lectura de Entradas (Sin línea de encabezado)........................................54

3.10. Estructuras Compuestas...................................................................................563.11. Pantallas de Selección......................................................................................59

3.11.1. Opciones de Selección...............................................................................593.11.2. Estructura...................................................................................................613.11.3. Otros operadores relacionales...................................................................613.11.4. Declaración de campos con parámetros....................................................62

3.12. Criterios de Busquedas (“ABAP/4 Open SQL”)................................................633.12.1. Busqueda unica “Single Access”................................................................643.12.2. Busqueda de varias entradas “Several Entries”.........................................653.12.3. Busqueda de una sola columna de datos “Single Column”.......................653.12.4. Las Funciones Agregadas..........................................................................653.12.5. Lectura de Datos Componente por Componente.......................................663.12.6. Rango de selección....................................................................................673.12.7. Patrones de selección................................................................................673.12.8. Selección dentro de un conjunto de valores..............................................683.12.9. Con operador IN ( en tablas internas ).......................................................683.12.10. Nombre de la tabla en forma dinámica......................................................693.12.11. Cláusula “WHERE” en forma dinámica......................................................703.12.12. Lectura de tablas de base de datos dentro de una tabla interna...............713.12.13. Ordenamiento de selección........................................................................713.12.14. Selección para todas las entradas a la tabla..............................................723.12.15. Agrupación de selección............................................................................72

3.13. Modularización..................................................................................................743.13.1. Definición y llamadas de subrutinas...........................................................75

3.14. Datos Globales y locales...................................................................................763.15. Paso de valores de parámetros actuales a formales........................................77

3.15.1. Tipos de paso de parámetros.....................................................................773.15.2. Pasando parámetros con tipos...................................................................783.15.3. Verificación de Paso de parámetros con tipos...........................................793.15.4. Paso de Estructuras como parámetros......................................................803.15.5. Paso de Tablas Internas como parámetros...............................................81

3.16. Subrutinas Externas..........................................................................................823.17. Modulos de función...........................................................................................83

3.17.1. Creación.....................................................................................................83

Pág: 3

Page 4: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________3.18. Manejo de Funciones........................................................................................85

3.18.1. Estructura...................................................................................................853.18.2. Documentación y llamado de funciones.....................................................86

3.19. Descripción de la interfase................................................................................873.20. Parámetro “Changing”......................................................................................883.21. Paso de tablas internas....................................................................................893.22. Manejo de excepciones....................................................................................903.23. Ambiente de pruebas........................................................................................923.24. Organización de un programa..........................................................................933.25. Subrutinas.........................................................................................................943.26. Datos globales / memoria local.........................................................................953.27. Generación de Reportes...................................................................................963.28. Bases de Datos Lógicas...................................................................................97

3.28.1. Visión General: Accesos a la Base de Datos............................................973.28.2. Acceso a Base de Datos vía Base de Datos Lógica..................................983.28.3. Leyendo con Manejador de Reportes........................................................983.28.4. Leyendo información..................................................................................993.28.5. Escenarios ( vistas ).................................................................................1003.28.6. Estructura de una Base de Datos Lógica.................................................1003.28.7. Obtener datos usando una Base de Datos Lógica...................................1013.28.8. Eventos.....................................................................................................1033.28.9. Declaración STOP....................................................................................1033.28.10. Reporte y Programa de Base de Datos...................................................1043.28.11. Eventos en conexión con Bases de Datos Lógicas..................................1053.28.12. Pantalla de selección Especificación - Reporte I......................................1063.28.13. Pantalla de selección Especificación - Reporte II.....................................1063.28.14. Selección de pantalla: Selecciones dinámicas.........................................1073.28.15. La Función de Base de Datos Lógica......................................................1073.28.16. Definicion de estructura............................................................................1083.28.17. Ejemplo: DB programa y selección..........................................................108

3.29. Listas...................................................................................................................1103.29.1. Introducción formato de listas..................................................................1103.29.2. Formatos y opciones del estatuto WRITE................................................110

3.29.2.1.Opciones de formato......................................................................................1113.29.3. Atributos de salida....................................................................................1123.29.4. Atributos de salida de campo...................................................................1133.29.5. Símbolos e Iconos en Listas.....................................................................1133.29.6. Encabezado de página: Elementos de Texto...........................................1143.26.7. Manejando encabezados de listas en reportes........................................1153.29.8. Otros estatutos para diseñar listas...........................................................115

3.30. Pantallas de selección....................................................................................1173.30.1. Especificación de Selecciones en reporte................................................1173.30.2. Validando la selección dentro de un reporte............................................1173.30.3. Defaults para la pantalla de selección......................................................1183.30.4. Parametros como checkboxes.................................................................1193.30.5. Parametros como radio buttons...............................................................119

Pág: 4

Page 5: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.30.6. Diseño de la pantalla de selección I.........................................................1203.30.7. Diseño de la pantalla de selección II........................................................1213.30.8. Verificar entrada en la pantalla de selección............................................121

3.31. Reportes Interactivos......................................................................................1233.31.1. Introducción..............................................................................................1233.31.2. Eventos interactivos.................................................................................1233.31.3. Selección de línea....................................................................................1243.31.4. Area “HIDE”..............................................................................................1253.31.5. Validación.................................................................................................1253.31.6. Campos de sistema..................................................................................1263.31.7. Manipulación de los Mensajes del Usuario..............................................127

3.31.7.1.Panorámica.....................................................................................................1273.31.7.2.Sintaxis...........................................................................................................1273.31.7.3.Clasificación....................................................................................................128

3.32. Menu Painter.......................................................................................................1313.32.1. Introducción..............................................................................................1313.32.2. Activando el GUI status y el Título...........................................................1313.32.3. Evento AT USER-COMMAND..................................................................132

3.33. Manejo de reportes, leyendo y cambiando listas............................................1333.33.1. Leyendo líneas en una lista I....................................................................1333.33.2. Selección múltiple de líneas I - Generando la lista básica.......................1343.33.3. Selección múltiple de líneas II--- Leyendo la lista básica.........................1353.33.4. Declaración READ LINE...........................................................................1353.33.5. Cambiando lineas en una lista.................................................................1373.33.6. Declaracion MODIFY CURRENT LINE - MODIFY LINE..........................137

3.34. Ventanas.........................................................................................................1393.34.1. El estatuto WINDOW................................................................................139

Pág: 5

Page 6: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

1. Objetivos

Proporcionar los conocimientos básicos del lenguaje de programación ABAP/4, así como la correcta estructuración del código (Modularización) en la creación de un programa.

Pág: 6

Page 7: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

2. Expectativas

Al finalizar este capitulo el participante podrá crear, ejecutar, revisar y corregir sus propios programas básicos, accesando tablas y/o estructuras así como el uso de los criterios de búsquedas (SQL).

Pág: 7

Page 8: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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

específicos así como para resaltar las aplicaciones SAP proporcionadas por R/3.

ABAP/4Procesador

ModeladorDe Datos

ABAP/4Diccionario

ABAP/4Editor

Reportes ScreenPainter

ScreenMenu

Modulo deFunciones

R/3Repositorio

Navegación

ABAP

/4 O

rgan

izad

or

Sistema de Transporte

Interfase RepositorioLlam

ada de Función Remota

Depurador TrazadoPruebas

3.1.2. Atributos de un programaLo primero que se debe hacer en la creación de un programa en ABAP/4 es asignar los atributos correspondientes, como en el ejemplo que se muestra en la figura siguiente:

Pág: 9

Page 9: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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:

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

Pág: 10

Page 10: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

La Aplicación, atributo obligatorio determina que área del R/3 está involucrada principalmente a continuación 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 continuación se muestran algunas de las posibles entradas:

Pág: 11

Page 11: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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 autómaticamente a otro sistema ó en el caso de que se indique que es un objeto local o privado, NO se transporta, a continuación se muestran algunas de las posibles entradas:

Pág: 12

Page 12: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Las clases de desarrollo para un Cliente específico 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, Aplicación 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. Estructura de un programa.

REPORT <nombre> Nombre programa

TABLES: Tablas que se utilizan

DATA: Variables internas

TOP-OF-PAGE Por inicio de página <sentencias> Ejecutar las

instrucciones quese indiquen.

END-OF-PAGE Por fin de página<sentencias> Ejecutar las instrucciones

que se indiquen.

START-OF-SELECTION Por inicio de<sentencias> programa

Ejecutar las instruccionesIndicadas.

END-OF-SELECTION Por fin de programa<sentencias> Ejecutar las

instrucciones

Pág: 13

Page 13: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Indicadas.

La secuencia de eventos no es relevante.

Pág: 14

Page 14: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.1.4. El Editor ABAP/4

3.1.5. Sintaxis Un programa en ABAP/4 se conforma de declaraciones individuales. Cada declaración debe finalizar con un punto (.), como se muestra en la línea

siguiente:

WRITE ‘xyz’.

La primera palabra de una declaración, es conocida como, palabra clave. La palabra clave debe estar separada del resto de la declaración por al menos un

espacio.

Tipos de palabras claves:

1. Declarativas: para declarar los datos que vamos a usar a lo largo del programa. Por ejemplo: DATA , TABLES.

2. Eventos: Especifica un evento, es el punto donde ABAP ejecuta un cierto proceso. Por ejemplo: START-OF-SELECTION, TOP-OF-PAGE.

3. Control: Sentencias de control de flujo de programa. Por ejemplo: IF, WHILE.4. Operativas: Realizan funciones propias según el tipo de palabra clave. Por

ejemplo: WRITE, MOVE.

Se recomienda indentar las declaraciones, como se muestra en la línea siguiente:

IF contador = 0. WRITE ‘Son todas las opciones disponibles !’.ELSE. WRITE ‘Rango Valido’.ENDIF.

Las declaraciones pueden extenderse sobre varias líneas, como se muestra en la línea siguiente:

Pág: 15

Page 15: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

WRITE ‘Este es un mensaje mensaje de prueba que puede extenderse por varias líneas’.

Se permite la concatenación de varias declaraciones que sean idénticas, siempre y cuando se utilicen los dos puntos (:) despues de la palabra clave y se separen las partes con comas (,), las siguientes declaraciones son validas:

WRITE ‘abc’.WRITE ‘123’.WRITE ‘xyz’.

Pero es muy redundante y se recomienda concatenar las declaraciones, como se muestra en la siguiente línea:

WRITE: ‘abc’, ‘123’, ‘xyz’.

El uso de comentarios dentro de un programa se puede realizar de dos formas: Con un asterisco (*) exclusivamente en la columna 1, marca la línea entera como

comentario como se muestra en la siguiente línea.

*Los últimos 4 caracteres determinan la orden de compra.WRITE ‘abc-2548’.

Con comillas (“) dentro de la línea señala lo restante de la línea como comentario.

WRITE ‘abc’. “Clave del producto

3.1.6. Declaración “WRITE” La salida de la declaración WRITE coloca en pantalla el contenido de un campo o

una constante en el formato apropiado según su tipo. Declaraciones consecutivas WRITE, colocan los datos en pantalla en una misma

línea. Si no hay espacio en la misma línea, continua en la próxima línea.

WRITE ‘abc’.WRITE ‘123’.WRITE ‘xyz’.

El resultado en pantalla seria:Abc 123 xyz

SKIP genera líneas en blanco.

WRITE ‘abc’.SKIP.WRITE ‘123’.SKIP.WRITE ‘xyz’.

Pág: 16

Page 16: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

El resultado en pantalla seria:abc

123

xyz

También se puede utilizar el caracter de la diagonal (/) para saltar un renglón. Para saltar una página utilizaremos NEW-PAGE. La palabra clave ULINE genera una línea subrayada, a la cual se le puede Asignar

una posición así como una longitud, en el siguiente ejemplo la declaración genera en un renglón nuevo una línea subrayada a partir de la quinta columna de 30 caracteres de longitud.

ULINE /5 (30).

Por omisión ABAP/4 genera dos líneas de encabezados por cada página. El primero de ese contiene la fecha y el número de página. También despliega el título (si hay uno).

3.1.7. Operadores Relacionales Si los operadores no son del mismo tipo de datos, el sistema ajusta a un tipo. Si uno de los campos es más corto que el otro cuando comparas dos campos de

tipo C, la longitud de el campo más corto es ajustada a el campo más largo y llenado con espacios a la derecha.

En la siguiente tabla se muestran los posibles operadores relacionales que reconoce ABAP/4, se pueden utilizar las abreviaciones o los signos:

Pág: 17

Campos DestinoCampos DestinoCampos FuenteCampos Fuente

Type Length Value

1 A

4 ABCD

7 -47110

3 12345-

C

C

C

P

Type Length Value

4 A____

2 AB

4 47110-

7 12345-

C

C

P

C

Page 17: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Además existen operadores adicionales para comparar cadenas de caracteres.

<f1> CO <f2> (Contains Only): f1 Sólo contiene caracteres de f2. En caso de ser cierta SY-FDPOS contiene la longitud de f1 y si es falsa contiene el offset del primer carácter que no cumple la condición.

<f1> CN <f2> (Contains Not Only) Negación de la anterior.

<f1> CA <f2> (Contains Any): f1 Contiene como mínimo algún carácter de f2. Si es cierta SY-FDPOS contiene el offset del primer carácter de f1 que está en f2 y si es falsa contiene la longitus de f1.

<f1> NA <f2> (Contains Not Any): Negación de la anterior.

<f1> CS <f2> (Contains String): f1 Contiene la cadena f2. Si la condición es cierta SY-FDPOS contiene el offset donde empieza f2 en f1 y si es falsa contiene la longitud de f1.

<f1> NS <f2> (Contains Not String): Negación de la anterior.

<f1> CP <f2> (Contains Pattern): f1 Corresponde al patrón f2. En el patrón podemos utilizar: + como cualquier carácter, * como cualquier cadena de caracteres, para utilizar los caracteres +, *, en la comparación. Si la condición es cierta SY-FDPOS contiene el offset de f2 en f1 y si es falsa contiene la longitud de f1.

<f1> NP <f2> (Contains Not Pattern): Negación de la anterior.

Pág: 18

Page 18: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.1.8. Expresiones Aritméticas Existen varias declaraciones en ABAP/4, las cuales asignan valores a los campos.

Las más 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 1COMPUTE contador = contador + 2.*también es correcto suprimir la palabra clave COMPUTEcontador = 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 ó conversión automática. Para operaciones simples de aritmética, también 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 número de paréntesis necesarios.

Cada operador entre paréntesis es interpretado como una palabra, por lo tanto es necesario separarlos con espacios ( ). Sin embargo, los paréntesis 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 :Resultado = ( B + EXP(C) ) * E / SIN( 3 - G ).

Los valores no numéricos son automáticamente convertidos a valores numéricos antes de ejecutar cualquier operación aritmética.

Los operadores DIV y MOD, división y residuo respectivamente regresan valores enteros como resultado.

Resultado = 15 DIV 3.*En este momento: Resultado tiene el valor de 5.

La función 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.

También dispondremos de funciónes matemáticas para los números de coma flotante:EXP, LOG, SIN, COS, SQRT, DIV, MOD, STRLEN.

Pág: 19

Page 19: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.1.9. Elementos de Texto Una de las ventajas de usar símbolos de texto es que la cadena de texto no esta

incluida directamente en el código (hard-coded) del programa. Esto significa que se puede dar mantenimiento al texto sin tener que accesar al código 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 símbolos 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 símbolos de texto, se debe seleccionar la opción elementos texto símbolos texto, desde el editor de programas ó haciendo doble click en el elemento de texto dentro del código del programa.

Se pueden traducir los textos a otros lenguajes usando la función Traducción.

3.1.10. Campos del Sistema (System Fields) ABAP/4 provee varios campos de sistema, los cuales devuelven valores

predeterminados por el sistema como sería: 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 continuación, para el caso de los campos del sistema la tabla se llama SY todo esto en el caso de que se encuentre en el modo comando, o en el caso

Pág: 20

Page 20: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

de estar en el modo PC se presiona el icono ‘i’, se selecciona la opción 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.11. Declaración “SELECT” La Declaración SELECT se usa para leer la entrada (registros) de una (base de

datos) tabla. Se puede utilizar el parámetro WHERE para restringir el número de estradas que

deben ser leídas 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.SELECT * FROM Datos_Personales WHERE Edad = 26.*En este espacio se realiza algún proceso con los registros coincidentes WRITE: Datos_Personales-Nombre, Datos_Personales-Apellido,

Datos_Personales-edad.ENDSELECT.

El campo especificado en la cláusula WHERE a la izquierda del operador de igualdad, debe ser un campo de la tabla a ser leída. En este contexto, este debe ser direccionado sin el nombre de la tabla.

Si la entrada de la tabla no satisface la condición WHERE, el sistema regresa un valor diferente de cero (0) en el campo del sistema denominado SY-SUBRC.

Pág: 21

Page 21: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

TABLES: Datos_Personales.SELECT * FROM Datos_Personales WHERE Edad = 26.*En este espacio se realiza algún proceso con los registros coincidentes WRITE: Datos_Personales-Nombre, Datos_Personales-Apellido,

Datos_Personales-edad.ENDSELECT.IF SY-SUBRC < > 0. WRITE ‘No se encontro ningún registro coincidente’.ENDIF.

Pág: 22

Page 22: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.2. Declaraciones y Datos

3.2.1. Tipos de Datos y Atributos Con los campos PACKED, dos dígitos son almacenados en un byte. La otra mitad

del byte contiene el signo. Un campo de tipo I es creado como un número binario con un rango garantizado

de -2147483648 to +2147483647. Se recomienda usar para tipos de datos numéricos:

I : valores enteros (por ejem. contadores)P: problemas comerciales (números decimales, grandes rangos de valores)F: problemas matemáticos (grandes números, doble exactitud)

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.

3.2.2. Constantes

ABAP/4 reconoce 2 tipos de constantes.

Pág: 23

Tipo de dato Significado Valor inicial Longitud estandard Longitud permitida

P Numero empacado 0 8 1-16 I Entero 0 * - F Punto flotante 0.000….. * - N Texto numerico 00…0 1 1-MAX C Texto BLANCO 1 1-MAX D Fecha (YYYYMMDD) 00000000 8 8 T Hora (HHMMSS) 000000 6 6 X Hexadecimal X’00’ 1 1-MAX

Tipo de dato Significado Valor inicial Longitud estandard Longitud permitida

P Numero empacado 0 8 1-16 I Entero 0 * - F Punto flotante 0.000….. * - N Texto numerico 00…0 1 1-MAX C Texto BLANCO 1 1-MAX D Fecha (YYYYMMDD) 00000000 8 8 T Hora (HHMMSS) 000000 6 6 X Hexadecimal X’00’ 1 1-MAX

Tipo Constante

P 579, 37.13, ‘2.17’I 917, -882F ‘25.873’, ‘1.213E15’, ‘17E-6’, ‘0.556E7’N ‘778’, ‘87931’C ‘AXZ’, ‘B123’, ‘AB”CD’D ‘19920221’T ‘105743’X ‘0FFF’

Literal Numérica

Literal de Texto

715, -431Secuencia de dígitos, números negativosprecedidos por un signo

‘ABC’, ‘Esto es un texto’Secuencia de hasta 255 caracteresencerrados entre comillas simples

Page 23: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Las literales numéricas son para tipos de datos P e I, y las literales de texto para tipos de datos C y N. Otros tipos de datos no tienen un tipo específico de constantes. Para esto debes usar siempre literales de texto.

Puedes crear constantes con la palabra clave CONSTANTS. Después de la opción VALUE, asignas un valor a una constante y este valor no puede ser modificado.

3.2.3. Declaración 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 carácter del nombre de la variable. Los restantes caracteres pueden ser letras y/o dígitos.

2. El único carácter especial que se puede utilizar es el guión bajo (_), cuando se especifican nombres con más de una palabra.

Si el tipo no es especificado, por omisión 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).

Si la longitud no es especificada, por omisión el sistema toma la longitud estándar que utiliza ese tipo de dato, en el siguiente ejemplo se define una variable denominada tiene_adeudo la cual tiene una longitud de 1 carácter.

DATA tiene_adeudo.

Por omisión cada campo es inicializado con su valor inicial dependiendo del tipo. También se pueden inicializar los campos utilizando el parámetro VALUE. Las constantes no son permitidas aquí.

*en la siguiente línea de código la variable contador se inicializa automáticamente con el valor *cero (0)DATA contador TYPE I.*para inicializarla con un valor diferente se puede utilizar el parámetro VALUEDATA contador TYPE I VALUE 6.

También se puede especificar el número de lugares decimales (generalmente con el tipo P donde son posibles más de 14 decimales), como se muestra a continuación:

DATA sueldo TYPE P DECIMALS 2.

Pág: 24

Page 24: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Reglas para asignar nombres a los campos :

Características de la declaración de datos ( DATA ) :

Ocupan su propio espacio de memoria Son de un tipo particular Son ejemplos concretos de una declaración de tipos

3.2.4. Declaración de Tipos Se utilizan las mismas convenciones de las declaración de datos, con la condición

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 declaración de datos.

Características No ocupan espacio en memoria Identifican los atributos técnicos de un objeto de datos ( DATA ) Pueden ser predefinidos o definidos por el usuario

Además de definir tipos de datos directamente en el programa ABAP/4, se pueden especificar como un grupo de tiposTYPE-POOLS en el Diccionario de Datos.

Estos tipos son declarados con la palabra clave TYPE-POOLS <type pool>, donde <type pool> es el nombre del grupo ( no más de 5 caracteres ) en el programa ABAP/4.

Puedes mantener los TYPE-POOLS a través del Diccionario ABAP/4.

Pág: 25

DATA : COUNTER TYPE I, NAME1(25) VALUE ‘SAP’, START_DATE TYPE D, FIRST_LINE TYPE I VALUE 1, SUM1(5) TYPE P DECIMALES 2.

DATA : COUNTER TYPE I, NAME1(25) VALUE ‘SAP’, START_DATE TYPE D, FIRST_LINE TYPE I VALUE 1, SUM1(5) TYPE P DECIMALES 2.

Reglas para asignar nombres a los campos

El nombre puede ser hasta de 30 caracteres(Incl. letras, digitos, y algunos caracteres esp.)

Los siguientes caracteres no son permitidos( ) + , . : ;

SPACE es un campo predefinido.

En un estatuto de ABAP/4 no es permitido usar el mismo nombre para un parametro y un campo.

Reglas para asignar nombres a los campos

El nombre puede ser hasta de 30 caracteres(Incl. letras, digitos, y algunos caracteres esp.)Los siguientes caracteres no son permitidos

( ) + , . : ;SPACE es un campo predefinido.

En un estatuto de ABAP/4 no es permitido usar el mismo nombre para un parametro y un campo.

Page 25: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Los nombres de los tipos deben empezar con el nombre del grupo de tipos seguido por un underscore.

3.2.5. Declaración de Campos con los mismos atributos El parámetro LIKE permite asignarar los atributos a un campo de otro campo

previamente definido.

DATA fecha_embarque LIKE SY-DATUM.*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 parámetro LIKE te ayuda a crear programas que son fáciles de modificar ya

que solamente se tienen que cambiar los atributos de datos en un solo lugar, por ejemplo, si por políticas de la empresa se deseara cambiar el número de decimales a 1, bastaría con cambiar cada uno de los número 3 por 1, pero esto puede ser muy tedioso y molesto si fueran más 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 más optimo sería 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 habría que cambiar un número 3 por un número 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.000CLEAR monto.WRITE monto. “mostraría en pantalla 0.000

Pág: 26

Page 26: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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 declaración WRITE, en el siguiente ejemplo se busca obtener el año de nacimiento y la clave del nombre de un campo que contiene estos datos y otros más.

DATA: rfc(11),clave_nombre LIKE rfc,año_nacimiento(2) TYPE I.

MOVE 'tuaj700711' TO rfc.clave_nombre(4) = rfc.año_nacimiento = rfc+4(2).

WRITE: / clave_nombre, “En pantalla se mostraría: tuaj/ año_nacimiento. “En pantalla se mostraría: 70

Pág: 27

Page 27: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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 operación ya que el sistema no realiza la conversión para estos casos.

En CONCATENATE los valores para el código de retorno son:

Código de retorno SignificadoSY-SUBRC = 0 El resultado de la concatenación cupo en el campo

objetivo.SY-SUBRC = 4 El resultado de la concatenación excede a la longitud del

campo objetivo, por lo tanto solamente se tranfiere 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 concatenación sería: Jaime Armando Trujillo Arrieta

En SPLIT los valores para el código de retorno son:

Código de retorno SignificadoSY-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 concatenación sería: Jaime Armando Trujillo Arrieta

Pág: 28

Page 28: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

SPLIT nombre_completo AT SPACE INTO nombres apellido_paterno apellido_materno.*El resultado de división sería: en el campo nombres: Jaime Armando, en el campo *apellido_paterno: Trujillo y en el campo *apellido_materno: Arrieta.

Otras cadenas de comandos manejables son: SEARCH, SHIFT, REPLACE, TRANSLATE y CONDENSE.

Para realizar un desplazamiento del contenido de un campo utilizamos SHIFT.

SHIFT <campo> Realiza un desplazamiento de un carácter hacia la izquierda.

SHIFT<campo> BY <n> PLACES (RIGHT) Realiza un desplazamiento de n caracteres hacia la izquierda o si se especifica hacia la derecha, introduciendo blancos por el lado opuesto.

Ejemplo:

H O L A

SHIFT <campo> BY 2 PLACES.

L A

SHIFT <campo> BY 2 PLACES CIRCULAR (RIGHT).Realiza un desplazamiento cíclico hacia la izquierda o si se especifica hacia la derecha.

Ejemplo:

H O L A

SHIFT <campo> BY 2 PLACES CIRCULAR.

L A H O

Podemos reemplazar el contenido de ciertos campos con la instrucción REPLACE

REPLACE <cadena1> WITH <cadena2> INTO <campo>.

Existe otra instrucción de sustitución, TRANSLATE.

TRANSLATE <campo> TO UPPER CASE Pasa a mayúsculasTO LOWER CASE Pasa a minúsculas.USING’<regla>’. Reemplaza ‘campo’

según la regla de sustitución indicada.

Pág: 29

Page 29: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

La instrucción SEARCH busca una cadena dentro de un campo o una tabla.

SEARCH <campo> / <tabla> FOR <cadena>.

Para borrar los blancos de una cadena utilizaremos CONDENSE.

CONDENSE <campo> (NO-GAPS).

Esta instrucción borra todos los blancos que se encuentren comenzando la cadena por la izquierda y en caso de encontrar series de blancos intermedios dejará únicamente uno por serie.

DATA: texto(25).

MOVE “ CURSO DE ABAP/4” TO texto.CONDENSE texto no-gaps.WRITE texto.

El resultado sería el siguiente:“CURSO DE ABAP/4”

La cláusula NO-GAPS borra todos los blancos estén donde estén.

Pág: 30

Page 30: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.5. Declaración de campos con PARAMETROS

La palabra clave PARAMETERS sirve para declarar campos internos. en contraste a la descripción 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 ó 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 sería:

Pág: 31

REPORT RSAAA04E.PARAMETERS: PAR1 TYPE P, PAR2 DEFAULT ‘X’.

.

.MOVE PAR1 TO …….WRITE: PAR1, PAR2.

.

.

.

REPORT RSAAA04E.PARAMETERS: PAR1 TYPE P, PAR2 DEFAULT ‘X’.

.

.MOVE PAR1 TO …….WRITE: PAR1, PAR2.

.

.

.

PARAMETERS <Field>.PARAMETERS <Field>.

.

.

.PAR1 _PAR2 X

.

.

.PAR1 _PAR2 XSelection

Screen

Page 31: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

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

3.6.1. Declaración “IF”

Las declaraciones ELSE y ELSEIF son opcionales. Si la expresión lógica es satisfecha, la siguiente declaración es ejecutada. La

palabra clave subsecuente es ejecutada. Si la expresión lógica no es satisfecha, la parte de ELSE or ELSEIF es ejecutada.

Si no hay una PALABRA CLAVE ELSE o ELSEIF, el programa continua después 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: / 'Ubicación: ', zona.

Pág: 32

Page 32: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.6.2. Declaración “CASE”

Solo una de la secuencia de instrucciones es procesada. La declaración 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: / 'Ubicación: ', zona.

Pág: 33

Page 33: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.6.3. Declaración “DO”

Se puede especificar el número de ciclos (Loops) a través de una constante o de un campo.

El parámetro <n> TIMES es opcional. Si no se utiliza, se debe formular una palabra clave de terminación para el ciclo (Loop).

Se pueden anidar ciclos. Se determina el número de ciclos con la palabra clave SY-INDEX

DO 5 TIMES.WRITE: / 'Cliclo Número: ', SY-INDEX.

ENDDO.

3.6.4. Declaración “WHILE”

Mientras que la expresión lógica es satisfecha, la intrucción siguiente es ejecutada. Se pueden anidar ciclos. Se determinar el número de ciclos con la palabra clave SY-INDEX

WHILE contador 0.SUBTRACT 1 FROM contador.

ENDWHILE.

3.6.5. Declaración “CHECK”

Pág: 34

Page 34: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Si se ha especificado la palabra clave CHECK en un ciclo y la expresión lógica no es satisfecha, las declaraciones en el ciclo actual no son ejecutadas y continuan el proceso con el siguiente ciclo.

Si una condición CHECK en una subrutina no es satisfecha, la subrutina termina. Si hay una palabra clave CHECK fuera de un ciclo y la expresión lógica no es

satisfecha, las instrucciones en el bloque de procesamiento actual no son ejecutadas.

3.6.6. Declaración “EXIT”

Una declaración EXIT en un ciclo termina las iteraciones de ese ciclo. Una declaración EXIT en una subrutina termina el procesamiento de la subrutina. Si se especifica la declaración EXIT fuera de un ciclo (loop) o subrutina, el

proceso termina después de que la declaración EXIT ha sido ejecutada y la lista sea desplegada.

Pág: 35

Page 35: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.7. Depuración de programas (“Debugging”)

3.7.1. Activación del modo “Debugging”

Existen diferentes maneras de activar el modo del depurador:

1. Comenzar el programa llamando la función 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 transacción /h y ejecutando el programa.4. También se puede accesar al modo del depurador mediante el Object Browser

(Transacción SE80), escogiendo del cuadro Lista de Objetos la opción ProgramaVisualizar ó de la opción Objetos ProgramaTratar, después se presiona el botón Test / ejecutar.

3.7.2. Modo “Debugging” Estando en el modo del depurador, las líneas del programa aparecen en la parte

superior de la pantalla. La próxima linea a ser procesada es señalada por el caracter . Se puede navegar a través del código del programa usando las funciones estandares.

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.

Pág: 36

Page 36: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.7.3. Principales Funciones

Esta última función permite asignar un nuevo valor a un campo, introduciendolo en el lugar de las variables, posteriormente se presiona el botón marcado con una letra R, de esta forma el nuevo valor es es utilizado en la sesión del depurador.

3.7.4. BreakpointsExisten varias formas de fijar breakpoints, para un programa: Desde el Editor ABAP/4.

1. Se debe posicionar el cursor en una linea del programa y se coloca el breakpoint escogiendo el menú UtilidadesBreakpointsFijar. Los Breakpoints colocados de esta manera son válidos en la duración de una sesión.

2. También se puede usar la palabra clave BREAK-POINT en la lineas de código para fijarlos en el programa.

Modo Debugging 3. Se debe posicionar el cursor en la linea deseada, y fijarlo através del menú

Breakpoint ó haciendo doble click en la línea de código.

Las lineas de código que tengan asignadas breakpoint seran marcadas o señaladas por el símbolo STOP. Para revisar si existen y en donde estan fijados los breakpoints se debe elegir el menú Pasar a Breakpoints.

Para borrar breakpoints, se posiciona el cursor en la línea correspondiente y se hace doble click ó eligiendo el menú Breakpoint Borrar todo, para eliminar todos los break-points que se fijaron.

Pág: 37

Page 37: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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 común con la posibilidad de tratarlos como un solo grupo ó cada campo en forma individual.

3.8.1. Declaración 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.

También se puede utilizar el parámetro LIKE para tomar los atributos previamente declarados en campos internos o campos definidos en el diccionario ABAP/4.

Se debe direccionar los sub-campos de una cadena de campo como se muestra a continuación:

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

Pág: 38

Page 38: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.8.2. Transportación 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 sólo es posible si los nombres de campos son idénticos.

El sistema busca en <f1> aquellos nombres de campos que también 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 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 términos de secuencias y atributos, también se puede usar la declaración:

MOVE <f1> TO <f2> la cual no requiere mucho tiempo de ejecución.

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

WRITE: / nombre_completo-nombre,/ nombre_completo-apellido_paterno,/ nombre_completo-apellido_materno.

El resultado de la pantalla sería:

JaimeTrujilloArrieta

En el ejemplo anterior se tratan a los campos en forma individual, a continuación se modifican algunas líneas para que los campos sean tratados en grupo:

WRITE: nombre_completo.

El resultado de la pantalla sería:

Jaime Trujillo Arrieta

Pág: 39

Page 39: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Los espacios intermedios se deben a que los campos P0002-VORNA, P0002-NACHN, P0002-NAME2 tienen especificada una 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 continuación:

CONDENSE nombre_completo.WRITE: nombre_completo.

El resultado de la pantalla sería:

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,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 sería:

Jaime Trujillo ArrietaJaime Trujillo 1234 Norte

Pág: 40

Page 40: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.9. Tablas Internas

Una tabla interna consiste de una línea de encabezado ( header line ) y un número de líneas con estructura idéntica. La línea de encabezado contiene la misma estructura de una cadena de campos ( Field string ).

3.9.1. Declaración de Tablas Internas (con línea 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 declaración del BEGIN, se debe agregar el parámetro OCCURS el cual indica que se debe crear una tabla interna. Después de esté parametro, se debe especificar el máximo número 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 número 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 más blocks de 8 KB ó 16 KB. En caso de que no se pueda estimar el tamaño de una tabla interna, el valor del parámetro OCCURS debe ser 0 (cero). El sistema entonces genera blocks de 8 KB ó 16 KB para acomodar o 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.

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.

INCLUDE STRUCTURE permite usar la estructura de una tabla del Diccionario ABAP/4 como la base para una tabla interna o cadena de campo. También se

Pág: 41

Tabla Interna

Carrier Connection Date Price

Header Line(Area de Trabajo)

FLIGHT DATA LIST

Page 41: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

pueden usar los nombres de campo, atributos y conversión de rutinas. Lo mismo aplica para LIKE con campos solos.

INCLUDE STRUCTURE, también te permite consultar reportes de estructuras internas.

DATA: BEGIN OF t_zabeca OCCURS 0.Include structure ZBECA.

DATA: END OF nombre_completo.

DATA: BEGIN OF t_zabeca OCCURS 0.Include structure ZBECA.

DATA: flag, END OF nombre_completo.

3.9.2. Llenado de Tablas Internas (con línea de encabezado)

La línea de encabezado ( header line ) es el área de trabajo para la tabla interna. Cuando llenas una tabla interna, la información se coloca primero en la línea de encabezado. Cuando se lee una tabla interna, ABAP/4 coloca el contenido de la línea leída en la línea de encabezado.

La palabra clave APPEND <itab> almacena el contenido de la línea del encabezado al final de una tabla interna (<itab>).

Las declaraciones APPEND <itab> SORTED BY <campo> permite generar una lista ordenada. Cada que se agrega una nueva entrada con está declaración, 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 desde su línea de encabezado, pero si de una estructura idéntica o cadena de campos <wa>, usa la declaración: APPEND <wa> TO <itab>.

Pág: 42

Page 42: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Esto es más rápido que <itab> = <wa>. APPEND <itab>.

DATA: BEGIN OF nombre_completo OCCURS 0,nombre LIKE P0002-VORNA,apellido_paterno LIKE P0002-NACHN,apellido_materno LIKE P0002-NAME2,

END OF nombre_completo.

MOVE: ‘Jaime’ TO nombre_completo-nombre,‘Trujillo’ TO nombre_completo- apellido_paterno,‘Arrieta’ TO nombre_completo- apellido_materno.

APPEND nombre_completo.

En el ejemplo siguiente, las entradas a la tabla son almacenadas en la secuencia en que son leídas. Aquí, es posible almacenar más del número de líneas especificadas en el OCCURS ( en este caso 10 ).

DATA: BEGIN OF T_ZBECA OCCURS 10,nombre LIKE P0002-VORNA,apellido_paterno LIKE P0002-NACHN,apellido_materno LIKE P0002-NAME2,

numero_pers like zbeca-pernr, END OF T_ZBECA.

SELECT * FROM ZBECA. MOVE-CORRESPONDING ZBECA TO T_ZBECA. APPEND T_ZBECA.ENDSELECT.

En el siguiente ejemplo, las entradas a la tabla son almacenadas en orden descendente por el campo numero_pers. Aquí, el número de líneas a almacenar no puede exceder de las especificadas en el OCCURS ( en este caso 10 ).

DATA: BEGIN OF T_ZBECA OCCURS 10,nombre LIKE P0002-VORNA,apellido_paterno LIKE P0002-NACHN,apellido_materno LIKE P0002-NAME2,

numero_pers like zbeca-pernr, END OF T_ZBECA.

SELECT * FROM ZBECA. MOVE-CORRESPONDING ZBECA TO T_ZBECA. APPEND T_ZBECA SORTED BY numero_pers.ENDSELECT.

Pág: 43

Page 43: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.9.3. Declaración “COLLECT”

COLLECT <itab>.

La declaración COLLECT suma los contenidos de la línea 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 línea 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 línea 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 línea 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 Nº depto Nº semin. Nº inscr Cal.110 0020 0000000001 16180322 1.0123 0020 0000000002 200 4.0124 0020 0000000002 16156946 4.0125 0020 0000000002 201 2.0 130 0020 0000000002 17985761 2.0135 0020 0000000002 10221 3.0136 0020 0000000002 11822283 3.0139 0020 0000000002 14328369 2.0140 0020 0000000002 20392133 2.0144 0020 0000000002 21779483 1.01223 0002 0000000001 15606811 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.

SELECT * FROM UKRST.MOVE-CORRESPONDING UKRST TO seminarios.COLLECT seminarios.

ENDSELECT.

Pág: 44

Page 44: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.9.4. Procesamiento (con línea de encabezado)

El procesamiento de una tabla interna se realiza a través de la declaración del ciclo LOOP AT ... ENDLOOP. Cada vez que el proceso pasa a través de un ciclo, el sistema coloca la siguiente entrada en la línea de encabezado. Si se direcciona un campo de una tabla en el programa, el valor del campo es tomado de la línea del encabezado.

Con la palabra clave WHERE, se puede especificar una expresión lógica. Si una entrada de tabla no satisface la expresión lógica, 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 leída en su totalidad.

Cuando una tabla interna está siendo leída, el campo de sistema SY-TABIX contiene el valor indice de la entrada de la tabla actual en el encabezado de línea.

Al ejemplo anterior le agregamos las siguientes líneas al final del código:

LOOP AT seminarios.WRITE: / ' Num. de Seminario: ', seminarios-semnr,

seminarios-note.ENDLOOP.

El resultado de la pantalla sería:

Num. de Seminario: 0000000001 2.0 Num. de Seminario: 0000000002 23.0

También es posible hacer :

LOOP AT <intab> FROM <inicio> TO <fin>. …ENDLOOP.

Pág: 45

Page 45: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

LOOP AT <intab> WHERE <condición>. …ENDLOOP.

Donde solamente procesa la información que cumpla con el criterio de la condición.

LOOP AT t_sflight WHERE carrid eq ‘AA’. WRITE: t_sflight-carrid, t_sflight-connid, t_sflight-price.ENDLOOP.

El resultado de la pantalla sería:

AA 0100 123.00AA 0300 50.00AA 0387 10.00

3.9.5. Declaración “SORT”

SORT <nombre tabla>.

Para ordenar una tabla interna , se utiliza la declaración SORT, si no se especifica un criterio de ordenamiento, la tabla es ordenada en todos sus campos, con excepción de los datos tipo P, I ó F, en orden ascendente de su declaración.

Si se le agrega la palabra clave BY <nombre de campo> y posteriomente la palabra clave ASCENDING ó DESCENDING, permite restringir el ordenamiento de campos particulares y determinar la secuencia de ordenamiento.

Pág: 46

Page 46: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Utilizando el ejemplo anterior se le agrega la siguiente línea de código para ordenar el resultado por número 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 23.0 Num. de Seminario: 0000000001 2.0

3.9.6. Clasificación de tablas internas y cortes de listas

En el tratamiento de un LOOP podemos utilizar sentencias de control de ruptura.

Sentencia DescripciónAT FIRST...ENDAT.

Realiza las instrucciones que hay a continuación del AT FIRST para la primera entrada de la tabla.

AT LAST...ENDAT.

Realiza las instrucciones que hay a continuación del AT LAST para la primera entrada de la tabla.

AT NEW <campo>..

Realiza las instrucciones que hay a continuación del AT NEW para cada inicio de

Pág: 47

Page 47: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

.ENDAT.

nivel de ruptura.

AT END OF <campo>...ENDAT:

Realiza las instrucciones que hay a continuación del AT END para cada final de nivel de ruptura.

Si utlizamos la instrucción SUM dentro de un AT … ENDAT realizará la suma de todos los campos P,I,F de ese nivel de ruptura (para el cálculo de subtotales). El resultado lo encontraremos en el área de trabajo de la tabla.Será necesario que la tabla interna esté ordenada en el mismo orden que la utilización de los niveles de ruptura.

Así la utilización conjunta de todas estas instrucciones sería de la siguiente manera:

SORT <intab> BY <c1> <c2>.LOOP AT <intab>. AT FIRST … (SUM)…ENDAT.

AT NEW <c1>.…(SUM)…

ENDAT.

AT NEW <c2>. …(SUM)…ENDAT.……… “ Proceso Normal de la Tabla.

AT END OF <c2>.…(SUM)…

ENDAT.AT END OF <c1>.

…(SUM)…ENDAT.

AT LAST…(SUM)…ENDAT.ENDLOOP.

3.9.7. Lectura de Entradas (con línea de encabezado)

Pág: 48

Page 48: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Se puede utilizar la palabra reservada READ TABLE<itab> WITH KEY... para leer una entrada especifica. Después del acceso leído, la entrada de tabla se mantiene en la línea de encabezado. Si el acceso fué existoso, el valor del código que regresa al campo de sistema SY-SUBRC es 0 (cero).

El parámetro KEY debe ser válido para el argumento buscado. ABAP/4 compara el comienzo de cada entrada de tabla con el argumento buscado, el cual es usualmente una cadena de campo.

Si la tabla interna está ordenada por el argumento buscado, se puede utilizar la palabra clave BINARY SEARCH. Está ejecuta una búsqueda binaria para la entrada y es más eficiente que una búsqueda ordinaria. Si la tabla interna contiene más de una línea idéntica en el argumento, el comando READ regresa a la primera entrada (aún con la palabra clave BINARY SEARCH).

Es posible una búsqueda aún más rápida con una búsqueda binaria.

READ TABLE <intab> WITH KEY <clave> BINARY SEARCH.

Una lectura directa de un registro de la tabla la podemos realizar con:

READ TABLE <intab> INDEX <num>.

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.

TABLES: UKRST.

DATA: BEGIN OF seminarios OCCURS 0. INCLUDE STRUCTURE UKRST.DATA: END OF seminarios.

SELECT * FROM UKRST.

Pág: 49

Page 49: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

MOVE-CORRESPONDING UKRST TO seminarios. APPEND seminarios.ENDSELECT.

SORT seminarios BY SCHNR.READ TABLE seminarios WITH KEY '0000000125'.

Pág: 50

Page 50: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.9.8. Cambios (con línea de encabezado)

La palabra clave MODIFY <tab> INDEX <i> sobreescribe la entrada de la tabla <i> con el contenido de la línea de encabezado. La entrada <i> ya debe existir.

La palabra clave INSERT <tab> INDEX <I> usa el contenido de la línea 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 línea de encabezado es agregado a la tabla.

La palabra clave DELETE <tab> INDEX <i> borra la entrada de la tabla <i>. Varias adiciones están disponibles con la palabra clave DELETE (ver lo

correspondiente a la palabra clave LOOP) estos incluyen :WHERE <condición>. En este caso, la palabra clave DELETE es aplicada solo en las entradas que satisfacen la condición.

...FROM <n1> TO <n2>Aquí, todas las entradas de <n1> a <n2> son borradas, incluyendo los límites más 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 líneas de código, 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 encontro ninguna entrada con la llave 0000000125 !!'.ENDIF.

Pág: 51

Page 51: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

LOOP AT seminarios. WRITE: / ' Num. de Certificado: ', seminarios-SCHNR, 'Nota: ', seminarios-NOTE.ENDLOOP.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.9. Eliminación (con línea de encabezado)

CLEAR <itab>REFRESH <itab>FREE <itab>

La palabra clave CLEAR <itab> inicializa cada campo de la línea 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 línea de encabezado permanece sin cambio.

La palabra clave FREE <itab> hace lo mismo que REFRESH a excepción de que, si libera el espacio de memoria utilizado por la tabla.

Pág: 52

Page 52: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.9.10. Información de tablas internas (con linea de encabezado)

DESCRIBE TABLE <tab> LINES <i>DESCRIBE TABLE <tab> OCCURS <i>

Se puede utilizar la palabra clave DESCRIBE TABLE para obtener información acerca de una tabla interna.

El parámetro LINES regresa el número de entradas existentes en la variable <i>. El parámetro OCCURS regresa el valor OCCURS en la definición 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 sería: 11WRITE: j. “El resultado sería 0 (cero)

3.9.11. Declaración (Sin línea de encabezado)

Pág: 53

Page 53: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

A partir de la versión 3.0, se puede definir tablas internas sin línea de encabezado. Las tablas sin línea de encabezado constan de un número cualquiera de entradas,

con estructuradas idénticas de acuerdo al tipo <type> especificado en el programa.

Se puede utilizar el parámetro OCCURS para determinar cuantas entradas de tablas inicialmente se tienen, pero este valor puede incrementarse si es necesario (con excepción de las palabras clave APPEND...SORTED BY...).

Se puede utilizar la palabra clave LIKE...OCCURS...para declarar una tabla interna sin línea de encabezado.

DATA: seminario LIKE UKRST OCCURS 5 .

Si se desea que la tabla interna tenga línea 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 línea de encabezado donde la estructura consta de un campo.

3.9.12. Llenado de tablas internas (Sin línea de encabezado)

APPEND <wa> TO <itab>.

APPEND LIST_WA TO FLIGHT_LIST.

El APPEND y el COLLECT tienen el mismo efecto sobre las tablas sin línea de encabezado que aquellas que tienen línea de encabezado.

Ambas toman el contenido de la línea a ser llenada desde una estructura idéntica de área de trabajo.

3.9.13. Lectura de Entradas (Sin línea de encabezado)

READ TABLE <itab> INTO <wa> WITH KEY. . .

LOOP AT <itab> INTO <wa>. . .ENDLOOP.

Así como las tablas internas con línea de encabezado, se puede leer tablas internas sin línea de encabezado usando la palabra clave READ TABLE ó la palabra clave LOOP … ENDLOOP.

Los registros leídos son colocados en estructuras idénticas de áreas de trabajo. Lo mismo se aplica a las palabras claves MODIFY e INSERT :

MODIFY <itab>FROM<wa>INDEX<i>. modifica la línea correspondiente de la tabla interna.

INSERT<wa>INTO<itab>INDEX<i>. inserta el registro del área de trabajo antes de la línea correspondiente.

Pág: 54

Page 54: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

La palabra clave CLEAR no se comporta de la misma forma para tablas internas con línea de encabezado y tablas internas sin línea de encabezado.

Cuando se procesa una tabla interna con línea de encabezado, este posiciona los campos en la línea del encabezado con el valor inicial apropiado para su tipo.

Cuando se procesa una tabla interna sin línea de encabezado, este suprime la tabla entera, algo similar a la palabra clave REFRESH.

Pág: 55

Page 55: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.10. Estructuras Compuestas

Usar tablas internas sin línea de encabezado permite construir tablas internas multi-dimensionales, de las cuales una parte de está es construída 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 información:

Nº depto. Nº curso Descripción Profesor0002 0000000001 Soziale Randgruppen 20000002 0000000002 Geschichte des Sozialismus 20000004 0000000001 Didaktik I 40000004 0000000002 Mathematikunterricht 40000005 0000000001 Schimmen 23000006 0000000001 Mikroökonomie I 21200006 0000000002 Mikroökonomie II 21200006 0000000003 Makroökonomie 21200008 0000000001 Strafprozeßordnung 4100

La segunda tabla se denomina: UPERS, con la siguiente información:

Nº miembro Univ. Nombre Dirección2000 LENZ, CLAUDIA WORMS4000 MÜLLER, MARIA WIESLOCH2300 THIELE, FRANZISKA WIESLOCH2120 KRAFT, HOLGER HEIDELBERG4100 MAIER, RUDI FRANKENTAL

La finalidad del ejemplo es saber cuales cursos y a que 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, Descripción, Nº depto:

Prof. Nombre MateriasNº curso Descripción Nº

depto2000 LENZ, CLAUDIA 0000000001

0000000002Soziale RandgruppenGeschichte des Sozialismus

00020002

4000 MÜLLER, MARIA 00000000010000000002

Didaktik IMathematikunterricht

00040004

2300 THIELE, FRANZISKA 0000000001 Schimmen 00052120 KRAFT, HOLGER 0000000001

00000000020000000003

Mikroökonomie IMikroökonomie IIMakroökonomie

000600060006

4100 MAIER, RUDI 0000000001 Strafprozeßordnung 0006

Pág: 56

Page 56: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

La palabra clave TYPE define la estructura tipo deniminada cursos. profesor_materias es una tabla interna con una linea de encabezado y su tercer

componente es una tabla interna sin linea 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 así que asegurar que se tiene la misma estructura de la tabla interna.

TABLES: UKURS, UPERS.TYPES: BEGIN OF cursos, fabnr LIKE UKURS-FABNR, "Número de departamento krsnr LIKE UKURS-KRSNR, "Número de curso kname LIKE UKURS-KNAME, "Descripcion del curso prfnr LIKE UKURS-PRFNR, "Clave Profesor.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 area de resultados a todos los número 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 area 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 LOOP’s 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 línea de encabezado.

Pág: 57

Page 57: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

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 linea de encabezado, su salida o área de trabajo es en la tabla interna materias_wa.

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.

Pág: 58

Page 58: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.11. Pantallas de Selección

La finalidad de crear una pantalla de selección 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 Selección

SELECT-OPTIONS <selection name> FOR<field>

Con la palabra clave SELECT-OPTIONS, se define un criterio de selección. Para cada criterio, la pantalla de selección despliega una línea la cual empieza con un texto (por default el nombre del criterio de selección definido) y finaliza con las posibles entradas para esa selección en particular.

El nombre de el criterio de selección NO puede constar de más de 8 caracteres.

Pág: 59

Page 59: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Despúes del parámetro FOR, se debe especificar el campo del cual se va a verficar el contenido en relación a la entrada realizada.

Para cada selección, ABAP/4 crea una tabla interna con una estructura estandar, esta tabla es llenada con las entradas de la pantalla de selección.

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 líneas de código (hard code) el número de departamento así como la clave del profesor, pero de esta forma se dificulta el cambiar cualquiera de estos valores ya que se tendría que modificar el programa fuente para hacerlo más flexible agregaron las siguientes líneas de código, para generar una pantalla de selección:

SELECT-OPTIONS depto FOR UKURS-FABNR DEFAULT '0002' TO '0008'.SELECT-OPTIONS cve_prof FOR UPERS-EUNR DEFAULT '2000' TO '4100'.*----- Se limita el area de resultados a todos los número 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), distinguiendose entre si por el nombre de selección definido (en el caso del ejemplo anterior: depto, cve_prof).

Al ejecutar el programa lo primero que se muestra es la siguiente ventana:

Pág: 60

Page 60: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.11.2. Estructura La tabla interna que se genera automaticamente consta de 4 campos con los

nombres fijos SIGN, OPTION, LOW y HIGH. Cada línea de esta tabla formula una condición con un operador de comparación, con los siguientes significados:

SIGN (signo) DescripciónI IncluyenteE Excluyente

OPTION (Opción) DescripciónEQ IgualNE DiferenteLE Menor ó IgualLT MenorGE Mayor ó IgualGT MayorBT EntreNB NO entre (solamente en rangos)CP Con patronNP Sin patron (soló para plantillas como LIKE).

3.11.3. Otros operadores relacionales Dentro de la pantalla de selección se puede introducir un único valor o un rango. Haciendo doble clic en la entrada del campo o presionando el botón de Opciones

de Selección, se obtiene un cuadro de diálogo 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 linea vacía de opciones de selección, se puede seleccionar un valor inicial. para eliminar esto, presione el botón correspondiente.

Pág: 61

Page 61: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.11.4. Declaración de campos con parámetros

Se pueden incluir parámetros en la pantalla de selección al igual que en las opciones de selección. A diferencia de las opciones de selección, se puede especificar exclusivamente valores únicos con parámetros, más no rangos.

Se debe almacenar una línea de texto para cada campo creado con PARAMETERS escogiendo TEXT ELEMENTS en el Editor de ABAP/4 y después SELECTION TEXTS.

Se pueden mezclar parámetros con opciones de selección.

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.

Pág: 62

Page 62: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.12. Criterios de Busquedas (“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 estandar, las cuales se pueden

utilizar para accesar a la base de datos, ya sea en forma general o en base a criterios de selección. ABAP/4 Open SQL tiene las siguientes características : La síntaxis de ABAP/4 Open SQL corresponde a la síntaxis de SQL estandar. ABAP/4 Open SQL es un subconjunto de SQL estandar. ABAP/4 Open SQL contiene formas pequeñas de SAP.

Se utiliza la palabra clave SELECT para evaluar tablas de base de datos a través 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 ningun tipo de validación de autorizaciones. La claúsula SELECT tiene 3 variantes, las cuales son descritas en este capítulo.

Estas incluyen:

Single line

Multiplelines

Specific line

- Lectura de todos los datos de una sola entrada- Lectura de todos los datos de varias entradas- Lectura de datos de columnas específicas.

Pág: 63

ABAP/4Dictionary

SELECT . . .

Database

Data

ABAP/4programs

Data definition

List

Page 63: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.12.1. Busqueda unica “Single Access”

SELECT SINGLE * FROM <tabla> [WHERE …] [AND …].

Usando la palabra clave SELECT mas el modificador SINGLE se puede accesar a una sola entrada. Al hacer esto, se debe especificar en la clausula 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 revisión de sintaxis es ejecutada, en este caso, la primera línea del conjunto de soluciones es seleccionada.

El regreso del código de valores tiene el siguiente significado: 0: La lectura fué existosa 4: La entrada de la tabla no existe.

TABLES:UKURS.

SELECT SINGLE * FROM UKURSWHERE 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.

Pág: 64

Page 64: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.12.2. Busqueda de varias entradas “Several Entries”

Es la busqueda tradicional y más común que se realiza atráves de la declaración SELECT la cual se explica en el capítulo Conceptos Generales.

3.12.3. Busqueda 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 número ‘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 leídos de la tabla UKURS para el curso número ‘0000000001’. Después 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 clausula SELECT<a1><a2>... debe contener el mismo número de elementos que la clausula INTO (<f1>,<f2>...).

3.12.4. Las Funciones Agregadas

SELECT MAX (DISTANCE)MIN (DISTANCE)COUNT(*) FROM <> INTO (..., ..., ...)WHERE....

El ejemplo de abajo determina el número total de registros de datos en la tabla SPFLI, tanto la distancia más grande como la más corta entre el aeropuerto de salida y el aeropuerto destino .

Pág: 65

Page 65: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

En el ejemplo mencionado se agregan funciones MIN, MAX y COUNT, también puedes usar las funciones AVG y SUM (pero solo para campos numéricos).

Deben ir paréntesis inmediatamente después del agregado ID sin espacios entre ellos y cada componente en la expresión debe ser separada de las otras por al menos un espacio.

Si especificas la opción DISTINCT, la función agregada solo opera con diferentes valores en una columna.

No ENDSELECT.

Vea también la documentación de la palabra clave SELECT.

REPORT RSAAA08E.TABLES: SPFLI.DATA : MAXFIELD LIKESFLIGHT-DISTANCE,

MINFIELD LIKESFLIGHT-DISTANCE,COUNTER TYPEI.SELECT MAX( DISTANCE )

MIN( DISTANCE )COUNT ( * )FROM SPFLI INTO(MAXFIELD, MINFIELD, COUNTER).

WRITE: / TEXT-001, MAXFIELD,/ TEXT-002, MINFIELD,/ TEXT-003, COUNTER.

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

Para leer datos componente por componente dentro de un área dada, use la opción INTO CORRESPONDING FIELDS OF...

No todos los campos de las líneas seleccionadas son leídas dentro del área de trabajo, solo las columnas para las cuales hay componentes nombrados idénticamente en el área dada.

En el ejemplo sólo las columnas CITYFROM y CITYTO de la tabla SPFLI son leídas y transportadas con campos nombrados idénticamente en el área de trabajo definida para este propósito.

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 sobreescribe entradas de tablas existentes, pero agrega los nuevos campos a los ya existentes.

Pág: 66

Page 66: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Cuando una tabla interna es procesada con ...CORRESPONDING...o...APPENDING CORRESPONDING..., el estatuto ENDSELECT no es necesario en el código del programa.

REPORT RSAAA08N.TABLES: SPFLI.DATA: BEGIN OF ITAB OCCURS 10,

CITYFROM LIKESPFLI-CITYFROM,CITYTO LIKESPFLI-CITYTO,

END OF ITAB.SELECT * FROM SPFLI

INTO CORRESPONDING FIELDS OF TABLE ITAB...LOOPAT ITAB.

WRITE: / 10 ITAB-CITYFROM, ITAB-CITYTO.ENDLOOP.

3.12.6. Rango de selección

SELECT * FROM <tabla> WHERE <campo de tabla> BETWEEN <campo1> AND <campo2>.

La adición ...BETWEEN... te permite procesar un rango con la claúsula WHERE.

ABAP/4 interpreta los límites de rango más bajo y el más alto como parte de un rango específico.

El siguiente ejemplo lee todos los vuelos de la tabla SFLIGHT donde el máximo número de asientos disponibles esta entre 100 y 900.

REPORT RSAAA08H.TABLES: SFLIGHT.

SELECT * FROM SFLIGHT WHERE SEATSMAXBETWEEN 100 AND 900.

WRITE: / SFLIGHT-CARRID, SFLIGHT-CONNID,SFLIGHT-SEATSMAX.

ENDSELECT.

3.12.7. Patrones de selección

SELECT * FROM <table> WHERE <campo de tabla> LIKE ...

El ejemplo de abajo selecciona todos los registros donde un “R” occurre en la segunda posición en el campo CITYFROM seguida por una secuencia cualquiera de caracteres.

Pág: 67

Page 67: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Los caracteres “_” y “%” tienen una significado particular :

“_” esto significa para un solo caracter“%” esto significa para una secuencia cualquiera de caracteres

Puedes usar solo caracteres comodines con campos de texto.

El uso de caracteres comodines en la condición LIKE corresponde a SQL estandar.

REPORT RSAAA08I.TABLES: SPFLI.

SELECT * FROM SPFLI WHERE CITYFROMLIKE ´_R%´.

WRITE: / SPLIT-CARRID, SPFLI-CONNID,SPFLI-CITYFROM.

ENDSELECT.

3.12.8. Selección dentro de un conjunto de valores

SELECT * FROM <tabla> WHERE <campo de la tabla> IN ( . . . ).

Utiliza el operdor IN en la claúsula WHERE para formular una comparación con una lista de valores.

Utilizar IN dentro de una lista de valores es similar a usar OR entre los valores.

Dentro de la lista puedes usar campos o literales.

REPORT RSAAA08J.TABLES: SFLIGHT.

SELECT * FROM SFLIGHT WHERE PRICEIN (123, 1000).

WRITE: / SFLIGHT-CARRID, SFLIGHT-CONNID,SFLIGHT-CITYFROM.

ENDSELECT.

3.12.9. Con operador IN ( en tablas internas )

SELECT * FROM <tabla> WHERE <campo de la tabla> in <itab>.

Pág: 68

Page 68: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

El operador IN en la claúsula WHERE permite que realices comparaciones entre los valores de una tabla interna.

Para este propósito tu puedes crear una tabla interna con …BEGIN OF …OCCURS …END OF … con la palabra clave RANGES, o con el estatuto SELECT-OPTIONS.

La tabla interna debe incluir los campos SIGN, OPTION, LOW, HIGH.

Después de llenar la tabla ( con APPEND ITAB ) su contenido es evaluado por la claúsula WHERE del estatuto SELECT.

El ejemplo muestra la selección de aquellos registros donde el precio esta entre 500 y 1000, o si es igual a 440.

REPORT RSAAA08K.TABLES: SFLIGHT.

DATA: BEGIN OF ITAB OCCURS 10,SIGN(1), OPTION(2), LOW LIKE SFLIGHT-PRICE,

HIGH LIKE SFLIGHT-PRICE,END OF ITAB.

*RANGES: ITAB FOR SFLIGHT-PRICE.

MOVE: ‘I’ TO ITAB-SIGN, ‘BT’ TO ITAB-OPTION,‘500’ TO ITAB-LOW, ‘1000’ TO ITAB-HIGH.APPEND ITAB.

MOVE: ‘I’ TO ITAB-SIGN, ‘EQ’ TO ITAB-OPTION,‘440’ TO ITAB-LOW.APPEND ITAB.

SELECT * FROM SFLIGHT WHERE PRICE IN ITAB.WRITE: / SFLIGHT-CARRID, SFLIGHT-CONNID,

SFLIGHT-CITYFROM.

ENDSELECT.

3.12.10. Nombre de la tabla en forma dinámica

SELECT * FROM (<tabla>) INTO <area de trabajo>.

El nombre de la tabla de base de datos no es conocido hasta especificar unos campos en PARAMETERS al momento de ejecución. El contenido de estos campos determina el nombre de la tabla.

La palabra clave TABLES no es requerida para este tipo de asignamiento de nombre.

Esta variante de la palabra clave SELECT solamente puede ser usado con la palabra clave INTO... .

Pág: 69

Page 69: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Especificando dinámicamente el nombre de la tabla en una palabra clave SELECT siempre toma más tiempo en el CPU que especificando el nombre estáticamente en el programa.

El nombre de tabla es case-sensitive (por ejem. El upper/lower case debe ser tomado en cuenta).

Los caracteres numéricos en campos de texto no pueden ser desplegados correctamente.

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.11. Cláusula “WHERE” en forma dinámica

SELECT * FROM <tabla> WHERE <Itab>.

Con la cláusula dinámica WHERE, puedes dejar la especificación de la condición de selección hasta el tiempo de ejecución. La condición WHERE es tomada de una tabla interna con líneas que constan de campos tipo C y un máximo de 72 caracteres.

Se especifica el nombre de una tabla interna en parentesis sin dejar espacios entre cada parentesis y el nombre de la tabla.

La condición formulada en una tabla interna debe tener la misma forma que la condición correspondiente en el código fuente. La síntaxis no puede ser checada hasta el momento de la ejecución.

Unicamente literales son permitidos como valores.

REPORT RSAAA08G.DATA : LINE(72) OCCURS 10 WITHHEADER-LINE, AND(3).PARAMETERS : PCARRID LIKESFLIGHT-CARRID,

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

Pág: 70

Page 70: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.12.12. Lectura de tablas de base de datos dentro de una tabla interna

SELECT * FROM <tabla> INTO TABLE <itab>.SELECT * FROM (<tabla>) APPENDING TABLE <itab>.

Puedes usar solo la palabra clave SELECT para leer registros de una tabla de base de datos dentro de 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 más rápido 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 procesándose, el ENDSELECT no es necesario.

La forma básica de la palabra clave (...INTO TABLE...) llena la tabla interna con los registros de datos encontrados y sobreescribe cualquier entrada existente.

La variante APPENDING TABLE... agrega registros a los ya existentes.

REPORT RSAAA08L.TABLES: SFLIGHT.DATA: ITABLIKESFLIGHT OCCURS 100 WITH HEADER LINE.

SELECT * FROM SFLIGHT INTO TABLE ITAB WHERE CARRID = ´AA´.LOOP AT ITAB.

WRITE: / ITAB-CARRID,ITAB-CONNID,.... SPFLI-CITYFROM.

ENDLOOP.

3.12.13. Ordenamiento de selección

SELECT * FROM (<tabla>) ORDER BY <campo1><campo2>..PRIMARY KEY.

...ORDER BY... te permite obtener entradas de la tabla en un orden particular.

...ORDER BY PRIMARY KEY ordena las entradas leídas por la llave primaria en orden ascendente.

...ORDER BY f1...fn ordena las entradas por los campos especificados.

Puedes definir el orden de secuencia explícitamente con ASCENDING y DESCENDING.

La secuencia estandar para el ordenamiento, está en orden ascendente.

Puedes especificar el orden de los campos al momento de ejecución, por ejem. ... ORDEN BY<itab>. En este caso, la tabla interna<itab> debe contener la lista

Pág: 71

Page 71: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

<f1>...<fn>. Las entradas de <itab> deben ser de tipo C y tener una longitud máxima de 72.

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.14. Selección para todas las entradas a la tabla

El estatuto SELECT con la adición … FOR ALL ENTRIES … obtiene todas las entradas que resulten cuando los campos de una tabla interna direccionados por la condición WHERE son reemplazados por los correspondientes valores de una entrada de tabla.

Líneas duplicadas no son incluídas en el resultado.

El campo de la base de datos y el campo con el que se esta realizando la comparación deben ser del mismo tipo y longitud.

Para FOR ALL ENTRIES… se excluyen las adiciones … ORDER BY PRIMARY KEY y … ORDER BY f1 . . . fn.

3.12.15. Agrupación de selección

SELECT <a1><a2>... INTO <f1>, <f2>,... FROM (<tabla>)

Pág: 72

Page 72: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

GROUP BY...

El siguiente ejemplo agrupa las entradas del contenido de el campo CARRID. Esto se usa para agregar funciones para determinar valores más pequeños y más grandes de el campo PRICE y obtenerlos.

Un grupo consta de entradas las cuales son listadas en las columnas específicadas por GROUP BY y tienen los mismo valores.

Con excepción de expresiones agregadas, todos los campos de bases de la cláusula SELECT (en este caso CARRID) deben también aparecer en la lista de argumentos de la cláusula GROUP BY .

Si el nombre de la tabla de bases de datos no es conocida hasta el momento de ejecución, no puedes usar ...GROUP BY... .

REPORT RSAAA08Q.TABLES: SPFLIGHT.

CARRID LIKESFLIGHT-CARRID,MINIMUM TYPEP DECIMALS 2,MAXIMUM TYPEP DECIMALS 2,

SELECT CARRID MIN (PRICE) MAX(PRICE)INTO(CARRID, MINIMUM, MAXIMUM) FROMSFLIGHTGROUP BY CARRID.

WRITE: / CARRID, MINIMUM, MAXIMUM.ENDSELECT.IF SY-SUBRC NE 0.

WRITE: / TEXT-001.ENDIF.

Pág: 73

Page 73: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.13. Modularización

Modularizando tus programas de ABAP/4, puedes evitar :

- Redundancia

Si tu programa contiene lo mismo o secuencias similares de estatutos en varias lugares, puedes evitar esto a través de la modularización.

- Hace tus programas fáciles para leer y mejora su estructura.

Una secuencia de instrucciones está en un módulo y puede ser llamado de varias locaciones 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 (tipos de subrutinas) :

1. Subrutina interna: La subrutina y la llamada(call) a ésta están en el mismo programa.

2. Subrutina externa: La subrutina y la llamada a ésta están en programas distintos.

3. Biblioteca de Funciones ( Módulos de función ): Funciones externas al programa con interfase de llamada claramente definida.

Pág: 74

Page 74: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.13.1. Definición y llamadas de subrutinas

Para declarar una subrutina, usas la clave FORM y ENDFORM. Después de FORM, especificas un nombre (de hasta 30 caracteres).

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

REPORT RSAAA10A.* Global1 dataTABLES : ... . X1 Y2DATA : ... .

* Subroutine calls (main program)PERFORM calculate_loss.PERFORM write_loss.

.

.* SubroutinesFORM calculate_loss.

* statementsENDFORM.FORM write_loss.

* statementsENDFORM.

Pág: 75

Page 75: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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:

- Parámetros formales- Campos declarados localmente.- Dato global

REPORTDictionary tablesTABLES : ... .(not program-specific)

DATA: ...global data

X1 Y1Subrutine call

X1 Y1SubrutinesParameters X YDATA : ... local data

statementsParametersDATA : ... local data X1

statements

Pág: 76

Page 76: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.15. Paso de valores de parámetros actuales a formales

PROGRAM RSAAA10B

PERFORM calculate_lossActual Parameters

SFLIGHT-PRICE

SFLIGHT-SEATSOCC

SFLIGHT-PAYMENTSUM REVENUE LOSS

1 1 1 2 3

PRICE SEATS PAYMENTSUM REVENUE LOSS

Formal parameterFORM calculate_loss

1 Call by value Call by reference2 3 Call by value and result

Cuando se llama una subrutina, el programa principal puede pasar datos a la subrutina por interface. Cualquier dato determinado en la subrutina está disponible a la llamada del programa.

El programa y la subrutina pueden comunicarse através de parámetros, Cuando se define una subrutina, especificas parámetros formales. Cuando se llama una subrutina, especificas los parámetros actuales.

El asignamiento de parámetros actuales y formales depende de su posición . Cada parámetro formal debe ser asignado a un parámetro actual, ahí deben estar tanto parámetros actuales como parámetros formales.

Hay dos tipos de parámetros - parámetros de entrada y parámetros de salida. Tú defines parámetros de entrada como llamadas de valor, y parámetros de salida como llamada de referencia o llamados de valor y resultado.

3.15.1. Tipos de paso de parámetros

ABAP/4 distingue los siguientes tipos de paso de parámetros :

- Llamada por valor :

Cuando una subrutina es llamada, los parámetros formales son creados como copias de los parámetros actuales ( en su propio espacio de memoria).

Pág: 77

Page 77: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

- Llamada por valor y resultado:

Los parámetros formales tienen su propio espacio de memoria. Al dejar la subrutina., el valor de un parámetro formal es copiado al espacio de memoria del parámetro actual asignado.

- Llamada por referencia:

Cuando una subrutina es llamada, solo la dirección del parámetro actual se pasa a el parámetro formal. Si cambias el valor de el parámetro formal, el contenido del campo en el programa principal también cambia.

a1

f1Call by value

a1

f1Call by value and result

a1

f1Call by reference

3.15.2. Pasando parámetros con tipos

Después de USING, especificas los parámetros para ser pasados por valor o por referencia:

- Llamada por valor :

Cuando se especifican parámetros formales individuales, se usa VALUE. VALUE aparece inmediatamente antes del nombre del parámetro en paréntesis. Esto define una llamada por valor para un parámetro formal ( por ejem. FORM upro USING VALUE(f1) VALUE(f2 )...).

Pág: 78

Page 78: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

- Llamada por referencia :

Especificas los parámetros individuales después de USING. Esto define una llamada por referencia para parámetros formales (por ejem. FORM upro USING f1 f2 ...).

Después de CHANGING, especificas los parámetros para ser pasados por valor o resultado. Cuando la subrutina es llamada, estos son asignados a su propio espacio de memoria. También, los contenidos actuales de los parámetros formales son automáticamente pasados a los parámetros actuales asignados al final de la subrutina (en ENDFORM).

Si la palabra clave CHECK <expresión lógica> en una subrutina regresa un resultado negativo o sales de la subrutina con EXIT, la transferencia es también 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

1

f1

a2

1

f2

a3

1

f3

a4

2

f4

a5

3

f5

1 Call by value Call by reference2 3 Call by value and result

3.15.3. Verificación de Paso de parámetros con tipos

Para asegurar que un parámetro formal de una subrutina es de cierto tipo, puedes especificarlo en la palabra clave FORM. Para hacer esto, teclea TYPE <t> o LIKE<f> después del parámetro formal en la lista TABLES, USING, o CHANGING.

Cuando llamas una subrutina con PERFORM, el sistema checa si los tipos de los parámetros actuales en la palabra clave PERFORM son compatibles con los tipos asignados a parámetros formales. Si los tipos son incompatibles, el sistema despliega un mensaje durante el chequeo de síntaxis para una llamada de subrutina interna.

Pág: 79

Page 79: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Los siguientes tipos de verificación están disponibles cuando se llama una subrutina :

No type, TYPE ANY El sistema acepta parámetros actuales de cualquier tipo. Todos los atributos del parámetro actual son pasados a el parámetro formal.

TYPE TABLE El sistema checa si el parámetro actual esta en una tabla interna. Todos los atributos y la estructura de una tabla son transferidos del parámetro actual al parámetro formal.

TYPE C, N, P, o X El sistema verifica si el parámetro actual es de tipo C, N, P, o X. La longitud de el parámetro y su especificación DECIMALS (para el tipo P) son pasados del parámetro actual al parámetro formal.

TYPE D, F, I, o T Estos tipos son determinados. El sistema verifica si el LIKE<f>, TYPE<> tipo de dato de el parámetro actual es de acuerdo al parámetro formal (<ud>= user-defined).

PROGRAM RSAAA10C.DATA: REVENUE .....PERFORM <name> USING

a1 a2 a3 a4 a5....FORM <name> USING

VALUE(f1) TYPE PVALUE(f2) TYPE IVALUE(f3) TYPE Pf4 LIKE REVENUE

CHANGING VALUE(f5) TYPE P.

<statements>ENDFORM.

a1

1

f1

a2

1

f2

a3

1

f3

a4

2

f4

a5

3

f5

1 Call by value Call by reference2 3 Call by value and result

3.15.4. Paso de Estructuras como parámetros

Puedes pasar estructuras de datos (por ejem. cadenas de campo, líneas de encabezado de tablas internas, áreas de trabajo de tabla) especificando LIKE o TYPE después del parámetro formal relevante.

Si no asignas un tipo a él parámetro formal, el único campo de la cadena de campo en la subrutina no puede ser direccionado.

REPORT RSAAA10D.TABLES: SFLIGHT.

DATA : ... .

Pág: 80

Page 80: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

.

.PERFORM WRITE_sflight1 USING SFLIGHT.PERFORM WRITE_sflight2 USING SFLIGHT.

.

.FORM write_sflight1 USING REC.

WRITE: / REC.ENDFORM.

FORM write_sflight2 USIGREC LIKESFLIGHT.WRITE: / REC-CARRID,

REC-CONNID,REC-FLDATE.

ENDFORM.

3.15.5. Paso de Tablas Internas como parámetros

Si deseas pasar una tabla interna a una subrutina y accesar los campos individuales de las entradas de tablas, debes especificar el tipo del parámetro 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 línea de encabezado.

En la subrutina, debes definir el parámetro TABLES antes de USING. Las tablas internas están siempre verificadas por referencia. Asignar un tipo a la tabla, use STRUCTURE.

REPORT RSAAA10E.

DATA: TAB LIKESFLIGHT OCCURS 50 WITH HEADER LINE

PERFORM calc_write1 USING TAB [].PERFORM calc_write2 TABLES TAB.

.

.

.FORM calc_write1 USING TABBODY LIKE TAB [].DATA: TAB LIKESFLIGHT.LOOP AT TABBODY INTOTAB.

WRITE : / TAB-CARRID.ENDLOOP.ENDFORM.

FORM calc_write2 TABLES ITABSTRUCTURE TAB.LOOP AT ITAB.

WRITE: / ITAB-CARRID.ENDLOOP.

Pág: 81

Page 81: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

ENDFORM.

Pág: 82

Page 82: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.16. Subrutinas Externas

El reporte RSAAA10B es llamado dinámicamente al momento de ejecución.

Los programas llamados pertenecen al área de trabajo de ABAP/4Dictionary tables (TABLES).

Como con subrutinas , puedes asignar tipos a los parámetros formales. Con subrutinas externas, de la incompatibilidad de tipos resulta un error de ejecución

PERFORM<>(<>)USING ... .

REPORT RSAAA10F. REPORT RSAAA10B.TABLES: SFLIGHT, SPFLI. TABLES: SFLIGHT.

. .

. .

. .PERFORM calculate_loss FORMcalculate_loss.

(RSAAA10B). .. .. ..

ENDFORM.

Si queremos llamar a una subrutina que está en un programa distinto utilizamos:

PERFORM <sub> (<programa>) USING …

También existe la posibilidad de añadir porciones de código de tipo include con la instrucción:

INCLUDE <report>.

En el código del include no utilizaremos la sentencia REPORT …

Pág: 83

Page 83: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.17. Modulos de función

Los módulos de función están clasificados en grupos de funciones y almacenados en la Librería de Funciones ( Function Library ). Un grupo de funciones contienen funciones las cuales tienen propósitos similares (por ejem. Funciones calendario) o funciones con los mismos datos base (1ra función llena la tabla interna, 2da. función edita la tabla interna y así sucesivamente)

Puedes asignar un grupo de función a una aplicación particular (FI, HR) o señalarlo para uso general (*).

Los módulos de función son módulos especiales guardados en una librería central, y agrupados por la función que realizan. Principalmente se caracterizan por un interfase definida y por que realizan tratamiento de excepciones.

Maintainingfunction modules

FM_02

Interface

Import

Export

Tables

Exceptions

Program

Documentation

Administration

FM group: ZIBU

FM_03 ...

FM_04 ...

Using functionmodules

PROGRAM ...

TABLES ...

CALL FUNCTION

‘ FM_02 ‘

EXPORTING ...

IMPORTING ...

Function Library

FM group: FIBU

FM_01 ...

FM_02 ...

3.17.1. Creación

Un módulo de función pertenece a un grupo de funciones. Cada grupo de función es asignado a una persona que está autorizada para liberar módulos de funciones.

Todos los módulos de funciones de un grupo de funciones son manejados en un programa ABAP/4.

Los nombres de modulos de funciones pueden ser de hasta 30 caracteres y pueden constar solo de caracteres alfanuméricos y el caracter de subrayado especial (_).

Los nombres de grupos de funciones comienzan de Z y los nombres de módulos de función que empiezan con los caracteres Z_ están reservados para clientes.

Pág: 84

Page 84: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Function Library

Function Module Z_FREESEATS

Create

Function GroupAplicationShort text

Z_DEM

F4 .

Pantalla inicial de la librería de funciones ( Function Library transacción SE37 )

Pág: 85

Page 85: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.18. Manejo de Funciones

3.18.1. Estructura

Para cada módulo de función, el sistema genera una estructura de programa base. Esto inserta la interfase definida y las Exceptions con líneas comentadas.

Puedes declarar tipos de datos locales.

Puedes escribir las declaraciones de datos e instrucciones relativas al módulo de función en el bloque FUNCTION.....ENDFUNCTION.

FUNCTION Z_FREESEAT.* IMPORTING* EXPORTING* CHANGING* TABLES* EXCEPTIONS

declaraciones locales

statements

ENDFUNCTION.

Pág: 86

Page 86: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.18.2. Documentación y llamado de funciones

La entrada y salida de parámetros están definidas para cada módulo de función. Todos los elementos de un módulo de función pueden estar descritos con una corta descripción y documentación comprensiva.

Cuando un módulo de función es llamado, los campos y cadenas de campos de los parámetros EXPORTING son transferidos al módulo de función . AL regresar a donde fue llamada, los valores son regresados a los parámetros IMPORTING.

Los parámetros son asignados en el programa principal como sigue:

parámetro formal = parámetro actual

Documentation for CALCULATE_REVANUE_LOSSParameter name Short text Parameters type

PAYMENTSUM Earned Revenue ISEATSOCC Occupied seats IPRICE Price per passanger ILOSS Loss EREVENUE Revenue E

REPORT RSAAA10G.TABLES: SFLIGHT.DATA: loss LIKE sflight-paymentsum, revenue LIKE ....

CALL FUNCTION ‘CALCULATE_REVENUE_LOSS’

EXPORTINGPAYMENTSUM = SFLIGHT-PAYMENTSUMSEATSOCC = SFLIGHTSEATSOCCPRICE = SFLIGHT-PRICE

IMPORTINGLOSS = LOSSREVENUE = REVENUE.

Pág: 87

Page 87: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.19. Descripción de la interfase

Los parámetros exportados son pasados por valor (por ejem. una copia es pasada con el contenidos del campo) o por referencia.

Los parámetros de EXPORT, la especificación de parámetros actuales son opcional. Los parametros de IMPORT son pasados por valor (por ejem. una copia es pasada con

el contenidos de los campos) o por referencia.

Los parámetros import pueden contener valores por omisión. Por default los valores pueden ser literales, constantes numéricas, campos de sistema (SY-DATUM, SY-LANGU) o el campo predefinido SPACE. Cuando pasan parámetros, puedes omitir el parámetro actual solo si hay un valor definido o el parámetro import es señalado como opcional. Los parámetros Import con valores definidos son siempre opcionales.

Si especificas un campo de referencia del Diccionario ABAP/4 para un parámetro, el sistema verifica el tipo y la longitud de el parámetro actual.Si el campo de referencia no es verificado, el sistema convierte los parámetros actuales de acuerdo a las convenciones de ABAP/4 y no ejecuta ninguna verificación.

REPORT RSAAA10G.TABLES: SFLIGHT.DATA: loss LIKE sflight-paymentsum, revenue LIKE ....

CALL FUNCTION ‘CALCULATE_REVENUE_LOSS’

EXPORTINGPAYMENTSUM = SFLIGHT-PAYMENTSUMSEATSOCC = SFLIGHT-SEATSOCCPRICE = SFLIGHT-PRICE

IMPORTINGLOSS = LOSSREVENUE = REVENUE.

Pág: 88

Page 88: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.20. Parámetro “Changing”

El parámetro CHANGING contiene campos de cadenas de campos las cuales son pasadas del programa a el módulo de función cuando el módulo de función es llamado, y de el módulo de función regresa al llamado de programa.

Los parámetros CHANGING Import parameters son pasados por valor (i.e. una copia del contenido del campo es pasada) o por referencia. Los parámetros CHANGING deben contener siempre valores cuando son llamados. Cuando pasan los parámetros, los parámetros actuales pueden ser omitidos solo si hay un valor definido o el parámetro CHANGING señalado como opcional.

REPORT RSAAA10G.TABLES: SFLIGHT.DATA: loss LIKE sflight-paymentsum, revenue LIKE ....

CALL FUNCTION ‘...........’

EXPORTING. . . . . .

IMPORTING. . . . . .

CHANGINGf1 = a1

Pág: 89

Page 89: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.21. Paso de tablas internas

Cuando las tablas internas son pasadas, no son copiadas (llamadas por erferencia).

Puedes asignar tablas internas a estructuras de referencia. Estas estructuras deben ser objetos de ABAP/4 Dictionary. El tipo y la longitud verificadas son ejecutadas por los parámetros actuales en la base de esta asignación.

Como todos los parámetros, las tablas pueden ser marcadas como opcionales.

REPORT RSAAA10G.TABLES: SFLIGHT.DATA: ITAB LIKE BCAXX OCURRS 10 WITH HEADERS LINE.

CALL FUNCTION ‘FILL_SEATTAB’

EXPORTINGYEAR = YEAR

TABLESSEATTAB = ITAB.

Pág: 90

Page 90: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.22. Manejo de excepciones

Cuando se crean módulos de funciones, puedes definir excepciones. El llamado de programa determina cuales excepciones se manejan.

Puedes asignar el mismo número de error a varias excepciones.

La cláusula OTHERS cubre todas las excepciones no especificadas explicitamente.

Si una excepción ocurre durante la ejecución de un módulo de función , la excepción también es manejada en el módulo de función por si misma. (por ejem. sale un mensaje de error) o el control regresa inmediatamente al llamado del programa . Al final es solo posible si la excepción es especificada en el parámetro EXCEPTIONS de la llamada.

Puedes direccionar la excepción general ERROR_MESSAGE para cualquier módulo de función: Un mensaje de error fué desplegado en el módulo de función.

Tú defines los nombres de excepciones en la interface de tu módulo de función. En el programa, tu envías una excepción con las siguientes instrucciones:

- RAISE<excepción>.ó

- MESSAGE ... RAISI NG<excepción>.

El efecto de estas instrucciones dependen de si la llamada de programa es manejable la excepción raised por si misma o no.

Si el llamado de programa es manejable la excepción, regresa el control inmediatamente a el llamado de programa sin terminar y sin salir mensaje. En este caso, el parametro EXPORT están siempre fijado a su valor.

Si la excepción no es manejable por el llamado del programa. El módulo de función termina después la palabra clave RAISE. En el caso de MESSAGE con RAISING, el mensaje apropiado esta fuera.

Ejemplo 1:

REPORT RSAAA10H.

CALL FUNCTION ´FILL_SEATAB’

EXPORTINGYEAR = YEAR

TABLESSEATAB = ITAB

EXCEPTIONSNO_ENTRY = 01OTHERS = 02.

Pág: 91

Page 91: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación 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.

Pág: 92

Page 92: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.23. Ambiente de pruebas

Cuando has creado un módulo de función, puedes aprobarlo en el ambiente de pruebas. Puedes especificar entrada de valores para el parámetro IMPORT en una plantilla de entrada. El sistema transporta el resultado a los parámetros EXPORT y entonces despliega una lista.

Si una excepción ocurre, la excepción raise es marcada.

El tiempo requerido para ejecutar el módulo de función es desplegado en micro segundos. La misma restricción aplica a los valores calculados aquí como en la función Runtime analysis. Debes también repetir la prueba con el mismo dato varias veces.

Puedes almacenar datos de prueba en un directorio de prueba de datos.

Puedes probar módulos de funciones con parámetros de tabla dentro del ambiente de prueba.

Puedes crear secuencia de pruebas.

Function module Z_FREESEAT

Import parameter valueSEATSOCC 100SEATSMAX 200

Export parameter valueSEATFREE 100

Tables Number of lines

Pág: 93

Page 93: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.24. Organización de un programa

Creas y mantienes módulos de funciones con la función Function Library o en el Object Browser. ABAP/4 maneja los diferentes programas y tablas.

Tú acceso incluye incluye programas individuales solo en casos excepcionales (subrutinas, módulos de diálogo).

Cuando se crea un nuevo módulo de función, ABAP/4 crea otro include programa y determina el nombre (número) del programa.

SAPL <gr>

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

L<gr>TOP FUNCTION-POOL <gr>

MESSAGE-ID ZZ. DATA: “GLOBAL DATA.

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

L<gr>UXX.

L<gr>U01. FUNCTION FA.

L<gr>U02.FUNCTION FB.

• System-defined include programs

• User-defined include programs

Pág: 94

Page 94: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.25. Subrutinas

Puedes crear un llamado de subrutina únicamente de un módulo de función en el módulo de programa apropiado (after ENDFUNCTION).

Creas un llamado de subrutina de diferentes módulos de función 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 función. (use la función 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

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

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

Pág: 95

Page 95: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.26. Datos globales / memoria local

Puedes usar la función Global data para crear campos y tablas internas las que quieras esten disponibles como datos globales para todos los módulos de función y subrutinas en un grupo de funciones. El área de trabajo de la tabla (TABLES) son siempre globales.

Los campos locales de un módulo de función los cuales declaraste en el programa de módulo de función son inicializados cada vez que el módulo de función es llamado.

Los campos globales son inicializados cuando un módulo de función perteneciente a un grupo de función particular es llamado por vez primera.Cuando este módulo de función u otros módulos 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.

Pág: 96

Page 96: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.27. Generación 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 amigable que te permite definir el formato de una lista sin ningún conocimiento de programación.

Cuando se programa en ABAP/4 report, puedes usar todas las facilidades disponibles en el lenguaje de programación para evaluar datos complejos.

Las consultas y reportes usan bases de datos lógicas para obtener datos.

REPORT

QUERY

Report

Pág: 97

Page 97: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.28. Bases de Datos Lógicas

3.28.1. Visión General: Accesos a la Base de Datos

Hay tres opciones diferentes que puede usar un programa ABAP/4 para evaluar el contenido de una base de datos:

la interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT.

La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta la base de datos fundamental. En adición a la funcionalidad del SQL, ABAP/4 Open SQL tiene la ventaja de las buffers locales de SAP pueden ser accesados proporcionando aquellas tablas que están en memoria.

Esto también es posible para bases de datos especificas usando declaraciones SQL en programas ABAP/4:

EXEC SQL. <Declaraciones SQL>ENDEXEC.

Puede usarse la declaración IMPORT para evaluar un grupo de objetos de datos desde un grupo de tablas de ABAP/4 en un programa ABAP/4.

Pág: 98

. . .

SAP R/3 database

EXEC SQL ABAP/4 Open SQL IMPORT

ABAP/4program

Page 98: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.28.2. Acceso a Base de Datos vía Base de Datos Lógica

Aparte del programa manejador para recuperar datos, un reporte ABAP/4 puede leer datos vía base de datos lógica.

Una base de datos lógica es una interface de programas ABAP/4 puede usarse para leer y procesar datos. El orden en el cual los programas de ABAP/4 son provistos con los datos es determinado por las estructuras de árbol de la base de datos lógica. La base de datos lógica también proporciona los programas con una interface ( incluyendo chequeo de entradas de usuario y mensajes de error) con la cual los programas pueden ser terminados.

La base de datos lógica proporciona el programa ABAP/4 el cual lee datos por el evento GET via el estatuto PUT.

3.28.3. Leyendo con Manejador de Reportes

REPORT RSBBB01B.TABLES: SPFLI, SFLIGHT, SBOOK.…SELECT * FROM SPGLI INTO TABLE ITAB_SPFLI WHERE CARRID … .

SELECT * FROM SFLIGHT INTO TABLE ITAB_SFLIGHTFOR ALL ENTRIES IN ITAB_SPFLIWHERE CARRID = ITAB_SPFLI-CARRID AND CONNID = ITAB_SPFLI-CONNID.

SELECT * FROM SBOOK INTO ITAB_SBOOKFOR ALL ENTRIES IN ITAB_SFLIGHTWHERE CARRID = ITAB_SFLIGHT-CARRID AND CONNID = ITAB_SFLIGHT-CONNID AND FLDATE = ITBA_SFLIGHT-FLDATE.

Pág: 99

. . .

SAP R/3 database

EXEC SQL ABAP/4 Open SQL IMPORT

Base de Datos Lógica

ABAP/4 program

GET PUT

Page 99: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Se debe declarar cada estructura que se desee usar en el programa y se tienen que definir como una tabla en el Diccionario ABAP/4 en el estatuto TABLES.

Para analizar todas las conexiones de vuelo de una aerolínea y las reservaciones para esos vuelos, se puede leer las tablas individuales en el orden lógico correcto usando el estatuto SELECT. Si se desean mejorar los tiempos de respuesta, se debe utilizar SELECT... FOR ALL ENTRIES IN <itab> WHERE<cond> en lugar de anidar varios estatutos SELECT.

Para lograr un mejor rendimiento, se especifica una lista de campo con la cláusula SELECT y así solo se rescatan los campos requeridos por la base de datos.

3.28.4. Leyendo información

Básicamente, se pueden usar una o dos maneras para recuperar información:

1. Se programa la información a recuperar en el programa correspondiente usando los estatutos SELECT ( report-driven data retrieval ).

2. Usar por separado un programa lector, una base de datos lógica, para leer y proveer la información requerida en el orden correcto. Solo se tienen que programar las declaraciones para el procesamiento de datos.

Dentro del reporte, el evento GET enlaza el procesamiento del reporte y la base de datos lógica.

Pág: 100

Page 100: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.28.5. Escenarios ( vistas )

Cuando muchos programas leen la misma información, el acceso a lectura puede ser implementado en una base de datos lógica. Estos programas entonces no necesitan conocer la estructura de las tablas involucradas( en particular, las relacionadas por llaves foráneas) , pero pueden depender de las entradas proporcionadas en la secuencia correcta en conexión con eventos GET.

Bases de datos lógicas hacen posible implementar una interfase de usuario consistente para los programas que usan la misma base de datos lógica.

La verificación de autorización datos centrales (y sensitivos) son definidos en forma centralizada, por ejemplo no pueden ser brincados por un programa de evaluación simple.

Las mejoras del performance dentro de la base de datos lógica afecta inmediatamente a todos los programas concernidos; el código fuente no necesita ser cambiado.

3.28.6. Estructura de una Base de Datos Lógica

La estructura de una BDL toma en cuenta si la información obtenida es similar para los diferentes reportes. Ya que las rutas de acceso difieren de trabajo en trabajo, hay diferentes BDL. BDL permite incluir tablas de bases de datos las cuales fueron definidas en el Diccionario ABAP/4 el cual es reconocido en el sistema. Se proporcionan las tablas, los nombres del diccionario ABAP/4 y se declaran estas en el reporte utilizando la declaración TABLES.

El reporte RSDBST00 proporciona información acerca de cada BDL.

Para desplegar la estructura de una BDL, seleccionar Utilities -> Help on... en el editor (modo PC) y selecciona Logical database en la siguiente caja de dialogo. Para

Pág: 101

. . .

SAP R/3 database

Base de Datos Lógica

ABAP/4 program

ABAP/4 programABAP/4

programABAP/4

program

Page 101: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

desplegar una lista de las BDL validas, presiona click en las posibles entradas presionando el botón del campo Logical database.

En la figura superior se muestra la estructura de la BDL F1S (BC: Planned flights, flights and bookings.

3.28.7. Obtener datos usando una Base de Datos Lógica

Si la BDL es para recuperar la información de su programa, se especifica el nombre de la BDL cuando se definen los atributos del programa (e, g, F1) y una aplicación (e.g. S

Pág: 102

ABAP/4 program attributes RSBBB01D

Logical database ... F1From application ... S REPORT RSBBB01D.

TABLES: SPFLI, SFLIGHT, SBOOK.GET SPFLI.

GET SFLIGHT.

GET SBOOK.

Processing SPFLI

Processing SFLIGHT

Processing SBOOK

Page 102: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

para Basis Components.) Una BDL tiene un nombre de tres caracteres donde las últimas letras denotan la aplicación. Cada BDL incluye un programa reflejando la estructura de la BDL y una pantalla de selección.

Cuando una BDL suple su programa con una tabla de entradas, el GET <table> occurre. Las declaraciones concernientes al procesamiento de una tabla de entrada es un procesamiento de bloque que empezó con la declaración GET. El procesamiento de bloque termina con el siguiente evento (key word).

Si no se quiere usar la BDL para leer información, no se especifica una base de datos en los atributos. Una base de datos postiza llega a ser activada y provee una pantalla de selección vacía. Se puede diseñar la pantalla de selección usando opciones de selección o parámetros de especificación de reportes.

Ejemplo: Reporte

Logical database F1SFrom application S

REPORT RSBBB01E.TABLES: SPFLI, SFLIGHT, SBOOK.

GET SPFLI FIELDS CARRID CONNID CITYFROM CITYTO DEPTIME ARRTIME.

WRITE:/ SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM,SPFLI-CITYTO, SPFLI-DEPTIME, SPFLI-ARRTIME.

GET SFLIGHT FIELDS FLDATE PRICE CURRENCY.WRITE: /10 SFLIGHT-FLDATE, SFLIGHT-PRICE, SFLIGHT-CURRENCY.

GET SBOOK FIELDS BOOKID CUSTOMID CUSTTYPE.WRITE: /20 SBOOK-BOOKID, SBOOK-CUSTOMID,

SBOOK-CUSTTYPE.

Si la BDL tiene definidos campo de selección para la tabla, se puede especificar por medio de los eventos GET solo los campos requeridos para el proceso. Por ejemplo:

GET SFLIGHT FIELDS FLDATE PRICE CURRENCY.

Es recomendable usar este método por razones de performance, solo los campos especificados son leídos.

Pág: 103

Page 103: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.28.8. Eventos

Después que el programa ABAP/4 ha sido ejecutado, el sistema ejecuta el procesamiento por bloques START-OF-SELECTION. El sistema ejecuta palabras clave operacionales las cuales no son explícitamente asignadas a un evento (por ejemplo, elaborar antes el primer evento) automáticamente al evento START-OF-SELECTION.

El procesamiento de bloques END-OF-SELECTION es ejecutado al final del programa.

Usualmente, un bloque de procesamiento tiene que ser completado antes que el siguiente evento sea iniciado.

3.28.9. Declaración STOP

STOP.

REPORT RSBBB01F.DATA COUNTER TYPE I.

GET SPFLI FIELDS CARRID CONNID.WRITE: TEXT-001, 15 SPFLI-CARRID, “ TEXT-001: GET SPFLI

SPFLI-CONNID.COUNTER = COUNTER + 1.SKIP.IF COUNTER > 1.

STOP.ENDIF.

END-OF-SELECTION.WRITE:/ TEXT-002, TEXT-003. “ TEXT-002: END-OF-SELECTION.

“ TEXT-003: That´s it

Pág: 104

Page 104: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Después del estatuto STOP, el sistema completa el procesamiento del reporte. En contraste con el estatuto EXIT, el END-OF-SELECTION se procesa primero (si esta disponible).

Cuando el estatuto STOP ocurre dentro del bloque de procesamiento END-OF-SELECTION, el sistema termina inmediatamente el procesamiento del reporte y despliega la lista.

3.28.10. Reporte y Programa de Base de Datos

Para crear listas, generalmente se necesitan dos programas: un reporte que procese información (datos) y un programa base de datos el cual recupera y provee información. Ambos se comunican vía PUT y GET.

Cuando se inicia un reporte que esta unido a una base de datos lógica, el sistema ABAP/4 le dice a la base de datos que se convierta en activa de acuerdo con el criterio de selección del usuario. La base de datos lógica lee un registro de datos y el estatuto PUT provee el reporte con la entrada de la tabla leída con SELECT en el evento GET.

En el evento GET, el bloque de procesamiento para el registro de datos es ejecutado. Entonces el control regresa a la base de datos lógica.

PUT acciona la siguiente subrutina FORM en la estructura de la tabla. El sistema lee los registros de información necesarios y provee al reporte con éstos. Una vez que todas las entradas secundarias son procesadas, la rutina FORM con más alta jerarquía es procesada otra vez. El procesamiento es realizado en el mismo orden hasta que todas las entradas de las tablas han sido leídas.

El programa lector de una base de datos lee desde la parte superior hasta la parte inferior de acuerdo con la estructura. Las tablas del mismo nivel de jerarquía son leídas de izquierda a derecha.

Pág: 105

Page 105: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

La profundidad de la lectura es determinada por el evento GET en el reporte. El nivel de lectura es más bajo en los eventos GET de menor jerarquía.

El reporte especifica solo los eventos GET en los que el procesamiento es realizado. La base de datos lógica lee todas las tablas que están localizadas en la ruta directa de acceso.

3.28.11. Eventos en conexión con Bases de Datos Lógicas

Los bloques de procesamiento siempre son asignados a un evento. Un bloque de procesamiento es terminado por la próxima palabra clave de evento o por el fin del programa.

El evento START-OF-SELECTION ocurre antes que el sistema le diga a la base de datos que recupere información.

El evento END-OF-SELECTION ocurre después de que todos los eventos que hacen referencia a la base de datos han sido procesados, esto es, que el sistema ha leído y procesado todas las entradas de tablas.

El evento GET<tabla> ocurre siempre cuando una base de datos ha leído su correspondiente entrada de tabla y ha provisto al reporte con ésta.

El evento GET<tabla>LATE ocurre cundo todas las tablas secundarias han sido procesadas y antes de que el sistema solicite la siguiente entrada de la misma tabla.

En el principio de un evento, el sistema inicia una nueva línea y coloca el formato intensivo de despliegue.

Pág: 106

START-OF-SELECTION

SFLIGHT SFLIGHT

SPFLI

SBOOK

SPFLI

SBOOK SBOOK SBOOK SBOOK

END-OF-SELECTION

1

3

2

3 3

4 2

3 3

4

5 1

5

1

2

3 4

5GET SPFLI

GET SFLIGHT

GET SBOOK GET SFLIGHT LATE

GET SPFLI LATE

Page 106: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.28.12. Pantalla de selección Especificación - Reporte I.

La selección de pantalla de una base de datos lógica tiene una estructura de reporte

específica: contiene solo los criterios de selección de tablas para los cuales los correspondientes estatutos TABLES existen y para tablas que son jerárquicamente mayores en la estructura de la base de datos lógica.

3.28.13. Pantalla de selección Especificación - Reporte II.

La selección de pantalla también contiene criterios de selección de tablas para las cuales no existe el estatuto TABLES, si las tablas son jerárquicamente mayores en la

Pág: 107

Airline to

Fromto

Flight date to

Booking no. to REPORT RSBBB01D.TABLES: SPFLI, SFLIGHT, SBOOK.GET SPFLI.

WRITE: SPFLI-CARRID, SPFLI-CONNID, ….GET SFLIGHT.

WRITE: /10 SFLIGHT-CARRID, SFLIGHT-CONNID..GET SBOOK.

WRITE : /20 SBOOK-BOOKID, … ….

Page 107: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

estructura que las tablas para las cuales el estatuto TABLES esta definido en el reporte.

3.28.14. Selección de pantalla: Selecciones dinámicas.

Cuando se designan por la base de datos, el sistema despliega el pushbutton Dynamic selections en la pantalla de selección. Cuando el usuario activa el pushbutton, el sistema manda una segunda pantalla de selección permitiendo al usuario seleccionar mas campos de la base de datos. Las selecciones son directamente mandadas al programa y por lo tanto no a la base de datos.

3.28.15. La Función de Base de Datos Lógica.

Pág: 108

Airline to

Fromto

Flight date to

Connection No. toDynamic selection

Page 108: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Para editar bases de datos lógicas, se puede usar la función Logical databases (seleccionar Tools-->ABAP/4 Workbench -->Development -->Programming environ -->Logical databases. O entrando la transacción SE36 o SLDB). También se pude accesar a la función mediante el Object Browser. En la pantalla inicial se introduce la clase de desarrollo, se selecciona Other Objects en la caja Single Object, y se selecciona Edit--> Logical database. Se pude crear, cambiar, desplegar, borrar y copiar bases de datos lógicas.

Las bases de datos lógicas tienen nombres de tres caracteres: Los primeros dos son del nombre de la base de datos actual (XY) y el tercero especifica la aplicación (Z=A, F, M, P, S, V). Para las bases de datos definidas por el usuario, se usa Y o Z.

3.28.16. Definicion de estructura.

Cuando se usa la función Logical database, primero se tiene que especificar la estructura cuando agregas una nueva base de datos. Primero se tiene que crear el nodo raíz y después los nodos de nivel secundario.

3.28.17. Ejemplo: DB programa y selección.

* INCLUDE DBB9SSEL.SELECT-OPTIONS: SCARRID FOR SPFLI-CARRID,

SCONNID FOR SPFLI-CONNID. . .

REPORT SAPDBB9S DEFINING DATABASE B9S.TABLES: SPFLI, SFLIGHT.FORM PUT_SPFLI.

Pág: 109

Page 109: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

SELECT * FROM SPFLIWHERE CARRID IN SCARRID... .PUT SPFLI.

ENDSELECT.ENDFORMFORM PUT_SFLIGHT.

SELECT * FROM SFLIGHTWHERE CARRID = SPFLI-CARRID AND CONNID = SPFLI-CONNID … .PUT SFLIGHT.

ENDSELECT.ENDFORM

El programa de base de datos realiza la selección de información. En el ejemplo tiene el nombre de SAPDBB9S, el cual contiene su propia subrutina FORM con un ciclo SELECT para cada tabla. Dentro del ciclo SELECT, el estatuto PUT acciona el correspondiente evento GET en el reporte.

En adición, contiene mas subrutinas para checar autorización y procesamiento de la selección de pantalla.

Las opciones de selección requeridas para la selección están almacenadas en un programa INCLUDE(DBB9SSEL en este caso). El programa determina para cual tabla de la base de datos lógica soporta selecciones adicionales y para cual soporta selección de campos.

Para más información sobre la creación de bases de datos lógicas, se pude hacer referencia a la documentación ( seleccionar Logical databases--> Help --> Extended help).

Pág: 110

Page 110: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.29. Listas

3.29.1. Introducción formato de listas

ABAP/4 cuenta con un buen número de estatutos, parámetros, eventos especiales y campos de sistema que pueden utilizar para dar formato a las listas.

3.29.2. Formatos y opciones del estatuto WRITE

Pág: 111

Estatutos paraopciones de formato

Eventos

Elementos de Texto

Campos de Sistema

WRITE… .

FORMAT… .

NEW-PAGE… .

TOP-OF-PAGE.

END-OF-PAGE.

Símbolos de textoEncabezadosTextos de selección

WRITE <formato> <valor> <opciones>.

<formato>

<opciones>

<valor>/p(l)/ Brinco de líneap posición columnal Longitud de salida

Opciones de formato,formatos de salida

Valor a desplegarCampo o literal

WRITE AT <formato> <valor> <opciones>.

Page 111: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

El estatuto WRITE, muestra el contenido de un campo o constante de acuerdo con el tipo de dato. Por default, dos campos que están separados por una coma, el sistema se despliega un espacio en blanco entre cada campo. No obstante con la adición NO-GAP del WRITE, este espació puede suprimirse.

3.29.2.1. Opciones de formato

Con la opción de formato UNDER, se puede desplegar un valor en la misma columna de un valor previamente desplegado.

Para la justificación de los campos se utilizan los parámetros LEFT-JUSTIFIED, RIGHT-JUSTIFIED y CENTERED.

Utilizando USING EDIT MASK, es posible especificar un formato tipo máscara de salida. El underscore indica un carácter de salida.

Si se contienen cantidades monetarias, es posible utilizar la opción CURRENCY para su formato correspondiente.

REPORT RDBBB02H.TABLES: SPFLI, SFLIGHT, SBOOK....GET SBOOK FIELDS BOOKID FORCURAM FORCURRKEY.

WRITE: 5 SBOOK-BOOKID,SBOOK-FORCURAM

CURRENCY SBOOK-FORCURKEY NO-ZERO.

IF SBOOK-FORCURAM NE 0.WRITE SBOOK-FORCURKEY.

Pág: 112

REPORT RSBBB02C.DATA: DATUM TYPE D,

TIME TYPE T.DATUM = SY-DATUM.TIME = SY-UZEIT.WRITE: 5 ‘Datum’(001),

20 DATUM DD/MM/YYYY.WRITE: /5 ‘Time’(002),

(8) TIME USING EDIT MASK‘__:__:__’UNDER DATUM.

DEMO 1

Date 10/17/95

Time 07:08:17

Columna 5 Columna 20

Page 112: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

ENDIF. Con los campos tipo C y N, se puede utilizar el parámetro NO-ZERO para remplazar los

ceros con espacios en blanco.

3.29.3. Atributos de salida

El estatuto FORMAT determina la forma en que aparecen los datos en la pantalla.

Todos los formatos especificados con el FORMAT, aplican a partir del siguiente estatuto WRITE o en la siguiente línea.

Las diferentes opciones del FORMAT son las siguientes:INTENSIFIED desplegado con alta intensidadINPUT listo para entradaCOLOR <n> especifica el color de fondo <n>INVERSE invierte el color de fondo y de letras

Con el parámetro OFF, se restauran todas las opciones.

En la siguiente lista se muestran los siete colores que se pueden utilizar en listas. Se activa el color, especificando el valor numérico correspondiente o con su nombre.

FORMAT COLOR…OFF or COL_BACKGROUND Background

1 COL_HEADING Encabezados2 COL_NORMAL Cuerpo de la lista3 COL_TOTAL Totales4 COL_KEY Campos llave5 COL_PSITIVE Para valores positivos6 COL_NEGATIVE Para valores negativos

Pág: 113

REPORT RSBBB02E.FORMAT INTENSIFIED OFF.WRITE: 5 ‘*************’(001).SKIP 2.WRITE: 5 ‘Date’(002).FORMAT INTENSIFIED.WRITE: 20 DATUM DD/MM/YYYY.FORMAT INTENSIFIED OFF.WRITE: /5 ‘Time’(003). DEMO 1

Date 10/17/95

Time 07:08:17

Page 113: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

7 COL_GROUP Niveles de grupo

3.29.4. Atributos de salida de campo

REPORT RSBBB02G.TABLES: SPFLI, SFLIGHT.PARAMETERS: LIMIT LIKE SFLIGHT-PAYMENTSUM.

GET SPFLI FIELDS CARRID CONNID.WRITE: / SPFLI-CARRID COLOR COL_KEY,

SPFLI-CONNID COLOR COL_KEY....

GET SPFLI LATE....IF TOTAL GE LIMIT.

WRITE TOTAL COLOR COL_POSITIVE.ELSE.

WRITE TOTAL COLOR COL_TOTAL.ENDIF.

...

Usando el estatuto WRITE, se pueden especificar atributos de salida para un valor. Las opciones de atributos son los mismos que se utilizan con el estatuto FORMAT.

Las especificaciones de formato del WRITE aplican solo al valor de salida para el cual se especifica.

3.29.5. Símbolos e Iconos en Listas

Pág: 114

REPORT RSBBB02I.TABLES SCUSTOM.INCLUDE <SYMBOL>.

SELECT * FROM SCUSTOMORDER BY PRIMARY KEY.

WRITE: / SCUSTOM-ID, / SCUSTOM-NAME,

... / SYM_PHONE AS SYMBOL, SCUSTOM-TELEPHONE.

SKIP.ENDSELECT.

DEMO / Sym bols 1

1 SA P AG69190 W alldorf06227/34-0

2 John Sm ith69190 W alldorf06227/12345

Page 114: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Utilizando la adición AS SYMBOL de el estatuto WRITE, es posible incluir símbolos en listas. El nombre correspondiente al símbolo se encuentra definido en el programa INCLUDE <SYMBOL>.

Con WRITE <f> AS ICON es posible incluir iconos en la lista. para esto es necesario incluir en el programa INCLUDE <ICON>. Con INCLUDE <LIST> se incluyen símbolos e iconos.

3.29.6. Encabezado de página: Elementos de Texto

Es posible dar mantenimiento al encabezado de una lista y hasta 4 lineas para encabezados de columnas en un reporte de lista.

Al momento de ejecutarse la próxima vez el reporte, las líneas de encabezado aparecen automáticamente.

Para editar el títilo y los encabezados de las columnas se utiliza la función Text elements.

El título aparece en el reporte de directorio de programas.

El encabezado (List heading) es la primera línea en la lista.

También es posible modificar los encabezados directamente desde el desplegado de la lista (System -> List -> List heading). Esto permite colocar los encabezados de acuerdo a las columnas desplegadas.

Pág: 115

DevelopmentDevelopmentABAP/4ABAP/4

Text elements

Title and headings

Save

Program name RSBBB02J Lang. E

….+….1….+….2….+….3….+….4….+….5….

DEMO/CHAP 02.K Page Layout

Title

….+….1….+….2….+….3….+….4….+….5….

NEW-PAGE

List heading

….+….1….+….2….+….3….+….4….+….5….

Airline Connection from to

Column heading

Date Price Currency Seats

Page 115: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.29.7. Manejando encabezados de listas en reportes

Utilizando el parámetro NO STANDARD PAGE HEADING del estatuto REPORT, se suprime la línea de encabezado (de lista y encabezados de columnas).

Cuando inicia una nueva página, el sistema provoca la ejecución del evento TOP-OF-PAGE. El bloque de procesamiento dentro de este evento es ejecutado.

TOP-OF-PAGE es ejecutado por el primer estatuto WRITE en una nueva página.

3.29.8. Otros estatutos para diseñar listas

Se pueden usar parametros adicionales al estatuto REPORT para definir el formato de una lista:

REPORT <name> ... LINE-SIZE <n> LINE-COUNT <m(p)>.

Pág: 116

REPORT RSBBB02L NO STANDARD PAGE HEADING.TOP-OF-PAGE.FORMAT COLOR COL_HEADING.WRITE: ‘Usuario’(001), SY-UNAME,

‘Sistema’(002), SY-SYSID, 60 SY-DATUM.ULINE.

START-OF-SELECTION.FORMAT COLOR COL_NORMAL.WRITE: /5 ‘Fecha’(003),

20 SY-DATUM...Usuario XYZ Sistema B20 25.10.1995

Fecha 25.10.1995Hora 11:14:29

REPORT RSBBB02Q. LINE-SIZE 132 LINE-COUNT 15(2).

TABLES: SPFLI.SELECT * FROM SPFLI.

WRITE: / SPFLI-CARRID, SPFLI-CONNID, ... .

ENDSELECT.

132

154321

Page 116: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

LINE-SIZE Ancho de linea (Default: ancho actual de la ventana, Minimo: ancho por default ventana)

LINE-COUNT m determina el numero de líneas por página

(Default: infinito)

p determina el número lineas para el pié de página

(Default: 0)

Puedes definir columnas que permanescan estáticas en la lista durante el movimiento horizontal de la lista:

SET LEFT SCROLL-BOUNDARY COLUMN <col>.

Otros estatutos:

NEW-LINE Corresponde a "/" in el estatuto WRITE.

SKIP <n> Inserta n lineas en blanco.

SKIP TO LINE <n> La siguente salida en la linea n

BACK Sin RESERVE:Regresa a la primera línea de la página actual despues del TOP-OF-PAGE

Con RESERVE:Regresa a la primera línea de salida despues de RESERVE

PSITION <n> Se posisiona en la columna n de la linea actual

SET BLANK LINES ON

SET BLANK LINES OFF

ABAP/4 suprime las líneas en blanco que son generadas porque en una línea solo son desplegados caracteres en blanco.

Despues del SET BLANK ON estas líneas aparecen en la lista.

Pág: 117

Page 117: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.30. Pantallas de selección

3.30.1. Especificación de Selecciones en reporte

Si el criterio de selección de la BDL no es suficiente para tus necesidades, puedes definir criterios de selección propios usando la declaración SELECT-OPTIONS generando una línea en la pantalla de selección la cual contiene un texto (Estandard: Nombre de la selección correspondiente) seguido de los posibles valores de entrada para la selección.

El nombre de la selección puede tener hasta ocho caracteres.

Después el parámetro FOR, debe especificar el campo cuyo contenido es verificado otra vez por la entrada de selección.

Para cada selección, ABAP/4 crea una tabla interna con una estructura standard. El sistema llena la tabla con los valores de entrada de la pantalla de selección.

Cuando el SELECT-OPTION se refiere a un campo de una tabla, para el cual la selección dinámica es posible, las selecciones son directamente adelantadas a la base de datos por la selección de datos, esto es, no desea registros no leídos. Si los criterios de selección hacen referencia a otros campos, estos tienen que ser chocados en el reporte usando CHECK.

3.30.2. Validando la selección dentro de un reporte

Si la selección interna de reporte no hace referencia a un campo de una tabla, y la tabla se diseña para selecciones dinámicas, la selección debe ser validada en el reporte usando el estatuto CHECK.

Pág: 118

REPORT RSBBB04A.TABLES: SPFLI, SFLIGHT, SBOOK.SELECT-OPTIONS:

SDEPART FOR SPFLI-DEPTIME,SPRICE FOR SFLIGHT-PRICE

DEFAULT ‘500’ TO ‘1000’...

SIGN OPTION LOW HIGHI BT 500 1000

Tablainterna

SPRICE

SDEPARTSPRICE 500 1000

. . . . . .

Page 118: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Cuando se valida una selección interna de reporte, el contenido actual del campo asignado a SELECT-OPTIONS es verificado si éste iguala la selección ingresada en la pantalla de selección. Si el resultado es negativo, el procesamiento del actual bloque es terminado.

Si el estatuto CHECK produce un resultado negativo, el sistema sale del actual bloque de procesamiento. La rutina de lectura cambia a la siguiente tabla del mismo nivel de jerarquía. Las tablas dependientes de la tabla afectada no se leen.

3.30.3. Defaults para la pantalla de selección.

Base de datos lógica F1S

REPORT RSBBB04D.TABLES: SPFLI, SFLIGHT, SBOOK.

INITIALIZATION.MOVE ‘LH’ TO CARRID-LOW.MOVE ‘I’ TO CARRID-SIGN.MOVE ‘EQ’ TO CARRID-OPTION.APPEND CARRID.MOVE ‘19960101’ TO FLDATE-LOW.MOVE ‘19950531’ TO FLDATE-HIGH.MOVE ‘I’ TO FLDATE-SIGN.MOVE ‘BT’ TO FLDATE-OPTION.APPEND FLDATE.

.

.

Editor: Utilities -> Help -> Logical database F1S

Pág: 119

REPORT RSBBB04A.TABLES: SPFLI, SFLIGHT, SBOOK.SELECT-OPTIONS:

SDEPART FOR SPFLI-DEPTIME,SPRICE FOR SFLIGHT-PRICE

DEFAULT ‘500’ TO ‘1000’....GET SFLIGHT.

CHEK SPRICE....

SFLIGHT SFLIGHT CHECK Negativocon GET SFLIGHT

SBOOK SBOOKCHECK Positivocon GET SFLIGHT

Page 119: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Se pueden establecer conjuntos de valores para la pantalla de selección de la base de datos lógica con el llenado de tablas internas asignadas para la selección de campos. Para saber el nombre de los campos de selección, se escoge Utilities-->Help on... -->Logical database <ldb> en el editor.

Se definen los valores default en el evento INITIALIZATION. Este evento ocurre antes que se despliegue la pantalla de selección.

3.30.4. Parametros como checkboxes.

PARAMETERS <campo> AS CHECKBOX.REPORT RSBBB04F.TABLES: SPFLI, SFLIGHT, SBOOK.

SELECT-OPTIONS: SDEPART FOR SPFLI-DEPTIME,...

PARAMETERS: CURRENCY LIKE SFLIGH-CURRENCYOBLIGATORY,

LUGGAGE AS CHECKBOX,

...GET SFLIGHT FIELDS FLDATE PRICE CURRENCY.

CHECK SFLIGHT-CURRENCY EQ CURRENCY.CHECK SPRICE....

GET SBOOK FIELDS BOOKID CUSTOMID ... .WRITE: /5 SBOOK-BOOKID,

...CHECK LUGGAGE NE SPACE.WRITE: 30 SBOOK-LUGGWEIGHT,

SBOOK-WUNIT.

Se pueden generar parámetros como checkboxes. El parámetro se crea como tipo C de longitud 1. Los valores validos para el campo pueden ser ' ' o ' X ‘.

3.30.5. Parametros como radio buttons.

PARAMETERS <campo> RADIOBUTTON GROUP <grupo>.REPORT RSBBB04G.TABLES: SPFLI, SFLIGHT, SBOOK....PARAMETERS: PRIVAT RADIOBUTTON GROUP CUST,

BUSINESS RADIOBUTTON GROUP CUST....GET SBOOK FIELDS BOOKID CUSTOMID CUSTTYPE.

IF PRIVAT NE SPACE.CHECK SBOOK-CUSTTYPE = ‘P’.WRITE: /5 SBOOK-BOOKID,

Pág: 120

Dep

. time toLocal .

Show luggage weightPrivate

customersBus. customers

Private customersBus.

customers

Dep. timePrice

Dep

. time toLocal

curr

.

Show luggage weight

Private customers

Dep

. time to

Local

curr

.

Show luggage weight

?

x

Price

Page 120: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

SBOOK-CUSTOMID, SBOOK-CUSTTYPE.

ELSEIF BUSINESS NE SPACE.CHECK SBOOK-CUSTTYPE = ‘B’.WRITE: /5 SBOOK-BOOKID,

SBOOK-CUSTOMID, SBOOK-CUSTTYPE.

ENDIF.

Además de definir parámetros como checkboxes, también se pueden usar radio buttons en las pantallas de selección. Se deben combinar radio buttons vinculados para formar un grupo usando el parámetro adicional RADIOBUTTON GROUP (el nombre puede tener mas de 4 caracteres). El usuario puede activar solo un radio button a la vez. Entonces el valor del campo es puesto en ' X '.

3.30.6. Diseño de la pantalla de selección I.

SELECTION-SCREEN BEGIN OF BLOCK <block>… WITH FRAME… TITLE titulo

SELECTION-SCREEN END OF BLOCK <block>.REPORT RSBBB04H.TABLES: SPFLI, SFLIGHT, SBOOK.SELECTION-SCREEN BEGIN OF BLOCK SPFLI WITH FRAME

TITLE TEXT-001.SELECT-OPTIONS SDEPART FOR SPFLI-DEPTIME

DEFAULT ‘100000’ TO ‘130000’.SELECTION-SCREEN END OF BLOCK SPFLI.

SELECTION-SCREEN BEGIN OF BLOCK CUSTOMER WITH FRAMETITLE TEXT-002.

PARAMETERS: PRIVAT RADIOBUTTON GROUP CUST,BUSINESS RADIOBUTTON GROUP CUST.

SELECTION-SCREEN END OF BLOCK CUSTOMER.

Se puede usar el estatuto SELECTION-SCREEN para diseñar el formato de la pantalla de selección. Se pueden insertar textos, líneas en blanco o subrayadas (SELECTION-SCREEN SKIP n, SELECTION-SCREEN ULINE, etc.)

Usando SELECTION-SCREEN BEGIN OF BLOCK <block>, se pude combinar campos relacionados lógicamente y el lugar de la caja usando la adición WITH FRAME. La entrada en el bloque puede ser verificada en el evento AT SELECTION-SCREEN ON BLOCK <block>. Cuando ocurre un error, todos los campos del bloque se declaran listos para entrada otra vez.

Pág: 121

Page 121: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.30.7. Diseño de la pantalla de selección II.

SELECTION-SCREEN BEGIN OF LINECOMMENT <formato> <nombre>POSITION <n>

SELECTION-SCREEN END OF LINEREPORT RSBBB04I.TABLES: SPFLI, SFLIGHT, SBOOK.SELECTION-SCREEN: BEGIN OF LINE

COMMENT 1(11) TEXT-002POSITION 33.

PARAMETERS: PRICE LIKE SFLIGHT-PRICE OBLIGATORY.SELECTION-SCREEN: COMMENT 55(8) TEXT-003,

POSITION 65.PARAMETERS: CURRENCY LIKE SFLIGHT-CURRENCY OBLIGATORY.SELECTION-SCREEN END OF LINE.

Se pueden incluir varios parámetros y comentarios en la línea de salida. Ellos tienen que estar situados en medio de SELECTION-SCREEN BEGIN OF LINE y de SELECTION-SCREEN END OF LINE. Para incluir texto se usa el parámetro COMMENT.

3.30.8. Verificar entrada en la pantalla de selección.

AT SELECTION-SCREENON <campo>ON RADIOBUTTON GROUP <grupo>ON BLOCK <block>

REPORT RSBBB04L MESSAGE-ID ... .TABLES: SPFLI, SFLIGHT.SELECT-OPTIONS: SPRICE FOR SFLIGHT-PRICE,

... .AT SELECTION-SCREEN ON PRICE.

IF SPRICE-LOW LT ‘500’OR SPRICE-HIGH LT ‘500’.

MESSAGE E044.* No flight available at this price!

ENDIF....

Pág: 122

Page 122: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Dentro del bloque de procesamiento AT SELECTION-SCREEN, se puede realizar un dialogo de error concerniente con la pantalla de selección. El evento es activado en PAI (Proces After Input) de la pantalla de selección (esto es, antes de que la pantalla sea procesada.)

Usando el parámetro ON <campo>, se pude hacer referencia a un solo campo específico, cuando un error ocurre, solo esta línea se prepara otra vez para entrada.

Para validar combinaciones de entrada de un grupo lógico, se pude usar el evento AT SELECTION-SCREEN ON BLOCK <block>. Cuando ocurre un error, los campos del bloque se preparan otra vez para entrada.

El evento AT SELECTION-SCREEN ON END OF <campo> ocurre después de que todos los valores de entrada para un campo han sido procesados. (Función Value set.)

Pág: 123

Page 123: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.31. Reportes Interactivos

3.31.1. Introducción

Los reportes interactivos te permiten crear listas secundarias y ventanas. Para llamarlas y desplegarlas en la pantalla, debes usar funciones claves. Puedes thus distribuir toda la información regresada por el reporte cruzando varias pantallas, gradualmente obteniendo más y más información detallada.

Usando funciones claves, el usuario puede también activar :- Una transacción- Otro reporte.

INTERACTIVEREPORTING

SECONDARY LIST WINDOWS

CALLING ATRANSACTION

CALLING A REPORT

3.31.2. Eventos interactivos

Pág: 124

Report RSDEMO00.* Lista básicaSTART-OF-SELECTION

GET ... .

END-OF-SELECTION.

TOP-OF-PAGE..

* Reporte interactivoAT PFnn.

AT LINE-SELECTION.

AT USER-COMMAND

TOP-OF-PAGE DURING LINE-SELECTION.

Page 124: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Tú puedes definir eventos interactivos en reportes ABAP/4. Estos eventos son ejecutados cuando el usuario presiona una llave de función particular o pushbutton. Ellos te permiten la creación de listas secundarias las cuales despliegan información detallada.

El evento AT PF<i> es ejecutado cuando el usuario presiona una tecla de función F<i>.

El evento AT LINE-SELECTION es ejecutado con la función de seleccionar (Chose, doble clic o F2)

En lugar de utilizar el evento de la función relacionada (AT PF<i>), es posible trabajar con el evento AT USER-COMMAND.

El evento TOP-OF-PAGE solo se utiliza cuando creas listas básicas. TOP-OF-PAGE DURING LINE-SELECTION es el evento correspondiente para definir encabezados en listas secundarias.

3.31.3. Selección de línea

El usuario puede seleccionar una línea en una lista y desplegar información detallada de esta línea en una segunda lista, puedes usar el evento AT LINE SELECTION.

Este evento es procesado cuando el usuario selecciona con el cursor una línea válida en la lista y activa la función llave asignada a la función PICK en la definición de interfase. Si no existe una interfase definida, el evento se ejecuta presionando F2 o con doble clic.

Los contenidos de la línea seleccionada se almacenan en el campo de sistema SY-LISEL.

Pág: 125

Carrid Connid Flight date

AA 0169 12121994AA 0192 26081994LH 0108 25011995

Choose

LH 0108 25011995

SY-LISEL

AT LINE-SELECTION.MOVE: SY-LISEL(3) TO SFLIGHT-CARRID.

SY-LISEL+6(4) TO SFLIGHT-CONNID.SY-LISEL+14(8) TO SFLIGHT-FLDATE.

SELECT * FROM SBOOKWHERE CARRID = SFLIGHT-CARRIDAND CONNID = SFLIGHT-CONNIDAND FLDATE = SFLIGHT-FLDATE.

WRITE: SBOOK-PROCE , ...

Page 125: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.31.4. Area “HIDE” HIDE <field> .

Por omisión, el dato de la lista básica no está disponible cuando estás en la lista secundaria.

Sin embargo, la palabra clave HIDE te permite almacenar contenidos de campo para una línea de lista particular en un área especial. Para cada campo, el sistema almacena el nombre de campo y el valor.

El comando HIDE debe seguir inmediatamente la palabra clave WRITE ya que la información es almacenada para cada salida de línea. Puedes también usar el área HIDE para almacenar campos los cuales no aparecen en la lista.

HIDE area . Line SPFLI-CARRID SPFLI-CONNID

1 LH 0400 2 LH 0402 . . . 11 LH 3577

Car Con from to departure LH 0400 FKT NY 10:10:00 LH 0402 FKT NY 13:30:00 . . . LH 3577 ROM FKT 07:05:00

REPORT RSAAA11A. . . . START-OF-SELECTION.

SELECT * FROM SPFLI WHERE . . . .WRITE: SPFLI-CARRID, SPFLICONNID, . . . . HIDE: SPFLI-CARRID, SPFLICONNID, . . . .

ENDSELECT.

3.31.5. Validación

El sistema no debe generar una lista secundaria en una selección de línea invalida del programa.

En el programa de ejemplo el contenido de cada campo es almacenado en el área HIDE y se asigna al valor inicial. Si el usuario selecciona una línea invalida, el sistema no encuentra un valor correspondiente en el área HIDE. Con un resultado negativo de la

Pág: 126

Page 126: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

palabra clave CHECK, el bloque actual procesándose se termina. El sistema no genera una lista secundaria.

REPORT RSAAA11A.

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.31.6. Campos de sistema

Los siguientes campos de sistema son cargados con su valor correspondiente en reportes interactivos,:

SY-CUROW - Posición del cursor (línea)SY-CUCOL - Posición del cursor (columna)SY-CPAGE - Número de la página actualSY-STACO - Primera columna desplegable de la listaSY-STARO - Primera línea desplegable de la lista

Pág: 127

1

2

31

2

3

1

2

3

SY-STARO

SY-STACO

SY-LSIND=0

SY-LSIND=1

SY-LSIND=2

SY-CPAGESY-CUCOL

SY-CUROW

Page 127: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

SY-LSIND - Indice del nivel de la lista desplegadaSY-LISTI - Indice del nivel de lista seleccionadaSY-LILLI - Número de la línea seleccionadaSY-LISEL - Contenido de la línea seleccionada

3.31.7. Manipulación de los Mensajes del Usuario

3.31.7.1. Panorámica

Si el usuario ha introducido valores inconsistentes o ha seleccionado valores sin tener la autorización apropiada, es posible desplegar un mensaje de diálogo con la clave MESSAGE.

Los mensajes de diálogo son almacenados en tabla T100. Están clasificados por lenguaje dos-caracter ID y tres dígitos.

Los mensajes pueden contener más 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 y &v4 en vez de las variables correspondientes.

Puedes crear tus propios mensajes usando ID, los cuales comienzan también con Y (Head-office) o Z (branch).

3.31.7.2. Sintaxis

REPORT <nombrerep> MESSAGE-ID <message-id>...

Annn

Pág: 128

E027 Not authorized

S ID No. Message text

D AT 001 Record &1 &2 does not exist. .. … … D AT 011 Error when updating. .. … … D AT 027 Not authorized

Tabla T100REPORT RSDEMO00 MESSAGE-ID AT.

.

.MESSAGE E027.

Page 128: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

XnnnMESSAGE Ennn WITH <field 1> <field 2> <field 3> <field 4> .

WnnnInnnSnnn

Los mensajes se obtienen con la palabra clave MESSAGE. El lenguaje usado para la tabla T100 es el lenguaje logon. Especificas el mensaje ID después del parámetro MESSAGE-ID de la palabra clave REPORT. Este mensaje ID se aplica al reporte entero. Especificas el número de mensaje en la instrucción MESSAGE.

Justo antes del número de tres dígitos, especificas el tipo de mensaje el cual determina como el usuario reacciona al mensaje.

Después del parámetro WITH, introduce los valores para la variable (arriba de cuatro). Puedes también especificar campos o literales. El campo reemplaza a la variable &i en el mensaje. Si las variables en el mensaje están solo representadas por & o $ estos placeholders son apoyados con los valores de los campos en la palabra clave MESSAGE de acuerdo a su posición.

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 después del número de mensaje en paréntesis. Sin embargo, este ID aplica solo al mensaje actual. Por ejem.: MESSAGE E004(UD).

Si quieres enviar un mensaje dinámico, puedes usar la siguiente sintaxis:

MESSAGE ID <mid> TYPE <mtyp> NUMBER <mno> WITH <campo1> <campo2> <campo3> <campo4>.

Los campos del sistema SY-MSGID, SY-MSGTY y SY-MSGNO contienen el mensaje ID, el tipo de mensaje y el número de mensaje respectivamente, mientras que los campos de sistema SY-MSGV1 a través de SY-MSGV4 contiene los campos para los placeholders.

3.31.7.3. Clasificación

Hay 6 tipos de mensajes :

A Abend Termina el proceso y el usuario tiene que reiniciar la transacción.

X Exit Como mensaje tipo A pero con un sort dump MESSAGE _TYPE_X.

E Error El proceso es interrumpido y el usuario debe asignar un nuevo valor.

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

Pág: 129

Page 129: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

I Information El proceso es interrumpido y el sistema reinicia después de que el usuario ha presionado ENTER.

S Success La información es mostrada en la siguiente pantalla.

Para hacer que la selección de pantalla esté lista para la otra entrada cuando los mensajes E y W ocurran, obtienes estos mensajes en el evento AT SELECTION-SCREEN. 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.

Function call

Selection Screen

A messageX message

Restart

ABEND

Function call

Selection Screen

E messageNew input required

ERROR

Function call

Selection Screen

W messageNew input possible

WARNING

List

Function call

Selection Screen

W message

INFORMATION

List

Function call

Selection Screen

SUCCESS

ListS message

Pág: 130

Page 130: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Pág: 131

Page 131: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.32. Menu Painter

3.32.1. Introducción

Con el Manu Painter se definen las funciones que deberán estar disponibles, en una pantalla con un estado específico y asociado a la barra de menú, barra estándar o la barra de aplicación.

Existen cuatro diferentes tipos de GUI status:

Screen: Corresponde a una pamtalla completa (module pool/Call screen) con barra de manú, botones y campos de entrada y salida.

Dialog box: Para una pantalla tipo caja de dialogo.

List: Es una pantalla completa con barra de manú, botones y funciones estandar de listas.

List in dialog box: Se utiliza para una ventana.

3.32.2. Activando el GUI status y el Título

Usando el SET PF-STATUS se determina el GUI status para una lista. El status activo se almacena en el campo SY-PFKEY.

Pág: 132

Page 132: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Usando el campo SY-PFKEY, se puede controlar el desplegado de encabezados en el evento TOP-OF-PAGE DURING LINE-SELECTION.

Cuando no se asigna un status, el sistema provee el status estandar para la interface. Usando SET-PF-STATUS SPACE, se desactiva el status activo y se asigna el estandar.

Para asignar el título de la pantalla de interfase, se utiliza:

SET TITLEBAR <nombre> WITH campo1 campo2 ... campo9.

3.32.3. Evento AT USER-COMMAND

El evento AT USER-COMMAND, se ejecuta cuando el usuario activa una función en el reporte. El sistema almacena el código de función asignado en el menu painter, en el campo del sistema SY-UCOMM.

Pág: 133

FUN3

REPORT RSBB07A...AT USER-COMMAND.

CASE SY-UCOMM.WHEN 'FUN1'. . . . .

WHEN 'FUN2'. . . . .

WHEN 'FUN3'. . . . .ENDCASE.

AT USER-COMMAND.

SY-UCOMMFUN3

Page 133: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.33. Manejo de reportes, leyendo y cambiando listas

3.33.1. Leyendo líneas en una lista I.

Usando el estatuto READ LINE, se pueden leer líneas de una lista básica o de una secundaria. El sistema coloca las líneas leídas en el campo del sistema SY-LISEL. El número absoluto de esta lista de líneas es almacenado en el campo del sistema SY-LILLI. La información HIDE asignada a la línea es regresada a los campos origen.

Sin un parámetro adicional, el numero de línea <n> se refiere a la lista entera. Cuando se especifica OF CURRENT PAGE, se usa<n> para la dirección de la línea en la pantalla actual. El sistema obtiene el número de página actual del campo del sistema SY-CPAGE. Con la adición OF PAGE<p>, <n> a la línea en la página <p>.

Cuando se intenta leer una línea que no existe, el sistema regresa un código(SY-SUBRC) diferente de 0.

REPORT RSBBB08A.AT ... .:

DO.:

CLEAR: ... . “Inicializa campos HIDEREAD LINE SY-INDEX.IF SY-SUBRC NE 0. EXIT. ENDIF.:WRITE: / SY-LISEL(30).WRITE: / 34 SCARR-CARRNAME,... .:

Pág: 134

READ LINE <n>READ LINE <n>

OF CURRENT PAGEOF CURRENT PAGE

OF PAGE <p>.OF PAGE <p>.

FG FGID Depart.fr.

AA 0117 NEW YORK

1

FG FGID Depart.fr.2

FG FGID Depart.fr.3

FG FGID Depart.fr.10

AA 0117 NEW YORK

5SY-LISEL

SY-LISEL

Área Hide

“SPFLI-CARRID”AA

“SPFLI-CONNID”0017

AA 0017SPFLI-CARRID SPFLI-CONNID

1

56

2930

4647

224225

12345

Page 134: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

ENDDO.

El reporte crea una lista secundaria y da la impresión que esta lista es scrolled. La parte izquierda de la lista es idéntica que la lista básica. La parte derecha de la lista muestra el nombre de la aerolínea y el tipo de avión. El nombre de la aerolínea y el tipo de avión se almacenan por líneas en el área HIDE de la lista básica.

Aquí, el código de retorno no es igual que 0 después de que el sistema ha leído la última línea de la última página.

3.33.2. Selección múltiple de líneas I - Generando la lista básica.

El campo <f> (en este caso MARKFIELD) se despliega como checkbox. Cuando se hace click en MARKFIELD, el sistema coloca una ' X' en el campo.

Pág: 135

REPORT RSBB08B. :DATA: MARKFIELD.GET SPFLI.

WRITE: MARKFIELD AS CHECKBOX,SPFLI-CARRID, ... .

HIDE: SPFLI-CONNID, ... . : :

FG FGID Dep. Arr.

AA 0017 JFK SFOAA 0026 FRA JFKAA 0064 SFO JFKDL 1699 JFK SFO

Page 135: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.33.3. Selección múltiple de líneas II--- Leyendo la lista básica.

El usuario selecciona varias líneas en la columna que está lista para entrada. Todas las líneas se leen con el estatuto READ LINE. Esto tiene la ventaja de que se pueden considerar cambios en la lista.

Cuando se especifica el parámetro FIELD VALUE<f1>INTO<g1><f2>INTO<g2>..... el sistema transfiere el contenido del campo <f1><f2>... de la línea leída a los campos <g1><g2>....

Es opcional especificar INTO<g1>. Si esta parte se omite, el contenido se transfiere de regreso al campo origen <f1>.

El estatuto CLEAR es requerido porque el sistema lee líneas de encabezado las cuales no contienen el campo MARKFIELD.

Siempre cuando se lee el campo del contenido de una línea, el sistema transfiere al mismo tiempo la información HIDE para leer la línea de regreso al campo origen.

3.33.4. Declaración READ LINE.

Pág: 136

REPORT RSBB08B. :AT ...

DO.CLEAR MARKFIELDREAD LINE SY-INDEX

FIELD VALUE MARKFIELD.IF SY-SUBRC NE 0. EXIT. ENDIF.CHECK MARKFIELD NE SPACE. :WRITE: ... .

ENDDO.

FG FGID Dep. Arr.

AA 0017 JFK SFOAA 0026 FRA JFKAA 0064 SFO JFKDL 1699 JFK SFO

READ LINE <n>READ LINE <n>. . .. . .

FIELD VALUE <f1>FIELD VALUE <f1> INTO <g1>INTO <g1> <f2> <f2> INTO <g2>INTO <g2> . . . . . . . . . . . .

Page 136: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Se usa el parámetro INDEX <i> para leer una línea de la lista generada en el nivel i (=SY-LSIND: 0,1,2,...) si el parámetro INDEX esta ausente, el sistema leerá en la lista en la cual el evento fue disparado (=SY-LSIND-1.)

READ CURRENT LINE es útil para releer una línea la cual depende del resultado de una lectura previa. Con esta variante, el sistema comprende desde los campos SY-CPAGE y SY-CUROW cual línea es leída.

Mas que mencionar los campos del sistema hace referencia a la ultima lectura o a la línea posicionada.

Pág: 137

READ LINE <n>READ LINE <n>OF CURRENT PAGEOF CURRENT PAGEOF PAGE <p>OF PAGE <p>INDEX <i>INDEX <i>

FIELD VALUE FIELD VALUE <f1><f1> INTO <g1>INTO <g1> <f2><f2> INTO <g2>INTO <g2> . . .. . . . . . . . .

READ CURRENT LINEREAD CURRENT LINEFIELD VALUE FIELD VALUE <f1><f1> INTO <g1>INTO <g1>

<f2><f2> INTO <g2>INTO <g2> . . .. . . . . . . . .

SY-LILLI

SY-CPAGE

SY-LISTI

SY-LISEL

Número línea

Número página

Nivel de lista

Contenido línea

Page 137: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.33.5. Cambiando lineas en una lista.

Usar la declaración MODIFY CURRENT LINE para editar la ultima línea leída (READ LINE, line selection) en la lista actual (SY-LSIND-1.) Esta variante es útil cuando la línea es modificada precisamente cuando fue leída.

En este programa de ejemplo, el usuario puede seleccionar un campo preparado para entrada (MARKFIELD1.) Accionado por el programa, el contenido de MARKFIELD1 es reemplazado por carácter en blanco y por el campo MARKFIELD2 es transferido el carácter '*’. Las especificaciones de formato son cambiadas por el campo y la línea. El campo MARKFIELD1 no estará mas listo para entrada, y las líneas seleccionadas son reducidas.

3.33.6. Declaracion MODIFY CURRENT LINE - MODIFY LINE.

Pág: 138

REPORT RSBB08C. :AT :

MODIFY CURRENT LINE FIELD VALUE MARKFIELD1 FROM SPACE

MARKFIELD2 FROM ‘*’FIELD FORMAT MARKFIELD1 INPUT OFFLINE FORMAT RESET.

AA 0017AA 0026AA 0064DL 1699

* AA 0017AA 0026

* AA 0064DL 1699

MODIFY CURRENT LINEMODIFY CURRENT LINEFIELD VALUE FIELD VALUE <f1><f1> FROM <g1>FROM <g1>

<f2><f2> FROM <g2>FROM <g2> . . .. . . . . . . . .

FIELD FORMAT <f1>FIELD FORMAT <f1> <<formatformat>. . .>. . . <f2> <f2> <<formatformat>. . .>. . .

. . . . . . . . . . . .LINE FORMAT <LINE FORMAT <formatxformatx>. . .>. . .

SY-LILLI

SY-CPAGE

SY-LISTI

SY-LISEL

Número línea

Número página

Nivel de lista

Contenido línea

MODIFY LINE <n>MODIFY LINE <n>OF CURRENT PAGEOF CURRENT PAGEOF PAGE <m>OF PAGE <m>INDEX INDEX idxidxFIELD VALUE FIELD VALUE <f1><f1> FROM <g1>FROM <g1>

<f2><f2> FROM <g2>FROM <g2> . . .. . . . . . . . .

FIELD FORMAT <f1>FIELD FORMAT <f1> <<formatformat>. . .>. . . <f2> <f2> <<formatformat>. . .>. . .

. . . . . . . . . . . .LINE FORMAT <LINE FORMAT <formatxformatx>. . .>. . .

Page 138: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

Usar la declaración MODIFY CURRENT LINE para editar la ultima línea leída (READ LINE, line selection) en la lista actual (SY-LSIND-1.)

Usando la declaración MODIFY LINE el contenido (posiblemente cambiado) de los campos del sistema SY-LISEL se escribe en la lista. No se debe manipular directamente SY-LISEL, pero siempre se usa la adición FIELD VALUE. Con múltiples líneas de selección, siempre se modifica la lista, en la cual la (primer) línea ha sido seleccionada. La adición INDEX permite al usuario leer en todas las listas( idx corresponde al valor de SY-LSIND), mientras OF CURRENT PAGE and OF PAGE <m> resulte del acceso de la página actual (el contenido de SY-CPAGE) o la página <m>.

La especificación FROM <gl> es opcional. Cuando esta especificación se omite, el sistema transfiere el contenido actual del campo<fl> al campo correspondiente en la lista de línea.

Se puede colocar un campo y especificación de línea usando una variable de parametrización. Esto se refiere a los formatos Input, Intensified, Inverse, Color, Hotspot y Result.

Ejemplo: DATA: COLTYP I VALUE 5,INTTYP I VALUE 1.

MODIFY LINE FIELD FORMAT MARKFIELD1 INTENSIFIED=INTCOLOR=COL...

Pág: 139

Page 139: Introducción al R/3  · Web viewla interface ABAP/4 Open SQL. la interface EXEC-SQL. la interface IMPORT/EXPORT. La declaración ABAP/4 Open SQL puede ser usada sin tomar en cuenta

Programación en ABAP/4____________________________________________________________________________

3.34. Ventanas

3.34.1. El estatuto WINDOW.

Se especifican las coordenadas de la ventana(esquina superior izquierda e inferior derecha.) La secuencia es especificación de columna antes de especificación de línea. El marco es creado automáticamente. Para cumplir con los estándares, el programador escoge en List in dialog box el tipo de estatus GUI. Se pueden crear el título y los push buttons dentro de la ventana.

Usando la adición WITH FRAME TITLE, se puede generar un título para la ventana. Alternativamente, se pude utilizar SET TITLEBAR para colocar títulos para todas las listas. No se tiene que mantener el estatus.

También se pude mandar una lista como un modal dialog box. Un modal dialog box tiene pushbuttons, pero no tiene una barra de menú o una barra de herramientas estándar. El usuario debe mandar una pantalla usando CALL STRING STARTING AT... y una división para la lista de procesamiento en el evento PBO usando LEAVE TOLIST-PROCESSING. Esta técnica es usada primariamente en transacciones de programación.

Pág: 140

REPORT RSBB09A.AT . . . :

WINDOW STARTING AT 10 15ENDING AT 77 22.

WRITE: / SCUSTOM-NAME... . :

:

FG FGID Price Currency…

12345678

15

22

10 77