Professional Documents
Culture Documents
Resumen ABAP Certificate PDF
Resumen ABAP Certificate PDF
Resumen ABAP Certificate PDF
TAW 10 & 12
Idioma: Español
1
TAW 10 1/2.
TAW 10 2/2.
2
TAW 12 2/3 ABAP workbench.
TAW 12 3/3.
3
TAW10 1/2 ABAP workbench fundamentals
Manual de referencia
Transacción Descripción
SE80 Object navigator
SE38 Abap editor
SE11 Abap dictionary
SD11 Data modeler
SE91 Creación de mensajes
ST22 Abap dump análisis
SM21 Visor de logs del sistema (basis)
SU21 Autorización de objetos
SE51 Screen painter
SE41 Menú painter
SE37 Constructor de funciones
BAPI Repositorio de BAPI´S
SE16 Ver contenido de una tabla
SE54 Table views
SM30 Transacción para mantenimiento de tablas
SM12 Visor de locks
SE18 Visor de BADI’s
SE24 Class builder
SE91 Clases de mensajes
SE36 Bases de datos lógicas
ST05 SQL trace
SE30 Análisis de consumo de un programa abap
SM36 Crear JOB´s
SM37 Ver corridas de JOBs
SP01 Y SP02 Visor de spool
SE51 Screen painter
SM50 Visor de application server
SM13 Visor de requerimientos de UPDATE
SE93 Creación de transacción
SE14 Database Utilities
SCU3 Visor de log de tablas del sistema
SCDO Creación de change document
4
Variable de sistemas
SY-UNAME Nombre de usuario
SY-SUBRC Retorno de sentencias
SY-LSIND Contador de nivel de listado, arranca en 0
SY-TABIX Índice de una tabla interna
SY-TFILL Cantidad de registros traídos en un loop
SY-LENGHT Longitud de una línea de una tabla interna
SY-ULINE Ingresa una línea horizontal
SY-VLINE Imprime una línea vertical
SY-DNNR Información de la pantalla donde esta
SY-LILLI Numero de la línea donde el usuario realizo el clic en la fila del listado
SY-TITLE Contiene el titulo del programa
SY-DYNNR Numero de screen en la que me encuentro
SY-FDPOS Posición en de una cadena en otra usando la sentencia SEARCH
SY-LINCT Cantidad de líneas
SY-LINSZ Largo de la línea
SY-SROWS Cantidad de filas en pantalla
SY-SCOLS Cantidad de columnas en pantalla
SY-PAGNO Numero de pagina
SY-LINNO Numero de línea seleccionada
SY-COLNO Numero de columna seleccionada
5
• Creación de un programa ABAP
6
5. Completar los datos que pide para el programa
7
.
7. Asignarle una orden de transporte en el caso de que la clase de desarrollo sea distinto de $TMP
8
4. escribir el nombre de la transacción, la descripción de la misma y a que tipo de programa será asociada
9
5. ingresar el nombre del programa a asociar
10
6. Nos pedirá guardarla en una clase de desarrollo
Capitulo 7
ABAP Program Process.
Las 3 capas pueden ser instaladas juntas en una única maquina, por separado en 3 maquinas
distintas. Las 2 primeras capas pueden cada una ser instalada en mas de una maquina (tener
la DB en mas de una maquina o presentation server)
• Vistas de usuario -> Todas las pantallas de usuario se ejecutan en la capa del presentation server
Cuando el usuario realiza una acción en la pantalla el control del programa se traspasa al
application server donde esta la lógica de este.
Capitulo 8
• El repositorio esta subdividido de acuerdo a los componentes de aplicación del sistema y cada
componente esta a su vez subdividido en clases de desarrollo.
• Sintaxis ABAP
Características -> Esta formado por sentencias
-> Cada sentencia termina en un punto
-> Cada palabra debe estar separado por un espacio
-> Una línea puede contener mas de una sentencia
-> ABAP no es case sensitive
-> Comentarios -> * - > comenta toda una línea
-> “ -> comenta a partir del símbolo
-> Toda sentencia ABAP retorna un código de respuesta en la variable de
sistema (SY-SUBRC), cuando la sentencia se realiza correctamente retorna 0,
en caso de error 4.
Capitulo 9
12
Introduction to ABAP dictionary
• Elementos del diccionario -> Tablas -> Transparentes -> estas tablas
tienen la estructuras en el diccionario que en la db.
Tiene campos clave en combinación con campos no
claves.
-> Pool o Cluster -> son tablas de
sistema.
-> Data Elements -> brindan información
semántica sobre un campo
-> Domains -> brinda la descripción técnica
de un campo
• Estructuras -> Las estructuras con definiciones de conjuntos de datos parecidos a las tablas
transparentes pero solo están definidos en el diccionario, no tiene campos claves.
• Si se usan elementos del diccionario para definir elementos en una pantalla de selección estos
elementos heredan todos los atributos de estos, no solo el tipos de datos que se admite, la
definición semántica del mismo así también como la ayuda (F1) y el machcode (F4)
• El campo MANDT (tipo S_MANDT) nos indica que la tabla que estamos utilizando no es cross-
client (tabla dependiente de mandante)
• Transacción para el diccionario SE11, desde aquí se crean todos los elementos del diccionario.
• La transacción SE14 contiene utilitarios para las tablas, vistas, etc de la DB. Nos permite borrar
el contenido de una tabla.
Capitulo 10
Sentencias básicas de ABAP
• Data types globales -> son utilizados por todos los programas, se encuentran en el diccionario de
datos, son manejados centralizadamente.
• Data types Locales -> son creados por el usuario dentro de un programa con la sentencia
TYPES, con la particularidad de que los campos de ese type deben contener solo tipos de datos
predefinidos por abap y no los del diccionario.
TYPES:
type_name TYPE [VALUE n]
…
…
• Tipos de datos predefinidos por abap, valores por default
13
C Text (Character) 1 space
N Numeric text 1 '00...0'
D Date (YYYYMMDD) 8 '00000000'
T Time (HHMMSS) 6 '000000'
X Hexadecimal (HeX code) 1 X'00'
I Integer 4 0
P Packed number 8 0
F Floating point number 8 0
STRING Character sequence (string) variable-length empty string
XSTRING Byte sequence (X string)
variable-length empty hexadecimal string
• Constantes - > data object constantes en mi programa. Su valor no puede ser modificado en
RUNTIME.
• La conversión de datos entre data object es posible, dependiendo del contenidos de estas, tener
en cuenta los puntos decimales.
• Loop at ... into … endloop -> se utiliza para tablas internas, nos permite recorrer una tabla
interna poniendo cada línea en una work area.
• Select... endselect -> se utiliza para iterar dentro de tablas de la base de datos. Lo que realiza
esta sentencia es una iteración y por cada vuelta realiza una consulta a la db para traernos el
siguiente registro
Primero se coloca el mensaje (007) conel tipo de comportamiento que queremos (E) y entre
parentesis va la clase de mensaje a la cual el mensaje que queremos desplegar pertenece, los
parametros que siguen son posicionales, los mensajes pueden llevar parametros, no mas de 4. Para
ver el mensaje ver la transaccion SE91 ingresando la clase de mensajes.
Se puede en un programa declarar una librería por default y no tener que declararlo en cada
sentencia message
• Acceso al debugger de cualquier programa en el command field ‘/h + [enter]’ y luego ejecutar el
programa, se abrirá el debug de ese programa.
14
Al pie de la pantalla aparecerá la siguiente leyenda “debugger switch on” que nos indicara que esta
activado el debugger
• Se puede poner un break-point destinado solo a un usuario con la sentencia, este breakpoint solo
afectara al usuario que se le especifica
Break <usuario>
Break bc400-46
• Un watchpoint es útil para parar un programa por el contenido de un data object, se crea
declarando el campo y que contenido deseas que tenga para que pare. También es posible definir
la igualdad entre 2 campos o que se detenga cuando un campo cambie de valor en su contenido
cualquiera sea este cambio.
• Estructuras en abap :
Las estructuras son una estructura de data object, las estructuras se pueden anidar y un
componente puede ser hasta una tabla.
Se define igual a un tipo y se declara una work area del tipo de la estructura
La estructura es local y solo puede ser accedida por el progrograma.
La transaccion nos permite visualizar un dump de una aplicacion en el sistema. Permite ver el dump
que le dio al usuario y al resto de los usuarios en una fecha determinada.
• TABLAS INTERNAS
Son tablas dinamicas, a nivel de insercion y borrado de registros, se crea como data objects con una
estructura definida. Cada registro se lo conoce como lineas en la tabla interna. Las lineas pueden ser
de cualquier tipo de datos ABAP.
Tipos de tablas - > index tables - > standard tables: busqueda secuencial
proceso secuencial
acceso por campos key
- > sorted tables: busqueda binaria
proceso secuencial
acceso por campos key
- > hashed tables: acceso solo por clave hash
no se puede acceser secuencialmente
15
Las tablas internas pueden ser creadas en forma local dentro del programa o en el dictionario de
datos y ser compartidas por todos los programas.
Las tablas internas no tienen representacion en la base de datos.
La definición de una tabla en un programa se reliza creando un data object del tipo TABLE OF una
estructura y definiendo el tipo de tabla y acceso. Esta creacion es dinamica y puede ser distinto en
distintos programas.
Tablas pool -> Tienen representación en la base de datos pero no como se muestra en la
estructura, los datos estan diseminados en distintas tablas y logicamente tiene una
estructura única.
• Para definir una tabla interna en un programa a partir de una estructura se utiliza la siguiente
sentencia
DATA itab TYPE <table_kind> TABLE OF <struct> WITH <keydef> ( pag 264 L.1)
Capitulo 11
Data retrieval
16
• Toda selección de datos a la DB de produce a travez de la intefaz de la base de datos,
fisicamente la tabla puede ser transparente o de tipo cluster.
• Cuando se realiza una selección en una tabla dependiente de mandante el entorno tranforma la
sentencia agregandole el campo mandante en el cual estamos logoneados, se puede evitar esto y
leer datos de otros mandante utilizando la sentencia CLIENT SPECIFIED y en la clausula
WHERE es necesario especificar el mandante que queremos.
La variable de sistema sy-mand nos iundica en que mandante estamos logoneados.
....
WHERE carrid IN (…, …, …)
….
• La sentencia SELECT SINGLE * … nos permite traer de la DB la primera ocurrencia según una
condición.
• IMPORTANTE -> para que la DB mejore una búsqueda seleccionando un índice apropiado es
necesario en la cláusula WHERE escribir los parámetros de selección en el mismo orden que
están descriptos en el diccionario. Es necesario ver la estructura de la tabla en el diccionario y
verificar si tiene otros índices además del primario que se ajuste mejor a nuestra búsqueda.
No es necesario pasar por parámetros toda la clave, se puede pasar parte de la clave y también
beneficia a la búsqueda.
17
• Seguridad en accesos a la DB -> en la DB estan los perfiles de cada usuario para acceder a los
datos. El chequeo de autorizaciones se realza a traves de codigo con la sentencia AUTHORITY
CHECK con diferentes parametros para saber si cumple con los requisitos de autorizacion para
la accion que desea realizar, la respuesta del chequeo se devuelve en la variable de sistema sy-
subrc (= 0 autorizado, <> 0 no autorizado).
Los parámetros son objetos de autorizacion, estos objetos sueltos en el sistema, este objeto esta
compuesto por un objeto (parametro) al cual queremos tener acceso y un codigo de actividad
que nos indica que permisos tenemos. Estos objetos de autorizacion se guardan en clases de
autorizaciones (transaccion SU21 o SU20).
IF sy-subrc NE 0.
MESSAGE e046(bc400) WITH pa_carr.
* No display authorization for airline carrier &1
ENDIF.
• Vistas -> es una tabla logica definida en el diccionario de datos, los datos estan almacenados en
la DB pero en tablas distintas, estas tablas estan logicamente relacionados por campos clave
pero para nuestro programa se maneja como una tabla unica.
• Selección en tablas múltiples -> Para relacionar 2 o mas tablas o no es obligatorio crear una
vista se puede realizar a travez de un solo qry la consulta, para esto es necesario crear la relacion
con el addition a la sentencia select JOIN.
Capitulo 12
Internal program modularization with subroutines
• subrutina -> es un modulo interno dentro de mi programa, permite separar funcionalidad, hace mas
lejible al programa, permite la reutilizacion de codigo. Se le puede pasar parametros y recibir
parametros de respuesta, se ejecuta con la sentencia PERFORM y la rutina se declara con
18
Los parámetros fuera de la rutina se llaman “parametros actuales” y dentro de la rutina se llaman
“parametros formales”.
• Los parametros deben ser tipificados, esto quiere decir que se deben declarar el tipo de parametro
formal y actual ya que sino existiria la posibilidad de errores en runtime. Se deben declarar las
estructuras y tablas internas ( las tablas internas de deben pasar por referencia ya que sino por valor
duplicarian la tabla en memoria)
• Se pueden crear data object en forma local dentro de una subrutina, estos solo pueden ser accedidos
dentro de la misma. Los data object declarados fuera de las rutinas son data objects globales y
pueden ser utilizados y modificados dentro de las rutinas. La declaracion de data objects se realiza
igual que afuera. Los data object declarados dentro de la rutina se liberan cuando esta termina.
Capitulo 13
Abap runtime System
• Los bloques de procesamiento son la unidad mas pequeña de un programa, existen distintos tipos de
bloques
Events block -> Son eventos manejados por el runtime, y son disparados por este.
Subroutines -> son bloques que se ejecutan mediante una sentencia
Modules -> Son bloques manejados por procesos de pantalla
• Los bloques de procesamiento pueden ser escritos en cualquier orden, tienen cada bloque una
prioridad de ejecucion que siempre es la misma.
• Los bloques de procesamiento terminan cuando el runtime encuantra otro bloque acontinuacion de
la ultima linea ejecutable de este.
• Listados básicos -> Los listados basicos son listados que se muestran por pantalla con formato
basico, un listado basico puede tener hasta 20 niveles de listados ya que se puede hacer que la
selección de un dato en un listado nos lleve a otro.
• Para ingresar titulos a un listado basico Activas el programa y ejecutarlo, tirar el listado e ir a la
barra de herramintas SYSTEM -> LIST -> LIST HEADING, guardar los cambios y para
modificarlos ir a GOTO -> TEXT ELEMENTS -> LIST HEADING.
19
Capitulo 14
User Dialog List
• Multilenguaje -> Al escribir literales en un programa no se traducira logoneado en otro idioma, para
esto esta los text symbols, ahí se podra definir las etiquetas, traducierlas y el sistema elefira el texto
que debe mostrar según el idioma
Si el text element (‘(001)’) no esta traducido en el idioma de logon se escribira en blanco, para
evitar esto se coloca por default un valor entre comillas simples como literal (‘HELLO’).
• Usar la variable sy-lsind para saber en que listado estamos parados y saber cual fue la selección. No
puede sobrepasar en nivel de 20 listados (dumpea).
• HIDE área -> la hide area es un area de memoria donde se guardan datos de donde queremos
recuperar cuando se ejecuta un at line-selection. Cuando hacemos un write para listados basicos se
utiliza para recuperar datos del listado para utilizarlos en el armado de otro listado en base a esos
datos (selección del usuario).
NOTA: cuando terminados de utilizar la wa debemos limpiarla para evitar basura. (CLEAR wa).
Se puede guardar más de una estructura en el area de HIDE.
• Para saber en que columna se presiono en el listado esta la sentencia GET CURSOR.
• Variante -> es posible guardar lo datos ingresados en una pantalla para en otra oportunidad
recuperar la selección
Capitulo 15
User dialog selection screen
• Parameters -> Esta sentencia genera un data object en memoria y un campo de entrada en una
pantalla de selección con el mismo tipo.
En la definición de un select-option solo puede tener de tipo (luego de for) un data object, para
declarar un dato primero hay que declarar un data object del dato que queremos y luego asignarlo al
select-option.
Para utilizar el data object select-option donde tiene todos los parámetros de selección, se utiliza
dentro de un select común y se compara con el campo de la tabla con el cambio de que en vez de
igual va IN.
Select * from....
Into...
Where campo IN so_campo
Endselect.
El valor guardado en el select option es la selección compleja que realizo el usuario por pantalla no
realiza qrys a la base de datos, la selección se usa acompañado de sentencias OPEN SQL.
Capitulo 16
User dialog: screen
• Una screen es un programa que se crea y agrega a nuestro programa abap, las screen tiene atributos,
layout (formato), elementos y lógica de programación.
Tiene 2 bloques de procesamiento PBO (process before output) y PAI (process after input)
21
• Para diseñar el layout (formato de la pantalla) se utiliza la herramienta Graphical Screen painter que
nos permite agregar botones, campos de entrada y salida, otros elementos de pantalla.
• Tiene la opcion de utilizar data object de mi programa abap y asi interfacear datos entre estos
(generalmente los campos en una screen son traidos de mi programa abap en una estructura y
cuando se completan los campos en la screen estos esta accesible en el programa cuando se sale de
la screen), la sentencia TABLES crea un data object que se suele usar ya que se declara una
estructura y es mas facil para transporta, pero se puede interfaciar tambien otros tipos de data
objects.
IMPORTANTE -> las estructuras en el programa abap y en la screen painter deben tener el mismo
nombre para que se relacionen.
• Antes de llamar a la screen para que muestre los datos se debe completar la wa que tiene la screen
relacionada.
• Para crear botones en una screen primero hay que declarar en el elemento list de la screen y debajo
de todo hay un campo en blanco con un atributo ok, ahí se coloca por standard el nombre ok_code
(este es el function code del boton).
Cuando se crea un botón en el campo ftcCode hay que poner el nombre del boton a seleccionar, este
nombre se transportara al data object ok_code
Hay que crear un data object data: ok_code type sy-ucomm.
Ahora hay que meterle logica de programacion a la screen, hay que crear un module en el PAI.
• La sentencia SET SCREEN nos permite cambiar dinámicamente el atributo NEXT SCREEN de la
pantalla, de esta manera podemos controlar el flujo de pantallas según una acción.
Capitulo 17
Global modularization
• Los módulos de funciones son funciones externas a los programas que son globales a todo el
sistema y no a un programa
• Estas funciones están organizadas en grupos de funciones, estos grupos contienen los mismos
componentes que un programa ejecutable (Data objects, subroutines, screens). Estos componentes
pueden ser accedidos por todas las funciones que están en el grupo. Desde fuera del grupo d
funciones estos componentes son inaccesibles
22
• Todas las funciones tienen una interfaz estricta para su utilización, la interfaz esta compuesta por
paramentos y estos pueden ser de 2 tipos.
Por default todos los parámetros son pasados por referencia, pero se pueden pasar por valor.
Los parámetros de importing y changing pueden ser opcionales u obligatorios, los parámetros de
exporting siempre son opcionales.
• Las funciones están preparadas para levantar excepciones, estas se declaran el la solapa de
excepciones, dentro del código de la función las excepciones se levantan con la sentencia
RAISE <exception>
o
MESSAGE <kind><num>(<id>) RAISING <exception>
• Las excepciones son tiradas hacia el programa que llamo la función, en este se deben atrapar y ser
salvadas, cuando se declaran las excepciones se le asignan un numero, cuando ocurren este numero
se devuelve en la variable se sistema SY-SUBRC.
[Y|Z]<func_group>
[LY|LZ]<func_group><abrev><num>
• Para usar una funcion en un programa conviene utilizar el boton PATTERN que nos armara la
sintaxis de la funcion con sus parametros acorde como esta definida.
• BAPI´s -> Son funciones Standard de SAP que manejan objetos de negocio, nos permite crear
objetos, cambiar y mostrar sus atributos.
• Las BAPI’s están implementados en módulos de funciones, se crean desde la transacción BAPI.
Estas funciones deben cumplir los siguientes requerimientos.
1. Nombre -> BAPI_<bussiness_obj_name>_<method_name>
2. Capacidad de ejecución remota
3. No debe tener pantallas, mensajes de dialogo
4. Los parámetros deben estas tipados en el diccionario
5. No se permiten parámetros de changing.
6. No se permiten excepciones.
Capitulo 18
23
Calling program and passing data
SUBMIT <pgm_name> AND RETURN -> llama al programa y cuando este termina se
retorna el control al programa original
• Al conectarse a R/3 se abre una sesión externa, se puede crear desde system -> new sesion o a
través de o/<t_code>. En una maquina puede haber desde 2 sesiones externas y hasta 6 según el
sistema este configurado.
• Las sesiones externas están subdivididas en sesiones internas, cada programa que corre en una
sección ocupa una sesión interna. Una sesión externa puede tener hasta 9 sesiones internas
(guardadas en stack). Y los datos de un programa solo pueden ser visibles dentro de una sesión
interna.
• Existen varias maneras de pasar datos entre programas entre sesiones internas
1. Interfaces entre programas
2. Memoria de Abap
3. Memoria de SAP
24
4. Tablas de la DB
5. Archivos locales en el presentation Server
• Interfaz entre programas -> Cuando se llama un programa que tiene pantallas se selección standard
se le pueden pasar datos. El pasaje de datos se puede realizar a través de una variante o
especificando los componentes de la pantalla de selección.
Con el addition VIA SELECTION-SCREEN nos muestra la pantalla de selección con los datos que
le pasamos
• Memoria de ABAP -> La sentencia EXPORT… TO MEMORY ID… nos permite copiar cualquier
tipo de data object a la memoria de Abap. Con el addition ID nos permite crear distintos grupos de
de memorias. Para traer los datos desde la memoria se utiliza la sentencia IMPORT … FROM
MEMORY ID …
Para liberar un grupo de la memoria se usa la sentencia FREE MEMORY ID…
• Para transferir datos entre en presentation server y el application server se usan las funciones
GUI_LOAD y GUI_DOWNLOAD.
• Memoria de SAP -> Para pasar datos usando la memoria de SAP se usan los parameters id, las
sentencias son
25
TAW10 2/2 ABAP workbench
Manual de referencia
Capitulo 2
Data types and data objects in detail
• Tipos de datos -> especificados -> Son tipos de datos que no se les
necesitan especificar el largo o la cantidad de decimales. d
(Date), t (Time), i (Integer), f (Float), string, xstring.
-> no especificados -> Son tipos de datos que se les
debe especificar el largo o la cantidad de decimales.
c, n , x -> Se les debe especificar largo ( 0..65535 )
p -> especificar largo y cantidad de decimales (máximo
16 bytes , default 8 bytes 0 decimales )
• Grupo de tipo -> definición a nivel de diccionario que agrupa definiciones de tipos que pueden
ser accedidos por todo el sistema.
El nombre de un type group no puede superar los 5 caracteres, por convención los tipos de datos
o constantes deben empezar con el nombre del type group.
TYPE-POOL zpool .
REPORT z_data_objects .
TYPE-POOLS: zpool.
• Definición de constantes
• Aritmética de enteros (integer) -> En la aritmética de enteros las operaciones con puntos
decimales son redondeadas al entero más cercano. Los cálculos utilizando aritmética de enteros
es mas rápido que los cálculos con punto fijo o flotante.
• Aritmética en numero packed -> el largo de estos tipos de datos están representados en bytes.
Cada digito decimal esta representado por medio byte, el último byte se reserva para el signo. El
máximo número de lugares decimales es el largo menos 1.
• Aritmética de punto flotante -> Los tipos de datos de punto flotante es representado
internamente usando suma de fracciones binarias.
26
data: float type f, pack type p decimals 2.
• Operaciones con tipos de datos distintos -> abap permite operaciones entre distintos tipos de
datos, en tiempo de ejecución se convierte el resultado de la operación a uno de los siguientes
tipos de dato ( i , p , f). Las operaciones aritméticas con string primero convierte el carácter en
numérico.
• Estructuras -> Una estructura es un conjunto de elementos de datos. Se define de 2 maneras, con
la sentencia TYPES o DATA
TYPES:
BEGIN OF s_name_type,
prename(25) TYPE c,
surname(25) TYPE c,
title(5) TYPE c,
END OF s_name_type.
DATA:
BEGIN OF s_name,
prename(25) TYPE c,
surname(25) TYPE c,
title(5) TYPE c,
27
END OF s_name,.
• Es posible anidar estructuras para sectorizar la información, desde la estructura principal se irán
poniendo guiones “-“ para ir metiéndose en las subestructuras hasta llegar al elemento de datos
en particular.
Para incluir estructuras hay 2 maneras
TYPES:
BEGIN OF s_name_type,
prename(25) TYPE c,
surname(25) TYPE c,
title(5) TYPE c,
END OF s_name_type.
DATA:
BEGIN OF s_adress,
name TYPE s_name_type,
street(15) TYPE c,
city(25) TYPE c,
END OF s_adress.
DATA:
BEGIN OF s_name_type2,
prename(25) TYPE c,
surname(25) TYPE c,
title(5) TYPE c,
END OF s_name_type2.
Es posible agregar 2 estructuras del mismo tipo en otra., es necesario renombrar esta
DATA:
BEGIN OF s_adress2.
INCLUDE STRUCTURE s_name_type AS name.
INCLUDE STRUCTURE s_name_type AS name2.
DATA:
street(15) TYPE c,
city(25) TYPE c,
END OF s_adress2.
• Datos UNICODE -> los datos del tipo unicode son formas de representar las información en
distintos tipos de idiomas y formatos.
Debido a unicode se cambio el tipo de representación interna de los datos, un carácter que
ocupaba internamente 1 byte ahora ocupa 2 byte. A raíz de este cambio es necesario activar el
flag de chequeo de unicode en los atributos de programa.
28
• FIELD-SYMBOLS -> toma el formato de un data element que se le asigna con la sentencia
ASSIGN. Se pueden hacer distintas asignaciones al mismo field-symbol y este tomara el
formato del dato que se le asigne.
Capitulo 3
Using Internal Tables
• Tablas Internas -> son data object que nos permiten almacenar conjuntos de datos en
estructuras fijas en memoria. Los datos son guardados linea por linea, y cada linea tiene la
misma estructura. Una tabla interna limita su tamaño a la memoria del application server.
Se define igual que una estructura y con la sentencia DATA definimos la tabla.
• Sintaxis
TYPES or DATA
Name [TYPE|LIKE] [standard|sorted|hashed] table
OF <structure>
WITH key_def
[INITIAL SIZE <tamaño inicial>]
• Para definir una estructura tipo tabla el el diccionario se entra a crear un data element para
crear una table type y nos pide un line type que debe ser una estructura definida
previamente.
29
• Tipos de tablas
-> STANDARD -> Es opcional definir la clave al crearla, esta
puede ser única o no.
key_def -> [NON-UNIQUE] {KEY COL1… COLn}
• Tipo de claves
• READ TABLE -> Para leer datos de una tabla interna se utiliza la sentencia READ
TABLE… INTO… WITH KEY.
Esta sentencia actúa igual que la sentencia SELECT, retorna un solo registro a una work area
del mismo tipo
Addition:
COMPARING <comparing_options>
└ f1 f2 … fn
└ ALL FIELDS
TRANSPORTING <transport options>
└ f1 f2 ... fn
└ NO FIELDS
Le addition COMPARING nos permite seleccionar que campos de la work area queremos
comparar al hacer la lectura en la tabla interna.
30
El addition TRANSPORTING nos permite seleccionar que campos queremos que se copie a
la work area al realizar la lectura.
La variable de sistema SY-TFILL nos indica la cantidad de de líneas leídas.
La variable de sistema SY-SUBRC nos indica si encontró al menos un registro con la
condición indicada
• MODIFY TABLE… FROM… -> modifica una linea de una tabla interna, tiene additions
para acotar la modificacion por indice o por una condicion. Para que funcione la
modificación la tabla a modificar debe tener declarados campos claves, ya que en tiempo de
ejecución se selecciona el registro con los valores de la work area. No se pueden modificar
los campos claves cuando modificamos tablas internas SORT o HASHED
El addition TRANSPORTING nos permite solo modificar los campos de la tabla interna que
especifiquemos.
El addition INDEX nos permite a nosotros indicar el numero de registro que queremos
modificar, No es posible acceder por indice a tablas del tipo HASHED.
En vez de modificar un registro con las sentencia MODIFY es posible asignar el registro a
un field symbol y modificar el registro directamente.
• DELETE TABLES -> borra un registro de una tabla por indice o por condición.
En tablas standard o sort se pueden borrar registros accediendo por la clave o por una
condición distinta a la clave.
DELETE TABLE itab_stdr WITH TABLE KEY nombre = 'pedro'.
DELETE itab_stdr WHERE domicilio = 'artigas'.
• INSERT… INTO TABLE…-> La sentencia insert nos permite insertar una o mas líneas en
una tabla interna, la inserción de las líneas son dependientes de la tabla con la que estamos
trabajando.
Standard -> inserta atrás
Sorted -> inserta ordenado
Hashed -> inserta según algoritmo hashed
31
INSERT wa INTO TABLE itab_stdr.
INSERT LINES OF itab_stdr INTO TABLE itab.
• Tablas con HEADER LINE -> el header line en una tabla interna es una WA que se declara
implicitamente con el mismo nombre y formato que la tabla interna y se maneja como una
WA normal y nos indica en que registro de la tabla nos encontramos. Para realizar
operaciones con la tabla esta se referenciara con el nomre mas doble corchete ( itab[] ) y la
WA solo con el nombre ( itab ).
• Tablas de rango -> se puede armar una tabla interna igual a la de un select opcion, se crea
una tabla del tipo rango y ahí se llenan los parametros de busqueda.
Capitulo 5, 6, 7, 8
Abap Objects
Los atributos dentro de una clase solo pueden ser declarados con la sentencia TYPE para
datos del diccionario, la sentencia LIKE es para copiar la declaración de elementos locales
de la clase.
32
El addition READ ONLY a la declaración de un atributo público nos permite que otras
clases vean el atributo pero no puedan modificarlos. Solo puede ser modificado por métodos
dentro de la clase.
Métodos -> Clase -> Solo puede utilizar atributos estáticos, estos
métodos pueden ser accedidos sin haber instanciado un objeto.
• CREATE OBJECT -> Método de creación de objetos, crea un objeto de una clase
especificada por la declaracion de la variable de referencia al objeto
• Para almacenar objetos en colecciones se utilizan tablas internas con referencias a las clases.
.
DATA it_empleados TYPE TABLE OF REF TO empleado. .
En esta tabla interna se pueden guardar los objetos de la clase empleado y toda subclase de
esta, el casting se realiza automáticamente.
Para agregar un objeto a la tabla se utiliza la sentencia APPEND, la inserción de los objetos
es al final de la tabla y esta no se puede ordenar.
APPEND im_emp TO it_empleados.
• La declaración de un data object referenciando a un objeto casi siempre van de la mano con
una tabla de referencias para mantener los objetos en el sistema.
• Para llamar a metodos estaticos se usa solamente el nombre de la clase y el operador es ‘=>’.
• Constructor -> Es el metodo que se ejecuta caundo se realiza el create object. Se ejecuta una
sola vez cuando se crea el objecto y el evento es público. En ABAP object hay herencia de
33
constructores, cuando se llama al constructor de una subclase se ejecutan todos los
constructores hasta la clase padre.
PUBLIC SECTION.
METHODS constructor IMPORTING im_nombre TYPE string.
• Para declarar una clase con sus super clases se deben declarar en forma secuencial de la
superclase a la subclase, cuando se declaran en forma local. Al declararlo en el diccionario
no es necesario.
• Para redefinir un metodo en la subclase se define el metodo que queremos redefinir con el
addition REDEFINITION, asi el sistema sabe que no es un metodo nuevo sino un
redefinicion del metodo de la superclase. No es posible cambiar la firma de un método
redefinido. Se puede crear otro método con el mismo nombre pero con distinta firma y sin el
addition REDEFINITION.
• Constructor (instancia) -> El constructor de una clase es un método de instancia público con
el nombre CONSTRUCTOR. Cada clase tiene uno y este es llamado automáticamente
cuando se crea un objeto de esa clase. Este método se implementa en la sección pública, la
implementación de este método no es necesaria para una clase ya que existe un constructor
por default.
• Constructor (clase) -> El constructor de una clase es un método de clase público con el
nombre CLASS_CONSTRUCTOR. Cada clase tiene uno y este es llamado automáticamente
cuando se crea un objeto de esa clase, se accede a un atributo o método de clase, o cuando se
registra un evento para una clase.
• Herencia y redefinición del constructor -> Los constructores se heredan y se les pueden
pasar parámetros para setear atributos dentro de ellos. Los constructores de instancia de una
súper clase solo pueden ser llamados dentro del constructor de la sub clase. A diferencia del
constructor de instancia el constructor de clase se ejecuta automáticamente. Es este caso se
ejecuta siempre un constructor de clase antes del de instancia.
Capitulo 7
34
Inheritage
• La herencia es una relación entre clases, para implementar la relación clase se pone en la
definición el addition INHERITING FROM <super_class>, con esto la subclase hereda
todos los atributos y métodos creados PROTECTED o PUBLIC.
• Cada clase puede heredar de una sola clase, no existe herencia múltiple. La herencia múltiple
se puede simular implementando interfaces.
Capitulo 8
Casting
• Casting de objetos
-> Narrow cast (= o MOVE … TO …) -> Baja la
especificación de un objeto.
Este tipo de casting es chequeado en forma estática por el compilador.
-> Wide cast (?= o MOVE … ?TO … ) -> Sube la
especificación un objeto.
Este tipo de casting no se chequea en forma estática, se produce en tiempo de
ejecución, para esto siempre se encierra esta sentencia dentro de las
sentencias TRY CHATH ENDTRY, para atrapar la excepción
CX_SY_MOVE_CAST_ERROR.
Deben estar en la misma rama de objetos y previamente se debe haber hecho
un narrow cast.
TRY.
p ?= empleado.
periodo_prueba = p->periodo_prueba.
CATCH cx_sy_move_cast_error.
e ?= empleado.
ENDTRY.
• Una interfaz es declarada por el usuario, esta describe los servicios que un usuario puede
acceder desde afuera. El usuario no conoce la implementación ni quien la implementa, puede
ser una o más clases que implementen el mismo método. Existe polimorfismo en una
interfaz. La implementación de interfaces simula la herencia múltiple.
Una interfaz se declara entre las sentencias. Dentro se declara la interfaz para los métodos de
la interfaz.
INTERFACE if_persona.
35
METHODS if_mostrar_sueldo.
...
ENDINTERFACE. "if_persona
La implementación de la interfaz se realiza en las clases que la utilizan, así para cada clase
se puede comportar de manera diferente.
INTERFACES if_persona.
METHOD if_persona~if_mostrar_sueldo.
...
ENDMETHOD. “if_persona~if_mostrar_sueldo
.
• Para utilizar los métodos de la interfaz la clase que los utiliza lo maneja como una clase
común, una “clase interfaz”. Tiene que declarar el objeto interfaz y utilizar el método. La
clase que utiliza esta interfaz solo tiene accedo al método de la interfaz. No puede acceder al
resto de los métodos y atributos.
if_per->if_mostrar_sueldo( ).
• La clase que utiliza la interfaz por fuera de nuestro sistema tendrá solo referencias a objetos
interfaz. Estos objetos tendrán los métodos de la interfaz para utilizar, y los objetos de
nuestro sistema que implementan la interfaz tendrá que responder a las llamadas de estos
métodos.
• Un alias es una forma de llamar al método de la interfaz con otro nombre para no tener que
escribir interfaz~metodo. Solo esta permitido utilizarlo dentro de la sección definición de la
clase que la implementa.Cada clase puede tener un alias diferente pára el mismo método,
este es local para la clase.
Desde fuera de la se accede al método por el alias como si fuera el nombre verdadero.
36
• Composición de interfaces -> una interfaz compuesta esta compuesta por la definición de
otras interfaces mas métodos propios. Puede usar más de una interfaz. La clase que
implemente la última de las interfaces en el árbol debe implementar todos los métodos de
todas las interfaces.
INTERFACE IF_inter.
...
ENDINTERFACE.
INTERFACE IF_inter2.
INTERFACES IF_inter1.
...
METHODS ...
ENDINTERFACE.
• Como cualquier método que se define sea de una superclase o de una interfaz este se puede
redefinir
En la sección DEFINITION del método que lo implementa se define el método con el
addition redefintion.
Capitulo 10
Events .000
• Un evento se dispara cuando se realizan cambios en otros objetos, se usa para notificar o
realizar tareas automaticas tras una operación sobre un objeto.
• Tenemos 2 actores el actor que dispara el evento (Trigger) y el que recive el evento
(Handler). En el handler esta la definicion y la implemtentacion del metodo y del Trigger
solo estara la llamada al evento.
• La visibilidad del evento la define el lanzador del evento, la visibilidad del metodo que
atiende en metodo la define el manejador.
EVENTS empleado_creado .
EVENTS empleado_creado
EXPORTING value(ex_emp) TYPE REF TO empleado.
-> Disparar el evento en un método. Los parámetros de exporting son pasados por
valor
37
-> En el manejador declarar un metodo que responda al evento que queremos
registrar. Los parámetros de este método son solo de IMPORTING. El objeto sender
refiere al objeto que envía el evento, no es necesario pasarlo por parámetro.
METHODS: agregar_persona_e
FOR EVENT empleado_creado OF empleado
IMPORTING sender.
METHODS: agregar_persona_e
FOR EVENT empleado_creado OF empleado
IMPORTING sender ex_emp.
-> Para activar el evento creado para que este se acciona se setea el handler para el
objeto que atiende ese evento.
SET HANDLER contador->agregar_persona_e
FOR ALL INSTANCES.
Capitulo 12
Special Techniques
• Clases Abstractas -> No es posible instanciar objetos de un clase abstracta. Se usa para
delinear comportamiento de las subclases. En estas clases se definen métodos, los cuales no
son necesarios que sean implementados por esta y deben ser implementados por las
subclases. Una clase con al menos un método abstracto es una clase abstracta.
• Clases Finales -> Las clases finales no tienen subclases asociadas por lo tanto los métodos
no pueden ser redefinidos (los métodos son finales o abstractos, pero no al mismo tiempo).
Las clases que son abstractas y finales solo pueden tener componentes estáticos.
• Visibilidad del constructor -> indica quien puede crear un objeto de la clase.
El addition CREATE PUBLIC indica que desde un programa llamando a la sentencia create
object se instancia el objeto.
El addition CREATE PROTECTED indica que solo objetos de la clase o de la superclase
pueden instanciar objetos
El addition CREATE PRIVATE indica que solo objetos de la clase puede instanciar objetos
• Para crear una única instancia una clase (singleton) se usa el addition CREATE PRIVATE
con el atributo FINAL.
• Friends -> el concepto de clases amigas (friends) no permite acceder a los atributos privados
o protegidos de una clase que nos provee de “amistad”. Esta “amistad” es unilateral, una
clase a la cual le brindo amigad puede acceder a mis atributos, pero yo no puedo acceder a
los de ella. Existe herencia de amistad solo para la clase que la recibe, la que brinda amistad
no pasa esta a sus subclases.
38
• Clases persistentes -> Las clases de persistencia facilitan el manejo de objetos con bases de
dato relacionales. Para crear una clase persistente es necesario crearla desde el diccionario
del tipo PERSISTENT CLASS. Por cada clase de persistencia que se crea también se crean 2
clases que son las encargadas del servicio. La primera clase tiene el nombre de ACTOR o
AGENTE que es la encargada de manejar el objeto. La segunda es “amiga” de la primera y
tiene todos los métodos creados por el sistema para el servicio de persistencia (esta clase no
puede ser modificada). La clase actor tiene el atributo CREATE PRIVATE, por lo tanto
existe un solo actor por clase.
Capitulo 13
Excepciones
• Una excepción es una situación que se suscita dentro de un programa en ejecución. Las
excepciones pueden ser errores o situaciones que deben ser controladas antes de seguir con
el curso normal del programa. Estas excepciones pueden ser lanzadas por el runtime del
sistema o por el usuario con la sentencia RAISEN EXCEPTION.
• La sentencia para atrapar excepciones son, dentro del bloque TRY-ENDTRY se coloca el
codigo al cual queremos monitoriar, las sentencias CATCH contienen el codigo para salvar
la excepcion que ocurrio, se pueden poner tantas sentencias CATCH como excepciones
puedan ocurrir.
Aunque las excepciones responden a un árbol de excepciones no existe herencia entre ellas.
para trapear el error debe estar declarado explícitamente de lo contrario no se trapeara el
error y el programa hara un DUMP. En el caso de que el error se halla producido en una
función y el error no estuviera contemplado dentro de esta, el manejo de la excepción se
transporta un nivel para arriba, al llegar a nivel de programa si no se maneja producirá un
error de runtime.
El bloque CLEANUP se ejecutara siempre que se produzca una excepcion, cualquiera que
fuera esta (siempre y cuando este contemplada).
Sintaxis:
TRY.
...
CATCH <exception>.
...
CATCH <exception>.
...
CATCH <exception>.
...
ENDTRY.
39
• Todas las clases de excepciones heredan de la clase cx_root los mensajes
START-OF-SELECTION.
TRY.
resultado = pa_int1 / pa_int2.
La sentencia MESSAGE <string> TYPE <type> nos permite mostrar cualquier cadena de
caracteres por pantalla como mensaje.
• Las excepciones del usuario se crean en el diccionario como una clase tipo EXCEPTION
CLASS, debe depender de alguna de las clases antes nombradas (no de cx_root).
Para utilizar una excepcion en un metodo es necesario declararlo en la firma del metodo con
la palabra clave RAISING <excepcion_name> para que este metodo puede tirar excepciones
para arriba. Es posible pasar parámetros a una excepción, se deben declarar el o los atributos
en la clase. Para que se puedan insertar en el texto explicativo del error el atributo debe esta
encerrado entre “&”. Es posible indicar mas de un texto explicativo y poder seleccionarlo en
tiempo de ejecución a través del atributo TEXTID, se le pasa el valor del respectivo texto en
el OTR (verlo en atributos del parámetro en la columna initial value).
RAISE EXCEPTION TYPE cx_sy_zerodivide.
En la capa superior debera esta el codigo monitoriado por todos los exception que el metodo
puede tirar.
TRY.
PERFORM division.
CATCH zcx_excepciones1 INTO r_exc.
text = r_exc->get_text( ).
MESSAGE text TYPE 'I'.
CATCH cx_sy_zerodivide INTO r_exc.
40
text = r_exc->get_text( ).
MESSAGE text TYPE 'I'.
ENDTRY.
Las clases de excepciones nos proporcionan un texto explicativo del error y en que línea
ocurrió, La clase cx_root nos proveer de métodos para esto. Al cachear la excepción la
casteamos a un objeto de la clase cx_root y con le método get_text nos trae el texto de la
excepción.
TRY.
PERFORM division.
CATCH cx_sy_zerodivide INTO r_exc.
text = r_exc->get_text( ).
MESSAGE text TYPE 'I'.
ENDTRY.
Capitulo 14
Dynamic Programming
Declaración
FIELD-SYMBOLS <fs> TYPE [<type>|ANY].
Asignación
ASSIGN <data> TO <fs>
Desasignación
UNASSIGN <fs>
Asignado?
<fs> IS ASSIGNED
Utilizando el addition CASTING es posible quitar las restricciones del objeto de datos
original.
• ABAP nos permite ejecutar sentencias con parámetros ingresados dinámicamente, estos
parámetros deben ser cadenas de texto. En el caso de la sentencia SUBMIT este debe estar
entre paréntesis.
• Las llamadas a métodos también es posible realizarlas dinámicamente no solo el nombre del
método sino la tabla de parámetros y excepciones que este tiene.
Las estructuras abap_parmbind_tab y abap_excpbind_tab del type pool abap son utilizadas
para pasar estos datos
Estructura abap_parmbind_tab
NAME -> nombre del parámetro formal
KIND -> tipo de parámetro (importing, exporting, changing, receiving)
VALUE -> valor de la referencia al data object que contiene el valor. Para
esto se utiliza la sentencia GET REFERENCE
ptab_line-name = 'P1'.
ptab_line-kind = CL_ABAP_OBJECTDESCR=>EXPORTING.
GET REFERENCE OF number INTO ptab_line-value.
Estructura abap_excpbind_tab
NAME -> nombre de la excepción
VALUE -> valor del sy-subrc ( type i)
CL_ABAP_OBJECTDESCR -> clase que contiene todos los tipos de datos de abap.
clase = 'C1'.
CREATE OBJECT r TYPE (clase).
42
Excepcion CX_SY_CREATE_OBJECT_ERROR -> excepción cuando la clase no existe.
• Data reference -> Son variables que contienen referencias a variables, son punteros a datos.
Estos punteros pueden ser a datos elementales o estructuras específicos (TYPE REF TO
<type>) o a tipos de datos genérico (TYPE REF TO DATA).
El contenido de la variable de referencia contiene una dirección de memoria no como el
field-symbol que automáticamente se referencia al valor apuntado. Si se modifica el
contenido de la variable de referencia se modificara donde apunta esta (la dirección de
memoria).
Cuando se define una variable de referencia esta es inicializada con un puntero nulo.
Para asignarle una referencia a una variable de referencia primero es necesario crear el data
object y usar la sentencia GET REFERENCE OF <data_obj> INTO <data_ref>.
• CREATE DATA -> Crea una estructura o dato en forma dinámica, para esto es necesario
declarar un data object referencia al tipo de dato que queremos crear, en el caso de que no
queremos tipar la referencia se pone TYPE DATA.
Para poder acceder al dato dentro de la variable de referencia se usa el operador “->*” que
significa “contenido” en el caso de que el contenido fuera una estructura se maneja igual que
una work area.
<FS2>-A = 45.
WRITE <FS2>-A.
• DESCRIBE FIELDS DESCRIBE TABLE -> Se utiliza para saber la descripción de una
tabla interna o un campo.
DATA:
dsc_ref TYPE REF TO cl_abap_structdescr,
dsr_ref ?= cl_abap_structdescr=>
describe_by_data( wa ).
44
2. completar el campo delivery class y el campo data browser.. y la descripcion de la tabla
3. En la solapa fields se ingresan los datos, los nombres de los campos y a que data element
pertenecen, es posible crear campos que no esten declarados en el diccionario, es mejor declararlos,
para esto en la columna data element del campo que queremos declarar escribimos el nombre del
data element y hacemos doble clik
45
4. nos llevara a la siguiente pantalla donde deberemos poner la descripcion y el dominio del data
element, para crear un dominio escribimos el nombre y hacemos doble clik sobre este
5. Nos llevara a la siguiente pantalla para crear un dominio completamos los campos técnicos y
guardamos los campos y activamos el dominio
46
6. guardamos el data element y lo activamos
7. guardamos la tabla
8. para activar la tabla es necesario setear el aspecto tecnico
47
2. en la barra de herramientas EDIT -> INCLUDE -> INSERT
nos pedirá el nombre de la estructura
Creación de índices
1. En la transacción se11
2. Ingresar a la tabla que queremos
3. Presionar el botón index
4. Lo llevara a la siguiente pantalla completar al pie los campos por los que quiero que la tabla
este indexada y completo la técnica de indexación.
48
5. Guardamos la tabla y la activamos para crear el índice.
Capitulo 2
Abap Dictionary
• Type elements -> Domains -> Descripción técnica del elemento, consta
del tipo de dato, largo
- > Data elements - > Descripción semántica del dominio de
datos en un cierto entorno de negocios
- > Structures - > conjunto de data elements o estructuras
- > Tipos tablas - > conjunto de líneas de una estructura o
data element.
49
Db objects -> Tablas
-> Vistas
-> Índices
• Db objects -> Para crear una tabla en la DB es necesario crearla primero en el diccionario y activar
la nueva tabla y ese cambio se crea automáticamente en la DB (físicamente).
Los índices también se crean en el diccionario como las tablas.
• Types elements -> describe la definición de los posibles tipos que puede tener un data element.
• Dominio -> Describe el atributo técnico del datos (tipo de dato, decimales, longitud, etc.).
Data element -> Describe la información semántica del dato (titulo, etc.).
Capitulo 3
Tables in ABAP dictionary
• Todas las tablas creadas por el usuario son tablas transparentes. Las tablas transparentes tienen el
mismo nombre en el diccionario que en la DB, igual que el nombre de los campos, el orden de los
campos pueden variar.
• Para crear una elemento en el diccionario de datos esta la transacción SE11, seleccionamos el tipo
de elemento queremos crear y presionamos CREATE
• Los campos que son de tipo de datos cantidad (QUAN) se debe crear otro campo con la descripción
de la unidad que representa esa unidad, y estos 2 campos deben relacionarse. La relación se realiza
sobre la tabla en la solapa de quantity sobre el campo que queremos relacionar escribimos la tabla y
el nombre del campo del otro. Se puede relacionar con este tipo de relación campos de distintas
tablas.
50
• Se puede crear estructuras independientes y estas incluirlas en una tabla, se realiza esto para
reutilizar conjunto de componentes que se repiten en varias tablas. Físicamente en la DB se crean
los campos en la tabla. Para agregar una estructura en una tabla, editamos la misma y en la barra de
herramientas EDIT -> INCLUDES - > INSERT
• Buffering -> Cuando se crea una tabla se debe ingresar el tamaño esperado de la tabla para que la
DB cuando llegue a su máximo de registros esperados, esta pueda asignarle mas espacio
dinámicamente.
• Looging -> Se puede logear los cambios en una tabla o campos de una tabla.
La variable de sistema REC/CLIENT activa en el sistema el logeo, si una tabla tiene log
pero en el sistema no esta activo no logea nada y al revés pasa lo mismo, si en el sistema esta
activo y la tabla no tiene log no logea.
Posibles valores
REC/CLIENT -> ALL -> logeo para todos los clientes
REC/CLIENT -> 000 -> logeo para el cliente especificado
REC/CLIENT -> OFF -> No hay logeo
• Para ver el log de una tabla se utiliza la transacción SCU3.
• Cuando se crea una tabla es necesario setear los atributos técnicos, botón
TECHINICAL SETTINGS y setear el data class, size category, buffering technique.
• El programa RSRSCAN1 nos permite buscar dentro de la tabla TRDIR coddigo fuente.
Capitulo 4
Performance during table access
• Un índice es una copia física de la tabla con menos o los mismos campos y ordenada por una clave
• Index -> Primario -> Es la tabla principal y esta ordenado por los campos
clave
-> Secundario -> Se crean desde el diccionario y se pueden elegir
cualquier cantidad de campo
• Las modificaciones en la tabla principal dispara actualizaciones en todos los índices que contiene el
campo modificado.
51
• La selección de índices la realiza la DB pero se puede ayudar a la DB en el campo WHERE indicar
los campos claves en el orden declarados en la tabla.
• Buffering -> Las técnicas de buffering consisten mantener las tablas que mas s usan cargadas en el
app server en el buffer local para evitar el acceso a la DB y son leídos de ahí para nuevas consultas.
Cuando el PGM intenta leer una tabla el app server verifica si esta en el buffer, si se encuentra le
devuelve los datos al programa, si no esta el en buffer accede a la DB. Los datos almacenados en el
buffer son removidos para dar lugar a otros, los datos a remover se seleccionan por la asiduidad con
la que se acceden. La sentencia $TAB ejecutada en la línea de comando actualiza todo el buffer del
app server.
Técnicas -> Full - > se lleva toda la tabla aunque leamos 1 registro
-> Genérica -> se lleva todos los registros por una clave
definida
-> Single -> se lleva solo los registros leídos, usar select
con el addition SINGLE sino se invalida la técnica de buffering.
Cuando se intenta acceder a un registro que no existe se marca como no
existente y cuando se intente acceder otra vez con la misma clave se evita el
acceso a la DB.
• La sincronización de buffer obliga a los distintos app server a sincronizar sus buffer si encuentra que
tiene tablas en su memoria que fueron modificados y están en una tabla de sincronización, la
sincronización se ejecuta cada cierto tiempo seteado por el sistema (rdisp/bufreftime entre 60s y
3600s).
• Cuando creas un índice a una tabla dependiente de mandante hay que agregar el mandante en el
índice OBLIGATORIAMENTE.
Capitulo 5
Consistency through input check
• Valores fijos -> Un dominio de datos puede tener valores fijos predefinidos en su declaración, estos
valores fijos actuaran como chequeos de datos en el momento del ingreso, también aporta la función
F4. Estos valores fijos son guardados en el dominio.
• Valores de tabla -> los valores de tabla nos permiten generar un rango de valores para un dominio,
estos valores deben estar en una tabla. Una tabla de valores se convierte en una check table en el
momento en que se declara una clave foránea.
• Para crear una clave foránea es necesario que los dominios de estos 2 campos sean iguales y no el
elemento de datos.
• Los campos de una tabla pueden estar relacionadas con otras tablas o un conjunto de valores fijos
determinados en el dominio del campos
• F4 -> tabla de posibles valores de ese campo, se declara en el dominio del campos como un rango
de valores fijos o una tabla maestra de datos
52
• Forign key -> relaciona los campos de una tabla con otra en el momento de realizar las inserción en
el campo. Nos asegura la consistencia de datos.
• Tablas de text -> las tablas de texto no realizan validaciones sino se usan para relacionar una tabla
maestra con una de texto, el ejemplo mas común es las tablas de texto de lenguaje.
• Para crear una tabla de valores para un dominio ir a la solapa VALUE RANGE dentro del dominio e
ingresar los valores, estos pueden ser valores simple, rangos de valores o tablas de valores
• Para ver en la tabla las claves foránea esta la solapa entry help/check y en la columna check estará la
tabla con la que el campo esta relacionado.
• La particularidad de las tablas de texto son que tienen la misma clave que la tabla original pero con
el agregado del campo del lenguaje (LANG). Estas tablas guardan generalmente descripciones que
se muestran en múltiples idiomas. Solo una tabla de texto se puede crear para una tabla.
Capitulo 6
Dependencies of ABAP dictionary objects
• El diccionario trabaja con 2 versiones del objeto diccionario una inactiva y otra activa que es la que
usa el sistema.
• Objetos dependientes -> objetos que dependen de otros por ejemplo un campo depende de un
elementos de dato y este a su vez de un dominio. Toda modificación en el diccionario afecta a todos
los objetos relacionados. Si una tabla contiene un campo al cual modificamos su largo o tipo al
activar el diccionario se modificara esta.
• Para buscar objetos en el diccionario de datos entrar a través del se80 y en la solapa REPOSITORY
INFORMATION SYSTEM y buscas la carpeta ABAP DICTIONARY.
Capitulo 7
Changes to Database tables
Tipos de cambios –> Delete -> borra la tabla y la vuelve a crear si la tabla no
tiene datos
-> Change -> Se altera la tabla, los datos se mantienen y los
índices se vuelven a crear
53
-> Convert -> cambia la estructura de los campos
La modalidad para realizar los cambios depende si la tabla tiene datos o no:
• Append -> Se usa para agregar estructuras a una tabla sin modificar el standart de SAP, las
estructuras append o se pueden agregar en mas de una tabla. Parados en la tabla barra de
herramientas GOTO -> APPEND STRUCTURE y ahí creo la estructura normalmente, se puede
asignarle claves foráneas en la estructura y también uno de los campos de la estructura pueden
formar parte de la clave de la tabla.
Capitulo 8
Views
• Es una estructura que combina campo de distintas tablas, las tablas se relacionan a través de un
INNER JOIN por sus claves foráneas.
54
• En la declaración de la vista se definen los campos que deseo que aparezcan en la tabla así también
como los registros que cumplen una condición especifica (selección de opción), esta condición no
puede ser establecida para campos enteros.
• Las vistas se utilizan igual como si fuera una única tabla transparente.
• En reemplazo de una vista se puede utilizar la sentencia select JOIN y simular una vista local al
programa.
• Se pueden incluir todos los campos de una tabla y también agregar estructuras. Las vistas permiten
las mismas propiedades técnicas (Buffer) que una tabla normal.
• Existen también vistas de mantenimiento en donde se puede crear una ABM de la vista y la DB se
encarga de la lógica de inserción en la tabla. Solo se pueden crear vistas de mantenimientos a vistas
que contienen una tabla únicamente. La transacción SE13 nos permite modificar los seteos técnicos
de las vistas
• Las vistas de mantenimiento son un tipo de vista que se crea para mantener las vistas, nos permite
realizar altas bajas y modificaciones en la tabla original. Estas modificaciones se puede hacer solo
en vistas de una sola tabla.
• Cuando se genera una vista de mantenimiento es necesario generar la pantalla de dialogo para poder
hacer el mantenimiento. Para generar el dialogo en necesario ir a GOTO -> GENERATE
MANTENANCE TABLE y completar los campos que nos piden.
• Append Includes -> Son estructuras formadas por campos de las tablas que componen la vista y que
nos permiten agregar estos a la vista sin modificarla. Cuando se especifican los campos de una tabla
en una vista se puede poner en el nombre del campo “*” que indica que todos los campos de esa
tabla serán incluidos. En el caso de enumerar los campos de una tabla el agregado de campos en la
tabla original no se tomaran en cuenta, las append includes nos permite realizar esta ampliación a la
vista sin tener que modificarla.
Capitulo 9
Search help
• En search help es una ayuda de búsqueda para el usuario, existen varios tipo de search help standart
de SAP como las tablas de valores o los rangos de valores especificados en el data element.
55
• Estos search help se pueden configurar acotando búsquedas en el search help desde en diccionario
esto se llama método de selección
• Método de selección -> realiza la búsqueda en una tabla según los parámetros de selección que
asignemos. Al método es necesario pasarle una tabla o una vista para la búsqueda, el sistema tiene
la restricción de una sola tabla.
• Todo search help tiene una interfaz que le permite al usuario ingresar parámetros de búsqueda y
devolución.
Search help -> parámetros - > Import -> parámetros con los que se
hará la selección
-> Export -> parámetros que se traerán de la
ayuda y se completaran en la
pantalla de selección
• Si un campo de una pantalla tiene 2 o mas search help cuando presionamos F4 no se sabe cual usar,
entonces se creo una jerarquía de search help (Pag 9-11 – ver jerarquía).
• Un search help colectivo es un conjunto de search help elementales, se van agregando y se pueden
tener muchas búsquedas para el mismo campo. Deben tener la misma interfaz para poder reutilizar
la misma búsqueda.
56
• Un search help elemental puede estar en más de un search help colectivo, un search help colectivo
puede estar incluido en otro search help colectivo.
• Para atachar un search help a una tabla ir a EXTRAS -> SEARCH HELP FOR TABLES, ingresar
el nombre del search help que creamos y relacionar los campos de input del search help con los de
la tabla o pantalla.
• Si tenemos una check table en un campo de una tabla y queremos que en este crear un search help
hay que hacerlo en la tabla check.
• Para borrar un search help elemental en uno colectivo y el search help colectivo es standard de SAP
y no podemos modificarlo hay que crear una estructura APPEND de search help y agregar el search
help que queremos eliminar y lo marcamos como HIDE de esta manera en el search help colectivo
no aparece. (forma de modificar el standard sin modificarlo)
Capitulo 13
Reporting
• Las pantallas de reportes simples constan de 2 headers, que son la descripción del programa
mas una línea que lo separa del listado, estos 2 líneas se mantiene en la cabecera del listado
cuando scroleamos el mismo.
• REPORT -> Programa ejecutable que nos permite realizar listados básicos por pantalla, tiene
muchas addtion que nos permite configurar el formato del reporte.
• Formato de la sentencia WRITE -> la sentencia write nos permite formatear la salida de los
datos en el listado. También es posible dibujar iconos en la pantalla, líneas, etc,
• Un listado básico se compone de un encabezado que contiene el nombre del programa, Este
encabezado se puede cambiar desde el editor, tiene como máximo 4 renglones.
• La sentencia SET LEFT SCROLL-BOUNDARY nos permite mantener fijas columnas en un listado
básico al momento de desplazarse lateralmente en un listado.
57
• Elementos de texto -> los elementos de texto nos permite imprimir un texto en distintos
idiomas.
Se imprimen de la siguiente manera
WRITE TEXT-xxx -> busca el elemento de texto
y lo imprime en la pantalla, si no lo encuentra imprime
blanco
‘LITERAL’(xxx) -> busca el elemento de text xxx
y lo imprime en la pantalla, si no lo encuentra imprime
el literal que lo acompaña.
Capitulo 14
Selection Screen
• Una pantalla de selección es una interfaz entre el usuario y el programa, existen 3 tipos de
pantallas
Pantallas de selección de una DB lógica
Pantalla de selección standard de SAP (screen 1000)
Creadas por el usuario
SELECTION-SCREEN BEGIN OF SCREEN 1100.
...
SELECTION-SCREEN END OF SCREEN 1100.
Se ejecuta así
CALL SELECTION-SCREEN 1100
Cuando se ejecuta esta sentencia la pantalla de selección se muestra en toda la pantalla. Para
mostrar una pantalla en forma de ventanita se agrega los addition que indican en donde
arranca la pantalla y donde termina (coordenadas). Antes de mostrar la pantalla se ejecuta el
evento INITIALIZATION donde se puede discriminar el número de pantalla que se mostrara
con la variable de sistema SY-DYNNR.
Parameters
58
Normal -> MEMORY ID -> al asignarle un valor
SAP nos trae de la memoria el valor del parameter id
-> VALUE CHECK -> nos permite que el
diccionario valide los datos ingresados
-> OBLIGATORY -> nos obliga a ingresar
valores
-> As checkbox -> tilde (‘ ’ o ‘X’)
-> RadioButton Group <grp> -> son excluyentes
Select-option
• Se puede poner mas de un parámetro en una línea, debe estar el en bloque. La particularidad
de esta sentencia es que los labels de los objetos de pantalla se pueden, es necesario
ingresarlos a mano con la sentencia SELECTION-SCREEN COMMENT.
SELECTION-SCREEN BEGIN OF LINE.
• La sentencia SELECTION-SCREEN BEGIN OF SCREEN nos permite crear una selection screen
aparte de la que nos da SAP para ingresar datos extras. Se pueden crear select options y
parameters, se invoca con la sentencia CALL SELECTION-SCREEN xxx
• El evento AT SELECTION-SCREEN OUTPUT se ejecuta cada ves que se carga una pantalla
o el usuario presiona enter. Se ejecuta justo antes de mostrar la pantalla de selección.
59
La sentencia LOOP AT SCREEN nos permite modificar los atributos de los
elementos en la pantalla en forma dinámica. La sentencia MODIFY SCREEN aplica
los cambios realizados en los objetos de la pantalla.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDLOOP.
• Variantes -> Una variante nos permite guardar el contenido de los campos de una
pantalla, tiene sentido esto cuando en una pantalla generalmente se completan los
campos con la misma información. Las variantes son únicas y se almacenan en cada
programa y no pueden ser compartidas con otros. Se pueden crear más de una
variante para cada pantalla, y variantes globales a todas las pantallas del programa.
Las variantes no solo se usan para completar pantallas de programas interactivos se
utiliza para procesamiento batch.
• La tabla TVARV contiene la estructura de un select option, nos permite armar esta
tabla con el criterio de selección. Así facilitar la búsqueda en la DB.
Capitulo 15
Logical Database.
• La sentencia GET tiene disponible los campos que tiene la DB lógica de acuerdo a la
secuencia de las claves primarias de las tablas de la DB. Incorpora chequeos de seguridad
cuando se realiza el acceso.
• Se declara la Db lógica que va a usar el programa de reporte en los atributos del programa,
en la parte de declaración se declaran los nodos de la DB lógica que se van a usar, cuando
queremos leer datos un nodo usamos la sentencia GET <node_name>. Es posible declarar
una db lógica dinámicamente en un programa con la función LDB_PROCESS.
60
-> Table (Type T) -> Nombre de la tabla transparente
-> DDIC (Type S) -> El nodo es una estructura del DIC
-> Groups (Type C) -> El nodo esta definido en un type group
-> Dinamic -> El nodo no tiene estructura fija
Capitulo 16
Data Retrieval
• Se puede ejecutar sentencias de SQL nativo, debe estar encerrado dentro de las sentencias
EXEC SQL... ENDEXEC.
FORM WRITE.
IF f1 > 0.
WRITE: / f1, f2.
Else.
EXIT FROM SQL.
Endif.
ENDFORM. "WRITE:
Las sentencias SQL nativo responden a la DB en la que se este ejecutando, no todas tienen la
misma sintaxis, El nombre de los campos y tabla van en mayúscula. Los datos de la a la
función y de la función se pasan por variables de tipo host y van precedidas dentro de la
sentencia con dos puntos (:).
Cuando la sentencia de error levanta la excepción cx_sy_native_sql_error. Se pueden ejecutar
todas las sentencias SQL estándar mas las especificas que nos provea la DB.
En el caso de que la selección de un conjunto de líneas como respuesta se utiliza el addition
PERFORMING <form_name>. El sistema ejecuta una iteración por cada línea traída ejecutando
la función. Para cortar la iteración se usa la sentencia EXIT FROM SQL función.
• Funciones de agregado a sentencias OPEN SQL
select count(*) from zpersonal into count.
select min( sueldo ) from zper_suel into count.
61
select max( sueldo ) from zper_suel into count.
select avg( sueldo ) from zper_suel into count.
• DataBase View -> una vista es un join de 2 o mas tablas con una estructura particular que se
crea en el diccionario y se puede usar como una tabla transparente, el JOIN se resuelve en
tiempo de ejecución y no ocupa espacio en la DB. Una vista realiza in INNER JOIN para
armar la estructura. La sentencia select para una vista es igual a la de una tabla, es
transparente para abap que tipo de tabla maneja.
• JOIN -> Nos permite relacionar 2 o mas tablas por el contenido de un campo.
• FOR ALL ENTRIES IN… WHERE… -> Busca en una tabla por cada entrada de la otra
tabla sin importar que sean tablas internas o transparentes.
IMPORTANTE: chequear que la tabla por la que queremos buscar tenga registros y
Eliminar los registros duplicados.
Para saber cuantas entradas tiene una tabla, nos devuelve la cantidad de entradas.
DESCRIBE TABLE <itab> LINES <contador>
Para borrar registros duplicados
DELETE ADJACENT DUPLICATES FROM <itab>
• Sentencias SELECT anidadas
TRY.
SELECT * FROM zpersonal
INTO CORRESPONDING FIELDS OF wa_per.
SELECT * FROM zsueldos
INTO CORRESPONDING FIELDS OF wa_suel
WHERE dni = wa_per-dni.
WRITE : / wa_per-nombre,
wa_per-apellido,
wa_suel-sueldo.
ENDSELECT.
ENDSELECT.
CATCH cx_sy_open_sql_db.
ENDTRY.
62
Capitulo 17
Data formatting and control level processing
• La sentencia APPEND inserta registros al final de una tabla, la variable de sistema SY-
TABIX guarda la posición en la tabla donde se realizo la inserción. No se puede realizar esta
operación en tablas del tipo HASHED.
• La sentencia COLLECT ( pag 268 L.1) se utilice para crear una única tabla de registros,
estos registros tienen la particularidad que están compuestos por la clave y el resto de los
campos deben ser numéricos. Cuando se inserta un registro se busca en la tabla, si esta los
campos no clave (numéricos) se suma y si el registro no esta este se agrega a la tabla interna.
• SORT -> Ordena una tabla por los campos que necesitamos ascendentes o descendentes, con
el addition BY <f1>…<f2> se especifican los campos que queremos (para tablas Standard o
hashed). No es posible cambiar el ordenamiento de una tabla SORTED.
Estas sentencias no permiten realizar cortes de control para realizar listados básicos.
FIRST y LAST -> Se ejecuta una sola vez en el corte de control nos permite mostrar un
titulo o pie de pagina.
NEW y END OF -> con esta sentencia realizamos el corte de control pos los campo. La
iteración se realiza por una “estructura” que empieza el campo de mas izquierda hasta el
campo que ponemos en la sentencia. Si los campos de la tabla que queremos iterar no tiene
el orden que necesitamos es conveniente crear una estructura con los mismos campos y el
orden que necesitamos.
Por lo general se ordena la estructura por los campos que queremos iterar.
Los campos que están fuera de las sentencias de corte de control se mostraran como una
iteración normal.
La sentencia SUM totaliza todos los campos numericos dentro del bloque.
TYPES: BEGIN OF s,
cityfrom TYPE s_from_cit,
cityto TYPE s_to_city,
63
SORT it_spfli BY cityfrom cityto.
AT NEW cityfrom.
WRITE: / 'Aeropuerto de salida', wa_spfli-cityfrom.
ENDAT.
AT NEW cityto.
WRITE: / 'Aeropuerto de llegada', wa_spfli-cityto.
ENDAT.
AT END OF cityfrom.
ULINE.
ENDAT.
AT END OF cityto.
ULINE.
ENDAT.
ENDLOOP.
• Extract dataset -> Consiste en una secuencia de registros de una estructura predefinida, sin
embargo esta estructura no es igual para todos los registros. En un extract dataset se pueden
guardar registros de distinto largo. Es necesario definir la estructura de cada dataset en el
programa, esta puede ser definida dinámicamente. A diferencia de una tabla interna esta se
almacena temporalmente en el sistema operativo en ves de la memoria.
La única manera de acceder a los datos es recorrer el dataset con la sentencia LOOP…
ENDLOOP.
Es posible ordenar el dataset por un campo o por el header.
Definición
FIELD-GROUPS: header, order, product, date_first.
FIELD-GROUPS: header.
-> define un grupo especial el cual compartirá cada uno de los dataset
ENDLOOP.
Capitulo 18
Saving list and background processing
• SUBMIT -> llamada de un programa hacia otro, se puede llamar un programa que tiene una
salida y con la cláusula TO SAP-SPOOL y envía esta salida al spool.
• JOB -> conjunto de pasos, cada paso es un programa. Se puede crear un job dinámicamente
en un programa las funciones son ‘JOB_OPEN’, ‘JOB_SUBMIT’ y ‘JOB_CLOSE’
Capitulo 19
Interactive list
65
START-OF-SELECTION
GET
END-OF-SELECTION
TOP-OF-PAGE
END-OF-PAGE
AT LINE-SELECTION
AT USER-COMMAND
TOP-OF-PAGE DURING AT LINE-SELECTION
• Las listas de detalle pueden tener un nivel de hasta 20 listas de detalle. El nivel de detalle se
guarda en una variable sy-lsind.
Las listas de detalle solo se crean cuando se realice un write en el programa.
• Toda actividad en la pantalla (doble-click, F2 sobre una linea, un boton en la pantalla, etc)
ejecuta el evento AT LINE-SELECTION con el codigo de accion PICK contenido en la
variable de sistema SY-UCOMM.
• SET TITLEBAR -> nos permite poner un titulo a nuestro listado. Se le puede pasar
parámetros con el addition WITH…
Este titulo no puede tener más de 70 caracteres con los parámetros.
• GET CURSOR FIELDS -> nos trae el valor y el campo en donde se realizo la selección de
una línea.
WRITE...
Capitulo 20
SAP Grid Control
• Un control es un objeto que se muestra en el frontend desde el frontend. Estos objetos deben
estar instalados en la maquina del usuario y el encargado de administrarlos es el SAP_GUI.
• Para mostrar datos en un gris control se deben pasar los datos en forma de una tabla, además
de la tabla con los datos, se debe pasar una estructura igual a la tabla de datos que
proporcionara el orden de los campos en la grilla. Generalmente esta tabla esta activa en el
66
diccionario lo que proporcionara datos técnicos de los campo. En el caso de que se usara una
estructura interna del programa se debe especificar estos datos a través una estructura de
catalogo. Se pueden mezclar tablas del diccionario con campos internos del programa.
• Luego de crear el objeto contenedor y asignarle un objeto grilla se deben mostrar los datos.
El objeto grilla dispone del método SET_TABLE_FOR_FIRST_DISPLAY que crear las
grilla en la pantalla y la llena de datos.
• Para agregar campos a una grilla que no estén en la estructura se utiliza el catalogo, Aquí se
especifican los campos que serán agregados con sus respectivas especificaciones técnicas.
Cada línea del catalogo responde a una columna en la grilla.
El catalogo es una tabla del tipo LVC_T_FCAT a la cual se le agregaran registros que serán
mostrados en la grilla. Esta tabla será pasada por parámetro al método
SET_TABLE_FOR_FIRST_DISPLAY (parámetro it_fieldcatalog)
clear wa_fieldcat.
wa_fieldcat-fieldname = 'SUELDO'.
wa_fieldcat-col_pos = 10.
wa_fieldcat-coltext = 'SUELDO'.
APPEND wa_fieldcat TO gt_fieldcat.
Capitulo 2
SAP Programing Model
• Organización de código -> Para organizar el código de un programa se utilizan los programas de
tipo INCLUDE. La separación de código en bloques no afecta el funcionamiento del programa.
En momento de compilar los programas internamente agrupa todo.
• Al crear el programa se crean varios INCLUDEs para separar en bloques el código que va en la
pantalla, la declaración de variables y eventos.
Capitulo 3
Introduction to screen programming
• La lógica de una screen esta separada en 2 bloques de procesamiento PBO (Process Before
Output) y PAI (Process After Input).
68
• Una screen es un contenedor de elementos de pantalla y un flujo de lógica de programa. Una
screen tiene 4 componentes
-> Screen mask
-> Screen attributes
-> Element list
-> Flujo de lógica de programa
• Es aconsejable crear la screen desde el object navigator ya que esta debe estar asociada a un
programa.
Primero -> Completar los atributos del programa
Descripción de la pantalla
Tipo de pantalla
Pantalla Siguiente
Segundo -> Crear el Layout de la pantalla en el screen
painter
Incorporar los elementos de pantalla a la
screen.
Tercero -> En la lista de elementos estarán los elementos de
ingresados en la pantalla, es necesario crear el
elemento OK_CODE el cual nos permitirá
comunicar el programa con la pantalla.
-> Debemos crear en el programa la variable
OK_CODE del tipo SY-UCOMM.
Cuarto -> Crear los módulos en el PBO y PAI
• Las pantallas se nombran con números, los números mayores a 9000 están reservadas para
SAP, las pantallas 1000 a 1010 están reservadas para las pantallas de mantenimiento del
diccionario ABAP.
• Los campos de una pantalla pueden venir del diccionario (recomendado) o de datos creados
internamente en el programa, los campos adoptaran la forma y tipo de los datos de origen. Al
cambiar el tipo de dato de un data object se modificara automáticamente el campo, se
recomienda crear los campos a partir de elementos del diccionario para mantener coherencia
de los datos, los cambio de tipos de datos el diccionario modificaran a todos los programas y
pantallas que los utilizan.
• Para conectar un programa con una pantalla se utilizan estructuras y data object, estos deben
estar definidos como tipos de datos del diccionario y tener el mismo nombre en los 2 lados
• La sentencia TABLES en el programa abap se usa (no únicamente) para declarar una
estructura para interfacear los datos entre el programa y la screen
69
• Todos los atributos de elementos de una screen pueden ser modificados en momento de
ejecución, el la lógica de la screen se tiene acceso a la tabla interna SCREEN (line type
screen) donde se encuentran todos los elementos y sus atributos. Estas modificaciones son
temporales y corresponden a la corrida del programa, los atributos de los objetos de la
pantalla vuelven a la normalidad cuando la ejecución del programa termina.
• Los elementos de una pantalla se pueden agregar a un grupo para poder realizar
modificaciones masivas. Solo se pueden armar 4 grupos de elementos de pantalla
• A los elementos se los pueden acceder por su nombre o por el grupo a cual pertenecen (ver
página 3-21 estructura de la tabla). Se realiza un loop a la tabla de la siguiente manera
LOOP AT SCREEN.
IF SCREEN-NAME = ‘CAMPO1’.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF
IF SCREEN-GROUP1 = ‘AAA’.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF
ENDLOOP.
• Para llamar una pantalla en forma modal se usa los addition a ala sentencia CALL SCREEN
• La sentencia SET CURSOR FIELD nos permite pararnos en el campo que queremos con
solo indicar el nombre del mismo.
• SET TITLEBAR <tit_name> WITH &1... &9 -> Setea el titulo para la screen en forma
dinámica, el titulo es un objeto de la screen y debe ser creado (no es un string), hacer doble
click sobre el nombre del titulo y crearlo. Se puede pasarle variables para incluir en el titulo
del programa, hasta 9 parámetros, el titulo puede tener hasta 20 caracteres. Es posible pasar
variables a un titulo, cuando se genera el titulo el espacio para las variables se reserva con la
sentencia &x.
• SET PF-STATUS -> nos permite utilizar los botones de la pantalla, como la barra de titulo
poner un nombre y hacer doble clik sobre esta, nos llevara a la pantalla donde estarán todas
los botones a utilizar, al ponerle un código al botón que queremos utilizar solo hace falta
ponerle un nombre y listo, este nombre estará asociado al botón. El nombre del botón
pulsado viajara en la variable OK_CODE hacia el PBO.
• Técnicamente el status es una referencia a una barra de menú, teclas asignación y barra de
aplicaciones. Cada uno de los componentes pueden estar en más de un GUI STATUS. Cada
pantalla puede tener más de un status, pero no al mismo tiempo, este cambia dinámicamente.
Una barra de menú esta compuesta por menús individuales, un menú puede tener hasta 15
entradas. Una entrada puede ser una función, un separador u otro menú en cascada. La
cascada de menús puede ser hasta nivel 3.
Para crear una entrada en un menú se coloca en la parte izquierda el function key y su
descripción en la parte derecha que aparecerá en el menú. Para agregar un submenú se
coloca en la parte derecha el nombre del menú. Toda función en un menú debe ser activada
para que aparezca en el menú como seleccionable (no grisada).
Las teclas de asignación y la barra de aplicación son un subconjunto de las teclas de función.
Para poder usar una función en la barra de aplicaciones primero debe tener asignado un
fuction key.
Toda function key al ser presionado un botón, menú o tecla de funcion viaja al PAI en la
variable OK_CODE.
71
Para crear un componente (barra de menú, teclas asignación y barra de aplicaciones.) se debe
ir dentro del menú painter GOTO-> INTERFACES OBJECTS ahí tendremos todos los
componentes.
• Limpiar el data object OK_CODE en el PBO para evitar que tenga valores erróneos.
Conviene crear un modulo aparte para guardar todas las sentencias de inicialización.
CLEAR OK_CODE.
Capitulo 5
Screen elements for output
72
• Elemento de texto
-> Es un label que se puede colocar en la pantalla,
-> Para escribir un texto de varias palabra es necesario en vez de separarlos
por espacios se debe separar por un guión bajo (Separador de palabras ‘_’).
-> Se tiene muchas propiedades de diseño, asignarle iconos o ponerlo en un
grupo de elementos.
-> Para traducir los textos en distintos idiomas hay que hacerlo desde los
element list de la screen, no se hace desde el screen painter.
-> No se puede modificar el texto en tiempo de ejecución.
• STATUS ICONs
-> Son elementos gráficos de una pantalla, son campos de salida y se pueden
modificar en tiempo de ejecución, son iconos predefinidos, tienen un nombre y
atributos.
-> Al crear un status icon es necesario crear en el programa un data object
con el mismo nombre para linkearlos con la estructura icons-text, este data object
contendrá el nombre del icono a mostrar.
-> Para crear un icono se usa la función ICON CREATE a la cual se le pasa
el nombre y nos devuelve el icono que
-> Indicar el largo del icono mas el texto como atributo VIS LENGHT del
status icon (DEF LENGHT = 132).
• Group boxes
-> Son frame que se ponen el la pantalla para agrupar visualmente los
elementos.
-> Al marcar el atributo de OUTPUT FIELD se puede linkear el group box
con un data object, esto se puede usar para cambiar el titulo de este.
-> Cuando todos los elementos dentro de un group box están invisibles este se
pone invisible también.
• Input/Output Fields
-> Un campo de input le permite al usuario ingresar datos
-> Un campo de output muestra datos al usuario
->Los campos de entrada tienen consistencia de datos dependiendo del tipo
de dato que sea.
-> Si un campo esta relacionado con un dato del diccionario nos permite tener
consistencia de datos a través de foreign key o value set.
73
-> Los campos de output al volverlos invisibles se ocultan, los campos de
input vuelven invisible el contenido, muestran todo el contenido con asteriscos.
-> Para utilizar data object de un programa en una screen hay que definirlo
con las sentencias DATA y TABLES.
• FIELD -> Nos permite para un campo realizar una operación única, se usa para chequear que
los datos ingresados sean correctos en el PAI, en el caso de que halla un error se procesa
nuevamente la pantalla sin procesar el PBO, se bloquean los campos que no tienen error y el
cursor se para el campo con error. El mensaje de error o warning se muestra al pie de la
pantalla.
• Las validaciones se realizan por una sentencias MODULE donde se encontrara la lógica
ABAP para la validación. El agregado de la sentencia ON INPUT hace que se ejecute el
modulo cuando el contenido del campo cambia.
74
• El addition a la sentencia MODULE de ON REQUEST permite ejecutar el modulo si el
usuario ingresa un valor nuevo al campo.
• Un module con el addition AT EXIT-COMMAND nos permite saltear todos los chequeos
automáticos de los campo. Las function code que activan este tipo de modulo son los de tipo
de function key ‘E’. Solo se puede usar este addition una sola vez por programa. Si no se
termina el programa dentro de este module se ejecutaran inmediatamente después todos los
chequeo automáticos y el resto del PAI.
• Estructura de programa de dialogo
PBO
Modulo de status (primeras 3 líneas de la screen)
Modulo de campos (modificación de atributos de
los campos en la pantalla)
Modulo Clear_ok_code (limpiar el OK_CODE)
PAI
Modulo de exit (dependiente de la tecla que pulso si
es del tipo de function code ‘E’)
Chequeos de campos (chain .. endchain )->
Disparan módulos de chequeos
Modulo de acción (grabar, modificar, pasar a otra
Pantalla, etc.)
• Existen 2 funciones que nos permiten pedir confirmación de una accion a un usuario por una
accion.
75
• Input Help -> Son métodos de ayuda para campos de pantallas, generalmente están definidos
en el diccionario asociados a elementos de datos. Se pueden mostrar en 2 formatos, una lista
desplegable o una pantalla se selección.
• Radio Button ->Los selección de radio buttons es excluyente entre ellos. Para crear un grupo
de radio buttons marcar todos estos e ir a la barra de herramientas EDIT->GROUP->RADIO
BUTTON GROUP->DEFINE. De esta manera quedaran definidos. al asignar un function
code, de esta manera se dispara el evento PAI.
• Checkboxes -> Nos permiten seleccionar más de una opción. Declarando data elementos en
la programa con el mismo nombre se pueden linkear estos con los de la pantalla. El tipo de
datos de estos objetos es CHAR(1).
• Pushbuttons -> Es un campo de entrada, que nos permite realizar una acción de la misma
manera que una opción de menú o un botón de aplicación. Tienen asignado un fuction code
que viajara al PAI por el OK_CODE al programa. Un botón puede contener text, iconos.
Para cambiar el texto del botón es necesario cambiar el atributo OUTPUT FIELD en activo
y declarar un data element con el mismo nombre. Igual que cualquier function key definida
en el status un pushbutton puede ser de distinto tipo.
Capitulo 7
Screen elements: subscreen and tabtrips
• Una subscreen area es un area en una screen donde se coloca otra pantalla del tipo
subscreen, la cual puede ser cambiada en tiempo de ejecución.
Una subscreen puede contener más de una subscreen. Si la screen a colocar en el espacio de
la subscreen es mas grande no se mostrara completa, el tamaño es fijo.
Se puede definir que subscreen aparecerá dinámicamente en tiempo de ejecución.
Si una screen se muestra en una area mas pequeña que esta se mostrara solo lo que entre
empezando por arriba desde a izquierda, se puede setear el atributo SCROLLABLE que nos
mostrara una barra para navegar por la subscreen.
• Las subscreen tienen propiedades distintas a una screen normal, no tienen TITLEBAR, PF-
STATUS, no se pueden usar las sentencias LEAVE SCREEN, SET SCREEN, no pueden
tener campos OK_CODE.
No se puede llamar una subscreen dentro de un ciclo LOOP o dentro de CHAIN…
ENDCHAIN.
No debe tener módulos AT EXIT-COMMAND.
Los nombres de los objetos deben ser únicos en todas las screen.
• Para ejecutar una subscreen se debe llamar en el PBO y el PAI de la screen contenedora,
estas llamadas ejecutan el PBO y el PAI de la subscreen
• Para especificar dinámicamente el numero de pantalla a mostrar se crea un data object global
del tipo SY-DYNNR el cual contendrá el numero de screen a la que quiero ir.
PBO
CALL SUBSCREEN subscreen_area1
INCLUDING sy-cprog dynnr.
• A menos que la pantalla que queremos llamar este en el mismo module pool las variables
globales no son accesibles. Para resolver esto se crea un function group que contenga esta
pantalla, las variables a compartir y un 2 funciones para exportar e importar los datos.
Importante: En la llamada al grupo de funciones se debe anteponer al nombre del function
group SAPL…
PERFORM inicializar_campos(saplz_fg_pantalla).
endmodule.
• Declaration de TABSTRIPS
77
TABSTRIP corresponde a aun estructura de tipo CXTAB_TABSTRIP, esta estructura esta
definida en el TYPE POOL CXTAB. Esta estructura tiene.
• Al navegar entre las tab pages se ejecuta el function key de cada una de ellas. El tipo de
function key marcara el comportamiento de la subscreen.
function type ‘ ’ -> Se ejecuta el PAI de la pantalla y la navegación por el
control se realiza manualmente. Se ejecuta el PBO de los subscreen.
CASE ok_code.
when 'TAB1' OR 'TAB2'.
TABSTRIP1-ACTIVETAB = OK_CODE.
function type ‘P’ -> No se dispara el PAI de la pantalla principal, los datos en
las subscreen son estaticos. La navegación es automatica.
• En cada tab page se debe asignar una subscreen que debe ser ingresado en el atributo
REFERENCE OBJECT del tabstrip.
Capitulo 8
Table Controls
• Table control -> Es un area en una pantalla para mostrar datos en forma tabular. Puede tener
hasta 255 columnas, los datos de las columanas pueden ser campos imputables o checkbox.
La particularidad es que nos permite modificar datos en la tabla y actualizar la DB
4. Para asignar el table control con columnas es igual a colocar campos en una
screen, los seleccionamos del diccionario y los arrastramos dentro del control,
automáticamente se convertirán en las columnas
5. Para tener la opción se seleccionar una línea esta la opción W/selection
Colum, hay que darle un campo para que guarda el valor de que la línea esta
marcada, este campo debe estar en la estructura que usamos para la pantalla y
debe ser char(1)
6. Código para manejar el table control.
78
TABLES: zpersonal.
DATA:
wa_per TYPE zpersonal,
it_personal2 TYPE TABLE OF zpersonal.
PBO
MODULE llenar_it_table.
LOOP AT it_personal
INTO wa_per
WITH CONTROL tbc.
MODULE copiar_al_tc.
ENDLOOP.
PAI
LOOP AT it_personal.
CHAIN.
FIELD: spfli-connid,
spfli-countryfr,
...
spfli-distid,
spfli-fltype,
spfli-period.
MODULE modificar_it_personal
ON CHAIN-REQUEST .
ENDCHAIN.
ENDLOOP.
ENDMODULE.
• La estructura table control atributos que pueden ser modificados en tiempo de ejecución.
Esta estructura tiene atributos para el table control, uno de estos es una tabla con todas las
79
columnas. Los atributos de las columnas son iguales a la tabla SCREEN mas atributos
adicionales.
tbc-fixed_cols = 3.
...
LOOP AT tbc-cols INTO wa.
wa-screen-intensified = 1.
...
MODIFY tbc-cols FROM wa.
ENDLOOP.
ENDMODULE. " modificar_tbc OUTPUT
• Además de poder cambiar los atributos de la tabla a través del table control, los campos se
encuentran en la tabla SCREEN como elementos de pantalla individuales.
Capitulo 9
Context Menú
• Un menú de contexto es un status gui especial, para crearlo hay que presionar sobre crear
STATUS, ponerle nombre y el tipo es de CONTEXT MENU. Se puede asignar a campos de
entrada, group box, table control o screen. Todo campo que este dentro de alguno de estos
objetos (menos el campo de entrada) que no tengan menús de contexto asignados heredan de
estos.
• Nos llevara a una pantalla donde deberemos armar el árbol del menú de contexto, se puede
poner submenús. A cada una de las opciones de le deben poner un function code a cada
función final para después capturar en el programa.
• Para asignar un menú de contexto a una screen en los atributos se le pone el nombre del
menú de contexto en el campo ON_CTMENU_
80
• Para capturar el click derecho del mouse es necesario crear un FORM.
Para que aparezca en menú de contexto se usa el método
FORM on_ctmenu_cm_pantalla
USING p_m TYPE REF TO cl_ctmenu.
• Se puede modificar en tiempo de ejecución el context menú, para esto el objeto que devuelve
el método load_gui_status tiene los métodos. (pagina 9-9).
Capitulo 10
List in screen processing
• Desde una pantalla se puede crear un listado básico que puede ser enviado directamente a la
impresora con la sentencia NEW-PAGE PRINT ON PARAMETERS <print_param>. Los
parámetros corresponden a los parámetros de impresión del usuario.
81
• Para mostrar un listado básico por pantalla se usa la sentencia LEAVE TO LIST-
PROCESSING, esta sentencia se ejecuta cuando termina de procesarse la pantalla que lo
usa, es indistinto si es el PBO o PAI.
La sentencia SET PF-STATUS SPACE. Invalida el pf-status de la pantalla y muestra el
status Standard de SAP.
• El listado se crea en una pantalla creada por el sistema, el número de pantalla es 120.
• Cuando de termina de procesar el listado básico se ejecuta el PBO de la pantalla que llama al
listado básico, para evitar que se ejecute se utilizan el addition AND RETURN TO SCREEN
<scr_nro>
LEAVE TO LIST-PROCESSING
AND RETURN TO SCREEN <scr_nro>
• Para que el listado vaya a una salida de spool se usa la sentencia La sentencia SUPPRESS
DIALOG. nos permite al generar un listado a través de una screen que no queremos mostrar.
• Para mostrar un listado en una pantalla en forma modal se crea una screen la cual es llamada
en forma
call screen 200 starting at 20 10
ending at 50 15
Capitulo 13
Programming database updates
• Las actualizaciones a la base de datos se realizan a través de sentencias OPEN SQL, estas
sentencias no dependen del tipo de base de datos que estamos utilizando, existe una interfaz
en SAP que traduce las sentencias dependiendo de la Db que utilicemos.
El conjunto de comandos de OPEN SQL contiene solamente operaciones de
manipulación de datos. Las operaciones de definición de datos no están contempladas.
• Toda ejecución de sentencias OPEN SQL retornan su resultado en 2 variable de sistema SY-
SUBRC (resultado de la Query ) y SY-DBCNT (cantidad de registros seleccionados,
modificados o insertados)
• Las sentencias OPEN SQL no realizan chequeos de autorización sobre las tablas.
82
• Para acceder a datos de otro mandante de una tabla dependiente de mandante se utiliza el
addition CLIENT SPECIFIED, esto nos permite especificar en que mandante queremos
trabajar. Si no se especifica el addition se utiliza el mandante en el que el usuario esta
logoneado.
• Para insertar un registro en una tabla se utiliza la sentencia, los valores se deben ingresar en
una work area y pararlo a la sentencia
• Para insertar varios registros en una tabla se utiliza la sentencia, los registros se agrupan en
una tabla interna y la actualización se realiza por nombres de campo.
• Para actualizar una tabla en la db se utiliza la sentencia, la actualización se realiza usando los
nombres de los campos claves, la igualdad de las claves se realizan automáticamente y se
modifican los campos que en la wa tienen datos. Para una modificación masiva pasa lo
mismo
UPDATE <dbtable>
SET <field> = <valor> ….
WHERE <condition>
83
• Las modificaciones a una tabla de la DB se realizan a través de la sentencia MODIFY.
Consta de 2 partes: 1. Si el registro existe realiza un UPDATE
según los campos que se especifiquen
2. Si el registro no existe realiza un INSERT en
la tabla con la clave proporcionada
• Para borrar registros de una DB se utiliza la sentencia DELETE, es obligatorio poner una
condición.
• Toda sentencia OPEN SQL puede terminar en forma anómala, la variable de sistema SY-
SUBRC contiene el resultado de la ejecución, para realizar un ROLLBACK cuando sy-subrc
EQ 4 se usa la sentencia
MESSAGE A…
Esta sentencia nos permite realizar el rollback y mostrar un mensaje al mismo tiempo y
cancelar el programa
• La sentencia ROLLBACK WORK nos permite volver atrás cambios en la DB sin cancelar el
programa
• Es posible ejecutar sentencias SQL nativo en ABAP, debe ser encerrado dentro de las
sentencias EXEC ... ENDEXEC, dentro de estas sentencias se podrá ejecutar comandos SQL
particulares de la DB, tener en cuenta que distintas DB tienen distinta sintaxis en sus
sentencias SQL.
84
Capitulo 15
LUWs and Client/Server architecture
• La LUW de sap es una unidad lógica de procesamiento con la DB, consta en una serie de
cambios en la DB
Capitulo 16
SAP Locking concepts
• Los lockeos de registros se utilizan para trabajar con datos sin que se sufran cambios en los
mismos por otros procesos. Cada commit de la DB libera todos los bloqueos realizados en el
entorno de la LUW
• Las operaciones de lockeo entre entradas de distintas tablas se realzan desde el diccionario
creando OBJETOS DE LOCKEO, estos objetos al ser llamados desde un programa lockean
las estradas de las tablas para poder realizar las actualizaciones. Cuando se crea el objeto se
debe ingresar la tabla a la que pertenecen los campos a lockear, si son varias tablas se debe
ingresar los campos que relacionan estas tablas.
85
• Al crear los objetos de lockeo se crean las funciones correspondientes para lockearlo y
deslockearlo
La interfaz de estas funciones contendrá los valores de los campos de las tablas que
lockearemos o liberaremos
• Al ocurrir un error cuando queremos lockear un objeto nos mostrara un mensaje de error en
la pantalla.
Cuando se termina un programa se liberan todos los lockeos implícitamente.
• Para liberar todos los objetos lockeados de una vez esta la función CALL FUNCTION
'DEQUEUE_ALL'.
Capitulo 17
Organizing database updates
• Actualización DIRECTA -> Las actualizaciones se retrazaran al final del programa las
instrucciones se ejecutaran al final del programa
• Al pasar el control de las actualizaciones al WPU el WPD termina. Para revisar como va la
actualización se puede ver a través de la transacción SM13
• En caso de un error el WPU marca en la tabla la sentencia de actualización que dio error y
envía un mail al usuario que ejecuto la tarea utilizando el parámetro RDISP/VBMAIL o
RDISP/VB_MAIL_USER_LIST. En caso de que la actualización se halla realizado con
éxito el WPU borra la tabla log y se libera.
• Las funciones que queremos que tengan esta funcionalidad de actualización deben ser
creadas como modulo de actualización (MODULE UPDATE), estas funciones solo tienen
parámetros de importing. Al llamar a la función se debe agregar el addition IN UPDATE
TASK, esto hace que guarde en la tabla de log el requerimiento para luego ser ejecutados. La
sentencia COMMIT WORK cierra la tabla de log y la pasa al WPU que es el que realizara la
actualización.
87
• Local Updates -> Las actualizaciones en forma local son ejecutadas por el mismo WP de
dialogo que esta manejando la pantalla, no se delega la ejecución a un WP de UPDATE. Los
requerimientos de actualización siguen siendo escritos en la tabla log y ejecutados con la
sentencia COMMIT WORK. El programa espera a que se resuelvan todas las
actualizaciones y sigue con el programa.
La sentencia que activa las actualizaciones locales es
SET UPDATE TASK LOCAL
Esta sentencia sirve solo hasta el siguiente COMMIT WORK
• Dentro de las funciones no se puede usar el ROLLBACK WORK en caso de que de error
una actualización de debe usar el mensaje de error del tipo A
MESSAGE A....
Capitulo 18
Complex LUW Processing
• CALL FUNCTION
• CALL TRANSACTION
• SUBMIT PROGRAM <pgm> AND RETURN
88
2. La llamada al programa termina al programa llamador y ejecuta al programa
llamado.
• Ejecución de funciones en paralelo -> Se puede ejecutar funciones en forma paralela con el
agregado de la sentencia STARTING NEW TASK <task_name>. Para obtener los datos que
dejo la función se utiliza la sentencia RECEIVE RESULTS FROM FUNCTION
<funct_name>.
-> submit
Leave to transaction -> Terminan la LUW del programa
llamador, si este no realizo el commit la tabla log no
esta completa y no se ejecutaran las actualizaciones.
89
Capitulo 19
Number Assignment
• Los rangos de números pueden ser numéricos o alfanuméricos. Múltiples rangos de números
pueden ser asignados a un objeto.
90
CALL FUNCTION 'NUMBER_CHECK'
EXPORTING
nr_range_nr =
number =
object =
subobject =''
toyear = '0000'
numeric_check =''
IMPORTING
returncode =
exceptions
interval_not_found =1
number_range_not_extern =2
object_not_found =3
OTHERS = 4.
• Para obtener información sobre el numero que se esta ingresando se utiliza la función
NUMBER_GET_INFO. La estructura que devuelve tiene la estructura de NRIV que contiene
todos atributos del número para ese objeto.
• La tabla NRIV que contiene en cada línea un rango de números, esta tabla generalmente esta
en el buffer del application server para optimizar el acceso.
Capitulo 20
Change Document
• Para logear cambios en una tabla de aplicación usando change document es necesario
actualizar la tabla de aplicación y actualizar la tabla de change document.
Para logear los datos se debe pasar al modulo de actualización los datos del registro antes del
cambio, el registro cambiado y datos administrativos (usuario, fecha, hora, nombre de la
transacción, etc.)
• Para logear cambios usando change document es necesario crear el objeto change document
en el sistema, también se debe incluir las correspondientes tablas.
91
El sistema crea los correspondientes módulos de funciones como también 2 includes con
definición de datos.
Estos 2 includes contienen programas que permiten grabar los datos en la tabla de change
document.
Los change document se guardan en la tabla CDCLS.
• Para crear un change document se utiliza la transacción SCDO. Por cada definición el
sistema genera los correspondientes módulos de funciones. Se crean estructuras en el
diccionario para la operación de logeo.
START-OF-SELECTION.
******* seleccion de datos de la DB **********************
SELECT SINGLE * FROM zpersonal
INTO CORRESPONDING FIELDS OF xzpersonal
WHERE dni = '00.000.000'.
COMMIT WORK.
• Para ver el chage document se utiliza el programa RSSCD100 el cual nos muestra para el
objeto específico todas las modificaciones que sufrió.
92
TAW12 3/3
ABAP Workbench Concept
Transacción Descripción
SPRO Transacción de customizing
SE43 Mantenimiento de Menús
SHD0 Creación de variantes de transacción
LSMW Herramienta de carga inicial
CMOD Modificación de elementos del usuario
SMOD Modificación de elementos de SAP
SNRO Manejo de rangos de números
FIBF Administración de BTE
SE18 Visor de definiciones de BADIs
SE19 Implementación de BADIs
SPDD Modificaciones al Diccionario
PFCG Creación y mantenimiento de roles
SE95 Modification browser
SPAU Modificaciones al repositorio
SNOTES Notes assistant
93
Toda modificación hecha al standard de SAP a través de estas herramientas no modifican el
standard, las modificaciones se guardan en lo que se llama es CUSTOMER NAME SPACE, este es un
espacio reservado para el usuario para crear sus modificaciones. Las actualizaciones del sistema hechas por
SAP no afectan a las modificaciones que nosotros hallamos hecho siempre y cuando se realicen con las
herramientas apropiadas.
Capitulo 3
Changing SAP Standard.
• Tipos de modificaciones
Personalization -> Transaction Variant
Modification -> Modification Assistant
User exits
Enhancement -> Abap Dictionary -> Tables
Data element
-> Customer exit -> Function module
-> Menu Exit
-> Screen Exit
-> Business transaction events (BTE solo
para FI)
-> Business Add-ins (BADIs)
• Modification -> Cambios en el repositorio de SAP hechos por en cliente. En el caso de que
SAP modifique un objeto en el repositorio estas modificaciones deben ser realizadas por el
cliente para poder reflejar los cambios. Este procedimiento se realiza con la herramienta
MODIFICATION ASSISTANT.
• Table enhancement -> SAP provee 2 tipos de ampliación en tablas, ninguna de estas
ampliaciones modifican el standard.
• Screen enhancement -> Son subscreen en las pantallas de SAP que nos permiten agregar
campos, controles, etc. Desde la versión SAP WAS 6.2 solo se pueden usar business add-ins.
95
• Modification -> Toda modificación a objetos de SAP se llaman modificaciones, estas
modificaciones pueden llevar a inconvenientes al momento de una actualización del sistema
ya que deberá decidir que objeto actualizar para no perder los cambios realizados. Para
realizar esta tarea de modificación esta la herramienta MODIFICATION ASSISTANT.
• Ordenes de transporte
Correction Repair
• Después de un upgrade del SAP se deben comparar los objetos nuevos con los que fueron
modificados para no perder los cambios y modificar los nuevos.
Desde la versión 4.5 se utiliza la herramienta MODIFICATION ASSISTANT.
Capitulo 4
Personalization
96
• Creación de Roles -> Los roles nos permiten estandarizar la configuración de usuario
basándonos en el tipo de usuario y su actividad. La creación y mantenimiento de roles se
realiza desde la transacción PFCG.
• En la transacción SE43 se puede crear un menú de transacciones para un usuario, este menú
es una transacción la cual se ejecuta y nos muestra en la parte derecha un árbol de
transacciones con todas las transacciones creadas.
Capitulo 5
Table enhancement
• Append Structure -> Estructura que se puede agregar a una tabla para agregar campos a esta,
esta estructura se puede agregar solo a una tabla. Cuando una tabla con estructuras append es
copiada la tabla destino tiene estos campos como propios y no como una estructura agregada
Notas Importantes
-> Las tablas POOL y CLUSTER no pueden tener
append structure, solo tablas transparentes.
-> Las tablas transparente que tienen como ultimo campo son
del tipo LCHAR o LRAW no se puede agregar un append structure
97
-> Los campos de una estructura append deben empezar con
las letras ZZ o YY.
• Include structure -> Las estructuras include son estructuras que pueden estar compartidas en
mas de una tabla. Algunas tablas de standard se le pueden agregar estructuras, solo a las que
ya la tienen definidas. No se puede crear un include en tablas que no tengas esta include ya
definido. El nombre standard de la estructura empieza con CI_xxx.
• Text Element -> Se pueden cambiar las descripciones que traen los elementos de datos por
unos que quiere el usuario, para esto se usa la transacción CMOD. Las modificaciones de
texto y documentación no son partes de un proyecto de ampliación, se entra por la CMOD
pero se acceden por la barra de herramientas GOTO->TEXT ENHANCEMENT.
Las modificaciones que se pueden hacer a un text element varían entre KEYWORD
(descripción del campo) y DATA ELEMENT ( agregar documentación al data element).
Toda modificación de un text element impactara en forma global en el sistema
Para que los campos en una pantalla tomen los cambios cuando modificamos el text
element se debe setear el atributo modif. En el screen painter.
Las modificaciones en keyword deben ser vueltos a aplicar luego de una
actualización de la versión de SAP.
• Por la transacción SE95 se pueden ver todas las modificaciones que se realizaron en el
sistema, se pueden activar o desactivar cada una por separado.
Capitulo 6
Enhancement
• User Exits -> Son FORMs metidos en los programas standard de SAP que están declarados
pero no creados, para usarlo es necesario crearlo y meterle código propio a este form.
• En los programas Standard de SAP contiene llamadas funciones, estas funciones se utilizan
para ampliar la funcionalidad de los programas Standard, estas funciones están contenidas en
módulos de funciones, y estos módulos en grupos de funciones
• Nomenclaturas standard
-> Grupo de funciones -> X…
-> Modulo de funciones -> EXIT_<pgm_name>_xxx
• Los módulos de funciones tienen definidas una interfaz de parámetros para usar en la
función, no se puede modificar esta interfaz de parámetros para agregarle más. La
convención para módulos de funciones es EXIT_<pgm_name>_xxx.
• Estructura del function group -> Los grupos de funciones de ampliación contienen includes
de la forma LX o ZX, los LX son código de SAP, los ZX son código nuestro, solo estos
incluyes podemos modificar ya que caen en el customer name space.
El include del tipo LXaaaTAP guarda las variables del globales declaradas por SAP, el
incluye LXaaaTOP contiene las variables nuestras.
Los includes de la forma ZXaaaUnn contiene el código fuente de las funciones de
ampliación. En este incluye es solo para funciones, no es posible insertar código de
subrutinas (FORM), módulos (modules) o eventos. La declaración de variables en este
include son solo locales para los módulos de funciones.
Los includes de la forma ZXaaaFnn o ZXaaaOnn o ZXaaaInn o ZXaaaEnn guardan los
módulos, eventos y funciones del usuario.
• Menú Exits -> funciones de menú agregados al menú standard. Los menú exits están
programados en la pantalla standard de SAP, lo único que necesitamos es activarlo para que
aparezca, y en el código standard que atrapa el OK_CODE de este menú esta la función que
debemos programar adentro para agregarle funcionalidad, el OK_CODE de este menú
empiezan con +. El menú exit viene junto con un modulo de funciones que implementara el
funcionamiento.
• Screen Exits -> En algunas de las pantallas de SAP standard existen subscreen escondidas en
donde podemos poner screens propias con campos o controles que queramos. En el
programa standard existe una llamada en el PBO y PAI la sentencia.
PBO
CALL CUSTOMER-SCREEN xxx
INCLUDING <funct_group> <scr_num>
PAI
CALL CUSTOMER-SCREEN xxx
• Cuando encontrados el screen exit nos fijamos a que ampliación pertenece y creamos un
proyecto para esa ampliación, esta ampliación contendrá 2 componentes, uno será la screen
que debemos crear (con formato SUBSCREEN ) y customer exit donde podremos pasar
datos la screen a nuestra subscreen, es necesario en la función crear un data object (tables)
para poder ligar la función con la screen y asignarle a esta la estructura que nos pasa por
parámetro la función (siempre dentro del include, para declarar el data object el modulo de
funciones trae un TOP include para nosotros)
• Para asignarle una screen a la subscreen que deseamos en tiempo de ejecución se usa la
sentencia
PBO
CALL SUBSCREEN <scr_conteiner>
INCLUDING <pgm_name> <scr_nro>
99
PAI
CALL SUBSCREEN <scr_conteiner>
• Observaciones
-> No pueden tener nombre la subscreen
-> No esta permitido definir status GUI
-> La subscreen no puede tener definido el atributo next screen
• El nombre técnico de la screen exit tiene el nombre del programa que lo llama, 4 números
que es el nombre de la screen más el nombre de la subscreen area.
Capitulo 7
Business Transaction Events
OPEN_FI_PERFORM_<ev_number>
OUTBOUND_CALL_<ev_number>
La transacción FIBF nos permite ver todos los eventos con sus implementaciones. Consta
transacción se crean “productos”, este producto agrupa un conjunto de ampliaciones. La
activación o desactivación se realiza a nivel de producto.
Las BTE son client-specified, esto quiere decir que el mismo evento puede ser reutilizado
por distintos clientes.
Estas ampliaciones en los programas son solo para código, no se pueden agregar pantallas ni
menús.
Las BTE's, o Business Transaction Events son un tipo de extensión del sistema SAP. A diferencia de las BADI's,
únicamente se puede modificar código con las BTE's; no es posible modificar dynpros o menúes.
Las BTE's están basadas en Módulos de Funciones y Productos, a diferencia de las BADI's que están basadas en
objetos.
Al implementar una BTE, se debe crear una interfase para el módulo de funciones de la BTE. De esta manera, el
sistema leé una tabla Z y llama dinámicamente la función implementada por el cliente.
Existe 2 tipos de interfases:
- Interfases de Publicación y Suscripción
- Interfases de Proceso
Las interfases de Publicación y Suscripción brindan información sobre eventos en particular, como la creación o la
modificación de un documento. Por otro lado, las interfases de proceso se utilizan para reemplazar la lógica
estándar de SAP por lógica de cliente.
En este link vas a encontrar más información acercar de las BTE's y todo lo relacionado con la programación
ABAP:
Capitulo 8
Business ADD-ins
101
• BADIs -> Tipo de ampliación implementada en Objetos.
Una BADI es una llamada en el código standard de SAP a métodos que no están
implementados. Cuando se crea una implementación de una BADI se crea la interfaz
del método y la clase que lo va a implementar.
ZCL_EX_<badi_name>
ZIF_EX_<badi_name>
102
• En la definición el atributo MULTIPLE USE indica que pueden existir múltiples clases de
implementación. Las ampliación del tipo pantalla o menú NO pueden tener múltiples
implementaciones.
• Las ampliaciones de menú con BADIs se aplican igual que las ampliaciones con customers
exits, en el STATUS GUI de la pantalla debe estar declarado el function code con el formato
‘+<exit>’, y en el programa en la captura del OK_CODE debe estar contemplado la llamada
al método de la interfaz de la BADI.
• Solo se puede activar la implementación de una BADI desde el sistema original y luego
transportar la activación al resto de los sistemas.
• Las ampliaciones de pantalla con BADIs mantienen el mismo principio de customer exit, se
prepara un screen conteiner a la cual se le asignaran subscreen dinámicamente.
La comunicación entre la screen principal y la subscreen no se realiza en forma directa sino
que se maneja a través de una clase BADI.
Si una BADI contiene más de una ampliación de pantalla no puede tener marcado el atributo
de REUSABLE
• Cuando no haya implementación activa para una BADI se puede crear una implementación
por default, en la definición ir a GOTO -> DEFAULT CODE.
• La maquina virtual de ABAP no puede contener pantallas, solo los programas del tipo 1, F o
M. Cuando se crea una BADI de ampliación de pantalla se tiene en el programa el
contenedor para la screen, el problema es que el programa y la screen no se comunican
directamente, se deben crear métodos para la comunicación entre estos.
Las BADI's (Business ADd Ins) son un nuevo tipo de extensión al sistema SAP basado en ABAP
Objetcs. El objetivo de los mismos es cumplir con los requerimientos del cliente permitiendo
agregar nuevas funcionalidades dentro del código estándar de SAP.
De la misma manera que con los User Exit's, las BADI's tienen dos vistas: la de definición y la de
implementación. Mediante la transacción SE18 accedemos a la Definición de las BADI's. Allí se
puede ver las características de la misma: parámetros de entrada, salida, tipo de BADI, etc. En la
Implementación de la BADI, a la que se accede mediante la transacción SE19, se pueden ver todas
las implementaciones que existan de una BADI determinada.
La definición de las BADI's viene definida en el sistema estándar (muy pocas veces es necesario
crear una nueva definición para una BADI). En la definición se indica si la BADI es de
implementación simple (se puede utilizar sólo una vez, como los User Exits) o múltiple (pueden
existir varias implementaciones activas de la misma BADI en el mismo sistema). Además, se
pueden definir filtros para la ejecución de la misma permitiendo de esta forma tener diferentes
procesos para, por ejemplo, países diferentes. Esto le permite a SAP poder utilizar las BADI's para
realizar localizaciones del sistema; por eso es que el sistema estándar ya incluye varias
implementaciones de BADI's.
Mediante las implementaciones de BADI's también se pueden hacer aplicaciones para negocios
específicos (papeleras, petroleras, químicas, etc). Esto hace que las BADI's sean muy útiles. Esto es
así porque a diferencia de los User Exits las BADI's poseen una arquitectura Multicapa (SAP,
partners, soluciones de clientes, localizaciones, soluciones específicas para industrias, etc); los User
103
Exits son doble capa únicamente (SAP y soluciones de cliente).
En www.todoabap.com.ar van a encontrar métodos para encontrar las BADI's de una transacción o
programa.
Capitulo 9
Modifications
• Los objetos creados por el usuario tienen origen en el sistema de desarrollo y al ser creados
se le asigna una orden de cambio del tipo DEVELOPMENT/CORRECTION. Esta orden
asegura que el objeto será enviado a los subsecuentes sistemas.
• Al modificar el objeto el sistema pedirá asignarle una orden de cambio del tipo REPAIR.
Este tipo de orden tiene las siguientes funciones
-> Change Lock -> Luego de asignar la tarea, solo
el owner de esta puede modificarla.
-> Import Lock -> El objeto no podrá ser sobre
escrito en caso de un update.
-> Version Creation -> El sistema crea una copia
del objeto original y guarda las diferencias
del viejo objeto y el nuevo en la DB.
104
La herramienta permite ver un registro de todas las modificaciones que se realización
en el sistema separados por el tipo de modificación realizada.
• User exits se crearon principalmente para SD, son consideradas MODIFICATION. Tienen
una nomenclatura especial, USEREXIT_<name>. Utilizan variables globales y son
almacenados en includes especiales. Cuando SAP agrega un nuevo user exit este se guarda
en un nuevo include.
Son funciones ya creadas vacías a las cuales debemos poner nuestra lógica. Para
utilizar user exist se debe activar el parámetro ABAP/FIELDEXIT.
• SPDD -> Esta transacción nos acomodar nuestros objetos modificados a los nuevos que SAP
instalo en la actualización, esta transacción se ocupa de los objetos del diccionario
(Domains, Data elements y tables).
• Todo ajuste luego de una modificación se debe transportar a los subsiguientes sistemas para
esto hay 2 tipos de ordenes de trasporte.
SPDD adjustment
SPAU adjustment
• Para evitar conflictos con los nombres entre los objetos del cliente y los de SAP se utiliza
una nomenclatura especial para diferenciarlos, pero entre los distintos objetos también, esta
nomenclatura se guarda en una vista del sistema V_TRESN.
105
Validaciones y substituciones
Las validaciones y sustituciones son eventos que se dispara en caso de crear o modificar documentos de FI.
(Únicamente FI).
Estos programas son estándar y no pueden ser modificados. SAP recomienda que estos sean copiados a otro y
modificados.
Para decirle a SAP en que programa buscar los form se debe modificar la tabla T80D que es la que tiene
customizados los programas estándar.
106
Validaciones
Tipo de interfaz
Customizing de validaciones
107
Para customizar una validación se ingresa a la transacción GGB0. Ahí encontraremos, los distintos
módulos en donde crear la validación dentro de FI.
Para crear una validación debemos pararnos el modulo que queremos y decidir si se ejecutar cuando
se modifica o crea una cabecera, por posición o por documento completo.
Dentro de las validaciones se crean pasos que son los encargados de ejecutar nuestro FORM de
validación.
Para que se ejecute un paso de validación este debe cumplir con la condición ingresada en la solapa
“Condición”.
108
En la solapa “Verif” se ingresa cual es el exit que se ejecutara para realizar la verificación.
109
En la solapa “Mensaje” se ingresa cual es el mensaje que se emitirá si el exit que realice la
validación. El resultado del exit depende de la variable B_RESULT. Se puede pasar variables a este
mensaje.
La transacción OB28 indica si la validación (no el paso dentro de este) esta activo o no.
110
Sustitución
111
exits-param = C_EXIT_PARAM_FIELD. → interfaz del exit exits-title = text-104. →
descripción del exit
APPEND exits.
(C_EXIT_PARAM_CLASS)
FORM u994 USING bool_data TYPE gb002_015.
...
ENDFORM.
Tipo de interfaz
→ C_EXIT_PARAM_NONE
→ C_EXIT_PARAM_FIELD → El parámetro es el campo que vamos a
sustituir.
→ C_EXIT_PARAM_CLASS → El parámetro es la estructura
BOOL_DATA. Esta estructura contiene la cabecera y las
posiciones del documento.
Customizing de validaciones
La transacción para customizar una sustitución es GGB1. Ahí encontraremos, los distintos módulos
en donde crear la validación dentro de FI.
Para crear una sustitución se selecciona en que tipo de evento se ejecutara la sustitución, por
cabecera, por posición o por documento completo.
112
Como en validaciones se debe crear un paso dentro de la sustitución. Cuando se crea un paso debe elegir
que campo debe sustituirse. Si se elige un campo este campo marcara la interfaz del FORM. Si se elige “Solo exit”,
la interfaz del form será la estructura BOOL_DATA.
113
Valor constante -> Se modificara el campo por un valor const
Exit -> Se ejecutara un FORM de validación
Asignación campo-campo -> Se modificara un campo por otro.
En la solapa “Condición” se ingresara la condición que por la cual que se ejecutara o no la sustitución.
En la solapa “Sustitución” en caso de haber elegido el tipo EXIT se ingresara el nombre del exit que se
ejecutara.
114
La transacción OBBH indica si la sustitución (no el paso dentro de este) esta activo o no.
NOTA: Hay casos de que las sustituciones y validaciones creadas no aparecen en el customizing.
Existe un programa que regenera las validaciones y sustituciones, el programa es RGUGBR00
115
116