Вы находитесь на странице: 1из 16

Declaracin de datos

1-16

Es recomendable declarar todas los objetos globales o de uso comn en el


programa dentro de un include ***TOP.

Declaracin de datos

2-16

Leccin 1
Declaracin de variables
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
DATA
DATA
DATA

f
f
f
f

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

DATA f TYPE type.


DATA: Variable (tamao) TYPE (tipo) VALUE valor SPACE DECIMALS n.
Los tipos de variable que podemos declarar son los siguientes:
-

I-> Entero.
N-> Numrico.
P-> Empaquetado.
F-> Coma flotante.
C-> Carcter.
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 vlido para variables de tipo I, N y F indica el nmero de
decimales que va ha tener el nmero.

Declaracin de datos

3-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 parmetro, 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 lnea 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 lnea 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 lnea 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 lnea de la tabla
tipo TAB_TYPE.

Declaracin de datos

4-16

Leccin 2
Declaracin 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.

Declaracin de datos

5-16

Leccin 3
Declaracin 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 nmero inicial de lneas 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 construccin de las lneas de la tabla es definida por linetype (si usas TYPE) o
por el tipo del objeto lineobj (si usas LIKE)

Declaracin de datos

6-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 lnea de cabecera, es decir, un campo con el
mismo nombre que la tabla cuyo tipo corresponde con el tipo de las lneas de la
tabla.

DATA itab {TYPE TABLE OF linetype | LIKE TABLE OF lineobj}.


Esta es una sencilla forma de definir tablas internas.

Declaracin de datos

7-16

Leccin 4
Declaracin 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.

Declaracin de datos

8-16

Leccin 5
Declaracin de tablas de diccionario
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

Declaracin de datos

9-16

Leccin 6
Declaracin de tipos
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 alfanumricos y tambin 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.

Declaracin de datos

10-16

(LD) Longitud por defecto:

Ejemplo
La siguiente declaracin 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 automticamente. Es decir, si en el sistema se cambiase
el tipo de sy-datum, se cambiara automticamente 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 lnea de la
tabla.
Ejemplo:
TYPES tab_type TYPE STANDARD TABLE OF I WITH NON-UNIQUE DEFAULT
KEY.

Declaracin de datos

11-16

TYPES my_type TYPE LINE OF tab_type.


El tipo my_type, ahora tiene los mismos atributos que una lnea 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 lnea 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 lnea 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.

Declaracin de datos

12-16

Leccin 7
Declaracin de tipos 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 alfanumricos y tambin 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 lnea linetype (si usas TYPE) o el tipo del objeto
referenciado lineobj (si usas LIKE). Las tablas internas sin cabecera consisten en
varias lneas o registros cada uno de ellos con la estructura definida por el tipo de
lnea.
Tambin puedes definir claves para la tabla. Si no lo haces, el sistema crea un tipo
de tabla genrica sin claves.
Mediante UNIQUE y NON-UNIQUE puedes especificar si nuestra tabla puede
contener 2 o ms 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:

Declaracin de datos

13-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 genrica sin
claves. Puedes usar tipos genricos para especificar los tipos de parmetros
genricos en subrutinas.
-

HASHED TABLE:
No hay propiedades por defecto en este tipo de tablas, sin embargo, debes
definir una UNIQUE clave. La opcin NON-UNIQUE no est permitida

La opcin INITIAL SIZE permite especificar cuanta memoria se debera reservar


para la tabla en su creacin.
Ejemplo:
Las siguientes declaraciones de tipos definen tablas usando el tipo de lnea 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 genricos. Esto significa que
puedes usarlos para especificar el tipo de un parmetro genrico en una subrutina
pero no definir una tabla de este tipo mediante DATA. Existe una excepcin para
esto y es que el sistema permite usar un tipo tabla genrico en una declaracin
DATA completando automticamente la descripcin 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 lnea es
una estructura de la siguiente forma:

Declaracin de datos

14-16

SIGN(1)
OPTION(2)
LOW
HIGH

TYPE C
TYPE C
TYPE type or LIKE f
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.

Declaracin de datos

15-16

Leccin 8
Declaracin de Field-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 instruccin podemos declarar campos simblicos <fs>. En tiempo de
ejecucin, 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 ejecucin, 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 ejecucin. En caso contrario, el sistema checkea
si f y <fs> son compatibles en tiempo de ejecucin.

Declaracin de datos

16-16

Вам также может понравиться