You are on page 1of 10

TIPOS DE DATOS Y OTRAS SENTENCIAS

3.1. TIPOS Y OBJETOS de datos 3.2. Tablas internas 3.3. Sentencias para abandonar bloques de proceso 3.4. SENTENCIAS DECLARATIVAS 3.5. SENTENCIAS DE PROCESAMIENTO DE DATOS 3.5.1. Sentencias de asignacin y conversin de variables 3.5.2. Sentencias de clculo 3.5.3. Sentencias de manejo de strings

3.1. TIPOS Y OBJETOS DE datos:


Pueden declararse tipos de datos (son descripciones que definen los objetos de datos que se declaren luego, y no ocupan memoria) y objetos de datos(entidades fsicas que s ocupan memoria: variables. Tienen un tipo asociado, y se procesan segn el tipo que sea).

Tipos de datos:Por su estructura se clasifican en elementales(predefinidos: C, D, F, I, N, P, T, X. Estos nombres son fijos; y definidos por el usuario: a partir de los anteriores. Su nombre es libre) y estructurados(predefinidos: tablas del Diccionario de Datos (se declaran con TABLES); y definidos por elusuario: field-strings y tablas internas (ambos se declaran con DATA)). Long. Long. Mx. (n defecto char) 1 8 8 4 1 8 6 1 de 1 a 65535 8 8 4 de 1 a 65535 de 1 a 16 6 de 1 a 65535

TIPOS ELEMENTALES: Alfanumrico (Char, string) Fecha(Date) Coma flotante (Float) Entero (Integer) Numricos (Natural) Empaquetados (Packed) Hora (Time) Hexadecimales (Hex)

Tipo C D F I N P T X

Valor inicial SPACE '00000000' 0.0 0 '0...0' 0 '000000' X'00'

La longitud se mide en caracteres, NO en bytes. Variables que no sean del mismo tipo exactamente pueden no ser totalmente compatibles, lo que puede provocar errores de conversiones numricas. Por ej., para operaciones de divisin usar el tipo P (packed), al menos para el recoger el resultado.

Objetos de datos: Se clasifican en los siguientes grupos: o Internos:Literales (hardcodes de texto y nmeros. No se declaran), variables (se declaran con DATA) y constantes (se declaran conCONSTANTS). o Externos: objetos del Diccionario Datos: tablas (se declaran con TABLES), obj. matchcode. o Del Sistema: No se declaran, como SPACE, que es un espacio o una cadena en blanco, y campos y variables del sistema (Ej,: SY-SUBRC: cdigo de retorno de una operacin; SY-UNAME: nombre de usuario; SY-REPID: cdigo de report). o Especiales:parmetros (variables que toman su valor en la pantalla de seleccin. Se declaran con PARAMETERS), y criterios de seleccin (Se declaran con SELECT-OPTIONS).

3.2. TABLAS INTERNAS:


Las tablas internas son las creadas como locales en un programa; no pertenecen al Diccionario de Datos. Slo son visibles localmente en el programa en el que se declaran. Se declaran con: DATA: BEGIN OF nombre_tabla OCCURS nm_entradas, ... END OFnombre_tabla.

Con OCCURS se especifica el nmero de lneas, registros o entradas mximo de la tabla. Sin este parmetro se declaran estructuras, que son cabeceras de tablas, es decir, no tienen entradas. Las tablas internas tienen un registro de cabecera, del mismo formato que cada entrada de la tabla, que es como un buffer que sirve para insertar o extraer entradas de ellas. Para insertar datos, se usa un MOVE normal para cada campo, con lo que se rellena la cabecera con los valores adecuados, y luego un APPENDnombretabla. As se inserta dicha cabecera como una nueva entrada en la tabla). Tambin se puede usar la sentencia COLLECT, que es similar aAPPEND, salvo que si se inserta una entrada cuya clave ya existe, en lugar de crear una nueva, se suman los contenidos de los campos numricos noclave (si no hay, es como APPEND). Para extraer datos, se debe recorrer la tabla (con un bucle LOOP AT nombre_tabla, por ejemplo) hasta llegar a la entrada buscada. Entonces, automticamente ya se tendr en el registro cabecera de la tabla dicha entrada, accesible directamente. Con la sentencia CLEAR se limpia o borra el registro de cabecera (pone todos los campos a su valor inicial), pero no borra ninguna entrada de la tabla. En cambio con REFRESH se borran todas las entradas de la tabla, salvo la cabecera. Con FREE se eliminan la tabla y su cabecera. Conviene controlar con un IF o un CHECK si la tabla est vaca o no antes de intentar imprimirla. Se puede usar la sentencia DESCRIBE TABLE tablaLINES nr_lneas. para guardar en la variable nr_lneas el nmero de lneas de la tabla, y as ver si es cero o no. Para ordenar la tabla, usar la sentencia SORT nombre_tabla BY campo [ opciones]. Ej.:

TABLES kna1. "tabla de los datos maestros de los clientes. DATA: BEGIN OF ztabla OCCURS 100, "declara una tabla con 2 campos y 100 entradas nombre LIKE kna1-name1, cliente LIKE kna1-kunnr. DATA: END OF ztabla. REFRESH ztabla. " borra todas las entradas de la tabla, para asegurar que est vaca CLEAR ztabla. " borra el registro de cabecera de la tabla, por si era un valor basura SELECT * FROM kna1. MOVE kna1-kunnr TO ztabla-cliente. MOVE kna1-name1 TO ztabla-nombre. APPEND ztabla. " para insertar efectivamente en la tabla END-SELECT. IF sy-subrc <> 0. WRITE No se ha encontrado ningn dato. ELSE. LOOP AT ztabla. " bucle que recorre la tabla, para imprimirla entera WRITE: ztabla-nombre, ztablacliente. END-LOOP. ENDIF.

3.3. Sentencias para abandonar bloques de proceso:


Dichas sentencias son: STOP, EXIT, CHECK y REJECT. Son todas incondicionales salvo CHECK. La sentencia CONTINUE vale para pasar a la siguiente vuelta de un bucle.

STOP. Incondicional. Se debe usar slo en el evento START-OF-SELECTION. Su efecto es cancelar todas las selecciones de las tablas de la base de datos, abandonando el evento, y activar el END-OF-SELECTION (siempre lo activa. Si no se desea esto, debe usarse EXIT en lugar de STOP). EXIT. Incondicional. Abandona totalmente el bloque actual o evento (excepto eventos AT...) si no est dentro de ningn bloque, y activa la pantalla de salida. Puede usarse fuera de bucles (acaba subrutinas, acaba eventos, ...) o dentro de ellos, para finalizar estos. CHECK { condicin | tabla_seleccin | SELECT-OPTIONS }. Condicional. Si la condicin es falsa, acaba el bloque de proceso o evento (si no est dentro de ningn bloque) actual; si es cierta, sigue (como si no hubiera

ningn CHECK). Es decir, que si no se pasa el chequeo, se salta a la siguiente vuelta del bucle (funciona como un CONTINUE condicional), o abandona la subrutina, ... (funciona como un EXIT condicional). La opcin SELECTOPTIONS slo puede usarse para CHECKs que vayan tras eventosGET. Su efecto es comprobar que la entrada leda de la tabla cumpla todos los criterios de seleccin asociados. REJECT [ tabla_bd ]. Incondicional. Tras REJECT, se procesa el siguiente evento GET para la misma tabla, abandonando la seleccin actual. Opcionalmente se puede indicar una tabla de la base de datos jerrquicamente superior, con lo cual, tras ejecutar REJECT se procesa el siguiente GET de la tabla especificada (la siguiente vuelta del GET; la vuelta actual se abandona). CONTINUE. Incondicional. Termina la vuelta de un bucle (DO, WHILE), de forma incondicional, pasando a la siguiente vuelta. Normalmente slo se puede usar dentro de un bucle de ese tipo.

3.4. Sentencias DECLARATIVAS:



TABLES tabla. As se declara el rea de trabajo de la tabla del D.D. especificada, para poder usarla. DATA variable [ (long) ] [ TYPE tipo | LIKE campo ] [ DECIMALS nm ] [ VALUE valor ]. Versin de DATA para declarar variables. El tipo por defecto es C (alfanumrico) y la longitud por defecto es la definida as para cada tipo (para los tipoC, longitud 1: un carcter). Otros tipos de datos simples son: I (integer), P (numrico empaquetado), N (numrico no empaquetado), D (date), ... ConLIKE, se toma como tipo el mismo que tenga el campo especificado. Con VALUE se inicializa a la vez que se declara. Ejemplo de sentencias DATAencadenadas:

DATA: texto1 TYPE C VALUE 'X', texto2(4) TYPE C VALUE 'HOLA'.


DATA: BEGIN OF nombre, ... END OF nombre. Versin de DATA para field-strings: Los campos que se declaren en el fieldstring (es como un registro de cadenas) van separados por comas, y en cada uno se indica su tipo. Para acceder a ellos se escribe: nombre_registro nombre_campo, de forma anloga a las tablas. DATA: BEGIN OF nombre_tabla OCCURS nm_entradas, ... END OFnombre_tabla. Versin de DATA para tablas internas (son las creadas como locales en un programa; no pertenecen al Diccionario de Datos. Slo son visibles en dicho programa. Con OCCURS se indica el nmero mximo de entradas. Si se pone 0, el tamao de la tabla no tiene lmite sintcticamente) o estructuras (no llevan OCCURS. Son como cabeceras de tablas, es decir, tablas sin entradas). DATA: BEGIN OF COMMON PART nombre, ... END OF COMMON PART. DATA para bloques de memoria comunes. Esto define una zona comn de memoria que puede ser compartida por varios programas, si se declara en todos

ellos (con el mismo nombre). Dentro de la "common part" se declaran las variables, tablas internas, ... que deban ser compartidas. TYPES tipo [ longitud ] [ TYPE tipo | LIKE campo ] [ DECIMALS nmero ]. Para definir tipos de datos internos al programa. Para tipos estructurados (como registros o tablas. A los campos de ambos se accede con nombre campo) puede usarse TYPES de forma encadenada: TYPES: BEGIN OF nombre, ... END OF nombre. Tambin vale para tipos especficos de usuario. Ejemplo: TYPE cadena(30) TYPE C. Declara un string de 30 caracteres. CONSTANTS cons [ long ] [ TYPE tipo ] VALUE valor | IS INITIAL [ DECIMALS nm ]. Sintaxis similar a la de DATA, pero para constantes simples. El parmetro VALUE es obligatorio. Con IS INITIAL, las constantes alfabticas se inicializan a blanco, y las numricas a cero. CONSTANTS: BEGIN OF nombre, ... END OF nombre. Versin de CONSTANTS para registros constantes (como tablas constantes). Se accede a las componentes de un registro constante como si fuera una tabla interna. FIELD-GROUPS nombre. Un field-group es una agrupacin de campos (es un registro interno de strings). Con esta sentencia se declara el nombre del grupo (conjunto) de campos. Se crea un field-group, an sin campos. Despus, con la sentencia INSERT se declaran los campos de que constar el conjunto (que deben existir previamente), y con la sentencia EXTRACT se dan valores a esos campos. No se reserva espacio de memoria para dichos campos, pues slo sern punteros a las variables correspondientes. No confundir esta sentencia con FIELD-SYMBOLS. INCLUDEnombre. Inserta el cdigo fuente especificado (debe ser un programa tipo I de Include, no puede ser un programa on-line) en el lugar del programa principal donde est esta sentencia INCLUDE. Normalmente habr uno para las declaraciones globales (llamado include TOP) que usen varios programas, otro(s) para los procesos PBO (Process Before Output: se ejecutan antes de mostrar la pantalla de seleccin), otro(s) para los procesos PAI (Process After Input: se ejecutan despus de que el usuario haya hecho las selecciones de dicha pantalla, y haya lanzado el programa), como en un module pool tpico. Para usar en el programa estructuras ya definidas antes, se usa INCLUDE STRUCTURE para definir as tablas internas. Ejemplo:

* Equivale a DATA tabla LIKE namestruct OCCURS n. DATA: BEGIN OF tabla OCCURS n. INCLUDE STRUCTURE namestruct. DATA: END OF tabla.

LOCAL variable. Se usa para declarar variables locales dentro de subrutinas (FORM ... ENDFORM). Si existe una variable global de mismo nombre, se salva su valor al entrar en la subrutina, y se restaura al salir, es decir, que la variable local deja de existir fuera de la subrutina. STATICS var [ long ] [ TYPEtipo ] [ VALUE valor | IS INITIAL ][ DECIMALS num ]. Tambin para variables locales. Se usa slo dentro de FORMs (subrutinas). Funciona como LOCAL, pero con la diferencia de que conserva a la salida de la

subrutina el valor que se le d dentro de sta, en lugar de restaurar el valor previo: pero la variable slo ser visible en los procesos en los que est definida. STATICS: BEGIN OF nombre, ..., END OF nombre. Se usa para declarar un field string dentro de una subrutina o mdulo de funcin. Es similar a un DATA, pero es local al subprograma en el que se defina, y en sucesivas llamadas al mismo conserva su valor (no es destruido como ocurre con las variables locales; es esttico). RANGES tabla_seleccin FOR campo. Define una tabla interna con igual estructura que la de un select-options. Permite usar IN (puede recoger un intervalo de valores). La diferencia es que en la pantalla de seleccin no aparece esta tabla de seleccin, cosa que ocurrira con un SELECT-OPTIONS (as puede drsele valor por programa, en lugar de que lo haga el usuario). Formato de esta tabla:

DATA: BEGIN OF tabla OCCURS 0, SIGN(1) TYPE C, OPTION(2) TYPE C, LOW LIKE campo, HIGH LIKE campo. DATA: END OF tabla.


Tiene 4 campos: El campo SIGN indica si los valores frontera del intervalo (campos LOW y HIGH) estn incluidos (I) o excluidos. El campo OPTIONpuede ser: EQ (=), NE (<>), CP (contiene pattern), NP (no contiene pattern), BT (between), GT (>), LT (<), GE (>=), LE (<=). Los campos LOW y HIGHdefinen el intervalo o rango de valores (si es un valor individual slo se rellena (en) LOW). Esta tabla tendr una entrada por cada intervalo o valor individual definido. Todos estos campos son accesibles y modificables como los de cualquier otra tabla. TYPE-POOL nombre_tipo. Para declarar grupos de tipos. Se acceden con la transaccin SE11 (Diccionario de Datos, que es donde se guarda la estructura del TYPE-POOL). En ellos slo pueden definirse constantes y tipos (con TYPE), y deben nombrarse empezando con el nombre del grupo de tipos seguido de _. Al ser objetos del D.D. podrn ser visibles en todos los programas SAP. Para llamarlos o acceder a ellos desde un programa se usa la sentencia (distinta)TYPE-POOLS. Ejemplo de declaracin:

* Se define el 'TIPO1' como agrupacin de un P y de un I. TYPE-POOL tipo1. TYPES: tipo1_packed TYPE P, tipo1_entero TYPE I.

TYPE-POOLS nombre_tipo. Sentencia que sirve para acceder o llamar a un TYPE-POOL almacenado ya en el D.D. Ejemplo:

* Con esto ya es visible en el programa el 'TIPO1' antes creado. TYPE-POOLS tipo1. * Se usa 'TIPO1' como cualquier otro predefinido DATA: campo TYPE tipo1_entero.

DESCRIBE FIELD var [ LENGTH long ] [ TYPE tipo ] [ COMPONENTS comps ] [ OUTPUT-LENGTH long ] [ DECIMALS decimales ] [ EDIT MASK mascara ]. Sirve para determinar los atributos del objeto dado. Si al intentar acceder a l, ste existe, SY-SUBRC valdr cero; en otro caso, distinto de cero. No confundir esta sentencia con DESCRIBE TABLE, que es anloga pero para tablas internas en lugar de variables simples. CREATE OBJECT objeto clase [ LANGUAGE lenguaje ]. Crea un objeto de la clase especificada. Se usa para declarar objetos OLE (por ejemplo, para asociar un fichero EXCEL a un report Abap/4). FIELD-SYMBOLS<nombre_smbolo> [ STRUCTURE estructura DEFAULT valor ] [ TYPE [ LINE OF ] tipo ] [ LIKE [ LINE OF ] tipo ]. Con esta sentencia se pueden declarar campos simblicos. En ejecucin, con la sentencia ASSIGN, pueden asignrseles campos concretos, de forma dinmica, en lugar de los campos simblicos. Sintaxis: ASSIGN campo1 TO<nombre_smbolo>. (los < >son obligatorios). campo1 puede ser de cualquier tipo. Ms tarde en el programa puede haber otra sentencia como: ASSIGN campo2 TO<nombre_smbolo>., con campo2 de cualquier otro tipo (hay un polimorfismo de datos en ejecuc.). Con la opcin STRUCTURE se asignarn estructuras al field-symbol. Sus campos se accedern con <fs>_campo. Con LINE OF se puede dat una tabla interna. No confundir esta sentencia con FIELD-GROUPS. Ejemplo:

* Con esto ya est declarado el campo simblico FIELD_SYMBOLS < mi_smbolo >. DATA: campo1(2) TYPE C VALUE 'AA', campo2(2) TYPE P VALUE 34. ASSIGN campo1 TO < mi_smbolo >. "Aqu mi_smbolo es de tipo C y vale 'AA' ASSIGN campo2 TO < mi_smbolo >. "Ahora mi_smbolo es de tipo P y vale 34 (polimorfismo)

SELECTION-SCREEN, PARAMETERS, y SELECT-OPTIONS Son sentencias declarativas de la pantalla de seleccin. DESCRIBE TABLE, WRITE TO INDEX, CLEAR y FREE Son sentencias Native SQL. 3.5. Sentencias de procesamiento de datos:

3.5.1. Sentencias de asignacin y conversin de variables:



MOVE campo1[offset1] TO campo2[offset2] [ PERCENTAGE nr ]. MOVEcopia el contenido del campo1 en campo2. Los offset permiten especificar slo una parte del campo origen y/o destino, y se escriben as: +nmero, todo pegado al nombre del campo. En PERCENTAGE puede especificarse un %, es decir, 0 < nr < 100 (si se usa esta opcin, campo1 y campo2 deben ser tipo C. El resultado es que el nr % de campo1 se mueve a campo2 justificado a la izquierda.MOVEhace conversiones de formato, si origen y destino no tienen igual tipo, lo que puede dar lugar a resultados errneos. MOVECORRESPONDING tabla1 TO tabla2. Sentencia similar a MOVE, pero de un registro o cabecera de una tabla a otra igual (o no) en estructura. Si origen y destino no coinciden en todos los campos (en la estructura) slo se mueven aquellos campos que coincidan (por nombre, no por posicin. Por tanto, para evitar errores de conversin, ambos campos de mismo nombre tambin deberan tener el mismo tipo y tamao). WRITE campo1[offset1] TO campo2[offset2]. Similar a MOVE, salvo que el campo2 (destino) siempre debe ser de tipo texto. Por tanto, si el origen no es de texto, ser convertido. Pueden especificarse offsets a la hora de hacer estas conversiones. Con WRITE (campo1) TO no se mueve campo1 (va entre parntesis), sino su contenido (es una indireccin). PACK campo TO campo. Convierte ese campo a su forma empaquetada, por ejemplo, nmeros sin ceros a la izquierda. Puede escribirse el resultado sobre la misma variable, o en otra distinta. UNPACK campo TO campo. La operacin inversa a PACK (es decir, convierte el campo a su forma desempaquetada). Ejemplo, rellenar con ceros a la izquierda un nmero, hasta completar la longitud del campo. CONVERT DATE e INVERT DATE Sentencias de conversin de fechas a formato interno de SAP (poco til). CONVERT TEXT campo1 INTO SORTABLE CODE campo2.

Sentencia que transforma un campo de texto simple a un campo tal que es ms rpidamente ordenable, insertando ndices, claves,

3.5.2. Sentencias de clculo:



ADD campo2 TO campo1. Hace la operacin: campo1 := campo1 + campo2. Las dems sentencias de clculo son similares: en campo1 se almacenar el resultado de la operacin. ADD n1 THEN n2 UNTIL ni GIVING | TO m. Hace la operacin: m := m + n1 + n2 + + ni. Se incluye m como sumando o no dependiendo de si se usa GIVING o TO.

ADD-CORRESPONDING tabla2 TO tabla1. Suma los campos que se correspondan (por su nombre) de 2 registros o tablas, y deja los nuevos valores en el segundo de ellos (tabla1). SUBSTRACT campo2 FROM campo1. SUBSTRACT-CORRESPONDING tabla2 FROM campo1. MULTIPLY campo1 BYcampo2. MULTIPLY-CORRESPONDING tabla1 BY tabla2. DIVIDE campo1 BY campo2. DIVIDE-CORRESPONDING tabla1 BY tabla2. COMPUTEn = expresin. Permite realizar cualquiera de las operaciones aritmticas permitidas: o Operaciones bsicas: +, -, *, /, MOD, ** (exponenciacin). Cubren las sentencias anteriores. o Para todo dato numrico: ABS, CEIL (funcin techo), FLOOR (funcin suelo), SIGN (devuelve el valor del signo: -1, 0, 1), TRUNC (devuelve la parte entera), FRAC (devuelve la parte fraccionaria). o Para coma flotante: COS, SEN, TAN, ACOS, ASEN, ATAN, COSH, SENH, TANH, EXP (en base e), LOG (en base e), LOG10 (en base 10), SQRT.

3.5.3. Sentencias de manejo de strings:

CONCATENATE c1 cn [ SEPARATED BY separador ] INTO campo. Concatena los strings c1 cn (deben ser todos de tipo C), sin conversin de tipos. Devuelve SY-SUBRC 0 si la operacin se ha completado correctamente, y 4 si el campo destino es demasiado pequeo para guardar la concatenacin. SET LOCALE LANGUAGE lenguaje [ COUNTRY pas ][ MODIFIER modificador]. CONDENSE campo [ NO-GAPS]. El campo debe ser tipo C (una cadena), o bien lo trata como si lo fuera (por ejemplo, no incluye en los nmeros el carcter blanco inicial). Junta las palabras de campo dejando entre ellas slo un blanco. Con NO-GAPS se eliminan todos los blancos. REPLACE string1 WITH string2 INTO campo [ LENGTH long ]. Reemplaza (slo la primera ocurrencia) de string1 por string2 en el valor de campo. Ejemplo:

REPLACE 'B' WITH 'hola' INTO campo.

Si "campo" era 'ABCB', el resultado ser 'AholaCB' (reemplaza slo la primera ocurrencia). Devuelve cdigo de retorno 0 si la operacin fue correcta, y 4 si hubo algn error. SPLIT campo AT separador INTO c1 cn | INTO TABLE tabla. Parte campo en n partes, delimitadas por el separador dado, como / por ejemplo. Devuelve SY-SUBRC 0 si los campos c1 cn tienen espacio suficiente, y 4 en caso contrario (los trunca).

SHIFT campo [ BY n PLACES ] [ UP TO campo1 ] [ LEFT | RIGHT ] [ CIRCULAR ][ LEFT DELETING LEADING campo1 ] [ RIGHT DELETING TRAILINGcampo1 ]. Desplaza campo n posiciones (1 por defecto) a la izquierda o derecha, de forma circular o no (segn se especifique) Rellena con blancos al desplazar. TRANSLATE campo [TO UPPER CASE | TO LOWER CASE ] [ USING campo1 ][FROM CODE PAGE g1 TO CODE PAGE g2 ] [ FROM NUMBER FORMATn1TONUMBER FORMAT n2 ]. Segn se especifique, pasa el campo dado a maysculas o a minsculas. OVERLAY campo1 WITH campo2 [ ONLY campo3 ]. El contenido de campo2 sobreescribe a campo1 en todas las posiciones donde campo1 tenga blancos, reemplazndolos por los caracteres de campo2 de las posiciones respectivas (por defecto se reemplazan blancos. Se puede especificar el carcter o caracteres a reemplazar en campo3. Se sustituyen todos los caracteres que se especifiquen en este campo, y se encuentren en campo1, pero sueltos, no formando un string). Devuelve 0 si al menos un carcter ha sido sobrescrito, y 4 en otro caso. Ejemplo:

OVERLAY 'AAAMMBBCCA' WITH 'ZXCVBNMASS' ONLY 'AB'. *Resultado --> 'ZXCMMNMCCS'

SEARCH { campo | tabla } FOR criterio [ ABBREVIATED ][ STARTING AT inicio ][ ENDING AT final ] [ AND MARK ]. Busca en el 'campo' dado el string 'criterio'. Con ABBREVIATED se busca algo que empiece por las mismas letras que 'criterio'. Se puede delimitar la bsqueda especificando las posiciones de inicio y fin con STARTING AT y ENDING AT. Con AND MARK se seala en maysculas la palabra en la que se encontr el string. Devuelve 0 si encontrado (estar en la posicin SY-FDPOS), y 4 en otro caso.

You might also like