sap declaracion de datos

16
Declaración de datos 1-16

Upload: liz-guerra

Post on 14-Dec-2015

221 views

Category:

Documents


1 download

DESCRIPTION

abap

TRANSCRIPT

Page 1: Sap Declaracion de Datos

Declaración de datos 1-16

Page 2: Sap Declaracion de Datos

Declaración de datos 2-16

Es recomendable declarar todas los objetos globales o de uso común en el programa dentro de un include “***TOP”.

Page 3: Sap Declaracion de Datos

Declaración de datos 3-16

Lecc ión 1

Declarac ión de var iables

Declaramos una variable mediante la palabra clave DATA. Si queremos declarar varias podemos usar DATA y enumerar las variables separadas por comas.

DATA f. (Donde f es la variable) Si no especificas tipo de referencia el sistema crea la variable tipo C.

Podemos declarar una variable de diferentes formas:

DATA f TYPE type. DATA f LIKE f1. DATA f TYPE LINE OF itabtype. DATA f LIKE LINE OF itab.

DATA f TYPE type.

DATA: Variable (tamaño) TYPE (tipo) VALUE valor SPACE DECIMALS n.

Los tipos de variable que podemos declarar son los siguientes:

- I-> Entero. - N-> Numérico. - P-> Empaquetado. - F-> Coma flotante. - C-> Carácter. - D-> Fecha (AAAAMMDD). - T-> Hora (HHMMSS). - X-> Hexadecimal.

VALUE -> Nos permite dar un valor por defecto a la variable. SPACE -> es un campo predefinido. DECIMALS n -> Solo válido para variables de tipo I, N y F indica el número de decimales que va ha tener el número.

Page 4: Sap Declaracion de Datos

Declaración de datos 4-16

Si no declara el tipo de variable a un campo SAP asume que es de tipo C. DATA f LIKE f1.

El campo f es creado con los mismos atributos que el campo f1, el cual debe declararse previamente.

El campo f1 puede ser el campo de una tabla, un parámetro, una estructura...

Ejemplo:

DATA f LIKE [nombretabla]-[nombrecampo]. DATA f TYPE LINE OF itabtype. El tipo itabtype debe se de tipo tabla interna. El sistema crea un objeto con el mismo tipo de línea de la tabla especificada. Ejemplo:

TYPES TAB_TYPE TYPE STANDARD TABLE OF I WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 10. DATA TAB_WA TYPE LINE OF TAB_TYPE. El objeto TAB_WA ahora tiene los mismos atributos que una línea de la tabla tipo TAB_TYPE.

DATA f LIKE LINE OF itab.

El tipo del objeto itab debe ser una una tabla interna con o sin cabecera. El sistema crea un objeto con el mismo tipo de línea de la tabla especificada.

Ejemplo:

DATA TAB TYPE STANDARD TABLE OF I WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 10. DATA TAB_WA LIKE LINE OF TAB.

El objeto TAB_WA ahora tiene los mismos atributos que una línea de la tabla tipo TAB_TYPE.

Page 5: Sap Declaracion de Datos

Declaración de datos 5-16

Lecc ión 2

Declarac ión de estructuras

Para definir una estructura lo hacemos de la siguiente forma:

DATA: BEGIN OF struc, ... END OF struc.

Cuando definimos el campo estructura struc todos los campos definidos entre "BEGIN OF struc" y "END OF struc" forman parte de la estructura. Si para tu estructura necesitas componentes de otra estructura predefinida, puedes usar INCLUDE STRUCTURE para incluirla aunque es mejor usar LIKE. Ejemplo:

DATA: BEGIN OF PERSON, NAME(20), AGE TYPE I, END OF PERSON. PERSON-AGE = 35. DATA: BEGIN OF PERSON1, NAME2(20) V. INCLUDE STRUCTURE PERSON. DATA END OF PERSON1.

Page 6: Sap Declaracion de Datos

Declaración de datos 6-16

Lecc ión 3

Declarac ión de tablas internas

Podemos declarar una tabla interna de diferentes formas:

DATA itab TYPE itabtype [WITH HEADER LINE]. DATA itab {TYPE tabkind OF linetype|LIKE tabkind OF lineobj} WITH [UNIQUE|NON-UNIQUE] keydef [INITIAL SIZE n] [WITH HEADER LINE]. DATA itab {TYPE TABLE OF linetype|LIKE TABLE OF lineobj}.

Es posible modificar tablas internas usando las siguientes instrucciones: INSERT, APPEND, READ TABLE, LOOP, SORT. Mediante OCCURS y INITIAL SIZE determinamos el número inicial de líneas para la tabla. La tabla es ampliada por el sistema cuando es necesario. Si se especifica WITH HEADER LINE, la tabla es creada con cabecera. De esta forma un campo es creado con el mismo nombre de la tabla. Su tipo es el mismo que el tipo de un registro de la tabla.

DATA itab TYPE itabtype [WITH HEADER LINE]. Itabtype debe ser un tipo de tabla interna definido mediante TYPES. El sistema crea una tabla interna con el tipo especificado. Ejemplo:

TYPES: BEGIN OF STRUC, NAME(10), AGE TYPE I, END OF STRUC, HTAB TYPE HASHED TABLE OF STRUC WITH UNIQUE KEY NAME. DATA : PERSONS TYPE HTAB.

DATA itab {TYPE tabkind OF linetype|LIKE tabkind OF lineobj} WITH [UNIQUE|NON-UNIQUE] keydef [INITIAL SIZE n] [WITH HEADER LINE].

El sistema crea una tabla interna del tipo tabla tabkind. No es posible usar los tipos ANY TABLE or SORTED TABLE.

La construcción de las líneas de la tabla es definida por linetype (si usas TYPE) o por el tipo del objeto lineobj (si usas LIKE)

Page 7: Sap Declaracion de Datos

Declaración de datos 7-16

...INITIAL SIZE n INITIAL SIZE especifica cuantas lineas van a ser creadas inicialmente. Si no es definido, el valor inicial es 0. ... WITH HEADER LINE WITH HEADER LINE crea una línea de cabecera, es decir, un campo con el mismo nombre que la tabla cuyo tipo corresponde con el tipo de las líneas de la tabla. DATA itab {TYPE TABLE OF linetype | LIKE TABLE OF lineobj}. Esta es una sencilla forma de definir tablas internas.

Page 8: Sap Declaracion de Datos

Declaración de datos 8-16

Lección 4

Declarac ión de constantes

Podemos declarar constantes de diferentes formas: CONSTANTS c. ... VALUE [ val | IS INITIAL ]. CONSTANTS c(len) ... VALUE [ val | IS INITIAL ]. CONSTANTS: BEGIN OF crec, ... END OF crec. A diferencia de las variables declaradas mediante DATA, no es posible modificar el valor de una constante una vez declarado. Ejemplo:

CONSTANTS CHAR1 VALUE 'X'. CONSTANTS INT TYPE I VALUE 99. CONSTANTS: BEGIN OF CONST_REC, C(2) TYPE I VALUE 'XX', N(2) TYPE N VALUE '12', X TYPE X VALUE 'FF', I TYPE I VALUE 99, P TYPE P VALUE 99, F TYPE F VALUE '9.99E9', D TYPE D VALUE '19950101', T TYPE T VALUE '235959', END OF CONST_REC.

Page 9: Sap Declaracion de Datos

Declaración de datos 9-16

Lección 5

Declarac ión de tablas de d icc ionar io

Declaramos una tabla de la siguiente forma:

TABLES dbtab.

Al declarar una tabla, se crea una estructura o área de trabajo (work area) en el programa para la tabla, vista o estructura dbtab con el mismo nombre. La estructura de la tabla corresponde exactamente con una linea de la tabla dbtab.

Ejemplo:

TABLES spfli SELECT * FROM spfli WRITE: / spfli-carrid, spfli-connid ENDSELECT.

Imagen: 13.5-1

Page 10: Sap Declaracion de Datos

Declaración de datos 10-16

Lecc ión 6

Declarac ión de t ipos

Podemos declarar tipos de la siguiente forma:

TYPES type. TYPES type TYPE type1. TYPES type LIKE f. TYPES type TYPE LINE OF itabtype. TYPES type LIKE LINE OF itab.

TYPES: BEGIN OF structype, ... END OF structype.

TYPES type. Crea un nuevo tipo llamado type. Si no usas TYPE O LIKE el nuevo tipo es declarado del tipo C por defecto. El nombre de un tipo puede tener hasta 30 caracteres de longitud. El nombre puede solo consistir en caracteres alfanuméricos y también puede usarse el “_”. Recomendaciones para los nombres de los tipos:

- Empezar siempre el nombre por una letra - Usar “_” para separar los componentes del nombre (P. E. NEW_PRODUCT)

TYPES type TYPE type1.

Crea un nuevo tipo del tipo type1. type1 puede ser un tipo predefinido de los que aparecen en la siguiente lista, un tipo que has definido previamente usando TYPES o un tipo del diccionario de datos.

Page 11: Sap Declaracion de Datos

Declaración de datos 11-16

(LD) Longitud por defecto:

Ejemplo

La siguiente declaración define un tipo llamado num_ac del tipo entero. TYPES num_ac TYPE i. TYPES type LIKE type1.

Un nuevo tipo es definido con el mismo tipo que el campo f. F puede ser un campo del diccionario de datos o un campo que ha sido declarado anteriormente.

Ejemplo: TYPES date1 LIKE sy-datum. El tipo date1 es del mismo tipo que el campo sy-datum (Campo del sistema que contiene la fecha actual) Trabajando de esta forma, si se cambia el tipo de datos al que haces referencia, el tipo que defines se cambia automáticamente. Es decir, si en el sistema se cambiase el tipo de sy-datum, se cambiaría automáticamente en nuestro programa.

TYPES type LINE OF itabtype. El tipo especificado itabtype debe referirse al tipo de una tabla interna (con o sin cabecera). El sistema crea un tipo con la misma estructura que una línea de la tabla.

Ejemplo: TYPES tab_type TYPE STANDARD TABLE OF I WITH NON-UNIQUE DEFAULT KEY.

Page 12: Sap Declaracion de Datos

Declaración de datos 12-16

TYPES my_type TYPE LINE OF tab_type.

El tipo my_type, ahora tiene los mismos atributos que una línea de la tabla tipo tab_type, es decir, tipo entero.

TYPES type LIKE LINE OF itab. El objeto itab debe ser una tabla interna (con o sin cabecera). El sistema define un tipo del mismo tipo que una línea de la tabla itab.

Ejemplo: DATA tab TYPE TABLE OF i. TYPES my_type LIKE LINE OF tab.

El tipo my_type tiene los mismos atributos que una línea de la tabla tab, es decir, tipo entero.

TYPES: BEGIN OF structype, ... END OF structype.

Define un tipo estructura donde todos los campos definidos entre " BEGIN OF structype" y "END OF structype" son components de la estructura tipo. Podemos hacer referencia a un componente de forma individual usando el prefijo "structype-". Ejemplo:

TYPES: BEGIN OF PERSON, NAME(20) TYPE C, AGE TYPE I, END OF PERSON.

Page 13: Sap Declaracion de Datos

Declaración de datos 13-16

Lecc ión 7

Declarac ión de t ipos tabla

Podemos definir tipos tabla de la siguiente forma: TYPES itabtype {TYPE tabkind OF linetype | LIKE tabkind OF lineogj}

[WITH [UNIQUE|NON-UNIQUE] keydef] [INITIAL SIZE n]. TYPES itabtype

{TYPE RANGE OF type | TYPES itabtype LIKE RANGE OF f}. TYPES itabtype {TYPE linetype | LIKE lineobj} OCCURS n. El nombre de un tipo tabla puede tener hasta 30 caracteres de longitud. El nombre puede solo consistir en caracteres alfanuméricos y también puede usarse el “_”. Recomendaciones para los nombres de tipos tabla:

- Empezar siempre el nombre por una letra - Usar “_” para separar los componentes del nombre (P. E. NEW_PRODUCT)

TYPES itabtype {TYPE tabkind OF linetype | LIKE tabkind OF lineogj} [WITH [UNIQUE|NON-UNIQUE] keydef] [INITIAL SIZE n]. De esta forma definimos un tipo itabtype como una tabla interna sin cabecera con el tipo tabkind y el tipo de línea linetype (si usas TYPE) o el tipo del objeto referenciado lineobj (si usas LIKE). Las tablas internas sin cabecera consisten en varias líneas o registros cada uno de ellos con la estructura definida por el tipo de línea.

También puedes definir claves para la tabla. Si no lo haces, el sistema crea un tipo de tabla genérica sin claves.

Mediante UNIQUE y NON-UNIQUE puedes especificar si nuestra tabla puede contener 2 o más registros con la misma clave o no. Las siguientes reglas se aplican de esta forma en los distintos tipos de tablas internas.

- STANDAR TABLE:

La clave es siempre NON-UNIQUE por defecto.

- SORTED TABLE:

Page 14: Sap Declaracion de Datos

Declaración de datos 14-16

No hay propiedades por defecto en las tablas tipo SORTED. Si no especificas UNIQUE o NON-UNIQUE, el sistema crea un tipo de tabla genérica sin claves. Puedes usar tipos genéricos para especificar los tipos de parámetros genéricos en subrutinas.

- HASHED TABLE:

No hay propiedades por defecto en este tipo de tablas, sin embargo, debes definir una UNIQUE clave. La opción NON-UNIQUE no está permitida

La opción INITIAL SIZE permite especificar cuanta memoria se debería reservar para la tabla en su creación.

Ejemplo:

Las siguientes declaraciones de tipos definen tablas usando el tipo de línea ‘struc’ y la clave name.

TYPES: BEGIN OF struc, Name(10) TYPE C, Age TYPE I, END OF struc. TYPES: tab1 TYPE STANDARD TABLE OF struc WITH DEFAULT KEY, tab2 TYPE SORTED TABLE OF STRUC struc

WITH NON-UNIQUE KEY name, tab3 TYPE HASHED TABLE OF struc WITH UNIQUE KEY name. A diferencia de estos tipos, los siguientes tipos son genéricos. Esto significa que puedes usarlos para especificar el tipo de un parámetro genérico en una subrutina pero no definir una tabla de este tipo mediante DATA. Existe una excepción para esto y es que el sistema permite usar un tipo tabla genérico en una declaración DATA completando automáticamente la descripción del tipo de acuerdo con las reglas de DATA.

TYPES: GEN_TAB1 TYPE STANDARD TABLE OF struc, GEN_TAB2 TYPE SORTED TABLE OF struc WITH KEY name, GEN_TAB3 TYPE HASHED TABLE OF struc.

TYPES itabtype {TYPE RANGE OF type | TYPES itabtype LIKE RANGE OF f}. De esta forma se crea un tipo tabla del tipo standard tabla. El tipo de la línea es una estructura de la siguiente forma:

Page 15: Sap Declaracion de Datos

Declaración de datos 15-16

SIGN(1) TYPE C OPTION(2) TYPE C LOW TYPE type or LIKE f HIGH TYPE type or LIKE f

TYPES itabtype {TYPE linetype | LIKE lineobj} OCCURS n.

De esta forma definimos un tipo itabtype del tipo STANDARD sin cabecera. Ejemplo:

TYPES itabtype {TYPE STANDARD TABLE OF linetype| LIKE STANDARD TABLE OF lineobj} WITH DEFAULT KEY INITIAL SIZE n.

Page 16: Sap Declaracion de Datos

Declaración de datos 16-16

Lección 8

Declarac ión de F ie ld-Symbol

Podemos declarar Field-symbol de la siguiente forma;

FIELD-SYMBOLS <fs>.

FIELD-SYMBOLS <fs> TYPE type.

FIELD-SYMBOLS <fs> TYPE LINE OF type.

FIELD-SYMBOLS <fs> LIKE s.

FIELD-SYMBOLS <fs> LIKE LINE OF s

Con esta instrucción podemos declarar campos simbólicos <fs>. En tiempo de ejecución, es posible concretar el campo para el field-symbol usando ASSIGN. Todas las operaciones realizadas con el field-symbol afectan directamente al campo asignado a él.

Ejemplos: FIELD-SYMBOLS <PT> TYPE ANY. DATA SFLIGHT_WA TYPE SFLIGHT. ... ASSIGN SFLIGHT_WA-PLANETYPE TO <PT>. WRITE <PT>. DATA SBOOK_WA LIKE SBOOK. FIELD-SYMBOLS <SB> STRUCTURE SBOOK DEFAULT SBOOK_WA. ... WRITE: <SB>-BOOKID, <SB>-FLDATE. Para asignar y desasignar un campo a un field symbol:

ASSIGN f TO <fs>.

UNASSIGN <fs>.

Asignamos un campo f a un field-symbol <fs>. El Fields-symbol apunta directamente al contenido del campo f en tiempo de ejecución, es decir, cualquier cambio en el campo f es visible en <fs> y cualquier cambio en <fs> es visible en f. Si no quieres especificar el tipo para el field-symbol <fs>, este hereda el tipo y los atributos del campo f en tiempo de ejecución. En caso contrario, el sistema checkea si f y <fs> son compatibles en tiempo de ejecución.