Professional Documents
Culture Documents
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
Pgina 7 de 195
ABAP Fundamentos y Reporting
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.
Pgina 9 de 195
ABAP Fundamentos y Reporting
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.
Pgina 11 de 195
ABAP Fundamentos y Reporting
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
Pgina 13 de 195
ABAP Fundamentos y Reporting
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.
Pgina 15 de 195
ABAP Fundamentos y Reporting
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.
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
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.
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).
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.
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.
Pgina 24 de 195
ABAP Fundamentos y Reporting
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.
Pgina 26 de 195
ABAP Fundamentos y Reporting
Pgina 27 de 195
ABAP Fundamentos y Reporting
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.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)
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.
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
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).
Pgina 36 de 195
ABAP Fundamentos y Reporting
Pgina 37 de 195
ABAP Fundamentos y Reporting
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.
Pgina 39 de 195
ABAP Fundamentos y Reporting
Pgina 40 de 195
ABAP Fundamentos y Reporting
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.
Pgina 41 de 195
ABAP Fundamentos y Reporting
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.
Pgina 42 de 195
ABAP Fundamentos y Reporting
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.
Pgina 44 de 195
ABAP Fundamentos y Reporting
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.
Pgina 46 de 195
ABAP Fundamentos y Reporting
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
Pgina 49 de 195
ABAP Fundamentos y Reporting
Pgina 50 de 195
ABAP Fundamentos y Reporting
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.
Pgina 52 de 195
ABAP Fundamentos y Reporting
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.
Pgina 54 de 195
ABAP Fundamentos y Reporting
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:
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.
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.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
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.
Pgina 59 de 195
ABAP Fundamentos y Reporting
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.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
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.
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.
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
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.
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>.
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
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
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>
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.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>.
Pgina 71 de 195
ABAP Fundamentos y Reporting
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.
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.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.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.
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.
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.
6.3.2 While
WHILE <expresin_lgica>.
[bloque de sentencias]
ENDWHILE.
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
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.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
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.
<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
Pgina 83 de 195
ABAP Fundamentos y Reporting
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.
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&.
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 ...
Pgina 86 de 195
ABAP Fundamentos y Reporting
Pgina 87 de 195
ABAP Fundamentos y Reporting
Pgina 88 de 195
ABAP Fundamentos y Reporting
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.
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).
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 ).
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.
8.5 Rendimiento
Pgina 92 de 195
ABAP Fundamentos y Reporting
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
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.
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.
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>.
9.3.5 Ejemplo
TABLES SPFLI.
Pgina 97 de 195
ABAP Fundamentos y Reporting
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.
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.
CASE EVENTO.
WHEN 'G'.
WRITE: / AT-CARRID, AT-CONNID, AT-CITYFROM, AT-CITYTO.
ULINE.
WHEN 'L'.
ULINE.
ENDCASE.
ENDFORM.
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:
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.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>.
[ INTO <area> ]
[ FROM <i1> TO <i2> ]
[ WHERE <campo_clave1> = <valor1> ...].
ENDLOOP.
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>]
10.6 Modificaciones
Estas tres instrucciones permiten procesar registros concretos especificando su ndice
o especificando la clave.
10.6.1 Modify
Sobrescribe el registro con ndice i con los contenidos del rea de trabajo. La lnea i
debe existir previamente.
MODIFY <tabla> [ FROM <area> ] [INDEX <i>].
O modifica el registro que tiene los mismos campos clave que el rea con el contenido
de sta.
MODIFY TABLE <tabla> [ FROM <area> ].
10.6.2 Insert
Crea un nuevo registro en la posicin anterior a la lnea i usando los contenidos del
rea de trabajo. Si la tabla tiene i-1 registros, es equivalente a un APPEND, pues
aadimos el nuevo registro al final de la tabla.
INSERT [ <area> INTO ] <tabla> [INDEX <i>].
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.
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.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?
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.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.
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.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:
Hay dos tcnicas posibles para formatear los datos por niveles: usando tablas internas
o usando extract datasets.
ENDLOOP.
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.
START-OF-SELECTION.
IF date=X.
INSERT: sflight-fldate INTO header.
ELSE.
INSERT: dummy INTO header,
sflight-fldate INTO flights.
ENDIF.
END-OF-SELECTION.
SORT.
LOOP.
[...]
ENDLOOP.
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
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.
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
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
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.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.
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.
desde la que se lanz el evento (se empieza a contar por 1). Esta lnea
puede contener la cabecera.
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.
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.
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.7 Navegacin
Se puede utilizar el campo de sistema SY-LSIND para determinar el nivel de lista que
estamos mostrando. Podemos modificar el valor de este campo para conseguir un
nivel de lista se muestre en otra posicin, pero los valores asignados a SY-LSIND no
pueden ser nunca mayores que el que actualmente contiene. Por tanto, no podemos
saltar niveles de listado en orden ascendente.
Slo se debe cambiar SY-LSIND en la ltima sentencia antes de mostrar la lista, ya
que el hecho de cambiar su valor no lleva directamente a un salto de nivel inmediato.
El nuevo nivel se asigna a la lista al final, cuando se ha mostrada el buffer de lista
completo.
12.8 Ventanas
Podemos mostrar la lista detallada en una caja de dilogo modal utilizando la
sentencia WINDOW STARTING AT. Aqu se aplican las mismas reglas que en la
salida de listas.
DATA: linea_sup TYPE i, linea_inf TYPE i.
AT LINE-SELECTION.
linea_sup = sy-lilli + 1.
linea_inf = linea_sup + 12.
WINDOW STARTING AT 10 linea_sup
ENDING AT 65 linea_inf.
WRITE: ...
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.
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.
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.
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 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 .
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.
DEFINE OPERACION.
RESULTADO = &1 &2 &3.
SALIDA &1 &2 &3 RESULTADO.
END-OF-DEFINITION.
DEFINE SALIDA.
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
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.
13.4.1 Subrutinas
Las subrutinas son procedimientos que podemos definir y llamar en y desde cualquier
programa ABAP. Normalmente, las subrutinas se llaman internamente, es decir,
contendrn secciones de cdigo o algoritmos que se utilizan frecuentemente de forma
local. Si queremos que una funcin pueda ser utilizada en todo el sistema, deberamos
utilizar un mdulo de funcin.
13.4.1.7 Llamada
Llamaremos a las subrutinas desde cualquier bloque de proceso utilizando la
sentencia:
PERFORM.<nombre_subrutina>.. [USING ... <pi>... ]
[CHANGING... <pi>... ].
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
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.
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.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
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>.
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.
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.
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
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.
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:
START OF SELECTION.
WRITE: Selecciona un programa,
/----------------------.
SKIP.
SELECT * FROM D010SINF WHERE ( PROG LIKE Z% ). Empieza por Z
WRITE / D010SINF-PROG.
HIDE D010SINF-PROG.
ENDSELECT.
AT LINE-SELECTION.
* Este evento se ejecuta cuando el usuario selecciona una lnea
SET PARAMETER ID RID FIELD D010SINF-PROG.
CALL TRANSACTION SE38.
El listado muestra todos los programas que empiezan por Z. El nombre de cada programa se
almacena en el rea HIDE de cada lnea.
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>.
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.
* 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.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.
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.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).
REPORT Z_ALV_1.
TABLES: SPFLI.
START-OF-SELECTION.
END-OF-SELECTION.
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
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.
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.
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
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
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 TABLES:
Parmetro Funcin
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
DATA: NOMB_FICH(128),
TIPO_FICH(3),
TAM_FICH TYPE I.
DO 5 TIMES.
TABI-COL1 = SY-INDEX.
TABI-COL2 = SY-INDEX ** 2.
APPEND TABI.
ENDDO.
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.
Ahora, podemos abrir el fichero C:\temp\testsap.xls utilizando Excel. Aparecera algo como esto:
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
Ejemplo: Supongamos que el servidor de presentacin est ejecutndose bajo Windows 95, y hemos escrito el
siguiente programa:
PROGRAM ZTSTFICH.
El sistema ha escrito las cinco lneas de la tabla TAB en el fichero ASCII c:\temp\testsap.tx. Ahora abrir este fichero
utilizando cualquier editor del servidor de presentacin. En este ejemplo hemos utilizado el editor de DOS:
15.2.2 Lectura
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 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.
LOOP AT TABI.
WRITE: / TABI-COL1, TABI-COL2, TABI-COL3.
ENDLOOP.
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 EXPORT:
Parmetro Funcin
FILELENGHT Nmero de bytes transferidos.
Parmetros TABLES:
Parmetro Funcin
DATA_TAB Tabla interna (destino de la lectura)
Parmetros EXCEPTIONS:
Parmetro Funcin
CONVERSION_ERROR Error en la conversin de los datos
FILE_OPEN_ERROR El fichero no se puede abrir
FILE_READ_ERROR No se puede leer el fichero
INVALID_TABLE_WIDTH Estructura de tabla no vlida
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:
PROGRAM ZTSTFICH.
LOOP AT TABI.
WRITE: / TABI.
ENDLOOP.
Parmetro EXPORT:
Parmetro Funcin
RETURN Resultado de la pregunta (0 = no, 1 = s)
Parmetro EXCEPTION:
Parmetro Funcin
INV_QUERY QUERY o FILENAME contienen un valor incorrecto.
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'.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Sistema Operativo:', RESULTADO.
ENDIF.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Windows:', RESULTADO.
ENDIF.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Existe el fichero?', RESULTADO.
ENDIF.
IF ( SY-SUBRC = 0 ).
WRITE: / 'Longitud fichero:', LONG_FICH.
ENDIF.
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.