Sunteți pe pagina 1din 194

ABAP Fundamentos y

Reporting

ABAP Fundamentos y Reporting

Contenidos
1

INTRODUCCIN AL SISTEMA SAP R/3 ....................................................................................7


1.1
VISIN LGICA DEL SISTEMA .......................................................................................................7
1.1.1 Kernel y servicios bsicos ......................................................................................................8
1.1.2 ABAP Workbench ...................................................................................................................8
1.1.3 Nivel de presentacin .............................................................................................................8
1.2
VISIN DESDE EL PUNTO DE VISTA DEL SOFTWARE ......................................................................8
1.2.1 Nivel de Base de Datos...........................................................................................................9
1.2.2 Nivel de Aplicacin.................................................................................................................9
1.2.3 Nivel de Presentacin...........................................................................................................10
1.2.4 Arquitectura multinivel: ventajas .........................................................................................10
1.2.5 Consecuencias para la programacin de aplicaciones ........................................................10
1.3
VISIN DESDE EL PUNTO DE VISTA DEL USUARIO .......................................................................11
1.4
USUARIOS ..................................................................................................................................12
1.5
MEN Y TRANSACCIONES ..........................................................................................................12
1.6
TECLAS DE FUNCIN COMUNES..................................................................................................13
1.7
REPOSITORIO .............................................................................................................................15
1.8
ABAP WORKBENCH ..................................................................................................................15
1.9
ORGANIZACIN DEL DESARROLLO .............................................................................................15
1.9.1 Crear paquetes .....................................................................................................................16
1.9.2 Asignar tareas ......................................................................................................................16

EL DICCIONARIO DE DATOS....................................................................................................17
2.1
TABLAS .....................................................................................................................................18
2.1.1 Pestaa "Campos"................................................................................................................19
2.1.2 Pestaa "Entrega y actualizacin":......................................................................................21
2.1.3 Pestaa "Campos de moneda/cantidad": .............................................................................21
2.1.4 Pestaa "Ayuda p./Verif.entr.": ............................................................................................21
2.1.5 Opciones tcnicas .................................................................................................................24
2.1.6 ndices ..................................................................................................................................27
2.1.7 Append estructures ...............................................................................................................29
2.2
DOMINIOS ..................................................................................................................................29
2.2.1 Definicin .............................................................................................................................30
2.2.2 mbito de valores .................................................................................................................31
2.3
ELEMENTOS DE DATOS ..............................................................................................................32
2.4
ESTRUCTURAS ...........................................................................................................................34
2.5
VISTAS .......................................................................................................................................34
2.5.1 Vistas de Base de Datos........................................................................................................35
2.5.2 Vistas de Proyeccin ............................................................................................................37
2.5.3 Vistas de actualizacin .........................................................................................................38
2.5.4 Vistas de ayuda.....................................................................................................................40
2.5.5 Unin, Proyeccin y Seleccin .............................................................................................40
2.5.6 Relacin entre Clave Externa y Condicin Join...................................................................42
2.6
AYUDAS PARA BSQUEDA .........................................................................................................44
2.6.1 Ayuda para bsqueda elemental: .........................................................................................45
2.6.2 Definicin de ayudas de bsqueda .......................................................................................46
2.6.3 Ayuda para bsqueda compuesta .........................................................................................50
2.6.4 Enlace de una Ayuda de Bsqueda con un campo de pantalla ............................................50
2.6.5 Jerarqua de la llamada a la Ayuda de Bsqueda................................................................51
2.7
MODIFICACIN DE OBJETOS .......................................................................................................52
2.8
TRATAMIENTO DE LOS DATOS ....................................................................................................53
2.8.1 Data browser ........................................................................................................................53
2.8.2 Actualizacin de tablas.........................................................................................................54
2.8.3 Transacciones: SM30, SM31. ...............................................................................................54

CREACIN DE PROGRAMAS....................................................................................................55
3.1
3.2

EDITOR Y OBJECT NAVIGATOR ..................................................................................................55


ELEMENTOS DE UN PROGRAMA ..................................................................................................56

Pgina 2 de 194

ABAP Fundamentos y Reporting


3.3
ESCRIBIR CDIGO (TEXTO FUENTE)............................................................................................57
3.3.1 Elementos sintcticos bsicos...............................................................................................57
3.3.2 Funciones de edicin ............................................................................................................58
3.3.3 Patrones de instrucciones.....................................................................................................59
3.4
INTERACCIN CON EL USUARIO .................................................................................................60
3.4.1 Pantalla de seleccin............................................................................................................60
3.4.2 Lista ......................................................................................................................................60
3.4.3 Mensajes ...............................................................................................................................60
3.5
INTERACCIN CON LA BASE DE DATOS .......................................................................................60
3.6
OPERACIONES CON PROGRAMAS ................................................................................................61
3.6.1 Verificacin de sintaxis ........................................................................................................61
3.6.2 Activacin .............................................................................................................................62
3.6.3 Ejecucin ..............................................................................................................................62
3.7
DEBUGGING ...............................................................................................................................62
3.7.1 Pantalla ................................................................................................................................63
3.7.2 Funciones importantes .........................................................................................................63
3.7.3 Breakpoints...........................................................................................................................64
3.8
OTRAS HERRAMIENTAS DE TEST ................................................................................................64
4

TIPOS DE DATOS Y OBJETOS DE DATOS..............................................................................65


4.1
TIPOS DE DATOS.........................................................................................................................65
4.1.1 Predefinidos..........................................................................................................................65
4.1.2 Definidos por el usuario .......................................................................................................66
4.1.3 Grupos de tipos.....................................................................................................................67
4.1.4 Visibilidad.............................................................................................................................67
4.2
OBJETOS DE DATOS ....................................................................................................................68
4.2.1 Variables ..............................................................................................................................68
4.2.2 Constantes y literales............................................................................................................69
4.2.3 Parmetros y selecciones .....................................................................................................70
4.2.4 Tablas ...................................................................................................................................70
4.2.5 Rangos ..................................................................................................................................70
4.2.6 Atributos de objetos ..............................................................................................................70
4.3
FIELD SYMBOLS .........................................................................................................................71

PROCESAMIENTO DE DATOS ..................................................................................................72


5.1
ASIGNACIN Y CONVERSIN ......................................................................................................72
5.1.1 Sub-campos...........................................................................................................................72
5.1.2 Inicializacin ........................................................................................................................73
5.2
OPERACIONES NUMRICAS ........................................................................................................73
5.2.1 Aritmticas............................................................................................................................73
5.3
CADENAS DE CARACTERES ........................................................................................................73
5.3.1 CONCATENATE ..................................................................................................................73
5.3.2 SPLIT....................................................................................................................................74
5.3.3 SHIFT ...................................................................................................................................74
5.3.4 REPLACE .............................................................................................................................74
5.3.5 CONDENSE .........................................................................................................................74
5.3.6 TRANSLATE .........................................................................................................................74
5.3.7 OVERLAY .............................................................................................................................75
5.3.8 FIND.....................................................................................................................................75

CONTROL DEL FLUJO DEL PROGRAMA..............................................................................76


6.1
EXPRESIONES LGICAS ..............................................................................................................76
6.1.1 Comparaciones.....................................................................................................................76
6.1.2 Comparacin de Strings .......................................................................................................76
6.2
DISTINCIN DE CASOS................................................................................................................76
6.2.1 IF ..........................................................................................................................................76
6.2.2 CASE ....................................................................................................................................77
6.3
BUCLES ......................................................................................................................................77
6.3.1 DO ........................................................................................................................................77
6.3.2 WHILE..................................................................................................................................77

Pgina 3 de 194

ABAP Fundamentos y Reporting


6.3.3 Otros.....................................................................................................................................78
6.4
FINALIZAR BUCLES ....................................................................................................................78
6.4.1 CONTINUE ..........................................................................................................................78
6.4.2 CHECK.................................................................................................................................78
6.4.3 EXIT......................................................................................................................................78
7

PANTALLA DE SELECCIN ......................................................................................................80


7.1
PARAMETERS .............................................................................................................................80
7.1.1 Activacin de parmetro obligatorio....................................................................................81
7.1.2 Asignacin de valores por defecto........................................................................................81
7.1.3 Permitir maysculas y minsculas como entrada ................................................................81
7.1.4 Parmetro con apariencia de checkbox ...............................................................................81
7.1.5 Parmetro con apariencia de radiobutton ...........................................................................82
7.1.6 Asignacin de ayudas de bsqueda ......................................................................................82
7.2
SELECT-OPTIONS........................................................................................................................82
7.2.1 Asignacin de valores por defecto........................................................................................83
7.2.2 No permitir mltiples valores ...............................................................................................83
7.2.3 No permitir intervalos ..........................................................................................................83
7.3
ASIGNACIN DE DESCRIPCIONES A LOS CAMPOS DE LA PANTALLA DE SELECCIN .....................84
7.4
DISEO DE LA PANTALLA DE SELECCIN ...................................................................................84
7.4.1 Bloques .................................................................................................................................84
7.4.2 Espacios y lneas ..................................................................................................................84
7.4.3 Agrupar en una lnea............................................................................................................84
7.5
EVENTOS ...................................................................................................................................85
7.6
PANTALLAS DE SELECCIN DEFINIDAS POR EL USUARIO ............................................................85
7.7
MENSAJES..................................................................................................................................85
7.7.1 Uso de mensajes ...................................................................................................................85
7.7.2 Gestin de mensajes .............................................................................................................86

ACCESO A LA BASE DE DATOS................................................................................................88


8.1
OPEN SQL VS SQL NATIVO .......................................................................................................88
8.2
LECTURA DE DATOS: SELECT ..................................................................................................88
8.2.1 Una o varias lneas...............................................................................................................89
8.2.2 Destino..................................................................................................................................90
8.2.3 Condiciones (WHERE) .........................................................................................................91
8.2.4 Ms de una tabla ..................................................................................................................91
8.2.5 Datos agregados de una columna ........................................................................................92
8.2.6 Selecciones dinmicas ..........................................................................................................93
8.2.7 Clusula Group by................................................................................................................93
8.2.8 Clusula Order by ................................................................................................................93
8.2.9 Clusula Bypassing buffer....................................................................................................94
8.3
RENDIMIENTO PTIMO ...............................................................................................................94

BASES DE DATOS LGICAS ......................................................................................................95


9.1
PARTES DE UNA BDL.................................................................................................................96
9.2
UTILIZACIN CLSICA ...............................................................................................................96
9.3
FUNCIN LDB_PROCESS........................................................................................................97
9.3.1 Comportamiento en tiempo de ejecucin..............................................................................97
9.3.2 Parmetros de LDB_PROCESS ...........................................................................................97
9.3.3 Profundidad de la Lectura y Rutinas de Vuelta....................................................................98
9.3.4 Excepciones de LDB_PROCESS ..........................................................................................99
9.3.5 Ejemplo.................................................................................................................................99

10

TABLAS INTERNAS ...............................................................................................................104


10.1
ATRIBUTOS DE LAS TABLAS .....................................................................................................104
10.2
OPERACIONES Y REAS DE TRABAJO .......................................................................................105
10.3
DECLARACIN: TIPOS Y OBJETOS ............................................................................................105
10.4
AADIR REGISTROS .................................................................................................................106
10.4.1
Append ...........................................................................................................................106
10.4.2
Collect ............................................................................................................................106

Pgina 4 de 194

ABAP Fundamentos y Reporting


10.5
LEER REGISTROS ......................................................................................................................106
10.5.1
Loop ...............................................................................................................................106
10.5.2
Read ...............................................................................................................................107
10.6
MODIFICACIONES ....................................................................................................................107
10.6.1
Modify ............................................................................................................................107
10.6.2
Insert ..............................................................................................................................107
10.6.3
Delete .............................................................................................................................108
10.7
INICIALIZAR TABLAS ................................................................................................................108
10.7.1
Refresh ...........................................................................................................................108
10.7.2
Clear...............................................................................................................................108
10.7.3
Free ................................................................................................................................108
10.8
DESCRIBIR Y ORDENAR ............................................................................................................108
10.8.1
Atributos.........................................................................................................................108
10.8.2
Sort.................................................................................................................................108
11

CREAR LISTAS .......................................................................................................................110


11.1
LISTA ESTNDAR .....................................................................................................................110
11.1.1
Cabeceras y smbolos de texto .......................................................................................110
11.1.2
WRITE............................................................................................................................111
11.1.3
Iconos y smbolos ...........................................................................................................112
11.1.4
Check-boxes y campos de entrada .................................................................................112
11.1.5
SKIP ...............................................................................................................................112
11.1.6
ULINE ............................................................................................................................112
11.2
DISEO DE LA PGINA .............................................................................................................112
11.2.1
Dimensiones ...................................................................................................................113
11.2.2
Cabeceras no estndar...................................................................................................113
11.2.3
Columnas fijas................................................................................................................114
11.2.4
Salto de pgina...............................................................................................................114
11.2.5
Pie de pgina..................................................................................................................114
11.2.6
Sentencias adicionales ...................................................................................................114
11.3
SENTENCIA FORMAT.............................................................................................................114
11.4
DIBUJAR LNEAS ......................................................................................................................115
11.5
NIVELES DE CONTROL ..............................................................................................................115
11.5.1
Tablas internas...............................................................................................................116
11.5.2
Extract datasets..............................................................................................................117
11.6
IMPRESIN ...............................................................................................................................118

12

LISTAS INTERACTIVAS .......................................................................................................120


12.1
INTERFASE (GUI) ....................................................................................................................120
12.1.1
Status..............................................................................................................................121
12.1.2
Funciones .......................................................................................................................121
12.1.3
Barra de mens ..............................................................................................................122
12.1.4
Usar status .....................................................................................................................123
12.1.5
Ttulo ..............................................................................................................................123
12.2
EVENTOS .................................................................................................................................123
12.2.1
AT USER-COMMAND...................................................................................................123
12.2.2
AT LINE-SELECTION ...................................................................................................124
12.2.3
Top-of-page During line-selection .................................................................................124
12.3
VARIABLES DEL SISTEMA.........................................................................................................124
12.4
RECUPERAR DATOS DE LA LISTA ..............................................................................................125
12.4.1
HIDE ..............................................................................................................................125
12.4.2
GET CURSOR................................................................................................................126
12.5
LEER LISTAS ............................................................................................................................126
12.6
MODIFICAR LISTAS ..................................................................................................................127
12.7
NAVEGACIN...........................................................................................................................127
12.8
VENTANAS ...............................................................................................................................127

13

MODULARIZACIN ..............................................................................................................129
13.1
13.2

DECLARACIN DE DATOS GLOBALES .......................................................................................130


EVENTOS .................................................................................................................................130

Pgina 5 de 194

ABAP Fundamentos y Reporting


13.2.1
INITIALIZATION ...........................................................................................................131
13.2.2
START-OF-SELECTION................................................................................................132
13.2.3
END-OF-SELECTION. ..................................................................................................132
13.2.4
TOP-OF-PAGE ..............................................................................................................132
13.2.5
END-OF-PAGE..............................................................................................................132
13.2.6
AT SELECTION-SCREEN .............................................................................................132
13.3
MDULOS DE CDIGO FUENTE .................................................................................................133
13.3.1
Macros ...........................................................................................................................133
13.3.2
Programas Include.........................................................................................................134
13.4
PROCEDIMIENTOS ....................................................................................................................136
13.4.1
Subrutinas ......................................................................................................................137
13.4.2
Funciones .......................................................................................................................147
13.5
LLAMADAS A OTROS PROGRAMAS ...........................................................................................160
13.5.1
SUBMIT .........................................................................................................................160
13.5.2
CALL TRANSACTION ...................................................................................................160
13.6
PARMETROS DE MEMORIA .....................................................................................................161
13.6.1
SAP.................................................................................................................................161
13.6.2
ABAP..............................................................................................................................165
14

ALV ............................................................................................................................................167
14.1
FUNCIONALIDAD......................................................................................................................167
14.2
TRABAJAR CON ALV ...............................................................................................................167
14.3
FUNCIN REUSE_ALV_LIST_DISPLAY .............................................................................168
14.3.1
Especificar disposicin ..................................................................................................170
14.3.2
Parmetros de retorno ...................................................................................................171
14.3.3
Ejemplo simple ...............................................................................................................172
14.4
FUNCIN REUSE_ALV_FIELDCATALOG_MERGE ..........................................................172
14.5
OTRAS FUNCIONES ...................................................................................................................176

15

TRATAMIENTO DE FICHEROS ..........................................................................................179


15.1
DEL SERVIDOR DE APLICACIN ................................................................................................179
15.1.1
Abrir ...............................................................................................................................179
15.1.2
Leer ................................................................................................................................180
15.1.3
Escribir...........................................................................................................................180
15.1.4
Cerrar.............................................................................................................................180
15.1.5
Autorizaciones................................................................................................................180
15.2
DEL SERVIDOR DE PRESENTACIN ...........................................................................................182
15.2.1
Escritura.........................................................................................................................182
15.2.2
Lectura ...........................................................................................................................187
15.2.3
Verificacin de ficheros del Servidor de Presentacin ..................................................192

Pgina 6 de 194

ABAP Fundamentos y Reporting

1 Introduccin al sistema SAP R/3


SAP R/3 es una aplicacin creada para poder gestionar todas las reas de una
empresa. A cada rea le corresponde un mdulo de la aplicacin: el mdulo SD a las
ventas, PP a la planificacin de la produccin, FI a las finanzas, HR a los recursos
humanos, etc. Los mdulos son suficientemente independientes como para poder ser
instalados por separado, pero al mismo tiempo existe comunicacin de datos entre
ellos, por lo que estn perfectamente integrados.
Una gran ventaja del sistema R/3 es que muchos aspectos son parametrizables, y que
incorpora un lenguaje de programacin propio, el ABAP, que permite desarrollar
extensiones de las aplicaciones existentes e incluso aplicaciones nuevas.
El ABAP (Advanced Business Aplications Programming) es un lenguaje de
programacin de cuarta generacin (4GL) orientado, tal como su nombre especifica, al
desarrollo de aplicaciones de negocios. Todas las aplicaciones de los mdulos
disponibles en SAP y tambin partes del sistema bsico han sido programadas usando
este lenguaje.
Una vez instalado el sistema SAP R/3, uno de los usos ms frecuentes del ABAP/4 es
la generacin de informes, ya sea porque no han sido contemplados por SAP o porque
en la instalacin se requiera un formato muy concreto. Por esto ABAP dispone de
muchas instrucciones destinadas a facilitar la tarea de programar listados, que a
menudo se llaman reports. Podemos diferenciar claramente entre reports planos y
reports interactivos. Los primeros estn orientados a visualizar informacin de una
manera plana en un nico nivel. En este tipo de listados las opciones de usuario sobre
el tratamiento de la informacin son nulas. Los listados interactivos, en cambio, estn
orientados a presentar informacin en varios niveles de diferente detalle: por eso se
presentan muchas opciones de usuario para la navegacin.
Otras necesidades que puede cubrir la programacin con ABAP son: la creacin de
interfases con otros sistemas a travs de ficheros o la adaptacin de programas
estndar por medio de USEREXITS.

1.1

Visin lgica del sistema

El diagrama siguiente muestra cmo el Sistema Base de R/3 forma parte de una
plataforma central dentro del Sistema R/3. A continuacin listaremos las tareas de los
tres componentes lgicos del Sistema Base de R/3.

Pgina 7 de 194

ABAP Fundamentos y Reporting


1.1.1 Kernel y servicios bsicos
Los componentes de Kernel y Servicios Bsicos constituyen el entorno en tiempo de
ejecucin para todas las aplicaciones R/3 que son especficas del hardware, sistema
operativo y base de datos. Estn escritas generalmente en C y C++, aunque algunas
partes a bajo nivel estn escritas en el propio lenguaje de programacin de SAP.
Las tareas de los componentes de Kernel y Servicios Bsicos son las siguientes:
Ejecucin de aplicaciones.
Todas las aplicaciones de R/3 se ejecutan sobre procesadores software (mquinas
virtuales). Esto las hace independientes del hardware y del sistema operativo, pero
tambin implica que no se pueden ejecutar fuera del sistema.
Administracin de usuarios y procesos.
Todo sistema R/3 representa un entorno multiusuario, y cada usuario puede ejecutar
varias aplicaciones independientes. En resumen, este componente es responsable de
las tareas que normalmente lleva a cabo el sistema operativo. Los usuarios entran en
el sistema R/3 y ejecutan aplicaciones sin entrar nunca en contacto con el sistema
operativo del host sobre el que se est ejecutando. El Sistema R/3 es el nico usuario
del sistema operativo del host.
Acceso a la base de datos.
Todo sistema R/3 est enlazado con el sistema de la base de datos, que consiste de
un sistema de gestin de bases de datos (DBMS) y de la base de datos en s misma.
Las aplicaciones no se comunican directamente con la base de datos, sino que utilizan
la interfase de los Servicios Bsicos: el ABAP contiene un conjunto de instrucciones
llamado OPEN SQL que permite acceder a la base de datos independientemente de
su tipo.
Comunicacin.
Las aplicaciones R/3 se pueden comunicar con otros sistemas R/3 y con sistemas que
no sean R/3. Tambin es posible acceder a las aplicaciones de R/3 desde sistemas
externos utilizando la interfase BAPI.
Control y Administracin del Sistema.
El componente contiene los programas que nos permiten controlar el Sistema R/3
mientras se est ejecutando, y cambiar sus parmetros de ejecucin.

1.1.2 ABAP Workbench


El componente ABAP Workbench es un entorno de desarrollo completamente
integrado que sirve para crear, mejorar, probar y organizar las aplicaciones en el
lenguaje de programacin ABAP. Al igual que otras aplicaciones R/3, est escrito en
ABAP.

1.1.3 Nivel de presentacin


Los componentes del nivel de presentacin son responsables de la interaccin entre
el Sistema R/3 y el usuario, y de la integracin con componentes del escritorio
(tales como procesamiento de texto y hojas de clculo).

1.2

Visin desde el punto de vista del software

La siguiente ilustracin representa el punto de vista desde el software de R/3. Aqu se


describen los diferentes componentes software que tiene el sistema R/3.

Pgina 8 de 194

ABAP Fundamentos y Reporting

El Sistema Base de R/3 es un sistema multinivel cliente/servidor. Los componentes


individuales de software estn situados en niveles y funcionan, dependiendo de su
posicin, como un cliente para los componentes situados por debajo de l o como un
servidor para los componentes situados por encima de l. La configuracin clsica de
un sistema R/3 contiene los siguientes niveles de software:

1.2.1 Nivel de Base de Datos


El nivel ms bajo de la arquitectura es el de la base de datos. Aqu se gestionan todos
los datos del sistema R/3 con la ayuda de un sistema de gestin de bases de datos
relacionales (RDBMS). SAP no fabrica su propio gestor, en lugar de ello, el sistema
R/3 soporta los siguientes sistemas de bases de datos: ADABAS D, DB2/400 (sobre
AS/400), DB2/Servidor Comn, DB2/MVS, INFORMIX, Servidor Microsoft SQL,
ORACLE, y Servidor paralelo ORACLE.
La base de datos no contiene slo los datos maestros y las transacciones de datos de
nuestras aplicaciones, sino tambin el cdigo de los programas y las definiciones y
parametrizaciones que describen al propio sistema.
Las aplicaciones se componen de cdigo de programa, definiciones de pantallas, de
tablas, mens y otros componentes. Todos estos objetos de desarrollo, que se crean y
mantienen con las herramientas del ABAP Workbench, estn almacenados en una
seccin especial de la base de datos llamada Repository R/3, y por ello, se clasifican
como objetos del Repository. El Repository est organizado segn la aplicacin y cada
aplicacin consta de subdivisiones lgicas llamadas paquetes. A cada objeto se le
debe asignar un paquete cuando se crea. Disponemos de un sistema de informacin
para buscar objetos del Repository segn ciertos criterios.

1.2.2 Nivel de Aplicacin


El nivel de aplicacin est formado por uno o ms servidores de aplicaciones y un
servidor de mensajes (que gestiona la comunicacin y balancea la carga entre ellos).

Pgina 9 de 194

ABAP Fundamentos y Reporting


Cada servidor de aplicaciones proporciona un conjunto de servicios que se utilizan en
el Sistema R/3. En la prctica, los servicios se distribuyen por ms de un servidor de
aplicaciones. Esto significa que no todos los servidores de aplicaciones pueden ofrecer
la totalidad de los servicios.
Los programas ABAP, tanto los de aplicaciones proporcionadas por SAP como los que
desarrollemos nosotros, se ejecutan en los servidores de aplicaciones. Los programas
trabajan con datos que recuperan de la base de datos y en ocasiones almacenan
tambin resultados en la base de datos.

1.2.3 Nivel de Presentacin


El nivel de presentacin contiene los componentes de software que conforman el
SAPgui, la interfase grfica entre el Sistema R/3 y los usuarios. Permite que stos
accedan a las aplicaciones, introduzcan nuevos datos y reciban los resultados de los
procesos. El nivel de presentacin enva las entradas del usuario al servidor de
aplicaciones, y recibe los datos para mostrarlos desde l. Mientras se est ejecutando
el SAPgui, permanece enlazado a la sesin del terminal del usuario.

1.2.4 Arquitectura multinivel: ventajas


Existe una gran variedad de posibilidades de configuracin hardware para ambos
niveles y componentes. Cuando se distribuyen los niveles en vertical, por ejemplo,
podemos tener todos los niveles en una nica mquina, o en el extremo opuesto,
podemos tener al menos una mquina para cada nivel. En horizontal, los componentes
de los niveles de aplicacin y presentacin pueden distribuirse por cualquier nmero
de mquinas.
La distribucin del software de R/3 en tres niveles hace que la carga del sistema est
tambin distribuida. Esto conlleva una mejora en el rendimiento del sistema.
Ya que el sistema de la base de datos contiene todos los datos del sistema R/3, la
est sujeto a una gran carga cuando el sistema se est ejecutando. Por ello es una
buena idea no ejecutar programas de aplicaciones en la misma mquina. La
arquitectura del Sistema R/3, en el cual estn separados el nivel de aplicacin y el de
base de datos, nos permite instalarlos en mquinas separadas y comunicarlos
utilizando la red.
Tambin cobra sentido separar la ejecucin de programas de las tareas de
procesamiento (nivel de aplicacin) de las entradas de usuario y de las de edicin de
salida de datos (nivel de presentacin). SAPgui y los servidores de aplicacin estn
diseados de tal manera que se minimiza la cantidad de datos a transportar entre los
dos niveles, por lo que SAPGui puede utilizarse en otras mquinas aunque stas
tengan conexiones lentas con los servidores de aplicacin.
En sentido horizontal en el nivel de aplicacin, podemos adaptar fcilmente nuestro
sistema para cubrir la demanda instalando nuevos servidores de aplicacin.

1.2.5 Consecuencias para la programacin de aplicaciones


Cuando ejecutamos un programa de aplicacin que requiere interaccin con el usuario,
el control del programa se pasa continuamente desde y hacia los dos niveles. Cuando
una pantalla est preparada para recibir datos del usuario, el nivel de presentacin
estar activo, y el servidor de aplicaciones estar inactivo con respecto a este
programa en particular, pero libre para realizar otras tareas. Una vez que el usuario ha
introducido los datos en la pantalla, el control del programa vuelve al nivel de
aplicacin y el nivel de presentacin es visible pero no acepta entradas hasta que el
programa de aplicacin haya llamado a una nueva pantalla y la enve al servidor de
presentacin.

Pgina 10 de 194

ABAP Fundamentos y Reporting


La lgica de programacin de la aplicacin que tiene lugar entre dos pantallas se
conoce como etapa de dilogo. El ABAP ha sido concebido de manera que los
desarrolladores no se tienen que preocupar de la comunicacin o de los problemas de
distribucin entre los diferentes niveles.

1.3

Visin desde el punto de vista del usuario

La siguiente ilustracin representa el punto de vista del usuario sobre el Sistema R/3:

Para el usuario los componentes visibles del Sistema R/3 son aquellos que aparecen
como una ventana sobre su pantalla. Las ventanas son generadas por el nivel de
presentacin, y forman parte del Sistema Base de R/3.
Antes de que el usuario entre en el sistema R/3, debe ejecutar una utilidad llamada
SAP Logon, que se instala en el front end. En el Logon de SAP, el usuario elige uno de
los sistemas de R/3 disponibles. Entonces, el programa se conecta con el servidor de
mensajes del sistema y obtiene la direccin del servidor de aplicaciones ms
conveniente (el que se utilice menos). Este lanzar el SAPGui conectado al servidor
de aplicaciones.
SAPGui mostrar la pantalla de entrada al sistema. Una vez que el usuario ha entrado
en l, se le mostrar la pantalla inicial del sistema R/3. Despus de entrar en el
sistema, el usuario puede abrir hasta seis ventanas dentro de la misma sesin
SAPGui. Las diferentes ventanas nos permiten ejecutar diferentes aplicaciones en
paralelo, independientes unas de otras.
Dentro de una ventana, el usuario puede ejecutar aplicaciones que llamen a su vez a
nuevas ventanas (tales como cajas de dilogo y ventanas grficas). Estas ventanas no

Pgina 11 de 194

ABAP Fundamentos y Reporting


son independientes pertenecen a la sesin desde la cual fueron llamadas- . Estas
ventanas pueden ser modales (la ventana original no estar preparada para recibir
datos) o amodales (todas las ventanas admiten entrada).
El usuario puede abrir otros SAPGui, usando el SAP Logon, para entrar en el mismo
sistema o en otro. Los SAPGui individuales y correspondientes a sesiones de un
terminal de R/3 son totalmente independientes. Esto significa que podemos tener
abiertos en nuestro ordenador varios SAPGui que representen los niveles de
presentacin de diferentes sistemas R/3.

1.4

Usuarios

En SAP cada una de las acciones que se realiza est identificada por el nombre de
usuario, guardando siempre histricos de modificaciones, versiones, etc. Por eso es
necesario que antes de entrar al sistema el usuario se identifique con su nombre
(username) y su clave (password); y tambin es muy importante que cada cual tenga
un nombre de usuario no compartido para evitar problemas.

Adems se nos pide el nmero de mandante y el idioma en que queremos trabajar.


El concepto de mandante permite trabajar en la misma mquina con los mismos
programas pero en un espacio de datos diferentes. Es el mismo concepto que trabajar
por empresas. Para separar los datos, todas las tablas de aplicacin tienen un campo
clave llamado MANDT.

1.5

Men y transacciones

Podemos acceder a una determinada tarea a travs de la opcin correspondiente del


men (de usuario
transaccin.

o estndar de SAP

) o bien a travs de un cdigo de

Un cdigo de transaccin est asociado a un programa. Permite que el usuario


arranque el programa de manera rpida, introduciendo el cdigo en el campo de
comandos. Normalmente el cdigo de transaccin est asociado a uno o varios
caminos del men. Podemos visualizar el cdigo de transaccin correspondiente a

Pgina 12 de 194

ABAP Fundamentos y Reporting


cada opcin de men si en Detalles -> Opciones de la pantalla inicial marcamos la
opcin Visualizar nombres tcnicos.

1.6

Teclas de funcin comunes

Adems hay teclas de funcin que siempre (o casi siempre) estn activas, pero que
siempre tienen la misma funcionalidad que un botn de la pantalla o una opcin de
men. Las teclas de funcin ms importantes y tiles son:
F11

Grabar

F3

Paso atrs (Back)

Shift+F3

Finalizar (Exit)

F12

Cancelar (Cancel)

F8

Ejecutar

F4

Entradas posibles (sobre un campo): match code que


nos permite elegir valores mediante distintos criterios
de seleccin.

F1

Ayuda (sobre un campo)

F2

Doble click - Seleccionar.

CTRL+F2

Verificar

CTRL+F3

Activar

CTRL+F4

Refrescar

CTRL+Y

Manteniendo pulsadas estas teclas se pueden


seleccionar bloques de la pantalla para copiarlos.

Pgina 13 de 194

ABAP Fundamentos y Reporting

Adems, en todas las pantallas est activo el men "Sistema", a partir del cual
podemos acceder a las siguientes funcionalidades:

Crear modo

En SAP se puede trabajar simultneamente hasta con seis modos


(ventanas) a la vez, en cada una de las cuales se puede estar
efectuando una tarea distinta de manera independiente.

Borrar modo

Cerrar el modo actual.

Valores prefijados

Valores por defecto del usuario actual, que son configurables.

Servicios

Ejecutar reports, QuickViewer (consultas de tablas), gestionar la


impresin, actualizar tablas, controlar Batch inputs y jobs, etc.

Utilidades

Debugar programas, trazas de SQL, bloqueos, memoria y


autorizaciones.

Lista

Grabar a fichero, imprimir, enviar a usuario, etc.

rdenes
propias

SPOOL Visualizar nuestros trabajos de impresin

Jobs propios

Visualizar nuestras ejecuciones en fondo (background).

Status

Informacin sobre datos de usuario y de sistema. til para


obtener el cdigo de la transaccin mediante la cual se llega a
esta pantalla, el nombre del programa que se ejecuta mediante
esta transaccin y el nmero de pantalla en el que estamos (un
mismo programa y una misma transaccin pueden gestionar
muchas pantallas distintas).

Salir del sistema

Cerrar la sesin de SAP.

Pgina 14 de 194

ABAP Fundamentos y Reporting


1.7

Repositorio

Las aplicaciones se componen de cdigo de programa, definiciones de pantallas, de


tablas, mens y otros componentes. Todos estos objetos de desarrollo estn
almacenados en una seccin especial de la base de datos llamada Repository R/3, y
por ello, se clasifican como objetos del Repository.
El Repository est organizado segn la aplicacin y cada aplicacin consta de
subdivisiones lgicas llamadas paquetes. A cada objeto se le debe asignar un paquete
cuando se crea.
El Object Navigator (SE80) proporciona una vista en forma de lista jerrquica de todos
los objetos que forman un paquete o un programa o un grupo de funciones.
Da acceso tambin a un sistema de informacin para buscar objetos del Repository
segn ciertos criterios (accesible tambin mediante la transaccin SE84).

1.8

ABAP Workbench

El componente ABAP Workbench es un entorno de desarrollo completamente


integrado que sirve para crear, mejorar, probar y organizar las aplicaciones en el
lenguaje de programacin ABAP. Contiene diversas herramientas que permiten editar
objetos especficos del repositorio. Las ms importantes son:
Herramienta

Transaccin

Objetos que se editan

Editor ABAP

SE38

Cdigo de programas

Dictionary ABAP

SE11

Tablas y otros objetos

Menu Painter

SE41

Interfase (men, barras, botones)

Screen Painter

SE51

Pantallas para dilogos

Biblioteca de funciones

SE37

Mdulos de funcin y grupos

Se pueden usar estas herramientas principalmente de dos maneras: bien llamando al


editor correspondiente para modificar cada objeto individual, o bien trabajando con el
Object Navigator (SE80) donde haciendo doble-click en un componente de un
programa se llama al editor correspondiente.

1.9

Organizacin del desarrollo

Los objetos del repositorio quedan ligados al sistema de correcciones y transportes en


el momento que se les asigna un paquete.
Cuando desarrollamos, lo hacemos sobre un sistema aparte del productivo para no
interferir en su funcionamiento. Cuando un desarrollo ha finalizado, se debe
transportar a un sistema de test y, finalmente, al sistema productivo. Para gestionar
estos transportes se deben haber definido unos ciertos caminos a travs del
Workbench Organizer. Esta herramienta permite organizar los proyectos de desarrollo.
Cuando comienza un proyecto, el responsable crea una change request y asigna
ciertos desarrolladores a esta peticin. El Workbench Organizer asigna un nmero a
esta peticin (<SID>K9<nnnnn> donde SID es el nmero del sistema). Mediante las
change request se puede realizar un control de versiones de los objetos, bloquearlos
para otros desarrollos y anexar documentacin descriptiva del desarrollo.
A partir de ese momento, cuando un desarrollador modifica un objeto y lo asigna a
esta change request, el objeto se archiva automticamente en la tarea correspondiente
al usuario. La asignacin de un objeto a una change request es temporal, a diferencia
de la clasificacin en paquetes (un objeto siempre pertenece a un nico paquete).

Pgina 15 de 194

ABAP Fundamentos y Reporting


Cuando cambiamos o creamos un original la tarea recibe el nombre de CORRECCION,
si por el contrario cambiamos una copia llevara el nombre de REPARACION.
Cuando acaba su trabajo, el desarrollador libera su tarea. En ese momento los objetos
y bloqueos se transfieren de la tarea a la change request. Todava cualquier
desarrollador puede hacer modificaciones al objeto y se crear una nueva tarea si es
necesario.
Cuando el proyecto ha acabado, el responsable libera la change request y se borran
todos los bloqueos de los objetos que contena. Los objetos se exportan al directorio
central de transportes (en el sistema operativo). La importacin en el sistema destino
no es automtica, el administrador de sistemas debe lanzarla y despus el
desarrollador puede consultar el log del transporte.

1.9.1 Crear paquetes


Es necesaria la siguiente informacin:
Texto breve: Descripcin que aparecer al lado del nombre tcnico de la clase.
Capa de transporte: Determina a qu sistemas se transportarn los objetos del
paquete. Los administradores pueden crear diferentes capas de transporte en un
mismo sistema.
Componente de aplicacin: Divisin lgica de nivel superior de los objetos. Cada
paquete se debe asignar a un componente de aplicacin.
Los paquetes tambin se transportan asignndolas a change requests.

1.9.2 Asignar tareas


Siempre que creamos o modificamos un objeto el sistema nos solicita que lo
asignemos a una change request.
Podemos consultar las change request que tenemos asignadas en el Workbench
Organizer.

Pgina 16 de 194

ABAP Fundamentos y Reporting

2 El Diccionario de Datos
El sistema R/3 almacena los datos con los que debe trabajar (y tambin los programas
y las parametrizaciones) en una base de datos relacional, formada por miles de tablas
interrelacionadas. La informacin sobre la estructura de cada una de las tablas y las
caractersticas de sus campos se gestiona de forma centralizada en el Diccionario
ABAP (transaccin SE11).
El Diccionario ABAP describe y gestiona de forma centralizada todas las definiciones
de datos utilizadas en el sistema. Est completamente integrado en el Development
Workbench de ABAP: el resto de los componentes pueden acceder activamente a las
definiciones actualizadas almacenadas en el Diccionario de ABAP. De esta manera se
asegura la integridad y consistencia de los datos. Los programas ABAP pueden utilizar
referencias del Diccionario para crear objetos de datos internos.
Los elementos bsicos del diccionario de datos son las tablas, las vistas, los tipos
(elementos de datos, estructuras, tipos tabla), los dominios y las ayudas de bsqueda.
Existen relaciones entre ellos, por ejemplo: una tabla est compuesta de campos,
cada campo se crea haciendo referencia a un elemento de datos (descripcin
semntica), y cada elemento de datos se crea a partir de un dominio (descripcin de
atributos tcnicos como el tipo y la longitud).
Todos los objetos estndar estn definidos en l, y deberemos incluir tambin todas
las definiciones de tipos y las estructuras de los objetos desarrollados a medida. Estos
objetos se crearn automticamente en la base de datos. El Diccionario tambin
proporciona herramientas para editar campos de pantalla, por ejemplo para asignar a
un campo una ayuda de entradas posibles (ayuda F4).

Se accede a la pantalla inicial del diccionario ABAP a travs de la opcin de men


"Herramientas/Workbench ABAP/Desarrollo/Dictionary ABAP" o llamando a la
transaccin SE11. Tiene el siguiente aspecto:

Pgina 17 de 194

ABAP Fundamentos y Reporting

2.1 Tablas
Una tabla representa un conjunto de atributos de una entidad. Una tabla del
Diccionario ABAP es la descripcin lgica de la estructura de una tabla en el sistema
R/3, independiente de la base de datos utilizada. Hay que recordar que el sistema
trabaja contra una base de datos relacional y que, por tanto, habr otra descripcin
paralela en el nivel de la BBDD que denominaremos descripcin fsica.
Cuando se crea una nueva tabla y se activa, se crea una definicin fsica de la misma
(en el lenguaje propio del RDBMS) a partir de la definicin almacenada en el
Diccionario ABAP. La tabla de la base de datos tiene el mismo nombre que la del
Diccionario, y tambin los mismos nombres de campos (aunque la secuencia puede
ser diferente, para facilitar la insercin de nuevos campos). Los tipos de datos son
convertidos.
Las operaciones que haya que realizar sobre la base de datos se deben realizar a
travs del Diccionario, modificando y activando los objetos necesarios.

Pgina 18 de 194

ABAP Fundamentos y Reporting

La definicin de una tabla tiene diversos componentes:


La Descripcin breve es un texto explicativo que puede servir para buscar la tabla.
En la pestaa Campos se definen los atributos contenidos el la tabla y sus tipos de
datos (mediante un elemento de datos o entrada directa del tipo). Se determina la
clave de la tabla.
En la pestaa Ayuda p./Verif.entrada se definen las relaciones con otras tablas
(claves externas).
En la pestaa Campos de moneda/cantidad se definen los campos que contienen
las unidades de los campos con importes o cantidades.
En la pestaa Entrega y Actualizacin se define el tipo de tabla y si se puede
actualizar mediante transacciones estndar (SM30, SM31).
Pulsando el botn Opciones tcnicas pasamos a las caractersticas que determinan
cmo se crear la tabla en la base de datos (Clase de datos y Categora de tamao).
Es obligatorio actualizarlas antes de activar una tabla.
Pulsando el botn ndices accedemos a los ndices definidos para la tabla, que
permiten acelerar la seleccin de los datos. Son
Para crear, modificar o visualizar tablas, en el men diccionario introducimos el
nombre de la tabla que queremos tratar y seleccionamos la opcin Tablas.
Visualizaremos la tabla SPFLI.
Descripcin breve: Descripcin significativa de la tabla.
En este caso "Itinerario de vuelos".

2.1.1 Pestaa "Campos"


Para cada campo de una tabla del Diccionario se definen las siguientes caractersticas:
Nombre campo: Nombre del campo. Debe tener un mximo de 16 caracteres y puede
contener letras, dgitos y subrayados. Debe comenzar con una letra.

Pgina 19 de 194

ABAP Fundamentos y Reporting


Clave: Indica si el campo forma parte de la clave primaria de la tabla. Un campo o
conjunto de campos son clave en una tabla si determinan de forma unvoca un nico
registro de dicha tabla. Toda tabla tiene que tener clave primaria.
Tipo de datos: Nombre del elemento de datos que describe al campo.
Tipo y longitud: Tipo de dato y longitud. (*)
Posiciones decimales: nmero de posiciones decimales despus del punto decimal,
especfico para tipos de datos numricos.
Descripcin breve: Descripcin del significado del campo. (*)
(*) En general, las caractersticas (tipo, longitud, descripcin) de un campo se asignan
mediante un elemento de datos. Pero podemos crear campos en la tabla sin
vincularlos a un elemento de datos, asignndoles directamente un tipo, longitud y
descripcin. Es necesario pulsar el botn "Tipo instalado" para habilitar para entrada
estos campos. Aunque existe esta posibilidad, no es muy recomendable pues no
permite la reutilizacin.
Ayuda de bsqueda: se puede asignar una ayuda de bsqueda para un campo. Esta
ayuda de bsqueda define el flujo de ayuda que se utilizar para la entrada de datos
en todas las pantallas en las que se utilice el campo.

Pgina 20 de 194

ABAP Fundamentos y Reporting


2.1.2 Pestaa "Entrega y actualizacin":
Clase de entrega: Indica quin es el responsable del mantenimiento de la tabla, si es
una tabla de parametrizacin,
Esta tabla en concreto es de tipo A, lo que significa que contiene datos de aplicacin.
Permitida Actualizacin tabla: Habilita/ Deshabilita la posibilidad de que el contenido
de la tabla pueda ser modificado en la transaccin de visualizacin del contenido de la
tabla. (Si no se marca no se podrn modificar los registros de la tabla por esta
transaccin).

2.1.3 Pestaa "Campos de moneda/cantidad":


TabRef y Cpo Ref.: Para los tipos de datos importe (CURR) y cantidad (QUAN), es
necesario (y obligatorio) especificar el campo de la tabla donde se encuentra la
correspondiente moneda o unidad de medida. Estos campos de referencia debern de
ser del tipo Moneda (CUKY) para los importes y Unidad (UNIT) para las cantidades De
esta forma, cuando se visualicen datos (en pantallas, pantallas de seleccin) sern
formateados con el valor que contenga el campo al que han sido referenciados.
Nota: El campo MANDT, mandante, se aade como un atributo en las tablas de esta
forma, se pueden tener varias colecciones de datos distintas segn el mandante. En
las selecciones, actualizaciones de la tabla este campo es transparente ya que
tendr siempre el valor indicado al iniciar la sesin en el sistema. (No es obligatorio
definir el mandante en todas las tablas aunque si es lo ms habitual).

2.1.4 Pestaa "Ayuda p./Verif.entr.":


Podemos definir las relaciones existentes entre las tablas del Diccionario ABAP
mediante claves externas. Una clave externa enlaza dos tablas T1 y T2 asignando
campos de la tabla T1 a los campos clave de la tabla T2.

La tabla T1, donde tenemos los campos que deseamos verificar, se llama tabla de
clave externa (tabla dependiente) y la tabla T2, donde se encuentran los registros que

Pgina 21 de 194

ABAP Fundamentos y Reporting


definen los valores posibles, se llama tabla de verificacin (tabla referenciada). Los
campos a relacionar de las dos tablas deben compartir el mismo tipo de datos y
longitud: cada campo clave de la tabla de verificacin se corresponder con un campo
de la tabla de clave externa (campos de clave externa).
Mediante la utilizacin de claves externas podemos verificar fcilmente los valores
introducidos en un campo. Las claves externas se pueden utilizar tambin para enlazar
varias tablas en una vista o en un objeto de bloqueo.
Cuando se realiza una entrada en los campos de clave externa, se comprueba que la
tabla de verificacin contenga un registro con la clave definida por los valores de los
estos campos. Si existe, la entrada es vlida. En cualquier otro caso, el sistema
rechaza la entrada.
La verificacin funciona internamente de la siguiente manera. Se genera una sentencia
SELECT a partir de la definicin de la clave externa. Al realizar una entrada en los
campos de verificacin se invoca esta sentencia SELECT. Si se encuentra un registro
conveniente en la tabla de verificacin, la entrada se considera vlida. En otro caso, se
rechazar la entrada.
La sentencia SELECT correspondiente tiene la siguiente forma para la tabla de clave externa
mostrada en el grfico superior:
SELECT * FROM T2 WHERE T2-CAMPO5 = T1-CAMPO2 AND T2-CAMPO6 = T1CAMPO4.
Una entrada en una pantalla para el campo de verificacin Campo2 slo ser vlida si la tabla de
verificacin contiene un registro con las entradas realizadas en la pantalla para los campos
Campo2 y Campo4 como clave.

En este ejemplo, se rechazara una entrada con Campo2 = 2 y Campo4 = 2, ya que T2 no


contiene un registro con la clave Campo5 = 2 Y Campo6 = 2.

Pgina 22 de 194

ABAP Fundamentos y Reporting


Si no queremos realizar la verificacin para todos los campos clave de la tabla de
verificacin, podemos excluir los campos de la tabla de clave externa de la asignacin
de campos de la tabla de verificacin con claves externas genricas y constantes.
Otro ejemplo:
La tabla SBOOK contiene la reserva de vuelos de un cliente para una compaa area. Las
reservas de vuelo pueden realizarse en una agencia de viajes o directamente en la compaa
area. Si la reserva se realiza directamente en una oficina de ventas de la compaa, el nmero
de la oficina se almacena junto con la reserva en el campo COUNTER de la tabla SBOOK.
Deberamos asegurar que slo se introducen nmeros de oficina vlidos. Todas las oficinas de
ventas existentes se encuentran en la tabla SCOUNTER. Se puede definir la verificacin de
valores necesaria creando una clave externa para el campo de verificacin COUNTNUM.

Tab.verif.: En este punto aparecer un * cuando el elemento de datos introducido,


haga referencia a un dominio que tenga una tabla de valores permitidos.

Pgina 23 de 194

ABAP Fundamentos y Reporting

2.1.5 Opciones tcnicas


Las opciones tcnicas de una tabla definen la forma en la que se tratar la tabla
cuando se cree en la base de datos, es decir, si la tabla tendr memoria intermedia y
si los cambios realizados en los registros de datos de la tabla sern guardados en logs.
Para definir estas caractersticas seleccionaremos la opcin de men Pasar a
Opciones tcnicas o el botn

. Los parmetros ms importantes son:

2.1.5.1 Clase Datos


Define de forma lgica el rea fsica de la base de datos en la que se ubica la tabla.
Este lugar fsico donde se determina en funcin del tipo de utilizacin de la tabla, de la
cantidad de actualizaciones y de consultas que se realicen sobre ella.
Existen las siguientes clases de datos:
APPL0 (datos maestros). Son los datos que se leen muy a menudo, pero muy
raramente para su actualizacin. Un ejemplo de datos maestros son los datos que se
encuentran en un fichero de direcciones, tale como el nombre, la direccin y el nmero
de telfono.

Pgina 24 de 194

ABAP Fundamentos y Reporting


APPL1 (datos de transacciones). Son los datos que se actualizan constantemente. Un
ejemplo de este tipo de datos serian las mercancas que hay en un almacn, que
cambian cada vez que realiza una orden de compra.
APPL2 (datos de gestin y parametrizacin): Son los datos que se definen cuando se
instala el sistema y que no se suelen modificar posteriormente. Un ejemplo sera la
tabla con los cdigos de los pases.
Existen dos clases de datos adicionales, USR y USR1, que se ofrecen para el cliente.
Se utilizan para desarrollos del usuario. Las tablas que se asignen a esta clase de
datos se almacenen en un rea especial para desarrollos de usuario.

La clase de datos slo influye en la grabacin de la tabla en los sistemas ORACLE e


INFORMIX.

2.1.5.2 Categora tamao


Define el espacio demandado para guardar los datos de la tabla, el nmero
aproximado de registros que se espera que albergue. Podemos elegir una categora
de tamao de 0 a 4. Cada categora tiene asignada un tamao de memoria fijo en la
base de datos, que depende del sistema de base de datos utilizado.
Cuando se crea una tabla, se reserva un espacio inicial (extensin inicial) en la base
de datos. Si, posteriormente, se requiere ms espacio, se aadir la memoria adicional
adecuada dependiendo de la categora de tamao seleccionada.
La seleccin de la correcta categora de tamao evita que se tengan que ir realizando
varias extensiones pequeas cuando se va aumentando el tamao de la tabla.
Tambin evitar que se derroche espacio si se crea un tamao inicial demasiado
grande.

Pgina 25 de 194

ABAP Fundamentos y Reporting

2.1.5.3 Grabacin en memoria intermedia


Define si la tabla utilizar la memoria intermedia o no. La utilizacin de la memoria
intermedia ahorra tiempo en el acceso a los registros contenidos en una tabla. La
memoria intermedia de una tabla reside localmente en cada servidor de aplicaciones
del sistema, de manera que se puede acceder directamente a ella para leer los datos
de las tablas que tienen esta caracterstica activada.
Existen tres posibilidades:
Imposible grabar en memoria intermedia. No se permite grabar en la memoria
intermedia, por ejemplo porque los programas de aplicacin necesitan los datos
actualizados de la tabla o porque la tabla cambia muy frecuentemente.
Permitido grabar en memoria intermedia, desactivado. Se permite la grabacin en
memoria intermedia desde el punto de vista tcnico. Las aplicaciones que acceden a
la tabla funcionan correctamente con y sin utilizacin de la memoria intermedia. Si se
va a obtener provecho o no de la memoria intermedia depende del tamao de la tabla
y del perfil de acceso a la tabla (frecuencia de los diferentes tipos de acceso a la
tabla). La utilizacin de la memoria intermedia est desactivada porque no es posible
conocer cules de stos valores estarn en el sistema del cliente. Si la utilizacin de la
memoria intermedia para la tabla va a resultar ventajosa por el tamao de la tabla y el
perfil de acceso a la tabla, podemos activarlo en cualquier momento.
Grabacin en memoria intermedia activada: la tabla utilizar memoria intermedia. En
este caso debemos especificar un tipo de grabacin en memoria intermedia.
Si un programa de una aplicacin accede a los datos de una tabla con memoria
intermedia, la interfase de la base de datos determina si estos datos se encuentran en
la memoria intermedia del servidor de aplicaciones. Si es as, se leern los datos
directamente de la memoria intermedia. Si los datos no se encuentran all, se leer de
la base de datos y se cargar en la memoria intermedia. El siguiente acceso a estos
datos ya podr utilizar la memoria intermedia.

Pgina 26 de 194

ABAP Fundamentos y Reporting

Si se modifica una tabla con memoria intermedia, sta es actualizada de forma


sncrona en la memoria intermedia del servidor de aplicacin en el que se realiz el
cambio. Las memorias intermedias del resto de la red, es decir, las memorias
intermedias del resto de los servidores de aplicacin, son sincronizadas mediante un
procedimiento asncrono para no sobrecargar la red.
Debido a este mtodo de sincronizacin, slo se debera activar la memoria intermedia
para aquellas tablas en las que se modifican raramente (y se lee frecuentemente) o
para las cuales las inconsistencias temporales no son significativas. Las candidatas
tpicas para la utilizacin de la memoria intermedia incluyen a las tablas de
parametrizacin y del sistema. En ciertos casos, los datos maestros tambin son
susceptibles de utilizar memoria intermedia.
Si una tabla va a utilizar memoria intermedia, debemos definir el tipo de grabacin en
ella (total, registro nico, mbito genrico), es decir, cuntos registro de la tabla van a
cargarse en la memoria intermedia cuando se acceda a una entrada de la tabla.

2.1.5.4 Registrar modificaciones de datos


Este parmetro define si se llevar un registro de los cambios realizados en los datos
de la tabla o no. Si est activo, cada cambio que se realice en la tabla se guardar en
una tabla de logs.
El flag de Convertir a tabla transparente (flag transparente) tambin aparecer para las
tablas pool o para las tablas que hayan sido convertidas en tablas transparentes
mediante este flag.

2.1.6 ndices
Podemos buscar ms rpidamente en las tablas ciertos datos que satisfagan cierto
criterio si utilizamos ndices. Un ndice puede considerarse como una copia de la tabla
de la base de datos que se ha reducido a ciertos campos. Esta copia est siempre
ordenada, lo cual ofrece un acceso ms rpido a los registros de la tabla, por ejemplo
por medio de una bsqueda binaria.

Pgina 27 de 194

ABAP Fundamentos y Reporting


El ndice primario contiene los campos clave de la tabla y un puntero a los campos no
clave. Se crea automticamente cuando se genera la tabla.

Podemos crear otros ndices para la tabla. Estos se llaman ndices secundarios. Esto
ser necesario si se accede frecuentemente a la tabla por campos diferentes a la clave
primaria.
Slo tienen sentido aquellos ndices cuyos campos restrinjan significativamente el
conjunto de resultados de la seleccin.
Supongamos que se realiza frecuentemente la siguiente seleccin sobre la tabla de direcciones
TABDIR:
SELECT * FROM TABDIR WHERE TITULO = Prof. AND
NOMBRE = X
APELLIDO1 = Y.
El campo TITULO raramente restringir un registro especificado con NOMBRE y
APELLIDO1, en caso de que creramos un ndice por NOMBRE/APELLIDO/TITULO, ya que
no es probable que mucha gente tenga el mismo nombre y diferentes ttulos. Esto no tendra
sentido en un ndice. Un ndice slo sobre el campo TITULO podra tener sentido si, por
ejemplo, se seleccionan frecuentemente todos los profesores.
El orden de los campos de un ndice es de vital importancia en cuanto a la velocidad
de acceso a los datos. Los primeros campos deben ser aquellos que tengan valores
constantes para una gran cantidad de selecciones.
Los ndices adicionales significan una carga adicional para el sistema, ya que deben
ajustarse cada vez que cambia el contenido de una tabla. Por esta razn, las tablas
que se modifican muy frecuentemente deberan tener unos pocos ndices.
Los diferentes ndices para una misma tabla se distinguen entre s por medio de un
identificador que slo puede contener letras y nmeros. El valor 0 est reservado
para el ndice primario.

Pgina 28 de 194

ABAP Fundamentos y Reporting


Ejemplo: A menudo se buscan todas las oficinas de venta de las compaas areas de un cierto
aeropuerto. El ID del aeropuerto se utilizar para buscar las oficinas de ventas para este acceso.
La ordenacin por el ndice primario no es til en este caso para acelerar la bsqueda. Como la
tabla SCOUNTER tiene muchas lneas, se debe crear un ndice secundario por el campos
AIRPORT (ID del aeropuerto) para acelerar este tipo de bsqueda.

2.1.7 Append estructures


Si queremos ampliar una tabla con un append structure, los nombre deben de tener el
rango entre YY..ZZ. Al realizar esta operacin el orden de los campos de la BB.DD es
indiferente, (lo que se hace es un cambio en el catalogo). Esto permite aadir campos
a las tablas sin alterar la tabla.

2.2 Dominios
Un dominio es el objeto que define las caractersticas tcnicas de un campo o atributo:
el tipo de datos, la longitud, los valores posibles, las propiedades de salida,
Tanto para crear un dominio como para modificarlo o visualizarlo se debe acceder a la
pantalla inicial del Diccionario (SE11).
Veamos ms a fondo cmo es un dominio a travs de un ejemplo:
Seleccionamos la opcin Dominio e introducimos en el campo adyacente el nombre del
Dominio de datos que queremos tratar, en nuestro caso S_CITY. Pulsamos el botn de
Visualizar (el procedimiento es similar para Crear y Modificar), tambin podemos acceder a
estas opciones a travs del men Objeto Dict.
Llegaremos a la siguiente pantalla:

Pgina 29 de 194

ABAP Fundamentos y Reporting

2.2.1 Definicin
En la pestaa Definicin encontramos campos para introducir las siguientes
caractersticas formales:
Descripcin breve: Contiene una descripcin del dominio a crear, un texto explicativo
del dominio.
En nuestro caso la descripcin es "Nombre de una ciudad".
Tipo de datos: El tipos predefinido que mejor se adapta a las caractersticas del
objeto. Para visualizar los tipos posibles pulsamos F4 y vemos la siguiente ventana:

Pgina 30 de 194

ABAP Fundamentos y Reporting

En nuestro caso el tipo es "CHAR", pues los valores que se almacenan son cadenas de caracteres.
Longitud: Se corresponde al tamao mximo deseado para los valores que tomar el
dominio.
En nuestro caso la longitud es 20.
Los elementos del marco Atributos de salida varan dependiendo del tipo de datos
seleccionado. Por ejemplo para el tipo CHAR tenemos la opcin de minsculas y para
el tipo CURR tenemos la opcin del signo.
Longitud de salida: Representa la longitud en la que se va a representar el valor a la
hora de imprimirse en un informe, visualizarse en una pantalla, etc.
Tambin 20.
Rutina de conversin: Es una referencia a los procedimientos de conversin entre el
formato interno del dato y su representacin externa.
(En blanco)
Flag de Minsculas: Se permite la utilizacin de letras minsculas.
(No marcado)

2.2.2 mbito de valores


En la pestaa que tiene por ttulo mbito Val se define el rango de valores que puede
tomar un campo que haga referencia a este dominio. A partir de esta definicin, el
sistema realiza comprobaciones automticas para verificar que el valor introducido se

Pgina 31 de 194

ABAP Fundamentos y Reporting


encuentra dentro de los valores vlidos. Para delimitar estos valores, si es necesario,
hay dos posibilidades:
- que los valores vlidos estn almacenados en una tabla, en cuyo caso
introduciremos en esta pantalla el nombre de la tabla. El sistema propondr la tabla de
valores como tabla de verificacin cuando intentemos definir una clave externa para
este campo. Hay que tener en cuenta que no se realiza la verificacin
simplemente por introducir una tabla de valores. La verificacin contra la tabla de
valores slo tiene efecto cuando se define una clave externa.
- que se fijen directamente en esta pantalla los valores vlidos, bien a travs de una
lista de valores individuales (que pueden tener una descripcin breve), bien definiendo
intervalos de valores introduciendo los lmites inferior y superior.
En nuestro caso de ejemplo el dominio tiene los valores posibles almacenados en la tabla
SGEOCITY.

2.3 Elementos de Datos


Si el dominio es la descripcin tcnica de un atributo, el elemento de datos describe la
parte funcional del atributo, es su descripcin semntica. Describe el propsito de un
dominio para ciertos campos que dependen de l.
Para crear, modificar y visualizar elementos de datos debemos acceder tambin a la
pantalla inicial del Diccionario (SE11). All seleccionamos la opcin Tipo de Datos y
introducimos el nombre del Elemento de datos que queremos tratar.
Visualizaremos el elemento de datos S_TO_CITY. Seleccionamos la opcin "Elemento de datos",
escribimos este nombre y pulsamos el botn de Visualizar.
Descripcin breve: Descripcin representativa del objeto.
"Ciudad de llegada"
En la pestaa "Tipo de datos" aparece el tipo de datos que corresponde al elemento.
El tipo de datos se puede definir utilizando un dominio o por otros medios.
Dominio: Dominio al que hace referencia el elemento de datos. Varios elementos de
datos pueden tener el mismo dominio.
Grficamente podramos definir la relacin entre elementos y dominios de la siguiente
forma:

Pgina 32 de 194

ABAP Fundamentos y Reporting

El elemento de datos S_TO_CITY utiliza el dominio S_CITY. Este dominio es utilizado tambin
por otros elementos de datos que deben tener las mismas caractersticas tcnicas: S_CITY,
S_FROM_CIT, S_VIA_CITY. Cada uno tiene una aplicacin diferente dentro del modelo de
datos.
Podemos averiguar en qu elementos de datos se utiliza un dominio a travs de la opcin
"Utilidades"->"Referencia de utilizacin".
Tipo Instalado: Tipo de datos y longitud con el mismo significado que el que se define
en los dominios.
ID parmetro: Permite referenciar a un parmetro de memoria SAP. Ser til para
mostrar valores por defecto en pantallas, ya que este campo se completar con el
valor que tenga el parmetro de memoria SAP al mostrar la pantalla. (En nuestro caso
lo dejamos en blanco.)

Pgina 33 de 194

ABAP Fundamentos y Reporting


En la pestaa "Denom. Campo" aparecen los campos correspondientes a la
descripcin del objeto. Son tres textos de diferente longitud que se mostrarn en los
diferentes lugares donde se utilicen campos con este elemento de datos: cabeceras de
informes al visualizar contenidos de tablas, pantallas
El campo longitud representa el espacio en el que se va a escribir el texto.
Tambin se puede asignar una documentacin online a un elemento de datos. El texto
que aparece para la ayuda de campo (ayuda F1 ).
Tanto los elementos de datos como los dominios son objetos independientes dentro
del diccionario de datos, lo que significa que podemos utilizarlos para diferentes
campos de diferentes tablas. Un mismo dominio puede utilizarse para diferentes
elementos de datos. Esto nos permite el uso de objetos que ya han sido definidos y
asegurar la consistencia de los campos que tengan el mismo tipo de contenido y de
caractersticas tcnicas.

2.4 Estructuras
Las estructuras se definen en el Diccionario de Datos de la misma forma que las tablas,
pero no existe ninguna tabla en la base de datos que se corresponda con ella. Esto
quiere decir que, mientras que las tablas contienen datos que estn permanentemente
almacenados en la base de datos, las estructuras slo contienen datos en tiempo de
ejecucin de un programa. Para ellas slo existe la definicin lgica. Tienen la
finalidad de almacenar datos durante la ejecucin de un programa o permitir el paso
de informacin de un programa a otro.
Se pueden utilizar los mismos elementos de datos y dominios que en las tablas y se
pueden incluir las estructuras de otras tablas. Esto permite que, los programas que
sean complejos, enlacen datos que provienen de diferentes tablas.

2.5 Vistas
Los datos de una aplicacin a menudo se encuentran distribuidos en diferentes tablas
relacionadas. Por medio de las vistas podemos ver los datos como si se encontraran
en una nica tabla.
El primer paso en la definicin de una vista es elegir las tablas base que formarn
parte de ella. Si hay ms de una, debemos especificar la condiciones de unin (es
posible utilizar la clave externa definida entre las tablas). Despus, elegiremos los
campos de las tablas que queremos incluir en la vista (proyeccin), el resto de campos
quedan ocultos. Por ltimo, puede que queramos restringir los registros que deben
formar parte de la vista (seleccin).

Pgina 34 de 194

ABAP Fundamentos y Reporting

Existen cuatro tipos diferentes de vistas. Se diferencian entre s en la forma en que se


implementa la vista y en los mtodos que se permiten para acceder a la vista de datos:
Vistas de Base de Datos que se implementan mediante una vista equivalente en la
base de datos.
Vistas de Proyeccin que se utilizan para ocultar campos de una tabla
Vistas de actualizacin nos permiten realizar el mantenimiento de los datos
distribuidos en varias tablas
Vistas de ayuda que pueden utilizarse como mtodo de seleccin en las ayudas de
bsqueda.

2.5.1 Vistas de Base de Datos


En el modelo relacional, los datos de una aplicacin a menudo se distribuyen en varias
tablas de la base de datos. Crearemos vistas de bases de datos si queremos
seleccionar simultneamente datos de diferentes tablas que estn lgicamente
relacionados entre s. La seleccin mediante vistas normalmente es ms rpida que el
acceso individual a cada tabla.
Las vistas de base de datos que se definen en el Diccionario de ABAP tendrn su
correspondiente reflejo en la base de datos, que se generar automticamente cuando
se active la vista. Slo se pueden utilizar tablas transparentes en este tipo de vistas.
Los programas pueden acceder a los datos de la vista de base de datos utilizando la
interfase de la base de datos. Cuando seleccionemos los datos mediante vistas,
tambin deberamos asegurar que existen los ndices adecuados en las tablas
contenidas en la vista.

Pgina 35 de 194

ABAP Fundamentos y Reporting

Si la vista contiene ms de una tabla, slo se permite el acceso de lectura. Como la


operacin de unin se ejecuta en la propia base de datos, podemos minimizar de esta
manera el nmero de accesos a la base de datos.
Si la vista contiene una nica tabla, se puede utilizar el estatus de mantenimiento para
determinar si tambin se pueden insertar registros con la vista.

2.5.1.1 Includes en Vistas de Bases de Datos


Es posible incluir una tabla completa en una vista de base de datos. En este caso,
todos los campos de la tabla incluida sern campos de la vista. Si se aaden nuevos
campos en la tabla o se borra alguno ya existente, la vista se ajustar
automticamente a estos cambios.

Pgina 36 de 194

ABAP Fundamentos y Reporting

2.5.2 Vistas de Proyeccin


Las vistas de proyeccin se utilizan para ocultar ciertos campos de una tabla. Esto
significa que slo se transferirn los datos que se requieran cuando se acceda a la
base de datos.
Una vista de proyeccin slo puede aplicarse a una nica tabla y no se pueden
especificar condiciones de seleccin. En este tipo de vistas no existe el objeto
correspondiente en la base de datos.

Pgina 37 de 194

ABAP Fundamentos y Reporting

Tambin podemos acceder a tablas pool y cluster con una vista de proyeccin.
El estatus de mantenimiento de la vista controla cmo se puede acceder a los datos
de la tabla con la vista de proyeccin.

2.5.3 Vistas de actualizacin


Las vistas de actualizacin ofrecen una forma sencilla de mantener objetos de
aplicaciones complejos.
Los datos distribuidos en varias tablas a menudo forman una unidad lgica, por
ejemplo un objeto de aplicacin, para el usuario. Normalmente este querr ser capaz
de visualizar, modificar y crear los datos de tal objeto de aplicacin de forma conjunta.
Adems, generalmente el usuario no est interesado en la implementacin tcnica del
objeto de aplicacin, esto es, en la distribucin de los datos en varias tablas.
Una vista de actualizacin nos permite gestionar el mantenimiento de los datos de un
objeto de aplicacin de forma conjunta. Los datos se distribuirn automticamente en
las tablas de la base de datos. El estatus de mantenimiento determina qu tipos de
accesos son posibles a las tablas de la base de datos.
Todas las tablas incluidas en la vista de actualizacin deben estar enlazadas mediante
claves externas, es decir, las condiciones de unin de las vistas de actualizacin se
derivan siempre de la clave. No podemos introducir directamente las condiciones de
unin como para las vistas de base de datos.
Existen algunas restricciones para los atributos de las claves externas con las que son
enlazadas las tablas de una vista de actualizacin

Pgina 38 de 194

ABAP Fundamentos y Reporting

Se ofrece una transaccin de actualizacin de tablas estndar (SM30), que nos


permite gestionar el mantenimiento de los datos de los datos de las tablas base
conjuntamente en una vista de actualizacin.
Los mecanismos de mantenimiento, tales como pantallas y programas de
procesamiento, pueden ser creados a partir de la definicin de la vista mediante la
transaccin Generar dilogo de actualizacin de tabla (SE54). Esto hace posible crear
de una forma sencilla las interfases de mantenimiento de una vista.

Pgina 39 de 194

ABAP Fundamentos y Reporting


2.5.4 Vistas de ayuda
Las vistas de ayuda se pueden utilizar como mtodo de seleccin en las ayudas de
bsqueda. Esto ser especialmente necesario si se requiere una vista con unin
externa para la seleccin de valores. Como las vistas de bases de datos siempre
implementan una unin interna, en estos casos ser necesario indicar una vista de
ayuda como mtodo de seleccin de la ayuda de bsqueda.

Todas las tablas incluidas en una vista de ayuda deben enlazarse mediante claves
externas. Adems, slo se pueden utilizar claves externas que tengan ciertos atributos.
La funcionalidad de la vista de ayuda ha cambiado significativamente de la versin 3.0
a la versin 4.0. En la versin 3.0, la vista de ayuda se mostraba automticamente
para la ayuda de entrada (ayuda F4) para todos los campos que se verificaran contra
la primera tabla (tabla primaria) de la vista de ayuda. Esto ya no pasa en la versin 4.0.
En la versin 4.0 podemos crear explcitamente una ayuda de bsqueda que debemos
enlazar a los campos para los que se ofrecer.

2.5.5 Unin, Proyeccin y Seleccin


La estructura de una vista con los operadores de relacin join, proyeccin y
seleccin y la seleccin de datos utilizando una vista pueden mostrarse mediante un
ejemplo.
Tablas: Seleccionaremos las tablas de las que se desee obtener informacin.
Condiciones Join: Definen los campos por los que se realiza la interseccin entre las
tablas seleccionadas. Para indicar las relaciones podemos utilizar el botn
o escribir directamente las relaciones.
Campos Vista: Se seleccionan los campos deseados. Podemos renombrar el campo
en la vista ser el que pongamos en Campos Vista. (Por defecto ser el nombre
original del campo seleccionado).
Para facilitar la seleccin de campos de una tabla, situados sobre la tabla pulsamos el

Pgina 40 de 194

ABAP Fundamentos y Reporting


botn
donde marcaremos los campos deseados , una vez seleccionados
aparecern automticamente en la pantalla.
Para ver el contenido de la vista seleccionamos el men Utilidades Contenido.
Aparecera la pantalla de seleccin de la vista de la misma forma que en la
visualizacin de los datos de una tabla.
Sean dos tablas TABA y TABB. La tabla TABA tiene 2 entradas y la tabla TABB tiene cuatro
entradas.

Primero se pegan las dos tablas. Cada registro de TABA se combina con cada registro
de TABB. Si no se define una condicin join, el resultado cruzado de las tablas TABA y
TABB puede ser visualizado mediante la vista.

2.5.5.1 Condiciones Join


El resultado cruzado completo normalmente no es una seleccin sensible. Por lo tanto,
el resultado cruzado de ambas tablas debe restringirse mediante condiciones join. Una
condicin join describe la forma en la que se conectan los registros de las dos tablas.
En nuestro ejemplo, C1 de TABA debe identificarse con C3 de TABB. Por lo tanto, la condicin
join ser TABB-C1 = TABB-C3. Esta condicin join elimina del resultado cruzado todos los
registros para los cuales la entrada C1 no sea idntica a la entrada de C3. No se requiere la
columna de C3 en la vista.

Pgina 41 de 194

ABAP Fundamentos y Reporting

La condicin join puede especificarse explcitamente en el mantenimiento de la vista.


Tambin es posible utilizar una clave externa existente. La condicin join se genera
automticamente a partir de las definiciones de la clave externa:

2.5.6 Relacin entre Clave Externa y Condicin Join


Se define una vista que contiene las tablas base TAB1 y TAB2. TAB1 es la tabla
primaria de la vista y TAB2 la secundaria. TAB1 es la tabla de verificacin de TAB2.
Se asignan los campos de clave externa a los campos de la tabla de verificacin como
se indica a continuacin:
Campo de la tabla de verificacin

Campo de clave externa

TAB1-CAMPO_A

TAB2-CAMPO_1

TAB1-CAMPO_B

TAB2-CAMPO_2

La condicin join de la vista generada para la clave externa ser:


CREATE VIEW... AS SELECT... WHERE

TAB2-CAMPO_1 = TAB1_CAMPO_A AND


TAB2-CAMPO_2 = TAB1_CAMPO_B.

Tambin podemos generar condiciones join a partir de claves externas genricas y


constantes:
Campo tabla de verificacin

Campo clave externa

TAB1-CAMPO_A

TAB2-CAMPO_1

TAB1-CAMPO_B

Genrica

TAB1-CAMPO_C

Constante: C

La condicin join para la vista generada a partir de la clave externa en este caso sera:
CREATE VIEW... AS SELECT... WHERE

TAB2-CAMPO_1 = TAB1_CAMPO_A AND


TAB2-CAMPO_2 = C.

Pgina 42 de 194

ABAP Fundamentos y Reporting


No se especifica ninguna condicin join cuando la relacin es genrica.

2.5.6.1 Proyeccin
En algunas ocasiones, algunos campos de las tablas involucradas en una vista no
tienen inters por algn motivo. El conjunto de campo utilizados en la vista pueden
definirse explcitamente (proyeccin).
En nuestro ejemplo, el campo C4 no tiene inters y puede ocultarse.

2.5.6.2 Condiciones de Seleccin


Se pueden definir condiciones de seleccin en una vista que se utilizarn como un
filtro.
En este caso, slo se utilizarn en la vista aquellos registros que satisfagan las
restricciones. En tales condiciones de seleccin, se compara el campo de la vista con
una constante utilizando el operador de comparacin. Se pueden enlazar varias
condiciones de seleccin mediante los operadores lgicos AND y OR.
En nuestro ejemplo, slo se deben mostrar aquellos registros que tengan un valor A en C4. En
este caso la condicin de seleccin ser TABB-C4 = A.
Como puede verse se puede formular una condicin con un campo que no este
contenido en la vista.

Pgina 43 de 194

ABAP Fundamentos y Reporting

2.6 Ayudas para Bsqueda


Una ayuda para bsqueda, tambin denominada "matchcode", es un instrumento para
facilitar la bsqueda de registros almacenados en el sistema que permite filtrar la
informacin existente por determinados criterios.
Por ejemplo si no sabemos el DNI de una persona pero si su nombre, mediante este, podremos
obtener el DNI.
Las ayudas de bsqueda se utilizan para asignar un valor de ayuda (F4) a los campos.

Pgina 44 de 194

ABAP Fundamentos y Reporting


Normalmente el usuario sigue estos pasos cuando llama a la ayuda para introducir una
entrada en un campo:
El usuario lanza la ayuda para ver los valores posibles para un campo.
El sistema ofrece al usuario una serie de plantillas de bsqueda.
El usuario selecciona una de las plantillas. Cada plantilla proporciona unas
restricciones para limitar el nmero de valores posibles de entrada. Estos valores se
ofrecen mediante una ventana de dilogo.
El usuario introduce las restricciones requeridas y el sistema comienza la bsqueda.
El sistema determina los valores que cumplen con las restricciones introducidas y los
muestra en forma de lista.
El usuario selecciona una lnea de la lista.
El valor seleccionado se copia en la pantalla (posiblemente junto con otros valores).
Los pasos 2 y 3 sern omitidos si existe una nica plantilla de bsqueda posible. En
este caso la ventana de dilogo aparecer inmediatamente para la seleccin de
valores.
Este proceso puede definirse completamente creando una ayuda de bsqueda en el
Diccionario de ABAP. Esta ayuda de bsqueda debe ser asignada a los campos de la
pantalla para los cuales se debe ofrecer.
Existen dos tipos de ayudas de bsqueda: elemental y compuesta.

2.6.1 Ayuda para bsqueda elemental:


Se corresponde con una plantilla de bsqueda. Debe definir desde dnde se van a leer
los datos de la lista de aciertos (mtodo de seleccin), cmo se implementa el
intercambio de los valores entre la pantalla y el mtodo de seleccin (parmetros) y
cmo se disea la ayuda on-line.

2.6.1.1 Mtodo de Seleccin (Recoleccin de Datos)


El mtodo de seleccin describe cmo se deben leer los datos para formar la lista de
aciertos. Existen tres formas diferentes de recolectar los datos:
Tabla: Si todos los datos que se necesitan para la lista de aciertos pertenecen a una
nica tabla, slo tendremos que definir esta tabla.
Vista: Si lo datos que se necesitan para la lista de aciertos pertenecen a ms de una
tabla, debemos enlazar dichas tablas en una vista (vista de base de datos o vista de
ayuda). Esta vista debe definirse como mtodo de recoleccin de datos.
Tabla con tabla de texto: Si los datos que se necesitan para la lista de aciertos
pertenecen a una nica tabla con la excepcin del texto explicativo, esta tabla puede
definirse junto con su Tabla de Texto.

2.6.1.2 Parmetros de Ayuda


Si un campo del mtodo de seleccin debe utilizarse para la recoleccin de datos, se
debe incluir el mismo en la ayuda de bsqueda. Esto ser necesario para los campos:
Que se necesitan para restringir la lista de aciertos,
Que deben ser mostrados en la lista de aciertos como una columna,
Cuyos valores deben copiarse en el campo de la pantalla.
Un parmetro puede clasificarse como:

Pgina 45 de 194

ABAP Fundamentos y Reporting


Parmetro IMPORT: Aquel con el que pasaremos los datos introducidos por el usuario
en la plantilla de entrada a la ayuda de bsqueda.
Parmetro EXPORT: Aquel con el que pasaremos los datos desde la ayuda de
bsqueda a la plantilla de entrada de datos.
Una ayuda de bsqueda puede contener parmetros que no sean IMPORT ni
EXPORT. Tales parmetros pueden necesitarse, por ejemplo, para el proceso interno
de la ayuda de bsqueda.

2.6.1.3 Descripcin del Diseo On-line


Podemos definir la ventana de dilogo para restringir los valores de seleccin.
Tambin podemos definir cmo aparecer la lista de aciertos.

2.6.2 Definicin de ayudas de bsqueda


Las ayudas para bsqueda se crear, modifican y visualizan mediante la transaccin
SE11 que ya conocemos.
En la pantalla inicial del diccionario seleccionamos la opcin "Ayudas p.bsqueda",
introducimos el nombre del matchcode a tratar, SCITAIRP, y pulsamos el botn de visualizar:

Descripcin breve: Texto explicativo del matchcode.


En este caso "Buscar aeropuesto va ciudad (pas)".

Pgina 46 de 194

ABAP Fundamentos y Reporting


Mtodo de seleccin: Nombre de tabla o vista del diccionario de datos de donde se
obtendrn los datos a mostrar en la ayuda.
La tabla SCITAIRP contiene la asignacin Ciudad-Aeropuerto.
Tabla de textos: Si la tabla que se usa para la seleccin tiene tabla de textos.

2.6.2.1 Exit Ayuda p.bsq.


Se utiliza si el proceso de entrada estndar F4 definido por la ayuda de bsqueda
tiene que ser cambiado.
Los procesos de entrada F4 estndar estn definidos por medio de ayudas de
bsqueda. Si este proceso estndar no tiene las caractersticas requeridas, podemos
cambiarlo utilizando una exit de ayuda de bsqueda.
Una exit de ayuda de bsqueda es un mdulo de funcin que es llamado por el
procesador de ayuda F4. Podemos almacenar nuestra propia lgica de programa en
este mdulo de funcin. Esta exit de ayuda de bsqueda debe tener la misma interfase
que el mdulo de funcin F4IF_SHLP_EXIT_EXAMPLE (se usa como modelo para
todas las exits de ayuda de bsqueda que creemos). Podemos encontrar ms
informacin en la documentacin para el mdulo de funcin.
La exit de ayuda de bsqueda se llama en los siguientes casos:
Antes de mostrar la ventana de dilogo para seleccionar la ruta de bsqueda requerida.
Slo es llamada para ayudas de bsqueda compuestas. Utilizando la exit de ayuda de
bsqueda, el conjunto ayudas de bsqueda elementales por ejemplo puede
restringirse dependiendo del contexto.
Antes de mostrar la ventana de dilogo para introducir las condiciones de bsqueda.
Podemos influir en el dilogo introduciendo condiciones de bsqueda o saltndonos
todas.
Podemos tambin influir en la forma en que busca la pantalla de seleccin.
Antes de la seleccin de valores.
La seleccin de valores puede copiarse total o parcialmente desde la exit de ayuda de
bsqueda
Antes de mostrar la lista de aciertos.
Podemos controlar la visualizacin de la lista de aciertos en este paso con la exit de
ayuda de bsqueda. Podemos reducir el nmero de valores mostrados, por ejemplo
podemos ensear slo aquellos valores para los cuales la persona que llama a la
ayuda F4 tiene autorizacin. Tambin podemos copiar la lista completa de aciertos
desde la exit de ayuda de bsqueda.
Antes de devolver los valores seleccionados por el usuario a la plantilla de entrada.
Puede tener sentido intervenir en este momento si el control flujo posterior de la
transaccin depende del valor seleccionado. Un ejemplo tpico es actualizar los
parmetros SET/GET.

Pgina 47 de 194

ABAP Fundamentos y Reporting

2.6.2.2 Tipo de dilogo


El tipo de dilogo de una ayuda de bsqueda elemental define la forma en la que se
mostrar la lista de aciertos cuando se llame a la ayuda. Existen los siguientes tipos de
dilogo:
Visualizar valores inmediatamente: La lista de aciertos se mostrar inmediatamente.
Dilogo complejo con restriccin de valores: Se ofrecer inmediatamente la ventana
de dilogo para la seleccin de la ayuda de bsqueda.
Dilogo dependiente del nmero de valores: Si la lista de aciertos contiene menos de
100 entradas, se mostrar inmediatamente. Si la lista contiene ms de 100 entradas,
se mostrar una ventana de dilogo para la seleccin de valores.

2.6.2.3 Tecla sensible


La tecla sensible se utiliza para seleccionar una ayuda de bsqueda elemental de una
ayuda de bsqueda compuesta y para introducir las restricciones directamente en el
campo de entrada de la ventana de dilogo de restriccin de valores. Si el usuario
busca a menudo valores utilizando la misma ayuda de bsqueda, este procedimiento
puede ahorrar tiempo. Si se accede a la ayuda de bsqueda mediante una tecla
sensible, debemos definir un ID de una posicin en este campo. Todas las ayudas de
bsqueda elementales contenidas en una ayuda de bsqueda compuesta deben tener
diferentes teclas sensibles.
Se debe introducir una abreviatura en el campo de entrada de acuerdo con la siguiente
convencin: =<Tecla sensible>.S1.S2.S3... Donde S1, S2, S3, etc. son las
restricciones que queremos introducir en los correspondientes campos de la ventana
de dilogo en el mismo orden.

Pgina 48 de 194

ABAP Fundamentos y Reporting

Si la tecla sensible se define sin restricciones ( =<Tecla sensible>), se llamar a la


ventana de dilogo para restringir los valores. Si se definen restricciones, se saltar la
ventana de dilogo para restringir valores y se mostrar directamente la lista de
aciertos. Si se encuentra nicamente un acierto, no se mostrar la lista de aciertos. En
este ltimo caso, los valores de la lista de aciertos se devolvern inmediatamente a la
pantalla de plantilla de entrada.

2.6.2.4 Parm.Ayuda bsq.


Formado por cada uno de los campos que se utilizarn para la bsqueda.
IMP: Flag de parmetro EXPORT, este campo se utilizar como campo en el que
informar valores de condicin para la bsqueda de registros.
EXP: Flag de parmetro IMPORT, este campo se utilizar como parmetro de salida,
es decir, se volcar el valor del registro seleccionado sobre el campo.
P.I.: Posicin del parmetro lista de aciertos, indica la posicin que ocupar el campo
en la ventana de ayuda donde se mostrarn los registros seleccionados. (Si se indica
0 o Blanco, significar que el campo no se muestra en la lista de aciertos).
PosS: Posicin del parmetro en la ventana de condiciones de la seleccin (restriccin
de valores).
V.s: Si marcamos este flag el parmetro se convertir en un campo de visualizacin
(no modificable) en la ventana de restriccin de datos.
Elemento de datos: el nombre del elemento de datos que describe el contenido del
parmetro de la ayuda de bsqueda
Valor Propuesta: Valor por defecto que se asignar al parmetro si no se hace
explcitamente.
En la Ayuda para bsqueda SCITAIRP los campos que se utilizan para la bsqueda de registros
son SITY, COUNTRY y AIRPORT, y el valor que se volcar sobre la salida ser AIRPORT

Pgina 49 de 194

ABAP Fundamentos y Reporting


2.6.3 Ayuda para bsqueda compuesta
Comprende varias ayudas de bsqueda elementales. Combina todas las plantillas de
bsqueda que tienen sentido para un campo. En una ayuda de bsqueda compuesta,
debe definirse el intercambio de valores entre la pantalla y el mtodo de seleccin
(parmetros) y deben indicarse las ayudas elementales que la forman. El valor de
seleccin y las caractersticas para la ayuda on-line se toman de las ayudas de
bsqueda elementales.

2.6.3.1 Parmetros de la Ayuda de Bsqueda Compuesta


Los parmetros de la ayuda de bsqueda compuesta conforman la interfase entre la
plantilla de entrada de datos y los parmetros de las ayudas de bsqueda elementales
asignadas. Como para las ayudas de bsqueda elementales, los parmetros de una
ayuda de bsqueda compuesta pueden marcarse como parmetros de importacin o
de exportacin.

2.6.3.2 Ayudas de Bsqueda asignadas


Una ayuda de bsqueda compuesta comprende varias ayudas de bsqueda
elementales. Se agrupan en rutas de bsqueda mediante las cuales cobra sentido un
F4 sobre un campo.
Se pueden incluir tanto ayudas de bsqueda elementales como otras ayudas de
bsqueda en una ayuda de bsqueda compuesta. Si una ayuda de bsqueda
compuesta contiene a su vez otra ayuda de bsqueda compuesta, se expanden al
nivel de las ayudas de bsqueda elementales cuando se llama a la ayuda para F4.
Los parmetros de las ayudas de bsqueda incluidas deben asignarse a los
parmetros de la bsqueda de ayuda. No todos los parmetros necesitan ser
asignados, es decir, la asignacin puede abrirse slo para algunos parmetros.

Si se asigna ms de una vez una ayuda de bsqueda elemental de una ayuda de


bsqueda compuesta (por ejemplo, debido a que est contenida en dos ayudas de
bsqueda compuestas), slo se ofrecer sta cuando se seleccione la ruta de ayuda.

2.6.4 Enlace de una Ayuda de Bsqueda con un campo de pantalla


Una ayuda de bsqueda puede ser asignada a un campo de una pantalla como sigue:
Enlazarla a un campo de tabla o estructura.
La ayuda de bsqueda se ofrecer para todos los campos de pantalla donde aparezca
el campo de la tabla. Para este tipo de enlace, debe asignarse cada parmetro de la

Pgina 50 de 194

ABAP Fundamentos y Reporting


ayuda de bsqueda a cada campo de la tabla o estructura. Esta asignacin hace que
se transporte un valor entre cada parmetro de la ayuda de bsqueda y su campo
cuando se llama a la ayuda.
No todos los parmetros de la ayuda de bsqueda tienen que asignarse a un campo
de la tabla. Podemos dejar abierta la asignacin. Tambin puede asignarse una
constante o cualquier otro campo al parmetro de ayuda de bsqueda cuando
llamamos a la ayuda F4.
Enlazarla a una tabla.
La ayuda de bsqueda se ofrecer para todos los campos a chequear contra la tabla.
Tambin podemos definir una asignacin entre los parmetros de ayuda de bsqueda
y los campos.
Enlazarla a un elemento de datos.
La ayuda de bsqueda se ofrecer para todos los campos de una tabla que hagan
referencia al elemento de datos.

2.6.5 Jerarqua de la llamada a la Ayuda de Bsqueda


Se pueden producir conflictos debido a las tres formas diferentes de enlace de las
ayudas de bsqueda. Por ejemplo, la ayuda de bsqueda A puede asignarse aun
campo, la ayuda de bsqueda B a un chequeo de tabla para un campo y la ayuda de
bsqueda C a un elemento de datos.
Tales conflictos se resuelven definiendo una jerarqua para las ayudas de bsqueda
asignadas.
Primero se intenta realizar la llamada de la ayuda de bsqueda del campo de la
pantalla.
Si no existe, se llama a la ayuda de bsqueda del campo de la tabla.
Si tampoco existe, se utilizar la ayuda de bsqueda enlazada a la tabla de
verificacin (si se ha definido una clave externa). En este caso se deben distinguir dos
casos: si la tabla de verificacin tiene una ayuda de bsqueda, se mostrar sta. En
otro caso, slo se mostrarn los valores clave de la tabla de verificacin. Si existe una
tabla de texto para la tabla de verificacin, se incluirn dichos textos en el idioma en el
que se entr al sistema.
Si no existe una tabla de verificacin, se utilizar la ayuda de bsqueda enlazada al
elemento de datos.
El siguiente grfico muestra la jerarqua de llamada a la ayuda de bsqueda. El grfico
debe interpretarse de arriba abajo y de izquierda a derecha. En enlace de ayuda de
bsqueda A tiene prioridad sobre el enlace de ayuda de bsqueda B si A est encima
de B, o si A y B estn al mismo nivel y A est ms a la izquierda que B.
Por lo tanto, los enlaces de ayuda de bsqueda para los campos de pantalla tienen la
prioridad ms alta. En enlace de ayuda de bsqueda con el Diccionario ABAP tiene la
siguiente prioridad.

Pgina 51 de 194

ABAP Fundamentos y Reporting

2.7 Modificacin de objetos


El sistema R/3 trabaja interpretativamente, permitiendo que el Diccionario ABAP est
integrado activamente en el entorno de desarrollo. En lugar de ver los objetos
originales, los intrpretes slo ven la representacin interna de esos objetos.
Estas representaciones internas se ajustan automticamente cuando el sistema
encuentra que se han realizado modificaciones en el Diccionario ABAP. Esto asegura
que la pantalla y los intrpretes ABAP, las ayudas de entrada, la interfase con la base
de datos, y las herramientas de desarrollo siempre acceden a los datos actualizados.

Pgina 52 de 194

ABAP Fundamentos y Reporting


El siguiente programa ABAP lista las compaas areas y los IDs de compaas areas que estn
contenidos en la tabla SCARR.
DATA: SCARR_TAB TYPE SCARR.
SELECT * INTO SCARR_TAB FROM SCARR.
WRITE: / SCARR_TAB-CARRID, SCARR_TAB-CARRNAME.
ENDSELECT.
En el programa slo se declara la estructura SCARR_TAB. Toda la informacin acerca de esta
estructura, como por ejemplo los nombres de los campos, los tipos de datos y la longitud de los
campos, se copian de la tabla SCARR, que est definida en el Diccionario ABAP. Esta
informacin acerca de la tabla SCARR se obtiene del Diccionario de ABAP cuando se genera el
programa.
Esto significa que el texto fuente del programa no necesitar ser actualizado cuando se realicen
cambios en la tabla SCARR, por ejemplo si se vara la longitud de un campo de la tabla. La
siguiente vez que se llame al programa, el sistema determinar automticamente que ha
cambiado la estructura de la tabla SCARR. Simplemente, se regenerar el programa, y de este
modo se recuperar la informacin actualizada acerca de la tabla SCARR desde el Diccionario de
Datos.
Cuando trabajamos con proyectos de desarrollo, se pueden modificar los objetos del
Diccionario de ABAP cualquier nmero de veces antes de activarlos y hacer con ello
que estn disponibles y operativos para el resto de los componentes del sistema. Los
objetos pueden tener una versin activa e inactiva al mismo tiempo.
Los objetos inactivos del Diccionario ABAP es como si no existieran en el sistema en
tiempo de ejecucin (procesador ABAP, interfase con la base de datos). Esto permite
que realicemos modificaciones sobre los objetos sin que perjudiquemos al sistema.
Versin Activa: Es con la que trabajamos actualmente. Es la versin que ven los
dems objetos.
Versin Realizada: Es una version con alguna modificacin pero sin estar activa.
Hasta que no se activa no se trabaja con los cambios.
Runtime Object: Tiene (Elementos de datos, dominios y definicin de tabla), esta
informacin es almacenada en una tabla de forma que el programa de aplicacin
pueda acceder a esta informacin rpidamente. Se genera durante la activacin de la
tabla.
Al cambiar por ejemplo un dominio se actualizan los elementos de datos y los campos
de las tablas implicadas. Esto asegura la consistencia.
Tipos de Activacin
Activa: La activacin se realiza desde el mantenimiento.
Masiva: La activacin se realiza desde el programa RDDMASG0. Esto es tpico en
una importacin. Se puede ejecutar en Background. Se recomienda especialmente
para importaciones muy largas.

2.8 Tratamiento de los datos


2.8.1 Data browser
Tambien es posible crear registros dentro de la tabla desde la definicin de esta
(Utilidades Crear entradas). (Sistema Servicios Actualizar tablas ??).

Pgina 53 de 194

ABAP Fundamentos y Reporting


2.8.2 Actualizacin de tablas
Dentro del diccionario nos es posible crear interfases para la entrada de datos en una
determinada tabla (Utilidades Generador actualiz.tab). Se pueden crear con uno
o dos niveles (resumen y detalle). Se debe asignar un grupo de funciones en el que se
crearn las pantallas y el cdigo necesario para la interfase de actualizacin.
Para llamar a esta interfase deberemos introducir el nombre de la tabla en las
transacciones SM30 o SM31. Podremos visualizar el contenido de la tabla y
actualizarlo si se ha creado con permiso de actualizacin.
Para poder realizar esta operatoria directamente desde una transaccin tendremos
que crearla mediante la transaccin SE93 como transaccin de parametros.

2.8.3 Transacciones: SM30, SM31.


Estas transacciones nos permiten visualizar o actualizar el contenido de aquellas
tablas que se crearon con permiso de actualizacin y para las que se gener la
correspondiente superficie de actualizacin.
Una vez dentro de la transaccin, podemos modificar o crear nuevas lneas para la
tabla seleccionada.
Existen una serie de utilidades que es conveniente conocer:
Seleccin -> por contenidos. Nos permite seleccionar unas lneas determinadas de la
tabla por medio de su contenido.
Tratar -> Copiar como. Nos permite copiar la lnea o lneas seleccionadas.
Botn icono Imprimir. Imprime el contenido de la tabla con todos sus campos.
Botn Lista variable. Nos permite seleccionar los campos a imprimir as como editar su
formato de salida (clasificacin, posicin, saltos de lnea, longitud de ttulos).

Pgina 54 de 194

ABAP Fundamentos y Reporting

3 Creacin de programas
3.1 Editor y Object Navigator
Para poder desarrollar los programas tenemos un editor de lenguaje ABAP/4. Este
editor nos permitir escribir, verificar y generar los programas. Hay varias maneras de
llegar al editor, pero el camino ms habitual para crear un nuevo programa del tipo
REPORT es (desde el men principal de SAP) Herramientas Workbench
ABAPDesarrollo Editor ABAP (SE38).
La pantalla principal del Editor tiene el siguiente aspecto:

Desde esta pantalla podremos crear, visualizar, modificar, copiar, renombrar, borrar,
verificar, activar y ejecutar (tambin en debugging) los programas.
Los programas se identifican con un nombre que debe cumplir las siguientes reglas:
Debe tener entre uno y cuarenta caracteres.
Si es programa de creacin propia debe comenzar por la letra Y o Z.
No se pueden usar los siguientes caracteres: punto, coma, espacio, parntesis, comilla
sencilla, comilla doble, signo igual, asterisco, tanto por ciento.
Para crear un programa, escribiremos el nombre del programa, seleccionaremos la
opcin Texto fuente y seleccionaremos la opcin de crear

Deberemos introducir diversos datos administrativos. En primer lugar se deben


determinar algunos atributos del programa:
Ttulo: Descripcin de la funcin realizada por el programa, un texto breve apropiado.
Aparecer al lado del nombre tcnico del programa en todas las bsquedas.
Tipo: Determina cmo se ejecuta el programa en el entorno cliente/servidor. El
programa puede ser:
1 (on-line): ejecutable directamente

Pgina 55 de 194

ABAP Fundamentos y Reporting


I (include): una pieza de cdigo reutilizable
M (module pool): un conjunto de mdulos que controlarn pantallas de dilogo. Se
deben definir las pantallas a utilizar y se debe enlazar un cdigo de transaccin a la
primera de ellas.
F (grupo de funciones): contiene funciones, no se pueden ejecutar directamente sino
que tienen que ser llamadas por otros programas.
S (pool de subrutinas): contiene cdigo compuesto por procedimientos no ejecutable,
pero que puede ser llamado desde otros programas.
Status: Informacin sobre el estado de desarrollo.
Aplicacin:

Mdulo o rea de aplicacin al que pertenece el programa.

Todos estos atributos pueden ser utilizados para buscar un programa particular en el
Repository Information System.
Una vez completado estos campos obligatorios pulsaremos el botn de grabar
(F11).
Ahora tendremos que asignar el programa a un paquete, que clasifica el programa de
manera lgica. Esta asignacin slo se realiza una vez, cuando el objeto es creado
inicialmente.
Podemos escoger grabaremos como objeto local (botn
para conseguir
que no se transporte a otros sistemas. Si no es as, debemos asignar el objeto a un
proyecto (change request). Esta es una clasificacin cronolgica, cuando el proyecto
se acabe, podremos asignar el programa a otra change request.

3.2 Elementos de un programa


De las opciones anteriores, crear y ejecutar se refieren al programa en general,
mientras que podemos elegir qu parte del programa queremos modificar o visualizar.
Cuando hablamos de parte del programa nos referimos a:
- Cdigo fuente: Se refiere al cdigo del programa.
- Variantes: Para un programa con pantalla de seleccin podemos crear variantes que
consiste en poner unos valores fijos en los campos de la pantalla de seleccin y
guardarlos con un nombre -variante- de manera que cuando queramos ejecutar el
programa para esos valores, slo tendremos que llamar a la variante por su nombre Ejecutar con variante-. Podemos obtener una lista de las variantes existentes para el
programa actual pulsando F4.
- Atributos: Los atributos comprenden el ttulo del programa, la base de datos lgica
que trata, la aplicacin, etc,... El paso previo a trabajar con programas es mantener los
atributos de un programa.
- Documentacin: Apartado reservado para documentar funcional y tcnicamente el
programa con el fin de facilitar el trabajo a quien vaya a modificar o a quien quiera
conocer el programa.
- Elementos de texto: Comprenden: el ttulo y cabeceras que aparecern
automticamente al inicio de cada pgina generada por el programa, los textos de
seleccin que aparecen en la pantalla de seleccin y textos libres identificados por tres
caracteres (XXX) que se pueden utilizar como constantes en el cdigo del programa
mediante TEXT-XXX, en lugar de tener que codificar el texto entero. Todos esteos
textos se pueden introducir en distintos idiomas, con lo que la ejecucin del programa

Pgina 56 de 194

ABAP Fundamentos y Reporting


escribir el texto en el idioma actual del sistema, sin tener que gestionar la traduccin
en el cdigo.

3.3 Escribir cdigo (texto fuente)


3.3.1 Elementos sintcticos bsicos
El cdigo fuente de un programa ABAP est formado por sentencias y comentarios.

3.3.1.1 Sentencias
Un programa de ABAP/4 consiste en una serie de sentencias. Cada sentencia
comienza con una palabra clave y termina con un punto. Las palabras dentro de una
sentencia deben estar siempre separadas al menos por un espacio. No hay
restricciones de formato: una sentencia se puede indentar y puede ocupar varias
lneas, y podemos escribir varias sentencias en una misma lnea. Debemos
aprovechar esta libertad de formateo para hacer ms legibles nuestros programas.
DATA contador TYPE i.
DATA name(20).
MOVE 1
TO counter.
MOVE abc TO name.
WRITE counter. WRITE name

Se pueden concatenar sentencias consecutivas si tienen una primera parte idntica


(que se puede extender ms all de la palabra clave). Para conseguirlo escribimos la
primera parte comn de las sentencias una nica vez, seguida de dos puntos. A
continuacin escribimos los restos de las sentencias individuales, separndolos por
comas. Se debe poden un punto al final para marcar el final de la cadena. Se pueden
insertar espacios en blanco antes y despus de cualquiera de los signos de
puntuacin. El sistema sigue considerando que cada una de las partes de una
sentencia concatenada es una sentencia independiente de las otras.
WRITE counter.

WRITE: counter, name.

WRITE name.
ADD 1 TO counter1.

ADD 1 TO: counter1,

ADD 1 TO counter2.

counter2,

ADD 1 RO counter3.

counter3.

La palabra clave de una sentencia determina su categora, que puede ser una de las
siguientes:
Sentencias declarativas:
TYPES, DATA, TABLES
Sentencias de modularizacin:
START-OF-SELECTION
FORM ENDFORM.

Definen tipos de datos o declaran objetos de datos


que son usados por otras sentencias en el
programa.
Definen bloques de proceso en el programa: pueden
ser bloques de evento (no hay sentencia para
concluirlos) o procedimientos (que se concluyen co
la sentencia ENDxxxx.

FUNCTION ... ENDFUNCTION.


Sentencias de llamada:
PERFORM, CALL, SUBMIT

Llaman a los bloques de proceso ya definidos desde


el mismo programa o desde otros.

Pgina 57 de 194

ABAP Fundamentos y Reporting


Sentencias operacionales:

Procesan los
declarativas.

WRITE, MOVE, ADD


Sentencias de control:

datos

definidos

con

sentencias

Controlan el flujo de la ejecucin dentro de un


bloque de proceso de acuerdo a ciertas condiciones.

IF, WHILE, CASE


Sentencias de base de datos:
SELECT, INSERT, DELETE

Utilizan la interfase de base de datos para acceder a


las tablas. Pueden pertenecer a Open SQL o a SQL
nativo

3.3.1.2 Comentarios
Los comentarios son textos que podemos escribir dentro del cdigo de un programa
para explicar el propsito de las sentencias que utilizamos. Son muy tiles para
nuestra propia compresin del programa y para la de otros usuarios.
Existen dos formas de incluir comentarios en nuestro programa:
Precedindolos con el carcter asterisco (*) como primer carcter de una lnea (en la
columna 1): toda ella se considerar como comentario, el sistema la ignora.
Precedindolos con una comilla doble () en una lnea: todo lo que vaya a continuacin,
hasta el final de la lnea, se considerar comentario, el sistema lo interpreta como
espacios en blanco.
DATA: suma TYPE p,

Campo de suma

contador TYPE i.
*Inicializar el campo suma
CLEAR suma.

3.3.2 Funciones de edicin


Se puede acceder a funciones de edicin importantes usando los botones de la barra
de herramientas. stos incluyen:
Visualizar
Modificar

<-> Permite conmutar entre los modos de Visualizacin y


Modificacin

ENTER

Divide la lnea en la posicin actual del cursor

Cortar

Corta una lnea o un bloque seleccionado de texto

Copiar

Copia un bloque de texto seleccionado al buffer

Pegar

Inserta el contenido del buffer en la posicin actual del


programa

Anular/Rehacer

Deshace la ltima operacin / Rehace la operacin


deshecha

Buscar/Continuar Busca o reemplaza un texto dentro del cdigo /


Contina la bsqueda
Help

Llama a la ayuda online

Carga/Graba

Carga el cdigo fuente desde un fichero local / Graba el


cdigo fuente en un fichero local

Se puede acceder a todas las funciones del Editor usando la barra de men.

Pgina 58 de 194

ABAP Fundamentos y Reporting


El Editor ABAP se puede ejecutar en modos de funcionamiento diferentes. Para
obtener ayuda sobre el editor podemos navegar a: Utilidades -> Ayuda para -> Ayuda
Editor.

3.3.3 Patrones de instrucciones


Tenemos la posibilidad de insertar cdigo con un patrn predefinido, para ciertos
elementos del lenguaje (ciertas sentencias, llamadas a procedimientos, llamadas a
despus de situarnos sobre la
funciones, etc.). Slo hay que pulsar el botn
lnea de cdigo donde deseamos incluir la instruccin. Aparecer la siguiente ventana
en la que indicararemos el nombre del objeto a insertar:

3.3.3.1 Navegar a objeto


Esta funcin, permite navegar hasta el objeto seleccionado. Estos objetos pueden ser
variables, procedimientos, smbolos de texto, etc. definidos dentro del propio programa;
pero tambin pueden ser objetos definidos fuera del programa como transacciones,
funciones o includes.
Generalmente si el objeto al que pretendemos navegar no existe, nos dar la
posibilidad de crearlo en ese momento.

3.3.3.2 Diseo del programa


Para escribir programas de calidad no slo debemos seguir las convenciones de
nomenclatura apropiadas, sino que tambin debemos guardar ciertas reglas estndar
para el diseo de programas ABAP.
Las tcnicas que se proponen para mejorar la calidad de los programas incluyen la
insercin correcta de comentarios (mejor en lneas separadas para mejorar la
legibilidad), el uso de las herramientas de modularizacin (subrutinas), y la
identificacin de los bloques de sentencias. Teniendo en cuenta estas
recomendaciones se consiguen programas ms legibles, ms seguros y ms fciles
de probar y cambiar.
El editor de ABAP incluye una herramienta, el Pretty Printer, que nos ayudar a
mejorar la apariencia de nuestros programas fcilmente. Para ejecutar esta utilidad
basta pulsar el botn
. Se puede configurar su manera de actuar mediante
la opcin de men Utilidades->Opciones en la pestaa Editor / Pretty Printer.

Pgina 59 de 194

ABAP Fundamentos y Reporting


3.4 Interaccin con el usuario
3.4.1 Pantalla de seleccin
Con la palabra clave PARAMETERS <name> definimos un dilogo de usuario que se
llama pantalla de seleccin.
Las pantallas de seleccin sirven para solicitar del usuario criterios de seleccin que
se utilizarn para filtrar informacin en el programa.
Cuando un usuario introduce un valor y ejecuta el programa, el valor se pasa
automticamente a un objeto de datos interno del programa que tambin tiene por
nombre <name>. Slo se permiten entradas que tengan un formato compatible con el
definido en la instruccin PARAMETERS. Se puede definir con referencia a un objeto
del Diccionario.
REPORT z_parametro.
PARAMETERS pa_carr LIKE spfli-carrid.

Si se ha definido una ayuda de bsqueda en el Diccionario para el campo, el usuario


dispondr del botn F4 para conocer las entradas posibles.

3.4.2 Lista
La manera ms sencilla de presentar los resultados al usuario es utilizar la sentencia
WRITE. Esta instruccin escribe el contenido de un objeto de datos de acuerdo a su
tipo en forma de una lista.
Sentencias WRITE consecutivas escriben en la misma lnea de salida hasta que est
llena; entonces se continua en la siguiente. Se puede utilizar un dato de posicin que
determine la creacin de una nueva lnea (/), la longitud de salida del campo o la
posicin en la que se empieza a escribir dentro de la lnea. Se puede escribir en
diversos colores.
La lista completa aparece de manera automtica cuando el programa finaliza su
ejecucin.

3.4.3 Mensajes
Se utiliza la sentencia MESSAGE para enviar mensajes al usuario.
El comportamiento del sistema despus de la aparicin del mensaje viene
determinado por el tipo de mensaje: de error (E), de informacin (I) o de aviso (W). El
comportamiento depende de la pantalla donde aparece el mensaje.
Cada sentencia ABAP llena el valor de la tabla de sistema SY-SUBRC con un cdigo
de retorno que indica el xito o fracaso de la instruccin. En general SY-SUBRC=0
indica que ha funcionado correctamente. Podemos hacer aparecer un mensaje en
funcin de estos cdigos de retorno

3.5 Interaccin con la base de datos


El lenguaje ABAP contiene un conjunto de sentencias llamado Open SQL. Las
sentencias de Open SQL son un subconjunto de las sentencias SQL estndar que han
sido modificadas especialmente para SAP. Se utilizan para acceder a la base de datos
independientemente de cual sea el sistema gestor (RDBMS).
La sentencia ms importante es SELECT. Lee ciertas columnas de ciertos registros de
una tabla de la base de datos. Las tablas a las que queremos acceder en un programa
deben pertenecer al Diccionario.

Pgina 60 de 194

ABAP Fundamentos y Reporting


DATA wa_spfli LIKE spfli.
...
SELECT SINGLE carrid connid cityfrom cityto
FROM spfli
INTO CORRESPONDING FIELDS OF wa_spfli
WHERE carrid = sdyn_conn-carrid
AND connid = sdyn_conn-connid.

Aqu se leen ciertas columnas de un registro concreto de la tabla spfli y se insertan en los
campos del mismo nombre de la estructura wa_spfli.

3.6 Operaciones con programas


Hay varias operaciones en el Navegador del Repositorio que se utilizan para editar
cualquier objeto. Las ms comunes usadas con programas son las siguientes:
Cambiar

Edita un programa

Verificar

Comprueba la sintaxis de un programa

Test

Lanza y prueba un programa

Borrar

Borra un programa

Copiar

Copia un programa

Renombrar

Renombra un programa

3.6.1 Verificacin de sintaxis


Para comprobar que el programa no tiene errores de sintaxis utilizaremos el botn de
verificar

(Ctrl. + F2).

Para verificar que no contiene errores de manera ampliada utilizaremos la opcin de


men Programa -> Verificar -> Verif. programa ampliada. Nos llevar a la siguiente
pantalla, pulsaremos el botn

para continuar con la verificacin.

Pgina 61 de 194

ABAP Fundamentos y Reporting

3.6.2 Activacin
Para activar un programa y as hacerlo visible para el resto de componentes del
sistema utilizaremos la opcin Programa -> Activar o

(Ctrl. + F3).

3.6.3 Ejecucin
Desde el editor, podemos ejecutar un programa. Para ello seleccionamos la opcin del
men Programa -> Verificar o pulsamos

(F8).

3.7 Debugging
La herramienta de debugging est pensada para encontrar errores semnticos en los
programas. Para poder depurarlos, los ejecutamos pasando por las lneas del cdigo
escrito y viendo el resultado de cada una de ellas de forma individual, de esta forma
podemos comprobar el efecto de cada una de las instrucciones escritas.
Hay diversas maneras de arrancar el ABAP Debugger.

Desde el Object Browser, pulsando Test/Execute

Desde el Editor ABAP, pulsando Debugging

Desde la transaccin que deseemos analizar, introduciendo /h en el campo de


comandos donde introducimos las transacciones.

Desde cualquier pantalla escogiendo en el men Sistema->Utilidades->Debugging.

Insertando breakpoints en el cdigo y ejecutando despus el programa.

Pgina 62 de 194

ABAP Fundamentos y Reporting


3.7.1 Pantalla
La pantalla de Debugger tiene dos partes. En la superior se muestra el cdigo del
programa. En la inferior se muestra informacin adicional que depende de la vista que
escojamos. Se pueden usar los botones de la parte superior (Campos, Tabla,
Breakpoints, Watchpoints, Llamadas, Resumen, Opciones) para alternar entre las
diferentes vistas.

Se puede expandir el rea de cdigo fuente escogiendo la funcin Expandir cdigo


fuente. Si se hace doble-click en una lnea se visualiza sta como primera de la
pantalla.
En la vista de Campos hay una lista de hasta 8 campos, 4 de los cuales son visibles
en todo momento. Nos podemos mover para visualizar el resto. Para que un campo
aparezca en esta lista basta con hacer doble-click sobre su nombre en el cdigo.
El icono

indica la lnea actual de programa (prxima instruccin a ejecutarse).

El icono
indica que en esa lnea de cdigo hay un breakpoint. Para fijar un punto de
ruptura en una lnea basta con hacer doble clic sobre ella.

3.7.2 Funciones importantes


F5

Paso a paso

Procesar la lnea actual del programa.


Si es un procedimiento pasa a la
primera lnea de ste.

F6

Ejecutar

Procesar la lnea actual, todos los


pasos correspondientes. Si es un
procedimiento lo trata como una nica
sentencia.

F7

Retornar

Vuelve al nivel superior de la jerarqua

Pgina 63 de 194

ABAP Fundamentos y Reporting


de llamadas para seguir procesando. Si
no hay breakpoints, finalizamos la
ejecucin del procedimiento donde
estamos.
F8

Continuar

Continuar
procesando
hasta
el
siguiente breakpoint o hasta el fin del
programa,
Permite interrumpir el proceso en
funcin del valor de ciertas variables.

Debugging -> Reanudar

Salir del debugger sin ejecutar el


cdigo.

3.7.3 Breakpoints
Hemos visto que para fijar un breakpoint en una lnea basta con hacer doble-click
sobre ella. Aparece un smbolo de STOP delante de ella. Podemos ver la lista de todos
los breakpoints del programa que estamos depurando con el botn Breakpoints.
Para borrar un breakpoint se puede volver a hacer doble-click sobre la lnea o bien
utilizar la opcin de men Breakpoint-> Crear/Borrar.
Otra manera de fijar breakpoints en una lnea es utilizar la sentencia BREAK-POINT
dentro del cdigo del programa.
A parte de los breakpoints en lneas, podemos fijar puntos de ruptura en todas las
lneas que contengan una cierta sentencia, o en ciertos eventos o en subrutinas. Para
ello utilizamos la opcin de men Breakpoint -> Breakpoint en.
Los Watchpoints son breakpoints basados en que haya cambios en el contenido de un
campo o en que el campo tome cierto valor igual a otro campo o a una constante.

3.8

Otras herramientas de test

Mediante el Runtime Anlisis podemos evaluar el rendimiento de ciertas unidades


modulares de los programas.
Con el SQL Trace podemos ver como se traducen las sentencias Open SQL al
lenguaje propio del sistema de bases de datos y analizarlas.
La herramienta CATT (Computer Arded Test Tool) permite automatizar las pruebas de
programas individuales o de procedimientos de negocio ms complejos.

Pgina 64 de 194

ABAP Fundamentos y Reporting

4 Tipos de Datos y Objetos de Datos


Los objetos de datos son las unidades fsicas que un programa utilizar en tiempo de
ejecucin y, son tiras de bytes en el rea de memoria del programa. Las sentencias
ABAP acceden a su contenido utilizando su nombre. Las sentencias pueden, por
ejemplo, escribir el contenido de un objeto de datos en una lista o en la base de datos,
pueden pasarlo a una subrutina, pueden cambiarlo asignndole un nuevo valor o
pueden compararlo en una expresin lgica.
Cada objeto de datos tiene un conjunto de atributos tcnicos que son: el tipo de datos,
la longitud y el nmero de posiciones decimales. El tipo de datos determina como
sern interpretados los contenidos de un objeto por las sentencias ABAP.
Los tipos de datos existen como descriptores de las propiedades tcnicas de los
objetos de datos. Pero se pueden definir tambin de manera independiente y despus
se pueden utilizar enlazndolos a un objeto de datos. No se reserva espacio en
memoria para ellos, son slo descripciones. Pueden ser predefinidos o definidos por el
usuario.
Los tipos de datos y los objetos de datos ocupan dos rangos de nombres diferentes,
es decir, podemos utilizar un mismo nombre para un tipo de datos y para un objeto de
datos.

4.1 Tipos de datos


4.1.1 Predefinidos
En ABAP hay ocho tipos de datos predefinidos, tres de ellos (P,I,F) numricos y cinco
alfanumricos (N,C,D,T,X):

Tipo Descripcin

V. Inicial

Longitud Rango valores/


defecto
Longitud permitida

Utilidad

Empaquetado 0

Mximo 16 bytes, 2 Importes,


dgitos por byte, el ltimo longitudes,
medio byte para el signo. pesos

Entero
(Integer)

-2^31 a +2^31-1

Contadores,
cantidades,
ndices,
periodos
de
tiempo

Coma flotante 0
(Floating
point)

-2,2E-308 a +1,8E308

Clculos
matemticos,
en rangos muy
amplios

Numeric Text

0...0

1 a 65535

Nmeros
en
forma de texto

Texto (Char)

Blancos

1 a 65535

Cadena
caracteres

Fecha (Date)

00000000 8

de

8 (AAAMMDD). Pasando Sumar


das,
a P es el nmero de das calcular
desde 01/01/1990.
perodos.

Pgina 65 de 194

ABAP Fundamentos y Reporting


T

Hora (Time)

000000

6 (hhmmss)

Hora:
se
pueden
sumar/restar

Hexadecimal

x'00'

1 a 65535

Valor Hexa.

Observaciones:
Los clculos con el tipo numrico I son los ms econmicos, seguidos de los tipos F y
P. Con nmeros de tipo F se pueden dar errores de aproximacin, por ello no se
deben comparar nunca dos campos de tipo F para ver si son iguales, sino que se
aconseja comprobar que su diferencia no supera una cierta tolerancia. Slo se deben
usar estos nmeros para clculos matemticos que admitan errores de aproximacin;
para clculos de negocio, utilizar siempre el tipo P.

4.1.2 Definidos por el usuario


Para definir tipos de datos en un programa se utiliza la palabra clave TYPES.
Se puede hacer referencia:

a un tipo predefinido o a otro tipo definido por el usuario con la palabra TYPE.

a el tipo de un objeto de datos del programa o de un objeto del Diccionario usando


la palabra LIKE.

TYPES <tipo>[(<longitud>)] TYPE <tipo_ant>.


TYPES <tipo> LIKE <objeto>.

Los nombres asignados a los tipos creados por el usuario pueden tener, como mximo,
30 caracteres (letras, nmeros y _) que no pueden ser todos numricos. Se
recomienda empezar siempre por una letra y utilizar el _ como separador si
combinamos palabras en el nombre.
TYPES: tipo_entero TYPE i,
fecha LIKE sflight-date,
nombre1(25),
tipo_empaquetado_2_dec Type P Decimals 2.

Si no se especifica tipo, se utiliza el tipo C. Si no se especifica longitud, se utiliza la


estndar para el tipo de datos referenciado. Se puede especificar el nmero de
posiciones decimales para el tipo P (hasta 14).
Los tipos definidos por el usuario pueden ser elementales o estructurados.
Los tipos elementales se basan en los tipos predefinidos o en otros tipos elementales.
Permiten definir objetos de datos elementales que se pueden utilizar para transferir
valores de entrada y de salida, como campos auxiliares en clculos o para almacenar
resultados intermedios.
Los tipos estructurados estn compuestos por una secuencia de tipos elementales o
de otros tipos estructurados. Se pueden anidar. Sirven para gestionar y procesar datos
relacionados semnticamente bajo un nico nombre. Permiten definir objetos de datos
a los que se puede acceder como un todo o por sus componentes individuales. No
existen tipos estructurados predefinidos, se deben definir en el programa o en el
Diccionario.
Dentro de los tipos estructurados debemos diferenciar los tipos de estructura y los
tipos de tabla. Los primeros estn formados por componentes de cualquier tipo,
mientras que los segundos estn formados por lneas del mismo tipo (cualquiera que
sea).

Pgina 66 de 194

ABAP Fundamentos y Reporting


TYPES: BEGIN OF <tipo>,
...
END OF <tipo>.
TYPES: <tipo> TYPE <tipo_estructurado>.

Los componentes de la estructura se definen dando el tipo y longitud deseados.


El estudio de los tipos de tabla interna lo aplazamos a un tema posterior.
Ver programa de ejemplo DEMO_TYPES_STATEMENT

4.1.3 Grupos de tipos


En vez de definir tipos en un programa, se pueden definir en el Diccionario mediante
los grupos de tipos. A estos objetos se les asigna un nombre de hasta 5 caracteres y a
los tipos que contienen se les deben poner nombres que comiencen con estos mismos
caracteres y un _.
TYPE-POOL zmit.
TYPES: zmit_nombre(25),
Zmit_numero TYPE i.

Para usar las definiciones de tipos contenidas en el grupo en un programa ABAP se


debe utilizar la sentencia TYPE-POOLS.
REPORT zmireport.
TYPE-POOLS zmit.
DATA: nombre TYPE zmit_nombre.
...

4.1.4 Visibilidad
Cuando hacemos referencia a los tipos de datos con la opcin TYPE, debemos tener
en cuenta su visibilidad:
Los tipos de datos predefinidos de ABAP C, D, F, I, N, P T, y X son siempre visibles.
No podemos definir tipos de datos locales que se llamen igual en nuestros programas.
Los tipos de datos definidos en los procedimientos ocultan los tipos de datos que se
llamen exactamente igual que hayan sido declarados en la parte global del programa.
Los tipos de datos locales ocultan a los tipos de datos que se llamen exactamente
igual del Diccionario de datos.
El siguiente grfico muestra la visibilidad de los tipos de datos que son locales en un
programa determinado y los tipos de datos del Diccionario de ABAP:

Pgina 67 de 194

ABAP Fundamentos y Reporting

El sistema busca de dentro hacia fuera. Si el TIPO1 est especificado mediante la


opcin TYPE en un programa, se utilizar el tipo del Diccionario tanto en sus
procedimientos como en el programa principal. Si se especifica TIPO2 en un
procedimiento, se utilizar el tipo local definido en el procedimiento. Si TIPO2 se
especifica en el programa principal, se utilizar el tipo del programa principal, ya que el
TIPO2 del Diccionario es invisible. Si se especifica TIPO3 en el programa principal, se
utilizar el tipo del programa principal tanto en los procedimientos como en el
programa principal, ya que el TIPO3 del Diccionario es invisible.

4.2 Objetos de datos


Los objetos de datos pueden ser constantes o variables: el valor de los primeros no
puede ser modificado durante la ejecucin del programa, el de los segundos s.

4.2.1 Variables
Para declarar los objetos de datos variables se utiliza la palabra clave DATA.
Para definir el tipo del objeto tenemos las mismas opciones que cuando definimos los
tipos de datos:
Si lo declaramos de algn tipo predefinido por el sistema o definido por nosotros
mismos utilizaremos la palabra TYPE.
Si lo queremos declarar en referencia a otro campo, ya sea del Diccionario de datos o
uno propio definido con anterioridad en el programa, utilizaremos la palabra LIKE.
Si no se especifica el tipo, se usa el tipo predefinido C. Si no se especifica longitud se
utiliza la que corresponde al tipo por defecto. Se puede indicar el nmero de
posiciones decimales con DECIMALS para objetos del tipo P.
La novedad es que podemos indicar un valor inicial para los objetos de datos variables
usando la palabra VALUE y a continuacin un valor fijo. Si no se utiliza esta opcin el
objeto tendr el valor inicial correspondiente a su tipo de datos.
DATA <nombrevar> TYPE <tipo_ABAP> [VALUE <literal>].

Pgina 68 de 194

ABAP Fundamentos y Reporting


DATA <nombrevar> TYPE <tipousuario> [VALUE <literal>].
DATA <nombrevar> TYPE <obj_dict> [VALUE <literal>].
DATA <nombrevar2> LIKE <nombrevar> [VALUE <literal>].

Los nombres de los objetos de datos pueden ser de hasta 30 caracteres (letras, dgitos
y caracteres especiales). Los nicos caracteres que no se permiten son () + . , y :.
SPACE es un objeto de datos predefinido.
TYPES TC3(3) TYPE C.
DATA D1(3) TYPE C.

Predefinido

DATA D2(3) TYPE C VALUE ABC.

Predefinido

DATA D3 TYPE TC3.

Definido por el usuario

DATA D4 TYPE TC3 VALUE DEF.

Definido por el usuario

DATA D5 LIKE D4.


DATA D6 LIKE SY-DATUM.

Existen una serie de objetos de datos que estn disponibles de forma automtica y
que no necesitan ser declarados: son los campos del sistema, de la tabla SYST.
Podemos utilizarlos en cualquier parte de cualquier programa.
SY-SUBRC, SY-DBCNT, SY-REPID, SY-DATUM, SY-UZEIT,

De manera anloga a los tipos de datos, los objetos de datos tambin pueden ser
elementales o estructurados, y los estructurados pueden ser estructuras (varios
objetos componentes o campos) o bien tablas internas (varias lneas con idntica
estructura).
DATA: BEGIN OF <estructura>,
,
END OF <estructura>.
DATA: TABLES <estructura del Diccionario ABAP>

Para acceder a los campos individuales de una estructura en el programa se utiliza el


nombre de la estructura seguido de un guin y el nombre del campo.
Ver programa de ejemplo DEMO_STRUCTURE
Las tablas internas las estudiaremos en un tema aparte.
Ejemplos:
* Esto es una variable:
DATA

CONTADOR TYPE NUMERO.

* Esto es un vector:
DATA:BEGIN OF REUNION,
HORA_INICIO TYPE T,
HORA_FIN

TYPE T,

END OF REUNION.
*Defino con referencia a un campo de sistema
DATA HORA_ACTUAL LIKE SY-UZEIT.

4.2.2 Constantes y literales


El contenido de un objeto de datos constante no variar durante toda la ejecucin del
programa. Se definen utilizando la sentencia CONSTANTS y la palabra VALUE es

Pgina 69 de 194

ABAP Fundamentos y Reporting


obligatoria para especificar el valor que tiene la constante. Solamente se pueden
definir constantes para los tipos de datos, P, I, N, C.
CONSTANTS <constante> LIKE/TYPE <tipo_o_campo> VALUE <valor>.

Ejemplo:
CONSTANTS C_PI TYPE P DECIMALS 5 VALUE 3.14159.

Los literales en ABAP pueden ser de dos tipos: numricos o de texto.


Los literales que son nmeros enteros se guardan con tipo I (hasta 9 dgitos) o con
tipo P (a partir de 10 dgitos). Los nmeros con decimales o de punto flotante se
guardan como texto y despus el procesador ABAP los convierte si es necesario.
Los literales de texto se deben escribir entre comillas (texto) y pueden tener hasta
255 caracteres. Para escribir una comilla, hay que ponerla dos veces.
Los smbolos de texto que vimos con anterioridad como elementos de un programa
ABAP, son tambin literales de texto. Tienen la ventaja de que pueden incluir las
traducciones a cualquier idioma, y de que se almacenan separadamente del cdigo
para facilitar el mantenimiento. Se accede a ellos poniendo TEXT-<xxx>.

4.2.3 Parmetros y selecciones


Tambin son objetos de datos dentro del programa. Se asemejan en el hecho de que
utilizan las palabras TYPE y LIKE para definir el tipo. La diferencia entre las sentencias
PARAMETERS y DATA es que los campos declarados con la primera aparecen en la
pantalla de seleccin para que el usuario pueda introducir un valor. Otra diferencia es
que para especificar un valor inicial para un parmetro se utiliza la palabra DEFAULT
en vez de VALUE.

4.2.4 Tablas
Con la sentencia TABLES se declara un objeto de datos interno que se utiliza cuando
hay campo de pantalla que se refieren a campo de la tabla declarada. Define un rea
de trabajo en el programa para los datos que el usuario entra en pantalla o que el
programa pasa a la pantalla.

4.2.5 Rangos
Permiten almacenar conjuntos de valores de una forma normalizada, anloga a la
utilizada en los SELECT-OPTIONS. Para declarar estos objetos se utiliza la palabra
clave RANGES:
RANGES <rango> FOR <campo>.

4.2.6 Atributos de objetos


Para determinar la longitud, tipo y longitud de salida de un campo, utilizaremos la
sentencia:
DESCRIBE FIELD <campo>

[LENGTH <l> [TYPE <t>]


[OUTPUT-LENGTH <o>] [DECIMALS <d>].

Para determinar la cantidad de lneas y el atributo occurs de una tabla utilizaremos la


sentencia:
DESCRIBE TABLE <tabla>

[LINES <lneas>] / [OCCURS <atrib_occurs>].

Pgina 70 de 194

ABAP Fundamentos y Reporting


4.3 Field symbols
Un field symbol es un puntero a un campo existente en tiempo de ejecucin (son
comparables a los punteros del lenguaje C).
Este tipo de datos se utiliza cuando no sabemos qu campo hemos de procesar en
tiempo de ejecucin.
Los fields symbols tienen una serie de caractersticas que los hacen muy flexibles:
Puede especificarse la posicin y longitud del campo asignado por medio de una
variable.
Se puede asignar un field symbol a otro field symbol especificando posicin y longitud.
Un field symbol puede tener una estructura que se puede usar para apuntar a
componentes individuales de estructuras.
Para definir un field symbol usaremos:
FIELD-SYMBOLS <fs> [<TYPE>|<LIKE>]...

En este caso, los caracteres < y >, forman parte del nombre del field symbol.
Para asignar un objeto de datos de forma dinmica al field symbol, usaremos:
ASSIGN (<f>) TO <fs>.

Ejemplo:
REPORT ZPRUEBA.
DATA: MES(2)

TYPE n,

CAMPO(15) TYPE c.
DATA: BEGIN OF PRIMAVERA,
MES04(5) TYPE c VALUE 'ABRIL',
MES05(5) TYPE c VALUE 'MAYO',
MES06(5) TYPE c VALUE 'JUNIO',
END OF PRIMAVERA.
FIELD-SYMBOLS: <MES_PRIMAVERA>
CAMPO = 'PRIMAVERA-MESXX'.
MES = 4.
WRITE / 'MESES DE PRIMAVERA:.
WHILE ( MES <= 6 ).
CAMPO+13(2) = MES.
ASSIGN (CAMPO) TO <MES_PRIMAVERA>.
WRITE / <MES_PRIMAVERA>.
ADD 1 TO MES.
ENDWHILE.

Este programa mostrara lo siguiente en pantalla:


MESES DE PRIMAVERA:
ABRIL
MAYO
JUNIO

Pgina 71 de 194

ABAP Fundamentos y Reporting

5 Procesamiento de Datos
5.1

Asignacin y conversin

Existen diversas sentencias ABAP con las que se pueden asignar valores a objetos de
datos. La ms importante es la sentencia MOVE. Funciona tanto para copiar objetos
elementales como para copiar estructuras y tablas complejas.
Si la estructura de un objeto de datos no se corresponde con la del valor que les
queremos asignar, se ejecutan ciertas reglas de conversin.
Los tipos compatibles pueden ser asignados sin conversin:
Dos tipos elementales son compatibles si son idnticos en tipo y longitud (y nmero
de decimales si son P).
Dos tipos estructurados son compatibles si tienen la misma estructura
componentes son compatibles.

y sus

Dos tablas son compatibles si sus tipos de lnea son compatibles.


En el resto de casos se aplica una regla de conversin, si se ha definido para los tipos
involucrados. Existen reglas para todos los tipos predefinidos, excepto entre T y D (ver
documentacin de MOVE). Algunas de las ms importantes son:
Los objetos de tipo C se almacenan alineados a la izquierda. Se rellena con espacios
en blanco si el campo destino es demasiado largo, se trunca si el campo destino es
demasiado corto.
Cuando se convierte un tipo C a tipo P slo se permiten dgitos, un signo (+ o -) y un
punto decimal.
Cuando se convierte un tipo P a C los ceros iniciales se convierten en espacios.
Ejemplos:
Tipo

Longitud

Valor

Tipo

Longitud

Valor

A___

ABCD

AB

-47110

47110-

12345-

12345-

-47.110

47.11-

Hay tambin reglas para convertir: field strings en field strings, campos elementales en
field strings, field strings en campos elementales.
Se pueden transportar valores entre estructuras, campo por campo, con la sentencia
MOVE-CORRESPONDING. Slo funciona si los campos que interesa copiar tienen los
mismos nombres. El sistema busca todos los campos de la primera estructura
<estr_1> cuyo nombre tambin aparece en la segunda <estr_2> y transporta <estr_1><nombre_campo> a <estr_2>-<nombre_campo> en los casos en que hay
correspondencia. El resto de campos permanecen inalterados.

5.1.1 Sub-campos
Se puede acceder y cambiar sub-areas de campos elementales especificando la
posicin y longitud del fragmento. Con algunas sentencias (MOVE, ASSIGN, WRITE
TO,) se pueden dar la posicin y la longitud como variables.

Pgina 72 de 194

ABAP Fundamentos y Reporting


5.1.2 Inicializacin
Usamos la sentencia CLEAR para devolver a un objeto de datos el valor inicial
correspondiente a su tipo. En las estructuras se inicializa cada uno de los campos que
la componen.
Prescinde del valor que pudiramos haber asignado inicialmente con la palabra
VALUE.

5.2

Operaciones Numricas

5.2.1 Aritmticas
La sentencia para realizar clculos tiene el siguiente formato:
[COMPUTE] <campo> = <expresin aritmtica>

La palabra clave COMPUTE es opcional.


En la expresin aritmtica, los parntesis y los operadores (+, -, *, / ) cuentan como
palabras y por tanto se deben separar del resto mediante espacios. En cambio cuando
el parntesis se usa para indicar un parmetro de una funcin matemtica debe ir
junto al nombre de la funcin. Se pueden anidar expresiones con parntesis hasta el
nivel de profundidad que se quiera.
Hay una aritmtica separada en el procesador ABAP para cada tipo de datos I, P, F.
En una expresin se utiliza slo una de las tres; para determinarla se mira cul es el
tipo ms amplio en la secuencia I-P-F. Los valores no numricos son convertidos a
numricos antes de realizar la operacin aritmtica.
Se pueden usar las sentencias abreviadas ADD, SUBSTRACT, MULTIPLY y DIVIDE
para ejecutar las operaciones aritmticas sencillas (+, -, / y *, respectivamente) sobre
una variable.
Los operadores DIV y MOD devuelven enteros (ver documentacin de COMPUTE).
Add-corresponding,
corresponding

5.3

Subtract-corresponding,

Multiply-corresponding,

Divide-

Cadenas de caracteres

ABAP contiene una serie de sentencias para procesar campos de caracteres, de los
tipos c, d, n, t y string.
La sentencia STRLEN devuelve en un entero la longitud de una cadena.
Ver programa DEMO_DATA_STRING.

5.3.1 CONCATENATE
CONCATENATE c1 cn INTO c [SEPARATED BY s].

Combina dos o ms cadenas (c1, , cn) y asigna el resultado a otra (c). El sistema
ignora los espacios al final de las cadenas individuales originales.
Mediante la adicin SEPARATED BY s se puede especificar un campo de caracteres
que se situar entre las cadenas individuales con su longitud definida.
Si el resultado de la concatenacin cabe en c, SY-SUBRC valdr 0. Si el resultado
tiene que ser truncado, valdr 4.

Pgina 73 de 194

ABAP Fundamentos y Reporting


5.3.2 SPLIT
Para romper una cadena de caracteres en dos o ms cadenas ms cortas usaremos la
sentencia:
SPLIT c AT del INTO c1 cn.

El sistema buscar el delimitador del dentro del campo c. Los fragmentos anteriores y
posteriores al delimitador se copiarn a los campos destino. Debemos especificar
suficientes campos destino. En caso contrario el ltimo contendr el resto de la cadena,
incluidos los delimitadores.
Si todos los campos destino son suficientemente largos y no hay que truncar ningn
fragmento, SY-SUBRC valdr 0. En caso contrario valdr 4.

5.3.3 SHIFT
Desplaza los caracteres de una cadena una serie de posiciones:
SHIFT c [BY n PLACES] [LEFT | RIGHT | CIRCULAR].

Si no se indica el nmero de posiciones n, se tomar n=1. Si n es cero o negativo, no


se modificar la cadena. Si n es superior a la longitud de c, la cadena se llenar de
blancos.
Por defecto se desplazarn los caracteres hacia la izquierda y se aadirn n blancos
en el extremo derecho. Si se indica RIGHT, el desplazamiento ser hacia la derecha y
se aadirn blancos a la izquierda de la cadena. Si se indica CIRCULAR, del
desplazamiento ser de n posiciones a la izquierda pero se rellenar por la derecha
con los caracteres suprimidos.
SHIFT c UP TO str [LEFT | RIGHT | CIRCULAR].

Se busca la cadena str dentro de c y se desplaza el contenido de este campo hasta


que str queda al principio (o al final). Si no se encuentra str, SY-SUBRC valdr 4 y no
se modificar la cadena.
SHIFT c LEFT

DELETING LEADING str.

SHIFT c RIGHT DELETING TRAILING str.

Se desplazan los caracteres de c mientras en primer (o el ltimo carcter) pertenezcan


a la cadena str.

5.3.4 REPLACE
REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern IN str WITH new.
REPLACE SECTION [OFFSET off] [LENGTH len] OF str WITH new.

Con esta sentencia se pueden sustituir caracteres de la primera cadena (str) con
caracteres de la segunda (new).
La primera variante se base en detectar una muestra y la segunda es posicional.

5.3.5 CONDENSE
CONDENSE c [NO-GAPS].

Todas las ocurrencias de una serie de espacios en blanco se sustituyen por un nico
espacio. Con NO-GAPS se eliminan todos los espacios.

5.3.6 TRANSLATE
TRANSLATE text USING pattern.

Pgina 74 de 194

ABAP Fundamentos y Reporting


Sustituye todas las ocurrencias de una serie de caracteres por otros dentro de una
cadena (text) segn las reglas especificadas (en pattern). Las reglas se indican con
pares de caracteres: el primero de cada par es sustituido por el segundo.
TRANSLATE text TO UPPER CASE.
TRANSLATE text TO LOWER CASE.

Esta versin transforma todas las letras minsculas a maysculas o viceversa.

5.3.7 OVERLAY
OVERLAY c1 WITH c2 [ONLY str].

Sobrescribe las posiciones de la cadena c1 que contienen caracteres de str con los
caracteres correspondientes de c2. Si no indicamos ONLY str, se sobrescriben las
posiciones de c1 que tienen blancos.
SY-SUBRC valdr 0 si al menos se sustituye un carcter de c1. En caso contrario
valdr 4.

5.3.8 FIND
FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern IN str.

Localiza una cadena o patrn dentro de otra.


El resultado de la bsqueda se refleja en SY-SUBRC.

Pgina 75 de 194

ABAP Fundamentos y Reporting

6 Control del Flujo del Programa


6.1 Expresiones lgicas
6.1.1 Comparaciones
EQ

Igual

NE

<>

No igual

GT

>

Mayor que

GE

>=,=>

Mayor o igual que

LT

<

Menor que

LE

<=,=<

Menor o igual que

BETWEEN f1 AND f2

Intervalo

IS INITIAL

Valor inicial,
blancos 0

[NOT] IN

Condiciones del rango

es

decir,

Se pueden combinar expresiones lgicas con las palabras NOT, AND y OR.
Se pueden anidar hasta el nivel deseado. Los parntesis que marcan las
subexpresiones se consideran palabras y deben ir separadas del resto por espacios.

6.1.2 Comparacin de Strings


CO

Contains Only

Verdad si el primer campo contiene slo caracteres del


segundo.

CN

Contains Not Only

Verdad si es falsa la expresin con CO.

CA

Contains Any

Verdad si el primer campo contiene al menos un caracter


del segundo.

NA

Contains Not Any

Verdad si es falsa la expresin con NA.

CS

Contains String

Verdad si el valor del segundo campo est contenido en


el primero.

NS

Contains No String

Verdad si es false la expresin con NS.

CP

Covers Pattern

Verdad si el valor del primer campo concuerda con el


patrn que define el segundo. Se pueden usar * y +.

NP

No Pattern

Verdad si es falsa la expresin con CP.

Si se comparan campos de tipo C con longitud diferente el ms corto se alarga hasta


la del ms largo antes de comparar. Se rellena desde la derecha con espacios.
(Para ms informacin ver la documentacin de la sentencia IF expresiones lgicas)

6.2 Distincin de casos


Las sentencias IF y CASE permiten hacer distincin de casos. Se pueden anidar.

6.2.1 IF
IF <expresin_lgica>

Pgina 76 de 194

ABAP Fundamentos y Reporting


[bloque de sentencias]
ELSEIF <expresin_lgica>
[bloque de sentencias]
ELSEIF <expresin_lgica>
[bloque de sentencias]
ELSE.
[bloque de sentencias]
ENDIF.

Si la expresin lgica se cumple, el bloque de sentencias situado en el interior se


ejecuta. Si no se cumple se procesa el bloque de las seccin ELSE o ELSEIF. Si no
existen estas sentencias (son opcionales) se contina la ejecucin del programa.
Se puede incluir cualquier nmero de sentencias ELSEIF entre el IF y el ENDIF. Como
mximo se ejecutar uno de los bloques.

6.2.2 CASE
CASE <objeto>.
WHEN <objeto1>.
[bloque de sentencias]
WHEN <objeto2> OR <objeto3>.
[bloque de sentencias]
WHEN OTHERS.
[bloque de sentencias]
ENDCASE.

Slo uno de los bloques de sentencias se ejecuta. La sentencia WHEN OTHERS es


opcional.

6.3 Bucles
Como en otros lenguajes de programacin, en ABAP se pueden realizar bucles con las
palabras DO y WHILE. Se pueden anidar bucles.
El campo de sistema SY-INDEX tiene el valor 1 durante el primer paso del bucle y es
incrementado en 1 a cada nuevo paso. El nmero de pasos no puede ser alterado
mediante la modificacin de este campo dentro del bucle.

6.3.1 DO
DO [(n) TIMES].
[bloque de sentencias]
ENDDO.

El parmetro (n) TIMES es opcional. Si no lo especificamos necesitaremos una


instruccin para salir del bucle (ver Finalizar bucles).

6.3.2 WHILE
WHILE <expresin_lgica>.
[bloque de sentencias]
ENDWHILE.

Pgina 77 de 194

ABAP Fundamentos y Reporting


Se ejecuta el bloque de sentencias mientras se cumpla la expresin lgica.

6.3.3 Otros
Por ejemplo la sentencia LOOP que lee tablas internas.

6.4 Finalizar bucles


6.4.1 CONTINUE
CONTINUE.

Esta sentencia slo se puede utilizar dentro de bucles. Cuando se ejecuta, se finaliza
inmediatamente el paso actual y se contina el flujo del programa con el paso
siguiente del bucle.
DATA resto TYPE i.
DO 20 TIMES.
resto = sy-index MOD 2.
IF resto <> 0.
CONTINUE.
ENDIF.
WRITE / sy-index.
ENDDO.

6.4.2 CHECK
CHECK <expresin_lgica>.

Si chequeamos una expresin lgica dentro de un bucle y es falsa, las sentencias


siguientes no se ejecutarn y se salta a la siguiente vuelta. Si la expresin es cierta la
instruccin no tiene efecto alguno.
DATA remainder TYPE i.
DO 20 TIMES.
remainder = sy-index MOD 2.
CHECK remainder = 0.
WRITE / sy-index.
ENDDO.

El comportamiento de la sentencia es diferente si estamos fuera de un loop: si


chequeamos y el resultado es falso, saldremos de la subrutina o bloque de proceso
actual.

6.4.3 EXIT
EXIT.

En un bucle esta sentencia nos sacar del bucle finalizando el paso actual.
contina la ejecucin con la primera sentencia siguiente al fin del bucle.
DATA limit TYPE i VALUE 10.
DO.
IF sy-index > limit.
EXIT.

Pgina 78 de 194

Se

ABAP Fundamentos y Reporting


ENDIF.
WRITE / sy-index.
ENDDO.

Fuera de un bucle finalizar la ejecucin del bloque de proceso actual.

Pgina 79 de 194

ABAP Fundamentos y Reporting

7 Pantalla de Seleccin
La pantalla de seleccin es la parte del programa que nos permite disear la interfase
interactiva de entrada de datos por parte del usuario.
Los datos introducidos por el usuario se pueden usar en el programa para filtrar la
informacin de manera que slo se procese aquella que cumpla con los criterios
definidos en la pantalla de seleccin. Por ejemplo, si el programa crea una lista a
partir de los datos de una tabla con muchos registros, el usuario puede entrar
intervalos para algn campo clave y slo los datos que estn en este rango son ledos
y mostrados en la lista. As se reduce considerablemente la carga del sistema.
Para poder entrar selecciones que reduzcan la cantidad de datos que de deben tratar
existen los siguientes objetos de datos especiales:
PARAMETERS que definen campos simples de entrada
SELECT-OPTIONS con los que definimos selecciones ms complejas: mltiples
valores, intervalos, valores excluidos, etc.
Con estas dos instrucciones podemos generar una pantalla de seleccin estndar para
un programa ejecutable (la pantalla 1000). Se pueden generar otras pantallas de
seleccin adicionales con SELECTION-SCREEN BEGIN OF SCREEN<nnn> y se las
puede llamar con CALL SELECTION-SCREEN.
Los textos que aparecen en la pantalla de seleccin al lado de los campos de entrada
son, por defecto, los nombres de las variables. Pero se pueden introducir textos ms
explicativos y traducirlos a diferentes lenguajes. As se mostrarn en el lenguaje
usado por el usuario en la conexin.
El sistema comprueba que los datos introducidos tienen un formato correcto; si el tipo
no corresponde con el definido para el campo se mostrar un mensaje de error y el
campo estar preparado para que se corrija la entrada.
Si un campo de entrada se define con referencia a un campo del diccionario, se utiliza
la ayuda de bsqueda que le corresponde pulsando F4.
Se pueden crear variantes para cualquier pantalla de seleccin. Son conjuntos de
valores preasignados para los parmetros de entrada que se pueden grabar y
reutilizar posteriormente. Pueden hacer referencia a ms de una pantalla. Dependen
del mandante.

7.1 Parameters
Recogen un nico valor como criterio de seleccin. Cuando el usuario introduce un
valor en el parmetro de pantalla y ejecuta el programa, el valor se pasa al objeto de
datos interno correspondiente.
Para incluir parmetros de seleccin en la pantalla de seleccin pondremos en el
cdigo del programa la palabra clave PARAMETERS seguida del nombre de
parmetro y su tipo.
La forma de la sentencia es:
PARAMETERS <parmetro>[(<long>)] [TYPE <tipo>] [DECIMALS <n>] [LIKE <f>]
[OBLIGATORY] [DEFAULT <valor>] [MEMORY ID <pid>]
[AS CHECKBOX]
[RADIOBUTTON GROUP <grupo>].

Visualizaremos y ejecutaremos el programa DEMO_SELECTION_SCREEN_BASIC:

Pgina 80 de 194

ABAP Fundamentos y Reporting

La sentencia es declarativa, crea un objeto de datos. Como en el caso de la sentencia


DATA podemos especificar el tipo del campo con TYPE o con LIKE.
El nombre del parmetro puede contener como mximo 8 caracteres.

7.1.1 Activacin de parmetro obligatorio


OBLIGATORY.

Cuando utilizamos esta opcin, aparecer una interrogacin en el campo de entrada.


El usuario no podr abandonar la pantalla de seleccin hasta que no introduzca un
valor para este campo.

7.1.2 Asignacin de valores por defecto


DEFAULT <valor>.

Para declarar valores iniciales de un parmetro se utiliza la palabra DEFAULT.


Despus podemos asignar el valor de estos parmetros a otras variables. <valor>
puede ser un literal o el nombre de un campo.
Tambin se puede asignar un valor inicial con la opcin MEMORY ID <pid>. De esta
manera se utiliza la memoria SAP y los parmetros SET/GET para poner un valor por
defecto.

7.1.3 Permitir maysculas y minsculas como entrada


LOWER CASE.

Si no utilizamos la opcin LOWER CASE, la entrada introducida por el usuario se


convertir automticamente a maysculas. Con esta opcin, el parmetro se quedar
tal y como lo tecle el usuario.

7.1.4 Parmetro con apariencia de checkbox


AS CHECKBOX.

Crea un campo de un carcter que puede contener un espacio en blanco o una X.


Podremos evaluarlo durante el procesamiento dentro del programa.
Si aadimos DEFAULT X el checkbox aparecer marcado.
Ejemplo:
PARAMETERS:
A AS CHECKBOX,
B AS CHECKBOX DEFAULT X.

Pgina 81 de 194

ABAP Fundamentos y Reporting


En este ejemplo, aparecern dos checkbox en la pantalla de seleccin:

7.1.5 Parmetro con apariencia de radiobutton


RADIOBUTTON GROUP <grupo>.

La mxima longitud para el nombre <grupo> es 4. El parmetro ser de tipo C y


longitud 1. Slo uno de los botones de un grupo puede estar activo.
Si aadimos DEFAULT X el radiobutton aparecer marcado.
Ejemplo: Disear una pantalla con 2 posibles grupos de seleccin de cada caracterstica para el
pelo. La primera caracterstica es color(moreno, rubio) y la segunda su textura (liso, rizado, muy
rizado).
PARAMETERS:
C_MORENO
C_RUBIO

RADIOBUTTON GROUP COLO,


RADIOBUTTON GROUP COLO,

T_LISO

RADIOBUTTON GROUP TEXT,

T_RIZADO

RADIOBUTTON GROUP TEXT,

T_M_RIZA

RADIOBUTTON GROUP TEXT.

Este ejemplo aparecera as en la pantalla de seleccin:

7.1.6 Asignacin de ayudas de bsqueda


Opcin: MATCHCODE OBJECT <ayuda_de_bsqueda>
El nombre de la ayuda de bsqueda no debe ir entre comillas. Utilizaremos esta
opcin cuando la ayuda de bsqueda no est asignada directamente a un campo.

7.2 Select-options
Los criterios de seleccin se utilizan para que el usuario pueda realizar selecciones
complejas para un campo. En la pantalla de seleccin aparecen dos campos de
entrada del mismo tipo, de manera que el usuario puede introducir un rango de valores.
Se definen poniendo la palabra clave SELECT-OPTIONS seguida del nombre del
rango de seleccin y el campo al que hace referencia. Su sintaxis es:
SELECT-OPTIONS <tabla_seleccin> FOR <campo>.

El sistema chequear las entradas de seleccin contra el campo que aparece despus
del FOR. Este campo debe estar definido en una sentencia DATA o TABLES. Los dos
campos que aparecen en pantalla tienen los mismos atributos tcnicos que ste.

Pgina 82 de 194

ABAP Fundamentos y Reporting


Este tipo de parmetros se guardan dentro del programa en unas tablas internas con
una estructura estndar, que permite crear conjuntos de valores de una forma
normalizada. Los campos que la forman son:
SIGN

C(1). Campo que designa si el valor o intervalo es incluido o excluido de la


seleccin (I = inclusin, E = exclusin).

OPTION

C(2). Contiene el operador que puede ser EQ = igual, NE = no igual, GT =


mayor que, GE = mayor o igual que, LE = menor o igual que, LT = menor
que, BT = entre, NB = no entre, CP = contiene patrn, NP = no contiene
patrn.

LOW

Su tipo de datos es el mismo que el del parmetro. Si HIGH est vaco, el


contenido de LOW define un nico valor. En caso contrario, especifica el
lmite inferior de un intervalo.

HIGH

Su tipo de datos es el mismo que el del parmetro. Especifica el lmite


superior de un intervalo.

Los campos sign y option se llenan por defecto con I y EQ para valores individuales y
con I y BT para intervalos.
Cuando el usuario introduce diversos valores o intervalos de seleccin y ejecuta el
programa, el sistema coloca los valores en esta tabla interna.
Existe una variante especial de la clusula WHERE de las selecciones a la base de
datos que permite utilizar esta tabla interna como posibles valores de un campo.

7.2.1 Asignacin de valores por defecto


SELECT-OPTIONS <parmetro> FOR <campo> DEFAULT <g> [TO <h>]

<g> y <h> deben ser literales (entre comillas simples) o los nombres de campos que
contengan el valor con el queremos inicializar el parmetro. Slo se puede inicializar la
primera lnea de la tabla de seleccin con los valores por defecto.
Para inicializar el campo LOW usar DEFAULT <g>.
Para inicializar los campos LOW y HIGH, usar DEFAULT <g> TO <h>.
Para inicializar el campo OPTION aadiremos:
DEFAULT <g> [TO <h>] OPTION <op>.

Para inicializar el campo SIGN, aadiremos:


DEFAULT <g> [TO <h>] [OPTION <op>] SIGN <s>.

Para poder inicializar ms de una lnea de la tabla del SELECT-OPTIONS tendremos


que utilizar el evento INITIALIZATION.

7.2.2 No permitir mltiples valores


Opcin: NO-EXTENSION.
Suprime el botn de selecciones mltiples.

7.2.3 No permitir intervalos


Opcin: NO-INTERVALS.
Suprime la entrada de lmite superior de la pantalla de seleccin, pero se puede usar
el botn de selecciones mltiples para introducir intervalos.

Pgina 83 de 194

ABAP Fundamentos y Reporting


7.3 Asignacin de descripciones a los campos de la pantalla
de seleccin
Cuando definimos un parmetro (PARAMETER) o un criterio de seleccin (SELECTOPTIONS) en la pantalla aparece nicamente el nombre que le hayamos dado al
parmetro.
Por ejemplo, si definimos el campo siguiente:
PARAMETER: P_MATERI LIKE MARA-MATNR.
En la pantalla de seleccin nos aparecera lo siguiente:

El nombre del campo no es demasiado descriptivo y esto puede confundir al usuario.


Para asignar una descripcin a un campo de la maana, desde el editor
seleccionaremos la siguiente opcin del men Pasar a -> Elementos de texto ->
Textos de seleccin. En la pantalla que aparece a continuacin podemos incluir una
descripcin para los campos de la pantalla de seleccin de hasta 30 caracteres.
Para incluir una descripcin para un campo tenemos las siguientes opciones:
Escribir la descripcin directamente.
Utilizar la descripcin del Diccionario de Datos. Para ello elegiremos la opcin
Referencia.

7.4 Diseo de la pantalla de seleccin


Podemos hacer que la pantalla de seleccin tenga un aspecto ms elaborado. Para
ello tenemos la posibilidad de incluir marcos que agrupen selecciones lgicamente
relacionadas, saltos de lnea para espaciar parmetros, etc. Para conseguir estos
efectos utilizaremos la palabra clave SELECTION-SCREEN.
Podemos orientarnos sobre el estilo de diseo usando la transaccin de ejemplo BIBS.

7.4.1 Bloques
Para agrupar selecciones relacionadas entre s usamos:
SELECTION-SCREEN BEGIN OF BLOCK <bloque>
[WITH FRAME <marco>]

Pinta un marco alrededor del bloque

[TITLE <texto>]

Especifica un ttulo para el marco

SELECTION-SCREEN END OF BLOCK <bloque>.

Se pueden anidar hasta 5 bloques con marco.

7.4.2 Espacios y lneas


Salta un numero <n> de lneas.
SELECTION-SCREEN SKIP <N>.

Pinta una lnea subrayada.


SELECTION-SCREEN ULINE.

7.4.3 Agrupar en una lnea


Para escribir varios parmetros en una misma lnea del Selection-screen:

Pgina 84 de 194

ABAP Fundamentos y Reporting


SELECTION-SCREEN : BEGIN OF LINE
COMMENT PERMITE INTRODUCIR TEXTOS (COMENTARIOS).
SELECTION-SCREEN: END OF LINE.

7.5 Eventos
La pantalla de seleccin aparece despus del bloque de evento INITIALIZATION.
El bloque AT SELECTION-SCREEN pertenece a la pantalla de seleccin. Cada vez
que el usuario pulsa Enter o una tecla de funcin, o pulsa un botn del men o escoge
una opcin del men, el sistema realiza chequeos sobre el tipo de los campos de
entrada. Si el tipo no es el correcto, se muestra un mensaje de error y el campo vuelve
a estar preparado para rectificar la entrada. Cuando se han corregido los errores de
tipo el sistema lanza el evento AT SELECTION-SCREEN. En el bloque
correspondiente se pueden realizar otros chequeos y lanzar mensajes de error (con
MESSAGE) y permitir la correccin de los campos errneos. Cuando acaba el bloque
sin errores se vuelve a mostrar la pantalla de seleccin.
Cuando se ejecuta el programa y se sale de la pantalla de seleccin, se procesa
tambin el bloque AT SELECTION-SCREEN y despus, si no hay errores, el bloque
de evento START-OF-SELECTION.

7.6 Pantallas de seleccin definidas por el usuario


Se pueden definir una pantalla de seleccin como un objeto independiente y usarla en
programas utilizando la sentencia CALL SELECTION-SCREEN nnnn.
Para definirla, se deben crear las lneas que definen los parmetros y los criterios de
seleccin dentro de un bloque delimitado por las sentencias:
SELECTION-SCREEN BEGIN OF SCREEN nnnn.
SELECTION-SCREEN END OF SCREEN nnnn.
Nnnn es el nmero de la pantalla de seleccin, cualquier secuencia de 4 dgitos
excepto la 1000, que se reserva para la pantalla de seleccin estndar.
Igual que en el caso de la pantalla de seleccin estndar, se lanza el evento AT
SELECTION-SCREEN con cada interaccin del usuario. Si queremos distinguir el
procesamiento para cada pantalla diferente, podemos comprobar el nmero de
pantalla usando el campo SY-DYNNR.

7.7 Mensajes
Hemos visto que para indicarle al usuario que los valores que ha introducido en una
pantalla no son correctos se le pueden mostrar mensajes. Se utilizan en general para
mostrar cualquier informacin al usuario. Los mensajes estn almacenados en la tabla
T100 organizados por lenguaje, un identificador y un nmero de tres dgitos. Si
queremos crear mensajes propios sus identificadores deben comenzar por Y Z.
Los mensajes pueden contener hasta 4 variables, identificadas por &1, &2, &3 y &4.
Se puede crear un texto descriptivo largo para cada mensaje; en ste, las variables
correspondientes a las anteriores son &v1&, &v2&, &v3& y &v4&.

7.7.1 Uso de mensajes


Para enviar un mensaje al usuario utilizamos la sentencia MESSAGE.
Annn
Xnnn

Pgina 85 de 194

ABAP Fundamentos y Reporting


MESSAGE Ennn WITH <campo1> <campo2> <campo3> <campo4>.
Wnnn
Innn
Snnn

Tenemos que haber declarado previamente la librera de mensajes que queremos


utilizar en la sentencia REPORT:
REPORT <nombre_programa> MESSAGE-ID <identificador>.

El identificador de mensajes as declarado ser utilizado en todo el programa. El


lenguaje que se utilizar para seleccionar el mensaje ser el de la conexin del
usuario.
En la sentencia MESSAGE slo tenemos que indicar el nmero del mensaje (nnn) y el
tipo (una letra delante del nmero), que determina cmo se muestra al usuario. El
mensaje puede ser mostrado en la barra de status, o en forma de ventana. Existen los
siguientes tipos de mensajes con diferente comportamiento:
A

terminacin

Se finaliza la ejecucin y el usuario debe reiniciar la transaccin.

salida

Como el tipo A,
MESSAGE_TYPE_X.

error

Se interrumpe la ejecucin y el usuario debe corregir la entrada (si


se muestra en AT SELECTION-SCREEN, si no es como el tipo
A).

aviso

Se interrumpe la ejecucin y el usuario puede corregir la entrada


o confirmar con ENTER (si se muestra en AT SELECTIONSCREEN, si no es como el tipo A).

informativo

Se interrumpe la ejecucin pero contina cuando el usuario


confirma el mensaje con ENTER.

xito

Se muestra una informacin en la pantalla siguiente.

pero

se

lanza

un

short

dump

Para pasar valores a las variables del mensaje (que son como mximo cuatro), los
ponemos a continuacin de la palabra WITH. El campo al nivel i sustituye a la variable
&i.
Es posible usar mensajes sin declarar el identificador en la instruccin REPORT o usar
mensajes de clases diferentes a la declarada con la siguiente variante de la sentencia:
MESSAGE Tnnn(<identificador>)

El identificador entre parntesis a continuacin del nmero del mensaje. Otra manera
de crear un mensaje, que permite una llamada dinmica es la siguiente:
MESSAGE ID <identificador> TYPE <tipo> NUMBER <nmero> WITH ...

En los campos de sistema SY-MSGID, SY-MSGTY, SY-MSGNO tendremos a nuestra


disposicin el identificador, el tipo y el nmero del mensaje si lo recibimos despus de
una llamada a otro programa. Podemos utilizarlos en una llamada dinmica como la
anterior. SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4 contienen los valores de
las variables.

7.7.2 Gestin de mensajes


Se pueden crear nuevos identificadores y mensajes en la transaccin Herramientas ->
Workbench ABAP -> Desarrollo -> Entorno de programa -> Mensajes.

Pgina 86 de 194

ABAP Fundamentos y Reporting


La definicin del mensaje dentro de la clase consiste en un texto indicativo del
mensaje junto a unos parmetros si los tiene.
Por ejemplo, podramos definir un mensaje con el nmero 001 de la clase ZZ
El cliente & No existe.
Se puede aadir un texto explicativo de longitud ms larga al mensaje.

Pgina 87 de 194

ABAP Fundamentos y Reporting

8 Acceso a la base de datos


Para poder leer una tabla de la base de datos en un programa es necesario declararla
previamente con la sentencia TABLES <tabla>.
Para acceder a la base de datos se usan ciertas sentencias que utilizan la interfase de
base de datos.

8.1 Open SQL vs SQL nativo


Hay dos maneras de acceder a la base de datos del sistema SAP R/3 desde un
programa ABAP: usando Open SQL o usando SQL nativo
Open SQL es un subconjunto de sentencias del SQL92 estndar, que forman parte del
lenguaje ABAP. Permiten realizar operaciones (lecturas y modificaciones) con los
registros de las tablas de la base de datos sin depender del sistema gestor concreto
utilizado, de manera uniforme para todos los RDBMS. La interfase de base de datos
convierte las sentencias a las instrucciones propias del sistema. Contiene en particular
las sentencias del lenguaje de manipulacin de datos (DML) SELECT, UPDATE,
INSERT, DELETE y MODIFY. No contiene sentencias del lenguaje de definicin de
datos (DDL) porque estas funciones las cubre el Diccionario.
Las sentencias de Open SQL actualizan el campo SY-SUBRC con un 0 si la operacin
tiene xito y con otros valores si se producen errores.
El SQL nativo permite usar en los programas ABAP sentencias propias del lenguaje
especfico del sistema gestor de base de datos utilizado en nuestra instalacin. Estas
instrucciones se pasan directamente de la interfase de base de datos al sistema gestor
sin ser convertidas. Permite aprovechar las caractersticas propias de la base de datos
y tambin se pueden realizar operaciones de definicin (DDL). Pero no interesa
utilizarlas en nuestros programas porque al ser especficas de un sistema de bases de
datos no son portables. Adems no vale la pena usar operaciones DDL porque no
aprovechamos las funciones administrativas del Diccionario.

8.2 Lectura de datos: SELECT


Para leer datos de una tabla de la base de datos utilizaremos la sentencia SELECT del
Open SQL:
SELECT [SINGLE] <campos>
FROM <tabla_o_vista>
[INTO <destino>]
[WHERE <condiciones>]
[ORDER BY <secuencia_campos>].

Esta sentencia, como vemos, tiene varias clusulas:


Clusula

Descripcin

SELECT
<campos>

Define cul va a ser el mbito de seleccin: todas las columnas


(campos) o algunas.
Si queremos seleccionar todos los campos de la tabla pondremos un
*, y si queremos seleccionar slo algunos campos determinados
pondremos sus nombres: <campo1> <campon>. Cuando leamos
por columnas tendremos que tener un nmero de variables igual al
nmero de columnas que hemos especificado. Estas variables harn
la funcin de WA y tendrn que tener el mismo dominio que los

Pgina 88 de 194

ABAP Fundamentos y Reporting


campos de la tabla.
FROM <tabla> Especifica la tabla o vista de la base de datos que queremos leer.
INTO
<destino>

Especifica el objeto de datos interno del programa en el que


colocaremos los datos seleccionados. Si usamos INTO
CORRESPONDING FIELDS OF podemos llenar los campos que
tengan igual nombre que los seleccionados en la estructura de
destino.

WHERE
Especifica que lneas de la tabla vamos a leer en funcin de que
<condiciones> cumplan la condicin fijada.
ORDER BY

Especifica el orden en el que se irn leyendo las lneas.


Se puede ordenar por clave primaria (BY PRIMARY KEY), o por
campos determinados <campo1> <campon>. Para las dos
opciones determinadas se puede indicar orden ascendente
(ASCENDING) o descendiente (DESCENDING).

8.2.1 Una o varias lneas


Para leer una nica lnea de la tabla usaremos la clusula SELECT SINGLE. Debemos
especificar entonces los valores de todos los campos que forman la clave primaria en
la clusula WHERE, para asegurar que leemos un solo registro. Si el sistema
encuentra un registro que cumple la condicin, el campo SY-SUBRC devuelve el valor
0.
SELECT SINGLE <f1> ... <fn>
FROM <dbtab>
INTO <wa>
INTO (<f1>, ..., <fn>)
INTO CORRESPONDING FIELDS OF <wa>
WHERE <key1> <op> <value1>... AND <key2> <op> <value2>...

Ver programas de ejemplo:


DEMO_SELECT_SINGLE
DEMO_SELECT_SOME_COLUMNS
DEMO_SELECT_SINGLE_FIELDS
DEMO_SELECT_ALL_COLUMNS
SELECT

SINGLE carrid connid cityfrom cityto

FROM

spfli

INTO

CORRESPONDING FIELDS OF wa

WHERE carrid EQ 'LH' AND connid EQ '0400'.

Cuando no usamos la adicin SINGLE, el sistema lee todos los registros de la tabla
que cumplen las condiciones especificadas en la clusula WHERE. El programa ABAP
lee las lneas una por una en un bucle, guardando en cada paso los datos en el rea
indicada en la clusula INTO. Para marcar el final del bucle debemos utilizar la
sentencia ENDSELECT. Todas las instrucciones que se encuentran entre las
sentencias SELECT y ENDSELECT se ejecutan para cada entrada leda.
SELECT [DISTINCT] <f1> ... <fn>
FROM <dbtab>

Pgina 89 de 194

ABAP Fundamentos y Reporting


INTO <wa>
INTO (<f1>, ..., <fn>)
INTO CORRESPONDING FIELDS OF <wa>
WHERE <key1> <op> <value1>... AND <key2> <op> <value2>..
ENDSELECT.

Si utilizamos DISTINCT, el sistema excluye las lneas duplicadas, si no leer todos los
registros que cumplan la condicin.
SY-SUBRC vale 0 si el sistema ha podido leer al menos un registro. Despus de
ejecutar la sentencia SELECT en cada paso, el campo SY-DBCNT contiene el nmero
de registros ledos hasta el momento. Despus del ENDSELECT contiene el nmero
de total de lneas ledas.
DATA wa_spfli LIKE spfli.
SELECT

carrid connid airpfrom airpto

FROM

spfli

INTO

CORRESPONDING FIELDS OF wa_spfli

WHERE carrid EQ 'LH'.


* <sentencias para cada registro ledo>
ENDSELECT.

8.2.2 Destino
Con la adicin CORRESPONDING FIELDS OF, se puede llenar el rea de destino
componente a componente pasando los valores si los nombres de los campos son
idnticos:
... INTO CORRESPONDING FIELDS OF <wa>.

Se pueden guardar los registros en una tabla interna con la opcin INTO TABLE. En
este caso el sistema no realiza un bucle para leer los datos y no es necesario utilizar la
instruccin ENDSELECT. Esta opcin es ms eficiente que leer los registros en un
bucle y aadir las lneas una a una a la tabla interna.
... INTO TABLE <itab>

Para utilizar este mtodo las dos tablas tienen que tener idntica estructura. Pero
podemos traspasar slo los campos equivalentes:
... INTO CORRESPONDING FIELDS OF TABLE <ITAB>.

Siempre se borran las entradas existentes en la internal table, a no ser que se utilice la
siguiente versin:
... APPENDING CORRESPONDING FIELDS OF TABLE <ITAB>.

Ver
programas
de
ejemplo
DEMO_SELECT_INTO_PACKAGE.

DEMO_SELECT_INTO_TABLES

DATA it_spfli LIKE TABLE OF spfli.


SELECT

carrid connid airpfrom airpto

FROM

spfli

INTO

CORRESPONDING FIELDS OF TABLE it_spfli

WHERE carrid EQ 'LH'.

Pgina 90 de 194

ABAP Fundamentos y Reporting


8.2.3 Condiciones (WHERE)
Con la clsula WHERE especificamos qu registros deben ser ledos de la base de
datos.
Slo indicamos el nombre de los campos, el nombre de la tabla ya est indicado en la
clusula FROM:
SELECT ... FROM spfli WHERE carrid = ...

Correcto

SELECT ... FROM spfli WHERE spfli-carrid = ...

Incorrecto

Se pueden aadir varias condiciones utilizando AND y OR


Las opciones para definir las condiciones son:
... WHERE <campo> <operador> <valor>.
... WHERE <campo> [NOT] LIKE <patrn>.
... WHERE <campo> [NOT] IN (<valor1>, <valorn>)
... WHERE <campo> [NOT] IN <rango>.

Los operadores posibles son:


EQ
=

NE
<>

GT
>

GE
>=

LT
<

LE
<=

BETWEEN f1 AND f2

Valor puede ser una variable, una constante o un literal.


Los patrones para utilizar con LIKE pueden contener _ para sustituir a un carcter y %
para reemplazar a cualquier cadena. Slo se puede seleccionar de este modo sobre
campos de tipo texto.
SELECT * FROM <tabla> WHERE <campo> like '_R%'.

Seleccionaramos los registros que en <campo> tuvieran una R en la segunda posicin.


Cuando usamos un rango, este debe hacer sido declarado con las palabras clave
RANGES o SELECT-OPTIONS. Las condiciones se guardan en una tabla interna y se
interpretan de la siguiente manera:
Si la tabla interna est vaca, la condicin <campo> IN <rango> es siempre cierta..
Si la tabla interna contiene slo condiciones inclusivas simples i1, ..., in, el
resultado es la condicin compuesta ( i1 OR ... OR in ).
Si la tabla interna contiene slo condiciones exclusivas simples e1, ..., em, el
resultado es la condicin compuesta ( NOT e1 ) AND ... AND ( NOT em ).
Si la tabla interna contiene tanto condiciones inclusivas i1, ..., in como exclusivas e1, ...,
em, el resultado es la condicin compuesta ( i1 OR ... OR in ) AND ( NOT e1 ) AND ...
AND ( NOT em ).

Ver programa de ejemplo DEMO_WHERE_IN_SELTAB.

8.2.4 Ms de una tabla


En la clusula FROM especificamos si se lee de una nica tabla o vista o bien de
varias ligadas mediante joins.
Con un INNER JOIN se combinan varias tablas para formar una nica tabla de
resultados. El conjunto final contiene las entradas para las que existe una entrada
correspondiente en cada tabla. La condicin de unin puede contener campos que no
sean clave.
SELECT spfli~carrid spfli~connid
sflight~seatsmax sflight~seatsocc

spfli~cityfrom

Pgina 91 de 194

spfli~cityto

sflight~fldate

ABAP Fundamentos y Reporting


INTO TABLE itab_flights
FROM spfli INNER JOIN sflight
ON spfli~carrid = sflight~carrid
AND spfli~connid = sflight~connid
WHERE spfli~carrid IN s_carr
AND spfli~connid IN s_conn.

Con un LEFT OUTER JOIN la tabla resultante puede contener registros de la tabla de
la izquierda sin que existan registros correspondientes en la de la derecha. Las
condiciones del WHERE no podrn contener campos de la tabla de la derecha.
SELECT scarr~carrid scarr~carrname spfli~connid spfli~cityfrom spfli~cityto
INTO TABLE itab_flights
FROM scarr LEFT OUTER JOIN spfli
ON scarr~carrid = spfli~carrid
WHERE scarr~carrid IN s_carr
ORDER BY scarr~carrid spfli~connid.

Estas uniones de tablas son normalmente la manera ms eficiente de leer de la base


de datos, pues la sentencia Open SQL se traduce en la base de datos y se utiliza su
optimizador para decidir en qu orden se leen las tablas y qu ndices se utilizan.
Hay que tener en cuenta, no obstante, que conviene restringir el nmero de campos
ledos: si se da el caso de que leemos muchos campos de la tabla de la izquierda y
que la tabla de la derecha contiene muchas entradas correspondientes, estaremos
leyendo muchos datos redundantes y ya no ser un mtodo eficiente de lectura. Para
que esto no ocurra utilizaremos siempre una lista de campos en un join.
La adicin FOR ALL ENTRIES nos permite seleccionar de una tabla de diccionario
filtrando con los valores contenidos en una tabla interna. Con este mtodo es
necesario igualar los campos. Es muy prctico para ahorrarnos condiciones muy
largas. Se recomienda para los casos en que los datos que definen las condiciones
provienen de una fuente que no es la base de datos; en caso contrario conviene usar
JOIN.
SELECT carrid connid ... INTO TABLE itab_spfli FROM spfli
WHERE cityfrom IN s_cityf
AND cityto IN s_cityt.
IF sy-subrc EQ 0. EXIT. ENDIF.
SELECT carrid connid fldate... INTO TABLE itab_sflight FROM sflight
FOR ALL ENTRIES IN itab_spfli
WHERE carrid = itab_spfli-carrid
AND connid = itab_spfli-connid.

Ver
tambin
programas
de
ejemplo
DEMO_SELECT_INNER_JOIN,
DEMO_SELECT_LEFT_OUTER_JOIN,
DEMO_SELECT_FOR_ALL_ENTRIES_1
y
DEMO_SELECT_FOR_ALL_ENTRIES_2.

8.2.5 Datos agregados de una columna


Las funciones de agregado son:
MIN

el mnimo de la columna

MAX

el mximo de la columna

Pgina 92 de 194

ABAP Fundamentos y Reporting


AVG

la media de la columna

SUM

el total de la columna

COUNT

cuenta las lneas de la seleccin (o los valores diferentes con DISTINCT)

8.2.6 Selecciones dinmicas


Utilizamos un parmetro para indicar sobre que tabla realizaremos el select. El nombre
dinmico diferencia entre majusculas y minsculas.
Es necesario utilizar INTO porque necesitamos un WA para mostrar los resultados.
Este mtodo es ms lento que un select esttico.
Es posible que por este mtodo algunos campos no se muestren correctamente.
DATA: BEGIN OF WA,
LINE(100),
END OF WA.
PARAMETERS: TABNAME(10) DEFAULT 'SPFLI'.
SELECT * FROM TABNAME INTO WA.

Ver programas de ejemplo:


DEMO_SELECT_DYNAMIC_COLUMNS
DEMO_SELECT_DYNAMIC_CONDITIONS
DEMO_SELECT_DYNAMIC_DATABASE

8.2.7 Clusula Group by


Resume varias lneas de la base de datos en una de la seleccin. Permite resumir
lneas que tienen el mismo contenido en ciertas columnas y aplicar funciones de
agregado a las otras.
Se deben especificar en el select todas las columnas relevantes. Y en la adicin
GROUP BY se listan los nombres de las columnas cuyos contenidos deben coincidir.
El resto de columnas deben estar incluidas en funciones de agregado que definan
cmo se calcula su contenido al resumir los registros.
SELECT CARRID MIN(PRICE) MAX(PRICE)
INTO (CARRID,RESUL_MIN,RESUL_MAX)
FROM <TABLE>
GROUP BY CARRID.

Con HAVING se pueden especificar condiciones para restringir el nmero de grupos


seleccionados. Se debe usar siempre en conjuncin con GROUP BY.
Ver
programas
de
ejemplo
DEMO_SELECT_GROUP_BY_HAVING.

DEMO_SELECT_GROUP_BY

8.2.8 Clusula Order by


Podemos ordenar los registros seleccionados de acuerdo a los contenidos de ciertas
columnas (no slo las de clave primaria). Si no se utiliza el orden es indeterminado y
puede variar de una ejecucin a otra.
Para ordenar de manera ascendente por clave primaria usamos:

Pgina 93 de 194

ABAP Fundamentos y Reporting


SELECT * FROM <TABLE> ORDER BY PRIMARY KEY.

Slo funciona si seleccionamos todas las columnas con * y si usamos una nica tabla
(ni con vistas ni con joins).
Para usar cualquier secuencia de columnas usamos:
... ORDER BY c1 [ASCENDING|DESCENDING] ... cn [ASCENDING|DESCENDING]

Per defecto el orden es ascendente. Slo se pueden utilizar columnas que estemos
seleccionando.
La especificacin de columnas puede ser dinmica. Se utiliza una tabla interna con un
campo de tipo C y de un mximo de 72 caracteres que contiene los nombres de las
columnas.
Ver programa de ejemplo DEMO_SELECT_ORDER_BY.

8.2.9 Clusula Bypassing buffer


Es posible que algunas veces los datos recuperados al realizar un select, sean datos
de buffers intermedios, si nos queremos asegurar que los datos que leemos son los de
la BB.DD deberemos utilizar esta clusula.
SELECT * FROM SFLIGHT BYPASSING BUFFER.

8.3 Rendimiento ptimo


Para conseguir un rendimiento ptimo de los accesos a la base de datos es
aconsejable:
Minimizar la cantidad de registros seleccionados (mediante la clusula WHERE)
Minimizar la transferencia de datos entre el servidor y la base de datos (usando listas
de campos)
Reducir el nmero de consultas a la base de datos (usando vistas o joins en vez de
selecciones anidadas)
Reducir la medida de la bsqueda (para optimizar el ndice de la tabla)
Minimizar la carga de la base de datos (usando los buffers)
Todas estas tcnicas pueden ser tiles pero no hay una regla definitiva para decidir
cundo utilizar cada una de ellas. Siempre tendremos que realizar un anlisis del
tiempo de ejecucin para decidir cul debemos usar.

Pgina 94 de 194

ABAP Fundamentos y Reporting

9 Bases de datos lgicas


Programas de ejemplo DEMO_BDL
Para leer los datos de una tabla de la base de datos podemos utilizar dos mtodos
bastante diferentes: la sentencia SELECT (Open SQL, SQL nativo (Exec SQL) o
Import/Export), o bien las bases de datos lgicas.
La funcin principal de las bases de datos lgicas es la reutilizacin del cdigo que
accede a la base de datos. SAP proporciona bases de datos lgicas para todas las
aplicaciones. stas han sido configuradas para un rendimiento ptimo y contienen
funciones extras como chequeos de autorizacin y ayudas de bsqueda.
Una base de datos lgica es un programa especial que lee datos de la base de datos.
Combina los contenidos de ciertas tablas de la base de datos, relacionadas entre ellas
mediante claves externas, de forma que establece una jerarqua entre ellas.
Para dar un ejemplo de las diferencias de los dos mtodos de acceso, tomemos la base de datos
lgica F1S, que tiene la siguiente estructura:

Una base de datos lgica es un programa auxiliar que slo puede ser utilizado en
conjuncin con programas ejecutables de tipo 1. Se crea el enlace entre estos
programas cuando se introduce el nombre de la BDL en los atributos del ejecutable.
Una misma base de datos lgica se puede utilizar en varios programas ejecutables.
A partir de la versin 4.5a no es obligatorio enlazar la base de datos al programa
ejecutable a travs de los atributos. Ahora tambin es posible llamar a las bases de
datos lgicas utilizando el mdulo de funcin LDB_PROCESS. Esto nos permite llamar
a varias bases de datos lgicas desde cualquier programa ABAP. Tambin es posible
llamar a las bases de datos lgicas ms de una vez en un programa.
En resumen, para crear un listado mediante una BDL, necesitamos dos programas:
uno que lee la tabla (la base de datos lgica) y un segundo que procesa los datos.
Estos programas se comunican mediante los eventos PUT y GET.
El siguiente esquema muestra como se codificaran dos programas para acceder a un dato de la
tabla SBOOK:
Programa con SELECT:

Programa con BBDD lgica:

REPORT

REPORT

TABLES: SPFLI,

TABLES: SPFLI,

SFLIGHT,

SFLIGHT,

SBOOK.

SBOOK.

START-OF-SELECTION.
SELECT * FROM SPFLI WHERE

START-OF-SELECTION.
GET SPFLI.

<bloque de procesamiento>

<bloque de procesamiento>

Pgina 95 de 194

ABAP Fundamentos y Reporting


SELECT * FROM SFLIGHT WHERE

GET SFLIGHT.

<bloque de procesamiento>

<bloque de procesamiento>

SELECT * FROM SBOOK WHERE

GET SBOOK

<bloque de procesamiento>
ENDSELECT.

<bloque de procesamiento>
END-OF-SELECTION.

ENDSELECT.
ENDSELECT.

Es apropiado utilizar una base de datos lgica siempre que las tablas que queremos
leer se correspondan con la estructura y cuando el flujo de seleccin-lecturaprocesamiento-visualizacin coincida con los requerimientos de la aplicacin.

9.1 Partes de una BDL


Una base de datos lgica se edita usando una herramienta del ABAP Workbench.
Consta de las siguientes partes:
Estructura

Determina las tablas de la base de datos a las que puede


acceder. Adopta la jerarqua de las tablas definida por sus
relaciones de clave externa. Controla tambin la secuencia
en que se accede a las tablas.

Pantalla de seleccin

Define los campos de entrada para filtrar los datos. Se


muestra cuando se ejecuta el programa ejecutable
asociado. Los campos tambin estn disponibles en el
programa; se les pueden asignar valores iniciales.

Programa de lectura

Contenedor de subrutinas especiales en las que se leen los


datos de la base de datos. El programa de sistema, que
controla el flujo del programa ejecutable, llama a estas
subrutinas en un orden determinado por la estructura.

9.2 Utilizacin clsica


Cuando enlazamos una base de datos lgica con un programa ejecutable, el usuario
puede introducir valores en la pantalla de seleccin. En la pantalla de seleccin solo
aparecen los campos de entrada (criterios de bsqueda) que se han especificado en el
programa ejecutable mediante la sentencia TABLES en la parte de declaraciones.
Antes de que el programa de sistema haga la solicitud de datos a la base de datos
lgica, se produce el evento START-OF-SELECTION. Se ejecutan las instrucciones
del programa ejecutable que estn en este bloque de evento.
La estructura de la base de datos lgica determina la secuencia en la que se ejecutan
sus bloques de proceso, las subrutinas PUT_<tabla>. Los datos ledos mediante
sentencias OPEN SQL en estas subrutinas se devuelven al programa utilizando las
estructuras (reas de trabajo) definidas con la sentencia TABLES.
Cuando los datos han sido ledos desde la base de datos lgica se lanza el evento
GET <tabla>. El programa ejecutable los procesa en el bloque de evento GET
correspondiente, si existe. Los bloques de evento GET determinan la profundidad de
lectura en la estructura de la base de datos lgica.
Cuando todas las tablas subordinadas a una dada han sido procesadas, y antes de
que se lea la siguiente entrada de la tabla principal, se lanza el evento GET <tabla>
LATE.

Pgina 96 de 194

ABAP Fundamentos y Reporting


Despus de que se hayan producido todos los eventos de la base de datos lgica
porque se han ledo todas las entradas seleccionadas, se lanza el evento END-OFSELECTION.
Para obtener ms informacin acerca de las BDL consultar la ayudas o la transaccin
/n SE36.

9.3 Funcin LDB_PROCESS


Cuando llamamos a una base de datos lgica utilizando el mdulo de funcin
LDB_PROCESS, no se muestra su pantalla de seleccin. En lugar de ello, tendremos
que rellenar las selecciones utilizando los parmetros de la interfase del mdulo de
funcin. La base de datos lgica no lanzar ningn evento GET en el programa
llamante, sino que devolver los datos en las rutinas de vuelta.
No es necesario adaptar una base de datos lgica para utilizarla con LDB_PROCESS.
La nica excepcin es que necesitemos utilizar el mdulo de funcin para llamar a la
misma base de datos lgica ms de una vez. No se llama a la subrutina PAI cuando
utilizamos LDB_PROCESS. Esto significa que no se realizar ninguna de las
verificaciones programadas para la seleccin. Podemos tratar estas restricciones
incluyendo
las
subrutinas
LDB_PROCESS_INIT
y
LDB_PROCESS_CHECK_SELECTIONS en el programa de la base de datos.

9.3.1 Comportamiento en tiempo de ejecucin


Las subrutinas de la base de datos lgica son llamadas en la siguiente secuencia
cuando llamamos al mdulo de funcin LDB_PROCESS:
LDB_PROCESS_INIT
INIT
LDB_PROCESS_CHECK_SELECTIONS
PUT <nodo>

9.3.2 Parmetros de LDB_PROCESS


El mdulo de funcin tiene los siguientes parmetros IMPORT:
LDBNAME

Nombre de la base de datos lgica que queremos llamar.

VARIANT

Nombre de la variante para rellenar la pantalla de seleccin de


la base de datos lgica. La variante debe estar ya asignada al
programa de la base de datos de la base de datos lgica. Los
datos se pasan de la misma forma que cuando utilizamos la
opcin WITH SELECTION-TABLE de la sentencia SUBMIT.

EXPRESSIONS

En este parmetro, podemos pasar selecciones adicionales


para los nodos de la base de datos lgica para la que estn
permitidas selecciones dinmicas. El tipo de datos del
parmetro RSDS_TEXPR est definido en el grupo de tipos
RSDS. Los datos se pasan de la misma forma que cuando
utilizamos la opcin WITH FREE SELECTION de la sentencia
SUBMIT.

FIELD_SELECTION

Podemos utilizar este parmetro para pasar una lista de los


campos requeridos para los nodos de la base de datos lgica
para la que se permitan selecciones dinmicas. El tipo de
datos del parmetro es el de la tabla interna RSFS_FIELDS,
definido en el grupo de tipos RFS. El componente

Pgina 97 de 194

ABAP Fundamentos y Reporting


TABLENAME contiene el nombre del nodo y el componente
FIELDS contiene los nombres de los campos que queremos
leer.
El mdulo de funcin tiene los siguientes parmetros TABLES:
CALLBACK

Utilizaremos este parmetro para asignar las rutinas de vuelta a los


nombres de los nodos y eventos. El parmetro determina los nodos
de la base de datos lgica de los que se van a leer los datos, y
cundo se van a devolver los datos al programa y en qu rutina de
vuelta.

SELECTIONS

Podemos utilizar este parmetro para pasar valores de entrada a los


campos de la pantalla de seleccin de la base de datos lgica. El
tipo de datos del parmetro se corresponde con el de la estructura
RSPARAMS del Diccionar io ABAP. Los datos se pasan de la misma
forma que cuando utilizamos la opcin WITH SELECTION-TABLE de
la sentencia SUBMIT.

Si pasamos selecciones utilizando ms de un parmetro de la interface, los valores


pasados en SELECTIONS y EXPRESSIONS sobreescriben los valores de los mismos
campos de VARIANT.

9.3.3 Profundidad de la Lectura y Rutinas de Vuelta


Cuando enlazamos una base de datos lgica con un programa ejecutable, las
sentencias GET determinan la profundidad para la que se leer la base de datos lgica.
Cuando llamamos al mdulo de funcin LDB_PROCESS, determinamos esta
profundidad especificando el nombre del nodo en el parmetro CALLBACK. Para cada
nodo para el que queramos pedir datos, se puede ejecutar una rutina de vuelta en dos
puntos. Estos se corresponden con los eventos GET y GET LATE de los programas
ejecutables. En el parmetro CALLBACK, especificaremos el nombre de la rutina de
vuelta y el punto de ejecucin requerido para cada nodo. Una rutina de vuelta es una
subrutina del programa llamante o de otro programa que se debe ejecutar en un punto
determinado.
Para el evento GET, la rutina de vuelta se ejecuta directamente despus de que se
hayan ledo los datos del nodo, y antes de que se procesen los nodos subordinados.
Para el evento GET LATE, la rutina de vuelta se procesa despus de que se hayan
procesado los nodos subordinados.
El tipo de lnea del parmetro de tabla CALLBACK es la estructura LDBCB del
Diccionario ABAP. Tiene los siguientes componentes:
LDBNODE

Nombre del nodo de la base de datos lgica a leer.

GET

Un flag (contiene X o espacio), para llamar a la correspondiente rutina


de vuelta del evento GET.

GET_LATE

Un flag (contiene X o espacio), para llamar a la correspondiente rutina


de vuelta del evento GET LATE.

CB_PROG

Nombre del programa ABAP en el que se encuentra definida la rutina


de vuelta.

CB_FORM

Nombre de la rutina de vuelta.

Si pasamos una tabla interna al parmetro CALLBACK, debemos rellenar al menos


una de las columnas GET o GET_LATE con una X para cada nodo.
Una rutina de vuelta es una subrutina que debe tener definida la siguiente interface de
parmetros:

Pgina 98 de 194

ABAP Fundamentos y Reporting


FORM <subrutina> USING <nodo> LIKE LDBCB-LDBNODE
<at>

[TYPE <t>]

<evento>
<verificar>.

Los parmetros son rellenados por el mdulo de funcin LDB_PROCESS. Estos


parmetros tienen el siguiente significado:
<nodo>

contiene el nombre del nodo.

<at>

es el rea de trabajo de los datos ledos del nodo. El programa que


llame al mdulo de funcin LDB_PROCESS y el programa que contenga
la rutina de vuelta no tienen que declarar la interface de reas de trabajo
NODES o TABLES. Si la rutina de vuelta slo se utiliza para un nodo,
podemos utilizar TYPE para hacer referencia al tipo de datos del nodo
del Diccionario ABAP. Slo entonces podremos acceder directamente a
los componentes individuales de los nodos estructurados en la
subrutina. Si utilizamos la rutina de vuelta para ms de un nodo, no
podemos utilizar la referencia TYPE. En este caso, tendremos que
acceder a los componentes de los nodos estructurados asignndolos
uno a uno a un field-symbol.

<evento>

contiene G o L, para GET o GET LATE respectivamente. Esto significa


que la subrutina puede dirigir el flujo del programa utilizando el contenido
de <evento>.

<verificar>

permite que la rutina de vuelta pueda influir en cmo se comportar el


programa despus (pero slo si <evento> contiene el valor G). Se
asignar el valor X al parmetro cuando se llame a la subrutina. Si tiene
el valor espacio cuando termina la subrutina, indica que los nodos
subordinados no deberan de procesarse en el mdulo de funcin
LDB_PROCESS. Tiene el mismo efecto que cuando abandonamos el
bloque del evento GET utilizando la sentencia CHECK en un programa
ejecutable. Esto evita que se lean datos innecesarios, y mejora el
rendimiento de nuestro programa.

9.3.4 Excepciones de LDB_PROCESS


LDB_ALREADY_RUNNIN
G

No se puede llamar a una base de datos lgica si an se


est procesando en una llamada previa. Si esto ocurre, se
lanza esta excepcin.

LDB_NOT_REENTRANT

slo se puede llamar a una base de datos lgica


repetidamente si el programa de la base de datos
contiene la subrutina LDB_PROCESS_INIT, en otro caso
se lanzar esta excepcin.

LDB_SELECTIONS_NOT
_ACEPTED

se ha producido en error en el manejo de la subrutina


LDB_PROCESS_CHECK_SELECTIONS del programa
de la base de datos. El mensaje de error se coloca en los
campos usuales del sistema (SY-MSG...)

Para una informacin ms detallada acerca de otras excepciones, vase la


documentacin del mdulo de funcin.

9.3.5 Ejemplo
TABLES SPFLI.

Pgina 99 de 194

ABAP Fundamentos y Reporting


SELECT-OPTIONS S_CARR FOR SPFLI-CARRID.
TYPE-POOLS: RSDS, RSFS.
DATA: VUELTA

TYPE TABLE OF LDBCB,

AT_VUELTA LIKE LINE OF VUELTA.


DATA: TABSEL

TYPE TABLE OF RSPARAMS,

AT_TABSEL LIKE LINE OF TABSEL.


DATA: TEXPR TYPE RSDS_TEXPR,
CSEL

TYPE RSFS_FIELDS.

AT_VUELTA-LDBNODE

= 'SPFLI'.

AT_VUELTA-GET

= 'X'.

AT_VUELTA-GET_LATE = 'X'.
AT_VUELTA-CB_PROG

= SY-REPID.

AT_VUELTA-CB_FORM

= 'VUELTA_SPFLI'.

APPEND AT_VUELTA TO VUELTA.


CLEAR AT_VUELTA.
AT_VUELTA-LDBNODE

= 'SFLIGHT'.

AT_VUELTA-GET

= 'X'.

AT_VUELTA-CB_PROG

= SY-REPID.

AT_VUELTA-CB_FORM

= 'VUELTA_SFLIGHT'.

APPEND AT_VUELTA TO VUELTA.


AT_TABSEL-KIND

= 'S'.

AT_TABSEL-SELNAME = 'CARRID'.
LOOP AT S_CARR.
MOVE-CORRESPONDING S_CARR TO AT_TABSEL.
APPEND AT_TABSEL TO TABSEL.
ENDLOOP.
CALL FUNCTION 'LDB_PROCESS'
EXPORTING
LDBNAME

= 'F1S'

VARIANT

= ' '

EXPRESSIONS

= TEXPR

FIELD_SELECTION = CSEL
TABLES

Pgina 100 de 194

ABAP Fundamentos y Reporting


CALLBACK

= VUELTA

SELECTIONS = TABSEL
EXCEPTIONS
LDB_NOT_REENTRANT

= 1

LDB_INCORRECT

= 2

LDB_ALREADY_RUNNING

= 3

LDB_ERROR

= 4

LDB_SELECTIONS_ERROR

= 5

LDB_SELECTIONS_NOT_ACCEPTED = 6
VARIANT_NOT_EXISTENT

= 7

VARIANT_OBSOLETE

= 8

VARIANT_ERROR

= 9

FREE_SELECTIONS_ERROR

= 10

CALLBACK_NO_EVENT

= 11

CALLBACK_NODE_DUPLICATE

= 12

OTHERS

= 13.

IF ( SY-SUBRC <> 0.)


WRITE: 'Excepcin con SY-SUBRC', SY-SUBRC.
ENDIF.
FORM VUELTA_SPFLI USING NOMBRE TYPE LDBN-LDBNODE
AT

TYPE SPFLI

EVENTO TYPE C
VERIF

TYPE C.

CASE EVENTO.
WHEN 'G'.
WRITE: / AT-CARRID, AT-CONNID, AT-CITYFROM, AT-CITYTO.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM.
FORM VUELTA_SFLIGHT USING NOMBRE TYPE LDBN-LDBNODE
AT

TYPE SFLIGHT

EVENTO TYPE C
VERIF

TYPE C.

WRITE: / AT-FLDATE, AT-SEATSOCC, AT-SEATSMAX.


ENDFORM.

Pgina 101 de 194

ABAP Fundamentos y Reporting


El programa est escrito para leer informacin de la base de datos lgica F1S. La
estructura de F1S es:
Se define una pantalla de seleccin especfica al principio del programa. Esto requiere
que incluyamos la sentencia TABLES. Despus se definen las variables requeridas
para la interface.
La tabla interna VUELTA se rellena para las diferentes rutinas de vuelta que se
llamarn en el programa para los dos nodos SPFLI y SFLIGHT. Para SPFLI, la rutina
se llamar para GET y GET_LATE, para SFLIGHT slo se llamar para el evento GET.
La tabla interna TABSEL se rellena con los valores para el nodo SPFLI a partir de la
tabla de seleccin S_CARR de la pantalla de seleccin especfica del programa.
Despus, el programa llama al mdulo de funcin LDB_PROCESS con estos
parmetros.
Las subrutinas VUELTA_SPFLI y VUELTA_SFLIGHT sirven de rutinas de vuelta. El
parmetro AT se especifica completamente, y por lo tanto podremos acceder a los
componentes individuales del rea de trabajo. Los eventos GET y GET LATE se tratan
de forma diferente en VUELTA_SPFLI.
El comienzo del listado de salida mostrara algo como esto:

Pgina 102 de 194

ABAP Fundamentos y Reporting

Pgina 103 de 194

ABAP Fundamentos y Reporting

10 Tablas Internas
En el tema de objetos de datos ya hemos hablado de las tablas internas, que son
secuencias de registros del mismo tipo.
Las tabla internas se utilizan normalmente para tener accesibles en la memoria del
programa ciertos datos fuente o resultados del proceso. Ejemplos de usos tpicos son:
Guardar temporalmente datos de tablas de la base de datos para procesarlos a
continuacin.
Guardar datos que se mostrarn despus en un listado.
Almacenar datos para pasarlos a ficheros locales u otros destinos.
El nmero de lneas en una tabla interna no es predeterminado ni esttico. El sistema
las expande de manera dinmica en tiempo de ejecucin en funcin de las
necesidades. El nico lmite es el de capacidad mxima establecida durante la
instalacin. El espacio de memoria inicial reservado para una tabla interna son 8 Kb y
si se necesita ms memoria se expande en bloques de esta misma medida.

10.1 Atributos de las tablas


Para describir una tabla interna usamos atributos, el principal de los cuales es el tipo
de lnea. El tipo de lnea determina la estructura de los registros que se pueden
guardar en la tabla: puede consistir en cualquier tipo de datos ABAP, incluidas otras
tablas internas.
Otro atributo de las tablas internas el la clave. La clave es una secuencia de campos
de la tabla que permite identificar registros en ella. Las claves pueden ser UNIQUE o
NON-UNIQUE en funcin de si se permiten o no varias entradas con la misma clave.
Otro atributo seria el tipo de acceso de tabla, caracterstica que hace referencia a la
manera cmo se accede a los datos de la tabla. Existen tres tipos:
Las tablas estndar mantienen un ndice o contador de registros interno. Se puede
acceder a ellas por el ndice o por la clave. La clave puede ser NON-UNIQUE.
Las tablas ordenadas se mantienen ordenadas respecto a la clave. Tambin se
mantiene un ndice interno y se puede acceder a ellas por el ndice o por la clave. La
clave puede ser UNIQUE o NON-UNIQUE.
Las tablas hash no mantienen un ndice interno, slo se puede acceder a ellas por la
clave. Requieren que la clave sea UNIQUE.
El tipo de tabla que escojamos depender del tipo de acceso que queramos realizar.
Deberamos usar tablas estndar si queremos acceder normalmente por el ndice,
tablas ordenadas si nos interesa acceder normalmente por la clave y tablas hash si
slo accederemos a los registros usando su clave.
En este curso slo hablaremos de las tablas estndar.
Ver programas de ejemplo:
DEMO_INTERNAL_TABLE
DEMO_INT_TABLES_*

Pgina 104 de 194

ABAP Fundamentos y Reporting


10.2 Operaciones y reas de trabajo
No est permitido el acceso directo a los registros de las tablas internas. Las
operaciones se realizan mediante reas de trabajo o work areas, que son un registro
con la misma estructura que las lneas de la tabla interna.
Se pueden realizar las siguientes operaciones con las tablas internas:
Sentencia

Efecto

APPEND

Aade los contenidos de un rea de trabajo al final de una tabla


interna.

INSERT

Insertar los contenidos de un rea de trabajo en una cierta lnea de


una tabla interna (dada por el nmero de lnea).

MODIFY

Sobreescribe una cierta lnea de la tabla interna con los contenidos


de un rea de trabajo.

DELETE

Borra una cierta lnea de una tabla interna.

LOOP AT

Inserta los registros de la tabla interna uno a uno, en un bucle,


dentro de un rea de trabajo.

READ TABLE

Inserta exactamente un registro de la tabla interna en un rea de


trabajo.

SORT

Ordena una tabla interna

CLEAR

Borra un rea de trabajo o una tabla interna.

Veremos con ms detalle estas sentencias en apartados posteriores.

10.3 Declaracin: Tipos y Objetos


En la declaracin de un tipo de datos tabla interna o de un objeto de datos tabla
interna debemos especificar sus atributos: tipo de tabla, tipo de lnea, secuencia y tipo
de clave. Para las tablas estndar no hace falta indicar el tipo.
Tambin podemos especificar un tamao inicial en nmero de registros para la tabla
interna con la adicin INITIAL SIZE.
TYPES <ttabla> TYPE <tipo_tabla> OF <tipo_linea>
[ WITH {UNIQUE|NON-UNIQUE} KEY <def_clave> ]
[ INITIAL SIZE <n> ]
[ WITH HEADER LINE ].
DATA <otabla> TYPE <tipo_tabla> OF <tipo_linea>
[ WITH {UNIQUE|NON-UNIQUE} KEY <def_clave> ]
[ INITIAL SIZE <n> ]
[ WITH HEADER LINE ]

Las tablas internas se pueden definir con o sin cabecera (header-line).


Las primeras estn formadas por un rea de trabajo y el cuerpo de la tabla, y a ambos
elementos se accede con el mismo nombre. La interpretacin depende del contexto
donde se encuentre el nombre. Para evitar confusiones se recomienda usar tablas sin
cabecera, pero por otro lado la cabecera permite a menudo usar sentencias ms
cortas para ciertas operaciones.
Para declarar una tabla interna con cabecera usamos la adicin WITH HEADER LINE
en la sentencia DATA.

Pgina 105 de 194

ABAP Fundamentos y Reporting


Con el parmetro "occurs <n>" indicamos que es una tabla interna formada por <n>
registro y 1 header line, si desconocemos el nmero de registros que va a contener
nuestra tabla indicar "occurs 0".
Podemos crear una tabla con la misma estructura que una tabla del diccionario de
Abap/4, es decir, copia la definicin de la tabla del diccionario en nuestra tabla interna.
Tambin podemos hacer referencia a estructuras de reports internas con esta
instruccin.
DATA: BEGIN OF

<itab> OCCURS 5,

INCLUDE STRUCTURE sflight.


DATA: END OF <itab>.

Para este tipo de tabla tendremos que definirnos previamente un field string que haga
las funciones de header line, o lo que es lo mismo, de WA.

10.4 Aadir registros


10.4.1

Append

Almacena el contenido del header line al final de la tabla interna. Tambin es posible
almacernarlo por un orden en concreto.
APPEND <itab> [SORTED BY <field>].

Si se ha sobrepasado el nmero de registros de la tabla interna se comenzaran a


eliminar los ltimos registros de la tabla.
En vez de utilizar el header line como lnea auxiliar podemos introducir datos en una
tabla interna con ayuda de un field string, pero tienen que tener la misma definicin. A
esto se le llama trabajar con un Work Area.
APPEND <wa> TO <itab>.

Esto es mas rpido que asignar un <WA> al header line de la tabla y realizar
posteriormente un append.

10.4.2

Collect

Almacena el contenido del header line en la tabla interna, con la particularidad que si
encuentra un registro con la misma clave, sumara el contenido de los campos
numricos si el registro los tuviera. Es decir, totaliza los campos numricos.
COLLECT <itab>.

10.5 Leer registros


10.5.1

Loop

Podemos procesar mltiples registros de una tabla interna con la sentencia de bucle
LOOP. A cada paso del bucle se copia el siguiente registro de la tabla interna en el
rea de trabajo especificada por la palabra INTO o en la lnea de cabecera de la tabla.
Se pueden determinar los registros a leer especificando algunos campos clave o
indicando los ndices.
LOOP AT <tabla>
[ INTO <area> ]
[ FROM <i1> TO <i2> ]
[ WHERE <campo_clave1> = <valor1> ...].

Pgina 106 de 194

ABAP Fundamentos y Reporting


ENDLOOP.

Si no hay ningn registro que cumpla las condiciones especificadas en el bloque


WHERE o en el rango de ndices, el sistema devuelve un cdigo de retorno SYSUBRC <> 0.
En el campo de sistema SY-TABIX se encuentra el ndice del registro que estamos
leyendo en un cierto paso del bucle. Cuando acaba el bucle SY-TABIX recupera el
valor que tena antes del LOOP.

10.5.2

Read

Permite leer un registro concreto de una tabla interna. Se pueden usar tanto los
valores de los campos clave (WITH KEY) como el ndice del registro (INDEX). Si se
usa la adicin FROM se toman los valores de bsqueda de los campos
correspondientes del rea indicada. El sistema lee el primer registro de la tabla que
corresponde al criterio de bsqueda indicado.
READ TABLE <tabla>
[ INTO <area> ]
[ WITH KEY <campo_clave> = <valor>]
[ FROM <area> ]
[ INDEX <indice>]

El contenido ledo se guarda en el rea de trabajo especificada con INTO o en la


cabecera (header line) de la tabla interna.
Si la lectura tiene xito, el campo SY-SUBRC contiene el valor 0, otros cdigos de
retorno indican que no se pudo realizar el acceso.
El campo SY-TABIX se llena con el ndice del registro ledo.
READ TABLE <itab> WITH KEY

'LH 0400'. Leemos por clave primaria.

READ TABLE <itab> INDEX tab-index.

Leemos por posicin de fila.

10.6 Modificaciones
Estas tres instrucciones permiten procesar registros concretos especificando su ndice
o especificando la clave.

10.6.1

Modify

Sobrescribe el registro con ndice i con los contenidos del rea de trabajo. La lnea i
debe existir previamente.
MODIFY <tabla> [ FROM <area> ] [INDEX <i>].

O modifica el registro que tiene los mismos campos clave que el rea con el contenido
de sta.
MODIFY TABLE <tabla> [ FROM <area> ].

10.6.2

Insert

Crea un nuevo registro en la posicin anterior a la lnea i usando los contenidos del
rea de trabajo. Si la tabla tiene i-1 registros, es equivalente a un APPEND, pues
aadimos el nuevo registro al final de la tabla.
INSERT [ <area> INTO ] <tabla> [INDEX <i>].

Pgina 107 de 194

ABAP Fundamentos y Reporting


O inserta un nuevo registro en la tabla interna con el contenido del rea.
INSERT [ <area> INTO ] TABLE <tabla>.

10.6.3

Delete

Borra el registro especificado de la tabla interna. Si no especificamos la clusula "index


<i>" borraremos el registro que concuerda con el que tenemos en la cabecera.
Tambin es posible borrar un rango de registros.
DELETE <tabla> [INDEX <i>].
DELETE <tabla> where Carrid NE 'LH'. Es posible borrar por un criterio.
DELETE <tabla>
limites.

FROM

<id1>

TO

<id2>.

Se

borra

por

rango,

incluidos

los

DELETE TABLE <tabla> [ FROM <area>].

10.7 Inicializar tablas


10.7.1

Refresh

Borra todos los registros de la tabla. No descarga el espacio de memoria usado por
esta. El header line se mantiene igual.
REFRESH <itab>.

10.7.2

Clear

Borra la cabecera de la tabla interna si existe. Si no borra toda la tabla.


CLEAR <itab>.

10.7.3

Free

Borra los registros de la tabla y libera el espacio de memoria usado por esta. El header
line se mantiene igual.
FREE <itab>.

10.8 Describir y ordenar


10.8.1

Atributos

Permite obtener informacin acerca de una tabla interna mediante dos clusulas:
Lines: Retorna el nmero de entradas que contiene la tabla.
Occurs: Retorna en valor de Occurs de la definicin.
DESCRIBE TABLE <itab> [LINES] resul_lines [OCCURS] resul_occurs.

10.8.2

Sort

Permite ordenar una tabla interna. Esta ordenacin puede hacerse indistintamente
ascendente o descendentemente por uno o varios campos. No es necesario que todos
tengan el mismo orden, es decir podemos ordenar una tabla por un campo
descendentemente y a su vez por otro ascendentemente. La secuencia de campos
determina la jerarqua de ordenacin.
SORT <tabla> BY <f1> [{ASCENDING|DESCENDING} [AS TEXT]]
<f2> [{ASCENDING|DESCENDING} [AS TEXT]]...

Pgina 108 de 194

ABAP Fundamentos y Reporting


Se pueden ordenas campos de texto con la adicin AS TEXT. Esto permite ordenar en
funcin del lenguaje de conexin. Si es necesario utilizar un cierto lenguaje podemos
usar la sentencia SET LOCALE.
Sort <itab> by price fldate.
Sort <itab> by price ascending fldate descending.

Que pasa con los tipos P,I y F?

Pgina 109 de 194

ABAP Fundamentos y Reporting

11 Crear listas
Las listas son pantallas de resultados que muestran datos de manera estructurada. Se
definen formatean y llenan usando sentencias ABAP. El sistema muestra las listas
definidas con sentencias ABAP en una pantalla especial de lista, cuya lgica de flujo
es proporcionada por el sistema y permanece oculta para el programador.
Las listas son importantes porque slo los datos en forma de lista pueden ser enviados
al Spool de R/3 para su impresin.
Antes de decidir que crearemos un programa nuevo para proporcionarle un listado
concreto a un usuario deberamos buscar otros medios. Es posible que se pueda
configurar un listado estndar para obtener lo que necesita, o que podamos utilizar
herramientas como el ABAP Query.
Si no hay otra opcin, crearemos un programa de tipo 1.
En los programas ejecutables, de tipo 1, se muestra automticamente una lista
despus de procesarlo siempre que se haya incluido una de las sentencias que genera
lneas (WRITE, SKIP o ULINE).
Todas las lneas generadas se almacenan temporalmente en un buffer de lista hasta
que acaba la ejecucin. Entonces todos los datos se muestran en una pantalla de lista.
Si no indicamos lo contrario, el listado estar formado por una nica pgina continua
de como mximo 60000 lneas. La mxima longitud de una lnea son 1023 caracteres.
Veremos que hay muchas opciones para el diseo del listado: de escritura
(posicionamiento, colores, separadores, iconos), de formato (ancho de la lista,
clasificacin) y de diseo de pgina (cabeceras, saltos de pgina, pie de pgina).

11.1 Lista estndar


A continuacin se describen los recursos y sentencias que nos ayudarn a obtener el
formato deseado en el desarrollo de una lista.

11.1.1

Cabeceras y smbolos de texto

Como funcin estndar de los programas ejecutables, el sistema genera por defecto
dos lneas de cabecera (la cabecera estndar). La primera contiene el ttulo del
programa en la esquina izquierda superior y el nmero de pgina en la esquina
derecha. La segunda lnea es una lnea horizontal continua. Las dos lneas
permanecen en la ventana cuando nos desplazamos por el listado.
Cuando imprimimos un listado, la primera lnea de cabecera tiene a la izquierda la
fecha del sistema, en el centro el ttulo del programa y a la derecha el nmero de
pgina.
La lista estndar tiene una cabecera y hasta cuatro lneas de cabecera de columna
que se pueden crear bien desde el Editor usando las herramientas de mantenimiento
de los elementos de texto, o bien desde la propia lista una vez ejecutado el programa
a travs de la opcin de men (Sistema->Lista->Cabeceras). De esta segunda manera
es ms sencillo posicionar las cabeceras porque vemos la lista en pantalla.
Cuando no se ha creado un texto de cabecera se utiliza el ttulo del programa.
Como estos textos forman parte de los elementos de texto del programa, se pueden
traducir a varios lenguajes para que se muestren al usuario en el lenguaje escogido
por l para la conexin. Esta posibilidad es muy interesante para compaas
multinacionales.

Pgina 110 de 194

ABAP Fundamentos y Reporting


Los smbolos de texto son objetos literales que tambin forman parte de los elementos
de texto del programa y se pueden traducir sin tener que cambiar el cdigo fuente. Se
utilizan escribiendo TEXT-xxx o cadena(xxx). Podemos as crear listas
independientes del lenguaje.

11.1.2

WRITE

Mediante la sentencia WRITE podemos mostrar mensajes, ver el contenido de un


campo, encolumnar la salida de los datos, etc.
La sentencia WRITE tiene muchas opciones de formateo. Las principales son:
AT <columna>[(longitud)] <campo>.

Con esta sentencia escribimos el campo <campo> a partir de la columna <columna>


con una longitud de (longitud). El nmero indicado entre parntesis indica el numero
de posiciones del campo que vamos a mostrar, tcnicamente a esta operacin se le
denomina OFFSET.
NO-GAP

Suprime la escritura de espacios despus del campo <f>. Los


campos que se escriben uno a continuacin de otro aparecen
sin separacin.

NO-ZERO

Si los contenidos del campo f son iguales a cero, slo e


escriben espacios. Si f es de tipo C o N, se sustituyen los ceros
a la izquierda por espacios.

DD/MM/YY,

Si f es un campo de fecha (tipo D), sus contenidos se procesan


de acuerdo a los parmetros del usuario (y no segn la opcin
especificada).

CURRENCY w

Proceso adecuado del campo de importe segn la moneda del


campo w: esta moneda determina cuntas posiciones
decimales se usarn para el importe (tabla TCURX).

UNIT w

La unidad contenida en w determina a travs de la tabla T00G


cmo se escribe el campo f que contiene una cantidad (el
nmero de decimales).

USING EDIT
<mascara>

MASK

Escribe f siguiendo la plantilla <mascara>

UNDER g

La escritura del campo f empieza en la columna en la que se


ha escrito g.

LEFT-JUSTIFIED

Escritura justificada a la izquierda (es la opcin por defecto


para todos los tipos que no son I, P o F).

CENTERED

Escritura centrada

RIGHT-JUSTIFIED

Escritura justificada a la derecha (opcin por defecto para los


campos numricos I, P y F)

COLOR <n>.

Con esta sentencia escribimos el campo en un color determinado. Se puede escoger


entre siete colores de fondo a los que les corresponde un nmero o un nombre
simblico.
0

COL_BACKGROUND

Fondos

COL_HEADING

Cabeceras

COL_NORMAL

Lneas de lista

Pgina 111 de 194

ABAP Fundamentos y Reporting


3

COL-TOTAL

Totales

COL_KEY

Columnas clave

COL-POSITIVE

Valores positivos

COL_NEGATIVE

Valores negativos

COL_GROUP

Niveles de control

Write: /5 'Date, 20 Sy_DATUM.


Escribimos con un salto de lnea date (Columna 5), y la fecha del sistema (Columna 20). La
sentencia Write sin '/' no implica un salto de lnea
Write: /10(4) nombre.
Write: sbook-forcurmon CURRENCY sbook-forcurkey.
Da formato de miles al campo sbook-forcurom con las especificaciones del campo sbook-forcurkey.

11.1.3

Iconos y smbolos

Podemos utilizar la opcin AS SYMBOL de la sentencia WRITE para incluir smbolos


en listados. Los nombre simblicos de estos smbolos estn definidos en el include
<SYMBOL>.
Tambin podemos insertar iconos en el listado con WRITE <f> AS ICON. Para poder
hacerlo se debe ligar el include <ICON> al programa
Si incluimos el include <LIST> podremos trabajar tanto con smbolos como con iconos.

11.1.4

Check-boxes y campos de entrada

Si utilizamos la opcin AS CHECKBOX, el campo <f> se escribe como un check-box.


El contenido del primer carcter de f se interpreta como la condicin y puede ser
cambiado en pantalla por accin del usuario sobre l. Si contiene un espacio no est
marcado; si contiene una X est marcado.
Estos campos funcionan como campos de entrada y se pueden utilizar en listas
interactivas. Para conseguir que un campo cualquiera sea de entrada podemos utilizar
el parmetro adicional INPUT.

11.1.5

SKIP

Escribe lneas en blanco.


Ex: Skip 2. Escribe dos lneas en blanco.

11.1.6

ULINE

Escribe una lnea subrayada.


Ex: Uline.

11.2 Diseo de la pgina


Todos los programas de este tipo empiezan con la instruccin REPORT de ah su
nombre. Esta instruccin adems de indicar el nombre e inicio del programa, permite
sealar algunos de los atributos del programa como el alto y el ancho de listado, la
clase de mensajes que utiliza, etc.

Pgina 112 de 194

ABAP Fundamentos y Reporting


11.2.1

Dimensiones

Por defecto ABAP/4 crea listados de 80 caracteres de ancho, y 65 lneas de largo.


Estos valores se pueden modificar con los siguientes parmetros de la sentencia
REPORT:
LINE-SIZE <n>: define el ancho de la lista, la n indica el nmero de columnas.
LINE-COUNT <m> <p>: define el nmero de lneas m de cada pgina de la lista. El
valor especificado en p es el nmero de lneas reservadas para el pie de pgina (es
opcional).
Nota: Para obtener ayuda sobre una instruccin, situando el cursor sobre ella
pulsamos F1 nos saldr una pantalla de ayuda con la sintaxis y opciones de cada una
de ellas. Para la sentencia REPORT se muestra la ayuda:

En nuestro ejemplo aadiremos a la instruccin REPORT las siguientes opciones:


REPORT zreporxx NO STANDARD PAGE HEADING LINE-SIZE 120 LINE-COUNT 80.

11.2.2

Cabeceras no estndar

Si utilizamos la opcin NO STANDARD PAGE HEADING de la sentencia REPORT


suprimiremos la escritura de la cabecera del listado y de las cabeceras de columna.
Si queremos disear nosotros mismos la cabecera y el pie del listado, deberemos
utilizar los eventos TOP-OF-PAGE y END-OF-PAGE.
La primera sentencia WRITE del programa lanza el evento TOP-OF-PAGE. En el
bloque correspondiente a este evento podemos escribir lo que queremos que
aparezca al inicio de cada nueva pgina del listado.
Si no usamos la opcin NO STANDARD PAGE HEADING, las lneas que escribamos
en el bloque de TOP-OF-PAGE aparecern a continuacin de las cabeceras estndar.

Pgina 113 de 194

ABAP Fundamentos y Reporting


Las lneas generadas por TOP-OF-PAGE permanecen en la parte superior de la
ventana de visualizacin de la lista mientras nos desplazamos verticalmente.

11.2.3

Columnas fijas

Podemos utilizar SET LEFT SCROLL-BOUNDARY para fijar una serie de columnas
del listado de manera que cuando nos desplacemos horizontalmente se mantengan en
su lugar.
Si no especificamos la columna final con la adicin COLUMN, el sistema utiliza la
posicin de escritura actual (SY_COLNO) como lmite. El margen se debe especificar
en cada nueva pgina; situaremos la instruccin en el evento TOP-OF-PAGE.
Podemos usar tambin NEW-LINE NO-SCROLLING para evitar el desplazamiento de
la siguiente lnea al movernos horizontalmente.

11.2.4

Salto de pgina

La sentencia NEW-PAGE genera un salto de pgina.


Cuando generamos un listado, podemos utilizar los parmetros NO-TITLE o WITHTITLE de la sentencia NEW-PAGE para desactivar o reactivar la escritura del ttulo de
manera dinmica.
Los parmetros NO-HEADING y WITH-HEADING sirven para controlar de manera
anloga las cabeceras de columna.
Incluso cuando utilizamos la opcin NO STANDARD PAGE HEADING en la sentencia
REPORT podemos forzar la aparicin de los ttulos y cabeceras mediante los
parmetros anteriores.

11.2.5

Pie de pgina

El evento END-OF-PAGE permite que escribamos un pie de pgina al final de cada


pgina. Si se debe crear una nueva pgina para seguir con el listado, el sistema
procesa el bloque de evento correspondiente a END-OF-PAGE antes de ejecutar el
salto de pgina.
No se produce el evento END-OF-PAGE cuando una sentencia NEW-PAGE lanza un
salto de pgina. Este evento slo se procesa cuando la sentencia REPORT contiene
un parmetro LINE-COUNT que determina el nmero de lneas destinadas al pie de
pgina.

11.2.6

Sentencias adicionales

RESERVE <n> LINES.

Se ejecuta un salto de pgina si no hay suficiente espacio


para n lneas durante la estructuracin del listado.

BACK

Sin RESERVE: Vuelve a la primera lnea de la pgina actual


despus del TOP-OF-PAGE.
Con RESERVE: Vuelve a la primera lnea escrita despus
del RESERVE.

SKIP TO LINE <n>

La siguiente escritura se har en la lnea n. Se puede volver


atrs del listado.

11.3 Sentencia FORMAT


Se pueden fijar formatos con esta sentencia. Surten efecto en la siguiente escritura
con WRITE. Todas sus opciones se pueden usar con la sentencia WRITE, pero

Pgina 114 de 194

ABAP Fundamentos y Reporting


entonces slo afectan al campo que se escribe. En cada nuevo evento se inicializan
todas las opciones de formato a sus valores iniciales.
Las opciones que se pueden utilizar son:
COLOR n

[ON|OFF]

Colorea el fondo de la lnea

INTENSIFIED

[ON|OFF]

Afecta al color de fondo: cada color tiene dos


apariencias, la normal y la intensificada

INVERSE

[ON|OFF]

Afecta a los colores de fondo y de letra

HOTSPOT

[ON|OFF]

Afecta a la visualizacin del puntero del ratn y al


efecto de un solo click

INPUT

[ON|OFF]

Genera un campo de entrada

RESET

Resetea todos los formatos a sus valores iniciales

11.4 Dibujar lneas


Se puede generar una lnea horizontal con la sentencia ULINE, o con el campo de
sistema SY-ULINE en una sentencia WRITE o con ms de un signo menos - en una
sentencia WRITE.
Para generar lneas verticales debemos escribir el campo SY-VLINE en una sentencia
WRITE. Una serie de lneas verticales SY-VLINE en lneas consecutivas aparecer
como una lnea vertical continua.
Se pueden usar estos elementos para enmarcar una lista, separar ttulos de una lista
de lneas horizontales o separar columnas con lneas verticales. Tambin para crear
tablas y rboles.

11.5 Niveles de control


Cuando extraemos datos de la base de datos, no los obtenemos en el orden y con el
formato que deseamos mostrar en la lista. Por eso necesitamos un almacenamiento
temporal en la memoria del programa.

Hay dos tcnicas posibles para formatear los datos por niveles: usando tablas internas
o usando extract datasets.

Pgina 115 de 194

ABAP Fundamentos y Reporting


11.5.1

Tablas internas

Existen en ABAP estructuras de control especiales para los niveles de control en


tablas internas. Todas empiezan con AT y terminan con ENDAT. Estas sentencias slo
se pueden usar dentro de un LOOP.
AT FIRST.

[SUM.] ENDAT.

AT NEW <f>.

[SUM.] ENDAT.

AT END OF <f>. [SUM.] ENDAT.


AT LAST.

[SUM.] ENDAT.

Los bloques de sentencias AT FIRST y AT LAST se ejecutan exactamente una vez, el


primero en la primera vuelta del bucle antes de procesar las lneas y el segundo en la
ltima vuelta, despus de procesar todas las lneas.
Los bloques de sentencias AT NEW <f> y AT END OF <f> se ejecutan si el campo <f>
de la tabla interna, o un campo a su izquierda, tiene un valor diferente en la lnea
actual del que tena en la lnea precedente o en la posterior, respectivamente.
Despus del AT, dentro del nivel de control, todos los campos a su derecha se llenan
con * o con los valores iniciales.
Al final del proceso del nivel de control, despus del ENDAT, el contenido que haba al
principio de la vuelta del bucle es recuperado.
La sentencia SUM dentro de un bloque ATENDAT proporciona en el rea de trabajo
el total para el nivel de control correspondiente de todos los campos de tipo P, I y F.
REPORT.

TYPES: BEGIN OF struct_conn,


cityfrom LIKE spfli-cityfrom,
cityto

LIKE spfli-cityto,

carrid

LIKE spfli-carrid,

deptime

LIKE spfli-deptime,

...
END OF struc_conn.
DATA: itab_conn TYPE TABLE OF struc_conn,
wa_conn TYPE struc_conn.
...
SORT itab_conn.
LOOP AT itab_conn INTO wa_conn.
AT FIRST. [...]. ENDAT.
AT NEW cityfrom. WRITE wa_conn-cityfrom. ENDAT.
AT NEW cityto.

WRITE AT /pos1 wa_conn-cityto. ENDAT.

WRITE AT /pos2 wa_conn-deptime,


pos3 wa_conn-carrid,
pos4 wa_conn-fltime ...
AT END OF cityto. SUM. WRITE AT /pos4 wa_conn-fltime. ENDAT.
AT END OF cityfrom. [...] ENDAT.
AT LAST. [...] ENDAT.

Pgina 116 de 194

ABAP Fundamentos y Reporting


ENDLOOP.

La jerarqua de los niveles de control se basa en el orden de los campos en la tabla


interna. La tabla debe de estar ordenada de acuerdo a sus campos.
Cuando se implementan niveles de control, se debe seguir dentro del LOOP la
secuencia de los campos de la tabla interna (que coincide con la secuencia de
ordenacin) tal como se ve en el ejemplo.

11.5.2

Extract datasets

Existen objeto de datos, llamados extract datasets, que se declaran con la sentencia
FIELD-GROUPS y que pueden contener slo datos globales del programa. Se deben
especificar los datos globales que se almacenarn en cada field-group con la
sentencia INSERT INTO. La sentencia INSERT no se considera declarativa, y se
pueden expandir los field-groups en el curso del programa. La consecuencia es que
tenemos diversos tipos de registros con campos que se pueden asignar
dinmicamente, en contraposicin al tipo de lnea nico y esttico de las tablas
internas.
Existe un field-group especial que se denomina HEADER, que contiene los campos
utilizados para ordenar y que se sita delante de cada registro del dataset. Debe
contener todos los campos que se desea utilizar en el procedimiento de ordenacin.

Con la sentencia EXTRACT se escriben todos los campos del field-group como un
registro al dataset secuencial pasando los valores entre campos del mismo nombre.
Una vez que se ha ejecutado una sentencia EXTRACT ya no es posible expandir con
INSERT el field-group.
REPORT z_extracts.

FIELD-GROUPS: header, connections, flights.


INSERT: spfli-cityfrom spfli-cityto spfli-deptime INTO header,
spfli-carrid spfli-connid INTO connections,
sflight-price sflight-currency seatsfree INTO flights.
START-OF-SELECTION.
IF date=X.
INSERT: sflight-fldate INTO header.
ELSE.
INSERT: dummy INTO header,
sflight-fldate INTO flights.
ENDIF.

Pgina 117 de 194

ABAP Fundamentos y Reporting


GET spfli FIELDS cityfrom carrid connid cityto deptime arrtime.
EXTRACT connections.
GET spfli ...
EXTRACT flights.
END-OF-SELECTION.
SORT.
LOOP.
[...]
ENDLOOP.

Se puede ordenar el dataset con la sentencia SORT y procesarlo con LOOP.


La sentencia SORT sin adiciones ordena el dataset en orden ascendente de acuerdo a
la secuencia de campos definida en el field-group HEADER. La adicin BY
<f1> <fn> define una nueva secuencia de ordenacin. Los campos indicados deben
pertenecer al HEADER o a un field-group formado nicamente por campos del
HEADER. Se pueden utilizar las opciones ASCENDING y DESCENDING como en las
tablas internas.
Dentro del bucle LOOP ENDLOOP se proporciona un registro en cada paso y los
contenidos de los campos del dataset se pasan a los campos de datos globales
correspondientes. No se pueden anidar bucles LOOP.
Cuando ya se ha procesado un dataset con SORT o LOOP no se pueden aadir ms
registros con EXTRACT. Esta es una desventaja respecto a las tablas internas, donde
a parte de poder hacer ms operaciones (modificar, borrar, etc) se pueden hacer en
cualquier momento.
Los elementos de lenguaje para realizar niveles de control para los extract datasets
son similares a los utilizados en tablas internas: AT FIRST, AT NEW <f>, AT END OF
<f> y AT LAST. La diferencia ahora es que para procesar registros individuales se
debe utilizar la sentencia AT <fg>, donde <fg> representa un field-group.
La secuencia de los niveles dentro del LOOP debe coincidir con la secuencia de
ordenacin del dataset, pero no depende de la secuencia de campos del HEADER.
Por eso los extract dataset son apropiados para situaciones en las que interesa
ordenar por varias claves.
Ahora no disponemos de la sentencia SUM, sino de un campo SUM(<campo>) que
contiene el total del campo especificado cuando acaba un nivel de control. Tambin
existe en campo CNT(<campo_header>) que contiene al final del nivel el nmero de
valores diferentes que registr el campo especificado en ese nivel. Los totales slo se
pueden calcular al final de un nivel de grupo (AT END OF, AT LAST).

11.6 Impresin
Un listado se puede imprimir mientras se genera: desde la pantalla de seleccin (sin
que aparezca en pantalla), desde el programa o en un proceso de fondo. Tambin se
puede imprimir despus de la generacin de la lista en pantalla.
Para imprimir una lista se deben introducir los parmetros de impresin, que controlan
la salida: dispositivo de salida, nmero de copias, formato (lneas, columnas), portada,
etc. Se puede utilizar el mdulo de funcin SET_PRINT_PARAMETERS para
inicializar los valores por defecto para la impresin de una lista online. Se pueden
introducir en pantalla o seleccionarlos en el programa (con la sentencia NEW-PAGE
PRINT ON).

Pgina 118 de 194

ABAP Fundamentos y Reporting


NEW-PAGE PRINT ON [PARAMETERS <par_impr> | <params>]
[NO DIALOG].

La sentencia NEW-PAGE PRINT ON lanza un salto de pgina y establece que todas


las sentencias WRITE (y SKIP, ULINE, ) siguientes se redirijan al spool.
Con la opcin NO DIALOG, el listado se enva a la impresora sin dar oportunidad al
usuario de que cambie los parmetros de impresin en tiempo de ejecucin. Si no se
indica esta opcin, se le presenta al usuario una pantalla con los parmetros de
impresin donde aparecen como valores por defecto los introducidos en el programa.
La sentencia NEW-PAGE PRINT OFF lanza un salto de pgina y todas las sentencias
WRITE siguientes se listan en pantalla.
Se aconseja trabajar con el atributo PARAMETERS en vez de introducir los
parmetros individualmente (IMMEDIATELY, KEEP IN SPOOL, ) porque de esta
manera el usuario puede cancelar la impresin sin cancelar el programa.
La estructura para el atributo PARAMETERS debe ser llenada utilizando el mdulo de
funciones GET_PRINT_PARAMETERS.
REPORT z_print_params.
DATA: val, print_params LIKE pri_params.
...
CALL FUNCTION GET_PRINT_PARAMETERS
EXPORTING
immediately

release

= X

receiver

= sy-uname

list_text

= Datos de vuelo

IMPORTING
out_parameters = print_params
valid

= val.

IF val = X.
NEW-PAGE PRINT ON PARAMETERS print_params NO DIALOG.
ELSE.
MESSAGE i650 WITH val.
ENDIF.
...

Con esta funcin proporcionamos al usuario una pantalla de parmetros que se puede
usar para modificarlos y contiene la opcin de cancelar la impresin. Se devuelve el
registro de parmetros en la estructura out_parameters y, en los casos con xito, el
parmetro de salida valid contiene una X. Si no se ha podido crear un nuevo registro
con los parmetros, out_parameters estar vaco y valid contendr un espacio.

Pgina 119 de 194

ABAP Fundamentos y Reporting

12 Listas interactivas
Aunque el propsito principal de una lista es mostrar datos, en ocasiones los usuarios
deben interactuar con ellos: por eso existe la posibilidad de que las listas reaccionen a
clicks con el ratn y otras acciones (pulsar botones, teclas de funcin, opciones de
men, etc.). Llamamos listas interactivas a aquellas en las que el usuario puede
realizar acciones que permiten, por ejemplo, navegar a otras listas ms detalladas o a
otras pantallas. El uso de listas de detalle permite una mejor distribucin de la
informacin y aumenta la velocidad de acceso a los datos porque slo se leen los
datos adicionales de una lnea particular seleccionada de una lista bsica.
El programa interno de sistema llamado procesador de listas es el responsable de
mostrarlas y de interpretar las acciones del usuario en la lista. Un nico programa
puede ser responsable de hasta 21 listas, una bsica y hasta 20 de detalle. Cada lista
tiene su propia rea de memoria o buffer de lista.
Cada vez que se el usuario realiza una accin (escoge una opcin de men o pulsa
una tecla de funcin o un botn de la barra de herramientas) se lanza un evento. Si en
el bloque correspondiente al evento se escribe informacin, se produce un nuevo nivel
de lista, es decir, se escribe sobre una nueva hoja que est sobre la anterior. La hoja
anterior permanece y podremos volver a ella con la flecha verde de retroceso o con la
X roja de cancelacin.
Nivel 0
Nivel 1
Nivel 2

El nivel de lista se controla con la variable SY-LSIND. ste ser incrementando


despus de cada accin del usuario. Si tras un evento de usuario queremos
permanecer en el mismo nivel deberemos indicarlo decrementando en uno esta
variable: SY-LSIND = SY-LSIND 1.

12.1 Interfase (GUI)


Para que pueda existir una interaccin con el usuario necesitamos una interfase. La
crearemos con el Menu Painter.
Todas las interfases de usuario contienen como subobjetos:
Barra de ttulo
Barra
mens

Contiene el ttulo de la pantalla, pantalla de seleccin o lista


mostrada.

de Los mens contienen las funciones ejecutables del programa actual.


Pueden contener submens. Siempre estn presentes los mens
Sistema y Ayuda.

Barra
de Contiene iconos para las funciones ms usadas. La barra estndar
herramientas
R/3 contiene siempre los mismos iconos con las mismas funciones
estndar
asignadas. Las que no son accesibles se muestran en gris.
Barra
de Contiene iconos y botones para las funciones ms usadas de la
pulsadores
pantalla actual.
Definiciones de Asignacin de teclas de funcin a las funciones de la pantalla actual.

Pgina 120 de 194

ABAP Fundamentos y Reporting


teclas
funcin

de Idealmente todas las funciones de men se deberan poder ejecutar


con una tecla de funcin. Se pueden mostrar con un clic del botn
derecho.

Lista
funciones

de Son todos los cdigos que se asocian a las teclas/botones/mens y


que se utilizan en el programa para evaluar las acciones del usuario.
Existen cdigos de funcin estndar para las listas.

12.1.1

Status

Un programa tiene una interfase con todos los elementos anteriores. Para objetos
individuales del programa (pantallas, pantallas de seleccin o listas) se pueden utilizar
vistas parciales de esta interfase. stas se denominan status. Un status determina qu
funciones estn activas y cuales no. Desde el punto de vista tcnico es una referencia
a una barra de men particular, una barra de pulsadores y ciertas asignaciones de
teclas.
Podemos crear y modificar status desde la lista de objetos del Repository Browser o
usando el Menu Painter o navegando desde el editor ABAP.
Se pueden crear status propios desde cero o usando otros ya existentes o con una
combinacin de las dos tcnicas.
Para crear un status nuevo primero se crear y despus se aaden las barras de men
y las funciones de men. Entonces el status est completo y los cambios que se
realicen en l le afectarn a l nicamente.
Cuando referenciamos un status ya existente lo que hacemos es crear barras de men,
barras de pulsadores y asignaciones de teclas de funcin como elementos
independientes. Creamos entonces nuestro propio status y referenciamos las barras y
asignaciones que deseemos utilizar: el Menu Painter guarda estas referencias de
manera que cualquier cambio en los elementos se propaga inmediatamente a todos
los status que los utilizan. Este funcionamiento es muy til en aplicaciones grandes
para asegurar la consistencia de ciertas funciones independientes del status.
Cuando creamos un status debemos escoger un tipo (dilogo, lista, ) y esta eleccin
determinar que ciertos tipos del funciones estn a nuestra disposicin.

12.1.2

Funciones

Las funciones se identifican por sus cdigos de funcin. El tipo de funcin nos informa
de su propsito: si es estndar, E si es de salida, S si es estndar de SAP o T si
es cdigo de transaccin.
Las funciones se pueden crear con textos estticos o dinmicos y para las primeras se
puede asignar un icono que se mostrar en vez del texto si utilizamos la funcin en un
botn. Si queremos mostrar informacin adicional con un icono la introduciremos en el
texto del icono.
Las funciones se asignan a teclas de funcin o a botones. Se pueden especificar
teclas de acceso rpido a una funcin para evitar usar el ratn.
La definicin de asignaciones de teclas consiste en tres secciones:
Teclas
de Son teclas de funcin cuyos valores asignados no
funcin
pueden ser cambiados. Las podemos activar o
reservadas
desactivar pero no cambiar sus textos ni iconos.
Definicin
Son valores asignados sugeridos que satisfacen las
teclas
de normas ergonmicas de SAP.
funcin

Pgina 121 de 194

ABAP Fundamentos y Reporting


recomendada
Teclas
de Asignacin libre.
funcin
disponibles

Las funciones que han sido asignadas a teclas de funcin pueden tambin ser
asignadas a botones en la barra de pulsadores. La barra puede contener hasta 35
botones. Los botones pueden contener iconos o texto.

12.1.3

Barra de mens

Cuando creamos la barra de mens podemos dejar que el sistema nos proponga una
plantilla y despus modificarla. La barra de mens puede contener hasta ocho mens,
pero slo podemos definir seis, ya que los mens Sistema y Ayuda son aadidos
siempre de manera automtica por el sistema.
Un men puede contener hasta 15 entradas, que pueden ser funciones, separadores o
mens (en cascada). La profundidad de anidamiento para los mens est restringida a
tres niveles, donde el ltimo slo puede contener funciones y separadores. Se pueden

Pgina 122 de 194

ABAP Fundamentos y Reporting


crear los mens con texto esttico o dinmico: para los segundos hay que asignar un
nombre de campo cuyos contenidos se mostrarn como texto del men en tiempo de
ejecucin.

12.1.4

Usar status

Utilizamos la sentencia SET PF-STATUS <nombre> para escoger un status para una
lista o para una pantalla. El nombre de un status puede tener hasta 20 caracteres
(nmeros o maysculas).
Si no se ha escogido una interfase GUI, se muestra la interfase estndar. Si queremos
desactivar un status previamente introducido y utilizar el estatus estndar de lista
basta con que usemos la sentencia SET PF-STATUS SPACE. El campo SY-PFKEY
siempre contiene el nombre del status actual.
Podemos desactivar funciones en tiempo de ejecucin con EXCLUDING <cdigo>. Y
si queremos desactivar varias funciones al mismo tiempo las debemos transferir
previamente al sistema utilizando una tabla interna y despus utilizar EXCLUDING
<tabla>.

12.1.5

Ttulo

Se pueden crear y mantener ttulos usando el Menu Painter.


Usando la sentencia SET TITLEBAR <ttulo> asignamos un ttulo a una pantalla.
Sobrescribe el ttulo estndar, si la lista o pantalla lo tena. El nombre del ttulo puede
tener hasta 20 caracteres de longitud y se debe escribir en maysculas. El ttulo actual
siempre se encuentra disponible en el campo de sistema SY-TITLE.
Se pueden mostrar variables en el ttulo GUI utilizando la adicin WITH <f>.

12.2 Eventos
Se puede crear una lista interactiva creando una lista bsica con WRITE, SKIP y
ULINE que llena el buffer de lista en el bloque de evento apropiado (por ejemplo en
START-OF-SELECTION). Los eventos START-OF-SELECTION, GET, END-OFSELECTION, TOP-OF-PAGE y END-OF-PAGE slo se pueden utilizar para crear
listas bsicas. Cuando se abandona la lista bsica estos eventos ya no se procesan.
Despus necesitamos poder reaccionar a la accin del usuario para crear las listas
detalladas. Para eso utilizamos ciertos eventos, los fundamentales son AT LINESELECTION y AT USER-COMMAND. Para crear cabeceras para listas detalladas
disponemos del evento TOP-OF-PAGE DURING LINE-SELECTION.

12.2.1

AT USER-COMMAND

En general la accin del usuario se traduce en el hecho de que el campo SY-UCOMM


contiene el cdigo de funcin seleccionado a travs del men o pulsando un botn o
una tecla de funcin.
Algunos cdigos de funcin estn reservados para uso del sistema y por tanto cuando
se activan no lanzan un evento interactivo que podamos tratar en el programa, sino
que lanzan la correspondiente funcin de sistema. Todos los dems cdigos de
funcin, excepto PICK, lanzan el evento AT USER-COMMAND.
Para controlar la accin que ha originado el evento y poder realizar el proceso
correspondiente, evaluaremos el campo de sistema SY-UCOMM en una estructura
CASE.
Podemos lanzar manualmente el evento relacionado con la sentencia SET USERCOMMAND.
Pgina 123 de 194

ABAP Fundamentos y Reporting


12.2.2

AT LINE-SELECTION

Este evento es asignado a una funcin de eleccin de lnea (doble-click o F2), o a


hotspots (lneas que aparecen resaltadas). Es independiente del evento AT USERCOMMAND. Slo se especifica una vez dentro del cdigo de una lista interactiva. Se
ha de especificar PICK para activar esta funcionalidad en el apartado correspondiente
del Menu painter.
Las lneas que se escriben dentro del bloque correspondiente a este evento
pertenecen a una lista de un nivel superior en uno al nivel desde donde se ha
realizado la accin.
AT LINE-SELECTION.
CASE sy-lsind.
WHEN 1. WRITE: Lista detallada 1(001), / SY-LSIND:

(000), sy-lsind.

WHEN 2. WRITE: Lista detallada 2(002), / SY-LSIND:

(000), sy-lsind.

ENDCASE.
ENDAT.

Diferenciamos el proceso en niveles de listado diferentes mediante la variable de


sistema SY-LSIND. Si el evento se lanza en el nivel 2, SY-LSIND aumenta a 3 pero
como no se ejecuta ninguna sentencia WRITE no se crea la lista detallada 3 y el
sistema devuelve el valor 2 a SY-LSIND y muestra de nuevo la lista detallada 2.

12.2.3

Top-of-page During line-selection

Es el evento correspondiente a TOP-OF-PAGE de una lista bsica. Es necesario ya


que el sistema no lanza TOP-OF-PAGE ni crea cabeceras de pgina por defecto para
las listas detalladas.
El evento TOP-OF-PAGE DURING LINE-SELECTION es lanzado con la primera
sentencia WRITE que escribe en un nuevo listado.
El campo SY-LISEL nos puede ser til como cabecera, ya que contiene la
representacin en caracteres de la lnea de detalle seleccionada.

12.3 Variables del sistema


System field Information
SY-LSIND

ndice de la lista creada en el evento actual (lista bsica = 0)

SY-LISTI

ndice de la lista desde la que se lanz el evento

SY-LILLI

Nmero absoluto de la lnea desde la que se lanz el evento.

SY-LISEL

Contenido de la lnea desde la que se lanz el evento

SY-CUROW Posicin de la lnea en la ventas desde la que se lanz el evento (se


empieza a contar por 1)
SY-CUCOL Posicin de la columna en la ventana desde la que se lanz el evento (se
empieza a contar por 2)
SY-CPAGE Nmero de pgina de la primera pgina mostrada de la lista desde la que
se lanz el evento.
SY-STARO Nmero de la primera lnea de la primera pgina mostrada de la lista

Pgina 124 de 194

ABAP Fundamentos y Reporting


desde la que se lanz el evento (se empieza a contar por 1). Esta lnea
puede contener la cabecera.
SY-STACO Nmero de la primera columna mostrada en la lista desde la que se lanz
el evento (se empieza a contar por 1)
SY-UCOMM Cdigo de funcin que lanz el evento
SY-PFKEY

Status de la lista que se est mostrando.

12.4 Recuperar datos de la lista


Por defecto, los datos de la lista bsica no estn disponibles para las listas detalladas.

12.4.1

HIDE

Podemos usar la sentencia HIDE para almacenar los contenidos de los campos en un
rea separada con referencia a la lnea: el sistema guarda el nombre del campo y el
valor para cada campo.
Normalmente la sentencia HIDE se utiliza para guardar el contenido de los campos
clave o informacin que se necesite para seleccionar informacin adicional. Para
poder guardar los contenidos de una lnea, la sentencia HIDE se debe introducir antes
de empezar una nueva lnea. Esto se debe al hecho de que los datos se guardan con
referencia a la lnea que se est mostrando actualmente (el campo de sistema SYLINNO). Se pueden guardar en el rea HIDE datos que no se muestran en la lista.
Cada lista tiene su propia rea HIDE y permanece almacenada en el buffer de lista
hasta que ste se borra: para las listas de nivel superior a la que se est mostrando se
borra automticamente el buffer.
Cuando se lanza un evento interactivo, los datos guardados para la lnea seleccionada
en el rea HIDE se pasan a los campos correspondientes.
GET spfli FIELDS carrid connid cityfrom cityto.
WRITE: / spfli-carrid, 10 spfli-cityfrom, (24) spfli-cityto.
HIDE: spfli-carrid, spfli-connid.
AT LINE-SELECTION.
SELECT * FROM sflight
WHERE carrid = spfli-carrid
AND connid = spfli-connid.

Cuando el usuario hace doble-click en la lnea de la compaa LH, el sistema determina que se ha
escogido la lnea 6 utilizando el campo de sistema SY-LILLI. Busca entonces en el rea HIDE el
punto donde se han guardado los datos correspondientes a esta lnea y inserta los valores
guardados en los campos correspondientes. Despus se procesa el bloque de evento AT LINESELECTION donde se crea la lista detallada.

Cuando se escoge una lnea para la que no se han guardado datos en el rea HIDE, la
seleccin de lnea es invlida. Las lneas invlidas incluyen las cabeceras y el pie de
pgina.

Pgina 125 de 194

ABAP Fundamentos y Reporting


Podemos asegurar que no se crean listas detalladas para selecciones invlidas de
lnea inicializando los campos que se guardan con HIDE. As al seleccionar una lnea
invlida el sistema no puede encontrar un valor para el campo en el rea HIDE y el
campo conserva su valor inicial. Entonces con una sentencia CHECK en el bloque de
evento podemos salir sin que se genere ninguna lista detallada.
GET spfli FIELDS carrid connid cityfrom cityto.
WRITE: / spfli-carrid, 10 spfli-cityfrom, (24) spfli-cityto.
HIDE: spfli-carrid, spfli-connid.
END-OF-SELECTION.
CLEAR spfli-carrid.
AT LINE-SELECTION.
CHECK NOT spfli-carrid IS INITIAL.
SELECT * FROM sflight
WHERE carrid = spfli-carrid
AND connid = spfli-connid.
CLEAR spfli-carrid.

12.4.2

GET CURSOR

Con la sentencia GET CURSOR se pueden crear listas detalladas con referencia a la
posicin actual del cursor.
Con el parmetro FIELD se proporciona el nombre del campo, y con el parmetro
VALUE su valor.
El cdigo de retorno SY-SUBRC vale 0 si el cursor est sobre un campo, y 4 si no.
Se debe ser cuidadoso al utilizar el valor de retorno porque estar formateado como se
muestra en pantalla. Por este motivo es ms recomendable utilizar la tcnica HIDE.
DATA: nombre_campo(30), valor_campo(50).
AT LINE-SELECTION.
GET CURSOR FIELD nombre_campo
VALUE valor_campo.
CASE nombre_campo.
WHEN SPFLI-CARRID.
SELECT carrname INTO wa_carrname...
WRITE: valor_campo NO GAP, : , wa_carrname.
WHEN SPFLI-CONNID.
ENDCASE.

12.5 Leer listas


Cuando se ejecuta una sentencia READ todos los valores que han sido almacenados
en el rea HIDE para la lnea indicada se transfieren a los campos correspondientes y
estn entonces disponibles para el programa.
READ LINE <l> [INDEX <i>]
[FIELD VALUE <f1> INTO <g1>

<f2> INTO <g2> ...]

Pgina 126 de 194

ABAP Fundamentos y Reporting


[LINE VALUE INTO <wa>].

Con la adicin INDEX <i> se pueden leer las lneas de un nivel particular <i> de lista.
Cuando se omite esta adicin se lee de la ltima lista mostrada.
Para indicar los campos que desean ser ledos se aade FIELD VALUE <f1> INTO
<g1>. El contenido del campo <f1> se lee de la lnea indicada de la lista y se copia a
<g1>. Si el campo destino coincide con el origen, se puede abreviar con FIELD VALUE
<fi>. Los valores se guardan como tiras de caracteres.
Con LINE VALUE INTO <wa> transportamos una lnea completa al rea de trabajo
<wa>.

12.6 Modificar listas


La sentencia MODIFY LINE permite modificar una lnea de un listado. Los valores
guardados para la lnea en el rea HIDE se insertan en los campos correspondientes y
estn de nuevo disponibles en el programa.
La sentencia MODIFY CURRENT LINE modifica la ltima lnea leda con READ LINE
o con una seleccin de lnea (aunque corresponda a un nivel diferente).
MODIFY LINE <l>.
MODIFY CURRENT LINE [LINE FORMAT <fm1> <fm2> ...]
[FIELD VALUE <f1> FROM <g1>

<f2> FROM <g2> ...]

[LINE VALUE FROM <wa>]

La adicin LINE FORMAT formatea la lnea seleccionada segn las especificaciones.


La adicin FIELD VALUE sustituye el contenido de los campos <fi> de la lnea de la
lista por los valores actuales de <gi> (todos los valores convertidos a carcter). Los
contenidos de <fi> en el programa no son modificados.
La adicin LINE VALUE FROM <wa> permite reemplazar la lnea entera con los
contenidos actuales del rea de trabajo <wa>.

12.7 Navegacin
Se puede utilizar el campo de sistema SY-LSIND para determinar el nivel de lista que
estamos mostrando. Podemos modificar el valor de este campo para conseguir un
nivel de lista se muestre en otra posicin, pero los valores asignados a SY-LSIND no
pueden ser nunca mayores que el que actualmente contiene. Por tanto, no podemos
saltar niveles de listado en orden ascendente.
Slo se debe cambiar SY-LSIND en la ltima sentencia antes de mostrar la lista, ya
que el hecho de cambiar su valor no lleva directamente a un salto de nivel inmediato.
El nuevo nivel se asigna a la lista al final, cuando se ha mostrada el buffer de lista
completo.

12.8 Ventanas
Podemos mostrar la lista detallada en una caja de dilogo modal utilizando la
sentencia WINDOW STARTING AT. Aqu se aplican las mismas reglas que en la
salida de listas.
DATA: linea_sup TYPE i, linea_inf TYPE i.
AT LINE-SELECTION.
linea_sup = sy-lilli + 1.
linea_inf = linea_sup + 12.

Pgina 127 de 194

ABAP Fundamentos y Reporting


WINDOW STARTING AT 10 linea_sup
ENDING

AT 65 linea_inf.

WRITE: ...

Se indica la posicin de la esquina superior izquierda dando los nmeros de columna y


fila. Si el nmero de fila es menor o igual a 0 se muestra la lista a pantalla completa en
vez de la ventana.
Se puede utilizar el parmetro opcional ENDING para especificar el ancho y largo de la
ventana dando el nmero de fila y columna de la esquina inferior derecha.

Pgina 128 de 194

ABAP Fundamentos y Reporting

13 Modularizacin
Los programas ABAP no son una unidad secuencial, sino que tienen una estructura
modular. Estn formados por un conjunto de bloques de procesamiento, de secciones
que se procesan de forma secuencial cuando son llamadas. Son las unidades mnimas
y no se pueden dividir ni anidar. Es importante que los programas estn estructurados
correctamente, ya que entonces su estructura lgica ser ms fcil de identificar y su
elaboracin y mantenimiento sern ms sencillos.
Cada programa consiste en dos partes:

la parte de declaraciones de datos globales, clases locales y definicin de pantalla


de seleccin.

La parte de bloques de procesamiento del programa

En un programa simple puede haber un solo bloque de proceso, a parte de la


declaracin de datos. En estos casos no es necesario declarar el bloque
explcitamente. De hecho siempre se asignan todas las instrucciones sueltas al bloque
START-OF-SELECTION. En programas ms complejos, sern necesarios diversos
bloques de proceso diferentes y deberemos especificar su nombre y su tipo.
Existen los siguientes tipos de bloques de proceso:
Eventos

El sistema ABAP los llama en un orden predeterminado para


producir una lista en los programas de tipo 1

Subrutinas

Mdulos con interfase internos a un programa que se llaman


con una sentencia ABAP desde cualquier otro bloque

Mdulos de funcin

Mdulos con interfase transparente disponibles en todo el


sistema que se llaman con una sentencia ABAP desde
cualquier bloque de cualquier programa

Mdulos de dilogo

Constituyen la lgica de flujo de las pantallas. Se puede escribir


uno para cada estado de cualquier pantalla del programa.

Mtodos de objeto
Podramos clasificar los bloques de procesamiento en dos clases: aquellos que son
llamados desde fuera del programa por el sistema de ejecucin de ABAP (eventos,
mdulos de dilogo), y aquellos que pueden ser llamados por las sentencias ABAP en
programas ABAP (subrutinas, mdulos de funcin y mtodos). Estos ltimos se suelen
identificar con el nombre de procedimientos.
Al llamar a un procedimiento, el sistema interrumpe el procesamiento del bloque desde
donde se hace la llamada, procesa el bloque llamado y despus se contina la
ejecucin con la siguiente instruccin ABAP.
Hay otro tipo de modularizacin que consiste en utilizar mdulos de cdigo fuente.
Esta seccin describe la modularizacin en eventos, en mdulos de cdigo fuente y en
procedimientos.
Con los diversos tipos de modularizacin se evita la redundancia, se incrementa la
reutilizacin del cdigo fuente, y se permite el encapsulamiento de los datos.

Pgina 129 de 194

ABAP Fundamentos y Reporting

Programas de ejemplo DEMO_SUBROUTINE

13.1 Declaracin de datos globales


El sistema reconoce las declaraciones globales como tales por las palabras clave
ABAP que se utilizan en ellas. Y las considera agrupadas aunque estn distribuidas
por el cdigo del programa: cuando se genera un programa se procesan juntas todas
las definiciones de datos que aparezcan antes del primer bloque de procesamiento o
en bloques de eventos. De todas maneras, para conseguir ms claridad, se aconseja
situar todas las declaraciones de datos globales juntas y al principio del programa.
Las sentencias declarativas que se encuentran en procedimientos (subrutinas,
mdulos de funcin) forman la declaracin de datos locales de estos bloques. Estos
datos slo son visibles dentro del procedimiento donde se declaran. En los bloques de
eventos, en cambio, no es posible declarar datos locales.
Para utilizar tablas del diccionario de datos, es necesario hacer referencia a que tablas
del diccionario se va a acceder desde el programa. Para ello ser necesario indicar la
palabra clave TABLES seguida del nombre o nombres de las tablas empleadas.
TABLES: VBAK.

13.2 Eventos
El ABAP es un lenguaje estructurado orientado a eventos. No es un clsico lenguaje
de programacin con estructura lineal (TOP-DOWN), sino que la secuencia de
instrucciones depende del cumplimiento de ciertas condiciones.
Los eventos sirven para controlar el flujo lgico del programa de forma externa, de tal
manera que el bloque de procesamiento asociado se ejecutar cuando ocurra una
determinada circunstancia. La llamada a un bloque de evento es lanzada por un
evento, el cual es lanzado a su vez por una accin de usuario o por un programa de
sistema.

Pgina 130 de 194

ABAP Fundamentos y Reporting


Slo debemos definir bloques de evento para los eventos ante los que queremos que
reaccione nuestro programa. Un programa no est obligado a reaccionar ante un
evento particular: puede hacerlo o no. En este aspecto los eventos son diferentes de
las subrutinas porque si existe una llamada a una subrutina, sta debe estar definida.
Los bloques de eventos se declaran con una palabra clave de evento. Estn
delimitados por esta palabra y por el comienzo del siguiente bloque de proceso, no hay
una palabra clave que marque el final. No importa el orden en el que situemos los
bloques de evento dentro del programa porque la secuencia en la que son procesados
est determinada por el sistema de ejecucin.
Los eventos que lanza el sistema o que puede lanzar el usuario en los programas tipo
1 son los siguientes:
Palabra clave de evento

El evento se lanza

INITIALIZATION

Justo antes de que se muestre la pantalla de seleccin.


Se usa para poner valores iniciales en parmetros.

AT SELECTION-SCREEN

Justo despus de que se haya procesado la/s entrada/s


del usuario y cuando todava est activa la pantalla de
seleccin.

START-OF-SELECTION

Justo despus de procesar la pantalla de seleccin, y


sta ya no est activa.

GET <tabla>

Cuando la BBDD lgica nos ofrece una lnea de la tabla


de la BBDD <tabla>

GET <tabla> LATE

Despus de procesar todas las tablas que estn


jerrquicamente subordinadas a la tabla de la BBDD
<tabla>.

END-OF-SELECTION

Despus de procesar todas las lneas que ofrece la


BBDD.

TOP-OF-PAGE

Durante el procesamiento
comienza una nueva pgina.

END-OF-PAGE

Durante el procesamiento de una lista cuando finaliza


una pgina.

AT LINE-SELECTION

Cuando el usuario ha seleccionado una lnea de la lista

AT USER-COMMAND

Cuando el usuario ha pulsado una tecla de funcin o ha


introducido un comando en el campo de comandos.

AT PF <nn>

Cuando el usuario ha pulsado una tecla de funcin con


cdigo de funcin PF<nn>.

de

una

lista

cuando

Si en un programa no se declara ningn bloque de evento, el sistema considera que


todo el cdigo forma un nico bloque START-OF-SELECTION.

13.2.1

INITIALIZATION

Si nuestro programa tiene una pantalla de seleccin, y queremos ejecutar un bloque


de procesamiento antes de que se muestre sta, debemos usar el evento
INITIALIZATION. Se suele utilizar para inicializar los valores que aparecern por
defecto en la pantalla de seleccin.

Pgina 131 de 194

ABAP Fundamentos y Reporting


13.2.2

START-OF-SELECTION

Este evento se usa para codificar un bloque de procesamiento justo despus de haber
procesado la pantalla de seleccin y antes de acceder a la base de datos.
Este evento se lanza cuando se procesa la instruccin REPORT. En ese momento se
empieza a ejecutar el cdigo que se encuentra entre REPORT y la palabra STARTOF-SELECTION. Inmediatamente despus se procesa el bloque contenido dentro de
este evento.
En este evento se sitan las instrucciones de acceso a bases de datos. Una vez
terminada este cdigo se ejecuta el bloque correspondiente al evento END-OFSELECTION.

13.2.3

END-OF-SELECTION.

El cdigo asociado a este evento se procesa cuando se termina la seleccin de datos


de tablas o bases de datos lgicas, es decir, cuando han terminado el evento STARTOF-SELECTION y todos los GET.

13.2.4

TOP-OF-PAGE

Se ejecuta al inicio de cada nueva pgina. Se utiliza para dar formato a la cabecera de
pgina, cuando no se utilizan las definidas en Ttulos y cabeceras. (Es necesario
especificar la opcin NO STANDARD PAGE HEADING en la sentencia REPORT).
Existe otro evento TOP-OF-PAGE DURING LINE-SELECTION que se lanza al inicio
de una nueva pgina de un nivel de lista secundaria, en listados interactivos.

13.2.5

END-OF-PAGE

Se ejecuta cuando una pgina finaliza bien porque no tiene ms lneas bien porque se
ejecuta la instruccin RESERVE n LINES. Este evento no se ejecutar si el n de
lneas de la pgina no est definido en la sentencia REPORT, tampoco se ejecutar se
fuerza una nueva pgina con NEW-PAGE.

13.2.6

AT SELECTION-SCREEN

Se utiliza para controlar la pantalla de seleccin.


Sus opciones permiten mostrar valores de ayuda en los campos de seleccin,
mostrar/ocultar campos de seleccin, realizar chequeos mientras la pantalla an est
activa. Podemos mostrar mensajes de error, y controlar que el flujo no pasar de este
punto hasta que todos los datos introducidos por el usuario sean correctos.
Visualizamos y ejecutamos el programa DEMO_SELECTION_SCREEN_EVENTS:
Las lneas:
AT SELECTION-SCREEN.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'.

Consiguen que aparezca el mensaje de informacin cuando aparece la pantalla de seleccin.


Las lneas:
AT SELECTION-SCREEN ON sel_opt1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN' 'ON SEL_OPT1'.

Consiguen que aparezca el mensaje cuando modificamos el valor del campo de seleccin sel_opt1
Las lneas:

Pgina 132 de 194

ABAP Fundamentos y Reporting


AT SELECTION-SCREEN ON HELP-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN' 'ON HELP-REQUEST FOR TEST1'.

Consiguen que aparezca el mensaje cuando se pulsa F1 (ayuda) sobre el parmetro test1.
Las lneas:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR test1.
MESSAGE i888 WITH 'AT SELECTION-SCREEN' ON VALUE-REQUEST FOR TEST1'.

Consiguen que aparezca el mensaje cuando se pulsa F4 (valores posibles) en el campo test1.
Los rangos de seleccin tiene implcitos dos valores el mnimo y el mximo, para que
aparezca la ayuda en los dos es necesario aadir dos eventos, uno para cada valor.
La funcionalidad en ambos casos es la misma por tanto es susceptible de ser
introducida en un nico procedimiento.
Para implementar este procedimiento, nos hemos ayudado
con una funcin
predefinida: 'HELP_VALUES_GET_WITH_TABLE. Esta funcin permite mostrar
datos en una ventana y seleccionar uno de ellos. Permite mostrar informacin de ms
de un campo, para ello en la tabla interna de definicin de campos aadiremos tantas
entradas como campos deseemos visualizar.

13.3 Mdulos de cdigo fuente


Modularizar el cdigo fuente consiste en colocar una secuencia de sentencias ABAP
en un mdulo. As, en lugar de colocar todas las sentencias en nuestro programa
principal, slo tenemos que llamar al mdulo. Cuando se genera el programa, el
cdigo fuente de las unidades de modularizacin es tratado como si estuviera
fsicamente presente en el programa principal.
Los mdulos de cdigo fuente nos ayudan a evitar la escritura repetida del mismo
conjunto de sentencias y hacen que nuestros programas sean ms fciles de leer y
entender. No se utilizan para modularizar tareas o funciones. Para este propsito
utilizaremos los procedimientos.

ABAP contiene dos clases de mdulos de cdigo fuente. Los mdulos locales se
llaman macros y los mdulos globales se llaman programas include.

13.3.1

Macros

Si queremos reutilizar el mismo conjunto de sentencias ms de una vez en nuestro


programa, podemos incluirlas en una macro. Por ejemplo, esto puede ser til para
grandes clculos o sentencias WRITE complejas. Slo podemos utilizar las macros

Pgina 133 de 194

ABAP Fundamentos y Reporting


dentro del programa en el que estn definidas, y slo pueden llamarse desde las
lneas del programa que sigan a su definicin.
El siguiente bloque de sentencia define una macro <macro>:
DEFINE <macro>.
<sentencias>
END-OF-DEFINTION.

Debemos definir sentencias completas entre el DEFINE y el END-OF-DEFINITION.


Estas sentencias pueden contener hasta 9 & (&1, &2, , &9). Debemos definir la
macro antes del punto en el que queramos utilizarla.
Para utilizar una macro, utilizaremos la forma siguiente:
<macro> [<p1> <p2> <p9>].
Cuando se genere el programa, el sistema sustituir <macro> por las sentencias
definidas y cada &i por el parmetro <pi>. Podemos utilizar macros dentro de macros.
Sin embargo, una macro no puede llamarse a s misma.
Ejemplo:
DATA:
RESULTADO TYPE I,
N1

TYPE I VALUE 5,

N2

TYPE I VALUE 6.

DEFINE OPERACION.
RESULTADO = &1 &2 &3.
SALIDA &1 &2 &3 RESULTADO.
END-OF-DEFINITION.
DEFINE SALIDA.
WRITE: / 'El resultado de &1 &2 &3 es', &4.
END-OF-DEFINITION.
OPERACION 4 + 3.
OPERACION 2 ** 7.
OPERACION N2 - N1.

Este trozo de cdigo produce la siguiente salida:


El resultado de 4 + 3 es 7
El resultado de 2 ** 7 es 128
El resultado de N2 N1 es 1
En este ejemplo, se definen dos macros, OPERACIN y SALIDA. SALIDA est anidada en
OPERACIN. OPERACIN es llamada tres veces con diferentes parmetros.

13.3.2

Programas Include

Los programas Include son objetos globales del Repository de R/3. Slo se utilizan
para modularizar el cdigo fuente, y no poseen interfase de parmetros.
Tienen las siguientes funciones:

Pgina 134 de 194

ABAP Fundamentos y Reporting


Reutilizacin: Nos permiten utilizar el mismo cdigo fuente en diferentes programas.
Por ejemplo, esto puede ser til si tenemos declaraciones de datos muy grandes que
debemos utilizar en diferentes programas.
Orden: Nos permiten gestionar programas complejos de forma ordenada. Dividen el
cdigo en unidades ms pequeas y manejables. Los grupos de funciones y los
module-pool utilizan programas include para almacenar partes del programa. El
Workbench de ABAP nos ayuda cuando creamos este tipo de programas complejos
creando programas include de forma automtica y asignndoles nombre nicos. Existe
un include especial que es el include TOP de un programa. Si le nombramos de
acuerdo a las convenciones de nomenclatura, se incluir en la navegacin del
programa y en la verificacin de sintaxis.

13.3.2.1

Definicin

Si creamos un programa include por nosotros mismos, debemos asignarle el tipo I.


Tambin podemos crear o cambiar un programa Include haciendo un doble click en el
nombre del programa que se encuentra despus de la sentencia INCLUDE. En este
caso, si el incluye ya existe, el Workbench de ABAP navegar hasta l y si no existe el
sistema lo crear por nosotros.
Un programa include no se puede ejecutar de forma independiente, sino que siempre
se encontrar dentro de otros programas. Los programas include pueden contener a
otros include.
Las nicas restricciones para escribir el cdigo fuente de un programa include son que
los programas include no pueden llamarse a s mismos y que los programas include
deben contener sentencias completas. No hay relacin tcnica alguna entre includes y
bloques de proceso.
Debemos asegurarnos que las sentencias de nuestro programa include tienen cabida
lgica en el cdigo fuente de los programas desde los que se le llama. Elegir la opcin
Verificar mientras editamos un programa include en el editor de ABAP normalmente no
es suficiente para asegurar la lgica del programa que contiene el include. Para que la
verificacin de sintaxis produzca resultados vlidos, debemos verificar la sintaxis
desde el programa que contiene la sentencia include.
***INCLUDE TEST_INCL.
TEXTO = 'Hola!'.

En este caso, la verificacin de sintaxis informa de un error debido a que no se ha declarado el


campo TEXTO. Sin embargo, podemos incluir TEST_INCL en cualquier programa que tenga
un campo llamado TEXTO con el tipo correcto.

13.3.2.2

Utilizacin

Para utilizar un programa include en otro programa, introduciremos la sentencia:


INCLUDE <include>.

La sentencia INCLUDE tiene el mismo efecto que si copiramos el cdigo fuente del
programa include <include> dentro de nuestro programa. En la verificacin de sintaxis,
el contenido del programa include se analizar tambin. Los programas include no se
cargan en tiempo de ejecucin, sino que se expanden cuando se genera el programa.
Una vez se ha generado ste, la versin cargada contiene las versiones estticas de
todos los includes. Si, posteriormente, cambiamos un programa include, se
regenerarn automticamente todos los programas que lo utilicen.
La sentencia INCLUDE debe ser la nica sentencia de la lnea y no puede extenderse
por ms de una lnea.

Pgina 135 de 194

ABAP Fundamentos y Reporting


Supongamos que tenemos el siguiente programa:
***INCLUDE STARTTXT.
WRITE: / 'Programa lanzado por', SY-UNAME,
/ 'en el host', SY-HOST,
'fecha:', SY-DATUM, 'hora:', SY-UZEIT.
ULINE.

Podemos incluir este programa en cualquier otro programa ABAP para generar una cabecera de
listado estndar:
PROGRAM SAPMZTST.
INCLUDE STARTTXT.

Esto producira la siguiente salida:


Programa lanzado por CAP01
en el host madsap1 fecha: 20/03/2000 hora: 10:00:39
______________________________________________________________

13.4 Procedimientos
Los procedimientos contienen un conjunto de sentencias, y son llamados desde otros
programas ABAP.

Los procedimientos se definen en los programas ABAP. Cuando se genera un


programa, permanecen como mdulos autnomos. Podemos llamar a los
procedimientos desde el programa en el que fueron definidos, o desde programas
externos. Los procedimientos tienen una interfase para el paso de datos, y tambin
pueden contener datos locales.
ABAP contiene las siguientes clases de procedimientos:
Las subrutinas se utilizan generalmente para la modularizacin local, es decir, que
generalmente se llaman desde el programa en el que fueron definidas. Podemos
utilizar las subrutinas para escribir funciones que se utilicen repetidamente dentro del
programa, o simplemente para hacer ms legible el programa. Podemos definir las
subrutinas en cualquier programa ABAP.
Los mdulos de funcin se utilizan en la modularizacin a nivel global, es decir,
siempre se les llama desde un programa diferente. Los mdulos de funcin contienen
funciones que se utilizan de la misma forma por muy diferentes programas. Son

Pgina 136 de 194

ABAP Fundamentos y Reporting


importantes en el sistema R/3 para la encapsulacin de la lgica de proceso y para
hacerla reutilizable. Los mdulos de funcin deben definirse en un grupo de funcin, y
pueden ser llamados desde cualquier programa.
Los mtodos describen las funciones y el comportamiento de las clases y sus
instancias de los Objetos ABAP. Los mtodos se definen en las clases. Cuando los
llamamos, debemos observar ciertas reglas especiales de la programacin orientada a
objetos.
Podemos llamar a los procedimientos interna o externamente. Si llamamos a los
procedimientos externamente, es importante que comprendamos cmo est
organizada la memoria en el sistema R/3, cmo se procesan las pantallas y cmo se
utilizan las reas de trabajo de la interfase.

13.4.1

Subrutinas

Las subrutinas son procedimientos que podemos definir y llamar en y desde cualquier
programa ABAP. Normalmente, las subrutinas se llaman internamente, es decir,
contendrn secciones de cdigo o algoritmos que se utilizan frecuentemente de forma
local. Si queremos que una funcin pueda ser utilizada en todo el sistema, deberamos
utilizar un mdulo de funcin.

13.4.1.1

Definicin

Una subrutina es un bloque de cdigo que comienza con FORM <nombre_rutina>


<definicin_interfase> y termina con ENDFORM.
FORM <subr> [USING ...

[VALUE(]<pi>[)] [TYPE <t>|LIKE <f>]... ]

[CHANGING... [VALUE(]<pi>[)] [TYPE <t>|LIKE <f>]... ].


...
ENDFORM.

<subr> es el nombre de la subrutina, que puede tener hasta 30 caracteres. Las


opciones USING y CHANGING definen la interfase de parmetros. Para que los
programas sean sencillos de entender deberamos situar todas las definiciones de
rutinas al final del cdigo. Es importante separarlas de los bloques de eventos.
Para insertar cabeceras de subrutinas y comentarios, podemos utilizar los patrones de
instrucciones disponibles en el editor de ABAP. En la cabecera de la subrutina,
explicaremos el propsito de la misma y daremos la informacin y referencias
adecuadas.

13.4.1.2

Datos locales y globales

Los datos globales de un programa son todos los objetos de datos declarados fuera de
las subrutinas. stos son visibles en todos los bloques del programa; en particular
todas las subrutinas tienen acceso a los datos globales del programa en el que han
sido definidas.
Podemos utilizar la sentencia DATA dentro de una subrutina para declarar datos
locales. stos slo son visibles dentro de la subrutina y existen slo mientras sta se
ejecuta. Si un objeto local tiene el mismo nombre que un objeto global, el global es
invisible dentro de la subrutina: durante su ejecucin slo podremos acceder al objeto
local.
Tambin podemos conseguir una copia de ciertas variables globales utilizando la
sentencia LOCAL. De esta manera podemos trabajar con la variable global y nos
aseguramos de que al acabar el proceso de la subrutina sta contiene el valor que
tena justo antes de llamarla.

Pgina 137 de 194

ABAP Fundamentos y Reporting


13.4.1.3

Interfase de parmetros

Dado que los datos globales son visibles, no necesitamos definir una interfase de
parmetros si no queremos cambiar ningn dato en la subrutina, o si se ven
involucrados pocos datos.
FORM CABECERA.
WRITE: / 'Programa lanzado por', SY-UNAME,
/ 'en el host', SY-HOST,
'fecha:', SY-DATUM, 'hora:', SY-UZEIT.
ULINE.
ENDFORM.

Este ejemplo define una subrutina llamada CABECERA, que, como el ejemplo de programa
Include, muestra una cabecera de listado.
Sin embargo, si queremos que una subrutina realice operaciones complejas sobre los
datos sin afectar a los datos globales del programa, debemos definir une interfase de
parmetros a travs de la cual pasaremos nicamente los datos necesarios. En inters
de un buen estilo de programacin y encapsulacin, siempre deberamos utilizar la
interfase de parmetros, al menos cuando la subrutina cambia datos.
Llamaremos parmetros formales a los que se utilizan en la declaracin de una
subrutina y parmetros actuales a los que se pasan en una llamada concreta. Las
opciones USING y CHANGING de la sentencia FORM definen los parmetros
formales de una subrutina. El orden en el que deben aparecer las opciones es fijo.
Cada opcin puede estar seguida de una lista de cualquier nmero de parmetros
formales. Cuando llamamos a una subrutina, debemos rellenar todos los parmetros
formales con los valores de los parmetros actuales. Al final de la subrutina, los
parmetros formales son devueltos a los correspondientes parmetros actuales.
Dentro de una subrutina, los parmetros formales se comportan como datos locales
dinmicos. Podemos utilizarlos de la misma forma que los objetos de datos locales
normales que declararamos con la sentencia DATA. Ocultan a los objetos de datos
globales con el mismo nombre. El valor de los parmetros de la subrutina se
corresponde con el valor pasado para los parmetros actuales correspondientes.
Cuando definimos la interfase de parmetros declaramos a continuacin de la palabra
clave USING los parmetros que la subrutina necesita leer. Y declaramos con
CHANGING todos los parmetros que la subrutina cambiar y los valores cambiados
que se pasarn al programa que realice la llamada.

13.4.1.4

Tipificacin de parmetros y chequeos

Los parmetros formales pueden tener cualquiera de los tipos de datos de ABAP. Para
tipificar los parmetros podemos utilizar los recursos habituales para declarar datos:
TYPE para que el parmetro se ajuste a un tipo predefinido o definido por el usuario.
LIKE para que el parmetro sea compatible con un objeto de datos del Diccionario.
Si especificamos el tipo de un parmetro formal, el sistema comprueba al llamar a la
subrutina que el correspondiente parmetro actual es compatible. Para las subrutinas
internas, el sistema comprueba esto en la verificacin de sintaxis. Para subrutinas
externas, no se puede realizar esta verificacin hasta el momento de la ejecucin.
El tipo de chequeo que se realiza en la llamada depende del tipo asignado al
parmetro.

Pgina 138 de 194

ABAP Fundamentos y Reporting


Se realizan chequeos completos para los tipos predefinidos D, F, I y T y para tipos
definidos con LIKE o TYPE <definido >. En estos casos podremos acceder a sus
atributos estticamente en el programa, ya que stos son reconocidos en el cdigo
fuente.
En cambio slo se comprueba el tipo pero no la longitud ni el nmero de decimales
para los tipos predefinidos C, N, P o X. Estas caractersticas se heredan del parmetro
actual. Si se omite el tipo del parmetro o se especifica TYPE ANY, el sistema tomar
todas las caractersticas tcnicas del parmetro actual. Tambin para todos los
parmetros formales tipificados con TYPE * TABLE, se comprueba nicamente que el
parmetro actual es una tabla interna, pero el resto de atributos (tipo de lnea, clave,
etc.) se heredan del parmetro actual. Los atributos se heredan de forma dinmica en
tiempo de ejecucin, no podemos acceder a ellos estticamente en el cdigo.
TYPES: BEGIN OF LINEA,
COL1,
COL2,
END OF LINEA.
DATA: ATR

TYPE LINEA,

TABI TYPE HASHED TABLE OF LINEA WITH UNIQUE KEY COL1,


CLAVE(4) VALUE 'COL1'.
ATR-COL1 = 'X'. INSERT ATR INTO TABLE TABI.
ATR-COL1 = 'Y'. INSERT ATR INTO TABLE TABI.
PERFORM DEMO USING TABI.
FORM DEMO USING P TYPE ANY TABLE.
...
READ TABLE P WITH TABLE KEY (CLAVE) = 'X' INTO ATR.
...
ENDFORM.

Se accede a la clave de la tabla dinmicamente en la subrutina. Sin embargo, el direccionamiento


esttico
READ TABLE P WITH TABLE KEY COL1 = 'X' INTO ATR.
es sintcticamente incorrecto, ya que el parmetro formal P no adopta la clave de la tabla TABI
hasta el momento de la ejecucin de la subrutina.
Parmetros formales estructurados
Ya que los parmetros formales pueden tener cualquier tipo de datos vlido de ABAP,
tambin pueden tener estructuras y tablas internas con un tipo de lnea estructurado,
con tal de que se especifique completamente el tipo del parmetro formal. Podemos
acceder estticamente a los componentes de la estructura en las subrutinas.

Pgina 139 de 194

ABAP Fundamentos y Reporting


13.4.1.5

Pasar estructuras y tablas

Para pasar estructuras de datos () se debe especificar su tipo en la declaracin del


parmetro formal, usando TYPE o LIKE.
Para pasar una tabla interna a una subrutina se debe especificar el tipo para el
parmetro formal correspondiente. Se puede hacer de diversas maneras: con TYPE
TABLE; con LIKE <objeto>, con TYPE <bd> o con LIKE <tipo_diccionario>. Las tablas
internas se pasan sin lnea de cabecera, por lo que deberemos definir un rea de
trabajo local.
Si pasamos genricamente un parmetro actual estructurado a un parmetro formal
cuyo tipo no se ha especificado correctamente, no podremos acceder estticamente a
los componentes de la estructura en la subrutina. Para tablas internas, esto significa
que slo es posible operar sobre lneas.
Para acceder a los componentes de una estructura pasada genricamente,
deberemos definir field-symbols, y utilizar la asignacin
ASSIGN COMPONENT <ind>|<nombre> OF STRUCTURE <e> TO <FS>.
<ind> se interpreta como el nmero del componente y el contenido de <nombre> se
interpreta como el nombre del componente en la estructura genrica <e>.
DATA: BEGIN OF LINEA,
COL1 VALUE 'X',
COL2 VALUE 'Y',
END OF LINEA.
DATA COMP(4) VALUE 'COL1'.
PERFORM DEMO USING LINEA.
FORM DEMO USING P TYPE ANY.
FIELD-SYMBOLS <FS>.
ASSIGN COMPONENT COMP OF STRUCTURE P TO <FS>.
WRITE <FS>.
ASSIGN COMPONENT 2 OF STRUCTURE P TO <FS>.
WRITE <FS>.
ENDFORM.

La salida es:
XY
Los componentes COL1 y COL2 de la estructura P (pasados genricamente) se asignan al fieldsymbol <FS>. No podemos acceder directamente a los componente ni esttica ni dinmicamente.
Ajuste de Parmetros en Estructuras
En lugar de utilizar TYPE o LIKE, podemos especificar el tipo de una estructura como
se indica a continuacin:
... <pi> [STRUCTURE <e>] ...

Pgina 140 de 194

ABAP Fundamentos y Reporting


donde <e> es una estructura local del programa (un objeto de datos no un tipo) o una
estructura del Diccionario de ABAP. El parmetro formal estar estructurado de
acuerdo con <e>, y podremos acceder a sus componentes individuales dentro de la
subrutina. Cuando se pase el parmetro actual, el sistema slo verificar que el
parmetro actual es al menos tan largo como la estructura. Por lo tanto, STRUCTURE
nos permite forzar una visin estructurada de cualquier parmetro actual.
DATA: BEGIN OF LINEA,
COL1,
COL2,
END OF LINE.
DATA TEXTO(2) VALUE 'XY'.
PERFORM DEMO USING TEXTO.
FORM DEMO USING P STRUCTURE LINEA.
WRITE: P-COL1, P-COL2.
ENDFORM.

La salida es:
XY
La cadena TEXTO se ajusta a la estructura LINEA.
Para asegurar la compatibilidad con las versiones anteriores, an sigue estando
permitida la siguiente opcin (que ha de colocarse antes de USING y CHANGING):
FORM <subr> TABLES ... <tabii> [TYPE <t>|LIKE <c>] ...
Los parmetros formales <tabii> se definen como tablas internas estndar con lneas
de cabecera. Si utilizamos una tabla interna sin lnea de cabecera como el
correspondiente parmetro actual de un parmetro formal de este tipo, el sistema crea
una lnea de cabecera local para el parmetro formal en la subrutina. Si pasamos una
tabla interna como lnea de cabecera, el cuerpo y el rea de trabajo de la tabla se
pasarn a la subrutina. Los parmetros formales definidos utilizando TABLES no
pueden ser pasados por referencia. Si queremos acceder a los componentes de las
lneas estructuradas, debemos especificar el tipo del parmetro TABLES de forma
adecuada.
Desde la versin 3.0, debemos utilizar USING o CHANGING en vez de la opcin
TABLES para las tablas internas.

13.4.1.6

Clases de parmetros

Se pueden clasificar los parmetros en funcin de la forma en que se utilicen: por valor,
por referencia o por valor y resultado.
Valor

Usando la opcin VALUE(<nombre del parmetro>) en el lugar del


nombre del parmetro en la clusula USING conseguimos que el
sistema realice una copia local del parmetro actual. Se reserva un
espacio de memoria donde se copia su valor. Esto implica que las
modificaciones realizadas sobre el parmetro formal no afectarn al
parmetro actual.

Referencia

Si no se usa VALUE, no se reserva espacio de memoria para una copia

Pgina 141 de 194

ABAP Fundamentos y Reporting


local del parmetro, se utiliza la localizacin en memoria (direccin) del
parmetro actual. Esto implica que se trabajas directamente sobre el
campo del programa llamante. Si el valor del parmetro formal es
modificado, el contenido del parmetro actual tambin cambiar.
En una llamada por referencia, USING y CHANGING son equivalentes,
pero deberamos utilizar USING para parmetros de entrada que no van
a ser cambiados en la subrutina, y CHANGING para parmetros de
salida que sern cambiados en la subrutina.
Form Name using value(fi)

Por valor.

Form Name using (fi)

Por referencia.

Form Name using changing value (fi) Por valor y resultado.


Se puede llamar a una rutina chequeando o no los parmetros, para forzar esta
comprobacin, definir el tipo de dato en la declaracin de la rutina. En ambos casos
obtenemos mensajes de error si los datos son incompatibles.
Se pueden pasar, fields strings, header lines, tablas... Para pasar las estructuras o
fields strings como registros y tratarlos como tales se ha de especificar like o type.
Form write-sflight using rec like sflight. De esta manera tambin se realizan chequeos.
Endform.
Sino realizamos esto no nos podremos referenciar a un campo del field string o
registro.
Perform calc_write1 using tab[].

Solo pasaremos el cuerpo.

Perform calc_write2 table tab.

Pasamos cuerpo y cabecera.

Form calc_write1 using tabbody like tab[].


Form calc_write2 tables itab structure tab.
Mediante el segundo mtodo, pasamos esta tabla por referencia. Con STRUCTURE
asignamos un tipo a la tabla.

13.4.1.7

Llamada

Llamaremos a las subrutinas desde cualquier bloque de proceso utilizando la


sentencia:
PERFORM.<nombre_subrutina>.. [USING ... <pi>... ]
[CHANGING... <pi>... ].

Las subrutinas pueden llamar a otras subrutinas (llamadas anidadas) y tambin


pueden llamarse a s mismas (llamadas recursivas). Una vez que una subrutina ha
finalizado su ejecucin, el programa llamante recobra el control con la siguiente
sentencia que aparezca despus del PERFORM.
El nmero de parmetros actuales usados en la llamada debe coincidir con el de
parmetros formales declarados en la definicin de la subrutina. No se pueden definir
parmetros opcionales.
Es crucial la secuencia de los parmetros en la llamada, ya que se asignan los valores
a los parmetros formales en el orden en que son listados en la sentencia PERFORM.
Si una subrutina contiene el parmetro TABLES en su interfase, debemos especificar
la opcin TABLES en la sentencia PERFORM antes de utilizar los parmetros USING
y CHANGING. Los parmetros TABLES se admiten slo para asegurar la

Pgina 142 de 194

ABAP Fundamentos y Reporting


compatibilidad con las versiones anteriores, y ya no deberan utilizarse en los nuevos
desarrollos.
El sistema tambin comprueba que los tipos de los parmetros actuales sean
compatibles con los de los parmetros formales. Para ello realiza diferentes chequeos
en funcin del tipo del parmetro, como ya hemos visto.

13.4.1.8

Llamada externa

Con la sentencia PERFORM, podemos llamar a las subrutinas que estn codificadas
en el mismo programa ABAP (llamadas internas), o a subrutinas que estn codificadas
en otros programas ABAP (llamadas externas).
Mientras que para llamar a una subrutina definida en el mismo programa, slo
necesitamos especificar su nombre en la sentencia PERFORM, para llamar a una
subrutina externa debemos indicar el nombre del programa que la contiene con la
adicin IN PROGRAM <programa>.
La principal funcin de las subrutinas es la modularizacin y estructuracin lgica de
los programas. Sin embargo, las subrutinas tambin pueden ser llamadas
externamente desde otros programas ABAP. En un caso extremo, podemos tener un
programa ABAP que slo contenga subrutinas. Estos programas no pueden ejecutarse
por s mismos, sin que son utilizados por otros programas ABAP como pools de
subrutinas externas.
Sin embargo, si queremos hacer que una funcin est disponible en cualquier parte
del sistema, deberamos utilizar los mdulos de funcin en lugar de subrutinas
externas. Los mdulos de funcin estn almacenados en una biblioteca central.

13.4.1.9

Llamada dinmica

Podemos especificar el nombre de una subrutina dinmicamente y, en el caso de


llamadas externas, el nombre del programa en el que se encuentra, como se indica a
continuacin:
PERFORM (<subr>)[IN PROGRAM (<prog>)][USING ... <pi>... ]
[CHANGING... <pi>... ]
[IF FOUND].

Los nombres de la subrutina y del programa externo sern los contenidos de los
campos <subr> y <prog> respectivamente. Si utilizamos la opcin IF FOUND,
podemos evitar que se lance un error en tiempo de ejecucin desde el programa
<prog> si no contiene una subrutina con el nombre <subr>. Si quitamos los parntesis
se vuelve igual que la variante esttica.
Supongamos que tenemos un programa que contiene las siguientes subrutinas:
PROGRAM FORMPOOL.
FORM SUB1.
WRITE: / 'Subrutina 1'.
ENDFORM.
FORM SUB2.
WRITE: / 'Subrutina 2'.
ENDFORM.

Especificacin dinmica de subrutinas:


PROGRAM TEST_FORM.

Pgina 143 de 194

ABAP Fundamentos y Reporting


DATA: NOMBRE_PROGRAMA(8) VALUE 'FORMPOOL',
NOMBRE_SUBRUTINA(8).
NOMBRE_SUBRUTINA = 'SUB1'.
PERFORM (NOMBRE_SUBRUTINA) IN PROGRAM (NOMBRE_PROGRAMA) IF FOUND.
NOMBRE_SUBRUTINA = 'SUB2'.
PERFORM (NOMBRE_SUBRUTINA) IN PROGRAM (NOMBRE_PROGRAMA) IF FOUND.

Se produce la siguiente salida:


Subrutina 1
Subrutina 2
El campo de caracteres NOMBRE_PROGRAMA contiene el nombre del programa en el que se
encuentran las subrutinas. Los nombres de las subrutinas se asignan al campo de caracteres
NOMBRE_SUBRUTINA.
Llamada a subrutinas de una lista: Podemos llamar a una subrutina a partir de una
lista como se indica a continuacin:
PERFORM <ind> OF <subr1> <subr 2>... <subr n>.

El sistema llama a la subrutina especificada en la lista de subrutinas que se encuentre


en la posicin <ind>. Slo podemos utilizar esta variante de la sentencia PERFORM
para llamadas internas a subrutinas, y slo para subrutinas sin interfase de parmetros.
El campo <ind> puede ser una variable o un literal.
PROGRAM TEST_FORM.
DO 2 TIMES.
PERFORM SY-INDEX OF SUB1 SUB2.
ENDDO.
FORM SUB1.
WRITE / 'Subrutina 1'.
ENDFORM.
FORM SUB2.
WRITE / 'Subrutina 2'.
ENDFORM.

Este programa produce la siguiente salida:


Subrutina 1
Subrutina 2
En este ejemplo, las dos subrutinas internas, SUB1 y SUB2, se llaman consecutivamente a
partir de una lista.
Podemos especificar los parmetros actuales especificando desplazamiento y longitud
de variables.
PROGRAM TEST_FORM.
DATA: A1 TYPE P DECIMALS 3,
A2 TYPE I,
A3 TYPE D,

Pgina 144 de 194

ABAP Fundamentos y Reporting


A4 TYPE SPFLI-CARRID,
A5 TYPE C.
...
PERFORM SUBR USING A1 A2 A3 A4 A5.
...
PERFORM SUBR CHANGING A1 A2 A3 A4 A5.
...
PERFORM SUBR USING A1 A2 A3
CHANGING A4 A5.
...
FORM SUBR USING VALUE(F1) TYPE P
VALUE(F2) TYPE I
F3

LIKE A3

CHANGING VALUE(F4) TYPE SPFLI-CARRID


F5.
...
ENDFORM.

Este ejemplo define una subrutina SUBR con una interfase de parmetros que contiene cinco
parmetros formales F1 a F5. La subrutina es llamada internamente tres veces. Los parmetros
actuales son los objetos de datos A1 a A5. Las tres llamadas a la subrutina son igualmente
vlidas. Existen otras sentencias PERFORM que tambin son igualmente vlidas, con tal de
que la secuencia de los parmetros actuales permanezca fija. En cada llamada, A1 se pasa a F1,
A2 a F2, y as sucesivamente. Cuando termina la subrutina, A3, A4 y A5 reciben
respectivamente los valores de F3, F4 y F5. La tercera de las llamadas a la subrutina slo cambia
A4 y A5. Si A3 cambia o no depender de la forma en que se programe la subrutina.
El siguiente ejemplo muestra cmo los parmetros formales definidos de forma genrica heredan
sus atributos tcnicos de los correspondientes parmetros actuales.
REPORT FORMTEST.
DATA:
FECHA1

TYPE D, FECHA2 TYPE T,

STRING1(6) TYPE C, STRING2(8) TYPE C,


NUMERO1

TYPE P DECIMALS 2, NUMERO2 TYPE P,

CONT1

TYPE I, CONT2 TYPE I.

PERFORM TEST_TIPO USING FECHA1 STRING1 NUMERO1 CONT1.


SKIP.
PERFORM TEST_TIPO USING FECHA2 STRING2 NUMERO2 CONT2.
FORM TEST_TIPO USING AHORA
TXT

TYPE C

VALUE(NUM) TYPE P
INT

TYPE I.

DATA: T.

Pgina 145 de 194

ABAP Fundamentos y Reporting


DESCRIBE FIELD AHORA TYPE T.
WRITE: / 'El tipo de AHORA es', T.
DESCRIBE FIELD TXT LENGTH T.
WRITE: / 'La longitud de TXT es', T.
DESCRIBE FIELD NUM DECIMALS T.
WRITE: / 'Los decimales de NUM son', T.
DESCRIBE FIELD INT TYPE T.
WRITE: / 'El tipo de INT es', T.
ENDFORM.

Este programa produce la siguiente salida:


El tipo de AHORA es D
La longitud de TXT es 6
Los decimales de NUM son 2
El tipo de INT es I
El tipo de AHORA es T
La longitud de TXT es 8
Los decimales de NUM son 0
El tipo de INT es I
Se llama dos veces a la subrutina interna TEST_TIPO con diferentes parmetros actuales.
Todos los parmetros actuales y formales son compatibles y no se produce ningn mensaje de
error durante la verificacin de sintaxis. Si hubisemos declarado CONT2 de tipo F en lugar de
tipo I, la verificacin de sintaxis hubiese devuelto un error, ya que el parmetro formal INT se
ha especificado como de tipo I. Los parmetros formales con tipos genricos adoptan atributos
tcnicos diferentes dependiendo de sus correspondientes atributos tcnicos.

13.4.1.10

Fin de subrutina

Normalmente, una subrutina finaliza con la sentencia ENDFORM. Sin embargo,


podemos hacer que termine antes utilizando las sentencias EXIT o CHECK. Cuando
finalizamos una subrutina con estas sentencias, los valores actuales de los parmetros
de salida (parmetros CHANGING) son devueltos a los correspondientes parmetros
actuales.
Utilizaremos EXIT (fuera de un bucle) para finalizar una subrutina de forma
incondicional. El programa llamante recupera el control en la siguiente sentencia que
aparezca despus del PERFORM.
PROGRAM TEST_FORM.
PERFORM FINALIZAR.
WRITE 'Fin'.
FORM FINALIZAR.
WRITE '1'.
WRITE '2'.
WRITE '3'.
EXIT.
WRITE '4'.

Pgina 146 de 194

ABAP Fundamentos y Reporting


ENDFORM.

Este programa produce la siguiente salida:


1 2 3 Fin
En este ejemplo, la subrutina FINALIZAR termina despus de la tercera sentencia WRITE.
Utilizaremos CHECK (fuera de un bucle) para finalizar una subrutina de forma
condicional. Si la expresin lgica de la sentencia CHECK es falsa, la subrutina
finalizar, y el programa llamante continuar el procesamiento despus de la sentencia
PERFORM.
PROGRAM TEST_FORM.
DATA: NUM1 TYPE I,
NUM2 TYPE I,
RES

TYPE P DECIMALS 2.

NUM1 = 3. NUM2 = 4.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
NUM1 = 5. NUM2 = 0.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
NUM1 = 2. NUM2 = 3.
PERFORM DIVIDE USING NUM1 NUM2 CHANGING RES.
FORM DIVIDE USING N1 N2 CHANGING R.
CHECK N2 NE 0.
R = N1 / N2.
WRITE: / N1, '/', N2, '=', R.
ENDFORM.

Este programa produce la siguiente salida:


3 / 4 = 0.75
2 / 3 = 0.67
En este ejemplo, el sistema abandona la subrutina DIVIDE en la segunda llamada despus de la
sentencia CHECK, ya que el valor de N2 es cero.
Si las sentencias EXIT o CHECK se encuentran dentro de un bucle de una subrutina,
se aplicarn al bucle, y no a la subrutina. EXIT y CHECK finalizan los bucles de formas
diferentes, pero se comportan de forma idntica cuando finalizan subrutinas.

13.4.2

Funciones

Los mdulos de funcin son procedimientos externos porque pueden ser llamados
desde cualquier programa del sistema con la sentencia CALL FUNCTION. Se dice que
tienen una interfase transparente porque sus parmetros no forman parte de su cdigo
ABAP sino que son creados a parte y pueden ser mantenidos de manera
independiente. Gracias a la existencia de parmetros opcionales se puede modificar la
interfase sin tocar las sentencias ABAP.
Los mdulos de funcin se definen en grupos de funciones. Los grupos de funciones
actan exclusivamente como contenedores de varios mdulos de funcin que, por su
temtica, deben estar juntos. Los grupos de funciones y los mdulos de funcin se
crean en la Biblioteca de Funciones (SE37), una de las herramientas del ABAP
Workbench.

Pgina 147 de 194

ABAP Fundamentos y Reporting


Los mdulos de funcin nos permiten encapsular y reutilizar funciones globales en el
sistema R/3, operaciones susceptibles de ser utilizadas en muchos programas.
Adems de evitar que se repita el mismo cdigo en diferentes programas (el cdigo se
escribe una sola vez en la Biblioteca, no en los programas que lo llaman), se facilita el
mantenimiento del proceso ya que las modificaciones que se realicen en un mdulo de
funcin afectan a todos los programas que lo utilicen.
Estn almacenados centralmente en el Repositorio ABAP. El Sistema R/3 contiene un
gran nmero de mdulos de funcin predefinidos que podemos llamar desde cualquier
programa ABAP. Los podemos localizar mediante el sistema de informacin del
Repositorio.
Los mdulos de funcin tambin juegan un papel importante en las actualizaciones de
la base de datos y en las comunicaciones remotas entre Sistemas R/3 o entre un
Sistema R/3 y otro que no lo sea.
La definicin de la interfase ABAP permanece oculta para el programador. Podemos
definir los parmetros de entrada de un mdulo de funcin como opcionales. Tambin
podemos asignar valores por defecto para ellos. Los mdulos de funcin tambin
admiten el tratamiento de excepciones. Esto nos permite tratar ciertos errores mientras
se est ejecutando el mdulo de funcin. Adems, podemos probar los mdulos de
funcin sin tener que incluirlos en un programa.
El Constructor de Funciones tambin tiene un proceso de liberacin de mdulos de
funcin. Esto nos asegura que no se puedan realizar cambios incompatibles en
cualquier mdulo de funcin que ya haya sido liberado. Esto se aplica especialmente a
la interfase. Los programas que utilizan un mdulo de funcin liberado no dejarn de
funciones si se cambia el mdulo de funcin.

13.4.2.1

Grupos de funciones

Los grupos de funciones son recipientes para mdulos de funcin en los que se
agrupan por el tipo de tarea que realizan (por ejemplo los mdulos de SCAL realizan
clculos con fechas). Un grupo de funciones es un programa ABAP especial de tipo F
que no se puede ejecutar. Es accesible en el sistema en cuanto se ha activado.
Cuando llamamos a un mdulo de funcin, el sistema carga la totalidad del grupo de
funciones en una sesin interna del programa llamante (si no haba sido cargada ya).
El siguiente diagrama muestra la estructura de un grupo de funciones. El nombre del
grupo de funcin puede tener hasta 30 caracteres y solo puede contener
alfanumricos y . Debe comenzar por Z o Y. Este nombre se utiliza para crear los
componentes del grupo (el programa principal y los correspondiente programas
include). Cuando creamos un grupo de funciones o un mdulo de funcin, se genera
automticamente el programa principal y los programas include.

Pgina 148 de 194

ABAP Fundamentos y Reporting

El programa principal SAPL<grpf> no contiene ms que sentencias INCLUDE para los


siguientes programas include:
L<grpf>TOP. Este include contiene la sentencia FUCTION-POOL (equivalente en un
grupo de funciones de la sentencia REPORT o PROGRAM) y las declaraciones de
datos globales para la totalidad de grupo de funciones.
L<grpf>UXX. Este include contiene sentencias INCLUDE adicionales para los
programas L<grpf>U01, L<grpf>U02,... Estos includes contienen los mdulos de
funcin.
Los programas include L<grpf>F01, L<grpf>F02,... pueden contener el cdigo de
subrutinas que pueden ser ejecutadas mediante llamadas internas a subrutinas desde
cualquiera de los mdulos de funcin del grupo.
La creacin de estos programas include se puede realizar mediante navegacin
avanzada (por ejemplo, la creacin de un include de subrutinas se puede realizar
haciendo un doble click sobre el nombre de la subrutina en una sentencia PERFORM
de un mdulo de funcin).
No podemos declarar una COMMON PART en un grupo de funciones. Los grupos de
funciones tienen sus propias reas de trabajo de tablas (TABLES). Los grupos de
funciones encapsulan los datos. A este respecto, son los precursores de los Objetos
ABAP.
Todos los mdulos de funcin que pertenezcan al mismo grupo de funciones pueden
acceder a los datos globales del grupo. Por esta razn, debemos colocar los mdulos
de funcin que utilicen los mismos datos en un nico grupo de funciones. Por ejemplo,
si tenemos un conjunto de mdulos de funcin que utilicen la misma tabla interna,
deberamos colocarlos en un grupo de funciones que contenga la definicin de la tabla
como dato global.
Al igual que los programas ejecutables (tipo1) y los module-pool (tipo M), los grupos de
funciones pueden contener pantallas, pantallas de seleccin y listas. Las entradas del
usuario se procesan tanto en mdulos de dilogo como en los bloques de eventos

Pgina 149 de 194

ABAP Fundamentos y Reporting


correspondientes en el programa principal del grupo de funciones. Estos son
programas include especiales en los cuales podemos escribir este cdigo. De esta
forma, podemos utilizar los grupos de funciones para encapsular pantallas o
secuencias de pantallas.
Seleccionaremos Grupo de funciones, pondremos el nombre del grupo de funciones a Crear
Ej ZCXX.
Aparecer una ventana el la que definir los atributos del grupo de funciones.

Grupo de funciones: Nombre del grupo de funciones.


Texto breve: Descripcin del grupo de funciones.
Ej: Asignacin de nmeros.
Responsable: Usuario responsable del grupo de funciones.

13.4.2.2

Llamada a funciones

Para llamar a un mdulo de funcin utilizaremos la sentencia CALL FUNCTION:


CALL FUNCTION <mdulo>
[EXPORTING f1 = a 1.... f n = a n]
[IMPORTING f1 = a 1.... f n = a n]
[CHANGING f1 = a 1.... f n = a n]
[TABLES f1 = a 1.... f n = a n]
[EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E]
[OTHERS = ro]].

Podemos especificar el nombre del mdulo de funcin tanto mediante un literal como
con el contenido de una variable. Cada parmetro de la interfase <fi> se asigna
explcitamente a un parmetro actual <a i>. Podemos asignar un valor de retorno <r i>
a cada excepcin <e i>. La asignacin siempre tiene la forma <parmetro de la
interfase> = <parmetro actual>.
Despus de EXPORTING, debemos suministrar valores a todos los parmetros Import
que no sean opcionales con los valores apropiados de su tipo. Podemos pasar valores
a los parmetros Import opcionales si lo deseamos
Despus de IMPORTING, podemos recibir los parmetros Export del el mdulo de
funcin asignndolos a las variables del tipo apropiado.
Despus de CHANGING o TABLES, debemos suministrar valores a todos los
parmetros Changing no opcionales o Tablas. Cuando el mdulo de funcin termine
su ejecucin, los valores cambiados sern devueltos a los parmetros actuales.
Podemos pasar valores a los parmetros Changing o Tablas que sean opcionales.
Podemos utilizar la opcin EXCEPTIONS para manejar las excepciones del mdulo de
funcin. Si se produce una excepcin <e i> mientras se est ejecutando el mdulo de

Pgina 150 de 194

ABAP Fundamentos y Reporting


funcin, el sistema finaliza el mdulo de funcin y no pasa ningn valor desde el
mdulo de funcin al programa, excepto aquellos que se pasen por referencia. Si se
especifica <e i> en la opcin EXCEPTION, el programa llamante tratar la excepcin
asignando <r i> a SY-SUBRC. <r i> debe ser un literal numrico.
Si especificamos ERROR_MESSAGE en la lista de excepciones podemos influir en el
tratamiento de los mensajes del mdulo de funcin. Normalmente, slo deberamos
llamar a los mensajes de un mdulo de funcin utilizando la sentencia MESSAGE...
RAISING. Con ERROR_MESSAGE podemos forzar que el sistema trate los mensajes
que se han llamado sin la opcin RAISING en un mdulo de funcin. Para ello:
Los mensajes de las clases S, I, y W son ignorados (pero se escriben en el log de un
job que se ejecute en fondo.
Los mensajes de las clases E y A detiene la ejecucin del mdulo de funcin como si
se hubiera producido la excepcin ERROR_MESSAGE (SY-SUBRC se pone a <r E>
Si especificamos OTHERS despus de EXCEPTIONS, el sistema asignar un nico
cdigo de retorno para todas las excepciones que no hayamos especificado
explcitamente en la lista.
Podemos asignar el mismo nmero <r i> para varias excepciones.
La forma recomendada y ms fcil de llamar a un mdulo de funcin es utilizar la
funcin Insertar Patrn del Editor de ABAP. Si seleccionamos el radiobutton CALL
FUNCTION y especificamos el nombre del mdulo de funcin (est disponible la
ayuda F4), el sistema inserta la sentencia CALL FUNCTION con todas las opciones
del mdulo de funcin en el cdigo fuente del programa.

Las partes opcionales de la llamada a la funcin se insertarn como comentarios. En


el ejemplo anterior, STRING y POS son parmetros obligatorios. Por otra parte,
LANGU, es opcional. Su valor por defecto es SY-LANGU (campo del sistema que
contiene el idioma en el que se entr al sistema). El tratamiento de los parmetros
Export es opcional. El tratamiento de las excepciones es tambin tericamente

Pgina 151 de 194

ABAP Fundamentos y Reporting


opcional. Sin embargo, siempre deberamos tratarlo. Esta es la razn por la cual se
han quitado los comentarios de las lneas de EXCEPTIONS
Podemos lanzar las excepciones en el mdulo de funcin tanto con RAISE como con
MESSAGE... RAISING. Si el programa llamante trata la excepcin, ambas sentencias
devuelven el control al programa. La sentencia MESSAGE... RAISING no visualizar el
mensaje en este caso. En lugar de ello, actualiza los siguientes campos del sistema:
Clase de Mensaje SY-MSGID
Tipo de Mensaje SY-MSGTY
Nmero de Mensaje SY-MSGNO
De SY-MSGV1 a SY-MSGV4 (contenido de los campos <f1> a <f4>, incluidos en un
mensaje).
Podemos utilizar los campos del sistema para lanzar el mensaje desde el programa
llamante.
Para asegurar que utilizamos los tipos de datos correctos para los parmetros actuales,
debemos ir a la interfase del mdulo de funcin. Para ello haremos un doble click en el
nombre del mdulo de funcin desde el cdigo fuente de nuestro programa. El sistema
navegar al cdigo fuente que se encuentra en el Constructor de Funciones. Podemos
visualizar la interfase eligiendo la opcin del men Pasar a Interfase.
Por ejemplo, en el caso anterior
STRING, STRING1 y STRING2 tienen el tipo genrico C. Los parmetros actuales
deben tener tambin el tipo C, pero su longitud no importa,
POS y POS_NEW tienen un tipo I especificado completamente. Los parmetros
actuales deben ser tambin del tipo I.
LANGU tambin tiene un tipo definido completamente, ya que hace referencia al
campo del Diccionario de ABAP SY-LANGU. El parmetro actual debe tener el mismo
tipo.
Una llamada al mdulo de funcin STRING_SPLIT_AT_POSITION podra ser algo parecido a
lo siguiente:
DATA: TEXTO(10) TYPE C VALUE '0123456789',
TEXTO1(6) TYPE C,
TEXTO2(6) TYPE C.
PARAMETERS POSICION TYPE I.
CALL FUNCTION 'STRING_SPLIT_AT_POSITION'
EXPORTING
STRING = TEXTO
POS

= POSICION

IMPORTING
STRING1 = TEXTO1
STRING2 = TEXTO2
EXCEPTIONS
STRING1_TOO_SMALL = 1
STRING2_TOO_SMALL = 2
POS_NOT_VALID

= 3

OTHERS

= 4.

Pgina 152 de 194

ABAP Fundamentos y Reporting


CASE SY-SUBRC.
WHEN 0.
WRITE: / TEXTO, / TEXTO1, / TEXTO2.
WHEN 1.
WRITE 'Campo destino 1 demasiado corto!'.
WHEN 2.
WRITE 'Campo destino 2 demasiado corto!'.
WHEN 3.
WRITE 'Posicin de divisin no vlida!'.
WHEN 4.
WRITE 'Otro tipo de error!'.
ENDCASE.

El mdulo de funcin divide un campo de entrada a partir de una posicin determinada en dos
campos de salida. Si el contenido de POSICION es un intervalo [4,6], se ejecutar el mdulo de
funcin sin que se produzca ninguna excepcin. Para los intervalos [1,3] y [7,9], el sistema
lanza respectivamente las excepciones STRING1_TOO_SMALL y STRING2_TOO_SMALL.
Para el resto de los valores de POSICION, se lanza la excepcin POS_NOT_VALID.

13.4.2.3

Buscar mdulos de funcin

Antes de programar una nueva funcin o crearla, deberamos comprobar si no existe


ya un mdulo de funcin que realice la misma tarea. Por ejemplo, si buscamos
mdulos de funcin que procesen cadenas de caracteres, introduciremos *STRING*
como criterio de bsqueda. Este es un extracto de los mdulos de funcin encontrados:

El ttulo CSTR es el del grupo de funciones. Existe un programa principal SAPLCSTR


que contiene estos mdulos de funcin. Si seleccionamos un mdulo de funcin,
podemos visualizar sus atributos. Los atributos ms importantes son:
Documentacin: La documentacin describe el propsito del mdulo de funcin, la lista
de los parmetros para pasar y recibir datos de los mdulos, y las excepciones. Nos
dice cmo pasar datos y recibir datos del mdulo de funcin y que errores maneja.
Interfase de parmetros y excepciones: Esta seccin ofrece una informacin adicional
acerca de la interfase de parmetros y excepciones, y cmo utilizar el mdulo de
funcin. Los mdulos de funcin pueden tener los siguientes parmetros en su
interfase:
Parmetros Import. Se les deben suministrar datos cuando llamamos al mdulo de
funcin, a menos que se trate de parmetros opcionales. No podemos cambiarlos en
el mdulo de funcin.
Parmetros Export. Devuelven los datos desde el mdulo de funcin al programa
llamante. Los parmetros Export son siempre opcionales.

Pgina 153 de 194

ABAP Fundamentos y Reporting


Parmetros Changing. Se les deben suministrar datos cuando llamamos al mdulo de
funcin, salvo que se trate de parmetros opcionales. Pueden ser cambiados en el
mdulo de funcin. Los valores cambiados son devueltos al programa llamante.
Parmetros Tablas. Los utilizaremos para pasar tablas internas. Son tratados como los
parmetros CHANGING. Sin embargo, tambin podemos pasar tablas internas con
otros parmetros si especificamos el tipo de parmetros de forma apropiada.
Podemos especificar los tipos de la interfase de parmetros, tanto haciendo referencia
a los tipos del Diccionario ABAP como a los tipos elementales de ABAP. Cuando
llamamos a un mdulo de funcin, debemos asegurarnos que son compatibles los
parmetros actuales y la interfase de parmetros.
Por defectos, los parmetros de la interfase son pasados por valor. Sin embargo,
tambin pueden ser pasados por referencia. Los parmetros tabla slo se pasan por
referencia.
Las excepciones se utilizan para el tratamiento de errores que tienen lugar dentro de
los mdulos de funcin. El programa llamante debe verificar si se ha producido algn
error y responder a l adecuadamente.
Antes de incluir un mdulo de funcin en un programa, podemos probarlo.

13.4.2.4

Crear mdulos de funcin

Podemos crear mdulos de funcin y grupos de funciones utilizando la Biblioteca de


Funciones del Workbench de ABAP. La ruta de acceso es Herramientas ->
Workbench ABAP4->Desarrollo->Biblioteca funciones (SE37).

Pgina 154 de 194

ABAP Fundamentos y Reporting

Un modulo de funcin esta formado por unos datos administrativos, su interfase, su


cdigo fuente y su documentacin.
Desde esta pantalla se pueden crear, modificar o visualizar todas las partes de un
mdulo de funcin marcando las distintas opciones de objetos parciales.
Para crear un mdulo de funcin se deber especificar el nombre en la pantalla inicial
con la opcin Gestin activada. El
y pulsar el botn de crear
nombre de una funcin puede tener hasta 30 caracteres que solo pueden ser
alfanumricos o .
Aparecer una pantalla en la que se debe indicar el grupo de funciones a la que
pertenece el mdulo de funcin junto con la descripcin de su funcionalidad.
Se debern informar los siguiente datos de gestin del mdulo de funcin
Clasificacin:
Aplicacin: Mdulo al que pertenece el programa ( FI , HHRR ).
Forma ejec.: Normal o Apoyo Remote Function Call si la funcin puede ser ejecutada
desde otros sistemas externos (WWW, otro R/3, programas propios JAVA, C++, Visual
Basic) usando RFC.
Actualizable: Se puede lanzar la ejecucin de una funcin de manera asncrona o
paralela. Aqu se puede especificar el modo de tratamiento de la tarea de actualizacin
(inicio inmediato, inicio inmediato sin actualizacin posterior, inicio retardado o
lanzamiento colectivo).
Al finalizar la introduccin de los datos de gestin se deber grabar el mdulo de
funcin. El modulo de funcin estar disponible en el sistema cuando lo activemos. En
ese momento tambin se generar el grupo de funciones al que pertenece.

Pgina 155 de 194

ABAP Fundamentos y Reporting


13.4.2.5

Interfase de la funcin

Hemos dicho anteriormente que la interfase de los mdulos de funcin se describe


como transparente porque se mantiene de manera independiente del cdigo. Tenemos
de hecho una pantalla especfica para introducir los parmetros donde se deben
indicar las listas de parmetros de entrada y de salida. Los parmetros import son los
que se le pasan a la funcin desde el programa que llama y los parmetros export son
los que la funcin devuelve al programa que llama.
Como los mdulos de funcin se pueden utilizar desde cualquier parte del sistema, su
interfase slo puede hacer referencia a los tipos de datos declarados en el sistema.
Estos son los tipos de datos elementales de ABAP, los tipos genricos, tales como
ANY TABLE, y los tipos definidos en el Diccionario de ABAP. No podemos utilizar LIKE
para hacer referencia a los tipos declarados en un programa principal.
Los mtodos para pasar parmetros son anlogos a los utilizados en las subrutinas:
por valor o por referencia. Como en esos procedimientos, se puede forzar el chequeo
del tipo del parmetro, y si no se indica tipo, el parmetro formal hereda los atributos
del actual.
Una diferencia fundamental con los parmetros de las subrutinas es la posibilidad de
tener parmetros opcionales.
Se debe documentar la interfase de un mdulo de funcin con unas descripciones
breves de los parmetros y de las excepciones, pero adems es posible crear una
documentacin ms extensa.

Parmetro: Nombre de los parmetros de entrada.


Tipificacin: Tipo de dato del parmetro.
Como campo/estructura, podemos introducir una columna de una tabla de la base de
datos, un componente de una estructura del diccionario, o una estructura completa del
Diccionario.
Pgina 156 de 194

ABAP Fundamentos y Reporting


Tipo Ref.

Tipo de referencia ( Solo se indicar una de estas dos ltimas ).

En Tipo ref. podemos poner cualquier tipo genrico o cualquier tipo de datos que sea
vlido en todo el sistema. En este ejemplo, los parmetros Import se han definido en
referencia a tipo de datos elementales del Diccionario de ABAP (elementos de datos).
Valor Propuesto:

Valor por defecto cuando se declara como opcional.

Flag opc.

Indicador de parmetro no obligatorio.

Flag. Tras.

Indicacin de que el parmetro se recibe por valor/referencia.

Son los parmetros de salida de funcin.


Parmetros de entrada y salida del mdulo de funcin. Estos parmetros devuelven el
valor de salida al finalizar la ejecucin del mdulo de funcin sin errores, manteniendo
el valor de entrada en caso contrario.
Ej.: Se crea el parmetro import BUKRS con el campo de referencia ZCLIENXX-BUKRS
para recibir la sociedad del cliente, y el parmetro export NCLIE con el campo de referencia
ZCLIENXX-NCLIE para devolver el nmero de cliente.

13.4.2.6

Tablas

Adems de los parmetros de entrada y salida definidos anteriormente, tambin se


pueden traspasar tablas por referencia en la llamada al mdulo de funcin.

Parmetro tabla: Nombre del parmetro de tabla.


Tipificacin : Tipo de datos de la tabla
Tipo ref.: Estructura de referencia del diccionario de datos para especificar la
estructura del parmetro de tabla.
Opcional: Si se activa este flag no ser obligatorio informar el parmetro de tabla en la
llamada al mdulo de funcin.
Pgina 157 de 194

ABAP Fundamentos y Reporting


13.4.2.7

Excepciones

Las excepciones son una serie de errores predefinidos en los mdulos de funcin que
devuelven un valor de retorno concreto en la variable del sistema SY-SUBRC.
El objetivo es anticipar los posibles errores y as evitar que stos produzcan errores en
tiempo de ejecucin. Se da un nombre a cada posible error en la interfase del mdulo
de funcin y se lanzan los errores desde el cdigo fuente con la sentencia RAISE. El
valor de retorno que se pasa al programa llamante depende de la posicin de la
excepcin en la tabla de excepciones.
Por defecto siempre existe la excepcin OTHERS, aunque aparezca definida, que se
utiliza para devolver un error genrico y devuelve en la variable SY-SUBRC el valor
siguiente al de la ltima excepcin creada.
Para devolver una excepcin desde el cdigo del modulo de funcin se utiliza la
sentencia RAISE <excepcin>, finalizando as la ejecucin de la funcin y devolviendo
el cdigo asociado a la excepcin en la variable SY-SUBRC. En caso de devolver una
excepcin no se actualiza el valor de salida de los parmetros CHANGING.
El efecto de esta sentencias depende de si el programa llamante trata las excepciones
o no. Si el nombre <excepcin> de la excepcin u OTHERS aparece en la opcin
EXCEPTIONS de la sentencia CALL FUNCTION, el control del error se realizar en el
programa llamante. Si no aparece en el programa llamante, la sentencia RAISE
finaliza el programa.
Podemos asegurarnos de que el sistema muestra un mensaje de error cuando se
produce la excepcin aunque no la tratemos: mediante la sentencia MESSAGE...
RAISING. La forma en la que contine el procesamiento depende del tipo de mensaje.
Si el programa llamante no trata la excepcin no se visualizar el mensaje; en lugar de
ello rellenar los campos del sistema SY-MSGID, SY-MSGTY, SY-MSGNO y SYMSGV1 a SY-MSGV4.

13.4.2.8

Datos globales

Las definiciones globales de datos son compartidas por todos los mdulos de funcin
de un grupo de funciones. Las definiciones de objetos globales se mantienen a travs
de la opcin de men Pasar a Datos globales.
Nota: Las definiciones globales y el texto fuente del mdulo de funcin se codifican
realmente en el editor ABAP/4 utilizando los mismos comandos que en la codificacin
de listados.
Podemos utilizar las sentencias TYPES y DATA para crear tipos y objetos de datos
locales. Los parmetros de la interfase tambin se comportan como objetos de datos
locales. Adems, podemos acceder a todos los datos globales del programa principal.
Estos datos estn definidos en el programa include L<grpf>TOP. Para abrir este
include, elegiremos la opcin del men Pasar a Datos globales. La primera vez
que llamamos al mdulo de funcin de un grupo de funciones determinado, los datos
se cargarn en la memoria. Estos datos pueden ser ledos y modificados por
cualquiera de los mdulos de funcin del grupo. El sistema retendr los valores hasta
que se llame de nuevo al mdulo de funcin.
Ej.: Se define la tabla estndar de sociedades T001 en la que se chequear que la sociedad
recibida como parmetro es correcta, y la tabla de clientes ZCLIENXX para seleccionar los
nmeros de cliente existentes.
Include LZCLITOP:
FUNCTION-POOL ZCLI.

"MESSAGE-ID ..

************************************************************************

Pgina 158 de 194

ABAP Fundamentos y Reporting


* Definicin de tablas
************************************************************************
TABLES: T001,
ZCLIENXX.

" Sociedades
" Clientes

Los parmetros definidos en el mdulo de funcin son locales, por lo tanto solo son
visibles en el cuerpo principal de la funcin. Para que puedan ser utilizados en las
subrutinas, sin necesidad de pasarlos como parmetros, se debern globalizar
utilizando la opcin de men TratarInterfaseGlobalizar parm. en la pantalla de
mantenimiento de parmetros de entrada/salida. Para eliminar la globalizacin se
utiliza la opcin de men TratarInterfaseLocalizar parm..

13.4.2.9

Cdigo fuente

Una vez definida la interfase de parmetros y las excepciones, podemos escribir el


cdigo fuente de nuestro mdulo de funcin. Para hacer esto, pulsaremos el botn
Cdigo fuente. Esto abrir el editor para el programa include L<grpf>U<xx>.
El cdigo del mdulo de funcin se escribir entre las sentencias FUNCTION y
ENDFUNCTION. Las definiciones de la interfase de parmetros y de las excepciones
se mostrarn como lneas de comentario de manera automtica. Hay que recordar que
es la definicin de la interfase la que vale y no estas lneas de comentarios. No se
deben cambiar stas manualmente ya que se actualizan al modificar la interfase.
Al crear una subrutina, haciendo doble click sobre el nombre en la llamada, el sistema
propondr la creacin de un Include que contendr todas las subrutinas del grupo de
funciones.
Al finalizar la introduccin del texto fuente se deber grabar, verificar y activar el
mdulo de funcin.

13.4.2.10

Test

Cuando ya se ha definido y activado un mdulo de funcin, se puede probar en la


misma Biblioteca de Funciones. Se debe utilizar la opcin de men
UtilidadesEntorno test (F8) o bien pulsar el botn

en la pantalla inicial.

Aparecer una plantilla de entrada donde podremos introducir los parmetros IMPORT.
El resultado se transfiere a los parmetros EXPORT y se muestra en otra pantalla. Si
ocurre un error el sistema muestra la excepcin que se ha producido.
Se muestra tambin el tiempo de ejecucin del mdulo de funciones en
microsegundos. Como este tiempo est sujeto a condicionantes como la carga de la
mquina en el momento de la ejecucin, se deber repetir la prueba varias veces en
condiciones diferentes para obtener una medida con sentido.
Se pueden guardar los datos utilizados para el test en un directorio de datos. Y se
pueden crear secuencias de tests.

13.4.2.11

Llamada

Para ejecutar un mdulo de funcin desde un programa se utiliza la sentencia CALL


FUNCTION <funcin>. Es necesario que exista una versin activa del mdulo de
funcin para poder llamarlo.
Para que el sistema nos proponga la sentencia de la llamada a una funcin con toda
su interfase (parmetros y excepciones) utilizaremos el botn
(patrn de
instruccin) del Editor ABAP. Marcando la opcin CALL FUNCTION y especificando
el nombre de la funcin el sistema inserta la sentencia completa en la posicin actual

Pgina 159 de 194

ABAP Fundamentos y Reporting


del cursor. Slo faltar completar los nombres de los parmetros actuales (a la
derecha de los parmetros formales) y, si es necesario, escribir las sentencias que
controlen los errores lanzados mediante excepciones (CASE SY-SUBRC). En el caso
de los parmetros opcionales, no es obligatorio indicar un parmetro actual y se
pueden borrar las lneas que los contienen.
Nota: Los campos que se utilizan en la llamada a un mdulo de funcin deben ser del
mismo tipo que los parmetros a los que hacen referencia (definidos en el mdulo de
funcin), sino se pueden producir errores en la ejecucin del programa.

13.5 Llamadas a otros programas


Para realizar llamadas a otros programas desde un programa se utilizan las siguientes
sentencias:

13.5.1

SUBMIT

Realiza una llamada a un listado. Por defecto no se visualiza la pantalla de seleccin,


es necesari especificar VIA SELECTION-SCREEN para que aparezca. Si no se
especifica la clusula AND RETURN finalizar el programa actual y se ejecutar el
listado sin regresar al programa actual.
SUBMIT <REPORT>
AND RETURN
VA SELECTION-SCREEN
AND RETURN EXPORTING LIST TO MEMORY
WITH <P> <OP> <F1>
WITH <P> BETWEEN <F1> AND <F2>
WITH <P> IN <TAB>
USING SELECTION-SET <V> EJECUTA UN REPORT CON VARIANTES.
USING SELECTION-SETS OF PROGRAM <PROG>
USING SELECTION-TABLE <SELTAB>

Descripcin de indicadores
<P> Nombre de una tabla de seleccin o un campo de parmetro <show database
<dba>.
<Op> Operador relacional.
<F1..Fn> Nombre de campo o constante.
<Seltab> Tabla interna de la estructura rsparams.
<V>

Nombre de una variante de seleccin.

<Tab> Tabla interna declarada por rangos.


Mediante RANGES, declaramos una tabla interna con la misma estructura que una
tabla interna creada con select-options.
Mediante WITH y USING pasamos valores de seleccin para el report que recibe la
llamada.

13.5.2

CALL TRANSACTION

Una transaccin es un grupo de dynpros que tienen sentido dentro de un conjunto, y


que por ellas mismas carecen de ste. Podemos asociar una transaccin a un

Pgina 160 de 194

ABAP Fundamentos y Reporting


modulpool, reports desde el men de Herramientas -> Workbench Abap ->
Desarrollo -> Ms herramientas -> Transacciones .
/o

Crea un nuevo modo al llamar a una transaccin.

/n

Lleva a otra pantalla dentro de la actual transaccin.

La siguiente sentencia realiza una llamada a una transaccin.


CALL TRANSACTION <transaccin>
[USING <itab>]
[AND SKIP FIRST SCREEN].

Mediante la adicin USING <itab> puedes ejecutar un batch input parecido a procesar
el paso de una tabla interna.
Mediante la adicin AND SKIP FIRST SCREEN, la primera pantalla de la transaccin
que recibe la llamada no se visualiza. Para realizar esta operacin tendremos que
llenar los campos requeridos.
Ej.:Se incluir un pulsador en la pantalla de altas de clientes para ejecutar el listado de
visualizacin de facturas de clientes.
Se incluye un pulsador en la barra de pulsadores el Status STA_9000 con el cdigo de funcin
FACT de tipo E (Comando Exit) y el texto Visualizar clientes asociado a la tecla de funcin
F6

13.6 Parmetros de memoria


Para intercambiar datos entre diferentes programas se puede utilizar la memoria SAP
y la memoria ABAP. La primera es un rea de memoria especfica para cada usuario
que se utiliza para almacenar valores que son retenidos durante la sesin y a la cual
tienen acceso todas las ventanas o modos de SAPGui. Los valores almacenados en la
memoria ABAP, en cambio, solamente son retenidos durante la ejecucin de un
programa. Esta memoria es utilizada para la transferencia de datos entre dos
programas cuando uno de ellos realiza una llamada al otro.

13.6.1

SAP

Los programas de aplicacin que utilizan memoria SAP deben utilizar los parmetros
SPA/GPA (tambin conocidos como parmetros SET/GET). La utilizacin ms
frecuente de los parmetros SPA/GPA es rellenar los campos de entrada de una
pantalla.
En la memoria SAP se pueden almacenar valores asociados a un identificador de tres
caracteres, que se mantienen disponibles hasta que finalice la sesin.
En los campos de las pantallas existen tres atributos relacionados con los parmetros
de memoria:
Id-parm.: Identificador de parmetro para los valores del campo en la memoria SAP.
Si el campo est referenciado al diccionario de datos, se informar con el identificador
asociado al dominio del campo del diccionario.
SET Parm.: Al activar este atributo, el sistema almacenar en la memoria SAP el
valor que contiene al campo bajo el identificador asociado.
GET Parm.: Al activar este atributo, el campo se inicializar con el valor definido en la
memoria SAP bajo el identificador asociado en lugar de utilizar el valor inicial en
funcin del tipo de dato del campo.

Pgina 161 de 194

ABAP Fundamentos y Reporting


Desde un programa se pueden almacenar y recuperar datos de la memoria SAP con
las siguientes sentencias:
SET PARAMETER ID <identificador> FIELD <campo>

Almacena el valor del campo en la memoria SAP asociado al identificador especificado.


GET PARAMETER ID <identificador> FIELD <campo>

Almacena el valor asociado al identificador en la memoria SAP en el campo


especificado.
Los parmetros de memoria se inicializan al comenzar una sesin con los valores
almacenados en los parmetros de usuario, que se mantienen desde la opcin de
men Sistema->Valores prefijados->Datos propios (SU3).

Idp: Identificador de parmetro.


Valor parmetro: Valor asociado al identificador.
En la memoria de SAP se pueden almacenar los valores debajo de los parmetros ID. Estos son
almacenados para cada sesin de usuario y son conservados en el transcurso de la sesin.
El parmetro SET copia el contenido del campo PAI a la memoria SAP, mientras que el
parmetro GET copia el contenido del campo al final del PBO desde la memoria SAP (solamente
si el campo de la pantalla tiene valor inicial).
Los parmetros ID'S se pueden definir en la tabla TPARA.

13.6.1.1

Valores iniciales en pantallas

Para rellenar un parmetro utilizaremos:


SET PARAMETER ID <idp> FIELD <c>.

Pgina 162 de 194

ABAP Fundamentos y Reporting


Esta sentencia guarda el contenido del campo <c> en el parmetro con ID <idp> de la
memoria SAP. El cdigo <idp> puede tener hasta 20 caracteres. Si ya existe algn
valor almacenado en <idp>, ste se sobreescribir. Si el <idp> no existe, haremos un
doble click sobre <idp> desde el editor de ABAP para crear el nuevo parmetro.
Para leer el valor que contiene un parmetro, utilizaremos la sentencia:
GET PARAMETER ID <idp> FIELD <c>.
Esta sentencia lee el valor almacenado el parmetro con ID <idp> y lo guarda en la
variable <c>. Si el sistema no encuentra un valor en el <idp> de la memoria SAP,
pondr la variable del sistema SY-SUBRC a 4, en caso contrario la pondr a 0.
Para rellenar la pantalla inicial de un programa utilizando los parmetros SPA/GPA,
normalmente slo necesitaremos utilizar la sentencia SET PARAMETER.
Los campos que se vean implicados deben estar enlazados con un parmetro
SPA/GPA.
En una pantalla de seleccin podemos traer los valores de los parmetros utilizando la
opcin MEMORY ID de la sentencia PARAMETERS o SELECT-OPTIONS. Si
especificamos un parmetro SPA/GPA cuando declaramos un parmetro o criterio de
seleccin, el correspondiente campo de entrada estar enlazado con el parmetro de
memoria SAP indicado. Cuando un campo de entrada est enlazado con un parmetro
SPA/GPA, se inicializar su valor con el contenido del parmetro cada vez que se
muestre la pantalla. Esta es la razn por la cual los campos de las pantallas de SAP
R/3 a menudo contienen ya valores cuando llamamos a un programa ms de una vez.
Tambin podemos controlar los contenidos de los parmetros desde nuestro programa
utilizando la sentencia SET PARAMETER antes de llamar al programa que deseemos
ejecutar. Esta tcnica es particularmente til si queremos saltar la pantalla inicial del
programa llamado y sta contiene campos obligatorios.
Si queremos actualizar los parmetros SPA/GPA antes de llamar al programa,
necesitamos conocer qu parmetros estn enlazados con cada campo de la pantalla
inicial. Una forma sencilla de hacer esto es lanzar el programa que queremos llamar,
colocar el cursor sobre los campos de entrada y pulsar F1 seguido de Datos Tcnicos.
El campo ID parmetro contiene el nombre del correspondiente parmetro SPA/GPA.
Tambin podemos buscar esta informacin desde el Screen Painter.
Ejemplo: La informacin tcnica de la pantalla de entrada de la transaccin del editor ABAP
(transaccin SE38) muestra algo como esto:

Pgina 163 de 194

ABAP Fundamentos y Reporting

El parmetro SPA/GPA para el campo de entrada Programa tiene el ID RID.


El siguiente programa ejecutable va a llamar a editor de ABAP pasndole el nombre del
programa seleccionado por el usuario:
REPORT ZPRUEBA2 NO STANDARD PAGE HEADING.
TABLES D010SINF.
START OF SELECTION.
WRITE: Selecciona un programa,
/----------------------.
SKIP.
SELECT * FROM D010SINF WHERE ( PROG LIKE Z% ). Empieza por Z
WRITE / D010SINF-PROG.
HIDE D010SINF-PROG.
ENDSELECT.
AT LINE-SELECTION.
* Este evento se ejecuta cuando el usuario selecciona una lnea
SET PARAMETER ID RID FIELD D010SINF-PROG.
CALL TRANSACTION SE38.

El listado muestra todos los programas que empiezan por Z. El nombre de cada programa se
almacena en el rea HIDE de cada lnea.

Pgina 164 de 194

ABAP Fundamentos y Reporting

Si el usuario selecciona una lnea haciendo doble click sobre ella, el sistema lanza el evento AT
LINE-SELECTION y toma los datos almacenados en el rea HIDE para rellenar con este valor
el parmetro SPA/GPA de la pantalla inicial de la transaccin. Justamente despus se llama a la
transaccin. En el campo Programa aparecer el que haya sido seleccionado por el usuario.

13.6.2

ABAP

Al realizar una llamada a un programa desde otro programa, se pueden intercambiar


datos a travs de la memoria ABAP de la sesin utilizando las sentencias
EXPORT/IMPORT. Los datos que se encuentran en esta rea permanecen inalterados
durante todo el tiempo que dura la secuencia de llamadas a programa
Para pasar datos a un programa al que estemos llamando, se colocarn los datos
necesarios en la memoria ABAP antes de realizar la llamada:
EXPORT

<objeto> TO MEMORY ID <identificador>.

Esta sentencia almacena el objeto en la memoria ABAP/4 asociado al identificador


especificado, que puede tener una longitud de 32 caracteres. Cada vez que se
exportan datos bajo un mismo identificador se sobrescriben los anteriores.
La sesin interna del programa llamado reemplazar a la del programa llamante. El
programa llamado puede entonces leer los datos que se encuentran en la memoria
ABAP:
IMPORT <objeto> FROM MEMORY ID <identificador>.

Esta sentencia recupera el objeto asociado al identificador especificado de la memoria


ABAP/4.
FREE MEMORY ID <identificador>.

Libera de la memoria ABAP/4 los datos almacenados bajo el identificador especificado.


Si no se especifica la clusula ID se liberar toda la memoria ABAP/4.
Export: Nos permite almacenar en una memoria de usuario especificada los objetos que deseemos.
Este mtodo es valido para todos los objetos de Abap/4.
Export <field1> [from <fieldA>]
<field2> [from

<fieldB>]

[To memory id <id>].

Los valores de fieldA se guardaran bajo el nombre de <field1>.


Export tab spfli f1 to Memory [id 'flug'].
almacenara.

En que lugar de la memoria se

Pgina 165 de 194

ABAP Fundamentos y Reporting


Import: Permite recuperar los objetos cuyos valores queremos utilizar. Los objetos deben ser
idnticos entre el programa que realiza la llamada y el que la recibe (tipo,longitud,estructura).
La variable de sistema SY-SUBRC<>0 cuando la memoria esta vaca.
Import <field1> [to <fieldA>]
<field2> [to

<fieldB>]

[From memory id <id>].

Introducimos los valores recuperados de <field1> en fieldA.

Pgina 166 de 194

ABAP Fundamentos y Reporting

14 ALV
El control ALV (ALV = SAP List Viewer) es una herramienta flexible para la
presentacin grfica de listados. Proporciona operaciones que frecuentemente se
necesitan para trabajar con listas (en forma de funciones genricas) y puede ser
mejorado definiendo opciones personalizadas. Esto permite utilizar el ALV en gran
variedad de programas.
Un control ALV consiste en una barra de herramientas, un ttulo y una tabla de salida
mostrada en una parrilla. El usuario puede ocultar el ttulo y las funciones estndar de
la barra de herramientas.

14.1 Funcionalidad
Con un control ALV se puede:
Mostrar listas de manera consistente con un diseo moderno.
Disponer de las funciones tpicas de las listas (como ordenar o filtrar) sin realizar
ningn esfuerzo extra de programacin.
Adaptar las funciones predefinidas de lista y sus mejoras.
Programar respuestas a acciones de usuario (como hacer doble-click en una lnea) de
manera individual.
Se pueden ver ejemplos prcticos de uso del ALV en el paquete SLIS.

14.2 Trabajar con ALV


Como mnimo se debe preparar la siguiente informacin para mostrar datos con ALV:

Una tabla interna con los datos a mostrar (tabla de salida), que normalmente
contiene datos previamente seleccionados de tablas de la base de datos.

Una descripcin de la estructura de esa tabla que se declara al control ALV a


travs de un catlogo de campos o de la correspondiente estructura del
Diccionario ABAP. El catlogo de campos es una tabla que contiene informacin
sobre los campos a mostrar: por ejemplo el ALV utiliza esta tabla para identificar el
tipo de un campo. Adems se pueden utilizar ciertos campos especiales del
catlogo para determinar el formato de nmero o las propiedades de la columna de
la lista que se ha de escribir.

Describiremos la manera ms sencilla de mostrar una lista con datos en un control


ALV. El sistema R/3 dispone de varias funciones para generar listas ALV con pocas

Pgina 167 de 194

ABAP Fundamentos y Reporting


instrucciones. Aprenderemos a usar las ms comunes: REUSE_ALV_LIST_DISPLAY
y REUSE_ALV_FIELD_CATALOG_MERGE.
En la mayora de los casos tendremos un programa que lee de la base de datos en el
bloque de evento START-OF-SELECTION y los almacena en una tabla interna. En el
evento END-OF-SELECTION, donde deberamos tratar los datos y mostrarlos en
pantalla, utilizaremos las funciones que acabamos de presentar.

14.3 Funcin REUSE_ALV_LIST_DISPLAY


Utilizando el patrn de instrucciones insertamos en nuestro cdigo la llamada a
REUSE_ALV_LIST_DISPLAY.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
* EXPORTING
*

I_INTERFACE_CHECK

= ' '

I_BYPASSING_BUFFER

I_BUFFER_ACTIVE

= ' '

I_CALLBACK_PROGRAM

= ' '

I_CALLBACK_PF_STATUS_SET

= ' '

I_CALLBACK_USER_COMMAND

= ' '

I_STRUCTURE_NAME

IS_LAYOUT

IT_FIELDCAT

IT_EXCLUDING

IT_SPECIAL_GROUPS

IT_SORT

IT_FILTER

IS_SEL_HIDE

I_DEFAULT

= 'X'

I_SAVE

= ' '

IS_VARIANT

IT_EVENTS

IT_EVENT_EXIT

IS_PRINT

IS_REPREP_ID

I_SCREEN_START_COLUMN

= 0

I_SCREEN_START_LINE

= 0

I_SCREEN_END_COLUMN

= 0

I_SCREEN_END_LINE

= 0

* IMPORTING
*

E_EXIT_CAUSED_BY_CALLER

ES_EXIT_CAUSED_BY_USER

TABLES
t_outtab

* EXCEPTIONS
*

PROGRAM_ERROR

= 1

Pgina 168 de 194

ABAP Fundamentos y Reporting


*

OTHERS

= 2

.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

No ser necesario utilizar todos los parmetros de la funcin. Son indispensables:


T_OUTTAB: Tabla interna que contiene los datos a listar. Puede contener ms
campos de los que se quieren mostrar, slo se escribirn los que aparezcan en el
catlogo de campos.
IT_FIELDCAT: Tabla interna en la que guardamos el catlogo de campos, las
descripciones de los campos a listar. Se construye en el programa, manualmente o
con la ayuda de la funcin REUSE_ALV_FIELDCATALOG_MERGE.
I_STRUCTURE_NAME: Nombre de la estructura del diccionario de datos que describe
a la vez los campos de salida y la estructura de la tabla que contiene los datos. Si se
usa esta opcin no es obligatorio el catlogo de campos
Describimos a continuacin algunos de los parmetros opcionales:
I_CALLBACK_PROGRAM: Nombre del programa que llama al mdulo de funcin. No
debemos pasar directamente la variable sy-repid (porque cambia de valor al entrar a la
funcin); crearemos una variable con el valor sy-repid para pasarla como parmetro.
I_CALLBACK_PF_STATUS_SET: Nombre de una subrutina del programa actual en la
que cambiamos el status GUI del listado de salida (por defecto se usa el estndar:
SPACE).
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS usrstatus EXCLUDING rt_extab.

I_CALLBACK_USER_COMMAND: Nombre de una subrutina del programa actual en la


que tratamos las acciones que realice el usuario en el listado.
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield LIKE slis_selfield.

I_CALLBACK_TOP_OF_PAGE: Nombre de una subrutina del programa actual con la


que se crea un encabezado de pgina en el listado de salida. Si se especifica, la
subrutina debe comenzar con FORM top_of_page.
IS_LAYOUT: Especificaciones
posteriormente.

de

disposicin

del

listado.

Las

detallaremos

IT_EXCLUDING: Nombre de una tabla interna con los nombres de las funciones que
se incluyen en el cdigo y que no se usarn en el listado.
IT_SORT: Usando la tabla interna aqu indicada, la funcin determina el orden del
listado y/o de los subtotales.
IT_FILTER: Podemos pasar una tabla interna con un criterio de filtrado para la salida.
I_DEFAULT: X = Se puede definir una variante de visualizacin inicial. Por defecto no.
I_SAVE: U = Las variantes de visualizacin se graban slo como especficas de
usuario. X = Las variantes de visualizacin se graban slo como estndar. A = Se
puede escoger entre grabacin especfica o estndar. = No se pueden grabar
variantes de visualizacin.

Pgina 169 de 194

ABAP Fundamentos y Reporting


IS_VARIANT: Para pasar a la funcin la variante de visualizacin que queremos
inicialmente para el listado.
IT_EVENTS: Podemos usar la funcin REUSE_ALV_EVENTS_GET ver su
documentacin) para obtener una tabla de eventos posibles para el tipo de lista. Aqu
indicaremos qu rutina procesa cada uno de los que queremos tratar. La estructura a
pasar contiene los campos NAME y FORM
IT_EVENT_EXIT: Tabla interna usada para indicar los cdigos de funcin estndar
para los que queremos recuperar el control en el programa fuente, antes y/o despus
de su ejecucin en el USER_COMMAND. Los campos de la estructura son UCOMM,
BEFORE y AFTER.
IS_PRINT: Estructura con parmetros de control sobre la impresin. Podemos utilizar
los campos PRINT, NO_PRINT_SELINFOS, NO_PRINT_LISTINFOS, NO_CHANGE_
PRINT_PARAMS.
I_SCREEN_START_COLUMN,
I_SCREEN_START_LINE,
I_SCREEN_END_COLUMN, I_SCREEN_END_LINE: Coordenadas para mostrar la
lista. Slo se requiere si la lista se muestra como dilogo.

14.3.1

Especificar disposicin

Los parmetros de la tabla IS_LAYOUT son descritos y agrupados en las siguientes


categoras:

14.3.1.1

Opciones de visualizacin

- COLWIDTH_OPTIMIZE: 'X' = Optimiza el ancho de columna para asegurar que el


contenido es mostrado completamente.
- NO_COLHEAD: 'X' = No imprime cabeceras de columna.
- ZEBRA: X= Colorea alternativamente los registros.
- NO_VLINE: X=Separa las columnas por espacios, no por lneas verticales.

14.3.1.2

Excepciones

- LIGHTS_FIELDNAME: Nombre de un campo de la tabla interna de salida con los


valores 1, 2 o 3. 1 = semforo en rojo, 2 = semforo en amarillo , 3= semforo en
verde.

14.3.1.3

Totales:

- NO_TOTALLINE: 'X' = no se mostrar ninguna lnea de totales. Si se requieren, los


subtotales pueden ser calculados y mostrados. Los campos que se utilizan para los
clculos subtotales deben ser marcados con "DO_SUM = 'X'" en el catlogo del
campos.
- NO_SUBTOTALS: X=no se permite el clculo de subtotales.
- TOTALS_TEXT: Posibles valores:
= en la primera columna, el sistema estndar indica el nivel de totales mostrando un
nmero adecuado de '*' para el total absoluto. Despus de los asteriscos, el sistema
muestra la secuencia 'total' a condicin de que la anchura de la primera columna de la
salida sea bastante grande. Si la anchura de columna no es suficiente, slo se exhiben
los asteriscos.
string= Despus de que el nivel de totales sea indicado por medio de '*', el sistema
muestra la cadena pasada, a condicin de que la anchura de columna sea suficiente.

Pgina 170 de 194

ABAP Fundamentos y Reporting


- SUBTOTALS_TEXT: Similar al anterior, pero para el nivel de subtotales.
- NUMC_SUM: X=Ser posible calcular, en general, los totales para los campos de
tipo NUMC. Podemos usar el parmetro FIELDCAT-NO_SUM para controlar el n
columnas NUMC que sern o no calculadas.

14.3.1.4

Interaccin:

- BOX_FIELDNAME: Si queremos que nuestro listado tenga algn checkbox al


principio de cada lnea (para permitir seleccin mltiple), se debe rellenar este
parmetro con el nombre del campo de la tabla interna de salida que represente la
columna de la seleccin para seleccionar lneas con la ayuda de los checkbox.
- BOX_TABNAME: si se rellena el anterior, indicar nombre de la tabla interna de salida.
- F2CODE: Valores posibles: SPACE o cdigo de funcin. Si queremos asignar un
cdigo de funcin a una pulsacin F2 (doble-click), lo indicamos en este parmetro.
- CONFIRMATION_PROMPT: ' X ' = si una de las funciones 'Back(F03)', 'Exit(F15)' o
'Cancel(F12)' se acciona, el sistema pregunta al usuario si desea salir del listado.
- KEY_HOTSPOT: las columnas definidas como claves en el catlogo de campos
(FIELDCAT-KEY=X) son mostradas como hotspots (es decir, si hacemos click en
ese campo que estar en color-, se ejecuta la funcin asignada a F2.

14.3.1.5

Pantalla de detalles

- DETAIL_INITIAL_LINES: X ' = el contenido inicial del campo tambin se muestra en


la pantalla de detalle.
- DETAIL_TITLEBAR: ' = el sistema muestra 'Detalle: Vista' como el ttulo de la
pantalla del detalle. 'string' = el sistema muestra la cadena pasada como el ttulo de la
pantalla del detalle.

14.3.1.6

Color

- INFO_FIELDNAME: Rellenamos con el nombre de un campo de la tabla interna de


salida que contiene el cdigo de color para cada registro de la lista. No cambia el color
de las columnas clave. El campo que indicamos debe ser de tipo CHAR(3); el cdigo
de color debe ser de la forma: Cxy ; siendo x = n de color (1-9) e y = Intensidad (0: off,
1: on).
- COLTAB_FIELDNAME: Se pueden colorear celdas individualmente indicando aqu el
nombre del campo de la tabla interna de salida (de tipo SLIS_T_SPECIALCOL_ALV)
que contiene en una estructura: el campo a colorear (FIELDNAME), el nmero de color
(COLOR-COL), la negrita (COLOR-BOLD), el inverso (COLOR-INV) y la marca de
ignorar el color de clave (NOKEYCOL).

14.3.2

Parmetros de retorno

E_EXIT_CAUSED_BY_CALLER:
CALLBACK_USER_COMMAND.

Elimina

lista

en

parmetro

ES_EXIT_CAUSED_BY_USER: Seala el modo en que el usuario abandona la vista


de listado. Si se incluye cdigo para Back, Cancel o Exit, el sistema sale del
listado actual. La estructura ES_EXIT_CAUSED_BY_USER se rellenar:
- ES_EXIT_CAUSED_BY_USER-BACK = 'X' si el usuario pulsa Back.
- ES_EXIT_CAUSED_BY_USER-CANCEL = 'X' si el usuario pulsa Cancel.
- ES_EXIT_CAUSED_BY_USER-EXIT = 'X' si el usuario pulsa Exit.

Pgina 171 de 194

ABAP Fundamentos y Reporting


14.3.3

Ejemplo simple

Usando una estructura del diccionario (en este caso SIMLISTRUC) es muy sencillo
generar un listado ALV.
REPORT Z_ALV_1.
TABLES: SPFLI.
TYPES: BEGIN OF t_con.
INCLUDE STRUCTURE SIMLISTRUC.
TYPES: END OF t_con.
DATA: it_con TYPE TABLE OF t_con.
START-OF-SELECTION.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_con.
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_STRUCTURE_NAME

= 'SIMLISTRUC'

TABLES
t_outtab

= it_con

EXCEPTIONS
PROGRAM_ERROR

= 1

OTHERS

= 2
.

IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

14.4 Funcin REUSE_ALV_FIELDCATALOG_MERGE


Si el listado que queremos mostrar no se corresponde exactamente con una estructura
del Diccionario, o si queremos controlar los ttulos de la tabla de salida, podemos
utilizar el catlogo de campos.
Necesitaremos declarar al inicio del programa un Grupo Tipos y una variable global
para el catlogo.
TYPE-POOLS: SLIS.
DATA: it_fcat TYPE slis_t_fieldcat_alv.

Pgina 172 de 194

ABAP Fundamentos y Reporting


En vez de utilizar el parmetro I_STRUCTURE_NAME en la llamada a la funcin
REUSE_ALV_LIST_DISPLAY, usaremos el parmetro IT_FIELDCAT, al que le
pasaremos el catlogo de campos contenido en it_fcat.
Pero antes deberemos construir el catlogo de campos. Podemos hacerlo de forma
manual teniendo en cuenta cul es la informacin mnima necesaria:
CAMPOS OBLIGATORIOS DEL CATLOGO:
FIELDNAME: Nombre del campo de la tabla interna a listar.
Para campos definidos con referencia al Diccionario:
REF_TABNAME: Nombre de la tabla del Diccionario.
REF_FIELDNAME: Nombre del campo (slo si no coincide con el de la tabla interna)
Para campos sin referencia al Diccionario:
OUTPUTLEN: Ancho de columna.
DATATYPE: Tipo de datos del campo
SELTEXT_L: Descripcin larga del campo (40).
SELTEXT_M: Descripcin media del campo (20).
SELTEXT_S: Descripcin corta del campo (10).
Otros campos que forman el catlogo son:
row_pos(0-3, cuando tenemos ms de una fila, se puede indicar en qu linea lo
queremos o si la ponemos por defecto con un '0')
col_pos(columna en la que debe salir),
cfieldname/ctabname('currency' campo/tabla. Cuando tenemos un campo tipo importe,
este debe hacer referencia a un campo que contenga la moneda, para formatear
correctamente el nmero de posiciones decimales. Con estos campos le podemos
especificar dicho campo),
qtabname/qfieldname (al igual que cfieldname/ctabname con campos tipo cantidad),
outputlen (ancho de columna que se debe mostrar),
key ('X' marca la columna como clave. Esto hace que esta columna no pueda ser
ocultada),
key_sel (lo marcamos con una 'X' si queremos que aun siendo campo clave se pueda
ocutlar),
no_out ('X' para no mostrarlo por pantalla, pero se podr mostrar si lo pide el usuario),
tech (campo tcnico, no se mostrar y no se podr mostrar interactivamente),
emphasize (si marcamos 'X' la realzar, si ponemos un cdigo tipo 'Cxyz' -> color 1-9,
negrita 0-1 e inverso 0-1 podremos cambiarle el aspecto),
hotspot (con 'X' se comportar como un campo enlace),
fix_column(fija la columna para que no se le pueda hacer scroll),
do_sum ('X' muestra la columna sumarizada),
no_sum('X' no permite la suma del campo),
icon('X' indica que el campo contiene un cdigo de icono y mostar el icono en vez del
valor),
symbol(('X' indica que el campo contiene un cdigo de smbolo y mostar el smbolo
en vez del valor),
Pgina 173 de 194

ABAP Fundamentos y Reporting


just (justificacin R, L o C),
lzero (si un campo es de tipo carcter-numrico y lo marcamos con 'X' el campo se
mostrar con los ceros iniciales),
edit_mask(formatea el campo. Funciona de forma anloga al como se usa en la
sentencia 'Write'),
seltext_l/m/s (texto largo, medio y corto para la cabecera de lista),
reptext_ddic(texto en cabecera de lista),
ddicttxt(se marca en blanco para poner el texto por defecto en la cabecera, 'S' para el
corto, 'M' para el medio o 'L' para el largo),
datatype (indicamos el tipo de datos para los campos no referenciados a un campo de
la tabla de base de datos),
ddic_outputlen(longitud de salida del campo de diccionario),
intlen(longitud de salida del campo que no es de diccionario),
rollname(muestra la ayuda del campo referenciado al pulsar F1).
La funcin REUSE_ALV_FIELDCATALOG_MERGE nos facilita la creacin del
catlogo de campos correspondiente a una tabla interna o a una estructura del
Diccionario:
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
* EXPORTING
*

I_PROGRAM_NAME

I_INTERNAL_TABNAME

I_STRUCTURE_NAME

I_CLIENT_NEVER_DISPLAY

= 'X'

I_INCLNAME

I_BYPASSING_BUFFER

I_BUFFER_ACTIVE

CHANGING
ct_fieldcat

* EXCEPTIONS
*

INCONSISTENT_INTERFACE

= 1

PROGRAM_ERROR

= 2

OTHERS

= 3

.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

Describimos brevemente sus parmetros:


I_PROGRAM_NAME: Nombre del programa (se recomienda usar una variable con el
valor de SY-REPID).

Pgina 174 de 194

ABAP Fundamentos y Reporting


I_INTERNAL_TABNAME: Nombre de la tabla interna de salida (se recomienda mejor
usar una estructura de diccionario de datos). Slo se consideran los campos que se
definen con referencia al Diccionario.
I_STRUCTURE_NAME: Nombre de la estructura del Diccionario de datos que usamos
para la salida (que ser la misma que tenamos en la llamada a
REUSE_ALV_GRID_DISPLAY).
I_CLIENT_NEVER_DISPLAY: Ocultar campos de cliente (tipo CLNT).
I_INCLNAME: Si la declaracin de la tabla interna de datos de salida no est asignada
en el include TOP, el nombre del include puede especificarse aqu.
CT_FIELDCAT: Nombre de la tabla interna para el catlogo de campos (en nuestro
ejemplo, it_fcat).
La llamada a la funcin llena el catlogo de campos con los atributos de los campos de
la estructura o de la tabla interna indicada. Si queremos modificar alguno de los
atributos de algn campo, podemos hacer un LOOP a la tabla interna del catlogo de
campos (en nuestro caso it_fcat) y modificaremos los campos apropiados.
Por ejemplo, para modificar la descripcin que se muestra en el listado, basta con
cambiar los campos seltext_l (formato largo), seltext_m (formato medio) y seltext_s
(formato corto) o bien reptext_ddic (texto diccionario).
REPORT

Z_ALV_2.

TYPE-POOLS: SLIS.
TABLES: SPFLI.
TYPES: BEGIN OF t_con.
INCLUDE STRUCTURE SIMLISTRUC.
TYPES: END OF t_con.
FIELD-SYMBOLS: <fs_fcat> TYPE slis_fieldcat_alv.
DATA: it_fcat TYPE slis_t_fieldcat_alv.
DATA: it_con TYPE TABLE OF t_con.
DATA: pid LIKE sy-repid.
START-OF-SELECTION.
pid = sy-repid.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_con.
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME

= pid

I_STRUCTURE_NAME

= 'SIMLISTRUC'

CHANGING
ct_fieldcat

= it_fcat

EXCEPTIONS
INCONSISTENT_INTERFACE

= 1

Pgina 175 de 194

ABAP Fundamentos y Reporting


PROGRAM_ERROR

= 2

OTHERS

= 3
.

IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT it_fcat ASSIGNING <fs_fcat>.
IF <fs_fcat>-fieldname = 'CONNID'.
<fs_fcat>-seltext_l = 'Conexin'.
<fs_fcat>-seltext_m = 'Conexin'.
<fs_fcat>-seltext_s = 'Con'.
MODIFY it_fcat FROM <fs_fcat>.
ENDIF.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
*

I_CALLBACK_PROGRAM

= pid

I_STRUCTURE_NAME

= 'SIMLISTRUC'

IT_FIELDCAT

= it_fcat[]

TABLES
t_outtab

= it_con

EXCEPTIONS
PROGRAM_ERROR

= 1

OTHERS

= 2
.

IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

14.5 Otras funciones


Con otras funciones del grupo SALV se pueden generar otros tipos de listados.
Con REUSE_ALV_GRID_DISPLAY slo cambia la apariencia, la interfase para esta
funcin es exactamente la misma que para REUSE_ALV_LIST_DISPLAY. Los datos
se muestran en una tabla en vez de en un listado:

Pgina 176 de 194

ABAP Fundamentos y Reporting

En otros casos cambia la estructura del listado. Entonces, adems de la tabla interna
con la informacin a mostrar (T_OUTTAB) y la estructura (I_STRUCTURE_NAME) o el
catlogo de campos (IT_FIELDCAT) se debe pasar informacin adicional a la funcin.
Con REUSE_ALV_HIERSEQ_LIST_DISPLAY se pueden mostrar listados jerrquicos.
En el catlogo de campos se debe indicar qu campos son de cabecera y cules de
detalle. Se deben indicar los nombres de las tablas internas o bien estructuras que
contienen los registros de cabecera (I_TABNAME_HEADER/ I_STRUCTURE_NAME_
HEADER) y los de detalle (I_TABNAME_ITEM/ I_STRUCTURE_NAME_ITEM). La
funcin debe conocer tambin la relacin entre las dos tablas (IS_KEYINFO). No se
pasa una tabla de informacin sino dos: T_OUTTAB_HEADER y T_OUTTAB_ITEM.

Con REUSE_ALV_BLOCK_LIST_DISPLAY se pueden mostrar listados de bloques. Se


debe utilizar previamente la funcin REUSE_ALV_BLOCK_LIST_INIT para inicializar
el listado y para cada bloque que deseemos aadir se debe llamar a la funcin
REUSE_ALV_BLOCK_LIST_APPEND pasndole como mnimo el catlogo de campos
y los datos.

Pgina 177 de 194

ABAP Fundamentos y Reporting

Con REUSE_ALV_POPUP TO SELECT se pueden mostrar listados en pop-up.

Pgina 178 de 194

ABAP Fundamentos y Reporting

15 Tratamiento de Ficheros
15.1 Del servidor de aplicacin
Para poder trabajar con ficheros secuenciales que se encuentren en el servidor de
aplicacin, disponemos de las siguientes instrucciones bsicas:
Operacin

Sentencia

Abrir para lectura

OPEN DATASET <fichero> FOR INPUT


IN [TEXT|BINARY] MODE.

Abrir para escritura

OPEN DATASET <fichero> FOR OUTPUT


IN [TEXT|BINARY] MODE.

Abrir para
lneas

aadir OPEN DATASET <fichero> FOR APPENDING


IN [TEXT|BINARY] MODE.

Recibir mensajes del OPEN DATASET <fichero> ...


sistema operativo
MESSAGE <mensaje>.
Cerrar

CLOSE DATASET <fichero>.

Borrar

DELETE DATASET <fichero>.

Leer una lnea

READ DATASET <fichero> INTO <registro>.

Escribir una lnea

TRANSFER <registro> TO <fichero>.

La variable de sistema SY-SUBRC retorna valores de error para todas las sentencias
de tratamientos de ficheros, si su valor es 0 la operacin se ha realizado se ha
realizado correctamente.

15.1.1

Abrir

OPEN DATASET nfich [FOR OUTPUT/INPUT/APPENDING] [IN BINARY/TEXT MODE].

Abre un fichero para su tratamiento, si no se aade ninguna opcin abre el fichero


para lectura en modo binario.
Las principales opciones son:
.. FOR OUTPUT
crea nuevamente.

Abre el fichero para escritura. Si el fichero existe lo borra y lo

.. FOR INPUT Abre el fichero para lectura.


.. FOR APPENDING.
Abre un fichero para escritura si el fichero no existe se crea. Si ya existe, se
comenzar a escribir al final del fichero.
..IN BINARY MODE.
Abre el fichero en modo binario , es decir, la informacin se tratar por bloques. De tal
modo que en cada lectura se leern /escribirn n caracteres.
..IN TEXT MODE.
Abre el fichero en modo texto, es decir, la informacin se tratara lnea a lnea. Cada
lectura/escritura procesar una lnea del fichero.
..MESSAGE d_mes

Pgina 179 de 194

ABAP Fundamentos y Reporting


Almacena en d_mes el mensaje devuelto por el sistema operativo.
..AT POSITION d_pos.
Sita el puntero de escritura en la posicin d_pos (bytes) desde el inicio del fichero.
(Esta opcin , no tiene sentido emplearla para tratamientos en modo texto).
.. TYPE

Permite definir atributos del fichero.

.. FILTER

Permite ejecutar comandos propios del sistema operativo.

15.1.2

Leer

READ DATASET nfich INTO

wa.

Lee un bloque de informacin del fichero y los coloca en una estructura o tabla interna.
Hay que tener en cuenta la longitud de los campos, ya que sino a la hora de leer se
pueden coger caracteres de otros campos.
Si el fichero se abre en modo TEXTO: se lee una lnea completa de tal forma que si el
campo wa es de menor tamao que la lnea , se perder su contendido , en caso
contrario se completar con blancos. El puntero de lectura se situar al comienzo de
la lnea siguiente.
Si el fichero se abre en modo BINARIO: se lee del fichero tantos bytes como tamao
tenga el campo wa.

15.1.3

Escribir

TRANSFER wa TO nfich.

Escribe el contenido del campo WA en el fichero abierto para escritura.


Si en modo texto: Escribe una lnea completa.
Si en modo binario: Escribe tantos bytes como tenga el campo wa.

15.1.4

Cerrar

CLOSE DATASET nfich.

Cierra un fichero abierto para lectura o escritura.

DELETE DATASET nfich.

Borra el fichero nfich.

15.1.5

Autorizaciones

El sistema R/3 realiza automticamente las siguientes comprobaciones cuando


trabajamos con ficheros secuenciales: verifica la autorizacin en el objeto
S_DATASET y verifica la tabla SPTH para comprobar si el fichero especificado est
registrado para su acceso desde ABAP
El objeto S_DATASET nos permite asignar autorizaciones de acceso para ficheros
determinados desde programas determinados. Contiene los siguientes campos:
Nombre del programa ABAP: Nombre del programa ABAP para el que se permite el
acceso, desde el que se va a abrir el fichero. Esto nos permite restringir el acceso a
los ficheros para los programas que deseemos.
Actividad: Tipo de acceso. Los valores posibles son:
33 : Lectura del fichero
34 : Escritura o borrado del fichero
A6 : Lectura del fichero mediante filtros (comando del sistema operativo)
A7 : Escritura del fichero mediante filtros (comando del sistema operativo).

Pgina 180 de 194

ABAP Fundamentos y Reporting


Nombre del fichero: nombre del fichero del sistema operativo. Esto nos permite
restringir los ficheros para los que van a tener acceso los usuarios.
En cualquier caso, deberamos comprobar en nuestro programa la autorizacin antes
de acceder al fichero mediante el mdulo de funcin AUTHORITY_CHECK_DATASET,
que nos permite verificar si el usuario est autorizado para acceder al fichero antes de
que el sistema intente abrirlo. Esto previene que se produzca un posible error en
tiempo de ejecucin que, en otro caso, se producira cuando se realizase la
verificacin de autorizacin automtica.
El mdulo de funcin como parmetros IMPORT el programa y la actividad a realizar,
los campos del objeto S_DATASET.
En la tabla SPTH, podemos controlar el acceso de lectura o escritura para ficheros
especificados de forma genrica, independientemente del concepto de
autorizacin de R/3. Para el resto de los ficheros (es decir, para aquellos cuyo acceso
de lectura o escritura est permitido de acuerdo con la tabla SPTH), debemos utilizar
el concepto de autorizacin de R/3 para verificar las autorizaciones. Para que
podamos hacer esto, debemos especificar grupos de autorizaciones en la tabla SPTH
para verificaciones de autorizaciones de usuario independientes de programa.
SPTH contiene los siguientes campos para este propsito:
PATH

Contiene el nombre del fichero genrico. Esto significa que los


ficheros que se encuentren en el servidor de aplicaciones a los que
se aplique una entrada en este campo, retienen los atributos
especificados en los restantes campos de la lnea.

SAVEFLAG

Si se activa este flag, los ficheros especificados en el campo PATH


sern incluidos en los procedimientos de seguridad.

FS_NOREAD

Si se activa este flag, los ficheros especificados en el campo PATH


no se podr acceder para nada a los ficheros desde ABAP. Este flag
elude todas las autorizaciones que tenga el usuario. Si activamos
FS_READ, se activar automticamente FS_NOWRITE.
Si no se activa este flag, se hace posible el acceso a los ficheros
desde ABAP si se pasan con xito los chequeos de autorizacin.

FS_NOWRITE

Si se activa este flag, los ficheros especificados en el campo PATH


no se podr acceder para escribir en los ficheros desde ABAP. Este
flag elude todas las autorizaciones que tenga el usuario.
Si no se activa este flag, se hace posible cambiar los ficheros desde
ABAP si se pasan con xito los chequeos de autorizacin.

FSBRGRU

Esta columna contiene los nombres de los grupos de autorizacin.


Un grupo de autorizacin se corresponde con el primer campo
(RS_BRGRU) del objeto de autorizacin S_PATH. Podemos utilizar
el segundo campo del objeto de autorizacin S_PATH (ACTVT) para
comprobar si el usuario tiene autorizacin para leer (valor 3) o
cambiar (valor 2) los ficheros de su grupo de autorizacin.
Las entradas de FSBRGRU especifican grupos de ficheros en el
servidor de aplicaciones. Podemos controlar el acceso a los ficheros
asignando autorizaciones para el objeto de autorizacin S_PATH.

A diferencia de las verificaciones de autorizacin mediante el objeto de autorizacin


S_DATASET, la verificacin de autorizacin contra el objeto de autorizacin S_PATH

Pgina 181 de 194

ABAP Fundamentos y Reporting


es independiente del programa ABAP utilizado para acceder a los ficheros. Adems,
las verificaciones no se restringen a ficheros individuales, sino que se extienden a
todos los ficheros especificados genricamente en la columna PATH.
Si no existe ninguna entrada en la columna FSBRGRU, los ficheros de la columna
PATH no sern asignados a un grupo de autorizacin, y no se realizar ninguna
verificacin de autorizacin contra el objeto de autorizacin S_PATH.
Si falla una verificacin automtica para un acceso a un fichero, se producir un error
en tiempo de ejecucin.
Ejemplo: Supongamos que la tabla SPTH contiene las siguientes entradas:
PATH

SAVEFLAG

FS_NOREAD

FS_NOWRITE

FSBRGRU

/tmp
/tmp/files

FILE

Entonces las entradas son vlidas como se indica a continuacin:


Primera lnea: todos los ficheros del servidor de aplicaciones aparte del path /tmp.
Segunda lnea: todos los ficheros del servidor de aplicaciones en el path /tmp aparte del fichero
tmp/files
Tercera lnea: el fichero del servidor de aplicaciones tmp/mifichero
Con estas caractersticas, los programas ABAP no pueden acceder a ningn fichero del servidor
de aplicaciones salvo a aquellos del path /tmp. Todos los programas ABAP pueden leer y escribir
en los ficheros de este path. Slo los usuarios con autorizacin para el grupo de autorizaciones
FILE pueden utilizar un programa ABAP para leer o escribir en los ficheros del path /tmp/files.
Estos ficheros tambin se incluirn en el proceso de seguridad.
Con las entradas anteriores, el siguiente trozo de programa provocara un error en tiempo de
ejecucin para cualquier usuario:
DATA: NOMBREF(60).
NOMBREF = '/system/files'.
OPEN DATASET FNAME FOR OUTPUT.

15.2 Del servidor de presentacin


Vamos a ver como trabajar con ficheros locales, entendiendo como tales aquellos que
se encuentran dentro del terminal (en una unidad de disco, disco de red).
Existen dos funciones estndar que nos permiten importar y exportar datos a ficheros
locales:
GUI_DOWNLOAD and GUI_UPLOAD
Escribiremos en un fichero el contenido de una tabla interna, o leeremos el contenido
de un fichero en una tabla interna.

15.2.1

Escritura

15.2.1.1

Dilogo con el usuario

Para escribir datos desde una tabla interna a un fichero que se encuentre en el
servidor de presentacin manteniendo un dilogo con el usuario utilizaremos el mdulo
de funcin DOWNLOAD.

Pgina 182 de 194

ABAP Fundamentos y Reporting


Parmetros IMPORT importantes:
Parmetro

Funcin

BIN_FILESIZE

Longitud del fichero para ficheros binarios.

CODEPAGE

Slo para escribir ficheros bajo DOS: Valor IBM.

FILENAME

Nombre del fichero (valor por defecto para el dilogo con el


usuario)

FILETYPE

Tipo de fichero (valor por defecto para el dilogo con el usuario)


Se utiliza para especificar el modo de transferencia. Los valores
posibles son:
BIN: ficheros binarios. Debemos especificar la longitud del fichero.
La tabla interna debe contener una nica columna del tipo de
datos X.
ASC: ficheros ASCII.
DAT: ficheros Excel. Las columnas estarn separadas mediante
tabuladores. Las lneas se separan por rupturas de lnea.
WK1: ficheros Excel y Lotus. Los ficheros se salvan en una hoja
de clculo WK1.

ITEM

Ttulo para la ventana de dilogo.

MODE

Modo de escritura (blanco = sobreescribir, A = aadir).

Parmetros EXPORT importantes:


Parmetro

Funcin

ACT_FILENAME

Nombre del fichero (como se introdujo en el dilogo con el


usuario).

ACT_FILETYPE

Tipo de fichero (como se introdujo en el dilogo con el usuario).

FILESIZE

Nmero de bytes transferidos.

Parmetros TABLES:
Parmetro

Funcin

DATA_TAB

Tabla interna que contiene los datos

Parmetros EXCEPTIONS:
Parmetro

Funcin

INVALID_FILESIZE

Parmetro BIN_FILESIZE no vlido

INVALID_TABLE_WIDTH

Estructura de tabla no vlida

INVALID_TYPE

El valor de FILETYPE es incorrecto

Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y
hemos escrito el siguiente programa:
PROGRAM ZTSTFICH.
DATA: NOMB_FICH(128),

Pgina 183 de 194

ABAP Fundamentos y Reporting


TIPO_FICH(3),
TAM_FICH TYPE I.
DATA: BEGIN OF TABI OCCURS 0,
COL1 TYPE I,
COL2 TYPE I,
END OF TABI.
DO 5 TIMES.
TABI-COL1 = SY-INDEX.
TABI-COL2 = SY-INDEX ** 2.
APPEND TABI.
ENDDO.

CALL FUNCTION 'DOWNLOAD'


EXPORTING
CODEPAGE = 'IBM'
FILENAME = 'c:\temp\testsap.xls'
FILETYPE = 'DAT'
ITEM = 'Test para Fichero Excel'
IMPORTING
ACT_FILENAME = NOMB_FICH
ACT_FILETYPE = TIPO_FICH
FILESIZE

= TAM_FICH

TABLES
DATA_TAB = TABI
EXCEPTIONS
INVALID_FILESIZE

= 1

INVALID_TABLE_WIDTH = 2
INVALID_TYPE

= 3.

WRITE: 'SY-SUBRC:', SY-SUBRC,


/ 'Nombre:', (60) NOMB_FICH,
/ 'Tipo

:', TIPO_FICH,

/ 'Tamao:', TAM_FICH.

El programa muestra la siguiente ventana de dilogo:

Pgina 184 de 194

ABAP Fundamentos y Reporting

Aqu, el usuario puede cambiar los valores que aparecen por defecto. Cuando el usuario pulsa el
botn Transferir, el sistema escribe los datos de la tabla interna TABI rellenada en el programa,
al fichero C:\temp\textsap.xls. Si el fichero ya existe, el sistema preguntar al usuario si desea
reemplazar la versin existente. El sistema inserta tabuladores entre las columnas, y saltos de
lnea al final de cada lnea.
En las salida aparecera algo como esto:

Ahora, podemos abrir el fichero C:\temp\testsap.xls utilizando Excel. Aparecera algo como
esto:

15.2.1.2

Sin dilogo

Para escribir datos de una tabla interna en el servidor de presentacin sin mantener un
dilogo con el usuario, utilizaremos el mdulo de funcin WS_DOWNLOAD. Los
parmetros ms importantes se listan ms abajo.
Parmetros IMPORT importantes:
Parmetro

Funcin

BIN_FILESIZE

Longitud del fichero para ficheros binarios.

CODEPAGE

Slo para escribir ficheros bajo DOS: Valor IBM.

FILENAME

Nombre del fichero (valor por defecto para el dilogo con el


usuario)

FILETYPE

Tipo de fichero (valor por defecto para el dilogo con el usuario)


Se utiliza para especificar el modo de transferencia. Los valores
posibles son:
BIN: ficheros binarios. Debemos especificar la longitud del fichero.
La tabla interna debe contener una nica columna del tipo de
datos X.
ASC: ficheros ASCII.

Pgina 185 de 194

ABAP Fundamentos y Reporting


DAT: ficheros Excel. Las columnas estarn separadas mediante
tabuladores. Las lneas se separan por rupturas de lnea.
WK1: ficheros Excel y Lotus. Los ficheros se salvan en una hoja
de clculo WK1.
MODE

Modo de escritura (blanco = sobreescribir, A = aadir).

Parmetros EXPORT:
Parmetro

Funcin

FILELENGHT

Nmero de bytes transferidos.

Parmetros TABLES:
Parmetro

Funcin

DATA_TAB

Tabla interna que contiene los datos

Parmetros EXCEPTIONS:
Parmetro

Funcin

FILE_OPEN_ERROR

El fichero no se puede abrir

FILE_WRITE_ERROR

No se puede escribir en el fichero

INVALID_FILESIZE

Parmetro BIN_FILESIZE no vlido

INVALID_TABLE_WIDTH

Estructura de tabla no vlida

INVALID_TYPE

El valor de FILETYPE es incorrecto

Ejemplo: Supongamos que el servidor de presentacin est ejecutndose bajo Windows 95, y
hemos escrito el siguiente programa:
PROGRAM ZTSTFICH.
DATA: LONG_FICH TYPE I,
TAB(80) OCCURS 5.
APPEND 'Esta es la primera lnea de mi texto. ' TO TAB.
APPEND 'La segunda lnea. ' TO TAB.
APPEND '

La tercera lnea. ' TO TAB.

APPEND '
APPEND '

La cuarta lnea. ' TO TAB.


La quinta y ltima lnea. ' TO TAB.

CALL FUNCTION 'WS_DOWNLOAD'


EXPORTING
CODEPAGE = 'IBM'
FILENAME = 'c:\temp\testsap.txt'
FILETYPE = 'ASC'
IMPORTING
FILELENGTH = LONG_FICH

Pgina 186 de 194

ABAP Fundamentos y Reporting


TABLES
DATA_TAB = TAB
EXCEPTIONS
FILE_OPEN_ERROR

= 1

FILE_WRITE_ERROR

= 2

INVALID_FILESIZE

= 3

INVALID_TABLE_WIDTH = 4
INVALID_TYPE

= 5.

WRITE: 'SY-SUBRC :', SY-SUBRC,


/ 'Longitud fichero:', LONG_FICH.

La salida muestra lo siguiente:

El sistema ha escrito las cinco lneas de la tabla TAB en el fichero ASCII c:\temp\testsap.tx.
Ahora abrir este fichero utilizando cualquier editor del servidor de presentacin. En este ejemplo
hemos utilizado el editor de DOS:

15.2.2

Lectura

15.2.2.1

Dilogo con el usuario

Para leer un fichero que se encuentra en el servidor de presentacin en una tabla


interna manteniendo un dilogo con el usuario utilizaremos el mdulo de funcin
UPLOAD. Los parmetros ms importantes de este mdulo de funcin se indican a
continuacin.
Parmetros IMPORT importantes:

Pgina 187 de 194

ABAP Fundamentos y Reporting


Parmetro

Funcin

CODEPAGE

Slo para leer ficheros bajo DOS: Valor IBM.

FILENAME

Nombre del fichero (valor por defecto para el dilogo con el


usuario)

FILETYPE

Tipo de fichero (valor por defecto para el dilogo con el usuario)


Se utiliza para especificar el modo de transferencia. Los valores
posibles son:
BIN: ficheros binarios. Debemos especificar la longitud del fichero.
La tabla interna debe contener una nica columna del tipo de
datos X.
ASC: ficheros ASCII.
DAT: ficheros Excel. Las columnas estarn separadas mediante
tabuladores. Las lneas se separan por rupturas de lnea.
WK1: ficheros Excel y Lotus. Los ficheros se salvan en una hoja
de clculo WK1.

ITEM

Ttulo para la ventana de dilogo.

Parmetros EXPORT importantes:


Parmetro

Funcin

ACT_FILENAME

Nombre del fichero (como se introdujo en el dilogo con el


usuario).

ACT_FILETYPE

Tipo de fichero (como se introdujo en el dilogo con el usuario).

FILESIZE

Nmero de bytes transferidos.

Parmetros TABLES:
Parmetro

Funcin

DATA_TAB

Tabla interna (destino de la lectura)

Parmetros EXCEPTIONS:
Parmetro

Funcin

CONVERSION_ERROR

Error en la conversin de los datos

INVALID_TABLE_WIDTH

Estructura de tabla no vlida

INVALID_TYPE

El valor de FILETYPE es incorrecto

Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y
contiene el siguiente fichero Excel:

Si esta tabla se salva en el fichero de texto C:\temp\pelis.txt con tabuladores entre las
columnas, el siguiente programa podra leer la tabla:

Pgina 188 de 194

ABAP Fundamentos y Reporting


PROGRAM ZTSTFICH.
DATA: NOMB_FICH(128),
TIPO_FICH(3),
TAM_FICH TYPE I.
DATA: BEGIN OF TABI OCCURS 0,
COL1(10) TYPE C,
COL2(10) TYPE C,
COL3(10) TYPE C,
END OF TABI.
CALL FUNCTION 'UPLOAD'
EXPORTING
CODEPAGE = 'IBM'
FILENAME = 'c:\temp\pelis.txt'
FILETYPE = 'DAT'
ITEM = 'Test Lectura de Fichero Excel'
IMPORTING
FILESIZE

= TAM_FICH

ACT_FILENAME = NOMB_FICH
ACT_FILETYPE = TIPO_FICH
TABLES
DATA_TAB = TABI
EXCEPTIONS
CONVERSION_ERROR

= 1

INVALID_TABLE_WIDTH = 2
INVALID_TYPE

= 3.

WRITE: 'SY-SUBRC:', SY-SUBRC,


/ 'Nombre :', (60) NOMB_FICH,
/ 'Tipo

:', TIPO_FICH,

/ 'Tamao :', TAM_FICH.


SKIP.
LOOP AT TABI.
WRITE: / TABI-COL1, TABI-COL2, TABI-COL3.
ENDLOOP.

El programa mostrara la siguiente ventana de dilogo:

Pgina 189 de 194

ABAP Fundamentos y Reporting

Aqu, el usuario puede cambiar los valores que aparecen por defecto. Cuando el usuario pulsa el
botn Transferir, el sistema importa los datos del fichero C:\temp\pelis.txt a la tabla interna
TABI.
La salida muestra los siguiente:

El contenido de la tabla interna TABI es exactamente el mismo que el contenido de la tabla


original de Excel.

15.2.2.2

Sin dilogo

Para leer los datos de un fichero que se encuentre en el servidor de presentacin en


una tabla interna sin mantener dilogo con el usuario, utilizaremos el mdulo de
funcin WS_UPLOAD. Los parmetros ms importantes de este mdulo de funcin se
listan a continuacin.
Parmetros IMPORT importantes:
Parmetro

Funcin

CODEPAGE

Slo para escribir ficheros bajo DOS: Valor IBM.

FILENAME

Nombre del fichero (valor por defecto para el dilogo con el


usuario)

FILETYPE

Tipo de fichero (valor por defecto para el dilogo con el usuario)


Se utiliza para especificar el modo de transferencia. Los valores
posibles son:
BIN: ficheros binarios. Debemos especificar la longitud del fichero.
La tabla interna debe contener una nica columna del tipo de
datos X.
ASC: ficheros ASCII.
DAT: ficheros Excel. Las columnas estarn separadas mediante
tabuladores. Las lneas se separan por rupturas de lnea.
WK1: ficheros Excel y Lotus. Los ficheros se salvan en una hoja
de clculo WK1.

Parmetros EXPORT:

Pgina 190 de 194

ABAP Fundamentos y Reporting


Parmetro

Funcin

FILELENGHT

Nmero de bytes transferidos.

Parmetros TABLES:
Parmetro

Funcin

DATA_TAB

Tabla interna (destino de la lectura)

Parmetros EXCEPTIONS:
Parmetro

Funcin

CONVERSION_ERROR

Error en la conversin de los datos

FILE_OPEN_ERROR

El fichero no se puede abrir

FILE_READ_ERROR

No se puede leer el fichero

INVALID_TABLE_WIDTH

Estructura de tabla no vlida

INVALID_TYPE

El valor de FILETYPE es incorrecto

Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y
contiene el siguiente fichero de texto:

El siguiente programa leera el fichero de texto:


PROGRAM ZTSTFICH.
DATA: LONG_FICH TYPE I.
DATA: TABI(80) OCCURS 5 WITH HEADER LINE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = 'c:\temp\mitexto.txt'
FILETYPE = 'ASC'
IMPORTING
FILELENGTH = LONG_FICH
TABLES
DATA_TAB = TABI
EXCEPTIONS
CONVERSION_ERROR

= 1

FILE_OPEN_ERROR

= 2

Pgina 191 de 194

ABAP Fundamentos y Reporting


FILE_READ_ERROR

= 3

INVALID_TABLE_WIDTH = 4
INVALID_TYPE

= 5.

WRITE: 'SY-SUBRC:', SY-SUBRC,


/ 'Longitud :', LONG_FICH.
SKIP.
LOOP AT TABI.
WRITE: / TABI.
ENDLOOP.

En la salida aparece lo siguiente:

15.2.3

Verificacin de ficheros del Servidor de Presentacin

Para recuperar informacin acerca de los ficheros que se encuentran en el servidor de


presentacin y el sistema operativo del servidor de presentacin, utilizaremos el
mdulo de funcin WS_QUERY. A continuacin, se listan los parmetros ms
importantes de este mdulo de funcin.
Parmetros IMPORT importantes:
Parmetro

Funcin

FILENAME

Nombre del fichero para comandos de pregunta FE, FL y DE.

QUERY

Comando de pregunta. Los comandos ms importantes son:


CD: devuelve el directorio actual.
EN: devuelve las variables de entorno.
FL: devuelve la longitud del fichero especificado en FILENAME.
FE: devuelve si existe el fichero especificado en FILENAME.
DE: devuelve si existe el directorio especificado en FILENAME.
WS: devuelve el sistema Windows del servidor de presentacin.
OS: devuelve el sistema operativo del servidor de presentacin.

Parmetro EXPORT:
Parmetro

Funcin

RETURN

Resultado de la pregunta (0 = no, 1 = s)

Parmetro EXCEPTION:
Parmetro

Funcin

Pgina 192 de 194

ABAP Fundamentos y Reporting


INV_QUERY

QUERY o FILENAME contienen un valor incorrecto.

Ejemplo: Supongamos que el servidor de presentacin se est ejecutando bajo Windows 95, y el
fichero SYSTEM.INI existe como se indica a continuacin:

El siguiente programa devolvera algunos de los atributos del sistema operativo y del fichero:
PROGRAM ZTSTFICH.
DATA: NOMB_FICH(60),
RESULTADO(30),
LONG_FICH TYPE I.
NOMB_FICH = 'C:\WINDOWS\SYSTEM.INI'.
CALL FUNCTION 'WS_QUERY'
EXPORTING
*>> Preguntamos por el sistema operativo:
QUERY = 'OS'
IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Sistema Operativo:', RESULTADO.
ENDIF.
CALL FUNCTION 'WS_QUERY'
EXPORTING
*>> Preguntamos por la versin de Windows:
QUERY = 'WS'
IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Windows:', RESULTADO.
ENDIF.

Pgina 193 de 194

ABAP Fundamentos y Reporting


CALL FUNCTION 'WS_QUERY'
EXPORTING
FILENAME = NOMB_FICH
*>> Preguntamos si existe el fichero:
QUERY

= 'FE'

IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Existe el fichero?', RESULTADO.
ENDIF.
CALL FUNCTION 'WS_QUERY'
EXPORTING
FILENAME = NOMB_FICH
*>> Preguntamos por la longitud del fichero:
QUERY = 'FL'
IMPORTING
RETURN = LONG_FICH
EXCEPTIONS
INV_QUERY = 1.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Longitud fichero:', LONG_FICH.
ENDIF.

La salida del programa mostrara lo siguiente:

Para una informacin ms detallada acerca de las abreviaturas utilizada para los sistemas
operativos, colocaremos el cursor en el campo QUERY de la pantalla de documentacin del
mdulo de funcin y pulsaremos Ayuda.

Pgina 194 de 194

S-ar putea să vă placă și