INDRA_Curso_ABAP_1
description
Transcript of INDRA_Curso_ABAP_1
Introducción a ABAP IV.Parte I
Visión general del código ABAP y debugging para facilitar el trabajo de un consultor SAP.
OUTSOURCING
Cristina Roca Muñoz – Consultoría SAP
Curso / Salas Polivalentes 1 y 2 SS Avda. de Bruselas 35 / 19 y 29 Noviembre 2008
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
2
INDICE
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de funciónRutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
3
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
4
B usiness
/4
A dvanced
A pplication
P rogramming
Introducción. Programación en Abap/4
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
5
Abap/4 es un lenguaje de programación modular al cual
se le ha incorporado la programación orientada a
objetos (ABAP Objects).
En sus principios apareció como un sencillo lenguaje
para que los usuarios finales pudieran manipular
información.
A partir de la versión 4.5 de SAP se lanzó una
extensión orientada a objetos denominada ABAP
Objects.
En su nueva plataforma de desarrollo SAP, Netweaver,
SAP soporta ABAP y Java como lenguajes de
programación.
Introducción. Programación en Abap/4
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
6
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
7
Tipos de programas y nomenclatura
Tipos de programas más usados: Programa Ejecutable (Report) Programa de Include Modulpool Grupo de funciones Pool de subrutinas
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
8
Editor de ABAP/4- chequeo sintáctico
Programa
AYUDA <sentencia>
Documentación On-line
ABAP/4 debugging mode
Líneas de código
VER <tabla>
DatosTablasVer / Modificar
contenido de campos
Entorno ABAP/4
Entorno de Programación ABAP/4
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
9
Tipos de programa
Reports
Modulpool
Informes, Procesos batch de actualización
Procesos de actualización on-line
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
10
Estructura de un Programa
Declaración de datos
Definición de pantalla
Selección de datos
Ejecución del listado
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
11
Tipos de programas y nomenclatura
Programas Ejecutables. REPORTS (Trans. SE38)
Constituyen el tipo de programa ABAP más usado. Su estructura está diseñada para facilitar la creación de listados.
Están formados por una pantalla de selección (filtrado de datos) y una salida por pantalla (listado). Tiene un flujo de ejecución sencillo basado en eventos que transcurren secuencialmente.
Todo programa report comienza con la sentencia REPORT.
Nomenclatura: No tienen una nomenclatura fija, sin embargo, para programas a medida estos deben comenzar por Z o Y.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
12
INITIALIZATION.START OF SELECTION.END OF SELECTION.TOP-OF-PAGE.END-OF-PAGE.AT LINE-SELECTION.AT PFxx.AT USER-COMMAND.
Eventos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
13
Tipos de programas y nomenclatura
Programas de Include (Trans. SE38)
Los programas includes constituyen un modo de encapsular código de modo que sea reutilizable en distintos programas. También facilita la comprensión de programas agrupando los distintos eventos, rutinas, etc en distintos programas de include.
Nomenclatura: Al igual que los programas reports no tienen una nomenclatura fija, sin embargo, los programas de include para grupos de función y modulpool siguen una nomenclatura prefijada (se verá más adelante). Al igual que para todos los demás objetos de SAP, a crear includes a medida estos deben comenzar por Y o Z (a excepción de modulpool y grupos de función).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
14
Tipos de programas y nomenclatura
MODULPOOL (Trans. SE38 y SE51)
Modulpool es un modo de programación basado en la secuencia de ejecución de screen (pantallas). La ejecución comienza en una screen en concreto (llamada directamente por la transacción) y la secuencia de ejecución las llevan las screen que se llaman dinámicamente.
Nomenclatura: En nombre de un programa modulpool comienza por SAPMxxxx siendo xxxx texto libre. Los programas de include creados para él, comienzan por Mxxxx. Normalmente se usan nombres como: MxxxxTOP (datos globales), MxxxxI## (módulos input), MxxxxO## (módulos output), MxxxxF## (rutinas forms).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
15
Tipos de programas y nomenclatura
Grupos de función (Trans. SE37)
Un grupo de función es un conjunto de módulos de función que comparten código y datos. Tanto los datos globales como las rutinas definidas en el programa de control (del grupo de función) son accesibles desde todos sus módulos de función. Esto nos permite crear flujos de ejecución de módulos de función que añada funcionalidad a los programas que los use, sin que los datos del grupo de función hagan más complejo el programa de llamada.
Nomenclatura: En nombre para el programa de control de un grupo de función comienza por SAPLxxxx siendo xxxx texto libre. Los programas de include creados para él, comienzan por Lxxxx.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
16
Tipos de programas y nomenclatura
Pool de subrutinas (Trans. SE38)
Como su nombre indica un pool de subrutinas es un programa que sólo contiene rutinas forms. Su principal finalidad es usar estas rutinas en llamadas dinámicas, por ejemplo, las transacciones estándar de ventas (SD) llaman dinámicamente a un pool de subrutinas durante la impresión de sus formularios.
Hay que destacar el parecido de los grupos de función con los pool de subrutinas, ya que estos son conceptualmente lo mismo. La diferencia se haya en la forma de trabajo con estos.
Nomenclatura: No siguen ninguna nomenclatura especial.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
17
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
18
A4711/XYZ tornillo 1,100.00 1.00B4712/XYZ taladro 200.00C9999/XYZ martillo 10.0
05.00
300.00
Código de material Descripción Cantidad Precio
Datos de material en la Base de datos
Atributos de los campos en el Diccionario de datos (una tabla)
Nombre del campo Formato tamaño
Código de material Character 18Descripción CharacterCantidad Numeric
30
Precio Numeric 6.2
7.2
* * * * * *
Diccionario de Datos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
19
Tabla
campo
Dominio
utiliza
utiliza
Elemento de DatosElemento de Datos
Objetos básicos en el Diccionario
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
20
Campo 1 Campo 2 Campo 3 Campo n. . .1
Campo 22
Change documentMemory IDDomain nameKey wordsHeading
3
Formato Tabla de verificación
Tamaño Conjunto de valores . . .. . .
4
1 2 3 4Tabla Campo Elemento de datos Dominio
Definición de una Tabla
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
21
Tipos de tablas
Tablas TRANSP (transparentes) : Tablas normales relacionales (SQL).
Tablas POOL : Tablas SAP que se guardan junto a otras tablas SAP en una única tabla física de BDD. Mejorando el acceso a los registros.
Tablas CLUSTER : Varias tablas que se guardan en un cluster de BDD. Se guardan registros de varias tablas SAP con la misma clave cluster, en el mismo cluster físico de la base de datos.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
22
Los datos en el sistema SAP
Datos maestros : Son datos que no se modifican muy a menudo.
Ej: Materiales, Cuentas, Bancos, Clientes ...
Se almacenarán en tablas transparentes.
Datos de movimientos : Datos muy volátiles y con gran volumen de generación.
Ej: Facturas, Pedidos...
Se suelen guardar en tablas tipo CLUSTER todos ellos con formato parecido (documentos).
Datos del sistema o de control :
Muchas tablas con pocos datos.
Se suelen guardar en tablas de tipo POOL.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
23
Tipos Longitud por defecto
Posible longitud Valor inicial Descripción
C 1 1-32000 ESPACIOS Texto
F 8 8 0.0E+00 Punto flotante
I 4 4 0 Entero
N 1 1-32000 ‘0000’ Texto numérico
P 8 1-16 0 Número Empaquetado
X 1 1-29870 x’00’ Hexadecimal
D 8 8 00000000 Fecha YYYYMMDD
T 6 6 000000 Hora HHMMSS
Tipos de datos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
24
Declaración de tipos y datos
Declaración de tipos (Sentencia TYPES)
Uso de tipos predefinidos (abap_types)
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
25
Declaración de tipos y datos
Declaración de tipos (Sentencia TYPES)
Referencia a tipos existentes
Podemos crear nuestros propios tipos de datos haciendo referencia a tipos ya existentes, como pueden ser: elementos de datos, tipos tabla, tipos dentro de grupos de tipos, etc.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
26
Declaración de tipos y datos
Declaración de tipos (Sentencia TYPES)
Tipos referencia
Mediante esta adición se declaran instancias de clases y referencia a datos que posteriormente se asignarán a punturos (fields-symbols).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
27
Declaración de tipos y datos
Declaración de tipos (Sentencia TYPES)
Tipos estructura
Usando la adición begin of ... end of ... se declaran estructuras, es decir, tipos que contienen uno o más campos.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
28
Declaración de tipos y datos
Declaración de tipos (Sentencia TYPES)
Tipos tabla
Podemos crear tipos tabla (tablas internas) basadas en líneas (registros) tipo estructura, instancias de clases, referencia, etc. Se les puede aplicar una clave (única o no), definirlas como tablas ordenadas, etc.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
29
Declaración de tipos y datos
Declaración de tipos (Sentencia TYPES)
Tipos rango
Un tipo rango es una clase de tipo que nos permite definir rangos de valores, siendo estos intervalos, valores individuales, inclusión y exclusión de valores, etc.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
30
Declaración de Variables
Una variables no es más que una zona de memoria donde se va a almacenar la información de una forma temporal. Para ello SAP utiliza la sentencia DATA. También nos podremos crear nuestro propios TYPE de datos. E incluso definir constantes cuyo valor será inamovibles a lo largo del programa.
Una variable
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
31
DATA:COUNTER TYPE I,COUNTER2 TYPE COUNTER,TEXTO(30) VALUE ‘Sueño tengo oyes’,START_DATE TYPE D,SUM1(5) TYPE P.
Un nombre válido consta de un máximo de 30 caracteres (letras, números, caracteres especiales) siendo el primero una letra. Los siguientes caracteres especiales no se deben usar: “ ‘ ( ) + * < > . , : / = SPACE es un campo predefinido. En una instrucción ABAP/4, el nombre de un parámetro no debe usarse como nombre de campo. Un “-” guión/signo menos indica registro-campo.
Declaración de datos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
32
INCLUDE STRUCTURE <tab>.
REPORT B170D091.• •
DATA : BEGIN OF TAB OCCURS 5. INCLUDE STRUCTURE TABNA.
DATA : END OF TAB, NAME2 LIKE TABNA - NAME1.
TAB-CITY = . . .
Declaración de datos: Uso de las estructuras del Diccionario de Datos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
33
Estructura
ADDRESS
NAME FIRST NAME PLACE STREET
Tablas internas
ADDRESS_LISTCabecera
NAME FIRST NAME PLACE STREET
Estructuras de datos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
34
DATA: BEGIN OF <tabla> OCCURS <n>, . . . ,END OF <tabla>.
REPORT B170D081.
DATA: AMOUNT ( 5) TYPE P,BEGIN OF ADDRESS OCCURS 5,
FLAG TYPE C,ID LIKE TABNA-ID,NAME LIKE TABNA-NAME1,CITY LIKE TABNA-CITY,AMOUNT1 LIKE AMOUNT,
END OF ADDRESS.
MOVE ‘X’ TO ADDRESS-FLAG.ADD AMOUNT TO ADDRESS-AMOUNT1.WRITE: ADDRESS-FLAG, ADDRESS-ID, ADDRESS-AMOUNT1.
Definiendo una tabla interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
35
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
36
Reports. Pantallas de selección, eventos y otros
PANTALLA DE SELECCIÓN
Pantallas de selección son unas pantallas especiales definibles en reports, grupos de función y modulpools. Se declaran en la sección de definiciones globales, y hacen uso de las sentencias SELECT-OPTIONS, SELECTION-SCREEN y PARAMETERS.
Se pueden crear tantas pantallas de selección como se quiera, siendo la screen 1000 (reservada para la pantalla de selección por defecto).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
37
Reports. Pantallas de selección, eventos y otros
Sentencia SELECTION-SCREEN
Mediante esta sentencia podemos crear pantallas de selección, definir un layout, y otros.
Creación de pantallas de selección
Líneas en blanco
Líneas horizontales
Campos de salida (Información)
Pulsadores
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
38
Reports. Pantallas de selección, eventos y otros
Sentencia SELECTION-SCREEN (continuación)
Pulsadores (dentro de la barra de pulsadores)
Líneas con múltiples elementos
Creación de bloques
Creación de TabScrips (pestañas)
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
39
Reports. Pantallas de selección, eventos y otros
Sentencia PARAMETERS
Mediante esta sentencia definimos las variables que formarán parte de la pantalla de selección.
Opciones de tipo
Opciones de pantalla
Opciones de valor
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
40
Reports. Pantallas de selección, eventos y otros
Sentencia SELECT-OPTIONS
Mediante esta sentencia definimos rangos de valores. Nos posibilita el filtrado de datos por rangos.
Opciones de pantalla
Opciones de valor
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
41
Reports. Pantallas de selección, eventos y otros
Textos de Selección
Mediante los textos de selección le asignamos textos a los campos de la pantalla de selección, es decir, a los parámetros (PARAMETERS) y los rangos de selección (SELECT-OPTIONS).
Si marcamos la casilla “Referencia” el texto del campo de selección se recogerá automáticamente del elemento de datos asignado al campo.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
42
ON <CAMPO>.
REPORT B190D025 MESSAGE-ID . . . .TABLES:LFA1,LFB1.PARAMETERS:COUNTRY . . . .
AT SELECTION-SCREEN ON KD_BUKRS.
MESSAGE E . . . .
AT SELECTION-SCREEN ON COUNTRY.
MESSAGE E . . . .
Reports. Pantallas de selección, eventos y otros
Mensaje de error en la Pantalla de Selección
AT SELECTION-SCREEN
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
43
REPORT B170D037.
WRITE : TEXT-001, 10 SY-DATUM..., ‘Time’(002), 10 SY-UZEIT....
Símbolos texto
Elementos texto
No Texto Lenguaje E
001 Date002 Time
Date 31.01.1192Time 13:25:07
Símbolos de texto
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
44
Reports. Pantallas de selección, eventos y otros
Ejemplo de pantalla de selección
SELECT-OPTIONS
PARAMETERS
RADIOBUTTON
CHECKBOX
CAMPO DE SALIDA
BLOQUES
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
45
Reports. Pantallas de selección, eventos y otros
EVENTOS DE UN REPORT
El flujo de ejecución de un report se basa en eventos. Estos eventos están preestablecidos por el sistema y son (en orden de ejecución):
INITIALIZATIONAT SELECTION-SCREEN OUTPUTAT SELECTION-SCREEN [INPUT]START-OF-SELECTIONEND-OF-SELECTION
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
46
Reports. Pantallas de selección, eventos y otros
INITIALIZATION
El evento INITIALIZATION se procesa una única vez en la ejecución de un report. Su momento de ejecución es justo al comienzo del report, es decir, nada más llamarse el report se ejecuta inmediatamente el evento INITIALIZATION.
Se usa principalmente para informar datos (variables) del programa que son independientes de los datos de selección.
Un uso muy relevante de este evento es informar valores por defecto para la pantalla de selección, valores que únicamente en tiempo de ejecución podemos disponer de ellos.
Ejemplo: Si en una pantalla de selección aparece el campo sociedad, queremos proponerle un valor por defecto para este campo, pero queremos que el valor informado dependa del usuario; tendremos que usar el evento INITIALIZATION.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
47
Reports. Pantallas de selección, eventos y otros
AT SELECTION-SCREEN OUTPUT
El evento AT SELECTION-SCREEN OUTPUT se procesa justo antes de aparecer la pantalla de selección (posterior al evento INITIALIZATION), y se reprocesa cada vez que aparece la pantalla de selección.
Consideración: La pantalla de selección se llama a sí misma hasta que pulsemos . Por tanto, este evento se ejecutará cada vez que vuelva a aparecer la pantalla de selección.
Se usa principalmente para la creación de pantallas de selección dinámicas. Usando loop at screen podremos hacer desaparecer campos, hacerlos obligatorios, etc en tiempo de ejecución.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
48
Reports. Pantallas de selección, eventos y otros
AT SELECTION-SCREEN [INPUT]
El evento AT SELECTION-SCREEN INPUT se procesa justo cuando el usuario actua sobre la pantalla de selección (pulsando enter, ejecutando, etc), igual que ocurre con el evento anterior se reprocesa con cada ejecución de la pantalla de selección.
Su uso principal es la validación de los campos introducidos en la pantalla de selección. Es súmamente importante validar los campos, ya que procesar el report con valores incorrectos no solo nos hace perder el tiempo sino que también podría ocasionar resultados inesperados.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
49
Reports. Pantallas de selección, eventos y otros
START-OF-SELECTION
El evento START-OF-SELECTION se procesa secuencialmente después de pulsar ejecutar en la pantalla de selección. En este evento se procesa todo el cuerpo principal de programa.
Como su nombre indica su principal finalidad es la de seleccionar y guardar (en datos/tablas internos) los datos que posteriormente usaremos para el resultado del programa (listado, batchinput, etc). La caída en desuso del evento END-OF-SELECTION le proporciona a este evento todo el peso del cuerpo del programa.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
50
Reports. Pantallas de selección, eventos y otros
END-OF-SELECTION
El evento END-OF-SELECTION se procesa secuencialmente después de finalizar el START-OF-SELECTION. En él se debería procesar la información seleccionada en el evento anterior para realizar el resultado esperado.
Este evento ha caído en desuso principalmente por no ofrecer una dinámica especial a la ejecución del programa.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
51
Reports. Pantallas de selección, eventos y otros
Sentencias / Comandos
Asignación de valores
REPORT B170D045.
DATA: NAME1(25),SORT_NAME(10),FIRST_LINE(4) TYPE N,NEXT_LINE TYPE I.
MOVE ‘SAP’ TO NAME1.MOVE 5 TO FIRST_LINE.COMPUTE NEXT_LINE = FIRST_LINE + 1.SORT_NAME = NAME1.ADD 1 TO NEXT_LINE.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
52
Reports. Pantallas de selección, eventos y otros
Sentencias / Comandos
Agrupar instrucciones
WRITE ‘XYZ’.WRITE NAME.WRITE COUNTER.
WRITE : ‘XYZ’ , NAME, COUNTER.
ADD 1 TO COUNTER1.ADD 1 TO COUNTER2.ADD 1 TO COUNTER3.
ADD 1 TO : COUNTER1, COUNTER2, COUNTER3.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
53
Reports. Pantallas de selección, eventos y otros
Sentencias / Comandos
Comentarios
DATA: SUM TYPE P, “Campo de totales
COUNTER TYPE P.
* Nueva Cuenta* Inicializa el campo de totales
CLEAR SUM.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
54
Reports. Pantallas de selección, eventos y otros
Sentencias / Comandos
Expresiones aritméticas
PROGRAM B170D046.
DATA: COUNTER TYPE I,AMOUNT TYPE P VALUE 1000,SUM TYPE P,RESULT TYPE P,NUMBER(2) TYPE C VALUE ‘99’,ROOT TYPE F.
COMPUTE: COUNTER = COUNTER + 2,RESULT = AMOUNT * COUNTER.
SUM = RESULT + NUMBER - COUNTER.RESULT = COUNTER * ( AMOUNT + NUMBER ).ROOT = SQRT( NUMBER + COUNTER ).
Operadores
Funciones
+ - / * DIV MOD
SQRT EXP LOG SIN COS STRLEN
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
55
Reports. Pantallas de selección, eventos y otros
Sentencias / Comandos
Cálculos con fechas PROGRAM B170D047.DATA: DIFF TYPE P,
DATE_1 TYPE D,DATE_2 TYPE D.
DATE_1 = SY-DATUM.DATE_2 = SY-DATUM.
* Primer día del mesDATE_2 + 6(2) = ‘01’.
*Último día del mes anteriorDATE_2 = DATE_2 - 1.
* Diferencia entre fechasDIFF = DATE_1 - DATE_2.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
56
Reports. Pantallas de selección, eventos y otros
Sentencias / Comandos
Instrucción Write
REPORT B170D031.WRITE : ‘*************************************’.SKIP 1.WRITE : ‘Date’, SY-DATUM.WRITE : ‘Time’, SY-UZEIT.SKIP 2.WRITE : ‘*************************************’.
31.01.1992 1 ---------------------------------------------------------------------------------------------------------------------------------
**************************************************************************************************
Date 31.01.1992 Time 14:46:10
**************************************************************************************************
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
57
Reports. Pantallas de selección, eventos y otros
Sentencias / ComandosEspecificar formatos
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
58
Reports. Pantallas de selección, eventos y otros
Sentencias / ComandosInstrucciones de control
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
59
IF <expresión lógica>.
IF < expresión lógica >.
sentenciasENDIF.
sentencias
ELSE.
sentencias
ENDIF.
IF < expresión lógica >.
sentencias
ELSEIF < expresión lógica >.
sentencias
ENDIF.
ELSE.
sentencias
Sentencia IF
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
60
DATA: START TYPE D,SUM1 TYPE F,SUM2 TYPE P.
IF START IS INITIAL . . .IF SUM1 GT SUM2 . . . IS SUM1 BETWEEN 0 AND 100 . . .
Representación
EQ =
NE <> ><
GT >
GE >= =>
LT <
LE <= =<
BETWEEN f1 AND f2
IS INITIAL
Significado
Igual a
Distinto de
Mayor que
Mayor o igual que
Menor que
Menor o igual que
Dentro del intervalo (incl.)
Es un valor inicial
Operadores relacionales
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
61
<f1> CO <f2> contiene sólo: f1 contiene sólocaracteres de f2.
ACCOUNT CO ‘0123456789_’
<f1> CA <f2> contiene alguno: f1 contiene al menosun carácter de f2.
<f1> CS <f2> contiene la cadena: f1 contienela cadena f2.
‘ABCDE’ CS ‘DE’
<f1> CP <f2> contiene patrón: f1 corresponde almodelo f2.Modelo:
* cualquier cadena‘ABXDE’ CP ‘*B+D*’ + cualquier carácter
# símbolo de escape
Comparación de caracteres
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
62
COUNTER GE 0
COUNTER GT 0 ANDFLAG IS INITIAL
( FLAG1 NE SPACE OR FLAG2 NE SPACE ) ANDCOUNTER BETWEEN 0 AND 100
COUNTER EQ 0 AND NOT( FLAG1 EQ SPACE AND FLAG2 EQ SPACE )
Expresiones lógicas
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
63
ON CHANGE OF <campo>.
Tabla: TABNACOUNTRY NAME1
PROGRAM B170D071.TABLES: TABNA.
SELECT * FROM TABNA.ON CHANGE OF TABNA-COUNTRY.
NEW-PAGE.ENDON.WRITE: / TABNA-COUNTRY,
TABNA-NAME1, . . . .
A
A
D
Smith
Jones
Young
La instrucción ON CHANGE OF
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
64
CASE COUNTRY.
WHEN ‘D’.
WHEN ‘USA’.
WHEN ’GB’.
WHEN OTHERS.
ENDCASE.
Sentencia CASE
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
65
DO <n> TIMES.
sentencias
ENDDO.
SY-INDEX Índice del bucle
Bucle DO
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
66
WHILE <expresión lógica>.
sentencias
ENDWHILE.
WHILE COUNTER > 0.
SUBTRACT 1 FROM COUNTER.
ENDWHILE.
SY-INDEX Índice del bucle
Bucle WHILE
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
67
CHECK <expresión lógica>.
1. CHECK dentro de un bucle.
WHILE COUNTER GT 0.
sentencias
ENDWHILE.
CHECK FLAG NE SPACE.
sentencias
2. CHECK fuera de un bucle.
sentencias
CHECK <condición>.
sentencias
Sentencia CHECK
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
68
EXIT.
1. EXIT dentro de un bucle.
2. EXIT fuera de un bucle.
sentencias
IF . . . .EXIT.
ENDIF.
sentencias
DO.
sentencias
ENDDO.
IF COUNTER GE 100.EXIT.
ENDIF.sentencias
Sentencia EXIT
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
69
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
70
Modularización en Abap/4: Módulos de función
MÓDULOS DE FUNCIÓN (Trans. SE37)
Como habíamos descrito en el tipo de programas grupo de funciones, en este grupo se definen los módulos de función. Estas funciones son accesibles desde cualquier programa usando la sentencia CALL FUNCTION y es una forma efectiva de modularizar código.
El que dentro de un grupo de función todas sus funciones tengan acceso a los mismos datos globales los otorgan de un gran dinamismo. En ejemplo de ello son las funciones messages_initialize, message_store y messages_show; siendo estas tres funciones integrantes del mismo grupo de función y cuya utilización sigue un patrón establecido.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
71
Modularización en Abap/4: Módulos de función
INTERFAZ DE UN MÓDULO DE FUNCIÓN
PARÁMETROS IMPORT:
Son los valores de entrada a la función, pueden ser o no opcionales (en caso de serlo se le propondrá un valor por defecto).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
72
Modularización en Abap/4: Módulos de función
INTERFAZ DE UN MÓDULO DE FUNCIÓN
PARÁMETROS EXPORT:
Son los valores de salida (respuesta) de la función.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
73
Modularización en Abap/4: Módulos de función
INTERFAZ DE UN MÓDULO DE FUNCIÓN
PARÁMETROS MODIF (CHANGING):
Son los valores de entrada y salida, se espera que tenga unos valores durante la llamada a la función y que estos valores cambien durante su proceso.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
74
Modularización en Abap/4: Módulos de función
INTERFAZ DE UN MÓDULO DE FUNCIÓN
PARÁMETROS TABLES:
Son parámetros de entrada y salida de tablas. El uso de parámetros tables está cayendo en desuso debido a la mayor coherencia de usar parámetros import/export de tipo tabla. Sin embargo, continua su uso por compatibilidad de programas antiguos.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
75
Modularización en Abap/4: Módulos de función
INTERFAZ DE UN MÓDULO DE FUNCIÓN
EXCEPTIONS:
Las excepciones son los “errores” que devuelve la función. Dentro de la función mediante la sentencia RAISE se devuelve una excepción que se traduce en un sy-subrc distinto a 0 en el programa de llamada.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
76
Modularización en Abap/4: Módulos de función
LLAMADA A UN MÓDULO DE FUNCIÓN
SENTENCIA CALL FUNCTION
Mediante la sentencia call function hacemos una llamada a un módulo de función existente en el sistema. La sintaxis de la sentencia es:
Un parámetro import de un módulo de función será exporting en la llamada, igual pasa para parámetros export.
Existe una muy amplia biblioteca de funciones estándar que se pueden usar en nuestros desarrollos a medida, especialmente las funciones de acceso remoto BAPIs.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
77
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
78
Modularización en Abap/4: Rutinas form
SUBRUTINAS FORMsUna rutina form es un modo de modularización y encapsulamiento de código muy útil en el desarrollo de un programa. La principal diferencia con los módulos de función es que su finalidad no es la creación de bibliotecas sino ordenar y simplificar el código de un programa.La sentencia form define una subrutina y la sentencia perform realiza la llamada a la misma. Igual que los módulos de función las subrutinas usan parámetros de llamada y devuelta, que hacen posible la reutilización de código.También son usadas las subrutinas con fines de ordenación del código. Por ejemplo, dentro del evento start-of-selection podríamos encontrarnos únicamente la llamada a subrutinas rutina_selección, rutina_proceso, rutina_log_del_proceso.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
79
Modularización en Abap/4: Rutinas form
IMPLEMENTACIÓN DE UNA SUBRUTINA
SENTENCIA FORM
Mediante la sentencia form implementaremos una subrutina en ABAP. La sintaxis de la sentencia es:
Los parámetros tables son de entrada y salida y constituyen tablas (en desuso), using son parametros de entrada (value) (por valor) o de entrada y salida (sin value) (por referencia), changing son valores de entrada y salida que también pueden ser por valor o por referencia, raising son excepciones devueltas por la subrutina.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
80
Modularización en Abap/4: Rutinas form
LLAMADA A UNA SUBRUTINA
SENTENCIA PERFORM
Mediante la sentencia perform realizamos una llamada a una subrutina en ABAP. La sintaxis de la sentencia es:
Los parámetros se usan de igual modo que en la implementación a excepción de los raising que no es necesario replicarlos en la llamada.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
81
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
82
Acceso a la base de datos
Sentencia SELECTLa sentencia SELECT se usa para acceder a los datos de la base de datos, permitiendo además acceder a más de una tabla mediante join (inner/left outer).
Entre la sentencia SELECT y ENDSELECT se crea un bucle que se procesa por cada registro encontrado en la tabla.
Podemos acceder a un único registro SELECT SINGLE, recoger todos los registros resultantes en una tabla INTO TABLE (APPENDING TABLE), ordenar los registros resultantes ORDER BY, etc.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
83
Diccionario
Base de Datos
SELECT . . .
Definición Datos
ListListado
Sentencia Select
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
85
REPORT B170D062.TABLES: TABNA.SELECT * FROM TABNA
WHERE COUNTRY = ‘USA’.
Sentencias
ENDSELECT.IF SY-SUBRC NE 0.
Sentencias
ENDIF.
Sentencia SELECT
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
86
REPORT B170D141.TABLES: TABNA.
SELECT SINGLE * FROM TABNAWHERE COUNTRY EQ ‘D’ AND ID EQ ‘00000002’.
IF SY-SUBRC = 0.WRITE: TABNA-COUNTRY, TABNA-ID,TABNA-NAME1.
ENDIF.
Ejemplo: Acceso simple
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
87
REPORT B170D142.TABLES: TABNA.
SELECT * FROM TABNA WHERE COUNTRY EQ ‘USA’ AND ID BETWEEN ‘00000001’ AND ‘00000010’.
WRITE:/TABNA-COUNTRY, TABNA-ID,TABNA-NAME1.
ENDSELECT.
IF SY-SUBRC > 0. WRITE:/ ‘¡No hay datos que cumplan las restricciones!”.
ENDIF.
Ejemplo: Bucle con restricciones
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
88
SELECT * FROM <table>
WHERE <campo tabla 1> < operador relacional > < campo 1> AND <campo tabla 2> < operador relacional > < campo 2>
AND <campo tabla n> < operador relacional > < campo n>
ENDSELECT.
<operador relacional>:
EQGELE
NEGTLT
=> =< =
< >><
= >= <
> <
Sintaxis: Select
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
89
SELECT * FROM <tabla> WHERE <campo tabla>
BETWEEN <campo 1> AND <campo 2>
LIKE <con ‘%’ y ‘_’ masked literal>
IN (<campo 1>, <campo 2>, . . . , <campo n>)
REPORT B170D143.TABLES: T001.
SELECT * FROM T001WHERE BUKRS LIKE ‘0000_’AND BUTXT LIKE ‘SAP%’.WRITE:/ T001.
ENDSELECT.
IF SY-SUBRC NE 0. WRITE ‘¡No hay datos que cumplan las restricciones!’
ENDIF.
Sintaxis: Intervalos, instrucción LIKE, listas.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
90
REPORT B170D143.TABLES: T001.
SELECT * FROM T001WHERE BUKRS LIKE ‘0000_’
AND BUTXT LIKE ‘SAP%’.WRITE:/ T001.
ENDSELECT.
IF SY-SUBRC NE 0.WRITE ‘No hay datos que cumplan las restricciones:’
ENDIF.
Ejemplo:Instrucción LIKE
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
91
DATA: BEGIN OF <nombre>, <declaración de campo(s)>,END OF <nombre>.
REPORT B170D081.DATA: AMOUNT(5) TYPE P,
BEGIN OF ADDRESS,FLAG TYPE C,ID LIKE TABNA-ID,NAME LIKE TABNA-NAME1,CITY LIKE TABNA-CITY,AMOUNT1 LIKE AMOUNT,
END OF ADDRESS.
MOVE ‘X’ TO ADDRESS-FLAG.ADD AMOUNT TO ADDRESS-AMOUNT1.WRITE: ADDRESS-FLAG, ADDRESS-ID,
ADDRESS-AMOUNT1.
Definiendo una estructura
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
92
MOVE-CORRESPONDING <f1> TO <f2>.
REPORT B170D082.TABLES: TABNA.DATA: BEGIN OF ADDRESS,
FLAG TYPE C,ID LIKE TABNA-ID,NAME LIKE TABNA-NAME1,CITY LIKE TABNA-CITY,. . . ,
END OF ADDRESS.
TABNA ID NAME1 CITY
MOVE-CORRESPONDING TABNA TO ADDRESS.
ADDRESS ID NAME CITYFLAG
CLEAR ADDRESS.
X
Copia de campo a campo
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
93
Acceso a la base de datos
Inner/Left Outer JoinEs muy útil (y óptimo) el acceder mediante join a registros de varias tablas. La sintaxis para realizar un join es:
Si queremos acceder a los datos de cabecera y ctas. de mayor para documento contable, realizaríamos un join entre las tablas BKPF y BSIS; realizando la unión entre los campos bukrs, gjahr y belnr.
Inner Join es un modo de unión en el que solo tendremos los resultados si en todas las tablas tenemos al menos un registro correcto; Left Outer Join nos ofrece todos los registros de todas las tablas que cumplan las condiciones, aunque haya registros de una tabla que no unan con las otras tablas, estos registros aparecerán.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
94
Acceso a la base de datos
Sentencia INSERTLa sentencia INSERT se usa para insertar registros en una tabla de la base de datos.
Hay que considerar que no siempre vamos a poder insertar un registro en una tabla, por ejemplo, si intentamos insertar un registro donde los campos clave coinciden con un registro ya existente en la tabla, la sentencia nos devolverá un sy-subrc distinto a 0.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
95
Acceso a la base de datos
Sentencia UPDATELa sentencia UPDATE se usa para modificar el valor de campos (no clave) de una tabla.
Dentro de set podemos realizar cálculos entre campos de la tabla y expresiones sencillas.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
96
Acceso a la base de datos
Sentencia MODIFYLa sentencia MODIFY se usa para modificar todos los campos no clave de un registro. A diferencia del update en modify no podemos especificar qué campos queremos modificar, con lo que la modificación es masiva de todos los campos.
El workarea origen tendrá la misma estructura de campos que la tabla y contendrá los campos clave informados. El registro de la tabla modificado será el que tenga los campos clave igual que el workarea, en caso de no existir ese registro, el registro se creará en la tabla (igual que si hubieramos realizado un insert).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
97
Acceso a la base de datos
Sentencia DELETELa sentencia DELETE se usa para eliminar registros de una tabla de la base de datos.
Nos devolvera un sy-subrc distinto a 0 si no existe el registro a borrar, es decir, la combinación de campos clave del source no existe en la tabla.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
98
DESARROLLO DE REPORTS
Tratamiento de tablas internas
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
99
APPEND <tabla>.
D 400,000
DUSAGBAGB
7,800,0001,000,000
500,000140,000
50,000
País Ventas
Línea de cabecera1234567
APPEND <tabla> SORTED BY <campo>.
D 400,000USAGBDGBA
1,000,000500,000
7,800,00050,000
140,000 País Ventas
Línea de cabecera1234567
Rellenando una tabla interna - I
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
100
REPORT B170D083.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 5,
COUNTRY LIKE TABNA-COUNTRY,ID LIKE TABNA-ID,SALES LIKE TABNA-SALES,
END OF TAB.SELECT * FROM TABNA.
MOVE-CORRESPONDING TABNA TO TAB.APPEND TAB.
ENDSELECT.
REPORT B170D084.
SELECT * FROM TABNA.MOVE-CORRESPONDING TABNA TO TAB.APPEND TAB SORTED BY SALES.
ENDSELECT.
Rellenando una tabla Interna - II
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
101
COLLECT <tabla>.
País Ventas (Tipo P)
Línea de cabecera1234567
D 400,000
USAGBD
1,000,000500,000
7,800,000 8,200,000
REPORT B170D085.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 10,
COUNTRY LIKE TABNA-COUNTRY,SALES LIKE TABNA-SALES
END OF TAB.SELECT * FROM TABNA.
MOVE-CORRESPONDING TABNA TO TAB.COLLECT TAB.
ENDSELECT.
Condensando datos en una tabla Interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
102
SORT <tabla> BY <campo1> <campo 2> . . . .
REPORT B170D086.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 10,
COUNTRY LIKE TABNA-COUNTRY,ID LIKE TABNA-ID,NAME1 LIKE TABNA-NAME1,SALES LIKE TABNA-SALES,
END OF TAB.
* Una vez que la tabla está llena, se ordena según el orden de las columnasSORT TAB.* O se ordena por unas columnas determinadas:SORT TAB BY COUNTRY NAME1.* O se ordena en orden Ascendente o Descendente:SORT TAB BY COUNTRY ASCENDING
NAME1 DESCENDING.
Ordenando una tabla Interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
103
REPORT B170D087.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 5,
COUNTRY LIKE TABNA-COUNTRY,CITY LIKE TABNA-CITY,NAME1 LIKE TABNA-NAME1,SALES LIKE TABNA-SALES,
END OF TAB.
LOOP AT TAB.WRITE: / SY-TABIX, TAB-COUNTRY, TAB-CITY, . . . .
ENDLOOP.
LOOP AT TAB WHERE COUNTRY BETWEEN ‘A’ AND ‘D’.WRITE: /TAB-COUNTRY, TAB-CITY, . . . .
ENDLOOP.
LOOP AT <tabla>. . . . ENDLOOP.
Tratamiento de una tabla Interna
SY-TABIXSY-TABIX
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
104
REPORT B180D06B.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 200.
INCLUDE STRUCTURE TABNA.DATA: END OF TAB.* atención al añadido para un INCLUDE.SELECT * FROM TABNA INTO TABLE TAB
WHERE COUNTRY = ‘USA’.LOOP AT TAB.
WRITE: /TAB-COUNTRY,TAB-ID,TAB-NAME1.
END LOOP.
Lectura de tablas de la Base de datos mediante tablas internas.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
105
REPORT B170D08A.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 5,
COUNTRY LIKE TABNA-COUNTRY,CITY LIKE TABNA-CITY,NAME1 LIKE TABNA-NAME1,SALES LIKE TABNA-SALES,
END OF TAB.. . . .SORT TAB BY COUNTRY CITY.LOOP AT TAB.
AT NEW COUNTRY.NEW-PAGE.WRITE: TAB-COUNTRY.ULINE. /(3). SKIP.
ENDAT.WRITE: / TAB-CITY, TAB-NAME1, TAB-SALES.
AT END OF CITY.ULINE. /(3). SKIP.
ENDAT.AT END OF COUNTRY.SUM.
WRITE: / TAB-COUNTRY, TAB-SALES UNDER TAB-SALES.ENDAT.
ENDLOOP.
AT FIRST. SUM . . .ENDAT.
AT NEW <campo>. SUM . . .ENDAT.
AT END OF <campo>. SUM . . .ENDAT.
AT LAST. SUM. . .ENDAT.
AT FIRST. SUM . . .ENDAT.
AT NEW <campo>. SUM . . .ENDAT.
AT END OF <campo>. SUM . . .ENDAT.
AT LAST. SUM. . .ENDAT.
Control Breaks
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
106
READ TABLE <tabla> . . . .
REPORT B170D08D.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 5,
COUNTRY LIKE TABNA-COUNTRY,CITY LIKE TABNA-CITY,NAME1 LIKE TABNA-NAME1,SALES LIKE TABNA-SALES,
END OF TAB.TAB_INDEX TYPE I.
. . . .CLEAR TAB.MOVE ‘D’ TO TAB-COUNTRY.MOVE ‘ABC’ TO TAB-NAME1.READ TABLE TAB.IF SY-SUBRC NE 0.
READ TABLE TAB WITH KEY ‘D Berlin’.
READ TABLE TAB WITH KEY ‘USA’ BINARY SEARCH.TAB_INDEX = SY-TABIX + 1.READ TABLE TAB INDEX TAB_INDEX.IF SY-SUBRC = 0.
Leyendo un registro de una tabla interna.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
107
INSERT <tabla> INDEX <i>.MODIFY <tabla> INDEX <i>.DELETE <tabla> INDEX <i>.
REPORT B170D08E.TABLES:TABNA.DATA: BEGIN OF TAB OCCURS 5,
COUNTRY LIKE TABNA-COUNTRY,CITY LIKE TABNA-CITY,NAME1 LIKE TABNA-NAME1,SALES LIKE TABNA-SALES,
END OF TAB.. . . .READ TABLE TAB INDEX 1.MOVE ‘ABC’ TO TAB-NAME1.MODIFY TAB INDEX SY-TABIX.IF SY-SUBRC NE 0, . . . ENDIF.
INSERT TAB INDEX 1.
DELETE TAB INDEX TAB_INDEX.IF SY-SUBRC NE 0. . . . ENDIF.
Modificando una tabla interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
108
REPORT B170D08H.
LOOP AT <tabla>.
INSERT<tabla>.
MODIFY <tabla>.
DELETE <tabla>.
ENDLOOP.
Modificando una tabla interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
109
CLEAR <tabla>.
Inicializa la cabecera
REFRESH <tabla>.
Borra todas las líneasNo libera espacio almacenamientoSe libera mem. paginamiento
FREE <tabla>.
Borra todas las líneasLibera espacio almacenamiento
La tabla no se modifica.
Borrando una tabla Interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
110
DESCRIBE TABLE <tabla> LINES <lcnt> OCCURS <ocnt>.
REPORT B170D08F.TABLES: TABNA.DATA: BEGIN OF TAB OCCURS 5,
COUNTRY LIKE TABNA-COUNTRY,CITY LIKE TABNA-CITY,NAME1 LIKE TABNA-NAME1,SALES LIKE TABNA-SALES,
END OF TAB.LINE_COUNT TYPE I. “Contiene num. líneasOCCURS_COUNT TYPE I. “Contiene num. lín. reserv.
DESCRIBE TABLE TABLINES LINE_COUNTOCCURS OCCURS_COUNT. “El valor será 5
Obtener información de una tabla interna
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
112
PROGRAM RSDEM001
Calculate Tax
Calculate Tax
PROGRAM RSDEM002
Llamada a calculate_tax
Llamada a calculate_tax
SubrutinaCalculate_tax
Introducción a Subrutinas
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
113
PROGRAM RSDEM000.
99a1
1 a2 a3
Llamada a calculate_taxTransferir valores de los campos a1 a2Obtener el valor del campo a3
Parámetros Actuales a1 a2 a3
Parámetros formales f1 f2 f3
Paso de parámetros 1 1 2
1 Paso por Valor 2 Paso por referencia
subrutina calculate_tax 99 1 f1 f2 f3 2
f3 = f1 + f2...........
2
Subrutinas: Transferencia de valores
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
114
DESARROLLO DE REPORTS
Diseño de listados
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
115
REPORT <nombre>
LINE-SIZE <n>.
LINE-COUNT <m(p)>
PAGE-COUNT <o>.
REPORT B190D033LINE-SIZE 132LINE-COUNT 65(2)PAGE-COUNT 20.
132
65
1 2 3 ... MAX. DE 20 PAGINAS
Formato de Página
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
116
WRITE <campo> <opción1> <opción2> . . . .
REPORT B190D032.
WRITE: BSIK-BELNR,BSIK-BLDAT DD/MM/YYYY,BSIK-DMBTR CURRENCY LOCAL,SY-WAERS,BSIK-WRBTR CURRENCY SY-WAERS NO-ZERO.
Opciones de edición
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
117
SY-TITLE Título del Report SY-COLS Columnas en pantalla
SY-PAGCT Número Max. de páginas SY-PAGNO Número actual de página
SY-LINCT Número de líneas SY-LINNO Número de línea actual
SY-LINSZ Tamaño de línea SY-COLNO Número de columna actual
SY-SROWS Líneas en pantalla
Campos del sistema usados para la Generación de listados
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
118
NEW-LINE.
SKIP <n>.
SKIP TO LINE <n>.
POSITION <n>.
NEW-PAGE.
Sentencias para el diseño de listados
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
119
DESARROLLO DE REPORTS
Tratamiento de ficheros
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
120
OPEN DATASET <nombre del fichero> FOR INPUTIN BINARY MODEIN TEXT MODE
READ DATASET <fichero> INTO <registro> LENGTH <longitud>
CLOSE DATASET <fichero>
Lectura de ficheros
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
121
OPEN DATASET <nombre del fichero> FOR OUTPUTFOR APPENDINGIN BINARY MODEIN TEXT MODE
TRANSFER <registro> TO <fichero> LENGTH <longitud>
CLOSE DATASET <fichero>
Escritura de ficheros
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
122
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
123
Listas. Simples, interactivas y ALV
Listas SimplesLos listados simples de SAP se basan en la sentencia WRITE y provocan una salida por pantalla (estilo texto) muy sencillo e imprimible.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
124
Listas. Simples, interactivas y ALV
Listas Simples (continuación)Como hemos podido ver estos listados tienen un layout bastante sencillo aunque eficaz. En la barra de pulsadores se le pueden agregar distintas herramientas como ordenación, totales, etc. aunque estas herramientas se han de programar a parte.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
125
Listas. Simples, interactivas y ALV
Listas interactivasBasados en los listados simples (clásicos) y haciendo uso de las sentencias WRITE y HIDE, podemos guardar información asociados a las líneas del informe. Esta información nos servirá con distintas finalidades, como navegar a otros informes, modificar en listado, etc.
El layout del informe no cambia y sigue siendo sencillo, igualmente no hay que olvidar que estos listados son fáciles de programar y muy efectivos.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
126
Listas. Simples, interactivas y ALV
Listas ALVBasados en la programación a objetos (ABAP Objects) son los listados de nueva generación y ofrecen una cantidad ingente de herramientas ya incluídas en la clase (cl_gui_alv_grid).
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
127
Listas. Simples, interactivas y ALV
Listas ALV (continuación)Con un layout amigable y óptimo los listados ALV están dejando obsoleto el uso de listados clásicos (ya sean interactivos o no). La programación de un ALV puede llegar a ser muy sencilla, y al ser muy ampliable nos permite obtener todo tipo de resultados.Incluso se pueden realizar listados ALV editables, es decir, listados donde podremos insertar valores.Para la creación de ALV, además de la clase ya mencionada cl_gui_alv_grid existe un módulo de función reuse_alv_grid_display que nos facilita el uso de ALV sin tener que usar programación a objetos.Estos listados pueden ser totalmente interactivos y al estar basados en programación a objetos (eventos) podemos tener un control total de la información y resultados obtenidos. Sin ningún tipo de esfuerzo adicional tendremos herramientas de ordenación, totales/subtotales, incluso presentar la información en excel, word, etc.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
128
TransaccionesLas Transacciones son métodos abreviados de llamar a los programas o en el caso de los ModulPool, son la única forma de llamarlos. Además estas se utilizan para hacer de intermediario entre los menús y los programas.
Diálogo Esta es la única forma de poder ejecutar un programa de tipo "M" (ModulPool).
Report Asignandola a un report el usuario podrá llamar a nuestro programa sin conocer su verdadero nombre, así mismo cuando podremos colgar nuestros programas en menús.
De Variantes Cuando un programa ya tiene una serie de variantes guardadas, podemos llamarlo de una forma transparente mediante esta opción.
Menú área Si nuestra transacción es un menú de area, desde aquí nos va a enlazar con él.
Parámetros Esta va a ser una transacción para hacer una especie de miniBacth-Input, ya que podemos indicar los campos de la dynpro que vamos a rellenar y con que los vamos a rellenar.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
129
Fundamentos de la programación Objetos de desarrollo
ProgramasModulpoolsDynpros
Lógica de proceso
Status de superficie
Modulos
Funciones
Transacciones
Menús de ambito
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
130
PBO
PAI
STATUS de SUPERFICIE
Lógica de proceso
Transacciones - II
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
131
Lógica de proceso
Transacciones - III
PBO
PAI
STATUS 001
Titulos
Teclas de funciones
Programa
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
132
Modulpool
Un Modul Pool es un programa interactivo que contiene más de una pantalla de interacción o contiene elementos complejos del tipo tablas y pestañas o incluso que su disposición no cumple las normas de los parameters y los select-options. Además estos programas constan de una flow-logic diferente al tradicional. Un Modul Pool se basa en la antigua técnica de los pantallazos, es decir, se ejecuta un código antes de mostrar la pantalla, se muestra la pantalla y por último cuando el usuario ha acabado con la pantalla (ha pulsado una tecla de función) el control se devuelve otra vez al programa. Esto sigue hasta un bucle infinito, hasta que se le diga a la pantalla que no se muestre mas. Esto procresos pre-post-pantalla se conocen con el nombre de PBO (Process Before Output) y PAI (Process After Input). Estos dos procesos son la lógica de las pantallas. Ya se verá que cuando se cree el Flow-Logic de la pantalla nos los crea automáticamente. Para ello SAP utiliza las sentencias process, el process acaba cuando comienza otro process. Además dentro de estas sentencias no se puede escribir ABAP estandar, sino que tienen que utilizarse otro sublenguaje (mismo ABAP) que sólo va a ser utilizado aqui. Como en los process sólo están pensados para controlar la lógica de las pantallas, sólo utilizaremos directivas de pantallas, tales como:
•FIELD, nos permite acceder a un campo. •CHAIN, agrupador. •MODULE, llama a un grupo de funciones.
Estas son las directivas fáciles, ya veremos que para poder utilizar subscreens utilizaremos directivas del tipo CALL SUBSCREEN o también, para poder utilizar las tables control utilizaremos los LOOP. En definitiva, en los Modul Pool se utiliza un pseudo-código asociado a sus pantallas y que luego se convertirá en ABAP puro y su funcionamiento es mediante dos procesos, un pre-pantalla, donde tendremos la opción de rellenar los campos de pantalla y un post-pantalla donde seremos capaz de leer los datos que el usuario ha llenado.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
133
PROCESSDefiniciónSentencia de evento que indica el inicio del proceso PBO. Sentencia de evento que indica el inicio del proceso PAI. Sentencia de evento que marca el inicio del proceso donde se definen las ayudas no estándar de campos. Sentencia de evento que marca el inicio del proceso donde se definen los posibles valores para un campo.Sintaxis:PROCESS BEFORE OUTPUT. El proceso PBO se suele utilizar para iniciar los campo de la pantalla, posicionar el cursor, mostrar o esconder campo o cambiar los atributos de los campos dinámicamente.PROCESS AFTER INPUT. El proceso PAI se suele utilizar para validar las entradas realizadas por el usuario, procesar la posición del cursor o procesar las funciones activadas.PROCESS ON HELP-RESQUEST. Este evento se procesa si el usuario pulsa la tecla F1 estando el cursor sobre algún campo de la pantalla. Si el evento se define el campo en cuestión (sentencia FIELD), la ayuda que aparece será la programa en la transacción.PROCESS ON HELP-RESQUEST. Este evento se procesa si el usuario pulsa la tecla F4 estando el cursor sobre algún campo de la pantalla. Si el evento se define el campo en cuestión (sentencia FIELD), la ayuda que aparece será la programa en la transacción.
Process
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
134
Funciones
Una función de SAP es como una API de windows, puede considerarse como un trozo de código fuente independiente que se llama para realizar ciertas tares y obtener un resultado con ella. Un ejemplo claro puede ser el que tenemos en pantalla, convertir una moneda que tenemos en una tabla a moneda local, de esta forma en nuestro código no hace falta volver a picar este código, simplemente se hace una llamada a la función y obtenemos el resultado. Una función consta de cuatro partes, que en verdad son cinco.
•Un Grupo de Funciones: Es aquel que nos agrupa todas las funciones de un mismo tipo, por ejemplo, todas las conversiones de monedas, temperaturas, pesos, podrian estar agrupadas en un grupo conocido como "UNIDADES". •Interface, no es más que una forma rápida de crear la función y de definir todos los parámetros que va a utilizar, tanto de entrada como de salida, así como las excepciones de error. •El Texto fuente como su nombre indica es la codificación propia en ABAP. •Cuando se crea un grupo de funciones o se añade una función al grupo hay algo que siempre tienen en común, que son los datos globales, en dichos datos definimos vas variables, tablas y estructuras comunes para todas las funciones del grupo. •Y por último, el programa principal es aquel que alberga a todas las llamadas de todas las funciones.
Una de las ventajas de las funciones es que se pueden "testear" sin tener que hacer un programa, ya que SAP nos brinda la posibilidad de ello.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
135
Características de Módulos de Funciones
Módulos de funcionesMódulos de funciones
1. Son subrutinas con- una interfaz definida claramente - comprobación de tipos por parámetros- proceso de excepciones
2. Son localizables en una biblioteca de funciones
Grupo de funciones ADRS Utilización *
Módulo de función F1
Módulo de función F3
Módulo de función F2
Módulo de función F4
Grupo de funciones F0004 Utilización F
Módulo de función F5 Módulo de función F6
Grupo de funciones RPNA Utilización P
Módulo de función F7 Módulo de función F8
Módulo de función F9
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
136
REPORT B170D10A.
DATA: TEXT(20), HEAD(20),TEXT2(20).
CALL FUNCTION ‘STRING_SPLIT’EXPORTING
STRING = TEXTDELIMITER = ‘.’
IMPORTINGHEAD = HEADTAIL = TEXT2.
Llamada a un Módulo de función
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
137
ABAP/4 función STRING_SPLITparámetros de entrada Campo de referencia/ Defecto
estructura valorDELIMITER ‘-’STRING
parámetros de salida Campo de Referencia/estructura
HEAD TAIL
Tabla parámetros Referencia estructura
REPORT RSDEM000.. . . .
DATA: TEXT(20), HEAD(20).
CALL FUNCTION ‘STRING_SPLIT’EXPORTING STRING = TEXTIMPORTING HEAD = HEAD.
Descripción del Interfaz
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
138
ABAP/4 función STRING_SPLIT (Documentación)
CALL FUNCTION ‘STRING_SPLIT’EXPORTING DELIMITER = ‘-’
STRING = TEXTIMPORTING HEAD = HEAD
TAIL = TEXT2EXCEPTIONS NOT _FOUND = 1
NOT_VALID= 2OTHERS = 3.
CASE SY-SUBRC.WHEN 1 . . .WHEN 2 . . . WHEN 3 . . .
ENDCASE.
Texto corto
Parámetros
Excepciones Significado
NOT_FOUND ..........NOT_VALID ..........TOO_LONG ..........
FUNCTION STRING_SPLIT. . . .IF . . .
RAISE NOT_FOUND.ENDIF. . . .
Proceso de excepciones
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
139
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
140
Clases de mensajes
Clases de mensajesLas clases de mensajes (transacción SE91) son una herramienta de SAP que nos permite el mantenimiento de mensajes en SAP. Estos mensajes son traducibles a distintos idiomas.
La generación de clases de mensajes es el modo óptimo de mantener los mensajes de error, información, aviso, etc que queramos ofrecer al usuario en nuestras transacciones.
Una clase de mensajes puede contener hasta 1000 mensajes, con lo que son un agrupador de mensajes. Estos mensajes se distinguen entre sí por su índice (numérico de 3 cifras), y son usados en programas mediante la sentencia message. Además se le puede insertar un texto explicativo a un mensaje, este texto libre puede insertar toda la información que queramos ofrecer al usuario sobre dicho mensaje.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
141
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
142
Ejemplos
Ejemplos de programasSAP contiene todo un cúmulo de ejemplos de programas, de ergomonía, de rendimiento y de control. Accesibles desde la transacción SE38-Entorno-Ejemplos, o bien, mediante transacciones directas.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
143
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
144
Gestión de versiones
Gestión de versionesA diferencia de otras herramientas (y lenguajes) de programación, SAP viene incorporado con toda una gestión de versiones para todos sus objetos, ya sean, programas, tablas, clases, módulos de función, etc.
Mediante la gestión de versiones podemos comparar versiones, volver a versiones anteriores, etc. La gestión de versiones es accesible desde cualquiera de las transacciones de mantenimiento de programas (SE38), diccionario (SE11), etc en el menú de utilidades-versiones.
Esta herramienta nos previene de la pérdida de versiones de programas, y nos limita el trabajo de gestion en nuestros proyectos.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
145
Índice
Introducción. Programación en Abap/4 Tipos de programas y nomenclatura Declaración de tipos y datos Reports. Pantallas de selección, eventos y otros Modularización en Abap/4
Módulos de función Rutinas form
Acceso a la base de datos Listas. Simples, interactivas y ALV Clases de mensajes Ejemplos Gestión de versiones Procesos de carga masivos. BatchInput, BAPIs, LSMW
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
146
Procesos de carga masivos. BatchInput, BAPIs, LSMW
Procesos de carga masivosEn cualquier proyecto de SAP e incluso en mantenimientos se hace obligatoria la carga de datos desde el sistema antiguo. SAP ofrece para ello gran variedad de herramientas, aunque nos centraremos en las más usadas recientemente: batchinput, BAPIs y la transacción LSMW.
También existen directinput, transacción mass, y otras herramientas, aunque el uso de éstas están cayendo en desuso, o bien, tienen otra finalidad principal.
En este apartado de la asignatura únicamente vamos a presentar estas herramientas sin entrar en el detalle de su utilización.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
147
Procesos de carga masivos. BatchInput, BAPIs, LSMW BATCHINPUT
Los batchinput o juegos de datos (accesibles mediante la transacción SM35) constituyen una herramienta clásica pero muy poderosa de SAP. Los batchinput son un modo de procesar transacciones usando un ciclo previamente establecido, es decir, al procesar un batchinput éste entrará en transacciones, informará campos, introducirá comandos (pulsará botones, etc), y navegará entre las pantallas de dicha transacción, hasta realizar un proceso, es decir, actualizar (grabar) los datos en el sistema. Todo esto lo hará por sí mismo sin necesidad de ningún tipo de interacción por parte del usuario, incluso se pueden (mayormente se deben) ejecutar en proceso fondo.Estos batchinput se crean durante la ejecución de programas que establecen cuál va a ser la transacción, los campos informados (valores incluídos) y la navegación entre pantallas. El juego de datos se crea en momento de ejecución y no es posible acceder a los datos de la transacción destino sin el uso de la base de datos.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
148
Procesos de carga masivos. BatchInput, BAPIs, LSMW
BAPIsLas BAPIs (Businnes Application Programming Interface) forman parte de un conjunto de herramientas creadas por SAP para interconectar SAP con sistemas externos. Por ejemplo, es posible crear documentos contables en SAP desde una herramienta externa usando una BAPI.
Las BAPI’s son accesibles mediante la transacción BAPI, y aunque su finalidad principal no es la carga masiva de datos en el sistema, estos módulos de función son accesibles también desde nuestros programas en ABAP. Podemos usar BAPIs para crear documentos contables, para realizar facturas, entradas de mercancías, etc, siendo totalmente coherentes con las base de datos (SAP es quien informa los datos), y además nos devuelven todos los mensajes generados por la BAPI.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
149
Procesos de carga masivos. BatchInput, BAPIs, LSMW Transacción LSMW
La transacción LSMW (Legacy System Migration Workbech) es una potente herramienta SAP pensada exclusivamente para la migración de datos de un sistema antiguo (externo) a SAP.
Especificando que objetos queremos migrar (por ejemplo, clientes), y creando un mapeo de los datos orígenes con los campos destino, la transacción LSMW se basa en batchinput, directinput y IDOCs para cargar estos datos en el sistema.
Las cargas de objetos se agrupan en proyectos y subproyectos de migración especificando qué objetos vamos a migrar.
INT
RO
DU
CC
IÓN
DE
CO
DIG
O A
BA
P P
AR
A C
ON
SU
LT
OR
ES
150
Cristina Roca MuñozServicios de Outsourcing [email protected]
Avda. de Bruselas 35 28108 Alcobendas, Madrid EspañaT +34 91 480 50 00F +34 91 480 50 80www.indra.es