Curso Sap ABAP Sintaxis ABAP

FORMACIÓN SAP – Fundamentos ABAP Ejercicios Flujo de ABAP Formación SAP ABAP Documentación de los Módulos de SAP Flujo

Views 283 Downloads 10 File size 153KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

FORMACIÓN SAP – Fundamentos ABAP Ejercicios Flujo de ABAP

Formación SAP ABAP Documentación de los Módulos de SAP Flujo Gestión de ABAP - Sintaxis ABAP

1 Sintaxis en ABAP La sintaxis en ABAP consta de los siguientes elementos:

1.1 1.- Generalidades 1.2 1.1.- Sentencias Un programa en ABAP no es más que un conjunto de sentencias ABAP interrelacionadas entre sí. Cada sentencia comienza con una palabra clave y termina con un punto. PROGRAM FIRST_PROGRAM. WRITE ‘Mi primer programa’.

Este ejemplo contiene dos sentencias, una por línea. Las palabras clave son PROGRAM y WRITE. El programa en cuestión presenta una lista por pantalla, que consiste en la línea “Mi primer programa”. Las palabras clave determinan la categoría de la sentencia. El siguiente diagrama muestra la estructura de una sentencia ABAP. El siguiente diagrama muestra la estructura de una sentencia ABAP:

1.3 1.2.- Formateo de sentencias ABAP ABAP no tiene restricciones en lo que a la forma de disponer las sentencias se refiere, de modo que escribir: PROGRAM TEST. WRITE ‘Esto es una sentencia’. es lo mismo que escribir: PROGRAM TEST. WRITE ‘Esto es una sentencia’. o lo mismo que:

Curso SAP

Página 2 de 19

PROGRAM TEST. WRITE ‘Esto es una sentencia’. Por tanto, la forma de escribir las sentencias se deja a decisión del propio programador, que deberá guiarse por la inteligibilidad de sus programas.

1.4 1.3.- Un caso especial: literales Los literales son secuencias de caracteres alfanuméricos dentro del código de programa que están encerradas entre comillas simples. Si un literal se extiende más allá de una línea, podemos encontrarnos con las siguientes dificultades: • •

Todos los espacios habidos entre ambas comillas se interpretan como parte del literal. Letras en literales dentro de una línea que no está temrinada en comillas simples se interpretan como mayúsculas por el editor ABAP. Para paliar el problema de escribir literales que abarquen más de una línea, ABAP nos brinda el carácter ‘&’, para concatenar varias cadenas de caracteres. Por ejemplo: PROGRAM TEST. WRITE 'Esto es una sentencia’. inserta todos los espacios entre las comillas simples como literales, y convierte las letras a mayúsculas. Por tanto, lo que hemos de hacer es lo siguiente: PROGRAM TEST. WRITE 'This' & ' is ' & 'a statement'. con lo que conseguimos combinar los tres literales en uno sólo.

1.5 1.4.- Sentencias encadenadas ABAP nos permite concatenar sentencias consecutivas con idénticas primeras partes dentro de una sentencia encadenada. Para ello, hemos de escribir la parte común de las sentencias sólo una vez, escribir dos puntos y poner las partes de las sentencias diferencias separadas por comas. Por ejemplo: WRITE SPFLI-CITYFROM. WRITE SPFLI-CITYTO. WRITE SPFLI-AIRPTO. Podemos escribirlo de esta otra forma:

WRITE: SPFLI-CITYFROM, SPFLI-CITYTO, SPFLI-AIRPTO. Aquí podemos ver otro ejemplo: SUM = SUM + 1. SUM = SUM + 2. SUM = SUM + 3.

Curso SAP

Página 3 de 19

SUM = SUM + 4. Chain statement: SUM = SUM + : 1, 2, 3, 4.

1.6 1.5.- Comentarios Los comentarios son textos que se escriben al objeto de ilustrar mejor al lector el propósito y funcionamiento de nuestro programa. Para insertar líneas enteras de comentarios en nuestro programa, habremos de precederlas de un asterisco (*). Si lo que queremos es insertar un comentario en cualquier lugar de una línea de código habremos de precederlo con dobles comillas (“). * Comienzo de la selección START-OF-SELECTION. i_tab-nombre = p_nombre." Entrada de nombre i_tab-direccion = p_direcc. i_tab-telefono = p_telef. i_tab-dni = p_dni.

1.7 2.- Estructura de un programa en ABAP En general, podríamos seguir el siguiente esquema a la hora de escribir un programa en ABAP: • • • • • • •

Sentencia REPORT (sólo si se trata de un programa ON LINE). Declaración de las tablas del diccionario que vayamos a usar. Declaración de las tablas internas. Declaración de variables. Especificación de las pantallas de selección. Declaración de eventos. Subrutinas.

1.8 2.1.- Sentencia REPORT REPORT es la primera sentencia en un programa, y sirve para especificar al sistema que se trata de un listado on line. Esta sentencia tiene las siguientes opciones: • • • • • • •

NO STANDARD PAGE HEADING Suprime la salida de la cabecera estándar de página. De esta forma, visualizaremos los títulos o cabeceras que hayamos creado. LINE-SIZE Número de columnas contenidos en una línea. LINE-COUNT Número de filas contenidas en una línea. DEFINING DATABASE Aquí especificaremos el nombre de la base de datos lógica a la que pertenece nuestro programa, si procede. MESSAGE xx Este parámetro define la clase de mensaje estándar para el programa principal; xx es el número de la librería donde podemos encontrar los mensajes. RESERVE n LINES Si no hay espacio suficiente en la actual página para al menos n líneas, el programa comienza una nueva página para el listado de dichas líneas. El parámetro n puede ser bien una constante o una variable. PAGE-COUNT Aquí especificaremos el número máximo de páginas por listado.

1.9 2.2.- Declaración de tablas del diccionario En esta parte del programa es donde le especificamos al sistema qué tablas del diccionario vamos a usar. Para ello, debemos usar la sentencia TABLES. Ejemplo: TABLES: spfli, mara.

Curso SAP

Página 4 de 19

1.10

2.3.- Declaración de tablas internas

Por definición, una tabla interna bien puede ser un tipo de dato o un objeto de dato, por lo que la implementación en ABAP bien podría ser de esta forma: DATA: BEGIN OF OCCURS , {,..., | INCLUDE STRUCTURE }, END OF .

O bien de estas otras: 1. TYPES itabtype {TYPE tabkind OF linetype LIKE tabkind OF lineobj} [WITH [UNIQUE NON-UNIQUE] keydef] [INITIAL SIZE n]. 2. TYPES itabtype TYPE RANGE OF type. TYPES itabtype LIKE RANGE OF f. 3. TYPES itabtype {TYPE linetype LIKE lineobj} OCCURS n.

Dependiendo de si la definimos como un objeto de dato o un tipo de dato, respectivamente. En la definición de la tabla interna, hemos de tener en cuenta que además se establece una línea de cabecera o área de trabajo.

1.11

2.4.- Declaración de variables

Para la declaración de variables en nuestro programa habremos de usar la sentencia DATA. Para ello, podemos definirlas de tres formas diferentes: •



Directamente, mediante la sentencia TYPE (ver epígrafe 3). En concreto, ABAP distingue entre los siguientes tipos de variable: Tipo Descripción Longitud Valor inicial C

Carácter

1

Espacio en blanco

N

Texto Numérico

1

’00… 0’

D

Fecha ‘YYYYMMDD’

8

‘00000000’

T

Hora ‘HHMMSS’

6

‘000000’

X

Byte (hexadecimal)

1

X’00’

I

Entero

4

0

P

Número empaquetado

8

0

F

Número en coma flotante

8

‘0.0’

Asignando tipo y atributos del campo de una tabla del diccionario a la variable que queramos declarar: DATA: Variable LIKE tabla_dicc-nom_campo.



Y finalmente, declarándola con la estructura de otra: DATA: variable1 LIKE variable2.

De esta manera, variable1 hereda la estructura de variable2. Análogamente, podemos hacer lo mismo con una tabla:

Curso SAP

Página 5 de 19

DATA: i_table LIKE spfli.

1.12

2.5.- Especificación de las pantallas de selección

En ABAP, reciben el nombre de pantallas de selección aquellas en las que el usuario introduce datos de entrada, que serán empleados posteriormente por el sistema para generar una salida. Dentro de una pantalla de selección, podemos estructurar la información a introducir por el usuario en bloques diferenciados, que reciben el mismo nombre dentro de ABAP. En general, y para hacernos una mejor idea, éste sería el aspecto de una pantalla de selección corriente:

En un programa ABAP, podemos implementar tantas pantallas de selección como queramos. La sintaxis para especificar una pantalla de selección sería la siguiente: SELECTION-SCREEN BEGIN OF BLOCK nom-bloque WITH FRAME TITLE nom-titulo. INSTRUCCIONES SELECTION-SCREEN END OF BLOCK nom-bloque.

Esto generaría una pantalla de selección con un único bloque de entrada de datos. No obstante, también es posible generar varias pantallas de selección para un mismo programa mediante las sentencias: SELECTION-SCREEN BEGIN OF SCREEN scr. INSTRUCCIONES. SELECTION-SCREEN END OF SCREEN scr.

Como es lógico, dentro de las screen creadas se pueden ir definiendo los bloques que queramos para el ingreso de datos. Veamos el siguiente ejemplo: TABLES: SPFLI. SELECT-OPTIONS SEL0 FOR SY-TABIX. PARAMETERS PAR0(5).

SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE TEXT-456. SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1 NO INTERVALS. SELECT-OPTIONS SEL1 FOR SY-SUBRC. PARAMETERS PAR1 LIKE SPFLI-CARRID. SELECTION-SCREEN COMMENT /10(20) TEXT-COM. SELECTION-SCREEN END OF BLOCK BL1. SELECTION-SCREEN END OF SCREEN 123. SELECTION-SCREEN ULINE. SELECTION-SCREEN BEGIN OF SCREEN 99. SELECTION-SCREEN PUSHBUTTON 15(25) PUBU USER-COMMAND US01. SELECT-OPTIONS SEL2 FOR SPFLI-CONNID. PARAMETERS PAR2 TYPE I. SELECTION-SCREEN END OF SCREEN 99.

Adicionalmente, la sentencia SELECTION-SCREEN contiene un par de parámetros interesantes para la salida formateada de datos: • •

ULINE SKIP n

Intercala en la salida una línea horizontal. El programa da un salto de n líneas para imprimir la siguiente.

Así mismo, disponemos de las siguientes herramientas para pedir información a través de la pantalla de selección:

1.13

2.5.1.- PARAMETERS

Esta sentencia sirve para intercalar un campo de entrada de datos en la pantalla de selección. Su sintaxis es la siguiente: PARAMETERS: variable LIKE campo-tabla-dicc. Idem variable(longitud) TYPE opciones-campo. Idem variable AS CHECKBOX DEFAULT ‘X’. Idem variable RADIOBUTTON opciones-resto.

En las dos primeras, se trataría de definir la clase de variable que va a contener el dato ingresado por el usuario, bien por la sentencia TYPE o por LIKE, como a continuación se explicará. Las dos últimas sirven para definir las variables de entrada como checkbox o radiobuttons, elementos también muy importantes en la estructuración de cualquier pantalla de selección. Las opciones de campo posibles son las siguientes: • • • • •

Curso SAP

OBLIGATORY Fuerza al usuario a introducir un valor para ese campo de entrada. LOWER CASE Convierte la cadena de caracteres introducida a minúscula. MATCHCODE OBJECT nombre_matchcode Esta sentencia asocia un matchcode creado a la variable de entrada. GROUP n Este parámetro se usa con los radiobutton, agrupándolos funcionalmente. MODIF ID group Esta cláusula indica que el objeto puede modificarse, debiendo éste estar previamente incluido en un grupo.

Página 7 de 19

1.14

2.5.2.- SELECT-OPTIONS

Esta cláusula nos permite trabajar con una serie de valores prefijados de antemano y comprendidos dentro de un rango, que podrán ser seleccionados dentro de la pantalla de selección. Su sintaxis es la siguiente: SELECT-OPTION nombre_selección FOR CAMPO_1

Por lo tanto, campo_1 va a contener todas las posibles entradas. Así mismo, disponemos de una cláusula adicional denominada DEFAULT para proponer valores únicos o intervalos: … DEFAULT ‘XXX’ TO ‘YYY’. … DAFAULT ‘ZZZ’.

1.15

2.6.- Declaración de eventos

En ABAP, los eventos pueden ser de dos tipos: • Síncronos Que suceden con cierta periodicidad. • Asíncronos Que pueden suceder en cualquier momento. Así mismo, podemos distinguir entre los siguientes eventos: • • • •

• • • •

1.16

INITIALIZATON: En este evento, todas las variables de nuestro programa se inicializan. START-OF-SELECTION: este es un evento que se utiliza para la selección de datos de tablas o ficheros, o para la carga de los mismos. END-OF-SELECTION: este evento provoca la finalización de la selección de datos, bien sea desde fichero o desde una base de datos lógica. TOP-OF-PAGE: este evento se ejecuta justo antes de que el primer dato salga por pantalla. Suele utilizarse conjuntamente con la sentencia NO STANDARD PAGE HEADING para el formateo de títulos. Así mismo, si añadimos la instrucción DURING LINE SELECTION, se ejecutará sólo en los listados secundarios provenientes de una acción del usuario en el Report. END-OF-PAGE: este evento se lanza al término de la página actual. AT LINE-SELECTION: que se lanza tras la selección por parte del usuario de una línea cualquiera dentro del listado en un REPORT. AT USER-COMMAND: este evento se lanza cuando el usuario selecciona una tecla de función o ingresa un algún valor en la ventana de comandos. AT SELECTION-SCREEN: este evento se lanza justo después de haber sido procesada la pantalla de selección, en el PAI. Merece la pena destacar, entre sus adiciones, la de ON VALUE-REQUEST FOR campo; esto lanza un proceso en la pantalla de selección que provoca la presentación al usuario de todos los valores posibles que el campo de la variable a la que referencia permite ingresar.

2.7.- Subrutinas

Una subrutina no es más que un trozo de código ligado al resto, pero diferenciado del mismo por razones de funcionalidad. En otros lenguajes de programación puede recibir el nombre de procedimiento. Para la creación de subrutinas, debemos usar la siguiente instrucción: PERFORM nom-subrutina.

Al hacer doble click sobre la instrucción, el editor nos pregunta si queremos crear dicha subrutina. Contestamos que sí, y después nos da la opción de crearla, bien en el propio cuerpo del código del programa principal, o bien en un include aparte.

Curso SAP

Página 8 de 19

En cualquier caso, al margen de lo que hayamos escogido, ABAP genera solo el código correspondiente de la siguiente manera: *----------------------------------------------------------------------* ***INCLUDE ZPRUEBA . *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form PRUEBA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text *