Sunteți pe pagina 1din 195

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 ...................................................................................................................9
1.1.3 Nivel de presentacin .............................................................................................................9
1.2 VISIN DESDE EL PUNTO DE VISTA DEL SOFTWARE ......................................................................9
1.2.1 Nivel de Base de Datos.........................................................................................................10
1.2.2 Nivel de Aplicacin...............................................................................................................10
1.2.3 Nivel de Presentacin...........................................................................................................10
1.2.4 Arquitectura multinivel: ventajas .........................................................................................10
1.2.5 Consecuencias para la programacin de aplicaciones ........................................................11
1.3 VISIN DESDE EL PUNTO DE VISTA DEL USUARIO .......................................................................12
1.4 USUARIOS ..................................................................................................................................12
1.5 MEN Y TRANSACCIONES ..........................................................................................................13
1.6 TECLAS DE FUNCIN COMUNES..................................................................................................14
1.7 HERRAMIENTAS DE DESARROLLO ..............................................................................................15
1.8 ORGANIZACIN DEL DESARROLLO .............................................................................................16
1.8.1 Crear clases de desarrollo ...................................................................................................16
1.8.2 Asignar tareas ......................................................................................................................17
2 EL DICCIONARIO DE DATOS....................................................................................................18
2.1 TABLAS .....................................................................................................................................19
2.1.1 Pestaa "Campos"................................................................................................................20
2.1.2 Pestaa "Entrega y actualizacin":......................................................................................21
2.1.3 Pestaa "Campos de moneda/cantidad": .............................................................................22
2.1.4 Pestaa "Ayuda p./Verif.entr.": ............................................................................................22
2.1.5 Opciones tcnicas .................................................................................................................25
2.1.6 ndices ..................................................................................................................................28
2.1.7 Append estructures ...............................................................................................................30
2.2 DOMINIOS ..................................................................................................................................30
2.2.1 Definicin .............................................................................................................................31
2.2.2 mbito de valores .................................................................................................................32
2.3 ELEMENTOS DE DATOS ..............................................................................................................33
2.4 ESTRUCTURAS ...........................................................................................................................35
2.5 VISTAS .......................................................................................................................................35
2.5.1 Vistas de Base de Datos........................................................................................................36
2.5.2 Vistas de Proyeccin ............................................................................................................38
2.5.3 Vistas de actualizacin .........................................................................................................39
2.5.4 Vistas de ayuda.....................................................................................................................41
2.5.5 Unin, Proyeccin y Seleccin .............................................................................................41
2.5.6 Relacin entre Clave Externa y Condicin Join...................................................................43
2.6 AYUDAS PARA BSQUEDA .........................................................................................................45
2.6.1 Ayuda para bsqueda elemental: .........................................................................................46
2.6.2 Definicin de ayudas de bsqueda .......................................................................................47
2.6.3 Ayuda para bsqueda compuesta .........................................................................................51
2.6.4 Enlace de una Ayuda de Bsqueda con un campo de pantalla ............................................51
2.6.5 Jerarqua de la llamada a la Ayuda de Bsqueda................................................................52
2.7 MODIFICACIN DE OBJETOS .......................................................................................................53
2.8 TRATAMIENTO DE LOS DATOS ....................................................................................................54
2.8.1 Data browser ........................................................................................................................54
2.8.2 Actualizacin de tablas.........................................................................................................55
2.8.3 Transacciones: SM30, SM31. ...............................................................................................55
3 CREACIN DE PROGRAMAS....................................................................................................56
3.1 EDITOR Y OBJECT NAVIGATOR ..................................................................................................56
3.2 ELEMENTOS DE UN PROGRAMA ..................................................................................................57
3.3 ESCRIBIR CDIGO (TEXTO FUENTE)............................................................................................58

Pgina 2 de 195
ABAP Fundamentos y Reporting
3.3.1 Elementos sintcticos bsicos...............................................................................................58
3.3.2 Funciones de edicin ............................................................................................................59
3.3.3 Patrones de instrucciones.....................................................................................................60
3.4 INTERACCIN CON EL USUARIO .................................................................................................61
3.4.1 Pantalla de seleccin............................................................................................................61
3.4.2 Lista ......................................................................................................................................61
3.4.3 Mensajes ...............................................................................................................................61
3.5 INTERACCIN CON LA BASE DE DATOS .......................................................................................62
3.6 OPERACIONES CON PROGRAMAS ................................................................................................62
3.6.1 Verificacin de sintaxis ........................................................................................................62
3.6.2 Activacin .............................................................................................................................63
3.6.3 Ejecucin ..............................................................................................................................63
3.7 DEBUGGING ...............................................................................................................................63
3.7.1 Pantalla ................................................................................................................................64
3.7.2 Funciones importantes .........................................................................................................64
3.7.3 Breakpoints...........................................................................................................................65
4 TIPOS DE DATOS Y OBJETOS DE DATOS..............................................................................66
4.1 TIPOS DE DATOS.........................................................................................................................66
4.1.1 Predefinidos..........................................................................................................................66
4.1.2 Definidos por el usuario .......................................................................................................67
4.1.3 Grupos de tipos.....................................................................................................................68
4.1.4 Visibilidad.............................................................................................................................68
4.2 OBJETOS DE DATOS ....................................................................................................................69
4.2.1 Variables ..............................................................................................................................69
4.2.2 Constantes y literales............................................................................................................70
4.2.3 Parmetros y selecciones .....................................................................................................71
4.2.4 Tablas ...................................................................................................................................71
4.2.5 Rangos ..................................................................................................................................71
4.2.6 Atributos de objetos ..............................................................................................................71
4.3 FIELD SYMBOLS .........................................................................................................................72
5 PROCESAMIENTO DE DATOS ..................................................................................................73
5.1 ASIGNACIN Y CONVERSIN ......................................................................................................73
5.1.1 Sub-campos...........................................................................................................................73
5.1.2 Inicializacin ........................................................................................................................74
5.2 OPERACIONES NUMRICAS ........................................................................................................74
5.2.1 Aritmticas............................................................................................................................74
5.3 CADENAS DE CARACTERES ........................................................................................................74
5.3.1 Concatenate..........................................................................................................................74
5.3.2 Split.......................................................................................................................................74
5.3.3 Shift.......................................................................................................................................75
5.3.4 Replace .................................................................................................................................75
5.3.5 Condense ..............................................................................................................................75
5.3.6 Translate...............................................................................................................................75
5.3.7 Overlay .................................................................................................................................75
5.3.8 Search...................................................................................................................................75
6 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
6.4 FINALIZAR BUCLES ....................................................................................................................77
6.4.1 Continue ...............................................................................................................................77

Pgina 3 de 195
ABAP Fundamentos y Reporting
6.4.2 Check ....................................................................................................................................77
6.4.3 Exit........................................................................................................................................78
7 PANTALLA DE SELECCIN ......................................................................................................79
7.1 PARAMETERS .............................................................................................................................79
7.1.1 Activacin de parmetro obligatorio....................................................................................80
7.1.2 Asignacin de valores por defecto........................................................................................80
7.1.3 Supresin de la visualizacin ...............................................................................................80
7.1.4 Permitir maysculas y minsculas como entrada ................................................................80
7.1.5 Parmetro con apariencia de checkbox ...............................................................................80
7.1.6 Parmetro con apariencia de radiobutton ...........................................................................81
7.1.7 Asignacin de ayudas de bsqueda ......................................................................................81
7.2 SELECT-OPTIONS........................................................................................................................81
7.2.1 Asignacin de valores por defecto........................................................................................82
7.2.2 Supresin de la visualizacin ...............................................................................................83
7.2.3 Permitir maysculas y minsculas como entrada ................................................................83
7.2.4 Asignacin de ayudas de bsqueda ......................................................................................83
7.2.5 No permitir mltiples valores ...............................................................................................83
7.2.6 No permitir intervalos ..........................................................................................................83
7.3 ASIGNACIN DE DESCRIPCIONES A LOS CAMPOS DE LA PANTALLA DE SELECCIN .....................83
7.4 DISEO DE LA PANTALLA DE SELECCIN ...................................................................................84
7.5 EVENTOS ...................................................................................................................................84
7.6 PANTALLAS DE SELECCIN DEFINIDAS POR EL USUARIO ............................................................84
7.7 MENSAJES..................................................................................................................................85
7.7.1 Uso de mensajes ...................................................................................................................85
7.7.2 Gestin de mensajes .............................................................................................................86
8 ACCESO A LA BASE DE DATOS................................................................................................87
8.1 OPEN SQL VS SQL NATIVO .......................................................................................................87
8.2 LECTURA DE DATOS: SELECT ..................................................................................................87
8.2.1 Una o varias lneas...............................................................................................................88
8.2.2 Ms de una tabla ..................................................................................................................89
8.2.3 Funciones de agregado ........................................................................................................90
8.2.4 Seleccin (WHERE)..............................................................................................................90
8.2.5 Selecciones dinmicas ..........................................................................................................91
8.2.6 Clusula For All Entries.......................................................................................................91
8.2.7 Clusula Order by ................................................................................................................91
8.2.8 Clusula Group by................................................................................................................92
8.2.9 Clusula Bypassing buffer....................................................................................................92
8.3 MODIFICACIN DE DATOS: INSERT/UPDATE/MODIFY/DELETE ........................................92
8.4 CONFIRMAR/DESHACER MODIFICACIONES: COMMIT/ROLLBACK ........................................92
8.5 RENDIMIENTO ............................................................................................................................92
9 BASES DE DATOS LGICAS ......................................................................................................93
9.1 PARTES DE UNA BDL.................................................................................................................94
9.2 UTILIZACIN CLSICA ...............................................................................................................94
9.3 FUNCIN LDB_PROCESS........................................................................................................95
9.3.1 Comportamiento en tiempo de ejecucin..............................................................................95
9.3.2 Parmetros de LDB_PROCESS ...........................................................................................95
9.3.3 Profundidad de la Lectura y Rutinas de Vuelta....................................................................96
9.3.4 Excepciones de LDB_PROCESS ..........................................................................................97
9.3.5 Ejemplo.................................................................................................................................97
10 TABLAS INTERNAS ...............................................................................................................102
10.1 ATRIBUTOS DE LAS TABLAS .....................................................................................................102
10.2 OPERACIONES Y REAS DE TRABAJO .......................................................................................103
10.3 DECLARACIN: TIPOS Y OBJETOS ............................................................................................103
10.4 AADIR REGISTROS .................................................................................................................104
10.4.1 Append ...........................................................................................................................104
10.4.2 Collect ............................................................................................................................104

Pgina 4 de 195
ABAP Fundamentos y Reporting
10.5 LEER REGISTROS ......................................................................................................................104
10.5.1 Loop ...............................................................................................................................104
10.5.2 Read ...............................................................................................................................105
10.6 MODIFICACIONES ....................................................................................................................105
10.6.1 Modify ............................................................................................................................105
10.6.2 Insert ..............................................................................................................................106
10.6.3 Delete .............................................................................................................................106
10.7 INICIALIZAR TABLAS ................................................................................................................106
10.7.1 Refresh ...........................................................................................................................106
10.7.2 Clear...............................................................................................................................106
10.7.3 Free ................................................................................................................................106
10.8 DESCRIBIR Y ORDENAR ............................................................................................................106
10.8.1 Atributos.........................................................................................................................106
10.8.2 Sort.................................................................................................................................107
11 CREAR LISTAS .......................................................................................................................108
11.1 LISTA ESTNDAR .....................................................................................................................108
11.1.1 Cabeceras y smbolos de texto .......................................................................................108
11.1.2 WRITE............................................................................................................................109
11.1.3 Iconos y smbolos ...........................................................................................................110
11.1.4 Check-boxes y campos de entrada .................................................................................110
11.1.5 SKIP ...............................................................................................................................110
11.1.6 ULINE ............................................................................................................................110
11.2 DISEO DE LA PGINA .............................................................................................................110
11.2.1 Dimensiones ...................................................................................................................111
11.2.2 Cabeceras no estndar...................................................................................................111
11.2.3 Columnas fijas................................................................................................................112
11.2.4 Salto de pgina...............................................................................................................112
11.2.5 Pie de pgina..................................................................................................................112
11.2.6 Sentencias adicionales ...................................................................................................112
11.3 SENTENCIA FORMAT.............................................................................................................112
11.4 DIBUJAR LNEAS ......................................................................................................................113
11.5 NIVELES DE CONTROL ..............................................................................................................113
11.5.1 Tablas internas...............................................................................................................114
11.5.2 Extract datasets..............................................................................................................115
11.6 IMPRESIN ...............................................................................................................................116
12 LISTAS INTERACTIVAS .......................................................................................................118
12.1 INTERFASE (GUI) ....................................................................................................................118
12.1.1 Status..............................................................................................................................119
12.1.2 Funciones .......................................................................................................................119
12.1.3 Barra de mens ..............................................................................................................120
12.1.4 Usar status .....................................................................................................................121
12.1.5 Ttulo ..............................................................................................................................121
12.2 EVENTOS .................................................................................................................................121
12.2.1 AT USER-COMMAND...................................................................................................121
12.2.2 AT LINE-SELECTION ...................................................................................................122
12.2.3 Top-of-page During line-selection .................................................................................122
12.3 VARIABLES DEL SISTEMA.........................................................................................................122
12.4 RECUPERAR DATOS DE LA LISTA ..............................................................................................123
12.4.1 HIDE ..............................................................................................................................123
12.4.2 GET CURSOR................................................................................................................124
12.5 LEER LISTAS ............................................................................................................................124
12.6 MODIFICAR LISTAS ..................................................................................................................125
12.7 NAVEGACIN...........................................................................................................................125
12.8 VENTANAS ...............................................................................................................................125
13 MODULARIZACIN ..............................................................................................................127
13.1 DECLARACIN DE DATOS GLOBALES .......................................................................................128
13.2 EVENTOS .................................................................................................................................128

Pgina 5 de 195
ABAP Fundamentos y Reporting
13.2.1 INITIALIZATION ...........................................................................................................129
13.2.2 START-OF-SELECTION................................................................................................130
13.2.3 END-OF-SELECTION. ..................................................................................................130
13.2.4 TOP-OF-PAGE ..............................................................................................................130
13.2.5 END-OF-PAGE..............................................................................................................130
13.2.6 AT SELECTION-SCREEN .............................................................................................130
13.3 MDULOS DE CDIGO FUENTE .................................................................................................131
13.3.1 Macros ...........................................................................................................................132
13.3.2 Programas Include.........................................................................................................133
13.4 PROCEDIMIENTOS ....................................................................................................................134
13.4.1 Subrutinas ......................................................................................................................135
13.4.2 Funciones .......................................................................................................................146
13.5 LLAMADAS A OTROS PROGRAMAS ...........................................................................................159
13.5.1 SUBMIT .........................................................................................................................159
13.5.2 CALL TRANSACTION ...................................................................................................160
13.6 PARMETROS DE MEMORIA .....................................................................................................160
13.6.1 SAP.................................................................................................................................160
13.6.2 ABAP..............................................................................................................................164
14 ALV ............................................................................................................................................166
14.1 FUNCIONALIDAD......................................................................................................................166
14.2 TRABAJAR CON ALV ...............................................................................................................166
14.3 FUNCIN REUSE_ALV_LIST_DISPLAY .............................................................................167
14.3.1 Especificar disposicin ..................................................................................................169
14.3.2 Parmetros de retorno ...................................................................................................170
14.3.3 Ejemplo simple ...............................................................................................................171
14.4 FUNCIN REUSE_ALV_FIELDCATALOG_MERGE ..........................................................171
14.5 OTRAS FUNCIONES ...................................................................................................................175
15 TRATAMIENTO DE FICHEROS ..........................................................................................178
15.1 DEL SERVIDOR DE APLICACIN ................................................................................................178
15.1.1 Abrir ...............................................................................................................................178
15.1.2 Leer ................................................................................................................................179
15.1.3 Escribir...........................................................................................................................179
15.1.4 Cerrar.............................................................................................................................179
15.1.5 Autorizaciones................................................................................................................179
15.2 DEL SERVIDOR DE PRESENTACIN ...........................................................................................181
15.2.1 Escritura.........................................................................................................................182
15.2.2 Lectura ...........................................................................................................................187
15.2.3 Verificacin de ficheros del Servidor de Presentacin ..................................................192

Pgina 6 de 195
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, una 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 195
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 la base 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.

Pgina 8 de 195
ABAP Fundamentos y Reporting
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.

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:

Pgina 9 de 195
ABAP Fundamentos y Reporting

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 clases de desarrollo. A cada
objeto se le debe asignar una clase de desarrollo 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).
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

Pgina 10 de 195
ABAP Fundamentos y Reporting
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.
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.

Pgina 11 de 195
ABAP Fundamentos y Reporting

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
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.

Pgina 12 de 195
ABAP Fundamentos y Reporting

Adems se nos pide el nmero de mandante (client) 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 tienen un campo clave llamado
MANDT.

1.5 Men y transacciones


Podemos acceder a una determinada tarea a travs del men, escogiendo un camino,
o bien a travs de un cdigo de transaccin.
Un cdigo de transaccin est asociado a un programa. Permite que el usuario
arranque el programa introduciendo el cdigo en el campo de comandos.
Normalmente el cdigo de transaccin est asociado a uno o varios caminos del men,
pero siempre es una va rpida para acceder a la aplicacin deseada.

Pgina 13 de 195
ABAP Fundamentos y Reporting

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 Carpeta Grabar
F3 Flecha verde Paso atrs (Back)
F15 Flecha amarilla Finalizar (Exit)
F12 Aspa roja Cancelar (Cancel)
F8 Ejecutar
F4 Lupa Entradas posibles (sobre un campo): match code que
nos permite elegir valores mediante distintos criterios
de seleccin.
F1 Interrogante Ayuda (sobre un campo)
F2 Doble click - Seleccionar.
ESC Cancelar
CTRL+F1 Visualizar/Editar
CTRL+F2 Verificar
CTRL+Y Manteniendo pulsadas estas teclas se pueden copiar
bloques.

Pgina 14 de 195
ABAP Fundamentos y Reporting

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 sesiones
(modos) a la vez, en cada una de las cuales se puede estar efectuando una tarea
distinta de manera independiente.
Borrar modo: Eliminar la sesin actual.
Valores prefijados: Valores por defecto del usuario actual, que son configurables.
Servicios: Ejecutar Reports, mantener tablas, gestin de la impresin, etc.
Utilidades: Traza SQL, traza ABAP/4.
Lista: Download, imprimir,...
Jobs propios: Visualizar nuestras ejecuciones en fondo o 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 -
Dynpros- distintas).
Log off: Cerrar la sesin de SAP.

1.7 Herramientas de desarrollo


El ABAP Workbench contiene diversas herramientas que permiten editar objetos
especficos del repositorio. Las ms importantes son:
El Editor ABAP para escribir y editar cdigo de programas.

Pgina 15 de 195
ABAP Fundamentos y Reporting

El Dictionary ABAP para editar tablas y otros objetos.


El Menu Painter para disear la interfase con el usuario (men, barra de
herramientas)
El Screen Painter para disear pantallas para dilogos de usuario.
La Biblioteca de funciones para programar mdulos de funcin.
Se pueden usar estas herramientas principalmente de dos maneras:
Llamando sucesivamente al editor correspondiente para modificar cada objeto.
O trabajando con el Repository Browser (SE80) que proporciona una vista en forma de
lista jerrquica de todos los objetos que forman un programa o un grupo de funciones
o una clase de desarrollo. Haciendo doble-click en un objeto se llama al editor
correspondiente.

1.8 Organizacin del desarrollo


Los objetos del repositorio quedan ligados al sistema de correcciones y transportes en
el momento que se les asigna una clase de desarrollo.
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 clases de desarrollo (un objeto siempre pertenece a una nica
clase de desarrollo).
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.8.1 Crear clases de desarrollo


Es necesaria la siguiente informacin:
Texto breve: Descripcin que aparecer al lado del nombre tcnico de la clase.

Pgina 16 de 195
ABAP Fundamentos y Reporting
Capa de transporte: Determina a qu sistemas se transportarn los objetos de la clase.
Los administradores pueden crear diferentes capas de transporte en un mismo
sistema.
Componente de aplicacin: Divisin lgica de nivel superior de los objetos. Cada clase
de desarrollo se debe asignar a un componente de aplicacin.
Las clases de desarrollo tambin se transportan asignndolas a change requests.

1.8.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 17 de 195
ABAP Fundamentos y Reporting

2 El Diccionario de Datos
El sistema R/3 almacena los datos con los que debe trabajar 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 recoge en
el Diccionario ABAP.
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.
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).

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).
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 18 de 195
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. 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. La definicin del Diccionario es independiente de la
base de datos utilizada.
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 19 de 195
ABAP Fundamentos y Reporting

La definicin de una tabla en el Diccionario ABAP contiene los siguientes


componentes:
Los campos de tabla definen los nombres de los atributos contenidos en la tabla y los
tipos de datos correspondientes.
Las claves externas definen las relaciones entre la tabla y otras tablas.
Las caractersticas tcnicas controlan la forma en la que se crea la tabla en la base de
datos.
Los ndices sirven para acelerar la seleccin de los datos.
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.
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.

Pgina 20 de 195
ABAP Fundamentos y Reporting
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.

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

Pgina 21 de 195
ABAP Fundamentos y Reporting
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
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.

Pgina 22 de 195
ABAP Fundamentos y Reporting
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 = T1-
CAMPO4.
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.
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.

Pgina 23 de 195
ABAP Fundamentos y Reporting
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 24 de 195
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.
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.

Pgina 25 de 195
ABAP Fundamentos y Reporting
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 26 de 195
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 27 de 195
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 28 de 195
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 29 de 195
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 30 de 195
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 31 de 195
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 32 de 195
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 33 de 195
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 34 de 195
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

Pgina 35 de 195
ABAP Fundamentos y Reporting
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).

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 36 de 195
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 37 de 195
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 38 de 195
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 39 de 195
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 40 de 195
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 41 de 195
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 42 de 195
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 43 de 195
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 44 de 195
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 45 de 195
ABAP Fundamentos y Reporting
Normalmente el usuario sigue estos pasos cuando llama a la ayuda para introducir una
entrada en un campo:
1. El usuario lanza la ayuda para ver los valores posibles para un campo.
2. El sistema ofrece al usuario una serie de plantillas de bsqueda.
3. 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.
4. El usuario introduce las restricciones requeridas y el sistema comienza la
bsqueda.
5. El sistema determina los valores que cumplen con las restricciones introducidas y
los muestra en forma de lista.
6. El usuario selecciona una lnea de la lista.
7. 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:
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.

Pgina 46 de 195
ABAP Fundamentos y Reporting

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)".
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.

Pgina 47 de 195
ABAP Fundamentos y Reporting
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 48 de 195
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 49 de 195
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 50 de 195
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

Pgina 51 de 195
ABAP Fundamentos y Reporting
parmetro de la 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 52 de 195
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 53 de 195
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 54 de 195
ABAP Fundamentos y Reporting

2.8.2 Actualizacin de tablas


Dentro del diccionario nos es posible crear mini interfaces para la entrada de datos en
una determinada tabla (EntornoGenerar.actual.tablas). Existen dos tipos de estas
entradas:
1 Nivel: Toda la entrada se realiza desde la misma dynpro (Busqueda del
registro+actualizacin).
2 Niveles: Se realiza la entrada en dos dynpros, 1 busqueda del registro, 2
actualizacion.
Para poder realizar esta operatoria directamente desde una transaccin tendremos
que crearla mediante el object repositoy, Transacciones Transacciones 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 55 de 195
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 y ejecutar (tambin


podremos ejecutar en DEBUG mediante la opcin , ya veremos su
significado ms adelante) los programas.
Los programas se identifican con un nombre que debe cumplir las siguientes reglas:
Debe empezar por Z o Y, y debe tener entre uno y cuarenta caracteres.
No se pueden usar los siguientes caracteres: punto, coma, espacio, parntesis,
comilla sencilla, comilla doble, signo igual, asterisco, tanto por ciento ni subrayado.
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 56 de 195
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 una clase de desarrollo, 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:
- Texto 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: Ttulo y cabeceras que aparecern en el automticamente al
inicio de cada pgina generada por el programa, en caso de que ste escriba un report.
Textos de seleccin asociados a las variables de seleccin para que aparezcan en la
pantalla de seleccin del rango de datos a tratar.

Pgina 57 de 195
ABAP Fundamentos y Reporting
Textos 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.
Una ventaja es que podemos introducir el mismo texto en distintos idiomas, con lo que
la ejecucin del programa escribir el texto en el idioma actual del sistema, sin tener
que gestionarlo 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: Definen tipos de datos o declaran objetos de datos
que son usados por otras sentencias en el
TYPES, DATA, TABLES
programa.
Sentencias de modularizacin: Definen bloques de proceso en el programa: pueden
ser bloques de evento (no hay sentencia para
START-OF-SELECTION
concluirlos) o procedimientos (que se concluyen co
FORM ENDFORM. la sentencia ENDxxxx.

Pgina 58 de 195
ABAP Fundamentos y Reporting

FUNCTION ... ENDFUNCTION.


Sentencias de llamada: Llaman a los bloques de proceso ya definidos desde
el mismo programa o desde otros.
PERFORM, CALL, SUBMIT
Sentencias operacionales: Procesan los datos definidos con sentencias
declarativas.
WRITE, MOVE, ADD
Sentencias de control: 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: Utilizan la interfase de base de datos para acceder a
las tablas. Pueden pertenecer a Open SQL o a SQL
SELECT, INSERT, DELETE
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 <-> Permite conmutar entre los modos de Visualizacin y
Modificar 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

Pgina 59 de 195
ABAP Fundamentos y Reporting

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.
El Editor ABAP se puede ejecutar en modos de funcionamiento diferentes:
Modo frontend:
Modo Backend: Modo PC con numeracin de lneas. Delante de cada lnea aparece
su nmero. Para insertar lneas bastar con pulsar la tecla RETURN. Modo PC sin
numeracin de lneas. Igual que el anterior pero sin numeracin de lneas.
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
funciones, etc.). Slo hay que pulsar el botn despus de situarnos sobre la
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

Pgina 60 de 195
ABAP Fundamentos y Reporting
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.

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

Pgina 61 de 195
ABAP Fundamentos y Reporting

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.
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 ProgramaVerificarVerif. programa ampliada. Nos llevar a la siguiente
pantalla, pulsaremos el botn para continiuar con la verificacin.

Pgina 62 de 195
ABAP Fundamentos y Reporting

3.6.2 Activacin
Para activaremos 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 de
l men ProgramaVerificar o (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 63 de 195
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 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.

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.
F8 Continuar Continuar procesando hasta el
siguiente breakpoint o hasta el fin del

Pgina 64 de 195
ABAP Fundamentos y Reporting
programa,
F7 Entrar en procedimiento
Volver Vuelve al nivel superior de la jerarqua
de llamadas para seguir procesando. Si
no hay breakpoints, finalizamos la
ejecucin del procedimiento donde
estamos.
F2 en Fijar un punto de ruptura en una lnea
Breakpoint
lnea para conseguir que la ejecucin se
detenga en ella.
Watchpoint Permite interrumpir el proceso en
funcin del valor de ciertas variables.
F2 en Doble-click Ver el contenido de una variable en el
campo marco de variables.
Replace Permite cambiar el contenido de un
campo durante la sesin de debugging.
Podemos ver el contenido de tablas
internas complejas y expandirlas con un
doble-click.
Print Podemos mostrar resultados.
Datasets Estado de los ficheros
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->Set/Delete.
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.
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.

Pgina 65 de 195
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/ Utilidad


defecto
Longitud permitida
P Empaquetado 0 8 Mximo 16 bytes, 2 Cantidades de
dgitos por byte, el ltimo dinero,
medio byte se usa para longitudes,
el signo. pesos
I Entero 0 4 -2^31 a +2^31-1 Contadores,
(Integer) cantidades,
ndices,
periodos de
tiempo
F Coma flotante 0 8 -1E-307 a +1E308 Clculos
(Floating matemticos,
point) nmeros muy
grandes o muy
pequeos
N Numeric Text 0...0 1 1 a 65535 Nmeros en
forma de texto
C Texto (Char) Blancos 1 1 a 65535 Cadena de
caracteres
D Fecha (Date) 00000000 8 8 (AAAMMDD). Pasando Sumar das,

Pgina 66 de 195
ABAP Fundamentos y Reporting
a P es el nmero de das calcular
desde 01/01/1990. perodos.
T Hora (Time) 000000 6 6 (hhmmss) Hora: se
pueden
sumar/restar
X Hexadecimal x'00' 1 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,

Pgina 67 de 195
ABAP Fundamentos y Reporting
mientras que los segundos estn formados por lneas del mismo tipo (cualquiera que
sea).
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 68 de 195
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.
Decimals Nmero de decimales para un campo.

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 <objeto> TYPE <tipo> [VALUE <literal>].

Pgina 69 de 195
ABAP Fundamentos y Reporting

DATA <objeto2> LIKE <objeto1> [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
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>.

Pgina 70 de 195
ABAP Fundamentos y Reporting
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 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>.
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.

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 tablas utilizaremos la


sentencia:
DESCRIBE TABLE <tabla> [LINES <lneas>]/
[OCCURS <atrib_occurs>].

Pgina 71 de 195
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 72 de 195
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 y sus
componentes son compatibles. 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).
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.

Type Lenght Value Type Lenght Value


C 1 A C 4 A___
C 4 ABCD C 2 AB
C 7 -47110 P 4 47110-
P 3 12345- C 7 12345-
C -47.110 P 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 73 de 195
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.
Los operadores DIV y MOD devuelven enteros (Ver documentacin de compute).
STRLEN devuelve en un entero la longitud de una cadena.
Se pueden usar las palabras ADD, SUBSTRACT, MULTIPLY y DIVIDE para
operaciones aritmticas sencillas.
- Add-corresponding, Subtract- corresponding, Multiply- corresponding, Divide-
corresponding

5.3 Cadenas de caracteres


Ver programa DEMO_DATA_STRING.

5.3.1 Concatenate
Concatena un nmero de variables n en una variable destino.
Ex : Concatenate one two three into target [separated by space].
Target = I Like Abap/4.
Valores de error en la variable de sistema Sy-Subrc:
0 = Resultado satisfactoria.
4 = El resultado es demasiado largo solo se transferirn hasta la longitud definida.

5.3.2 Split
Separamos un string, en varias variables de tipo C, separadas por espacios.
Ex: Split Target at space into one two three.

Pgina 74 de 195
ABAP Fundamentos y Reporting
Valores de error en la variable de sistema Sy-Subrc:
0 = Resultado satisfactorio.
4 = Uno de los campos destino no tiene la longitud suficiente

5.3.3 Shift

5.3.4 Replace

5.3.5 Condense

5.3.6 Translate

5.3.7 Overlay

5.3.8 Search

Pgina 75 de 195
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, es decir,
blancos 0
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


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.

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>
[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.

Pgina 76 de 195
ABAP Fundamentos y Reporting

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.

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

6.4 Finalizar bucles


6.4.1 Continue

6.4.2 Check
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.
Si por el contrario estamos dentro de una subrutina, chequeamos y el resultado es
falso, saldremos de la subrutina.

Pgina 77 de 195
ABAP Fundamentos y Reporting

6.4.3 Exit
En un bucle esta sentencia nos sacar del bucle. En una subrutina finalizar la
ejecucin de sta.

Pgina 78 de 195
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 puede utilizar 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.

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>]
[AS CHECKBOX]
[RADIOBUTTON GROUP <grupo>].
Visualizaremos y ejecutaremos el programa DEMO_SELECTION_SCREEN_BASIC:

Pgina 79 de 195
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


Opcin: 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


Opcin: 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 Supresin de la visualizacin


Opcin: NO-DISPLAY.
Se utiliza para suprimir la visualizacin de un parmetro en la pantalla de seleccin
Nota: Esta opcin NO se puede utilizar junto con otras opciones.

7.1.4 Permitir maysculas y minsculas como entrada


Opcin: 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.5 Parmetro con apariencia de checkbox


Opcin: 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.

Pgina 80 de 195
ABAP Fundamentos y Reporting
Ejemplo:
PARAMETERS:
A AS CHECKBOX,
B AS CHECKBOX DEFAULT X.
En este ejemplo, aparecern dos checkbox en la pantalla de seleccin:

7.1.6 Parmetro con apariencia de radiobutton


Opcin: 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 RADIOBUTTON GROUP COLO,
C_RUBIO 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.7 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 enganchada 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:

Pgina 81 de 195
ABAP Fundamentos y Reporting

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.
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


Sintaxis:
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.

Pgina 82 de 195
ABAP Fundamentos y Reporting

7.2.2 Supresin de la visualizacin


Opcin: NO-DISPLAY.

7.2.3 Permitir maysculas y minsculas como entrada


Opcin: 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.2.4 Asignacin de ayudas de bsqueda


Opcin: MATCHCODE OBJECT <ayuda_de_bsqueda>.
El nombre de la ayuda de bsqueda no debe ir entre comillas y puede tener como
mximo 4 caracteres

7.2.5 No permitir mltiples valores


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

7.2.6 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.

7.3 Asignacin de descripciones a los campos de la pantalla


de seleccin
Cuando definimos un parmetro (PARAMETER) o un criterio de seleccin (SELECT-
OPTIONS) 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.

Pgina 83 de 195
ABAP Fundamentos y Reporting

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.
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>.

Salta un numero <n> de lneas.


SELECTION-SCREEN SKIP <N>.

Pinta una lnea subrayada.


SELECTION-SCREEN ULINE.

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


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

Pgina 84 de 195
ABAP Fundamentos y Reporting
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
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.
X salida Como el tipo A, pero se lanza un short dump
MESSAGE_TYPE_X.
E 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).
W aviso Se interrumpe la ejecucin y el usuario puede corregir la entrada
o confirmar con ENTER (si se muestra en AT SELECTION-
SCREEN, si no es como el tipo A).
I informativo Se interrumpe la ejecucin pero contina cuando el usuario
confirma el mensaje con ENTER.
S xito Se muestra una informacin en la pantalla siguiente.
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.

Pgina 85 de 195
ABAP Fundamentos y Reporting
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


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.

Pgina 86 de 195
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.
Buscar programas de ejemplo DEMO_SQL?

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.
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 <mbito> FROM <tabla>
[INTO <destino>]
[WHERE <condicin>]
[ORDER BY <orden>].

Esta sentencia, como vemos, tiene varias clusulas:


Clusula Descripcin
SELECT Define cul va a ser el mbito de seleccin: una lnea o varias, todas
<mbito> las columnas (campos) o algunas, con lneas repetidas o no.
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
campos de la tabla.
FROM <tabla> Especifica la tabla o vista de la base de datos que queremos leer.

Pgina 87 de 195
ABAP Fundamentos y Reporting

INTO Especifica el objeto de datos interno del programa en el que


<destino> 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
<condicin> cumplan la condicin fijada.
<orden> 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>...
SELECT SINGLE carrid connid cityfrom cityto
FROM spfli
INTO CORRESPONDING FIELDS OF wa
WHERE carrid EQ 'LH' AND connid EQ '0400'.

Ver programas de ejemplo:


DEMO_SELECT_SINGLE
DEMO_SELECT_SOME_COLUMNS
DEMO_SELECT_SINGLE_FIELDS
DEMO_SELECT_ALL_COLUMNS
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.
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.

Pgina 88 de 195
ABAP Fundamentos y Reporting

SELECT <f1> ... <fn>


FROM <dbtab>
INTO <wa>
INTO (<f1>, ..., <fn>)
INTO CORRESPONDING FIELDS OF <wa>
WHERE <key1> <op> <value1>... AND <key2> <op> <value2>...
ENDSELECT.
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.
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.
Para utilizar este mtodo las dos tablas tienen que tener idntica estructura. Esta
opcin es ms eficiente que leer los registros en un bucle y aadir las lneas una a una
a la tabla interna.
SELECT <f1> ... <fn>
FROM <dbtab>
INTO TABLE <itab>
INTO CORRESPONDING FIELDS OF TABLE <itab>
WHERE <key1> <op> <value1>... AND <key2> <op> <value2>...
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'.

Ver programas de ejemplo DEMO_SELECT_INTO_TABLES y


DEMO_SELECT_INTO_PACKAGE.

8.2.2 Ms de una tabla


Con un INNER JOIN se resumen varias tablas en una nica tabla de resultados. El
conjunto final contiene las entradas para las que existe al menos una entrada en cada
tabla. La condicin de unin puede contener campos que no sean clave.
Con un OUTER JOIN el conjunto de entradas posibles se guarda en una tabla primaria
y la informacin adicional en tablas secundarias.
Estas uniones de tablas son normalmente la manera ms eficiente de leer de la base
de datos, pues la sentencia Open SQL se transforma 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

Pgina 89 de 195
ABAP Fundamentos y Reporting
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.

8.2.3 Funciones de agregado


Al igual que la lectura por columnas, cuando utilizamos funciones de agregado
tambin utilizaremos variables. Las funciones de agregado son:
Min
Max
Count
Distinct
AVG
SUM
Las siguientes sentencias traspasan los valores de una tabla a otra siempre que
tengan el mismo nombre y el mismo dominio.
Select * from <itab> into corresponding fields of <WA>.

Se tienen que definir variables de destino.


Select * from <table> into corresponding fields of <itab>.

Borra las entradas existentes en la internal table.


Select * appending corresponding fields of table <itab>.

No es necesario endselect. No borra las entradas existentes en la internal table.

8.2.4 Seleccin (WHERE)


Con rango:
Select * from <table> where <table field> between <valor1> and <valor2>.

Con template:
Select * from <table> where <table field> like '_R%'.

En este ejemplo se seleccionar los registros que tengan una r en la segunda posicin.
Esta variante solo se puede utilizar con campos tipo texto.
_ Indica un carcter.
% Indica secuencia de caracteres.
Con lista:
Select * from <table> where <table field> in (123,1000).

Es como si utilizramos un OR.


Con IN:
Con la palabra clave RANGES especificamos que los valores contenidos en una tabla
interna son los rangos de seleccin.
Select * from <table> where <table field> in <itab>.

Las condiciones guardadas en la tabla interna declarada con RANGES o SELECT-


OPTIONS se interpretan de la siguiente manera:
Si la tabla interna est vaca, la condicin <campo> IN <so> es siempre cierta..

Pgina 90 de 195
ABAP Fundamentos y Reporting
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.5 Selecciones dinmicas


Utilizamos un parmetro para indicar sobre que tabla realizaremos el select.
Necesitamos un WA para mostrar los resultados.
Es necesario utilizar INTO.
Este mtodo es mas lento que un select esttico.
El nombre dinmico es sensitive, es decir, hay diferencias entre majusculas y
minsculas.
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.6 Clusula For All Entries


Este mtodo 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.
Ver programas de ejemplo DEMO_SELECT_FOR_ALL_ENTRIES_1 y
DEMO_SELECT_FOR_ALL_ENTRIES_2.
Select * from <table> for all entries in itab where
cityfrom = itab-cityfrom and
cityto = itab-cityto.
endselect.

8.2.7 Clusula Order by


En Abap/4 existe un Order by primary key.

Pgina 91 de 195
ABAP Fundamentos y Reporting
El orden por defecto es ascendente, al igual que con las tablas internas podemos
ordenar un campo ascendentemente y otro descendentemente.
Se puede hacer en runtime en conjuncin con una tabla interna. Para realizar esto los
campos sern de tipo C y de un mximo de 72 caracteres. La lista de <itab> contendr
<f1...fn>.
Select * from <table> order by primary key.

Ver programa de ejemplo DEMO_SELECT_ORDER_BY.

8.2.8 Clusula Group by


Todos las columnas especificadas deber ser las mismas que los indicados en la
clusula group by. Excepto las funciones de agregado. Esta clusula solo se puede
utilizar de modo esttico.
Select carrid min(price) max(price) into (carrid,resul_min,resul_max) from
<table> group by carrid.

Ver programas de ejemplo DEMO_SELECT_GROUP_BY y


DEMO_SELECT_GROUP_BY_HAVING.

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 Modificacin de datos: INSERT/UPDATE/MODIFY/DELETE


Todas estas sentencias dan un resultado a Sy-Subrc
0 Se han procesado correctamente.
<>0 Se ha producido algn tipo de error.
Update Si intentamos cambiar un registro que no existe se generara un error.
Modify Podemos modificar o crear con esta sentencia en Abap/4.

8.4 Confirmar/deshacer modificaciones: COMMIT/ROLLBACK

8.5 Rendimiento

Pgina 92 de 195
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. START-OF-SELECTION.
SELECT * FROM SPFLI WHERE GET SPFLI.
<bloque de procesamiento> <bloque de procesamiento>
SELECT * FROM SFLIGHT WHERE GET SFLIGHT.

Pgina 93 de 195
ABAP Fundamentos y Reporting

<bloque de procesamiento> <bloque de procesamiento>


SELECT * FROM SBOOK WHERE GET SBOOK
<bloque de procesamiento> <bloque de procesamiento>
ENDSELECT. 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-lectura-
procesamiento-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 94 de 195
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-OF-
SELECTION.
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

Pgina 95 de 195
ABAP Fundamentos y Reporting
grupo de tipos RFS. El componente 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 Diccionario 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 la 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:
FORM <subrutina> USING <nodo> LIKE LDBCB-LDBNODE

Pgina 96 de 195
ABAP Fundamentos y Reporting
<at> [TYPE <t>]
<evento>
<check>.

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_RUNNING: 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 97 de 195
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

Pgina 98 de 195
ABAP Fundamentos y Reporting

TABLES
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.

Pgina 99 de 195
ABAP Fundamentos y Reporting

ENDFORM.

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 100 de 195


ABAP Fundamentos y Reporting

Pgina 101 de 195


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 102 de 195


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 linea 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.

Pgina 103 de 195


ABAP Fundamentos y Reporting
Para declarar una tabla interna con cabecera usamos la adicin WITH HEADER LINE
en la sentencia DATA.
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.
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.
Ex. 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.
Ex. 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.
Ex. 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>

Pgina 104 de 195


ABAP Fundamentos y Reporting

[ INTO <area> ]
[ FROM <i1> TO <i2> ]
[ WHERE <campo_clave1> = <valor1> ...].

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 SY-
SUBRC <> 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.
Ex. 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> ].

Pgina 105 de 195


ABAP Fundamentos y Reporting

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>].

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> FROM <id1> TO <id2>. Se borra por rango, incluidos los
limites.

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.
Ex. Refresh <itab>.

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

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.
Ex. 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.
Ex . Describe table <itab> [lines] resul_lines [occurs] resul_occurs.

Pgina 106 de 195


ABAP Fundamentos y Reporting

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]]...

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.
Ex. Sort <itab> by price fldate.
Sort <itab> by price ascending fldate descending.
Que pasa con los tipos P,I y F?

Pgina 107 de 195


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 108 de 195


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 Escribe f siguiendo la plantilla <mascara>
MASK <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- Escritura justificada a la derecha (opcin por defecto para los
JUSTIFIED 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
1 COL_HEADING Cabeceras
2 COL_NORMAL Lneas de lista
3 COL-TOTAL Totales
4 COL_KEY Columnas clave

Pgina 109 de 195


ABAP Fundamentos y Reporting

5 COL-POSITIVE Valores positivos


6 COL_NEGATIVE Valores negativos
7 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 110 de 195


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.
Las lneas generadas por TOP-OF-PAGE permanecen en la parte superior de la
ventana de visualizacin de la lista mientras nos desplazamos verticalmente.

Pgina 111 de 195


ABAP Fundamentos y Reporting

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 WITH-
TITLE 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
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:

Pgina 112 de 195


ABAP Fundamentos y Reporting
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 113 de 195


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 114 de 195


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 115 de 195


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

Pgina 116 de 195


ABAP Fundamentos y Reporting
introducir en pantalla o seleccionarlos en el programa (con la sentencia NEW-PAGE
PRINT ON).
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 117 de 195


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 Contiene el ttulo de la pantalla, pantalla de seleccin o lista
mostrada.
Barra de Los mens contienen las funciones ejecutables del programa actual.
mens 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 118 de 195


ABAP Fundamentos y Reporting
teclas de Idealmente todas las funciones de men se deberan poder ejecutar
funcin con una tecla de funcin. Se pueden mostrar con un clic del botn
derecho.
Lista de Son todos los cdigos que se asocian a las teclas/botones/mens y
funciones 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 119 de 195


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 120 de 195


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-OF-
SELECTION, 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 LINE-
SELECTION 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 USER-
COMMAND.

Pgina 121 de 195


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 USER-
COMMAND. 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 122 de 195


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 SY-
LINNO). 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 LINE-
SELECTION 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 123 de 195


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>]

Pgina 124 de 195


ABAP Fundamentos y Reporting

[FIELD VALUE <f1> INTO <g1> <f2> INTO <g2> ...]


[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.

Pgina 125 de 195


ABAP Fundamentos y Reporting

linea_sup = sy-lilli + 1.
linea_inf = linea_sup + 12.
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 126 de 195


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 127 de 195


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 128 de 195


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 los 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 de una lista cuando
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>.
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 129 de 195


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 START-
OF-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-OF-
SELECTION.
Visualizaremos el cdigo del programa DEMO_EVENTS_

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 termina el evento START-OF-
SELECTION.
Visualizaremos el cdigo del programa DEMO_EVENTS_

13.2.4 TOP-OF-PAGE
Se ejecuta al inicio de cada nueva pgina.
Se suele utilizar para dar formato a la cabecera de pgina, cuando no se utilizan las
definidas en Ttulos y cabeceras. (Se aade la opcin NO STANDARD PAGE
HEADING).
Se le puede aadir la opcin DURING LINE-SELECTION, este evento se producir al
inicio de una nueva pgina de un nivel de lista secundaria. (Reports interactivos).
Se pueden tener por tanto dos eventos,
TOP-OF-PAGE que acta en el nivel inicial.
TOP-OF-PAGE DURING LINE-SELECTION que acta en los de niveles superiores.

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.

Pgina 130 de 195


ABAP Fundamentos y Reporting
Las lneas:
AT SELECTION-SCREEN OUTPUT.
MESSAGE i888 WITH 'AT SELECTION-SCREEN'
'OUTPUT'.

Consiguen que aparezca el mensaje


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:
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 en el STANDARD. '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. Para indicar
los valores lo haremos de forma secuencial es decir, el la entrada uno, el valor para el
campo 1 en la entrada 2 el valor para el campo 2 as hasta completar todos los
campos, a continuacin otra vez la entrada para el campo 1, campo 2 y as
sucesivamente para cada secuencia .

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.

Pgina 131 de 195


ABAP Fundamentos y Reporting

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
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 en 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.

Pgina 132 de 195


ABAP Fundamentos y Reporting
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. Hay que indicar
que las &1, &2, se sustituirn en las macros.

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:
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.
Existen 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 no 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

Pgina 133 de 195


ABAP Fundamentos y Reporting
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.
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.

Pgina 134 de 195


ABAP Fundamentos y Reporting

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 fuero 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
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.

Pgina 135 de 195


ABAP Fundamentos y Reporting
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. Deberamos
colocar las definiciones de las subrutinas al final del programa, especialmente en el
caso de programas ejecutables (tipo 1).
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.
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.

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.

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.

Pgina 136 de 195


ABAP Fundamentos y Reporting
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.
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,

Pgina 137 de 195


ABAP Fundamentos y Reporting
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.

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

Pgina 138 de 195


ABAP Fundamentos y Reporting
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 field-
symbol <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>] ...
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.

Pgina 139 de 195


ABAP Fundamentos y Reporting
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
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.

Pgina 140 de 195


ABAP Fundamentos y Reporting
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
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

Pgina 141 de 195


ABAP Fundamentos y Reporting
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.
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.

Pgina 142 de 195


ABAP Fundamentos y Reporting
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,
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

Pgina 143 de 195


ABAP Fundamentos y Reporting
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.

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.

Pgina 144 de 195


ABAP Fundamentos y Reporting
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'.
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

Pgina 145 de 195


ABAP Fundamentos y Reporting
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.
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

Pgina 146 de 195


ABAP Fundamentos y Reporting
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 147 de 195


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
correspondientes en el programa principal del grupo de funciones. Estos son

Pgina 148 de 195


ABAP Fundamentos y Reporting
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.

Pgina 149 de 195


ABAP Fundamentos y Reporting
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
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,

Pgina 150 de 195


ABAP Fundamentos y Reporting
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
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:
PROGRAM CALL_FUNCTION.
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

Pgina 151 de 195


ABAP Fundamentos y Reporting
STRING1 = TEXTO1
STRING2 = TEXTO2
EXCEPTIONS
STRING1_TOO_SMALL = 1
STRING2_TOO_SMALL = 2
POS_NOT_VALID = 3
OTHERS = 4.
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.

Pgina 152 de 195


ABAP Fundamentos y Reporting
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.
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.
Ruta de acceso: ( En el men principal de SAP ) Herramientas Workbench ABAP4-
DesarrolloBiblioteca funciones (SE37).

Pgina 153 de 195


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
y pulsar el botn de crear con la opcin Gestin activada. El
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 154 de 195


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 155 de 195


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 156 de 195


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 SY-
MSGV1 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 157 de 195


ABAP Fundamentos y Reporting
************************************************************************
* Definicin de tablas
************************************************************************

TABLES: T001, " Sociedades


ZCLIENXX. " 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

Pgina 158 de 195


ABAP Fundamentos y Reporting
el nombre de la funcin el sistema inserta la sentencia completa en la posicin actual
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
SUBMIT <listado> AND RETURN: Realiza una llamada a un listado. Si no se
especifica la clusula AND RETURN finalizar el programa actual y se ejecutar el
listado sin regresar al programa actual.
Esta sentencia inicia un report, por defecto no visualiza la selection screen. (VIA SELECTION-
SCREEN para que aparezca). Esta es su sintaxis:
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.

Pgina 159 de 195


ABAP Fundamentos y Reporting

13.5.2 CALL TRANSACTION


CALL TRANSACTION <transaccin>: Realiza una llamada a una transaccin.
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
Transaccin: Grupo de dynpros que tienen sentido dentro de un conjunto, y que por
ellas mismas carecen de este. Podemos asociar una transaccin a un modulpool,
reportsDesde el men de Workbench Abap Desarrollo Mas herramientas
Transacciones .
/o Te crea un nuevo modo al llamar a una transaccin.
/n Te lleva a otra pantalla dentro de la actual transaccin.
Transacciones de inters:
/Libs Transaccin de muestras de salida de reports (Guia de estilo).
/Se09 Relacionado con las ordenes de transporte. Ordenes de preparacin.
/Se10 Relacionado con las ordenes de transporte. Customizing.
/Bibs Transaccin de muestras de modulpool.
Call transaction <trancod> [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.

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:

Pgina 160 de 195


ABAP Fundamentos y Reporting
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.
Desde un programa se pueden almacenar y recuperar datos de la memoria SAP con
las siguientes sentencias:
SET PARAMETER.
La sentencia SET PARAMETER ID <identificador> FIELD <campo> almacena el valor
del campo en la memoria SAP asociado al identificador especificado.
GET PARAMETER.
La sentencia 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 SistemaValores prefijadosDatos 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.

Pgina 161 de 195


ABAP Fundamentos y Reporting
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>.
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 162 de 195


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.

Pgina 163 de 195


ABAP Fundamentos y Reporting

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

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>.

Pgina 164 de 195


ABAP Fundamentos y Reporting
Export tab spfli f1 to Memory [id 'flug']. <-- En que lugar de la memoria se almacenara.
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 165 de 195


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 166 de 195


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 167 de 195


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 de disposicin del listado. Las detallaremos
posteriormente.
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 168 de 195


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 169 de 195


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: Elimina lista en parmetro
CALLBACK_USER_COMMAND.
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 170 de 195


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 171 de 195


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

Pgina 172 de 195


ABAP Fundamentos y Reporting
en vez del valor),
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 173 de 195


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 174 de 195


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 175 de 195


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 176 de 195


ABAP Fundamentos y Reporting

Con REUSE_ALV_POPUP TO SELECT se pueden mostrar listados en pop-up.

Pgina 177 de 195


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.
OPEN DATASET <fichero> FOR OUTPUT
Abrir para escritura IN [TEXT|BINARY] MODE.
Abrir para aadir OPEN DATASET <fichero> FOR APPENDING
lneas 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 .
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 Abre el fichero para escritura. Si el fichero existe lo borra y lo
crea nuevamente.
.. 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 178 de 195


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

Pgina 179 de 195


ABAP Fundamentos y Reporting
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).
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.

Pgina 180 de 195


ABAP Fundamentos y Reporting

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
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
* X X
/tmp
/tmp/files X 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).

Pgina 181 de 195


ABAP Fundamentos y Reporting
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
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.

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

Pgina 182 de 195


ABAP Fundamentos y Reporting

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),
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

Pgina 183 de 195


ABAP Fundamentos y Reporting
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:

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:

Pgina 184 de 195


ABAP Fundamentos y Reporting
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.
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
EL VALOR DE FILETYPE ES INCORRECTO
INVALID_TYPE

Pgina 185 de 195


ABAP Fundamentos y Reporting

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 ' La cuarta lnea. ' TO TAB.
APPEND ' 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
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:

Pgina 186 de 195


ABAP Fundamentos y Reporting

15.2.2 Lectura
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:


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.

Pgina 187 de 195


ABAP Fundamentos y Reporting

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:
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,

Pgina 188 de 195


ABAP Fundamentos y Reporting
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 195


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.

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:
Parmetro Funcin
FILELENGHT Nmero de bytes transferidos.

Parmetros TABLES:

Pgina 190 de 195


ABAP Fundamentos y Reporting

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
EL VALOR DE FILETYPE ES INCORRECTO
INVALID_TYPE

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

Pgina 191 de 195


ABAP Fundamentos y Reporting
FILE_OPEN_ERROR = 2
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)

Pgina 192 de 195


ABAP Fundamentos y Reporting

Parmetro EXCEPTION:
Parmetro Funcin
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

Pgina 193 de 195


ABAP Fundamentos y Reporting
*>> Preguntamos por la versin de Windows:
QUERY = 'WS'
IMPORTING
RETURN = RESULTADO
EXCEPTIONS
INV_QUERY = 1.

IF ( SY-SUBRC = 0 ).
WRITE: / 'Windows:', RESULTADO.
ENDIF.

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.

Pgina 194 de 195


ABAP Fundamentos y Reporting

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 195 de 195

S-ar putea să vă placă și