INDRA_Curso_ABAP_1

150
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

description

abad primera parte

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

84

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

111

DESARROLLO DE REPORTS

Subrutinas

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