Академический Документы
Профессиональный Документы
Культура Документы
Version 1.0
Capa de Aplicación: Es en esta capa donde se ejecuta ABAP, tanto las aplicaciones
desarrollas por SAP como las desarrolladas por los usuarios. Desde esta capa ABAP envía y
recibe datos a la capa de base de datos.
Capa de Base de datos: Este es el nivel más bajo en el modelo, y es donde se administra la
información con la ayuda del sistema de administración de base de datos relacional
(RDBMS). Este nivel almacena no solamente datos maestros y transaccionales, sino
también los programas y metadatos que describen el sistema R/3 son administrados y
almacenados acá.
Con la opción de visualización se puede ver la lista objetos locales y aquellos que se
encuentren en una orden de transporte esperando a ser liberados. Las órdenes que pertenecen a la
clase Workbench incluyen todos los objetos relacionados con el desarrollo de aplicaciones. En el
caso de las órdenes de Customizing, éstas contienen a los objetos generados por los cambios en la
parametrización del sistema.
Existen dos estados posibles para las ordenes, las liberadas que son aquellas ordenes que
están listas para ser transportadas a otro mandante y las modificables que son aquellas ordenes que
están esperando una liberación. Las órdenes liberadas pueden ser visualizadas desde una fecha
específica.
Pantallas
Contiene toda la disposición de pantallas y la lógica de flujo asociada a las mismas.
Normalmente se crea la disposición de pantallas utilizando una herramienta llamada screen
painter o desde el ABAP Workbench. Sin embargo existen pantallas especiales, como el
selection screen en los reportes, que poseen una disposición y lógica que se controla
únicamente a través de sentencias ABAP.
Interfase
Contiene todas las opciones de los menús, la barra estándar de herramientas, la barra
de herramientas de aplicación y los botones. Contiene también los títulos y status.
Elementos de Texto
Estos son dependientes del idioma. Puede ser traducidos directamente desde la
herramienta de mantenimiento de textos o utilizando una herramienta especial de
traducción.
Documentación
La documentación es dependiente del idioma. Es importante recordar escribir la
documentación orientada al usuario. En caso de querer documentar código, se hace a través
de comentarios en el código directamente.
Variantes
Las variantes permiten predefinir valores en la pantalla de selección (selection
screen) de los programas. Esto suele ser muy útil durante los periodos de prueba o para la
ejecución de tareas repetitivas.
El editor ABAP se invoca a través de la transacción SE38, o por la ruta del menú SAP
HERRAMIENTAS->WORKBENCH ABAP->DESARROLLO->SE38 - EDITOR ABAP.
Imagen Inicial
En la imagen inicial del editor se indica el nombre del programa que se desea tratar, y cuenta
con las siguientes opciones en la barra de herramientas:
1. Verificar
Esta opción se encarga de revisar la sintaxis del programa.
3. Ejecutar
Ejecuta el programa.
4. Referencia de Utilización
Las referencias de utilización sirven para identificar otros objetos del
ambiente que utilicen el programa indicado.
5. Análisis de Entorno
Verifica todos los objetos de repositorio a la cual se les hace referencia dentro del
programa.
6. Manual Online
Invoca la ayuda de ABAP disponible en línea en el sistema.
7. Borrar
Elimina el programa, y otros componentes que formen parte del mismo de serle
indicado.
9. Renombrar
Cambia el nombre del programa.
10. Debugging
Ejecuta el programa a través del de la herramienta de Debugging
13. Crear
Crea el programa e invoca el editor de código.
15. Modificar
Invoca el editor de código para modificar un programa que ya existe.
Editor de Código
El editor de Código es el ambiente donde se encuentran las herramientas básicas de
desarrollo y donde se introduce el código ABAP.
1. Objeto Anterior
Se desplaza al objeto anterior cuando existe más de un objeto en la lista de objetos.
2. Objeto Siguiente
Se desplaza al objeto siguiente en la lista de objetos cuando existe más de un objeto en la
lista de objetos.
5. Otro Objeto
Ésta opción permite cambiar el objeto actual por otro que se desee editar. Se divide en varias
categorías de las cuales las más importantes son: diccionario de datos, bibliotecas de clases,
programa y grupo de funciones.
7. Activar
La activación ejecuta una revisión sintáctica, almacena y posteriormente deja disponible al
programa para ser ejecutado en el ambiente del R/3.
8. Verificar (Ejecutar)
Ejecuta el programa.
9. Referencia de Utilización
Las referencias de utilización sirven para identificar otros objetos del ambiente que utilicen
el programa indicado.
13. Ayuda
Invoca la ayuda del sistema.
15. Patrón
Inserta una plantilla a partir de la línea actual. Sobre todo en el caso de la invocación de
funciones o la invocación del método de un objeto, ésta función puede ser de gran utilidad para
conocer los parámetros que pueden ser utilizados.
Los programas en SAP que no pertenecen al estándar deben iniciar su nombre con la letra Z,
distinguiéndose así los programas de usuarios.
En la imagen inicial se digita el nombre del programa y se utiliza el botón CREAR. En éste
momento se deben llenar las propiedades básicos del programa en la ventana de atributos.
Estos son los programas que pueden iniciarse directamente sin código de transacción
y en fondo, desde la transacción SE38 o la SA38.
Contiene partes de programa (FORM) que pueden ser invocadas desde instrucciones
PERFORM externas.
Las clases de desarrollo o paquetes se agrupan a los objetos que pertenecen al ABAP Workbench.
La asignación a una clase de desarrollo se indica en el catálogo de objetos. Los objetos locales
pertenecen a la clase de desarrollo $TMP (Objeto Local) y no son transportables.
Una vez seleccionada la clase de desarrollo, si ésta no es local, el sistema procede a solicitar
una orden de transporte válida a la que se encontrará atado el programa. Esta puede ser una orden
ya existente o una orden nueva. Las órdenes de transporte pueden ser revisadas y editadas por
medio de la transacción SE09.
Los programas tipo REPORT son el tipo más básico, y se utilizan primordialmente para la
generación de reportes, batch inputs3 e interfases. Un ejemplo de un programa tipo REPORT es el
siguiente:
Todos los programas ejecutables deben iniciar con la instrucción REPORT <Nombre del
programa>, el parámetro adicional NO STARNDARD PAGE HEADING elimina del reporte la
línea que imprime el título del reporte.
Para imprimir un texto en la pantalla se utiliza la instrucción WRITE <string>. Una vez
finalizado el programa es necesario activarlo y posteriormente puede ser ejecutado .
LOAD-OF-PROGRAM
Este evento se ejecuta justamente después de que el sistema ha cargado un
programa de tipo 1, M, F o S en memoria. Siendo este bloque ejecutado únicamente
una vez por cada programa en cada sesión interna.
Sintaxis:
LOAD-OF-PROGRAM.
<Código a ejecutar>
INITIALIZATION
Este evento se ejecuta antes de que se muestre la pantalla de selección.
Normalmente es utilizado para inicializar valores clave para la ejecución del
programa.
Sintaxis:
INITIALIZATION.
<inicialización de variables>
Ejemplo:
PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM.
INITIALIZATION.
QUAL_DAY+6(2) = '01'.
QUAL_DAY = QUAL_DAY - 1.
START-OF-SELECTION
Se puede interpretar como el evento principal y es ejecutado justo después
del evento SELECTION-SCREEN.
Sintaxis:
START-OF-SELECTION.
<Código a ejecutar>
Ejemplo:
START-OF-SELECTION.
END-OF-SELECTION
Se procesa después que toda la información se ha leído, y justo antes de que
se muestre la impresión del reporte.
TOP-OF-PAGE
Se ejecuta antes que se imprima información en la primera página de un
reporte. De esta forma permite la creación de una cabecera definida por el
programador siempre que se haya suprimido la cabecera estándar (REPORT
<NOMBRE> NO STANDARD PAGE HEADING).
AT SELECTION-SCREEN
Este evento solamente tiene sentido en los reportes. El evento se ejecuta una
vez que se haya procesado la pantalla de selección. En el caso que se genere un
error todos los campos presentes en la pantalla de selección estarán disponibles
nuevamente para recibir datos.
! Sintaxis:
! ! AT SELECTION-SCREEN {OUTPUT} | {ON <PARAM>}
{ON HELP-REQUEST}FOR <PARAM> |
{ON VALUE-REQUEST FOR <PARA>}
{ON EXIT-COMMAND}.
<Código>.
! Ejemplo:
Parameters: numero(2).
AT SELECTION-SCREEN.
ENDIF.
AT LINE-SELECTION
El evento se ejecuta al oprimir la tecla F2 o al dar doble click sobre una línea
en la pantalla de salida del reporte. El evento asigna a la variable de ambiente SY-
UCOMM el valor PICK. El valor de la linea seleccionada quedará en la variable de
ambiente SY-LISEL.
! Sintaxis:
! ! AT LINE-SELECTION.
Ejemplo:
AT LINE-SELECTION.
C"DIGO DE F U N# DESCRIPCI"N
CI"N
BACK Regresar
P# Hacer Scroll a la p$gina anterior
P## Hacer Scroll a la primera p$gina
P+ Hacer Scroll a la p$gina siguiente
P++ Hacer Scroll a la %ltima p$gina
PL# Hacer Scroll a la primera l&nea de la p$gina
PL#n Hacer Scroll n l&neas hacia atr$s
PL+n Hacer Scroll n l&neas hacia adelante
PNOP Sin efecto
PP# Hacer Scroll una p$gina hacia atr$s
PP#n Hacer Scroll n p$ginas hacia atr$s
PPn Hacer Scroll al inicio de la p$gina n
PRI,PRINT Imprimir
PS## Hacer Scroll a la primera columna
PS++ Hacer Scroll a la %ltima columna
PS# Hacer Scroll una columna a la izquierda
PS#n Hacer Scroll n columnas a la izquierda
PS+ Hacer Scroll una columna a la derecha
PSn Hacer Scroll n columnas a la derecha
PZn Hacer Scroll a la l&nea n
RW Cancelar
C"DIGO DE F U N# DESCRIPCI"N
CI"N
'CTX Llamado a un men% contextual
'EX Salir
'PC Guardar Archivo
'PRI Imprimir
'SC Buscar
'SC+ Buscar siguiente
'SL Buscar en o(cina
'ST Guardar en reporte de $rbol
Los tipos de datos indican el ámbito al que pertenece un objeto de datos. Estos
pueden ser nativos del sistema, o nuevos tipos de datos definidos por el usuario (ya sea
local en un programa o en el diccionario de datos de SAP).
En ABAP/4 existen los siguientes tipos de datos estándar:
TIPO D E S C R I P C I " N T A M A ) O VA L O R I N I C I A L
C Texto *Caracter+ 1 Blanco
N Texto Numérico 1 ’00…0’
D Fecha (AAAAMMDD) 8 ‘00000000’
T Hora (HHMMSS) 6 ‘000000’
X Hexadecimal 1 X’00’
I Entero (Integer) 4 0
P Número Empaquetado 8 0
F Número de Punto Flotante 8 ‘0.0’
String Cadena de caracteres Blanco
Xstring Secuencia de bytes Blanco
Definición de Tipos
Sintaxis:
TYPES <Nuevo tipo> TYPE <tipo>.
Ejemplos:
TYPE-POOLS
Sintaxis:
TYPE-POOLS: <type-pool>.
Ejemplo:
TYPE-POOLS: VRM.
Comentarios
Ejemplos:
*-------------------------------------------------------
* Autor:
* Fecha de creación
* Fecha de Modificación
*-------------------------------------------------------
Ejemplos:
DATA Nombre(40).
Al utilizar la opción LIKE se crea la variable con referencia a otro objeto de datos en
el sistema, heredando así las mismas características.
Ejemplo:
DATA: Nombre(40),
Nombre2 LIKE Nombre.
Constantes
Ejemplos:
Ejemplo:
DATA: contador type i,
Temporal(10),
Fecha LIKE SY-DATUM.
Field Symbols
Los field symbols son nombres simbólicos que apuntan a un área de memoria
durante el tiempo de ejecución. Es posible liberar estos punteros con la instrucción
UNASSING. También es posible preguntar en las cláusulas condicionales si un Field
Symbol esta asignado mediante la condición IS ASSIGN.
Para crear un field symbol se utiliza la siguiente sintaxis:
Sintaxis:
Sintaxis:
ASSIGN <OBJETO> TO <SIMBOLO>.
Ejemplo:
FIELD-SYMBOLS: <E1>.
IF <E1> IS ASSIGN.
UNASSIGN <E1>.
ASSIGN FECHA TO <E1>.
<E1> = '19751130'.
WRITE FECHA.
ENDIF.
Creación de textos
Se puede crear textos dependientes del idioma o símbolos de texto para todos los
programas ABAP. Se asigna un código de tres dígitos <xxx> a cada símbolo de texto. Para
accesarlo en el programa se utiliza de la siguiente manera:
Sintaxis:
text-<xxx>.
Ejemplo:
WRITE text-t01.
Parámetros
Parameters
La instrucción PARAMETERS crea una variable de entrada con las mismas
características que la instrucción DATA. El nombre de cada parámetro no puede
exceder los 8 caracteres.
Sintaxis:
PARAMETERS <param> [{LIKE <referencia> } |
{ TYPE <tipo> } |
{ AS CHECKBOX [USER-COMMAND fcode] }
{ RADIOBUTTON GROUP <grupo>
[USER-COMMAND fcode]} |
{ AS LISTBOX VISIBLE LENGTH vlen
[OBLIGATORY]
[USER-COMMAND fcode] }]
[DEFAULT val]
[LOWER CASE]
[MATCHCODE OBJECT search_help]
[VALUE CHECK]
[OBLIGATORY|NO-DISPLAY].
PARAMETERS: Nombre(40),
MATERIAL LIKE MARA-MATNR,
FECHA TYPE DATUM.
Ejemplo:
Ejemplo:
Ejemplo:
TYPE-POOLS : VRM.
AT SELECTION-SCREEN OUTPUT.
param = 'P_NAME'.
value-key = '1'.
value-text = 'Xioma'.
APPEND value TO values.
value-key = '2'.
value-text = 'Crystalis'.
APPEND value TO values.
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
Select-Options
Select-options indica un parámetro de tipo especial (RANGES) que permite
que el usuario defina un conjunto de valores para el parámetro. El nombre de cada
parámetro no puede exceder los 8 caracteres.
Sintaxis:
SELECT-OPTIONS <parámetro> FOR <referencia>
[OBLIGATORY|NO-DISPLAY]
[VISIBLE LENGTH vlen]
[NO-EXTENSION ]
[NO INTERVALS]
[DEFAULT val1 [TO val2]
[OPTION opt]
[SIGN sign]]
[LOWER CASE]
[MATCHCODE OBJECT search_help]
.
Ejemplo:
Ejemplo:
PARAMETERS: dbtab(30) TYPE c,
column(30) TYPE c.
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
Ejemplo:
Recuadros y Títulos
Sintaxis:
<Parámetros>
Ejemplo:
Report Zejemplo.
*Ejemplo 1
PARAMETERS: P_PARA(20).
*Ejemplo 3
INITIALIZATION.
Agrupación de Ítemes
Sintaxis:
Ejemplos:
REPORT EJEMPLO2.
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN COMMENT (15) W_NOMBRE.
SELECTION-SCREEN ULINE (10).
SELECTION-SCREEN PUSHBUTTON (10) W_BOTON
USER-COMMAND UCOM.
INITIALIZATION.
W_NOMBRE = ‘Comentario’.
W_BOTON = ‘Botón’.
Posicionamiento de Ítemes
Dentro del conjunto de instrucciones posibles para la adición BEGIN OF
LINE se encuentra la opción POSITION. Ésta opción se utiliza para definir la
posición en la línea definida por el BEGIN OF LINE.
Sintaxis:
Ejemplo:
Subrayado
Sintaxis:
Ejemplos:
PARAMETERS: P_PARAM1(10).
SELECTION-SCREEN ULINE 11(3).
PARAMETERS: P_PARAM2(10).
SELECTION-SCREEN ULINE 26(3).
PARAMETERS: P_PARAM3(10).
Sintaxis:
Ejemplo:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (15) W_NOMBRE.
PARAMETERS: P_PARAM1(10).
INITIALIZATION.
W_NOMBRE = ‘Comentario’.
PARAMETERS: P_PARAM1(10).
INITIALIZATION.
W_NOMBRE = ‘Comentario’.
Botones
Los botones son utilizados para ejecutar una función del usuario dentro del
código para interactuar dinámicamente con el usuario.
Sintaxis:
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON fmt name
USER-COMMAND ucom.
SELECTION-SCREEN END OF LINE.
Ejemplo:
TABLES: SSCRFIELDS.
INITIALIZATION.
W_BUTTON = 'Botón'.
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'UCOM'.
MESSAGE S333(S1) WITH 'Se ha oprimido el botón'.
ENDIF.
Sintaxis:
SELECTION-SCREEN FUNCTION KEY <número>.
Ejemplo:
TABLES: SSCRFIELDS.
INITIALIZATION.
Sintaxis:
Ejemplo:
SELECTION-SCREEN SKIP 9.
INITIALIZATION.
W_BUTTON = 'Botón 1'.
W_BUTTO2 = 'Botón 2'.
Sintaxis:
SELECTION-SCREEN BEGIN OF SCREEN <DYNPRO>
TITLE <título>
AS WINDOW.
.
.
.
Ejemplos:
SELECTION-SCREEN BEGIN OF SCREEN 1001 TITLE title
AS WINDOW.
parameters: nombre(10).
select-options: centro for t001-waers.
.
.
.
El siguiente cuadro describe los campos que pueden resultar de uso más frecuente:
C"DIGO DESCRIPCI"N
BATCH Indicador de modo Batch X indica modo de fondo activo.
DATUM Fecha del Sistema
DYNNR Número de la pantalla actual
INDEX Indica la iteración del LOOP
MSGNO Número de Mensaje
MSGTY Tipo de Mensaje (E,I,W)
MSGV1 Línea de Mensaje 1
MSGV2 Línea de Mensaje 2
MSGV3 Línea de Mensaje 3
MSGV4 Línea de Mensaje 4
PAGNO Número de Página
REPID Nombre del programa ABAP
SUBRC Valor de retorno de una sentencia ABAP
TABIX Línea actual en la tabla interna
TCODE Código de la Transacción
TFILL Total de entradas en la tabla interna
UZEIT Hora
TITLE Título del programa
UCOMM Función ejecutada
UNAME ID del usuario
LISEL Valor de la línea seleccionada
La suma
Para realizar una suma se utiliza el símbolo ‘+’ o la instrucción ADD. Sin
embargo se recomienda utilizar la primera forma del ejemplo por ser más eficiente.
Ejemplo:
A = A + 1.
ADD 1 to A.
La Resta
El símbolo ‘-‘ indica la operación de sustracción, así mismo es posible la
utilización de la instrucción SUBSTRACT. Es más eficiente la utilización del
símbolo ‘-‘.
Ejemplo:
A = A – 1.
SUBSTRACT 1 TO A.
La Multiplicación
Ejemplo:
A = A * 2.
MULTIPLY A BY 2.
Para la división se utiliza el símbolo ‘/’ o al igual que en los otros casos
existe una instrucción equivalente en lenguaje natural llamada DIVIDE siendo esta
menos eficiente.
Ejemplo:
A = A / 2.
DIVIDE A BY 2.
El Exponente
Para elevar un valor a una potencia n se utiliza dos veces el símbolo ‘*’
quedando de la siguiente manera: ‘**’.
Ejemplo:
A = A ** 2.
El Residuo4
Para obtener el residuo de la división se utiliza el operador MOD.
Ejemplo:
B = A MOD 3.
El cociente5
Para obtener el cociente de la división se utiliza el operador DIV.
Ejemplo:
B = A DIV 3.
Los operadores lógicos sirven para definir relaciones entre expresiones generando de
esta manera nuevos valores de verdad. En la lógica Booleana solamente existen dos valores:
VERDADERO o FALSO. Los operadores que existen en ABAP son los siguientes: AND,
OR y NOT. Estos operadores respetan las reglas de la lógica Booleana.
AND OR
VALOR VALOR R E S U L# V A L O R V A L O R R E S U L#
1 2 TADO 1 2 TADO
NOT
VALOR R E S U LTA D O
Verdadero Falso
Falso Verdadero
Ejemplo:
Incorrecto:
f1 EQ f2 AND ( f3 EQ f4 ).
Esto corresponde a
( NOT ( f1 EQ f2 ) ) OR ( f3 EQ f4 AND f5 EQ f6 )
OPERADORES RELACIONALES
Los operadores relacionales sirven para determinar el valor de verdad entre dos
operándos. En ABAP existen los siguientes:
OPERADOR DESCRIPCI"N
=,EQ Igual que
<>, NE Diferente que
>, GT Mayor que
<, LT Menor que
>=, GE Mayor o igual que
<+, LE Menor o igual que
BETWEEN Entre
OPERADOR DESCRIPCI"N
CO Contains Only: Es verdadero, si operando1 sólo contiene caracteres
del operando2. Mayúsculas, minúsculas y espacios en blanco son
tomados en cuenta en ambos operandos. Si el operando2 es inicial,
entonces la expresión lógica es falsa, a no ser que operando1 sea
inicial también, en cuyo caso la expresión lógica es siempre
verdadera. Si el resultado de la comparación es negativo, sy-fdpos
contiene el offset del primer carácter en el operando1, que no está
contenido en el operando2. Si el resultado de la comparación es
positivo, sy-fdpos contiene la longitud de operando1.
CN Contains Not Only: Es verdadero si una expresión lógica con CO
(Contains Only) es falsa, es decir si el operando1 no solo contiene
caracteres de operando2, sino también otros caracteres no incluidos
en el operando2. Sy-fdpos es puesto de la misma manera como con
CO. Si la comparación es verdadera, sy-fdpos contiene el offset del
primer carácter en el operando1 que no está contenido en el
operando2. Si la comparación es falsa, sy-fdpos contiene la longitud
de operando1.
CA Contains Any: Verdadero, si operando1 contiene al menos un
carácter del operando2. Mayúsculas, minúsculas y espacios en
blanco son tomados en cuenta para ambos operandos. Si el
operando1 o operando2 son iniciales, la expresión lógica es siempre
falsa. Si el resultado de la comparación es positivo, sy-fdpos contiene
el offset del primer carácter en el operando1 que también está
contenido en el operando2. Si el resultado de la comparación es
negativo, sy-fdpos contiene la longitud del operando1.
NA Contains Not Any: Es verdadero si la expresión lógica utilizada con
CA es falsa, es decir, si el operando1 no contiene ningún carácter del
operando2. Si el resultado de la comparación es negativo, sy-fdpos
contiene el offset del primer carácter en el operando1 que también
está contenido en el operando2. Si el resultado de la comparación es
verdadero, sy-fdpos contiene la longitud del operando1.
Sintaxis:
IF <expresión>.
<Código>.
ENDIF.
Ejemplos:
IF A GT 10.
ENDIF. “Comparación de 10
IF A GT 10.
IF A LT 20.
ENDIF. “Entre 10 y 20
IF str1 CO str2.
“ resultado = verdadero
“ SY-FDPOS = 3
ENDIF.
str1 = 'BD '.
str2 = 'ABCDE'.
IF str1 CO str2.
str1 = 'ABC12'.
str2 = 'ABCD '.
IF str1 CN str2.
“ resultado = verdadero
“ SY-FDPOS = 3
ENDIF.
str1 = 'ABABC'.
str2 = 'ABCD '.
IF str1 CN str2.
... “ resultado = falso
“ SY-FDPOS = 5
ENDIF.
str1 = 'ABcde'.
str2 = 'Bd '.
IF str1 CA str2.
“ resultado = true
“ SY-FDPOS = 1
ENDIF.
str1 = 'ABcde'.
str2 ='bD '.
IF str1 CA str2.
“ resultado = falso
“ SY-FDPOS = 5
ENDIF.
IF str1 NA str2.
“ resultado = falso
“ SY-FDPOS = 0
ENDIF.
str1 = 'ababa'.
str2 = 'AB '.
IF str1 NA str2.
str1 = 'ABcde'.
str2 = 'bC '.
IF str1 CS str2.
“ resultado = verdadero
“ SY-FDPOS = 1
ENDIF.
str1 = 'ABcde'.
str2 = 'ce '.
IF str1 CS str2.
“ resultado = falso
“ SY-FDPOS = 5
ENDIF.
str1 = 'ABcde'.
str2 = 'bC '.
IF str1 NS str2.
“ resultado = falso
“ SY-FDPOS = 1
ENDIF.
str1 = 'ABcde'.
str2 = 'ce '.
IF str1 NS str2.
“ resultado = verdadero
“ SY-FDPOS = 5
ENDIF.
**Ejemplo de CP - Contains Pattern
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABCDEFGH'.
str2 = '*C*F+H'.
IF str1 CP str2.
“ La expresión lógica evaluada con CP es verdadera
“ por lo que ejecutará al código dentro del IF
ENDIF.
str1 = ' ABcde'.
str2 = ' *b*'.
IF str1 CP str2.
“ resultado = verdadero
“ SY-FDPOS = 1
ENDIF.
IF str1 CP str2.
“ resultado = falso
“ SY-FDPOS = 5
ENDIF.
**Ejemplo de NP - NO Pattern
DATA: str1 TYPE string,
str2 TYPE string.
str1 = 'ABCDEFGH'.
str2 = '*C*F+H'.
IF str1 NP str2.
“ str1 coincide con el patron de str2, por lo que
“ el resultado de la evaluacion con NP es falso
ENDIF.
str1 = 'ABDEFCGH'.
str2 = '*C*F+H'.
IF str1 NP str2.
“ str1 no coincide con el patron de str2, por lo que
“ el resultado de la evaluacion con NP es verdadero
ENDIF.
str1 = ' ABcde'.
str2 = ' *b*'.
IF str1 NP str2.
“ resultado = falso
“ SY-FDPOS = 1
ENDIF.
str1 = ' ABcde'.
str2 = ' *#b*'.
IF str1 NP str2.
“ resultado = verdadero
“ SY-FDPOS = 5
ENDIF.
ELSE (ELSEIF)
Las sentencias que se coloquen después del ELSE, serán ejecutadas solo si la
expresión en la sentencia IF no se cumple. Si se desea hacer otra verificación si la primera
no se cumple, se recomienda utilizar ELSEIF. Se puede colocar tantos ELSEIF como se
necesiten.
Sintaxis:
IF <expresión>.
<Código>.
ELSE.
<Código>.
ENDIF.
IF <expresión>.
Ejemplo:
IF A LT 20.
WRITE:/ ‘A es menor que 20’.
ELSEIF A GT 50.
WRITE:/ ‘A es mayor que 50’.
ELSE.
WRITE:/ ‘A es mayor o igual a 20 y menor que 50’.
ENDIF.
CASE
Dependiendo del valor del campo, se ejecutarán diferentes bloques de sentencias de
ejecución. Con la instrucción WHEN especificas las condiciones que se quieren evaluar
sobre dicho campo.
Sintaxis:
CASE f.
WHEN f11 OR f12 ... OR f1n.
...
WHEN f21 OR f22 ... OR f2m.
...
WHEN OTHERS.
. . .
ENDCASE.
Ejemplo:
CASE A.
WHEN 1 OR 2.
WRITE:/ ‘A es igual a 1 o a 2’.
WHEN 3.
WRITE:/ ‘A es igual a 3’.
WHEN OTHERS.
WRITE:/ ‘A tiene un valor diferente a 1,2 o 3’.
ENDCASE.
CHECK
Verifica que la expresión lógica subsecuente es verdadera. Si es así, pasa a la
siguiente sentencia, pero si no, pasa a la siguiente iteración al encontrarse en un DO,
Sintaxis:
CHECK <expresión>.
Ejemplo:
DO.
Contador = contador + 1.
ENDDO.
DO
Sintaxis:
DO N TIMES [VARYING f FROM f1 NEXT f2].
Ejemplo:
DO.
WRITE: / 'SY-INDEX - Begin:', (3) SY-INDEX.
IF SY-INDEX = 10.
EXIT.
ENDIF.
WRITE: 'End:', (3) SY-INDEX.
ENDDO.
DATA COUNT TYPE I.
DO 10 TIMES.
ADD SY-INDEX TO COUNT.
ENDDO.
WHILE
Repite las sentencias encerradas entre el WHILE y el ENDWHILE, mientras se
cumpla la expresión lógica asociada.
Sintaxis:
WHILE <expresión>.
<Código>.
ENDWHILE.
Ejemplo:
SEARCH_ME = 23.
WHILE NUMBER <> SEARCH_ME.
ADD 1 TO NUMBER.
WRITE: / NUMBER.
ENDWHILE.
Sintaxis:
EXIT.
Ejemplo:
DO.
Contador = contador + 1.
IF contador GT 9.
EXIT.
ENDIF.
…
ENDDO.
CONTINUE
Salta de inmediato a la siguiente iteración.
Sintaxis:
CONTINUE.
Ejemplo:
DO.
Contador = contador + 1.
IF contador LT 9.
CONTINUE.
ENDIF.
…
ENDDO
STOP
Esta instrucción solo puede ser utilizada en programas ejecutables y en los siguientes
eventos: AT SELECTION-SCREEN (sin ninguna adicion), START-OF-SELECTION y GET.
STOP sale de inmediato de estos eventos y ejecuta el evento END-OF-SELECTION.
Sintaxis:
STOP.
WRITE
Despliega un valor en la pantalla o en su defecto puede utilizarse para trasladar un
valor entre variables (incluso de diferente tipo).
Sintaxis:
Ejemplos:
FORMAT
Se utiliza para modificar el formato de salida de los textos en el reporte controlando
el color del fondo del texto y la intensidad del mismo.
Sintaxis:
FORMAT <adición> <ON/OFF>.
Ejemplo:
FORMAT INTENSIFIED ON COLOR = 5.
WRITE 'Marca el texto con verde oscuro'.
FORMAT INTENSIFIED OFF COLOR = 5.
WRITE 'Marca el texto con verde claro'.
ULINE
Esta sentencia imprime una línea continua por todo el ancho de la salida del reporte.
Sintaxis:
ULINE.
Ejemplo:
WRITE: / SY-ULINE(80).
SKIP
Sintaxis:
SKIP [N].
Ejemplo:
SKIP 5.
Ejemplo:
Substrings
Para manipular el contenido de un string se utiliza el símbolo ‘+’ para indicar el
desplazamiento en el string (de izquierda a derecha) y entre paréntesis el tamaño del
substring.
Ejemplo:
Fruta = descripción+0(7).
* Fruta obtiene el valor ‘Manzanas’.
Fruta = descripción+9(5).
* Fruta obtiene el valor ‘Peras’.
Concatenate
Permite concatenar cadenas de caracteres de distintas variables o textos.
Sintaxis:
CONCATENATE f1 f2 f3 f4 … fn INTO target.
Ejemplo:
Condense
Permite desplazar toda la cadena de caracteres que se encuentre en una variable
hacia el lado izquierdo, eliminando todos los espacios que ese encuentren antes del primer
carácter.
Sintaxis:
CONDENSE f1.
Ejemplo:
DATA NAME (30).
NAME(10) = ' Xioma'.
NAME+10(10) = 'Consulting'.
NAME+20(10) = ' CA'.
CONDENSE NAME.
WRITE NAME.
Ejemplo:
Sintaxis:
Ejemplo:
DATA FIELD(10).
MOVE 'ABCB' TO FIELD.
REPLACE 'B' WITH 'string' INTO field.
STRLEN
Esta función calcula el tamaño de un string y lo retorna a una variable.
Sintaxis:
STRLEN( <variable> ).
Ejemplo:
SPLIT
Divide un string en varias secciones a partir de una ocurrencia. De tener exito retorna
SY-SUBRC igual a cero.
Sintaxis:
Sintaxis:
CLEAR <variable>.
MOVE
Mueve el contenido de una variable a otra, sin modificar el contenido de la variable
original. No necesariamente la variable de destino es del mismo tipo que la variable de
origen.
Sintaxis:
Ejemplo:
MOVE A TO B.
MOVE A+0(1) TO C.
Esto es equivalente a:
B = A.
C = A+0(1).
MESSAGE
Envía un mensaje al usuario debidamente clasificado en el repositorio de SAP que
aparece en la parte inferior de la ventana, contempla los tipos W (advertencia), E (error), S
(mensaje), A (Abortar transacción), X(Salir con un mensaje de dump), I (informativo) .
Sintaxis:
Ejemplo:
MESSAGE ID ‘BC400’TYPE ‘I’ NUMBER ‘040’ WITH wa_itab-campo1
wa_itab-campo2.
Los mensajes pueden ser traducidos, por ende siempre aparecen en el idioma
en que se haya ingresado el usuario.
SUBMIT
Sintaxis:
SUBMIT <REPORT>
[VIA SELECTION-SCREEN ]
[AND RETURN ]
[WITH.Param1 valor1 WITH param2 valor2...]
Ejemplo:
SUBMIT REPORT01
VIA SELECTION-SCREEN.
FORM
Se utiliza para indicar el inicio del procedimiento con sus parámetros de entrada y
salida. Estos parámetros pueden ser por valor (al utilizar VALUE) o por referencia. Una vez
que se define el procedimiento todas las definiciones que se hacen de constantes y variables
son locales. Esta instrucción debe finalizar con un END FORM.
Sintaxis:
<Código>.
ENDFORM.
Ejemplo:
6 Caja negra es un término que se utiliza para referirse a un sistema que recibe una entrada y retorna una salida,
pero del cual se desconoce su mecanismo interno.
7 La utilización de la SE37 no esta contemplada en este manual
ENDFORM. "suma
Al utilizar el parámetro por valor en el CHANGING el parámetro original no cambia
sino hasta que el procedimiento terminar. Cuando los parámetros que recibe el
procedimiento son por referencia, si se cambia el valor de los parámetros (tanto los del
USING como los del CHANGING) también cambian los valores de los parámetros
originales, aunque el procedimiento no haya finalizado.
PERFORM
Sirve para realizar la invocación de un procedimiento.
Sintaxis:
PERFORM <procedimiento> USING <variables de entrada>
CHANGING <variables de salida>.
Ejemplo:
PERFORM suma USING 2
3
CHANGING total.
CALL
Este comando invoca a una función. Normalmente es más sencillo utilizar la opción
de PATRON en el editor ABAP (SE38) para seleccionar del pool de funciones la función
que se desea utilizar, y éste genera el CALL con los parámetros de entrada y salida.
Sintaxis:
CALL ‘<función>’ <IMPORTING param 1 = valor 1 …
param n = valor n>
<EXPORTING param 1 = valor 1 …
param n = valor n>.
Ejemplo:
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = total
IMPORTING
OUTPUT = salida.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Una vez cargada la estructura en nuestro programa, se deben colocar, a la derecha del
igual “=” los valores que serán enviados a la función y las variables en las que se recibirán
los resultados. Los parámetros opcionales pueden ser omitidos comentando la línea con un
asterisco (*).
Sintaxis:
DEFINE <macro>
...
END-OF-DEFINITION.
Ejemplo:
DEFINE SUMA.
&1 = &2 + &3.
END-OF-DEFINITION.
...
DATA: A(2),
B(2),
C(2).
START-OF-SELECTION.
SUMA A B C.
Para crear un programa tipo include se puede utilizar la transacción SE38 o desde el
ABAP Workbench (SE80) . Se de indicar en el tipo que el programa es de include.
Los programas tipo include puede ser muy útiles cuando se desea crear librerias de
procedimientos, macros, definición de datos, etc.
Sintaxis:
Ejemplo:
INCLUDE ZINC_EJEMPLO.
Registros
Un registro se puede definir como una variable subdividida en varios campos. Para acceder
a cada campo se utiliza el nombre del registro, el símbolo ‘-‘ y el nombre del campo.
Para definir el registro se utiliza la instrucción DATA con la opción BEGIN OF.
Sintaxis:
DATA: BEGIN OF <nombre>,
<Campo 1> <[TYPE] [LIKE]> <Tipo>,
…
<Campo n> <[TYPE] [LIKE]> <Tipo>,
END OF <nombre>.
Ejemplo:
Start-of-Selection.
MOVE-CORRESPONDING
Sintaxis:
Ejemplo:
origen-campo1 = 'Hola'.
origen-campo2 = 'Mundo!'.
origen-campo3 = 1701.
origen-campo4 = 'NCC'.
destino-campo8 = 'NCC-74656'.
Tablas Internas
Las tablas internas se utilizan para almacenar los datos provenientes de la base de datos o de
información que ha sido generada en tiempo de ejecución. Se puede definir dos tipos de tablas
internas:
Sintaxis:
Ejemplo:
Start-of-Selection.
Camisa-NrMaterial = 60001.
Camisa-color = 1. “Color Blanco
Camisa-Talla = ‘M’.
Camisa-Precio = 4000.
Camisa-PrecioUSD = Camisa-Precio / TipoCambio.
APPEND Camisa.
Sintaxis:
DATA: <ITAB> [LIKE | TYPE] <estructura> [OCCURS <n>]
WITH HEADER LINE.
Ejemplos:
DATA: ITAB LIKE MARA OCCURS 0 WITH HEADER LINE.
• Sin Cabecera: Es un tipo de tabla interna que esta compuesto únicamente de cuerpo y
su definición se hace con respecto a un tipo definido previamente o a una estructura ya
existente. Sin embargo es necesario definir un registro de cabecera para poder agregar o
leer registros de la tabla.
Sintaxis:
Ejemplo:
Start-of-selection.
C_Miembro-Nombre = ‘Jose’.
C_Miembro-Edad = 20.
Append C_miembro to Miembro.
Las tablas internas pueden ser de 3 tipos: estándar (que son las que tratamos en este
manual), Sorted y Hashed. Estos tres tipos de tablas puede ser declarados de la siguiente manera:
Existen varias instrucciones que se utilizan para la manipulación de las tablas internas, a
continuación se van a describir las más comunes.
Refresh
Borra todo el contenido de la tabla interna.
Sintaxis:
REFRESH <ITAB>.
Append
Agrega un registro a una tabla interna con los valores que se encuentren en la
cabecera o en un registro que corresponda con la estructura de la tabla.
Sintaxis:
Ejemplo:
APPEND C_Miembro TO Personas.
Cuando las tablas internas son del tipo SORT o HASHED no es posible utilizar la
instrucción APPEND, en su lugar debe utilizarse la instrucción INSERT.
Delete
Esta instrucción borra un registro de la tabla interna.
Sintaxis:
Modify
Se utiliza para actualizar los cambios realizados al registro de la cabecera en
la tabla interna.
Sintaxis:
MODIFY <ITAB>.
Collect
El COLLECT asume que todos los valores alfanuméricos de izquierda a
derecha, hasta conseguir un valor numérico, son la llave de la tabla interna. Y
empieza a acumular los valores numéricos que se encuentran a la derecha de la llave.
Si el registro no existe lo agrega a la tabla interna.
Sintaxis:
COLLECT <ITAB>.
Ejemplo:
COMPANY-NAME = 'Duck'.
COMPANY-SALES = 10.
COLLECT COMPANY.
COMPANY-NAME = 'Tiger'.
COMPANY-SALES = 20.
COLLECT COMPANY.
COMPANY-NAME = 'Duck'.
Describe
La función de esta instrucción es obtener el número de registros que contiene
una tabla interna y almacenarlo en una variable.
Sintaxis:
Ejemplo:
SORT
Se utiliza SORT para ordenar una tabla interna indicándole que campos debe
asumir como referencia para dicho ordenamiento.
Sintaxis:
Ejemplo:
SORT camisa.
*Aquí al no indicarle criterios la ordena por todos los
*campos exceptuando los de tipo: I, F y P de forma ascendente.
Sintaxis:
Ejemplos:
LOOP AT ITAB INTO WA_ITAB.
WRITE WA_ITAB-CAMPO1.
ENDLOOP.
AT
El AT dentro de un LOOP permite evaluar ciertas circunstancias durante la
iteración como lo son la primera iteración, cuando cambia un valor en un campo de
la tabla interna, cuando se encuentra en la última ocurrencia de un valor en la tabla
interna o cuando se encuentra en la última iteración.
Sintaxis:
Ejemplo:
LOOP AT itab.
AT FIRST.
WRITE: ‘Primera iteración’.
ENDAT.
ENDLOOP.
READ
El Read nos permite acceder a un registro de la tabla interna a través de un
índice o de una llave. Si se utiliza la opción de TABLE KEY deben indicarse todos
los campos que conforman la llave de la tabla.
Sintaxis:
READ TABLE <ITAB> INTO <variable>
[WITH KEY <campo1> = <valor1> <campo2> = <valor2> ...]
[WITH TABLE KEY <campo1> = <valor1> ...]
[INDEX <índice>].
Ejemplos:
READ TABLE ITAB INTO WA_ITAB WITH TABLE KEY CAMPO1 = 100
CAMPO2 = ‘ALFA’
CAMPO3 = SY-DATUM.
IF SY-SUBRC EQ 0.
WRITE WA_ITAB-CAMPO4.
ENDIF.
Rangos
CAMPO DESCRIPCI"N
LOW Valor de la cota inferior, el tipo de este campo se define al definir el rango.
HIGH Valor de la cota superior, el tipo de este campo se define al definir el rango.
OPTION Indica que operador relacional (EQ,LT,BT,...) define el comportamiento del
subrango.
SIGN Indica si el subrango es inclusivo o exclusivo. Los valores son: I (Inclusivo) y
E (exclusivo)
Xioma Consulting ! ABAP WORKSHOP" 82
Cuando se utiliza el campo SIGN diferente de BT (entre), el valor que se almacena
en HIGH es ignorado, y la comparación se realiza únicamente contra el campo LOW.
Sintaxis:
RANGES: <nombre> FOR <Tipo>.
Ejemplo:
RANGES: FECHA FOR SY-DATUM.
FECHA-LOW = 200510010.
FECHA-HIGH = ''.
FECHA-SIGN = 'E'.
FECHA-OPTION = 'EQ'.
APPEND FECHA.
FECHA-LOW = 20051001.
FECHA-HIGH = 20051201.
FECHA-SIGN = 'I'.
FECHA-OPTION = 'BT'.
APPEND FECHA.
IF SY-DATUM IN FECHA.
WRITE:/'El día de hoy esta entre el 1ero de octubre',
' y el 1ero de diciembre.'.
WRITE:/'Y no es 10 de octubre'.
ENDIF.
Tablas Transparentes
Una tabla transparente es aquella tabla que, estando definida en el diccionario de datos, tiene
una relación uno a uno contra su equivalente en la base de datos (mismo nombre de tabla, mismos
nombres de campos y mismo número de registros). El diccionario de datos puede ser definido
como una interfase a datos (información, programas, pantallas, etc) que son independientes de la
plataforma que se este usando, y que se encuentran almacenados en una base de datos (Oracle,
SQL Server, Informix, etc). En SAP existen otros tipos de tablas en el diccionario como las Pooled
tables y las Cluster tables.
Existe en SAP dos formas de acceder al diccionario de datos, la transacción SE16 que se
utiliza para visualizar datos en las tablas del diccionario, y la SE11 que contiene todas las
herramientas necesarias para manipular el diccionario de datos.
Una vez que se han definido todos los campos que tendrá la tabla, es
importante asignar cual es la tabla de referencia o verificación que puedan tener
valores como moneda y cantidad. En algunos casos, como la moneda, establecer
esta relación es obligatorio.
TABLES
Se utiliza para declarar las tablas del diccionario de datos que se desean
utilizar en un programa.
Sintaxis:
TABLES: <tabla 1>, <tabla 2>, …, <tabla N>.
Ejemplo:
TABLES: T001,
MARA.
Insert
Para añadir registro a registro o varios registros a la vez. En los dos casos se
puede usar la orden INSERT pero con diferentes opciones.
REGISTRO A REGISTRO
Sintaxis:
VARIOS REGISTROS.
Se puede guardar una tabla interna en una tabla de diccionario con una sola
instrucción sin tener que hacer ningún ciclo.
Sintaxis:
Delete
Con ésta instrucción se borran los registros de la tabla. Existen tres formas
distintas para hacerlo.
UN SOLO REGISTRO.
Sintaxis:
DELETE <tabla> FROM <estruc>.
VARIOS REGISTROS
Sintaxis:
Sintaxis:
UPDATE
UN SOLO REGISTRO
Para modificar un sólo registro utilizamos la orden UPDATE.
Sintaxis:
Sintaxis:
En el SET se colocan los campos a modificar con sus nuevos valores, o sea,
S1 a Sn pudiéndose desglosar de la siguiente manera:
f = n
f = f+g
f = f–g
Estas rutinas almacenan los datos añadiéndoles ceros hasta completar 18 posiciones.
Una vista es una visión lógica de una ó más tablas, es decir, no se almacena físicamente,
sino que se deriva de una o más tablas. Para crear una vista se utiliza la transacción SE11.
Siempre que sea posible es importante tomar campos que sean parte de la llave primaria
para establecer la relación entre las tablas, y siempre indicar el campo MANDT en tablas que son
dependientes de mandante.
Con el botón RELACIONES es posible invocar relaciones predefinidas en el sistema para
las tablas que se hayan indicado.
Las estructuras son objetos de datos globales en el sistema que estan formados por varios
campos. Sin embargo no permiten el almacenamiento de información en la base de datos. Su
creación es a través de la transacción SE11.
Ayudas de Búsqueda
Vista de Actualización
Las vistas de actualización se generan desde la transacción SE11. Se debe seleccionar la
tabla transparente a la que se le desea crear la vista de actualización, y en el menú seleccionar
Utilidades->Generador actualiz tab. Es importante que la tabla en las opciones de entrega permita
la actualización y que con anterioridad se tenga claro cual es el grupo de funciones que se utilizará
para generar la vista. La creación de grupos de funciones será explicada más adelante.
Transferencia Local
La transferencia de archivos planos de manera local se refiere a la creación o lectura
de archivos en el servidor SAP. Se suele establecer una ruta donde se colocan los archivos
de entrada y los archivos de salida, que posteriormente pueden ser extraídos por el medio
del sistema operativo o por medio de FTP.
En este caso siempre es necesario realizar una apertura del archivo, luego ejecutar la
transferencia del contenido y finalmente cerrar el archivo.
Open dataset
Esta instrucción hace la apertura del archivo. De ser exitoso la instrucción
retornará 0 en la variable SY-SUBRC, sino retornará 8. El máximo de archivos que
pueden estar abiertos en una sesión es de 100.
Sintaxis:
OPENDATASET<dataset>FOR{INPUT|OUTPUT|APPENDING|UPDATE}
IN{BINARYMODE|TEXTMODE}
ENCODINGDEFAULT.
Close dataset
Close dataset cierra un archivo.
Sintaxis:
CLOSE DATASET <dataset>.
Transfer
La instrucción TRANSFER envía el contenido de un objeto de datos a un
dataset abierto.
Sintaxis:
TRANSFER <Objeto de datos> TO <DATASET>.
Ejemplo:
DATA: file TYPE string VALUE `test.dat`.
Read Dataset
READ permite la lectura de un dataset abierto. En la variable SY-SUBRC
queda el valor 0 después de una lectura exitosa y 4 cuando se leyó el último registro
del archivo o si se trata de leer después del EOF.
Sintaxis:
Ejemplo:
Delete Dataset
Se utiliza para eliminar un archivo. No requiere de un OPEN, y
retornará 0 si logró borrar el archivo ó 4 en caso de no lograrlo.
Sintaxis:
Transferencia Remota
En el caso de la transferencia remota, se asume que la creación de los archivos o la
carga de los mismos se hace desde la terminal desde la cual se esta ejecutando el SAP GUI.
Para esto se utilizan funciones de SAP que se hacen cargo de la apertura, lectura y cierre de
los archivos dejando el contenido de éstos en una tabla interna.
GUI_DOWNLOAD.
Esta función descarga el contenido de una tabla interna a un archivo plano.
Los parámetros más importantes son:
Ejemplo:
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
GUI_UPLOAD.
Esta función carga el contenido de un archivo plano a una tabla interna. Los
parámetros más importantes son:
Ejemplo:
EXPORTING
FILENAME = ARCHIVO
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = ITAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
F4_FILENAME
Esta función se puede utilizar en la pantalla de selección de un programa tipo
report en el evento AT SELECTION-SCREEN ON VALUE-REQUEST FOR
<campo>. Reemplazando así la ayuda de búsqueda por una ventana que permita
buscar el nombre del archivo en el computado remoto.
.
Select
Esta es una de las instrucciones más importantes en el lenguaje, y es la que permite
la manipulación de la información de la base de datos. El select se comporta como una
instrucción de iteración, correspondiendo cada ciclo con uno de los registros seleccionados
en la ejecución. Si la búsqueda fue exitosa SY-SUBRC obtiene el valor de cero.
Sintaxis:
Ejemplo:
ENDSELECT. “ztest
El símbolo * es un comodín que indica que todos los campos de la tabla son seleccionados.
Indicar solo los campos que se utilizaran puede mejorar el rendimiento de un select.
Where
La opción WHERE en el SELECT sirve para especificar un filtro en la selección de
información
Sintaxis:
<código>.
ENDSELECT.
Ejemplo:
ENDSELECT. “ztest
Sintaxis:
Ejemplo:
SELECT SINGLE * FROM ztest.
Into
Coloca los valores de los campos indicados en los que indique el into.
Sintaxis:
<código>
ENDSELECT.
Ejemplo:
Order by
Esta opción indica en el select de que manera debe ordenar la información que se
obtiene con la consulta. Es importante recordar que el campo por el cual se realizará el
ordenamiento debe estar incluido en los campos que se están seleccionando en la consulta.
Sintaxis:
Ejemplos:
TABLES: MARA.
Distinct
Selecciona el conjunto de valores diferentes para las columnas seleccionadas.
Ejemplo:
Count
! Count(*) determina el número de tuplas en el conjunto resultante. Es posible
calcular el número de tuplas distintas utilizando la instrucción DISTINCT.
!
Ejemplos:
Ejemplo:
Avg
! ! Devuelve el promedio de todos los valores en la columna indicada. Solo puede ser
utilizada en columnas del tipo numérico y se ignoran los valores NULL (nulos) a no ser que
todos los valores lo sean, en tal caso el resultado es NULL.
Ejemplo:
Ejemplo:
Retorna el valor más bajo en la columna seleccionada. Se ignoran los valores NULL
(nulos) a no ser que todos los valores lo sean, en tal caso el resultado es NULL.
Ejemplo:
Alias
Es posible definir alias tanto para tablas como para vistas del diccionario mediante la
adición AS. El alias puede tener un tamaño máximo de 14 caracteres y solamente es válido
durante el SELECT.
ENDSELECT.
Client Specified
La adición CLIENT SPECIFIED apaga el manejo automático del mandante,
haciendo necesaria indicar el filtro para el campo MANDT.
Up to n Rows
By Passing Buffer
Al utilizar esta opción se evita el uso del SAP buffering y se lee directamente de la
base de datos en el servidor de aplicación.
Like
Ejemplo:
PARAMETERS srch_str(20) TYPE c.
Ejemplos:
In
La opción IN es verdadera si lo valores de la columna coinciden (o no) con los
contenidos de la lista a evaluar. Esta lista puede ser un rango o una enumeración entre
paréntesis y separando cada elemento por comas.
Ejemplo:
DATA sbook_tab TYPE TABLE OF sbook.
Between
La expresión es verdadera si el contenido de la columna se encuentra entre una cota
superior y una inferior.
Ejemplo:
DATA sflight_tab TYPE TABLE OF sflight.
DATA date TYPE d.
Group By
La adición GROUP BY combina grupos de tuplas que tienen el mismo contenido en
las columnas de resultado especificadas en una sola tupla. Como prerequisito se tiene que
se deben indicar columnas individuales y no todas las columnas (al usar *).
Se utiliza la opción FOR ALL ENTRIES antes del WHERE, de tal forma que los
componentes de la tabla interna pueden ser utilizados como operandos en las comparaciones
del WHERE. Los componentes de la tabla interna deben ser compatibles con las columnas
de la tabla transparente sobre la cual se realiza el SELECT.
Ejemplo:
Subquery
Ejemplo:
PARAMETERS: carr_id TYPE spfli-carrid,
conn_id TYPE spfli-connid.
Join
Se utiliza para realizar enlaces dinámicos a través de instrucciones del lenguaje
ABAP.
Inner Join
De esta manera se enlazan dos tablas por medio de n campos, donde la
intersección de ambas tablas genera una nueva tabla por medio de los campos
comunes establecidos. En el siguiente ejemplo el join se establece a través del
campo D.
Sintaxis:
Ejemplo:
ENDSELECT.
Sintaxis:
Ejemplo:
ENDSELECT.
SQL Dinámico
Ejemplos:
Modos de Visualización
Campos: Esta opción proporciona el contenido de hasta ocho campos. El contenido de los
tres campos más importantes del sistema se visualiza siempre.
Tablas: Visualiza el contenido de una tabla interna. Esta opción permite visualizar y
corregir las entradas en una tabla interna.
Llamadas: Esta opción visualiza el evento actual y las llamadas hasta el breakpoint actual.
La última llamada activa es desplegada al principio de la lista; las llamadas anteriores se
enumeran en orden cronológico inverso. Cuando un evento (por ejemplo, START-OF-
SELECTION) concluye, se elimina de la visualización.
Opciones: Visualiza las configuraciones actuales del debugger. Se pueden cambiar las
configuraciones seleccionándolas.
Single Step: Utilice esta opción para ejecutar el programa línea por línea.
Execute: También permite ejecutar el programa línea por línea pero en caso de
encontrar una subrutina o una función se ejecuta en un solo paso.
Header Line: Si la tabla interna tiene una línea de la cabecera, es indicado por este
icono. Si se le da doble click al icono, el sistema abre la visualización estructurada del
campo.
Breakpoints
IF SY-SUBRC NE 0.
BREAK-POINT.
ENDIF.
IF SY-SUBRC NE 0.
BREAK <nombre_usuario>.
endif.
botón .
Watchpoints
Si se desea interrumpir un programa cuando el contenido de un campo o de una
estructura cambia, se puede utilizar un watchpoint. Es posible fijar hasta cinco watchpoints,
incluyendo los watchpoints para los strings.
Un análisis Dump es una lista que permite identificar las causas y posibles
soluciones a errores en un programa. El Workbench de ABAP genera un dump siempre que
un reporte o transacción se terminen debido a un error serio. El sistema ingresa el error en el
log del sistema y crea un snapshot del programa al momento de suceder el error, y lo
almacena en una tabla llamada SNAP.
Los análisis Dump dan al usuario o al programador información sobre las causas del
error que hacen que el programa se cierre abruptamente. Se pueden usar para identificar
rápidamente donde y por qué ocurrió el error.
Aquí aparecerá la explicación de los motivos del error, a través de esta es que se
podrá hacer el análisis a profundidad de a qué se debió el error.
A continuación se explicarán los pasos necesarios para crear una función. Primero se deberá
crear un grupo de funciones y luego se creará la función.
Para crear un grupo de funciones se utiliza el menú principal con la opción Pasar a –
> Gestión gr. funciones –> Crear grupo
- Exporting
Estos son los parámetros de salida de la función. Cuando se invoca la función, un
parámetro actual puede ser especificado para cada parámetro exporting. El contenido del
parámetro exporting es transferido al parámetro actual si la ejecución de la función finaliza
sin errores.
- Tables
Igual que los parámetros changing, estos son parámetros tanto de entrada como de
salida, pero solo pueden ser usados para transferir tablas estándar con header line. En este
ejemplo no utilizaremos este tipo de parámetro.
RAISE <excepción>
La instrucción “RAISE excepción” lo que hace es detener la ejecución de la
función, y asignar al SY-SUBRC el valor correspondiente a lo asignado en la sección
de EXCEPTIONS del CALL FUNCTION.
Ejemplo:
CALL FUNCTION ... EXCEPTIONS div_cero = 5.
“código del programa principal
IF SY-SUBRC = 5.
MESSAGE ‘Division por Cero’.
“código del programa principal
ENDIF.
ENDFUNCTION.
Ejemplo:
CALL FUNCTION division EXCEPTIONS div_zero = 5.
“código programa principal
ELSE.
result = n1 / n2.
ENDIF.
ENDFUNCTION.
- Código Fuente