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

ABAP

SAP

AO 2006/7

Pgina 2 de 63

INDICE
I. Introduccin_________________________________________________________________________________________________6

Caractersticas del lenguaje:.........................................................................................................6


Sintaxis y formato de un programa ABAP..................................................................................6
Concatenacin de sentencias.........................................................................................................7
Declaracin de datos.......................................................................................................................7
Objetos de datos..............................................................................................................................8
Sentencias de declaracin de datos...............................................................................................9
II. Sentencias Bsicas de Procesamiento de Datos____________________________________________________________________10
III. Control interno del flujo de un programa_______________________________________________________________________13

Ejemplos de expresiones lgicas..................................................................................................13


Sentencias de control....................................................................................................................13
Sentencias de salida en bucles.....................................................................................................14
IV. Tablas Internas (parte I)_____________________________________________________________________________________15

Concepto de tabla interna............................................................................................................15


Definicin de tablas internas.......................................................................................................15
V.Elementos de Texto___________________________________________________________________________________________16
VI. Diccionario ABAP__________________________________________________________________________________________16
VII. Pantalla de seleccin (parte I)________________________________________________________________________________17

Definicin de parmetros de seleccin .......................................................................................17


VII. Pantallas de seleccin (parte II)______________________________________________________________________________18

Definicin de Select-options.........................................................................................................18
VIII. Campos del sistema (SYST)_________________________________________________________________________________19
IX. SQL ABAP________________________________________________________________________________________________21

Open SQL......................................................................................................................................21
SQL Nativo....................................................................................................................................21
Sentencias "Open SQL"..............................................................................................................21
X. Bases de datos lgicas________________________________________________________________________________________24
XI.Salida estndar de datos______________________________________________________________________________________25

Listas sencillas...............................................................................................................................25
Listas complejas............................................................................................................................25
XII. Procesamiento de tablas internas_____________________________________________________________________________26

Acceso a los registros de una tabla interna................................................................................26


Operaciones con tablas internas..................................................................................................26
Usos de LOOP..ENDLOOP para recorrer una tabla interna..................................................27
Procesamiento de niveles de control en tablas internas............................................................28
Pgina 3 de 63

Uso de SUM para calcular totales y subtotales en un evento AT.............................................28


Ordenamiento de registros de una tabla interna.......................................................................29
Determinacin de la cantidad de entradas de una tabla interna.............................................29
Comparacin de tablas internas..................................................................................................29
XIV. Control externo del flujo de un programa______________________________________________________________________31

Eventos principales.......................................................................................................................31
Eventos que se procesan en la salida de datos...........................................................................31
Eventos que se procesan despus de la salida principal de un programa...............................32
Abandono de bloques de proceso................................................................................................32
XV. Programas interactivos______________________________________________________________________________________33
XVI. Modularizacin de un programa_____________________________________________________________________________37

Modularizacin en declaracin de datos....................................................................................37


Transacciones................................................................................................................................37
Programas....................................................................................................................................39
Mdulos de funcin......................................................................................................................39
Subrutinas.....................................................................................................................................40
Macroinstrucciones......................................................................................................................40
Salida de procesos.........................................................................................................................41
XVII. Debugging de un programa_________________________________________________________________________________42

Pantallas del debugger.................................................................................................................43


Watchpoints..................................................................................................................................43
Ejecucin paso a paso en el debugger.........................................................................................43
Sentencias de depuracin.............................................................................................................43
Memoria SAP y memoria ABAP.................................................................................................44
E/S en memoria SAP....................................................................................................................44
E/S en memoria ABAP.................................................................................................................44
E/S en archivos externos..............................................................................................................44
Servidor de presentacin.............................................................................................................45
Mtodo Batch Input Clsico....................................................................................................47
Programas estndar de Batch Input...........................................................................................49
Ejecutar un juego de datos desde el programa ABAP..............................................................49
Transaccin grabadora de batch-input......................................................................................49
XXI. User Exits_______________________________________________________________________________________________50

Cmo s si una transaccin estndar tiene asociada un User Exit?........................................50


Pgina 4 de 63

XXII.Field Exits_______________________________________________________________________________________________51
XXIV.Field Symbols____________________________________________________________________________________________53

Declaracin de field symbols ......................................................................................................53


Procesamiento de field symbols...................................................................................................53
XXV.Transacciones del Entorno de Desarrollo______________________________________________________________________55
XXVI.Creacin de Mdulos de Funcin____________________________________________________________________________59

Pgina 5 de 63

I. Introduccin
Las aplicaciones R/3 estn escritas en el lenguaje de programacin ABAP (Advanced Business Application
Programming).
Los programas ABAP se comunican con la base de datos y con la interfaz grfica de usuario (SAPgui).

Caractersticas del lenguaje:


Basado en programacin estructurada.
Interpretado, no compilado.
Dirigido por eventos.
Integrado por completo en SAP R/3.
Soporta elementos de texto multilenguaje.
Manejo transparente y abierto del sistema de gestin de bases de datos mediante ABAP OpenSQL.
Permite ampliar la funcionalidad estndar del sistema R/3.
Sintaxis y formato de un programa ABAP
Un programa ABAP est compuesto por sentencias. Cada sentencia comienza con una palabra clave
(keyword) y termina con un punto.
Ej:
REPORT PRIMER_PROGRAMA.
WRITE 'Primer programa.
Adems de las sentencias, los programas pueden contener comentarios (textos entre sentencias del
programa ABAP para cuyo objetivo es explicar el propsito de dichas sentencias). Los comentarios se
distinguen porque comienzan con * (al principio de la lnea) o con (en cualquier posicin de la lnea).
PROGRAM SAPMTEST.
************************************************
* DECLARACIONES *
************************************************
DATA: FLAG,
" UN FLAG
NUMBER TYPE I.
" CONTADOR
......

Pgina 6 de 63

El lenguaje ABAP no tiene restricciones de formato. Las palabras deben separarse al menos por un espacio
(el fin de lnea se considera como un espacio).
Ej:
PROGRAM
TEST.
WRITE 'esto es una sentencia'.
Es igual a
PROGRAM TEST. WRITE 'Esto es una sentencia'.
Y a su vez es igual a
PROGRAM
TEST.
WRITE
Esto es una sentencia.
Caso especial: literales de texto
El fragmento de cdigo:
PROGRAM
WRITE
es
una setencia'.

TEST.

'Esto

Inserta espacios entre cada lnea del literal. En este caso se debe resolver de la siguiente manera:
PROGRAM TEST.
WRITE 'Esto' &
' es ' &
'una sentencia'.
Estructura bsica de las sentencias

Concatenacin de sentencias
El lenguaje ABAP permite concatenar sentencias consecutivas que tienen la misma keyword, usando : (dos
puntos)
Ej:
WRITE:
SPFLI-CITYFROM,
SPFLI-CITYTO,
SPFLI-AIRPTO.
Declaracin de datos

Pgina 7 de 63

Tipos de datos :
Son descripciones
No ocupan memoria en tiempo de ejecucin
Describen propiedades tcnicas que luego sern asociadas a un programa.
Tipos de datos predefinidos

Tipos de datos locales de programa


Todos los programas ABAP permiten definir tipos de datos propios. Los tipos de datos locales de un
programa se definen usando la sentencia TYPES:
TYPES <t> ... [TYPE <type>|LIKE <obj>] ...
Ej:
TYPES: number TYPE i,
length TYPE p DECIMALS 2,
code(3) TYPE c.
TYPES: BEGIN OF linea,
columna1(3) TYPE C,
columna2(2) TYPE N,
END OF LINEA.

Objetos de datos
Unidades fsicas que ocupan espacio en memoria y un programa puede utilizar en tiempo de ejecucin.
Cada objeto de dato tiene asociado un tipo de dato.
Ej: Variables, constantes

Pgina 8 de 63

Sentencias de declaracin de datos


TABLES
Ej:
TABLES bkpf.
TABLES: bkpf, bseg.
DATA
Ej:
DATA numero(2) TYPE P.
DATA: numero(2) TYPE P,
texto(15),
texto2(20) TYPE C.
DATA

numero2 LIKE numero.

DATA

cliente LIKE kna1-kunnr.

DATA

texto(25) TYPE C VALUE Texto inicial.

DATA

numero(4) TYPE P DECIMALS 2 value 123,15.

DATA: BEGIN OF cliente,


nombre(30) TYPE C,
direccion(50) TYPE C,
END OF cliente.

CONSTANTS
Ej:
CONSTANTS pi(3) TYPE P DECIMALS 2 VALUE 3,14.
RANGES : Tablas internas con la estructura de los SELECT-OPTIONS.
Ej:
RANGES belnr FOR bkpf-belnr.

Pgina 9 de 63

II. Sentencias Bsicas de Procesamiento de Datos


1) Asignacin y Conversin
MOVE: Se corresponde con el operador de asignacin =.
Ej:
MOVE: var1 TO var2,
Var3 to var4.
Es igual a
var2 = var1.
Var4 = var3.
Ej:
var2 = var1 = var3.
Asignacin de valores de estructuras
Copiar el contenido de la estructura STRUCT1 en STRUCT2.
Ej:
struct2 = struct1.
MOVE-CORRESPONDING: Copia el contenido de los campos de la estructura STRUCT1 en los campos de
STRUCT2 que tienen idntico nombre.
Ej:
MOVE-CORRESPONDING struct1 to struct2.
Asignacin de valores con WRITE TO
WRITE...TO: Convierte el contenido de var1 en tipo C y lo guarda en var2. A diferencia de MOVE, guarda
con formato. Se tienen en cuenta los formatos de separador decimal y fecha que tiene definido cada
usuario.
Ej:
WRITE var1 TO var2.
Resetear variables (a su valor inicial)
CLEAR: Asigna a una variable su valor inicial.
Ej:
CLEAR <var1>.
Asignacin entre campos tipo C y tipo P
PACK: Convierte un campo caracter en un campo empaquetado (tipo P).
UNPACK: Convierte un campo empaquetado en un campo caracter.
Ej:
PACK varC TO varP.
UNPACK varP TO varC.
Determinacin de offset y longitud en asignaciones
Las sentencias MOVE y WRITE..TO permiten utilizar el offset y la longitud que deseemos para hacer
asignaciones entre objetos de datos.
Ej:
MOVE nombre+2(5) to texto.
MOVE nombre TO texto+4.
MOVE nombre(4) TO texto.
WRITE nombre(6) TO texto+offset(long).

"offset y long son

variables de tipo I

Pgina 10 de 63

Asignacin de valores tipo fecha


Ej:
fecha = sy-datum.
fecha+6(2) = '01'.
fecha = fecha -1.
Nota para las sentencias de asignacin y conversin: Cuando los tipos de datos de las variables origen y
destino no son los mismos, se aplican reglas de conversin.
ABAP provee un gran nmero de conversiones de tipo automtico.
2) Procesamiento numrico
Sentencias bsicas:

Otras sentencias:
ABS: Valor absoluto
Ej:
N = ABS( M ).
CEIL: Valor entero superior.
Ej:
N = CEIL( M ).
FLOOR: Valor entero inferior.
Ej:
N = FLOOR( M ).
TRUNC: Parte entera de un nmero.
Ej:
N = TRUNC( M ).
FRAC: Parte decimal de un nmero.
Ej:
N = FRAC( M ).
STRLEN: Devuelve la longitud de un string.
Ej:
N = STRLEN( M ).
Entre campos de estructuras, se pueden llevar a cabo operaciones aritmticas usando las siguientes
sentencias:
ADD-CORRESPONDING
SUBTRACT-CORRESPONDING
MULTIPLY-CORRESPONDING
DIVIDE-CORRESPONDING

Pgina 11 de 63

Ej:
DATA: BEGIN OF a,
uno TYPE I VALUE '5',
dos TYPE I VALUE '6',
END OF a.
DATA: BEGIN OF b,
dos TYPE I VALUE '3',
tres TYPE I VALUE '9',
END OF b.
ADD-CORRESPONDING a TO b.
WRITE: B-DOS, B-TRES.
El resultado en pantalla sera:
9 9
3) Sentencias de manejo de strings
Pueden encontrar programas que necesiten modificar la salida de una variable, para estos casos, las
sentencias siguientes son las mas utilizadas:
CONCATENATE - SPLIT SHIFT - CONDENSE -OVERLAY -REPLACE -SEARCH

Pgina 12 de 63

III. Control interno del flujo de un programa


Mediante el control interno del flujo de un programa se pueden realizar bifurcaciones o bucles. La mayora
de las sentencias de control interno utiliza expresiones lgicas.
El formato bsico de una expresin lgica es:
<campo1> <operador> <campo2>
Operadores para cualquier objeto de dato
OPERADOR
EQUIVALENTE
DESCRIPCIN
EQ
=
Igual a
NE
<> , ><
No igual a
LT
<
Menor que
LE
<=
Menor o igual que
GT
>
Mayor
GE
>=
Mayor o igual que
Operadores para strings carcter (C) y numricos (N)
OPERADOR
DESCRIPCIN
CO
Contiene slo
CN
No contiene slo
CA
Contiene algn
NA
No contiene algn
CS
Contiene el string
NS
No contiene el string
CP
Contiene el pattern(*)
NP
No contiene el pattern(*)
(*) Permite usar los caracteres especiales '*' (Cualquier nmero de caracteres) y '+' (cualquier caracter).
Para buscar un '*' o '+' o para diferenciar maysculas de minsculas hay que anteponer el '#'.
Operadores especiales
OPERADOR
BETWEEN .. AND
IS INITIAL
IN

DESCRIPCIN
Rango de valores
Valor inicial
Valor perteneciente a un criterio
de seleccin

Las expresiones lgicas pueden combinarse con AND, OR y NOT.


Ejemplos de expresiones lgicas
f >= p
i LE f
str1 CO substr
str2 CA 'Aa'.
str3 CP '*texto'.
fecha BETWEEN fecha_inicio AND '20020412'
contador IS INITIAL
sociedad IN s_bukrs
Sentencias de control
IF: Bifurcacin condicional.
Ej:

Pgina 13 de 63

1)

IF c1 = c2.
...
ELSE.
...
ENDIF.

2)

IF c1 > c2.
...
ELSEIF c1 < c2.
...
ELSE.
...
ENDIF.

CASE: Bifurcacin mltiple condicional.


Ej:
CASE string.
WHEN A.

WHEN 'B' OR C.

WHEN OTHERS.

ENDCASE.
DO: Bucle incondicional.
Ej:
1)
DO.
WRITE SY-INDEX.
IF SY-INDEX = 3.
EXIT.
ENDIF.
ENDDO.
2)

DO 3 TIMES.
WRITE SY-INDEX.
ENDDO.

WHILE: Bucle condicional.


Ej:
WHILE indice > 1.
factorial = factorial * indice.
indice = indice 1.
ENDWHILE.
Sentencias de salida en bucles
CONTINUE: Termina el paso de un bucle de forma incondicional.
CHECK <exp_logica>: Termina el paso de un bucle de forma condicional (si no se cumple la expresin
evaluada).
EXIT: Termina un bucle de forma incondicional.

Pgina 14 de 63

IV. Tablas Internas (parte I)


Concepto de tabla interna

La tablas internas proveen una forma de almacenar datos en memoria lnea por lnea. Cada lnea
tiene la misma estructura.
Los datos almacenados en tablas internas solamente existirn durante el tiempo de ejecucin del
programa.
El nmero de registros de una tabla interna no es fijo, el sistema incrementa el tamao de la misma
en tiempo de ejecucin (a medida que se van agregando datos).
Las tablas internas estn compuestas por Header line y Table lines. La header line es el rea de
trabajo, cuando se leen datos de una tabla interna estos quedan almacenados en la header line. Los
datos solamente pueden leerse (o modificarse) en el header line, y de ah recin transferirse a la
tabla interna.
El header line es opcional, por lo tanto si quiere leerse una lnea de una tabla interna definida sin
header line debe guardarse el resultado en otra rea de trabajo (con INTO).
El header line y la tabla interna (table lines) tienen el mismo nombre. El sistema sabe en cada
sentencia si nos referimos al rea de trabajo o a la tabla interna (segn el tipo de sentencia).
Tabla interna

rea de trabajo

Definicin de tablas internas


Las tablas internas se declaran con la clusula OCCURS de la sentencia DATA o TYPES. El parmetro
OCCURS determina el nmero de lneas creadas cuando la tabla es creada en memoria. Sin embargo, en
tiempo de ejecucin la tabla se extiende dinmicamente, on demand (a medida que se requieren nuevos
registros).
Crear una tabla interna en base a un tipo de estructura:
TYPES: BEGIN OF linea,
columna1(2) TYPE C,
columna2 TYPE I,
END OF LINEA.
DATA
DATA
DATA
DATA

itab TYPE linea OCCURS 10.


itab2 TYPE linea OCCURS 0 WITH HEADER LINE.
itab3 LIKE itab.
itab4 LIKE itab WITH HEADER LINE.

2. Crear una tabla interna directamente, sin definir antes un tipo.


DATA: BEGIN OF itab OCCURS n,
...
END
OF itab.

Pgina 15 de 63

V.Elementos de Texto
Los elementos de texto permiten guardar textos en el programa sin necesidad de especificarlos en el cdigo
fuente mediante hard-coding.
Los elementos de texto de un programa se mantienen desde el editor ABAP (SE38): Pasar a -> elementos
de texto.
VI. Diccionario ABAP
A travs de la transaccin del diccionario de datos (SE11) se pueden mantener todos los objetos de base de
datos relacionados directamente con el entorno de programacin:
Tablas.
Estructuras: Se definen en forma similar a las tablas pero fsicamente es slo una definicin, no se
pueden almacenar datos en ellas.
Vistas de tablas.
Elementos de datos: Un elemento de datos es un tipo elemental que describe los atributos de tipo
(tipo de datos, longitud de campo y, en caso necesario, cantidad de decimales) y contiene
informacin relevante para dynpros (textos explicativos o Ayuda para campos).
Dominios: Los dominios definen formatos de campos. Un dominio describe los atributos tcnicos de
un campo, tales como el tipo de datos o la cantidad de posiciones del campo, la tabla de verificacin
de posibles valores valores, longitud de salida y rutina de conversin.
Ayudas para bsqueda (Matchcode).
Objetos de bloqueo: Las bases de datos soportadas por SAP realizan bloqueos fsicos en la
actualizacin de la informacin. Los objetos de bloqueo permiten realizar bloqueos lgicos en lo
programas.

Pgina 16 de 63

VII. Pantalla de seleccin (parte I)


Las pantallas de seleccin se componen de:

PARAMETROS: Equivale a una variable que acepta un nico valor.


SELECT-OPTIONS: Se asocia a campos de la base de datos. Permite al usuario introducir
combinaciones complejas de seleccin, que se guardan en una tabla interna con un formato
particular. Al definir un SELECT-OPTION el programa crea una tabla RANGES con el mismo
nombre.

Definicin de parmetros de seleccin


PARAMETERS: Define parmetros en la pantalla de seleccin.
Ej:
PARAMETERS:

campo1(10) type c, "Parmetro tipo char, long 10


campo2 type d,
"Parmetro tipo fecha
campo3 LIKE kna1-kunnr,"Como nro.cte (hereda matchcode)
campo4 TYPE I DEFAULT 100, "Tipo entero (propone '100')
campo5 LIKE SY-DATUM,
"Tipo fecha
campo6 OBLIGATORY, "Char de long. 1 obligatorio
campo7 AS CHECKBOX DEFAULT X,"Checkbox marcado p/defecto
campo8 RADIOBUTTON GROUP rad1,
"Radiobutton
campo9 RADIOBUTTON GROUP rad1 DEFAULT X,
"Radiobutton
(seleccionado por "defecto)
campo10 MEMORY ID buk,
"Toma el valor por defecto de
memoria
campo11 LIKE KNA1-KUNNR MATCHCODE OBJECT debi. "usa matchcode
"'debi'

Pgina 17 de 63

VII. Pantallas de seleccin (parte II)


Las pantallas de seleccin se componen de:
PARAMETROS: Equivale a una variable que acepta un nico valor.
SELECT-OPTIONS: Se asocia a campos de la base de datos. Permite al usuario introducir
combinaciones complejas de seleccin, que se guardan en una tabla interna con un formato
particular. Al definir un SELECT-OPTION el programa crea una tabla RANGES con el mismo
nombre.
Definicin de Select-options
Campos de la tabla RANGES de un SELECT-OPTION:
CAMPO
SIGN

LONGITUD
1

OPTION

LOW

La
del
referenciado
La
del
referenciado

HIGH

campo

VALORES POSIBLES
I: Inclusin
E: Exclusin
EQ: Igual a
NE: No igual a
GE: Mayor o igual que
GT: Mayor que
LE: Menor o igual que
LT: Menor que
CP: Contiene patrn (usa caracteres especiales + y *).
NP: No contiene el patrn (usa caracteres especiales + y *).
BT: Entre los valores (usa el campo HIGH).
NB: No est entre los valores(usa el campo HIGH).
Segn el campo de referencia

campo

Segn el campo de referencia

SELECT-OPTIONS: Define un criterio de seleccin en la pantalla de seleccin.


Ej:
SELECT-OPTIONS:

s_kunnr FOR kna1-kunnr,


s_brsch FOR kna1-brsch
DEFAULT 0200 TO 0400 OPTION BT SIGN I,
s_pstlz FOR kna1-pstlz NO-EXTENSION,
s_ort01 FOR kna1-ort01 NO INTERVALS.

Pgina 18 de 63

VIII. Campos del sistema (SYST)


En la siguiente tabla se describen los campos del sistema (SY-campo) ms importantes para utilizar en los
programas ABAP.
La lista completa puede verse desde el diccionario de datos (estructura SYST).
CAMPO
INDEX
PAGNO
TABIX
TFILL
TOCCU
DBCNT
FDPOS
COLNO
LINCT
LINNO
LINSZ
MACOL
MAROW
TLENG
LILLI
SUBRC
CUCOL
CUROW
LSIND
LISTI
STEPL
SROWS
SCOLS
LOOPC
TZONE
DAYST
FDAYW
LANGU
MODNO
BATCH
BINPT
CALLD
DYNNR
DYNGR
WTITL
CPAGE
DBNAM
MANDT
PEXPI
PRIMM
PRREL
PRBIG
PRNEW
PDEST

TIPO
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
INT4
CHAR
INT1
LANG
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
INT4
CHAR
CLNT
NUMC
CHAR
CHAR
CHAR
CHAR
CHAR

LONGITUD
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
1
3
1
1
1
1
1
4
4
1
10
20
3
1
1
1
1
1
4

DESCRIPCIN
Loops, ejecucin de loop actual
Creacin lista, pgina actual
Tablas internas, ndice de lneas actual
Tablas internas, cantidad de lneas actual
Tablas internas, valor del parmetro OCCURS
Accesos base datos, cantidad de lneas de tabla ledas
Strings, offset en string (lugar de hallazgo)
Creacin de listas, columna actual en la creacin de la lista
Creacin listas, longitud pgina de la lista
Creacin listas, lnea actual
Creacin listas, ancho lnea de la lista
Imprimir listas, columnas de la sentencia SET MARGIN
Imprimir listas, lneas de la sentencia SET MARGIN
Tablas internas, tamao de la lnea
Tratamiento listas, lnea de lista seleccionada
Cdigo retorno, cdigo retorno tras sentencia
Imgenes pantalla, posicin del cursor horizontal (columna)
Imgenes pantalla, posicin del cursor vertical (fila)
Tratamiento listas, ndice del listado actual
Tratamiento listas, nivel del listado desde el cual se activ el evento actual
Dynpros, ndice de lnea de tabla actual (en LOOP)
Imgenes pantalla, cantidad lneas
Imgenes pantalla, cantidad columnas
Dynpros, cantidad de lneas visibles en STEP LOOP de dynpro
Fecha y hora, dif.tiempo con "Hra estndar Greenwich" en segundos
Fecha y hora, indic.horario verano activo
Fecha y hora, da de la semana en calendario fbrica
Sistema R/3, idioma actual
Sistema R/3, cantidad de modos externos
Ejecucin en proceso de fondo (X)?
Batch input, programa ejecutado en batch input (X)?
Programa ABAP, modo de llamada del programa activo
Programa ABAP, Nmero del dynpro actual
Programa ABAP, grupo de imgenes del dynpro actual
Creacin listas, indicador para cabecera estndar de pgina
Tratamiento de listas, nmero de pgina actual
Programa ABAP, base de datos lgica usada
Sistema R/3, N mandante desde entrada al sistema
Parmetro impr., tmpo.permanencia en SPOOL
Parmetro impr., salida inmediata
Parmetro impr., borrar tras salida
Parmetro impr., portada de seleccin
Parmetro impr., nueva orden SPOOL
Parmetro impr., disp.salida

Pgina 19 de 63

PLIST
PRDSN
CALLR
RTITL
PRREC
PRTXT
PRABT
PAART
PRCOP
DBSYS
SYSID
OPSYS
PFKEY
SAPRL
TCODE
UCOMM
SPONO
DATUM
SLSET
UZEIT
REPID
UNAME
LSTAT
ABCDE
MSGLI
TITLE
LISEL
ULINE
CPROG
LDBPG
TVAR0
TVAR1
TVAR2
TVAR3
TVAR4
TVAR5
TVAR6
TVAR7
TVAR8
TVAR9
MSGID
MSGTY

CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
NUMC
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
NUMC
DATS
CHAR
TIMS
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR
CHAR

12
6
8
70
12
68
12
16
3
10
8
10
20
4
20
70
10
8
14
6
40
12
16
26
60
70
255
255
40
40
20
20
20
20
20
20
20
20
20
20
20
1

Parmetro impr., nombre de la orden SPOOL


Parmetro impr., nombre set de datos SPOOL
Imprimir listas, identif.funcin de dilogo
Parmetro impresin, ttulo programa impresn
Parmetro impr., destinatario
Parmetro impr., texto para portada
Parmetro impr., departamento en la portada
Parmetros impresin, edicin impresin
Parmetro impr., cantidad impresiones
Sistema R/3, nombre sistema base de datos
Sistema SAP, nombre del sistema SAP
Sistema R/3, sistema operativo del servidor SAP
Imgenes pantalla, status GUI actual
Sistema SAP, versin release del sistema
Programa ABAP, cdigo transaccin actual
Imgenes pantalla, cdigo funcin que se ingres en campo comandos
Imprimir listas, nmero SPOOL
Fecha y hora, fecha (servidor de aplicacin)
Imgenes seleccin, nombre variante
Fecha y hora, hora (servidor de aplicacin)
Programa ABAP, programa de control actual
Sistema SAP, nombre de acceso del usuario
Tratamiento listas, denominador p.nivel
Constantes: Alfabeto (A,B,C,...)
Mensajes, lnea de mensajes
Imgenes pantalla, texto de la lnea de cabecera
Tratamiento listas, contenido lnea seleccionada
Constantes, barra horizontal de longitud (-)
Programa ABAP, nombre del programa principal
Programa ABAP, programa de base de datos (para SY-DBNAM)
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Creacin listas, variable texto para elemento de texto
Mensajes, clase de mensaje
Mensajes, tipo de mensaje

Pgina 20 de 63

IX. SQL ABAP


En un sistema R/3, los datos que deben permanecer en el sistema se almacenan en las tablas de base de
datos. El lenguaje ABAP permite acceder a la base de datos por diferentes caminos:
Open SQL
Open SQL es un subconjunto de comandos de SQL Standard completamente integrado en ABAP. Nos
permite leer (SELECT) y modificar (INSERT, UPDATE, DELETE) informacin. Es independiente del motor
de base de datos que se est utilizando.
SQL Nativo
Es la posibilidad de incluir sentencias nativas SQL en un programa ABAP. Al ser nativas, estas sentencias
dependen del motor que se este utilizando. (Informix, Oracle, etc.).
Sentencias "Open SQL"
SELECT: Lectura de datos de las tablas de base de datos. El formato bsico es:
SELECT [SINGLE/DISTINCT] <resultado>
INTO
<itab / estructura>
FROM
<tabla>
[WHERE <condicin>]
[GROUP BY <campos>]
[HAVING <condicin>]
[ORDER BY <campos> [ASCENDING/DESCENDING]].
Ej:
TABLES kna1.
SELECT * FROM kna1 WHERE kunnr > '0001561000'.
WRITE: / kna1-kunnr, kna1-name1.
ENDSELECT.
* Lectura de un solo registro de base de datos
SELECT SINGLE * FROM kna1 WHERE kunnr = '0000000001'.
DATA struct LIKE kna1.
SELECT * FROM kna1 INTO struct WHERE land1 = 'AR'.
WRITE: / struct-kunnr.
ENDSELECT.
DATA: BEGIN OF struct,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
END OF struct.
SELECT name1 kunnr INTO CORRESPONDING FIELDS OF struct
FROM kna1.
WRITE: / struct-kunnr.
ENDSELECT.
DATA tabla LIKE kna1 OCCURS 10 WITH HEADER LINE.
* Guardar el resultado de la consulta en una tabla interna
SELECT * FROM kna1 INTO TABLE tabla WHERE land1 = 'AR'.
DATA: BEGIN OF tabla OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,

Pgina 21 de 63

END OF tabla.
SELECT name1 kunnr INTO CORRESPONDING FIELDS OF TABLE tabla
FROM kna1 WHERE land1 = 'AR'.
*En lugar de INTO, en este caso se puede usar APPENDING
* Se pueden usar funciones de agregacin
SELECT MAX(dmbtr) INTO resultado FROM BSIS.
SELECT SUM(DISTINCT dmbtr) INTO RESULTADO FROM BSIS.
* Funciones de agregacin disponibles: MAX, MIN, AVG, SUM y COUNT
* Lectura especificando campos de saida y ORDER BY...
SELECT name1 kunnr INTO ( nombre , codigo )
FROM kna1 WHERE land1 = 'AR'
ORDER BY name1 DESCENDING.
* Lectura con especificacin de tabla dinmica
DATA tabla(10) TYPE C.
tabla = 'BKPF'.
SELECT SINGLE * FROM (tabla)...
* Chequeo de valores con SELECT-OPTIONS
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
SELECT * FROM kna1 WHERE kunnr IN s_kunnr.
* Lectura de dos tablas a travs de INNER JOIN
SELECT A~KUNNR A~NAME1 B~BUKRS B~ALTKN
INTO
CORRESPONDING FIELDS OF TABLE ITAB
FROM
( KNA1 AS A
INNER JOIN KNB1 AS B ON A~KUNNR = B~KUNNR )
WHERE A~KUNNR BETWEEN 1 AND 25000 AND
B-ALTKN BETWEEN 1 AND 25000.

IMPORTANTE: En la clusula WHERE pueden utilizarse todos los valores lgicos de comparacin (los
aplicables a todos los objetos de datos).
INSERT: Inserta un registro en tabla de base de datos. El formato bsico es:
INSERT INTO <target> VALUES <wa> .
El contenido de la variable o estructura wa es insertado en la tabla target. La variable o estructura wa debe
contener la misma longitud que la tabla del diccionario. Es conveniente definir wa like target.
Otras formas de lograr lo mismo son:
INSERT <target> FROM <wa >.
INSERT <dbtab>. Cuando se ha completado con informacin la cabecera de la tabla.
Para insertar varias lneas:
INSERT <target> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS] .
Ej:

TABLES kna1.
kna1-kunnr = '0001561003'.
kna1-name1 = 'Cliente Test'.
INSERT kna1.

MODIFY: La sintaxis es como INSERT, pero se diferencia en el funcionamiento. Si el registro no existe lo


inserta en la tabla, y si ya existe, lo modifica.

Pgina 22 de 63

UPDATE: Modifica el contenido de uno o ms registros de la base de datos. El formato bsico es:
UPDATE <target> SET <set1> <set 2> ... [WHERE <cond>].
Tambin puede usarse de la forma:
UPDATE <target> FROM <wa> .
UPDATE <dbtab>.
UPDATE <target> FROM TABLE <itab> .
Ej:
UPDATE kna1 SET spras = 'S' TELTX = ' '
WHERE kunnr > '0001560000'.
DELETE: Elimina registros de la base de datos. El formato bsico es:
DELETE FROM <target> WHERE <cond>.
Tambin se puede usar de la forma:
DELETE <dbtab>. Cuando se ha completado con informacin la cabecera de la tabla.
O para borrar mltiples lneas:
DELETE <target> FROM TABLE <itab> .
Ej:
TABLES kna1.
kna1-kunnr = '0001561003'.
DELETE kna1.
En todos los casos:
SY-SUBRC = 0 indica que se seleccion al menos un registro. Otro valor indica que la lectura/modificacin
no tuvo xito.
SY-DBCNT contiene la cantidad de registros seleccionados.

Pgina 23 de 63

X. Bases de datos lgicas


Una base de datos lgica (BDL) es un programa de acceso a base de datos que se asocia a un programa
principal. La BDL y el programa principal se unen en el proceso de generacin para formar un nico
programa.
Ventajas de usar BDL:
Si varios programas leen los mismos datos, se puede centralizar el acceso a las tablas de base de datos en
un nico programa, la BDL.
Si se quiere usar la misma pantalla de selecin para varios programas, esto se realiza con la pantalla de
seleccin de la BDL.
El programa de BDL puede realizar los chequeos de autorizacin.
La transaccin mediante la cual se pueden definir, modificar y visualizar las BDL es SE36.
Una BDL est compuesta principalmente por:
Estructura: Es la relacin entre las tablas que componen la BDL. Es jerrquica.
Seleccin: Es la interfaz de usuario asociada a la BDL (pantalla de seleccin).
Programa de base de datos: Son las rutinas de acceso a los datos.
Textos de seleccin: Son los textos que aparecen en la pantalla de seleccin, dependientes del
idioma.
Documentacin.
La lgica de acceso a los datos de una BDL se da en forma jerrquica:

Tabla A
Tabla B
Tabla C
1) Se accede al 1 registro de A.
2) Se accede al primer registro de B relacionado con el registro ledo de A.
3) Se accede a todos los registros de C relacionados con el registro de B.
4) Despus se accede al siguiente registro de B (siempre relacionado con el de A).
5) Se accede a todos los de C relacionados a este registro de B.
6) Una vez que se procesaron todos los registros de B relacionados al primer registro de A, se lee el
siguiente registro de A.

Pgina 24 de 63

XI.Salida estndar de datos


Las sentencias de salida estndar de datos se dividen en dos grupos. En el primero figuran sentencias
elementales, mientras que en el segundo figuran sentencias secundarias, bien por afectar la salida de forma
indirecta, o bien por ser poco utilizadas.
Listas sencillas
WRITE: Sentencia bsica de escritura.
Ej:
WRITE Hola.
WRITE BKPF-BELNR.
WRITE: El nmero , num , es negativo.
Listas complejas.
REPORT: Define las caractersticas del listado (ancho de pgina, cant. de lneas por pgina, id de mensaje,
etc.).
Ej:
REPORT zreporte LINE-SIZE 40 LINE COUNT 40.
REPORT zreporte LINE-SIZE 40 LINE COUNT 30(2) NO STANDARD PAGE HEADING.
REPORT zreporte MESSAGE-ID ZFI.

Pgina 25 de 63

XII. Procesamiento de tablas internas


Acceso a los registros de una tabla interna
Para acceder a los registros de una tabla interna el sistema proporciona los siguientes mtodos:
Indice de la tabla interna: Es un nmero secuencial de cada registro de la tabla interna. No es un campo de
la tabla. Despus de procesar un registro de una tabla interna, el campo del sistema SY-TABIX contiene el
ndice del registro.
Clave definida por sentencia: Cuando se lee un registro de la tabla interna con la sentencia READ se
pueden especificar los campos que se quieren usar como filtro en el criterio de lectura.
Clave estndar:.Por definicin, los campos clave de una tabla interna son aquellos campos no numricos
(tipos F. I, P) y que no son tablas internas. Esta clave estndar puede ser usada en sentencias como
COLLECT, READ, SORT y SUM.
Operaciones con tablas internas
Borrado de tablas internas:
Sentencia
REFRESH
CLEAR
FREE
Ej:

Descripcin
Borra todas las lneas de la tabla interna (las table lines). No borra la cabecera.
Borra el header line (la cabecera).
Libera la memoria usada por la tabla interna.

REFRESH itab.
CLEAR itab.
FREE itab.

Insercin de registros en tablas internas.


Sentencia
APPEND
COLLECT
INSERT

Descripcin
Aade registros al final de la tabla interna. Es la que se recomienda por razones de
rendimiento.
Aade o modifica registros de la tabla interna en funcin de la clave estndar de la tabla.
Si la clave estandar ya existe en la tabla, modifica el registro acumulando los campos
numricos. Si no existe, es equivalente a APPEND.
Insertar un registro en una posicin determinada de la tabla interna.

Copia de tablas internas.


Sentencia
APPEND
MOVE
INSERT

Descripcin
Tambin puede ser utilizada para copiar el contenido de tablas internas.
Copia el contenido de una tabla interna sobre otra, sobreescribiendo la tabla destino.
Tambin puede ser utilizada para copiar el contenido de tablas internas.

Ej:
* Copiar algunas entradas de una tabla interna en otra, agregndolas al final de la tabla
* destino
APPEND LINES OF itab1 FROM 1 TO 5 TO itab2.
* Copiar las entradas de una tabla interna en otra, insertndolas en una posicin de la
*tabla destino.
INSERT LINES OF itab1 INTO itab2 INDEX 2.
* Copiar una tabla interna en otra, sobreescribiendo la tabla destino.
* Si las tablas internas tienen header line, el mismo y las table lines tienen el mismo
* nombre, por esto para referenciar las table lines se usa [].

Pgina 26 de 63

MOVE itab2 TO itab1.


MOVE itab2[] TO itab1[].
itab1[] = itab2[].

"Si las tablas no tienen header line


"Si las tablas tienen header line.

* Recordar que silas tablas internas tiene header line, la sentencia:


itab1 = itab2.
* Solamente copia el header line (cabecera).

Lectura de registros de tablas internas.


Sentencia
LOOP .. ENDLOOP
READ
AT .. ENDAT
SUM

Descripcin
Lectura de registros de tablas internas, recorriendo registro a registro.
Lectura de un registro particular de una tabla interna usando un ndice o una clave.
Eventos internos e la sentencia LOOP que se activan cuando se cumplen ciertas
condiciones.
Suma los campos numricos de los registros de una tabla interna (dentro de un
loop).

Lectura de un registro de la tabla interna usando READ.


El formato bsico de la sentencia es:
READ TABLE <itab> [index n | with key f1 = v1 .. fn = vn].
La sentencia READ lee un registro de la tabla interna y lo guarda en el header line o un rea de trabajo para
su tratamiento.
* Leer el cuarto registro de una tabla interna
READ TABLE itab INDEX 4.
* Leer el registro que cumpla determinada condicin
READ TABLE itab WITH KEY col1 = val1 col2 = val2.
* Guardar la lnea en un rea de trabajo
READ TABLE itab INDEX 2 INTO wa.
En la variable del sistema SY-TABIX queda almacenado el ndice del registro ledo, mientras que
SY-SUBRC se setea con valor 0 si se ley un registro, o <> 0 si no se pudo leer ningn registro.
Usos de LOOP..ENDLOOP para recorrer una tabla interna
* 1) Recorrido de la tabla completa. En cada paso del LOOP se guarda el contenido del
registro en la header line.
LOOP AT itab.
...
ENDLOOP.
* 2) Recorrido condicional de la tabla interna. Solamente se leen los registros que cumplan
* la condicin especificada.
LOOP AT itab WHERE col1 = valor AND col2 > '9'.
...
ENDLOOP.
* 3) Recorrer un intervalo de registros de la tabla interna
LOOP AT itab FROM 10 TO 25.
...
ENDLOOP.
En cada paso del loop, SY-TABIX contiene el ndice del registro que se est tratando. Si la tabla interna est
vaca, el flujo de control no entra al LOOP..ENDLOOP y SY-SUBRC <> 0.

Pgina 27 de 63

La adicin INTO (LOOP AT itab INTO wa) permite recorrer la guardando el contenido de cada registro en un
rea de trabajo (WA).
Procesamiento de niveles de control en tablas internas
El procesamiento de niveles de control se permite dentro de un LOOP de una tabla interna. Esto significa
que pueden agruparse secuencias de entradas de la tabla interna segn el contenido de ciertos campos.
Los niveles de control se forman ordenando la tabla interna primero por su primer columna, luego por la
segunda, etc.
Cada cambio de color en una columna activa un evento AT dentro del LOOP de la tabla.

El siguiente ejemplo muestra los diferentes eventos AT que se activan al recorrer la tabla:
LOOP AT itab.
AT FIRST.
"Esto se ejecuta cuando se ley el primer registro
ENDAT.
AT NEW col.
"Esto se ejecuta cuando se ley un nuevo valor en COL
ENDAT.
"Lo que no est dentro de ningn AT se ejecuta para todos los registros
AT END OF col.
"Esto se ejecuta cuando se lee el ltimo registro en COL antes de un "cambio de valor.
ENDAT.
AT LAST.
"Esto se ejecuta cuando se lee el ltimo registro de la tabla int.
ENDAT.
ENDLOOP.

Dentro de un AT..ENDAT, el header line de la tabla interna solamente se carga con el valor de la lnea
actual para los registros que estn a la izquierda del campo clave del grupo que se est evaluando. Los
campos a la izquierda del mismo se llenan con '*'.
Uso de SUM para calcular totales y subtotales en un evento AT.
Dentro de un evento AT, puede usarse la sentencia SUM para calcular los totales de los campos numricos
de la tabla interna. Los registros que se van a totalizar dependen del evento en el que se incluya el SUM.
Ej:
LOOP AT itab.
AT END OF col1.
SUM.
ENDAT.
...
AT LAST.
SUM.
ENDAT.
ENDLOOP.

"Totales por COL1

"Totales de la tabla interna

Pgina 28 de 63

Los totales se almacenan en el header line, en los campos de tipo numrico.


Modificacin de registros de tablas internas.
Sentencia
MODIFY
WRITE .. TO
DELETE

Descripcin
Modifica el contenido de un registro de la tabla interna.
Modifica el contenido de un registro de la tabla interna.
Borra un registro de la tabla interna.

En todos los casos, SY-SUBRC es 0 si la tabla interna pudo ser borrada/modificada. En caso contrario es
<> 0.
Ordenamiento de registros de una tabla interna
Se usa la sentencia SORT.
SORT <itab> [by f1 .. fn]. Ordena la tabla interna.
SORT
SORT
* Se
SORT

itab.
"Ordena por la clave estndar de ITAB en forma ascendente.
itab BY col1 col2.
"Ordena por COL1 y COL2 en forma ascendente.
puede especificar si el criterio es ascendente o descendente:
itab BY col2 ASCENDING col3 DESCENDING.

Determinacin de la cantidad de entradas de una tabla interna


DESCRIBE TABLE <itab> LINES <var>.
La variable VAR debe ser de tipo numrico, en ella se almacena la cantidad de entradas de la tabla interna
ITAB.
Comparacin de tablas internas
Las tablas internas pueden usarse como operandos en expresiones lgicas (con operadores EQ, NE, LT,
LE, GT, GE). Cabe recordar que si las tablas tienen header line hay que usar [] para referirse a las table
lines.
El primer criterio al comparar tablas internas es la cantidad de entradas. Una tabla ser mayor que otra si
tiene ms entradas. Si las tablas son iguales en cantidad de entradas se contina la comparacin registro a
registro. La comparacin para en cuanto se encuentra un componente de la tabla que es distinto entre las
dos. En ese caso devuelve el resultado de la comparacin entre sos componentes.

Pgina 29 de 63

XIII.Mensajes
Los mensajes se gestionan desde la transaccin SE91. Los mensajes se agrupan por clases de mensaje
(MESSAGE ID). La misma agrupa mensajes que tengan la misma unidad funcional.
La clase de mensaje se define luego en los programas ABAP mediante la sentencia REPORT (clusula
MESSAGE-ID).
Recordar que los mensajes se invocan con la sentencia MESSAGE.

Nro. Mensaje

Texto mensaje

Variables de mensaje
No necesita texto explicativo
Si se quiere asociar un texto explicativo a un mensaje, se hace posicionandose en el mismo y con el botn
.

Pgina 30 de 63

XIV. Control externo del flujo de un programa


El flujo de un programa ABAP puede controlarse externamente, a travs de eventos. Cada sentencia de
evento marca el inicio de un bloque de proceso.
Un bloque de proceso est compuesto por todas las sentencias entre dos palabras clave de evento o entre
una palabra clave de evento y la sentencia FORM (sentencia de inicio de subrutina).
Toda sentencia escrita entre la sentencia REPORT y la primer palabra clave de evento o una subrutina
(sentencia FORM) es automticamente aadida al evento por defecto: START-OF-SELECTION.
Si el evento START-OF-SELECTION existe, dichas lneas se insertan al principio del mismo.
Toda sentencia entre una sentencia ENDFORM (cierre de subrutina) y una palabra clave de evento, o entre
una sentencia ENDFORM y el final del programa no forman parte de ningn bloque de proceso, y por lo
tanto no se ejecutan.
Eventos principales
PALABRA CLAVE
INITIALIZATION
AT SELECTION-SCREEN
START-OF-SELECTION
GET
END-OF-SELECTION

EVENTO
Se procesa antes de que aparezca la pantalla de seleccin.
Se procesa mientras la pantalla de seleccin est activa.
Se procesa despus de la pantalla de seleccin.
Punto de control entre un report y una base de datos lgica. Se
ejecuta cuando se leyeron registros de una tabla de la BD lgica.
Se activa luego de procesar todos los eventos GET (cuando ya se
han ledo todos los registros de la BD lgica).

Ejemplos:
INITIALIZATION.
AT SELECTION-SCREEN.
* Si hay error habilitar solamente el parmetro indicado para cargar datos
AT SELECTION-SCREEN ON parm.
* Para chequear los valores cargados en un select-options
AT SELECTION-SCREEN ON END OF s_bukrs.
* Si hay error habilitar solamente los campos radiobutton del grupo RAD1 para
cargar datos
AT SELECTION-SCREEN ON RADIOBUTTON GROUP rad1.
* Si hay error habilitar solamente los campos que pertenecen al bloque indicado
AT SELECTION-SCREEN ON BLOCK bloque-sel.
START-OF-SELECTION.
GET kna1.
* Obtener solamente determinados campos de la BD Lgica
GET kna1 FIELDS kunnr.
* Procesar el nodo de BD Lgica cuando ya se procesaron sus subordinados
GET kna1 LATE.
END-OF-SELECTION.

Eventos que se procesan en la salida de datos


PALABRA CLAVE
EVENTO
TOP-OF-PAGE
Se active cuando el programa procesa la primera sentencia de escritura de una
nueva pgina del informe.
END-OF-PAGE
Se active cuando el programa procesa la ltima sentencia de escritura de cada

Pgina 31 de 63

pgina del informe.


Ej:
TOP-OF-PAGE.
END-OF-PAGE.

Eventos que se procesan despus de la salida principal de un programa


PALABRA CLAVE
EVENTO
AT USER-COMMAND
Se active cuando se selecciona una funcin (men, pulsador), o se introduce un
comando en el campo de comandos.
AT LINE-SELECTION
Se activa cuando se selecciona una lnea de la salida principal.
AT PFnn
Se activa cuando se presiona una tecla de funcin (PF1 .. PF24).
Abandono de bloques de proceso
STOP: En un evento GET termina el procesamiento de la BD lgica y pasa al evento END-OF-SELECTION.
Ej:
...
START-OF-SELECTION.
WRITE: Prueba STOP.
GET KNA1.
WRITE KNA1-KUNNR.
STOP.
END-OF-SELECTION.
WRITE: / Fin del programa.
El programa imprime el nro. del primer cliente y luego Fin de programa.
EXIT: Termina la ejecucin del evento.
En un evento GET termina el procesamiento de la BD lgica. No ejecuta el evento END-OF-SELECTION.
En START-OF-SELECTION finaliza la ejecucin del programa, mostrando la pantalla de salida.
Ej:
...
START-OF-SELECTION.
WRITE: Prueba STOP.
GET KNA1.
WRITE KNA1-KUNNR.
EXIT.
END-OF-SELECTION.
WRITE: / Fin del programa.

El programa imprime solamente el nro. del primer cliente (no imprime 'Fin del programa').
CHECK <exp_log>: El evento contina procesndose si se cumple la expresin lgica <exp_log>.
En caso contrario finaliza la ejecucin del evento pero no el programa, sino que se contina con el siguiente
registro recuperado de la BD lgica.
Ej:
...
GET bkpf.
CHECK bkpf-budat BETWEEN 20020301 AND 20020305.
REJECT: Finaliza la ejecucin del evento para el registro de la BD lgica que se est tratando, pasando al
siguiente registro.
Ej:
...
GET kna1.
IF kna1-kunnr ge 0001002000.
REJECT.
ENDIF.

Pgina 32 de 63

XV. Programas interactivos


ABAP permite crear listados interactivos. Un listado interactivo ampla el tpico listado clsico con
funcionalidades tales como seleccionar lneas, realizar entradas, introducir comandos, etc.
Los programas que generan listados interactivos trabajan con ciertos campos del sistema. Los ms
utilizados son los siguientes.
Variable
Significado
ndice del listado creado. En el listado principal tiene valor 0, y se incrementa en 1 por cada
SY-LSIND
listado secundario. Cuando se abandona un listado secundario para ir al anterior la variable
disminuye en 1.
SY-LISTI
Nivel del listado desde el cual el evento (seleccin de lnea) fue activado. En general,
SY-LISTI = SY-LSIND 1.
SY-LILLY
Nro. (absoluto) de la lnea desde la cual fue activado el evento.
SY-LISEL
Contenido de la lnea seleccionada
SY-CUROW
Nmero de lnea de la ventana en la cual se posicion el cursor al activar el evento (empieza
en 1).
SY-CUCOL
Nmero de columna en la ventana en la cual se activ el evento (empieza en 1).
SY-CPAGE
Nro. De pgina en la cual se activ el evento.
SY-UCOMM
Cdigo de funcin activado.
SY-PFKEY
Status actual de la interfaz de usuario (Menu Painter).
Los eventos relacionados con los programas interactivos son los siguientes.
Palabra clave
Evento
AT USER-COMMAND
Se active cuando se selecciona una funcin (men, pulsador), o se introduce un
comando en el campo de comandos.
AT LINE-SELECTION
Se activa cuando se selecciona una lnea de la salida principal.
AT PFnn
Se activa cuando se presiona una tecla de funcin (PF1 .. PF24).
TOP-OF-PAGE
DURING Es como el TOP-OF-PAGE pero se activa cuando se imprimen los listados
LINE-SELECTION
secundarios.
Ej:

REPORT ZTEST.
WRITE Listado principal.
AT LINE-SELECTION.
WRITE: Listado secundario, Nivel:, SY-LSIND.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN FUN1.
...
WHEN FUN2.
...
ENDCASE.

AT PF5.

WRITE Puls F5.

AT PF12.
WRITE Puls F12.
TOP-OF-PAGE DURING LINE-SELECTION.
CASE SY-LSIND.

Pgina 33 de 63

WHEN 1.
WRITE Listado secundario 1.
WHEN 2.
WRITE Listado secundario 2.
ENDCASE.
ULINE.
Las sentencias relacionadas con los programas interactivos son las siguientes:
Sentencia
Descripcin
MESSAGE
Activa un mensaje
SET PF-STATUS
Define el cdigo de status, para que el sistema active la interfaz de usuario
correspondiente (Menu Painter).
SET TITLEBAR
Define el ttulo de pantalla.
SET USER-COMMAND
Activa un comando (por lo tanto activa el evento AT USER-COMMAND).
WINDOW
Define una ventana con formato de pantalla.
HIDE
Retiene el contenido de un campo, cargndolo con el valor de la lnea
seleccionada en cada AT LINE-SELECTION.
GET CURSOR
Obtiene el nombre del campo en el cual se encuentra posicionado el cursor.
SET CURSOR
Posiciona el cursor en un campo determinado de la pantalla.
DESCRIBE LIST
Obtiene los atributos de un listado.
SCROLL LIST
Realiza un desplazamiento del listado.
READ LINE
Lee una lnea del listado.
READ CURRENT LINE
Lee la lnea actual del listado.
MODIFY LINE
Modifica el contenido de una lnea
MODIFY CURRENT LINE
Modifica el contenido de la lnea actual.
MESSAGE: Los mensajes se guardan en la tabla T100 y se mantienen a travs de la transaccin SE91. Hay
6 clases de mensajes:
A (Abend)
E (Error)
I (info)
S (Status)
W (Warning)
X (Exit)
Ej:

REPORT ZTEST MESSAGE-ID Z1.


MESSAGE E001.
REPORT ZTEST.
MESSAGE I002(Z1).
* Inclur variables del programa en el mensaje
MESSAGE A003(Z1) WITH var1 var2.

SET PF-STATUS: Define el cdigo de status, para que el sistema active la interfaz de usuario
correspondiente. Este cdigo de status debe haberse definido en el Menu Painter.
Ej:
SET PF-STATUS TEST.
* Usar un PF-STATUS excluyendo funciones
SET PF-STATUS TEST EXCLUDING FC1.
SET PF-STATUS TEST EXCLUDING itab.

Pgina 34 de 63

SET USER-COMMAND: Activa un comando (por lo tanto activa tambin el evento AT USER-COMMAND).
Ej:
SET USER-COMMAND COMD.
HIDE field: Cuando se imprime el listado en pantalla, al emplear la sentencia HIDE sobre un campo se
retiene el contenido del campo para cada lnea de salida. Cuando el usuario selecciona una lnea del listado,
field se carga automticamente con el valor que tiene en la lnea seleccionada.
Ej:
GET kna1.
WRITE: kna1-kunnr, kna1-name1.
HIDE: kna1-kunnr, kna1-pstlz.
...
AT LINE-SELECTION.
WRITE: Se seleccion el cliente, kna1-kunnr.
WRITE: El C.P. es:, kna1-pstlz.
GET CURSOR: Obtiene el nombre del campo en el cual se encuentra posicionado el cursor.
Ej:
DATA v_var(20) TYPE C.
...
AT LINE-SELECTION.
GET CURSOR FIELD v_var.
SET CURSOR: Posiciona el cursor en un campo determinado de pantalla.
Ej:
DATA v_var(5) TYPE C VALUE CAMPO.
DATA campo(3) TYPE C.
...
AT LINE-SELECTION.
SET CURSOR FIELD v_var LINE SY-LILLI.
DESCRIBE LIST: Obtiene los atributos de un listado.
Ej:
* Obtener la cantidad de lneas del listado
DESCRIBE LIST NUMBER OF LINES lin.
* Obtener la cantidad de pginas del listado
DESCRIBE LIST NUMBER OF PAGES n.
* Obtener el nro. de pgina de la lnea seleccionada
DESCRIBE LIST LINE lin PAGE pag.
READ LINE: Lee una lnea del listado, quedando el contenido de la misma en SY-LISEL.
Ej:
AT LINE-SELECTION.
READ LINE SY-LILLI.
WRITE SY-LISEL.
MODIFY LINE: Modifica el contenido de una lnea del listado.
Ej:
* Modificar el formato de una lnea
AT LINE-SELECTION.
MODIFY LINE SY-LILLI LINE FORMAT COLOR 6.

Pgina 35 de 63

* Modificar el contenido de una lnea


WRITE: 'Valor:', var.
AT LINE-SELECTION.
* Se modifica el contenido de VAR.
ADD 1 TO var.
* Y se modifica el contenido de SY-LISEL
SY-LISEL(2) = '**'.
MODIFY LINE SY-LILLY FIELD VALUE var.
MODIFY CURENT LINE: Modifica el contenido de la lnea del listado seleccionada actualmente.
Ej:
AT LINE-SELECTION.
MODIFY CURRENT LINE LNE FORMAT INVERSE.

Pgina 36 de 63

XVI. Modularizacin de un programa


Las tcnicas de modularizacin que se presentarn permiten que la lectura y mantenimiento de los
programas sean ms fciles.
Modularizacin en declaracin de datos.
Sentencia
Descripcin
INCLUDE STRUCTURE
Incluye una estructura del diccionario de datos.
Transacciones
Las siguientes sentencias permiten acceder a transacciones desde un programa ABAP.
Sentencia
Descripcin
CALL TRANSACTION
Llama a una transaccin sin abandonar el proceso actual.
LEAVE TO TRANSACTION
Llama a una transaccin abandonando el proceso actual.
CALL TRANSACTION: Llama a una transaccin. Cuando sta termina de ejecutarse, el control vuelve al
programa que realiz el call transaction.
* Forma bsica
CALL TRANSACTION FB02.
* Si quiero completar los datos de la pantalla inicial directamente desde el
programa, y
* saltear la primer pantalla de la transaccin invocada.
SET PARAMETER ID BUK FIELD 0100.
SET PARAMETER ID BLN FIELD v_belnr.
SET PARAMETER ID GJR FIELD 2002.
CALL TRANSACTION FB02 AND SKIP FIRST SCREEN.
* Definir desde el programa todo el pantalleo de la transaccin a invocar
CALL TRANSACTION FB02 USING itab.
* En este ltimo caso se pueden agregar las siguientes opciones:
CALL TRANSACTION FB02 USING itab
MODE A
UPDATE S
MESSAGES INTO msg_tab.
Estas opciones significan:
MODE: Forma de visualizacin de la transaccin:
A: Visible (default).
E: Solo errores.
N: Invisible.
UPDATE: Mtodo de actualizacin que se va a usar.
A: Update asincrnico (default). El proceso enva el request del update a otro
proceso, y no espera que ste termine.
S: Update sincrnico. El proceso enva el request del update a otro
proceso, y espera que ste termine antes de continuar.
L: Update local. El mismo work process realiza el update. Obviamente el proceso
espera que finalize el update.
MESSAGES INTO: Devuelve los mensajes de la transaccin en una tabla interna, que debe
definirse como BDCMSGCOLL.
LEAVE TO TRANSACTION: Llama a una transaccin. La transaccin actual se finaliza.

Pgina 37 de 63

* Forma bsica
LEAVE TO TRANSACTION FB02.
* Si quiero completar los datos de la pantalla inicial directamente desde el programa, y
* saltear la primer pantalla de la transaccin invocada.
SET PARAMETER ID BUK FIELD 0100.
SET PARAMETER ID BLN FIELD v_belnr.
SET PARAMETER ID GJR FIELD 2002.
LEAVE TO TRANSACTION FB02 AND SKIP FIRST SCREEN.
La variable del sistema SY-TCODE tiene en cada proceso el cdigo de transaccin actual.

Pgina 38 de 63

Programas
Sentencia
INCLUDE
SUBMIT
LEAVE PROGRAM

Descripcin
Incluye cdigo de otro programa.
Ejecuta un programa.
Abandona el programa actual.

INCLUDE: Generalmente se utiliza para separar la declaracin de datos, el proceso y las subrutinas de un
programa. Supongamos que definimos todos los datos de un programa ZREPORT en un programa (tipo
include) llamado ZDATOS. A su vez creamos otro programa ZRUTINAS (tambin de tipo include) donde
guardamos todas las subrutinas que usa el programa ZREPORT. La estructura de ZREPORT quedara as:
REPORT zreport.
INCLUDE zdatos.
<proceso principal>
INCLUDE zrutinas.
SUBMIT: Ejecuta un programa desde al actual. Si no se especifica lo contrario, el control pasa al programa
submitido (no vuelve al llamador).
* Forma bsica
SUBMIT zreport.
* Si se desea que al terminar de ejecutarse el programa submitido el control
SUBMIT zreport AND RETURN.
* Submitir un reporte cuyo nombre est en una variable V_PROG_NAME
SUBMIT (v_prog_name).
* Submitir un reporte pasndole los parmetros de seleccin
SUBMIT zreport
WITH bukrs = v_bukrs
WITH monat IN s_monat.
LEAVE PROGRAM: Abandona la ejecucin del programa actual.
IF sy-uname <> USR01.
LEAVE PROGRAM.
ENDIF.
Mdulos de funcin
Son subrutinas externas especiales centralizadas en una librera. El sistema provee numerosos mdulos de
funcin predefinidos que pueden ser utilizados por los programas ABAP. Tambin el sistema permite al
cliente crear sus propios mdulos de funcin. La principal diferencia entre un mdulo de funcin y una
subrutina es la interfaz definida para pasar y recibir datos en un mdulo de funcin. Tambin se soporta el
manejo de excepciones.
Sentencia
Descripcin
CALL FUNCTION
Realiza una llamada a un mdulo de funcin
RAISE
Activa una excepcin. Solamente puede ser usada dentro de la definicin de un
mdulo de funcin.
Ej:
* Invocar a una funcin. SY-SUBRC contiene el cdigo de retorno (si termin OK
es 0).
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
DELIMITER = ':'
STRING = var_1
IMPORTING

Pgina 39 de 63

HEAD = var_2
TAIL = var_3
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
* Activar una excepcin desde un mdulo de funcin
FUNCTION Z_DIVIDE.
...
IF DIVISOR = 0.
RAISE DIVISOIN_ZERO.
ENDIF.
...
ENDFUNCTION.
Subrutinas
Las subrutinas son mdulos de programa que pueden ser llamados desde programas ABAP. Mediante las
subrutinas es posible escribir solamente una vez partes de un programa que se ejecutan en forma repetitiva.
Sentencia
Descripcin
FORM .. ENDFORM
Definicin de una subrutina
PERFORM
Llamada a una subrutina
FORM .. ENDFORM: La sintaxis de la definicin de una subrutina es la siguiente:
FORM subrutina USING parm_1 .. parm_n
CHANGING par_1 .. par_n
TABLES itab STRUCTURE estructura_1
itabn STRUCTURE estructura_n.
USING: Se utilizan como parmetros de entrada a la subrutina.
CHANGING: Se utilizan como parmetros de salida de la subrutina.
TABLES: Son tablas internas (pueden ser parmetros de entrada o salida).
Ej:
* Llamado bsico a una subrutina
PERFORM f_rutina USING dato CHANGING retorno.
...
FORM f_rutina USING p_dato
CHANGING p_retorno.
p_retorno = p_dato * 2.
ENDFORM.
* Llamado a subrutinas que estn en otros programas.
PERFORM f_rutina(zrutinas) USING dato CHANGING retono.
* Otra forma de llamar a una subrutina en otro programa
v_rutina = 'F_RUTINA'.
v_programa = 'ZRUTINAS'.
PERFORM (v_rutina) IN PROGRAM (v_programa)
USING dato
CHANGING retorno.

Macroinstrucciones
Una macroinstruccin es la definicin de una sentencia interna en un programa.
Sentencia
Descripcin
DEFINE .. END-OF-DEFINITION
Definicin de una macroinstruccin. La ejecucin de la misma se
realiza con el nombre de sta.
Ej:
* Definir una macroinstruccin que realiza una operacin aritmtica
DATA resultado TYPE I.
...

Pgina 40 de 63

DEFINE operacin.
resultado = &1 &2 &3.
WRITE resultado.
END-OF-DEFINITION.
...
* Invocar a la macroinstruccin
operacion 4 + 3.
operacion 2 ** 7.
Se pueden definir macros globales, que pueden ser utilizadas por todos los programas. Las mismas se
llaman macros RMAC, y se encuentran an la tabla TRMAC.
Salida de procesos
Para abandonar el flujo de alguno de los procesos anteriormente vistos se utilizan las siguientes setencias.
Sentencia
Descripcin
LEAVE
Abandona el proceso iniciado por un CALL TRANSACTION o SUBMIT .. AND RETURN.
El control se devuelve donde se realiz la llamada.
EXIT
Abandona una subrutina o cualquier unidad de modularizacin en forma incondicional.
CHECK
Abandona una subrutina o cualquier unidad de modularizacin en forma condicional.

Pgina 41 de 63

XVII. Debugging de un programa

La herramienta de depuracin (debugger) permite ejecutar paso a paso una transaccin o programa
ABAP. Se puede ver el contenido de campos o tablas internas, as como crear puntos de ruptura
dinmicos (watchpoint).
La transaccin de depuracin se puede activar a travs de:
Las sentencias BREAK y BREAK-POINT.
Introduciendo /h en el campo de comandos (OK_CODE) de cualquier programa o transaccin y
pulsando INTRO.
Con break-points externos al programa. Desde el editor ABAP, posicionando el cursor en la lnea en
la que se quiere fijar y a travs de Utilidades -> Breakpoints -> Fijar/borrar (o directamente botn
).

La siguiente pantalla muestra la transaccin de depuracin:

Programa de
Control.
Programa que se est ejecutando
Nmero de lnea del programa
Prxima sentencia que se va a
ejecutar

Break-point fijado

Ver el contenido de una tabla interna


Variables ingresadas para ver su
contenido
Valor de campos del sistema
Modificar valor de campo o variable

Pgina 42 de 63

Pantallas del debugger


En la parte superior de la pantalla de la transaccin de depuracin se encuentran los botones que permiten
pasar a las distintas pantallas del debugger.

TABLA: Permite visualizar el contenido de una tabla interna.


BREAKPOINTS: Lista de breakpoints activos para el programa.
WATCHPOINTS: Lista de breakpoints condicionales (watchpoints).
LLAMADAS: Resumen del flujo de proceso (llamadas realizadas, eventos, etc. que se ejecutaron hasta
llegar al punto de ejecucin actual).
RESUMEN: Lista de los bloques de proceso del programa actual.
OPCIONES: Opciones de depuracin.
Watchpoints
Los watchpoints son breakpionts opcionales. El sistema evala si un campo determinado cambi su valor, y
si se da esto, se produce un breakpoint en la sentencia posterior al cambio de valor.
Los watchpoints se crean con el botn
Aparece la siguiente pantalla:

Variable a evaluar
Comparador lgico (si no se pone
nada se activa cuando cambia el
valor).
Valor o variable contra el que se
compara
Ejecucin paso a paso en el
debugger
Los siguientes botones permiten hacer el seguimiento paso a paso del programa.

1) PASO A PASO (F5): Ejecuta el programa paso a paso.


2) EJECUTAR (F6): Ejecuta paso a paso, pero no entra a una subrutina, mdulo de funcin, etc.
3) RETORNAR (F7): Vuelve al evento, subrutina, etc que invoc al mdulo que se est ejecutando.
4) CONTINUAR (F8): Sigue ejecutando hasta el siguiente breakpoint, watchpoint o hasta que termine el
programa.
Sentencias de depuracin
Sentencia
BREAK
BREAK-POINT
Ej:
* Activa el debugger
BREAK-POINT.

Descripcin
Activa el debugging de un programa para un usuario determinado.
Activa el debugging de un programa.
para todo usuario

* Activa el debugger para el usuario USR01


BREAK usr01.

Pgina 43 de 63

Memoria SAP y memoria ABAP


La memoria SAP (memoria global) est disponible para el usuario durante todo el ciclo de vida de su sesin.
Es decir que sus contenidos se mantienen ms all de la duracin de una transaccin.
El contenido de la memoria ABAP permanece durante el transcurso de una sesin externa (MODO) y
durante el ciclo de vida de un proceso (por ejemplo, transaccin). No es compartida entre dos o ms modos.
E/S en memoria SAP
Sentencia
Descripcin
SET PARAMETER
Actualiza un parmetro de memoria.
GET PARAMETER
Recupera un parmetro de memoria.
SET PARAMETER: Guarda un valor en la memoria SAP. Cualquier valor existente en la memoria SAP con
el mismo ID es sobreescrito. El ID puede tener hasta 20 caracteres.
Ej:
v_sociedad = 0900.
SET PARAMETER ID BUK FIELD v_sociedad.
GET PARAMETER: Recupera un valor de la memoria SAP. Si se pudo encontrar en la memoria SAP un
valor con el ID especificado, se setea SY-SUBRC = 0. En caso contrario SY-SUBRC = 4.
Ej:
GET PARAMETER ID BLN FIELD v_nro_doc.
E/S en memoria ABAP
Sentencia
EXPORT TO MEMORY
IMPORT FROM MEMORY
FREE MEMORY

Descripcin
Exporta datos a la memoria ABAP.
Recupera datos de la memoria ABAP.
Libera la memoria ABAP.

EXPORT TO MEMORY: Guarda datos en clusters de la memoria ABAP. Estos datos pueden ser variables,
estructuras, tablas internas, etc.). Cada EXPORT TO MEMORY sobreescribe la memoria ABAP para el ID
indicado.
IMPORT FROM MEMORY: Importa objetos de datos de un cluster de datos de la memoria ABAP. Si se
pudo encontrar en la memoria ABAP un cluster de datos con el ID especificado, se setea SY-SUBRC = 0.
En caso contrario SY-SUBRC = 4.
E/S en archivos externos
SAP permite trabajar con archivos secuenciales localizados tanto en el servidor de aplicacin como en el
servidor de presentacin.
Servidor de aplicacin
Las sentencias que permiten trabajar con archivos en el servidor de aplicacin son:
Sentencia
Descripcin
OPEN DATASET
Abre un archivo del servidor de aplicacin.
TRANSFER
Transfiere un registro al archivo del servidor de aplicacin.
READ DATASET
Lee un registro del archivo del servidor de aplicacin.
DELETE DATASET
Borra un archivo del servidor de aplicacin.
CLOSE DATASET
Cierra un archivo del servidor de aplicacin.
OPEN DATASET: Las siguientes opciones se utilizan para especificar la forma en que se va a abrir el
archivo:
FOR INPUT: Abre el archivo para lectura
FOR OUTPUT: Abre el archivo para escritura (si tena algn contenido lo sobreescibe). Si el archivo no
existe lo crea.
FOR APPENDING: Abre el archivo para escritura (si tena algn contenido, lo mantiene y agrega lo nuevo al
final). Si el archivo no existe lo crea.

Pgina 44 de 63

IN TEXT MODE: Los contenidos del archivo se estructuran en lneas. Cada READ DATASET o TRANSFER
leen o escriben una lnea del archivo.
IN BINARY MODE: Los contenidos del archivo no se estructuran en lneas.
El resultado de OPEN DATASET puede comprobarse verificando el valor de SY-SUBRC (si es 0 significa
que el archivo se abri correctamente).
Ej:
* Escritura de un archivo de texto
PARAMETERS p_file(80) TYPE C.
DATA registro LIKE bkpf.
...
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE. "abrir el archivo
IF SY-SUBRC = 0.
...
TRANSFER registro TO p_file.
* graba un registro (lnea) en el archivo
...
CLOSE DATASET p_file.
"cerrar el archivo
ENDIF.
* Lectura del archivo de texto
OPEN DATASET p_file FOR INPUT IN
IF SY-SUBRC = 0.
DO.
READ DATASET p_file
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET p_file.
ENDIF.

TEXT MODE.

"abrir el archivo

INTO registro.

"Leer un registro

"Salir si ya no hay registros en el archivo


"cerrar el archivo

* Borrar un archivo
DELETE DATASET p_file.

Servidor de presentacin
Para trabajar con archivos de la PC local, el sistema no ofrece sentencias ABAP sino una serie de mdulos
de funcin.
Mdulo de funcin
Descripcin
DOWNLOAD
Crea un archivo en el servidor de presentacin, CON dilogo con el usuario.
WS_DOWNLOAD
Crea un archivo en el servidor de presentacin, SIN dilogo con el usuario.
UPLOAD
Lee un archivo del servidor de presentacin, CON dilogo con el usuario. El
contenido del archivo se guarda en una tabla interna.
WS_UPLOAD
Lee un archivo del servidor de presentacin, SIN dilogo con el usuario. El
contenido del archivo se guarda en una tabla interna.

Pgina 45 de 63

XX. Procesos Batch Input


El concepto de Batch Input consiste en la actualizacin de la base de datos a travs de las transacciones
del sistema en forma automtica. Los mtodos Batch Input ofrecen las siguientes ventajas:
Sin intervencin: No se requiere intervencin manual durante la transferencia de datos.
Integridad de datos: Un batch input introduce los datos al sistema SAP de la misma forma en que lo
hara un usuario, introduciendo los datos manualmente, a travs de las transacciones SAP. Todos
los controles y chequeos de la transaccin tambin estn presentes en la transferencia de datos con
Batch Input.
Para realizar un batch input el sistema ofrece los siguientes mtodos:
Mtodo Batch Input clsico: Un programa ABAP lee los datos externos y genera una sesin (juego
de datos) de Batch Input. Luego de generarla hay que procesarla desde la transaccin SM35
(Sistema -> Servicios -> Batch Input -> Carpetas).
Mtodo Call transaction using: Este mtodo utiliza la sentencia Call transaction para ejecutar la
transaccin. No genera juego de datos, las transacciones son ejecutadas online.
Todos los mtodos Batch Input se apoyan en tablas internas con la estructura BDCDATA.
Estructura BDCDATA
CAMPO
TIPO
LONGITUD
SIGNIFICADO
PROGRAM
CHAR
8
Nombre del module-pool (programa) de la transaccin.
DYNPRO
NUMC
4
Nombre del dynpro de la transaccin.
DYNBEGIN
CHAR
1
Inicio de datos de un dynpro.
FNAM
CHAR
35
Nombre de campo.
FVAL
CHAR
80
Valor de campo.
Esta estructura se utiliza de la siguiente manera:
Identificacin del dynpro: Lo primero que se hace es identificar el dynpro sobre el cual vamos a cargar
datos. Para esto se inserta un registro en la tabla BDCDATA con la informacin en los campos PROGRAM
(nombre de programa), DYNPRO (nmero de dynpro) y DYNBEGIN = X (comienza una nueva dynpro). Los
campos FNAM y FVAL deben estar en blanco.
Ej:
CLEAR TABLA.
TABLA-PROGRAM = SAPMS38M.
TABLA-DYNPRO = 0100.
TABLA-DYNBEGIN = X.
APPEND TABLA.
Introduccin de valores de un campo: Despus de registrar los valores del dynpro, se especifican los valores
de los campos que se quieren cargar en pantalla, generando entradas en la tabla BDCDATA con los
campos FNAM (nombre de campo) y FVAL (valor).
Ej:
CLEAR TABLA.
TABLA-FNAM = BKPF-BLDAT.
TABLA-FVAL = sy-datum.
APPEND TABLA.
Ejecucin de una funcin: Para ejecutar una funcin en una transaccin hay que introducir el cdigo de
funcin en el campo de comandos. Para esto se genera una entrada en la tabla BDCDATA con el campo
FNAM con valor BDC_OKCODE (para indicar que es un comando) y el campo FVAL con el cdigo de
comando a ejecutar.
Ej:
CLEAR TABLA.
TABLA-FNAM = BDC_OKCODE.
TABLA-FVAL = /11.
APPEND TABLA.

Pgina 46 de 63

Campos especiales (bucles): Para poder especificar un campo en un bucle (por ejemplo en una grilla con
datos) hay que especificar en FNAM el nombre de campo seguido del subndice entre parntesis.
Ej:
CLEAR TABLA.
TABLA-FNAM = Q0391-LGART(04).
TABLA-FVAL = 7B01.
APPEND TABLA.
Posicionamiento del cursor: Para posicionar el cursor en un campo determinado, se genera una entrada en
BDCTAB con FNAM = BDC_CURSOR y FVAL con el nombre de campo donde se desea situar el cursor.
Ej:
CLEAR TABLA.
TABLA-FNAM = BDC_CURSOR.
TABLA-FVAL = BKPF-BLDAT.
APPEND TABLA.
Mtodo Batch Input Clsico
Este mtodo crea sesiones (juegos de datos) de batch input. Para ello se utilizan los siguientes mdulos de
funcin:
MDULO DE FUNCIN
SIGNIFICADO
BDC_OPEN_GROUP
Crear un juego de datos de Batch Input
BDC_INSERT
Insertar una transaccin en el juego de datos de Batch Input. Toda la
informacin correspondiente a la ejecucin de la transaccin estar
contenida en una tabla interna con estructura BDCDATA.
BDC_CLOSE_GROUP
Cerrar un juego de datos de Batch Input.
Ej:
* Crear un juego de datos Batch Input
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT
= SY-MANDT
" Mandante
GROUP
= 'FACTURAS'
" Nombre J.Datos
HOLDDATE
= v_fecha
" Fecha de bloqueo (opcional)
KEEP
= 'X'
" Mantener J.datos procesado (opcional)
USER
= sy-uname
" Usuario propietario de sesin
EXCEPTIONS
CLIENT_INVALID
= 1
DESTINATION_INVALID
= 2
GROUP_INVALID
= 3
GROUP_IS_LOCKED
= 4
HOLDDATE_INVALID
= 5
INTERNAL_ERROR
= 6
QUEUE_ERROR
= 7
RUNNING
= 8
SYSTEM_LOCK_ERROR
= 9
USER_INVALID
= 10
OTHERS
= 11
.
* Ahora hay que llenar la tabla interna.
REFRESH tabla.
* Primer pantalla
clear tabla.
tabla-program = SAPMS38M.
tabla-dynpro = 0100.
tabla-dynbegin = X.
append tabla.
* Campo de la primer pantalla
clear tabla.
tabla-fnam = RF02K-EKORG.
tabla-fval = v_ekorg.
append tabla.

Podra ir un literal

Pgina 47 de 63

* Comando de la primer pantalla


clear tabla.
tabla-fnam = BDC_OKCODE.
tabla-fval = P+.
append tabla.
* Siguiente pantalla
clear tabla.
tabla-program = SAPMS38M.
tabla-dynpro = 0200.
tabla-dynbegin = X.
append tabla.
* Comando de la segunda pantalla
clear tabla.
tabla-fnam = BDC_OKCODE.
tabla-fval = /11.
append tabla.
* Insertar una transaccin en el juego de datos
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE
= 'FB01'
Transaccin
TABLES
DYNPROTAB
= tabla
Tabla interna (BDCDATA)
EXCEPTIONS
INTERNAL_ERROR
= 1
NOT_OPEN
= 2
QUEUE_ERROR
= 3
TCODE_INVALID
= 4
PRINTING_INVALID
= 5
POSTING_INVALID
= 6
OTHERS
= 7
.
* Cerrar in juego de datos Batch Input
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN
= 1
QUEUE_ERROR
= 2
OTHERS
= 3.

Mtodo CALL TRANSACTION using


Este mtodo es el visto en la sentencia CALL TRANSACTION. En USING se le pasa la tabla interna con
estructura BDCDATA (la misma que en el batch input clsico).
Ej:
CALL TRANSACTION SU01
USING TABLA
Tabla con formato BDCDATA
MODE N
No visible
MESSAGES INTO msgtab.
Tabla interna con los mensajes

Pgina 48 de 63

Programas estndar de Batch Input


Existen transacciones estndar que son bastante complejas. Realizar un batch input con ellas supondra un
gran esfuerzo. Por ejemplo, la transaccin FB01 permite contabilizar documentos de finanzas (FI). Las
dynpros que se presentan en cada caso son en funcin de los indicadores de operacin y cuentas de mayor
utilizadas.
Para solucionar este problema SAP provee programas estndar de Batch Input. Estos programas leen los
datos de un archivo secuencial en un formato especial, de manera que lo que queda por hacer es un
programa que lea los datos a levantar, los grabe en un archivo con este formato especial y ejecutar el
programa estndar.
Ej:
RFBIBL00 (crea documentos FI),
RFBIDE00 (Crea y modifica deudores)
RMMMBIM0 (Crea/modifica materiales)
Ejecutar un juego de datos desde el programa ABAP
Una vez que generamos un juego de datos desde el programa ABAP, ste queda listo para procesar
manualmente desde la transaccin SM35. Si se desea que el programa ya ejecute el juego de datos, puede
hacerse haciendo un SUBMIT del programa RSBDCSUB, que procesa juegos de datos en background.
Ej:
SUBMIT RSBDCSUB
WITH MAPPE EQ v_sesion Nombre j. datos
WITH VON
EQ sy-datum Fecha de creacin
WITH Z_VERARB EQ 'X'
Status: NUEVO
WITH FEHLER
EQ ' '
Status: ERRONEO
AND RETURN.

Transaccin grabadora de batch-input


Mediante la transaccin SHDB se puede grabar una sesin Batch Input, de manera de poder ver los
nombres de campos y dynpros que intervienen. Esa grabacin se puede crear un programa o un mdulo de
funcin para procesar el Batch Input de la forma en la que se grab en la grabadora e Batch Input.
Para iniciar una grabacin nueva:

Grabacin nueva
Crear un programa en base a una
grabacin

Pgina 49 de 63

XXI. User Exits


Las User Exits son funciones que SAP proporciona dentro de sus transacciones estndar, y que permiten
ampliar la funcionalidad de dichas transacciones sin modificar los programas estndar de SAP.
Esto es lo que en SAP se denominan Ampliaciones, porque se ampla la funcionalidad del sistema.
La gran ventaja es que se tiene la seguridad de que las ampliaciones al estndar no se van a sobreescribir
por la aplicacin de parches o upgrades al sistema.
Cmo s si una transaccin estndar tiene asociada un User Exit?
Hay varias formas de buscar un user exit en la transaccin estndar:
Buscar en el cdigo del programa la sentencia:
CALL CUSTOMER-FUNCTION 'xxx'.
Dicha sentencia es la que invoca la user exit si est activa.
Buscar por clase de desarrollo: en la transaccin CMOD, entrar por men Utilidades ->
Ampliaciones SAP. Ingresar la clase dedesarrollo de la transaccin estndar y ejecutar.
Buscar por jerarqua de aplicaciones: acceder a Herramientas -> Workbench ABAP-> Resumen->
Jerarqua de Aplicaciones. Pararse en la rama correspondiente al mdulo al que pertenece la
transaccin estndar (por ejemplo: LO Logstica general-) y marcarla. Seleccionar el botn
"Sistema de informacin" y en el rbol de informes que aparece . Desplegar la rama Ent. ->
Tcnicas Exit -> Exits de Cliente -> Ampliaciones y ejecutar.
Una vez encontrada la User Exit adecuada, hay que codificarla:
Acceder a la transaccin CMOD, desde aqu hay que crear un Proyecto.

Una vez creado seleccionar el radiobutton Asignacin ampliaciones cliente y pulsar Modificar.

Ingresar el nombre del Exit que se va a usar, y pulsar Componentes.

Haciendo doble click en el nombre del mdulo de funcin, nos lleva al mdulo de funcin que contiene un
Include. Dentro de ese include debemos ingresar el cdigo de nuestra user exit. Luego de esto HAY QUE
ACTIVAR EL PROYECTO para que funcione el EXIT.

Pgina 50 de 63

XXII.Field Exits
Los Field Exits son validaciones particulares que se aplican a un campo de pantalla determinado. A
diferencia de las user exits, puede crearse un field exit que acte sobre cualquier campo de cualquier
transaccin de dilogo, pero acta solamente sobre el valor de ese campo, es decir que en el momento de
ejecutarlo desconoce el valor de el resto de los campos ingresados en la transaccin.
Los field exits se definen sobre ELEMENTOS DE DATOS, y nosotros decimos en que programa/pantalla se
va a activar.
Para crear/modificar/visualizar un field exit, debe ejecutarse el porgrama RSMODPRF.
Al ejecutarlo (sin indicar parmetros de seleccin) vemos la siguiente pantalla:

Para crear un field exit, hay que ejecutar la opcin de men Exit Campo -> Crear.

Cargar el elemento de datos sobre el cual se quiere crear el field exit, y pulsar Continuar. Nos lleva a la
transaccin SE37, donde nos propone el nombre del mdulo de funcin que se va a crear. En dicho mdulo
de funcin se va a codificar el field exit.
Este mdulo de funcin tiene un parmetro INPUT de entrada y un parmetro OUTPUT de salida. Lo
mmimo que debe tener esta funcin es OUTPUT = INPUT, para que el valor ingresado se siga viendo en
pantalla luego de ejecutarse.

Pgina 51 de 63

Grabar y activar la funcin. Volver a la pantalla de field exits.

Una vez creado el field exit, hay que asignarlo al programa/dynpro sobre el cual queremos que se ejecute.
Para esto lo marcamos y pulsamos Asignar prog./dynpro.

En ExitCamp, se pone el nmero de field exit. Esto solamente es necesario si para un mismo elemento de
datos queremos crear field exits diferentes en distintos programas/dynpros.
Para terminar, marcar el field exit y acceder al men Exit Campo -> Activar.

Pgina 52 de 63

XXIV.Field Symbols
Hay veces que en el programa que se est desarrollando se presenta la problemtica de que el nombre de
campo que se tiene que utilizar no se conoce hasta el momento de ejecucin. En estos casos se usan los
FIELD-SYMBOLS.
Un field symbol es un puntero a un campo existente. No tiene reservado espacio fsico, ya que apunta a
otro campo existente, que puede ser cualquier objeto de datos ABAP (variables, estructuras, campos de
estructuras) o cualquier tabla o estructura definida en el diccionario de datos.
Declaracin de field symbols
La forma bsica de declarar un field symbol es:
FIELD-SYMBOLS <campo>.
Field symbol de cualquier tipo
Tambin puede definirse un field symbol de un tipo determinado (con TYPE o LIKE como cualquier
variable):
Ej:
FIELD-SYMBOLS <fecha> TYPE N.
Procesamiento de field symbols
Antes de poder utilizar un field symbol, hay que asignarle un objeto de datos (variable, campo de estructura,
etc.). Este objeto de datos debe ser conocido para el programa en el momento de la asignacin.
Luego de la asignacin el field symbol pasa a apuntar al objeto especificado, de manera que tiene su
mismo valor y cambia cuando cambia el objeto de datos original.
Luego de un ASSIGN, el field symbol hereda el tipo (y por lo tanto las caractersticas) del objeto de datos
que se le asign.
Sentencia
Descripcin
ASSIGN
Asigna un objeto de datos a un field symbol.
UNASSIGN
Desasigna el objeto de datos del field symbol. El field symbol ahora no apunta a nada.
Ej:
*** Asignacin esttica
DATA: fecha LIKE SY-DATUM.
FIELD-SYMBOLS <fs>.
Fecha = SY-DATUM.
ASSIGN fecha TO <fs>.
WRITE <fs>.

Ahora el field symbol apunta a FECHA


Imprime la fecha del da.

*** Asignacin dinmica. Ahora tenemos en una variable tipo C un nombre de


campo.
DATA V_SUB(2) TYPE N.
DATA V_CAMPO(10) TYPE C.
DATA salida LIKE pa0008-bet01.
FIELD-SYMBOLS <campo>.
...
CONCATENATE 'PA0008-BET' v_sub INTO v_campo.
ASSIGN (v_campo) TO <campo>.
Asigna a <campo> el
valor de PA0008-BETxx
IF SY-SUBRC eq 0.
Si existe el campo
MOVE <campo> TO salida.
ENDIF.
*** Ejemplo del uso de UNASSIGN
UNASSIGN <campo>.
<campo> ahora no apunta a nada
*** Otros ejemplos del uso de field symbols - OFFSETS
FIELD-SYMBOLS <fs>.

Pgina 53 de 63

DATA texto(15) TYPE C.


...
ASSIGN texto+5(10) TO <fs>.
Asigna especificando un offset. <fs> tiene
longitud 10
...
ASSIGN texto+5 TO <fs>. ERROR de proteccin de memoria. <fs> TIENE LONGITUD 15
...
ASSIGN texto+5(*)TO <fs>.
Evito el error anterior, con * hago
que no se pase la long.
*** Otros ejemplos del uso de field symbols ASIGNAR CON TIPOS
DATA fecha(8) TYPE C value 20020315.
FIELD SYMBOLS <fs>.
...
ASSIGN fecha TO <FS>.
WRITE <FS>.
Imprime 20020315 (<FS> es texto)
ASSIGN fecha TO <FS> type 'D'.
WRITE <FS>.
Imprime 15032002 (<FS> es fecha D-)

Pgina 54 de 63

XXV.Transacciones del Entorno de Desarrollo


A continuacin se detallan las principales transacciones del entorno de programacin ABAP. Algunas de
ellas ya fueron vistas durante el desarrollo del curso:
SE38: Editor ABAP.
SE51: Screen Painter - Diseo y lgica de proceso de dynpros.
SE41: Menu Painter - Definicin de status de programas.
SE11: Diccionario ABAP - Definicin de tablas, vistas, estructuras, elementos de datos, dominios, ayudas
para bsqueda, objetos de bloqueo.
SE37: Bibliteca de funciones - Definicin de mdulos de funcin.
SE36: Gestin de bases de datos lgicas.
SM35: Gestin de juegos de datos batch input.
SM37: Gestin de jobs.
SE91: Gestin de mensajes.
CMOD: Gestin de proyectos de ampliacin - Desde aqu se crean los user-exits.
Otras transacciones an no fueron vistas en detalle:
SE16: Data browser - Permite ver el contenido de cualquier tabla de base de datos.
SE80: Browser de repository - Definicin de Clases de desarrollo, grupos de funciones.
SE39: Editor split screen - Permite comparar dos programas.
SE93: Gestin de transacciones - Permite crear transacciones para los module pool, as como asignar
cdigos de transacin a los reportes.
SE43: Mens de mbito - Permite tratar la estructura del men SAP, agregando/quitando o modificando
componentes.
SE30: Anlisis de tiempo de ejecucin. Permite evaluar los tiempos de ejecucin de un programa o una
transacin. El anlisis puede limitarse a accesos a base de datos, llamadas a mdulos de funcin,
subrutinas, etc, generando luego un reporte del mismo.
SM21: System Log. Permite ver el log con los mensajes del sistema que se producen. En el log pueden
aparecer errores que se producen en la ejecucin de los programas ABAP, conexiones y desconexiones de
usuarios, etc.
ST05: SQL Trace - Permite analizar las sentencias relacionadas con el acceso a bases de datos por parte
del usuario.
ST22: Anlisis dumps - Permite ver el log de los dumps (cancelaciones) que ocurrieron en el sistema.
SE61: Documentacin - Permite asociar un texto de documentacin a los objetos del sistema (programas,
elementos de datos, mensajes, etc.).
SE63: Traductor - Permite convertir textos de un idioma a otro.
STMS: Sistema de transporte - Permite transportar y gestionar rdenes de workbench y customizing.
SE81: Jerarqua de aplicacin - Permite consultar los componentes de un mdulo. Estos componentes son
objetos del diccionario, programas, transacciones, grupos de funciones, bases de datos lgicas, etc.

Pgina 55 de 63

Gestin de Versiones
Se utiliza para ver las versiones de los objetos y realizar comparaciones entre
los mandantes.
Ir al men UTILIDADES VERSIONES Gestin de Versiones.

Ejemplo:
Mandante: 210

Trx: SE11

TABLA: ZFN_ODS.

Al seleccionar Gestin de versiones, aparecer una lista de todas las versiones


de ese objeto.

Pgina 56 de 63

La opcin que tiene el tilde es la que esta activa, en este en desarrollo.


Para comparar con la versin de Produccin o QAS, ir a COMPARACION
REMOTE.

Completar el sistema Destino (TEP, TEQ) y Ejecutar.

Esta es la versin que esta en PRD.

Pgina 57 de 63

Si se quiere ver el cdigo o los objetos que fueron modificados, hay que ir a
COMPARACION REMOTE.
Aparecer:

Pgina 58 de 63

XXVI.Creacin de Mdulos de Funcin


La transaccin desde la cual se crea un mdulo de funcin es SE37. La primer pantalla pide un nombre de
mdulo de funcin. Los mdulos de funcin del cliente deben comenzar con 'Z' o 'Y'.

Una vez que se ingresa el nombre del mdulo de funcin, se presiona 'Crear' y aparece la siguiente
pantalla:

Se pide (en forma obligatoria) ingresar un grupo de funciones. Cada mdulo de funcin tiene que formar
parte de un grupo de funciones. Puede usarse uno existente o crear uno nuevo (desde la pantalla anterior).
A su vez debe ingresarse en 'Texto Breve' una descripcin del mdulo de funcin que se va a crear.
Luego hacer click en 'Grabar'. Se pide clase de desarrollo y orden de transporte (si la clase de desarrollo no
es '$TMP').

Pgina 59 de 63

En la pantalla de atributos del mdulo de funcin se ven las propiedades del mismo, y puede determinarse
el tipo de mdulo de funcin (normal, de acceso remoto -RFC-, etc.).

Las siguientes pantallas permiten definir la interfase del mdulo de funcin, es decir sus parmetros de
entrada (IMPORT), sus parmetros de salida (EXPORT) y las tablas internas, que pueden ser tanto
parmetros de entrada como de salida (TABLES). Tambin pueden definirse excepciones (EXCEPTIONS)
que son eventos de error que dispara el mdulo de funcin y es capturable por el programa que lo invoc (a
travs de la sentencia RAISE).

Finalmente, la ltima pantalla es la que permite definir el cdigo fuente, el cual se incluye entre las
sentencias FUNCTION y ENDFUNCTION.
El mdulo de funcin debe activarse para poder ser utilizado.

Pgina 60 de 63

ERRORES DEL SISTEMA


Ya sabemos que la variable SY-SUBRC controla los errores del sistema, lo
valores que puede tomar depende de la instruccin que utilizamos, por ello voy
a dar que error da en las siguientes instrucciones:
- Cuando hacemos operaciones con tablas ya sean de diccionario o internas:
0 -> No hay errores.
2 -> Se ha producido algn error ya sea a leer, aadir, borrar o modificar.
- Cuando realizamos un algn SCROLL, con la orden SCROLL:
0 -> OK
4 -> Lmite de la lista rechazado. Scrolling imposible
8 -> Lista no existe. Scrolling imposible
- Cuando leemos un fichero secuencial:
0-> No ha llegado al final del fichero.
4-> Ha llegado al final del fichero.
- Cuando hacemos la orden OVERLAY:
0->La sustitucin ha sido un xito.
4->Cuando STR1 es mayor que STR2
- Cuando realizamos la orden SEARCH:

Pgina 61 de 63

Notas
Implementable por versin
Las notas pueden o no ser implementables en nuestro sistema, todo depende del nivel de
support package que tenemos.
Para ver eso tenemos que ir a SISTEMA -> STATUS -> VERSION COMPONENTES (click en la
lupa). Ah aparece un listado de todos los que hay en el sistema.

Tomando una nota cualquiera podemos ver que tenemos dos nros de support package:
Uno indica el package en el que viene incluidas las modificaciones de la nota actual. Si el
nuestro es igual o mayor, la nota no es implementable, caso contrario, si.
En la nota, esto se encuentra inmediatamente antes de las instrucciones de correccin.
Links to Support Packages
Software Component
Release
Package Name
________________________________________________________________________
R/3 Standard
470
SAPKH47012
________________________________________________________________________

El otro nro de support package que podemos encontrar es al comienzo de cada instruccin de
correccin e indica hasta que nivel esas correcciones son aplicables:
*&---------------------------------------------------------------------*
*$*$----------------------------------------------------------------$*$*
*$ Instrucc.correccin
0120031469 0000245090
$*
*$ Instr.correc.requeridas 0120061532 0000498981 Nota 0000584049
*$
0120061532 0000545670 Nota 0000615367
$*
*$--------------------------------------------------------------------$*
*$ Validez
:
$*

$*

Pgina 62 de 63

*$ Comp.software
SAP_APPL R/3 Standard
*$ Release 470
Al SAPKH47014
*$*$----------------------------------------------------------------$*$*
*&---------------------------------------------------------------------*
*& Objeto
DYNP SAPLCOMD3100
*& Cabecera obj. FUGR COMD
*&---------------------------------------------------------------------*

$*
$*

Notas requeridas
Es comn que al intentar aplicar una nota, el sistema avise que hay otras notas como
prerrequisito. En este caso hay que bajarlas y aplicarlas antes de aplicar la nuestra.
El sistema se encarga de todo eso. Nuestra preocupacin tiene que ser el revisar las notas y
chequear que no haya que hacer alguna modificacin a mano.
Visualizando la nota podemos ver las notas que requiere que estn aplicadas. Esto lo vemos en
la cabecera de las instrucciones de correccin.
*&---------------------------------------------------------------------*
*$*$----------------------------------------------------------------$*$*
*$ Instrucc.correccin
0120031469 0000245090
$*
*$ Instr.correc.requeridas 0120061532 0000498981 Nota 0000584049
*$
0120061532 0000545670 Nota 0000615367
$*
*$--------------------------------------------------------------------$*
*$ Validez
:
$*
*$ Comp.software
SAP_APPL R/3 Standard
$*
*$ Release 470
Al SAPKH47014
$*
*$*$----------------------------------------------------------------$*$*
*&---------------------------------------------------------------------*
*& Objeto
DYNP SAPLCOMD3100
*& Cabecera obj. FUGR COMD
*&---------------------------------------------------------------------*

$*

Pgina 63 de 63

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