global sap (1)

103
MANUAL DE INTRODUCCIÓN A LA PROGRAMACIÓN EN SAP LENGUAJE ABAP

Upload: argumentandohola

Post on 29-May-2017

255 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Global Sap (1)

MANUAL DE INTRODUCCIÓN

A LA PROGRAMACIÓN EN SAP

LENGUAJE ABAP

Page 2: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 2 de 103

Page 3: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 3 de 103

TABLA, ELEMENTO DE DATOS Y DOMINIO DE DATOS, ¿Cómo se relacionan? Una tabla es una estructura que almacena datos, un dominio es una norma que contiene la definición de datos y el elemento de datos contiene la definición de la etiqueta que tendrá el campo cuando sea utilizado en algún reporte. Como norma general de SAP, y para evitar redundancia de datos, al crear una tabla en SAP, lo recomendable es vincular el campo a crear a un elemento de datos del diccionario., y el elemento de datos debe estar vinculado a un Dominio de Datos. Para resumir lo anterior, se presenta el siguiente esquema: Un campo de una tabla está asociado a un elemento de datos y a su vez un elemento de datos está asociado a un dominio de datos. Si al momento de crear una tabla se detectara que uno de estos objetos no existe, se puede crear, lo cual se describe a continuación.

Campo de tabla

Elemento de Datos

Dominio de Datos

Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Page 4: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 4 de 103

DOMINIO DE DATOS.

Creación de un dominio de datos. Para crear un Dominio de datos se deberán realizar los siguientes pasos:

Paso 1: 1.- Desde la pantalla principal de SAP, en la parte superior ingresar la

transacción SE11 y luego presionar Intro.

A continuación se describe el paso 2.

Paso 2: Al hacer el paso anterior se desplegará la siguiente pantalla:

1

1

2

Page 5: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 5 de 103

1. Domain:: Marcar la opción Domain e ingresar el nombre del dominio a crear. 2. Create: Presionar el botón Create.

Al hacerlo, se desplegará la siguiente pantalla:

A continuación se describe el paso 3.

Paso 3: 1. Short text: corresponde a la descripción del dominio, por ej: Código de la

película, Nombre del cliente, etc. 2. Data type: corresponde al tipo de datos, por ej: CHAR, DATS, CURR.

Etc. Al hacer clic en la orilla derecha del recuadro se desplegará el listado de tipos de datos que existen en el sistema. No. Characters: número de caracteres que tendrá el campo (el largo).

Decimal places: número de decimales de entrada que admitirá el campo.

1

2

3

4

Page 6: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 6 de 103

3. Output lenght: número de caracteres que se desplegarán en pantalla, (se desplegarán siempre y cuando el campo contenga datos).

La opción Lowercase, sirve para indicar si el campo admitirá minúsculas,

si se marca admite Mayúsculas / Minúsculas, sino sólo admitirá Mayúsculas. 4. Value Ranges: Una vez completados los campos de pantalla indicados, y en caso que se desee que el tipo de datos despliegue posteriormente un listado de datos, por ej, si el dominio fuera para el código de continente, se podría crear un listado con los continentes (en caso contrario saltar al paso 6). Dicho listado aparecerá cuando el campo sea utilizado en algún reporte o formulario, para realizarlo se deberá presionar la pestaña Value Ranges.

Paso 4: Al realizar el paso anterior se desplegará la siguiente pantalla:

1

2

Administrator
Resaltado
Administrator
Resaltado
Administrator
Resaltado
Page 7: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 7 de 103

Donde: 1. Fix val: En la columna Fix val, se ingresa el código del campo, por

ejemplo 001. Short text se ingresa el detalle o descripción del campo, por ejemplo

Oceanía.

Paso 5:

2. Activate: Presionar el botón Activate ( ), de este modo el objeto a crear quedará en estado Activo en el diccionario de datos de SAP.

Page 8: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 8 de 103

Paso 6: Al realizar el paso anterior, aparecerá la siguiente ventana:

Acá existen dos opciones: Opción A: Guardar el objeto en una clase de desarrollo de SAP. Generalmente se utiliza esta opción, dado que de esta forma se pueden transportar luego los objetos a otro sistema. Opción B: Guardar el objeto en forma local. Esto se utiliza sólo si se crearán objetos de prueba o testeo. Al hacerlo de esta forma, el objeto NO podrá ser posteriormente transportado a otro sistema.

Guardar: Cualquiera de las opciones antes mencionadas que se haya elegido, luego hay que guardar el objeto en el sistema, para ello se debe presionar el botón Guardar. Si se eligió la opción A, aparecerá la siguiente pantalla:

Opción A

Opción B Guardar

Nombre del paquete de desarrollo

Page 9: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 9 de 103

En el cuadro señalado va el código de la orden de transporte en la que quedará almacenado el objeto. Este código se genera en forma automática. Luego se presiona el botón Aceptar.

Código de la orden de transporte

Botón Aceptar

Page 10: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 10 de 103

ELEMENTO DE DATOS

Creación de un elemento de datos.

Para crear un Elemento de datos se deben realizar los siguientes pasos:

Paso 1: Realizar el paso 1 descrito en el ítem “Pasos para la creación de un dominio de datos”.

Paso 2: Al hacer el paso anterior se desplegará la siguiente pantalla:

1.- Marcar la opción Data type e ingresar el nombre del elemento de datos a crear.

2.- Luego ingresar el nombre del Elemento de datos y finalmente presionar Create.

Paso 3: Luego aparecerá la siguiente pantalla, en este caso debemos: 1.- Seleccionar el ítem Data element, 2.- Luego hacer clic en el botón Enter.

2

1

Administrator
Resaltado
Page 11: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 11 de 103

Paso 4: Al realizar el paso anterior aparecerá la siguiente pantalla, en donde

debemos completar los campos:

1

2

1

2

3

Page 12: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 12 de 103

Donde:

1. Short text: corresponde a la descripción del elemento de datos, por ej: Código de la película, Nombre del cliente, etc.

2. Domain: corresponde al nombre del dominio al cuál pertenecerá el elemento de datos.

3. Field Label: Una vez completados estos campos, se deberá presionar la pestaña Field Label, realizado esto, aparecerá la siguiente pantalla:

Paso 5: 1. Lenght: Corresponde al largo que tendrán los campos asociados al elemento de datos, se expresa en números. Por Ej., si el elemento corresponde al nombre de cliente el largo podría ser 30, si fuese la edad sería 3, etc. En los casilleros Short, Médium, Long y Heading debe ir el mismo valor (número).

2. Field label: Corresponde a la etiqueta del campo, (cuando se use este campo en algún report o interface, el nombre aparecerá tal como se escriba acá,

1 2

3

Administrator
Resaltado
Page 13: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 13 de 103

por eso es importante escribir un nombre simple y claro del campo en cuestión), por ej. si el campo correspondiera al nombre del cliente podría ser Nombre_clie. . En los casilleros Short, Médium, Long y Heading debe ir el mismo valor (texto), pero puede darse el caso de que el casillero Short no alcance para escribir la descripción. En este caso se debe escribir una descripción más corta y en los demás se escribe una más extensa.

Paso 6:

3. Activate: Presionar el botón Activate ( ), de este modo el elemento de datos a crear quedará en estado Activo en el diccionario de datos de SAP.

Paso 7:

Realizar los pasos 5 y 6 descrito en el ítem “Creación de un dominio de datos”.

Page 14: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 14 de 103

TABLAS

Creación de una tabla.

Para crear una tabla se deben realizar los siguientes pasos (se describirán los pasos básicos para llevar a cabo este proceso):

Paso 1: Realizar el paso 1 descrito en el ítem “Pasos para la creación de un dominio de datos”.

Paso 2: Al hacer el paso anterior se desplegará la siguiente pantalla:

Donde:

1. Database table: Marcar la opción Database table e ingresar el nombre de la tabla a crear. 2. Create: Presionar el botón Create.

2

1

Page 15: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 15 de 103

Paso 3: Al hacer el paso anterior se desplegará la siguiente pantalla:

Donde:

1. Short text: corresponde a la descripción de la tabla, por ej: Clientes externos, Detalle de Facturas, etc.

2. Delivery Class: corresponde a la clase que pertenecerá la tabla, por general es A (tabla maestra y transacción de datos).

3. Data Browser/Table View Maint: corresponde a que tipo de acceso

tendrà la tabla, se recomienda dejarla con Display/Maintenance Allowed (Visualización/Mantención permitida), con esto y una vez creada la tabla, se le pueden realizar modificaciones posteriores en caso de ser necesario.

4. Fields: corresponde a los campos que contendrá la tabla a crear.

1

2

3

4

Page 16: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 16 de 103

Paso 4: Al hacer el paso anterior se desplegará la siguiente pantalla:

Donde:

1. Field: corresponde al nombre del campo. 2. Key: esta casilla debe seleccionarse en caso que el campo vaya a ser

Primary Key (clave primaria, también a veces denominada llave), lo cuál significa que este campo servirá para identificar a un conjunto de datos de la tabla. Por ej, en el caso de un cliente podría ser el RUT, en caso de una factura podría ser el Nº de factura, etc.

3. Data element: acá se debe señalar el elemento de datos al cuál pertenecerá el campo de la tabla a crear. Al hacer clic en este casillero, se habilita

el icono con el cuál se pueden buscar los elementos de datos existentes en el sistema, también se puede hacer una búsqueda por cadena, por ej si se sabe que el elemento deseado empieza por “ZP”, se escribe ZP* y luego se presiona el icono indicado. De esta forma se buscarán los elementos de datos cuyo nombre comiencen por ZP.

1 2 3

Administrator
Resaltado
Page 17: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 17 de 103

Una vez que se han ingresado los campos de la tabla, ésta debe ser activada en el sistema, para ello realizar el paso que se indica a continuación: 2. Technical Settings: Corresponde a las características técnicas de la

tabla y se deben completar los campos indicados a continuación:

Donde: 2.1 Data class: corresponde a la clase de datos que contendrá la

tabla, por lo general es APPL0 (datos maestros). 2.2 Size category: corresponde a la categoría de tamaño de la

tabla.

2.3 Log data changes: se sugiere marcar esta opción para vaya que guardando en archivo de registro los cambios que se vayan efectuando a la tabla.

3.13.2

3.3

3.43.5

Administrator
Resaltado
Page 18: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 18 de 103

2.4 Save: se debe presionar este botón para guardar las características técnicas de la tabla, al hacerlo y si no existen errores, en la parte inferior de la pantalla debe aparecer el mensaje “Saved” (Guardado).

2.5 Back: se debe presionar para volver a la pantalla anterior y

continuar con el proceso de activación de la tabla.

4. Luego presionar el botón Activate ( ), de este modo el elemento de datos a crear quedará en estado Activo en el diccionario de datos de SAP. 5. Luego ir al Menú Utilities / Table maintenance generador, esto es para la generación del diálogo de mantención de la tabla, al hacerlo aparecerá la siguiente pantalla.

5.1 Authorization Group: es el grupo de autorización al cuál pertenecerá la tabla.

5.1

5.2

5.3

5.4

Administrator
Resaltado
Administrator
Resaltado
Page 19: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 19 de 103

5.2 Function group: es el grupo de funciones al cuál pertenecerá la tabla. Si no existe la función de grupo, se debe crear una, para ello revisar el ítem Crear una función de grupo.

5.3 Find Scr Numbers: este botón sirve para generar en forma

automáticamente los valores para el item Mant Screen No.

5.4 Creación: se debe presionar este botón para concluir la operación de generación del diálogo de mantención de la tabla.

Paso 5: Realizar el paso 6 descrito en el ítem “Creación de un dominio de datos”.

Ejercicios

Basándose en lo explicado en los ítems Dominio de Datos, Elemento de Datos, y Creación de una tabla, de este Documento, realizar los siguientes ejercicios:

Ejercicio Nº 1. Crear tabla ZPELICULAS en SAP (SE11) con los campos requeridos, para cada campo crear su respectivo Elementos de Datos y Dominio.

Field name Key Type Length Description PEL_ID X NUMC 10 Código

Película PELTXT CHAR 40 Nombre

Película original

AGNO NUMC 4 Año DURACION NUMC 4 Duración en

minutos PAIS_ID CHAR 2 Pais de origen

( Código Pais ISO )

GENERO_ID NUMC 3 Código género (Terror, Drama, etc.)

DIRECTOR_ID NUMC 10 Código director

Page 20: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 20 de 103

Para Género crear en el dominio, ámbito de valores (Value Ranges)., con la siguiente lista:

Cine de acción Cine de animación Cine de aventuras Cine Bélico Serie B Ciencia Ficción Cine de autor Cine fantástico Cine negro Cine pornográfico Comedia (cine) Comedia romántica Documental Drama Melodrama Cine histórico Intriga y suspense Cine musical Cine policiaco Cine de terror Western

Ejercicio Nº 2.

Crear tabla ZDIRECTORES con los siguientes campos

Field name Key Type Length Description DIRECTOR_ID X NUMC 10 Código director NOMBRE CHAR 60 Nombre Completo

director NACION NUMC 2 Nacionalidad(Código

ISO pais) FEC_NAC DATS 8 Fecha nacimiento FEC_MUE DATS 8 Fecha Fallecimiento

Crear Dominio y Elemento de datos respectivo para cada campo.

Page 21: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 21 de 103

Ejercicio Nº 3.

Crear tabla ZDVD con los siguientes campos

Field name Key Type Length decimals Description DVD_ID X NUMC 10 Código DVD PEL_ID X NUMC 10 Código

Película PRECIO CURR 15 2 Precio

Unitario DVD MONEDA cuky 5 Moneda STOCK DEC 5 0 Stock DVD ZONA numc 1 Zona DVD

En Moneda usar elemento de datos WAERS. Para DVD_ID, PRECIO y STOCK, crear elemento de datos.

Page 22: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 22 de 103

PROGRAMAS EN ABAP Creación de un programa. A continuación se describen los pasos para crear un simple programa en lenguaje ABAP en SAP.

Paso 1: 1.- Desde la pantalla principal de SAP, en la parte superior ingresar la

transacción SE38 y luego presionar Intro.

A continuación se describe el paso 2.

Paso 2: Al hacer el paso anterior se desplegará la siguiente pantalla:

1

Page 23: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 23 de 103

1. Program: En esta casilla se debe ingresar el nombre del nuevo programa. Por norma, el nombre debe empezar por Z ó Y. Por Ej., ZPRIMER_PROGRAMA 3. Create: Botón Create. Se debe presionar este botón una vez ingresado

el nombre del programa.

Paso 3: Al hacer el paso anterior se desplegará la siguiente pantalla:

1 2

Page 24: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 24 de 103

1. Title: corresponde a la descripción del programa, por ej.: Generación de fichero con listado de clientes, Listado de Facturas pendientes, etc.

2. Type:: corresponde al tipo de programa. Por lo general es Executable

program (Programa ejecutable), pero también existe Module Pool, Include, entre otros. (estos tipos serán explicados más adelante).

3. Save: Botón Save (Guardar), se debe presionar para poder guardar el programa en el sistema.

Paso 4: Al realizar el paso anterior, aparecerá la siguiente ventana:

1

2

3

Page 25: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 25 de 103

Acá existen dos opciones: Opción A: Guardar el objeto en una clase de desarrollo de SAP. Generalmente se utiliza esta opción, dado que de esta forma se pueden transportar luego los objetos a otro sistema. Si no aparece nada, se presiona el icono que está en la orilla izquierda, al hacerlo se desplegarà la siguiente pantalla.

Opción B: Guardar el objeto en forma local. Al hacerlo de esta forma, el objeto NO podrá ser posteriormente transportado a otro sistema (comunmente en las empresas los objetos deben ser transportados entre los diferentes ambientes existentes en ella, por ej: de Desarrollo al de Pruebas, y luego de éste último a Productivo).

Guardar: Cualquiera de las opciones antes mencionadas que se haya elegido, luego hay que guardar el objeto en el sistema, para ello se debe presionar el botón Guardar. Si se realiza lo indicado en la opción A, aparecerá la siguiente pantalla:

Opción A

Opción B Guardar

Nombre del paquete

Aceptar

Page 26: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 26 de 103

Luego, al presionar el botón Aceptar se desplegará la siguiente pantalla:

Al presionar el botón Guardar aparecerá la siguiente pantalla.

En el cuadro señalado va el código de la orden de transporte en la que quedará almacenado el objeto. Este código se genera en forma automática. Luego se presiona el botón Aceptar. Por cualquier duda acerca de los paquetes de desarrollo. Revisar el ítem Creación de un paquete de desarrollo (package).

Al presionar el botón Aceptar aparecerá la siguiente pantalla.

Guardar

Aceptar

Código orden de transporte

Page 27: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 27 de 103

Acá desarrollaremos el programa.

El siguiente código es una muestra básica de cómo declarar variables, para luego imprimirlas en pantalla.

REPORT ZPRIMER_PROGRAMA . DATA: NOMBRE(30) TYPE C, CARGO LIKE NOMBRE, EMPRESA LIKE NOMBRE, FECHA_NAC:TYPE D, EDAD TYPE I. NOMBRE = 'ALAN BRITO'. CARGO = 'DESARROLLADOR SAP'. EMPRESA = 'EMPRESA DESARROLLADORA DE SOFTWARE'. FECHA_NAC = '19781201'. EDAD = '30'. EDAD = EDAD + 5. WRITE: NOMBRE, CARGO, EMPRESA, FECHA_NAC,

EDAD.

Page 28: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 28 de 103

A continuación se ve el código mostrado anteriormente y los botones que más se utilizan:

Donde: Chequear: Se utiliza este botón para saber si la sintaxis del código es correcta. Modificar: se utiliza este botón cuando se quiera modificar el código fuente del programa.

Modificar

Procesar

Activar

Chequear

Page 29: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 29 de 103

Activar: su función es dejar en estado activo el programa en el sistema. Es importante que los programas sean activados antes de ejecutarlos o testearlos, ya que sólo así, al momento de compilar, tomará los cambios que se hayan efectuado. Procesar: sirve para ejecutar ó compilar el programa.

Page 30: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 30 de 103

Cláusula SELECT La cláusula SELECT nos permite seleccionar datos de una tabla. Acá hay unos ejemplos básicos de selección de datos.

⇒ Seleccionar todas las películas e imprimir código y nombre:

TABLES ZPELICULAS. SELECT * FROM ZPELICULAS . WRITE:/ ZPELICULAS-PEL_ID, ZPELICULAS-PELTXT. ENDSELECT.

Lo anterior es equivalente a,

Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS . WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

⇒ Seleccionar todas las películas con país origen Chile e imprimir código y nombre:

Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID = ‘CL’. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

⇒ Seleccionar todas las películas con país origen Chile o Argentina e

imprimir código y nombre:

Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID = ‘CL’ OR PAIS_ID EQ ‘AR’. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

Page 31: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 31 de 103

Operator Meaning

=, EQ True, if the content of col is the same as the content of f.

<>, NE True, if the content of col is different to the content of f.

<, LT True, if the content of col is less than the content of f.

>, GT True, if the content of col is greater than the content of f.

<=, LE True, if the content of col is less than or equal to the content of f.

>=, GE True, if the content of col is greater than or equal to the content of f.

⇒ Seleccionar todas las películas con país origen Chile o Argentina cuya

duración no sea mayor a 120 minutos, e imprimir código y nombre:

Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE ( PAIS_ID = ‘CL’ OR PAIS_ID EQ ‘AR’ ) AND DURACION <= ‘120’. . WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

Notar que lo anterior es equivalente a: SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE ( PAIS_ID = ‘CL’ AND DURACION <= ‘120’ ) OR ( PAIS_ID EQ ‘AR’ AND DURACION <= ‘120’. . WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

Page 32: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 32 de 103

TABLAS INTERNAS Las tablas internas permiten trabajar con los datos de una tabla de SAP en forma más eficiente. En forma lógica se trabaja de la siguiente forma: los datos se encuentran en una tabla de SAP, y través de código se crea una tabla interna con los datos de la tabla de SAP. La tabla interna queda almacenada en memoria mientras el programa o reporte se esté ejecutando. A continuación veremos algunos ejemplos: Ejemplo Nº 1:

Crear una tabla interna con campos de la tabla ZPELICULAS, se realizará de la siguiente forma: Data: begin of tb_pel occurs 0, Pel_id like zpeliculas-pel_id, Peltxt like zpeliculas-peltxt, End of tb_pel. Lo anterior es equivalente a: Data : begin of wa_pel, Pel_id like zpeliculas-pel_id, Peltxt like zpeliculas-peltxt, End of wa_pel. Data tb_pel like standard table of wa_pel with header line. Ejemplo Nº 2:

Seleccionar todas las películas e imprimir código y nombre: Data tb_zpeliculas like Standard table of zpeliculas with header line. SELECT * into table tb_zpeliculas FROM ZPELICULAS . Loop at tb_zpeliculas WRITE:/ tb_ZPELICULAS-PEL_ID, tb_ZPELICULAS-PELTXT. Endloop.

Page 33: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 33 de 103

Seleccionar todas las películas e imprimir código y nombre, creando una

tabla interna y luego traspasando esa tabla interna a una estructura.

Data tb_zpeliculas like Standard table of zpeliculas. Data wa like tb_zpeliculas. SELECT * into table tb_zpeliculas FROM ZPELICULAS . Loop at tb_zpeliculas into wa. WRITE:/ wa-PEL_ID, wa-PELTXT. Endloop. Ejemplo Nº 4: Seleccionando datos usando la cláusula INTO CORRESPONDING FIELDS. Data : begin of wa_aux, Pel_id like zpeliculas-pel_id, Peltxt like zpeliculas-peltxt, End of wa_aux. Data tb_aux like standard table of wa_aux with header line. SELECT * into corresponding fields of table tb_aux FROM ZPELICULAS . Loop at tb_aux. WRITE:/ tb_aux-PEL_ID, tb_aux-PELTXT. Endloop.

Page 34: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 34 de 103

PARAMETERS (Parámetros). Los Parameters sirven para obtener información de una tabla interna ó tabla maestra de SAP teniendo como referencia un valor ingresado por el usuario. ¿Cómo funciona internamente?, el parámetro se vincula a un campo de tabla (a través del código fuente) y al momento de realizar la consulta, la búsqueda de datos se basa en el valor ingresado en pantalla por el usuario. A continuación veremos un ejemplo: PARAMETERS p_pais like ZPELICULAS-pais_id. Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID = p_pais. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT. OBS: En este ejemplo vemos un solo PARAMETERS, pero pueden ser agregados los que programador desee. Este código debe ser insertado en un programa nuevo. Al compilarlo, y si no existen errores, en la pantalla debería aparecer lo siguiente:

Page 35: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 35 de 103

Otros valores que podemos incluir al usar PARAMETERS son los siguientes (estos valores son opcionales): OBLIGATORY: Indica si es obligatorio completar este campo. DEFAULT: Propone un valor por defecto.

LOWER CASE: Indica si se permitirá ingresar minúsculas

Al aplicarlo al código, basándose en el ejemplo anterior sería lo siguiente: PARAMETERS: p_pais like ZPAISES-pais_id DEFAULT '120' LOWER CASE OBLIGATORY. Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID = p_pais. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

Page 36: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 36 de 103

Al compilar debiera aparecer lo siguiente:

Al presionar este botón, aparecerá la ventana con el listado que ingresamos al momento de crear el dominio de datos.

Page 37: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 37 de 103

SELECT-OPTIONS (Opciones de selección). Los SELECT-OPTIONS sirven para obtener información de una tabla interna ó tabla maestra de SAP teniendo como referencia uno ó varios valores ingresados por el usuario. ¿Cómo funciona internamente?, el select-option se vincula a un campo de tabla (a través del código fuente) y al momento de realizar la consulta, la búsqueda de datos se basa en el valor ingresado en pantalla por el usuario. A continuación veremos un ejemplo:

SELECT-OPTIONS s_pais for ZPELICULAS-pais_id. Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID IN s_pais. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

OBS: En este ejemplo vemos un solo SELECT-OPTIONS, pero pueden ser agregados los que programador desee. Este código debe ser insertado en un programa nuevo. Al compilarlo, y si no existen errores, en la pantalla debería aparecer lo siguiente:

Page 38: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 38 de 103

Otros valores que podemos incluir al usar SELECT-OPTIONS son los siguientes

(estos valores son opcionales):

OBLIGATORY: Indica si es obligatorio completar este campo. DEFAULT: Propone un valor por defecto.

LOWER CASE: Indica si se permitirá ingresar minúsculas NO INTERVALS: Indica que no se utilizará un rango se valores (desde / hasta). Sin embargo se puede ingresar uno o varios valores por ejemplo un listado.

Al aplicarlo al código, basándose en el ejemplo anterior sería lo siguiente:

SELECT-OPTIONS s_pais for ZPAISES-pais_id DEFAULT '120' LOWER CASE OBLIGATORY NO INTERVALS.

Data wa_zpeliculas like zpeliculas. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID IN s_pais. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT.

Page 39: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 39 de 103

Al compilar debiera aparecer lo siguiente:

Al presionar este botón, aparecerá la ventana para ingresar el listado de valores a utilizar en la búsqueda de datos.

Page 40: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 40 de 103

MODULARIZACION

La modularización básicamente se trata de ir creando el programa y agrupando el código en subrutinas, éstas son llamadas a través de la cláusula Perform.

Ejemplo Nº 1: Data tb_zpeliculas like Standard table of zpeliculas with header line. Perform leer_peliculas. Perform write_peliculas. Form leer_peliculas. SELECT * into table tb_zpeliculas FROM ZPELICULAS . Endform. Form write_peliculas. Loop at tb_zpeliculas WRITE:/ tb_ZPELICULAS-PEL_ID, tb_ZPELICULAS-PELTXT. Endloop. Endform. Ejemplo Nº 2: Ejemplo de subrutina con parámetros de entrada. Data tb_zpeliculas like Standard table of zpeliculas with header line. PARAMETERS p_pais like ZPELICULAS-pais_id. Perform leer_peliculas using p_pais. Perform write_peliculas. Form leer_peliculas using p_pais_de_entrada. SELECT * into table tb_zpeliculas FROM ZPELICULAS Where pais_id = p_pais_de_entrada. Endform.

Page 41: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 41 de 103

Form write_peliculas. Loop at tb_zpeliculas WRITE:/ tb_ZPELICULAS-PEL_ID, tb_ZPELICULAS-PELTXT. Endloop. Endform. Ejemplo Nº 3 Ejemplo de subrutina con parámetros de entrada y salida Data tb_zpeliculas like Standard table of zpeliculas with header line. Data v_peltxt like ZPELICULAS-PELTXT. PARAMETERS p_id like ZPELICULAS-pel_id. Perform leer_peliculas using p_id changing v_peltxt. Perform write_peliculas using p_id V_peltxt.. Form leer_peliculas using p_pel_id changing p_nombre_pel. SELECT single peltxt into p_nombre_pel FROM ZPELICULAS Where pel_id = p_pel_id. Endform. Form write_peliculas using p_pel_id P_nombre_pel. WRITE:/ p_PEL_ID, P_nombre_pel. Endform.

Page 42: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 42 de 103

INCLUDES

Los includes son programas que pueden ser llamados desde otros, la única diferencia con lo explicado en el item Creación de un programa es en el Paso 3, en donde el campo Type se debe seleccionar Include program, el resto es el mismo proceso. Ejemplo Nº 1: Se crearán los siguientes includes ZPELICULAS_TOP.: Para declarar variables ZPELICULAS_F01 : Para declarar subrutinas En el código del Include ZPELICULAS_TOP se deberá ir lo siguiente:

*INCLUDE ZPELICULAS_TOP. Data tb_zpeliculas like Standard table of zpeliculas with header line. Data v_peltxt like ZPELICULAS-PELTXT.

En el código del Include ZPELICULAS_F01 se deberá ir lo siguiente:

*INCLUDE ZPELICULAS_F01 Form leer_peliculas using p_pel_id changing p_nombre_pel. SELECT single peltxt into p_nombre_pel FROM ZPELICULAS Where pel_id = p_pel_id. Endform. Form write_peliculas using p_pel_id P_nombre_pel. WRITE:/ p_PEL_ID, P_nombre_pel. Endform.

Page 43: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 43 de 103

Finalmente el código del programa principal (se debe crear un programa de tipo Executable) deberá quedar así:

INCLUDE ZPELICULAS_TOP. PARAMETERS p_id like ZPELICULAS-pel_id. Perform leer_peliculas using p_id changing v_peltxt. Perform write_peliculas using p_id V_peltxt. INCLUDE ZPELICULAS_F01 .

Page 44: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 44 de 103

EVENTOS

INITIALIZATION

En este ejemplo se propondrá el año actual para la búsqueda de películas.

PARAMETERS: p_agno like zpeliculas-agno. SELECT-OPTIONS s_pais for ZPELICULAS-pais_id. Data wa_zpeliculas like zpeliculas. INITIALIZATION. p_agno = sy-datum(4). START-OF-SELECTION. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID IN s_pais AND agno = p_agno. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT. END-OF-SELECTION.

En este ejemplo siempre se propondrá el país ‘CL’ en la búsqueda.

SELECT-OPTIONS s_pais for ZPELICULAS-pais_id. Data wa_zpeliculas like zpeliculas. INITIALIZATION. s_pais-sign = ‘I’ s_pais-option = ‘EQ’. s_pais-low = ‘CL’. append s_pais. START-OF-SELECTION. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID IN s_pais. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT. END-OF-SELECTION.

Page 45: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 45 de 103

AT-SELECTION-SCREEN

Validar datos en la pantalla inicial del reporte. En este ejemplo validamos que en parámetro país este prohibido ingresar Argentina(AR). PARAMETERS p_pais like ZPELICULAS-pais_id. Data wa_zpeliculas like zpeliculas. AT-SELECTION-SCREEN. if p_pais = ‘AR’. Message E398(00) with ‘Codigo de pais inválido’. Endif. START-OF-SELECTION. SELECT * into wa_zpeliculas FROM ZPELICULAS WHERE PAIS_ID EQ p_pais. WRITE:/ wa_ZPELICULAS-PEL_ID, Wa_ZPELICULAS-PELTXT. ENDSELECT. END-OF-SELECTION.

OBS: los mensajes están en la tabla T100.

Page 46: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 46 de 103

FUNCTIONS (Funciones)

Definición

Una function se podría definir como un conjunto de instrucciones agrupadas que pueden ser llamadas desde uno o varios programas. Se utiliza para realizar diversas tareas.

Ejercicio Nº 1: Crear función Z_LEER_PELICULA que dado un id de película entregue el nombre. Entonces en el programa principal esta función se llamaría:

Cómo crear una función

Paso 1: Ir a la transacción SE37. Al hacerlo aparecerá la siguiente pantalla:

Luego presionar el botón Create.

Crear

Page 47: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 47 de 103

Paso 2: Al realizar el paso anterior se desplegará la siguiente pantalla. Acá se deben completar los campos Function group y Short text:

Una vez completados los campos se debe presionar el botón Save,

Paso 3: Al hacerlo aparecerá la siguiente pantalla: De acuerdo al código ejemplo, se deben colocar en los campos. Se debe completar tal como se muestra en la figura y en base al código para llamar a la función. Una vez completados los campos se presiona la pestaña Export.

Page 48: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 48 de 103

Paso 4: Al hacer el paso anterior se desplegará la siguiente pantalla:

Se debe completar tal como se muestra en la figura y en base al código para llamar a la función. Una vez completados los campos se presiona la pestaña Tables.

Page 49: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 49 de 103

Paso 5: Al hacer el paso anterior se desplegará la siguiente pantalla:

Se debe completar tal como se muestra en la figura y en base al código para llamar a la función. Fijarse en la línea que sale la palabra PARAMETERS, en este caso la tabla a vincular es zpeliculas.

Page 50: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 50 de 103

Paso 6: Al hacer el paso anterior se desplegará la siguiente pantalla:

Esta ventana aparece casi en blanco, lo que se muestra es como queda una vez insertado el código En esta ventana debe ser insertado el siguiente código (pinchar la pestaña Source Code):

Guardar

Activar

Page 51: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 51 de 103

Código para llamar a la función

Data tb_zpeliculas like Standard table of zpeliculas with header line. Data v_peltxt like ZPELICULAS-PELTXT. PARAMETERS p_id like ZPELICULAS-pel_id. Perform leer_peliculas using p_id changing v_peltxt. Perform write_peliculas using p_id V_peltxt.. Form leer_peliculas using p_pel_id changing p_nombre_pel. * SELECT single peltxt into p_nombre_pel FROM ZPELICULAS * Where pel_id = p_pel_id. CALL FUNCTION ‘Z_LEER_PELICULA’ EXPORTING PEL_ID = p_pel_id Ver el paso 3 IMPORTING PELTXT = p_nombre_pel EXCEPTIONS Not_ found = 1. If sy-subrc ne 0. Clear p_nombre_pel . Ver el paso 4 Endif. Endform. Form write_peliculas using p_pel_id P_nombre_pel. WRITE:/ p_PEL_ID, P_nombre_pel. Endform.

Finalmente guardamos y activamos la función.

TIPS: El campo que va en el EXPORTING de la función debe agregarse en la pestaña IMPORT (tal como en el Paso 3).

TIPS: El campo que va en el IMPORTING de la función debe agregarse en la pestaña EXPORT (tal como en el Paso 4).

Page 52: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 52 de 103

Ejercicio Nº 1

Crear función (SE37) Z_READ_DVD que dado un código de DVD, como salida entregue: ID_DVD Nombre Película Nombre Director Año Película Duración en minutos País de origen Género Precio DVD Stock DVD

Ejercicio Nº 2 Crear función Z_READ_DVD_2 que dado un código de DVD, como salida entregue estructura con siguientes campos. OBS: crear estructura ZQ_DVD con la SE11, para los campos usar las mismas definiciones que las tablas ZPELICULAS; ZDIRECTORES Y ZDVD

Field name Key Type Length Description DVD_ID NUMC 10 PEL_ID NUMC 10 Código

Película PELTXT CHAR 40 Nombre

Película original

AGNO NUMC 4 Año DURACION NUMC 4 Duración en

minutos PAIS_ID CHAR 2 Pais de

origen ( Código Pais ISO )

GENERO_ID NUMC 3 Código género (Terror, Drama, etc.)

DIRECTOR_ID NUMC 10 Código director

NOMBRE

Page 53: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 53 de 103

PRECIO Precio Unitario DVD

MONEDA Moneda STOCK Stock DVD

Page 54: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 54 de 103

PAQUETES DE DESARROLLO (Package).

Creación de un paquete de desarrollo.

A continuación se describen los pasos para crear una clase de desarrollo (package).

Paso 1: 1.- Desde la pantalla principal de SAP, en la parte superior ingresar la

transacción SE80 y luego presionar Intro.

Paso 2: Al hacer el paso anterior se desplegará la siguiente pantalla:

1

Page 55: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 55 de 103

Acá se debe hacer clic sobre con el botón derecho del Mouse, sobre el primer ítem del listado Object Name / Create / Package

Paso 3: Al hacer el paso anterior se desplegará la siguiente pantalla:

Donde:

1

1

2

Page 56: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 56 de 103

1. Package: corresponde al nombre del paquete, por norma debe comenzar por Z ó Y.

Short text: corresponde a la descripción del paquete. Software Component: corresponde al componente de software,

por lo general es HOME. 2. Create: Se debe presionar este botón para crear el paquete.

Paso 4: Al hacer el paso anterior se desplegará la siguiente pantalla:

Una orden de transporte sirve para ir guardando los objetos a medida que se vayan creando objetos tales como tablas, reportes, elementos de datos, etc. en el ambiente de Desarrollo. Luego una vez que las pruebas en ambiente de Desarrollo han finalizadas esa orden es transportada a otro ambiente (Productivo por ej)

Esta ventana indica en que orden de transporte quedará almacenado el objeto a crear. En caso de que no existe una orden se deberá crear, lo cuál se explica a continuación.

Código de la orden: Acá va el código de la orden de transporte. Crear orden: se debe presionar este botón en que caso de que no exista una orden de transporte.

Código de la orden de transporte

Crear orden

Page 57: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 57 de 103

Paso 5: Al hacer el paso anterior se desplegará la siguiente pantalla:

1. Short description: corresponde al nombre del paquete, por norma debe comenzar por Z ó Y. 2. Guardar: se debe presionar este botón para guardar los cambios.

Paso 6: Al hacer el paso anterior se desplegará la siguiente pantalla:

1

2

Aceptar

Page 58: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 58 de 103

Al presionar el botón Aceptar de desplegará la siguiente pantalla:

Acá se presiona el botón Guardar, con esta acción quedará almacenado en el diccionario el paquete creado.

Guardar

Page 59: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 59 de 103

FUNCIONES DE GRUPO

Crear una función de grupo

A continuación se describen los pasos para crear una función de grupo.

Paso 1: 1.- Desde la pantalla principal de SAP, en la parte superior ingresar la

transacción SE80 y luego presionar Intro.

Paso 2: Al hacer el paso anterior se desplegará la siguiente pantalla:

1

Page 60: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 60 de 103

Acá se debe hacer clic sobre con el botón derecho del Mouse, sobre el primer ítem del listado Object Name / Create / Function Group

Paso 3: Al hacer el paso anterior se desplegará la siguiente pantalla:

Donde:

Function group: corresponde al nombre del grupo de función.

1

Page 61: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 61 de 103

Short text: corresponde a la descripción del grupo de función.

Person responsible: es el usuario que creará, en este caso, el grupo de función. Save: se debe presionar este botón para guardar el objeto a crear.

Paso 4: Realizar el paso 6 descrito en el ítem “Creación de un dominio de datos”.

Page 62: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 62 de 103

Reportes ALV

Los reportes ALV básicamente son un conjunto de datos obtenidos a partir de una consulta a una o más tablas de datos. La salida es generada con un formato “más elegante” que un reporte normal.

A continuación veremos algunos ejemplos:

Ejemplo Nº 1

report grid_edit. * type-pools: slis. * Data to be displayed data: gs_layout type slis_layout_alv. Data tb_zpeliculas type table of zpeliculas . PARAMETERS p_pais like ZPELICULAS-pais_id. *---------------------------------------------------------------------* * Selection

SELECT * into table tb_zpeliculas FROM ZPELICULAS Where pais_id = p_pais. * Eingabebereit gs_layout-edit = 'X'. * Call ABAP List Viewer (ALV)

call function 'REUSE_ALV_GRID_DISPLAY' exporting i_callback_program = sy-cprog i_callback_user_command = 'USER_COMMAND' i_structure_name = 'ZPELICULAS' is_layout = gs_layout tables t_outtab = tb_zpeliculas. form user_command using r_ucomm type sy-ucomm rs_selfield type slis_selfield. if r_ucomm = '&DATA_SAVE'. message i000(0k) with text-001. call function 'REUSE_ALV_LIST_DISPLAY' exporting i_structure_name = 'ZPELICULAS' tables t_outtab = tb_zpeliculas. endif. endform.

Page 63: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 63 de 103

Ejemplo Nº 2

report grid_edit. * type-pools: slis. * Data to be displayed data: gs_layout type slis_layout_alv, it_fieldcat type slis_t_fieldcat_alv with header line. *********************************** Data tb_zpeliculas type table of zpeliculas . PARAMETERS p_pais like ZPELICULAS-pais_id. *---------------------------------------------------------------------* * Selection

SELECT * into table tb_zpeliculas FROM ZPELICULAS Where pais_id = p_pais_de_entrada. * Eingabebereit

gs_layout-edit = 'X'. perform create_fieldcat. * Call ABAP List Viewer (ALV) call function 'REUSE_ALV_GRID_DISPLAY' exporting i_callback_program = sy-cprog is_layout = gs_layout it_fieldcat = it_fieldcat[] tables t_outtab = tb_zpeliculas. form create_fieldcat. * Esturctura SLIS_FIELDCAT_ALV * tabname : Nombre de la tabla * fieldname : Nombre del campo de la tabla interna * ref_tabname : Tabla de referencia SAP * ref_fieldname: Campo de referencia SAP (el campo fieldname toma * las características del campo ref_fieldname) * ddictxt : El texto del encabezado sera (S)hort (M)iddle (L)ong * reptext_ddic : Información del encabezado de la columna * seltext_l : Texto largo * seltext_m : Texto medio * seltext_s : Texto pequeño * outputlen : 18. (ancho de la columna) * hotspot : 'X'. (se activa mano de selección) * key : 'X'. (muestra la columna en color verde y queda * fija en scrolling) * key_sel : Hace que la clave no sea obligatoria * col_pos : Numero de la posición de la columna * just : Justificación de salida (R)ight (L)eft (C)ent. * do_sum : El campo será sumado * currency : Moneda de calculo * no_zero : No muestra valores con 0

Page 64: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 64 de 103

* no_out : El campo no aparece en la salida del reporte it_fieldcat-fieldname = 'PEL_ID'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. * it_fieldcat-seltext_l = 'XXX'. * it_fieldcat-seltext_m = 'XXX'. * it_fieldcat-seltext_s = 'XXX'. * it_fieldcat-reptext_ddic = 'XXX'. APPEND it_fieldcat. it_fieldcat-fieldname = 'PELTXT'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. APPEND it_fieldcat. it_fieldcat-fieldname = 'AGNO'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. APPEND it_fieldcat. it_fieldcat-fieldname = 'DURACION'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. APPEND it_fieldcat. it_fieldcat-fieldname = 'PAIS_ID'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. APPEND it_fieldcat. it_fieldcat-fieldname = 'GENERO_ID'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. APPEND it_fieldcat. it_fieldcat-fieldname = 'DIRECTOR_ID'. it_fieldcat-tabname = 'TB_ZPELICULAS'. it_fieldcat-ref_tabname = 'ZPELICULAS'. APPEND it_fieldcat. endform.

Page 65: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 65 de 103

Ejercicio Nº 1: Crear reporte ALV, dado nombre de película y nombre de director (select-options), entregue el siguiente listado:

DVD ID Nombre Película original Año Duración en minutos País de origen Género Nombre director Precio Unitario DVD Moneda Stock DVD

Hint: Crear tabla interna con la mismos campos que se exigen en la salida del reporte, después crear el fieldcat con esos campos. Hint: buscar en la se38 programas BCALV*, que son ejemplos dados por SAP. Por ejemplo el BCALV_FULLSCREEN_DEMO Solucion: Tables: zpeliculas, Zdirectores. Data tb_dvd like Standard table of zdvd with header line. Select-options: s_dnombre for zdirectores-nombre, S_pnombre for zpeliculas-peltxt. Start-of-selection. . Form read_dvd. Data v_director_id like zdirectores-director_id. Data v_pel_id like zpeliculas-pel_id.

Page 66: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 66 de 103

Select director_id into v_director_id from zdirectores Where nombre in s_dnombre. Select pel_id into v_pel_id from zpeliculas Where peltxt in s_pnombre And director_id = v_director_id. Select * into table tb_dvd from zdvd Where pel_id = v_pel_id. Endselect. Endselect. Endform.

Page 67: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 67 de 103

DYNPROS

Definición

Una dynpro se podría definir como un conjunto de elementos que tiene por finalidad obtener interfaces para que el usuario realice diversas operaciones tales como ingreso de datos a tablas del sistema, exportación de datos a un fichero (archivo) local ó a un servidor externo, entre otras.

Creación de una dynpro

Paso 1:

Con la transacción SE38 creamos programa tipo M (modulpool)

Page 68: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 68 de 103

Paso 2:

Ir a la transacción SE51

Y creamos la dynpro, en este caso la ‘0200’. OBS : el Nº es arbitrario.

Page 69: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 69 de 103

Paso 3:

1. Atributes: Se deben revisar los atributos de la Dynpro

Disposición: al presionar este botón se abrirá una ventana donde podremos diseñar la pantalla de la dynpro. Al hacerlo se desplegará la siguiente pantalla:

2 1

Page 70: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 70 de 103

A la izquierda está el listado de objetos que podemos agregar a una dynpro.

En nuestro caso queremos agregar “campos de entrada/salida” para ingresar datos de directores.

Objetos que se pueden agregar a la dynpro

Page 71: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 71 de 103

Para insertar un objeto en la dynpro, simplemente se hace clic en el objeto de la lista y luego se dibuja con el mouse sobre la pantalla.

Page 72: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 72 de 103

Ahora agregaremos un texto, para describir el campo de entrada. Para ello agregamos “campo de texto”.

Variable ABAP en que “guardaremos” valor de campo de entrada

largo

tipo

Page 73: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 73 de 103

Page 74: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 74 de 103

Se debe utilizar el mismo procedimiento para crear los otros campos,

Texto a desplegar

Page 75: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 75 de 103

Una vez que se han creado los campos, se debe presionar el botón Logic Process (Lógica del Proceso)

Logic Process

Page 76: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 76 de 103

Al realizar el paso anterior, se desplegará la siguiente pantalla:

Acá tenemos el PBO y en el PAI. En el PBO definiremos el status GUI, de la dynpro, y el titulo. Para ello definiremos el modulo STATUS_0200. Tip ¡: basta con descomentar la línea y hacer doble clic sobre “Module…” y lo creas. En este caso lo crearemos dentro del mismo programa ZDIRECTORES, pero se estila crearlo en un include para modulos PBO.

Page 77: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 77 de 103

*&---------------------------------------------------------------------* *& Module STATUS_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module STATUS_0200 output. SET PF-STATUS 'STATUS'. SET TITLEBAR 'T01'. endmodule. " STATUS_0200 OUTPUT

Definimos un status gui “STATUS” y un Titulo “T01”. Tip: doble clic sobre cada línea y directamente lo creamos.

Al aparecer el mensaje, de debe hacer clic en SI.

Page 78: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 78 de 103

Luego al hacer clic en Aceptar aparecerá la siguiente pantalla:

Grabamos y activamos. Volvemos a la dynpro, lógica. Creamos el título, equivalentemente, con doble clic:

Nombre del Status GUI

Descripción del Status GUI

A los iconos le asignamos un nombre de comando: SAVE BACK CANC

Page 79: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 79 de 103

Al hacer el paso anterior aparecerá la siguiente ventana:

En campo Titulo le damos nombre y luego se presiona el botón Enter. Al hacerlo, volveremos a la ventana de la lógica del programa.

En el PAI tenemos que “traspasar” los campos de entrada en la pantalla al programa principal. Para ello usamos la instrucción field para cada campo de entrada.

Instrucción FIELD

Page 80: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 80 de 103

Cada comando que ejecutamos en la dynpro tiene que asignarse a una variable, para ello, nos vamos a “Lista Elem.”

Lo definimos como “OK_CODE”. Ahora agregamos la variable en el codigo ABAP *&---------------------------------------------------------------------* *& Modulpool ZDIRECTORES *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* PROGRAM ZDIRECTORES. data ok_code like sy-ucomm.

Ahora tenemos que definir que hacer por cada acción que existe dentro de la pantalla, para eso creamos el modulo USER_COMMAND_0200 (doble clic).

OK_CODE es solo un nombre

Page 81: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 81 de 103

*&---------------------------------------------------------------------* *& Module USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0200 INPUT. DATA fcode LIKE ok_code. fcode = ok_code. CLEAR ok_code. CASE fcode. WHEN 'SAVE'. PERFORM grabar_director USING zdirectores. WHEN 'BACK'. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. " USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------**& Form grabar_director *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ZDIRECTORES text *----------------------------------------------------------------------* FORM grabar_director USING zdirectores STRUCTURE zdirectores. INSERT INTO zdirectores VALUES zdirectores. IF sy-subrc = 0. MESSAGE s000(fb) WITH 'Director ingresado con éxito'. Clear zdirector. ELSE. MESSAGE e000(fb) WITH 'Error ingreso director'. ENDIF. ENDFORM. "grabar_director

Si observan, utilizamos la variable ok_code para determinar que “botón se presionó”. En este caso definimos que para el botón SAVE (ver status GUI), grabamos el director y en el caso de BACK salimos de la transacción. Ahora hay que asignar una transacción a la dynpro

Page 82: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 82 de 103

Page 83: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 83 de 103

Nombre

Código

Tipo

Page 84: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 84 de 103

Luego presionamos el botón Guardar y listo.

Para probar, primero presionemos el botón indicado como Crear nueva sesión Ahora ejecutamos la transacción, vía comando, para ello nos posicionamos en la parte superior de la pantalla e ingresamos la transacción.

Nª de la Dynpro

Guardar

Crear nueva sesión

Page 85: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 85 de 103

Esta es la DYNPRO que fuimos creando paso a paso anteriormente.

A través de esta interfaz, podemos ir agregando datos a la tabla. Para grabarlos debemos presionar el botón Guardar de la barra de herramientas.

Page 86: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 86 de 103

A continuación se muestra el código que debe ser inserto, para ello se debe volver a la ventana de la lógica del programa

*&---------------------------------------------------------------------* *& Modulpool ZDIRECTORES *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* program zdirectores. data ok_code like sy-ucomm. data: begin of zdirectores, director_id(10) type c, nombre(10) type c, nacion(2) type n, fec_nac type d, fec_mue type d, end of zdirectores. *&---------------------------------------------------------------------* *& Module STATUS_0200 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module status_0200 output. set pf-status 'STATUS'. set titlebar 'T01'. endmodule. " STATUS_0200 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module user_command_0200 input. data fcode like ok_code. fcode = ok_code. clear ok_code. case fcode. when 'SAVE'. perform grabar_director using zdirectores. when 'BACK'. leave to screen 0. endcase. endmodule. " USER_COMMAND_0200 INPUT *&---------------------------------------------------------------------* *& Form grabar_director *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------*

Page 87: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 87 de 103

* -->ZDIRECTORES text *----------------------------------------------------------------------* form grabar_director using zdirectores structure zdirectores. INSERT INTO zdirectores VALUES zdirectores. if sy-subrc = 0. message s000(fb) with 'Director ingresado con éxito'. clear zdirectores. else. message e000(fb) with 'Error ingreso director'. endif. endform. "grabar_director process before output. module status_0200. * process after input. field zdirectores-director_id. field zdirectores-nombre. field zdirectores-nacion. field zdirectores-fec_nac. field zdirectores-fec_mue. module user_command_0200.999

Una vez inserto este código, chequeamos si no existen errores, guardamos y estaríamos en condiciones en usar la interfaz para ir agregando, en este caso, nuevos directores.

Page 88: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 88 de 103

SMARTFORMS

Ejercicio N° 1.

El jefe quiere el listado de los usuarios que hay en Sap y quiere imprimir la siguiente carta: Santiago, 23 de Enero del 2006 LISTADO DE USUARIOS SAP Empresa GlobalSap consulting, tiene los siguientes usuarios registrados en SAP. (Antes se deberá crear la tabla ZUSUARIOS con estos campos). Codigo Usuario Nombre JVASQUEZ Jaime Vazquez CRUIZ Cristian Ruiz GGONZALEZ German Gonzalez PTAPIA Pablo Tapia

Solución: Desde la ventana principal de SAP, escribimos la transacción SMARTFORM, creamos el smartform y definimos la tabla de entrada usuarios

Page 89: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 89 de 103

En este ejemplo usaremos la ventana MAIN que se crea por defecto, acuérdense que el concepto de MAIN es el mismo que en el de los SAPSCRIPT. A la ventana MAIN le definiremos un texto llamado HEADER para colocar el texto de cabecera de la tabla.

1. Interface form.

2. TABLAS

3. Def. Tabla ZUSUARIOS

Page 90: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 90 de 103

Fíjate en el botón Lista de campos, ahí en el extremo inferior izquierdo, salen todos los campos visibles para programa smartform, para poner la fecha utilizaremos la variable de sistema DATE, fíjate que esto es drag & drop.

Crear texto, HEADER

Page 91: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 91 de 103

De ahí simplemente le colocas el texto tal cual como en un editor.

1. Lista de campos

2. Lista de campos

4. drag & drop

3. variable de sistema DATE

Page 92: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 92 de 103

Ahora hay que definir la tabla para la impresión de los usuarios: Creamos tabla: Lo que hay que definir es lo siguiente, la cantidad de columnas que tendrá, Vamos a details

Page 93: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 93 de 103

1. Details

Page 94: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 94 de 103

Ojo con esto

Definimos las columnas, en este caso son 2, una para usuario y otra para nombre, ojo con los largos que tiene que ser igual al ancho de tabla.

Page 95: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 95 de 103

Para trabajar con la tabla tenemos que definir un work area, que definimos en definiciones globales

Page 96: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 96 de 103

Volvamos a la tabla

1. Datos globales

Work area para la tabla

Page 97: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 97 de 103

Fíjarse que las tablas tienen áreas para Cabecera: normalmente aquí definimos el nombre de las columnas. Principal: las líneas se imprimen aquí. Pie: Ejemplo, impresión de los totales

Page 98: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 98 de 103

Entonces creamos “Entrada en tabla”, y definimos el tipo de línea

Page 99: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 99 de 103

Notar que en cada columna(CELL), ponemos un campo de la work area y eso es todo

Page 100: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 100 de 103

Para que esto tengo sentido, hay que crear el programa ABAP de impresión, en este caso el YTEST_SMART, en la rutina siguiente se imprime: *&---------------------------------------------------------------------* *& Form print_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form print_data. data: *smartforms related func_module_name type rs38l_fnam, control_parameters type ssfctrlop, output_options type ssfcompop. data: pa_form LIKE ssfscreen-fname . pa_form = 'YTEST_SMART'. output_options-tdnewid = 'X'. output_options-tdimmed = 'X'. output_options-tddelete = 'X'. control_parameters-no_dialog = ' '. * determine the name of the generated function module for the SMartform CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = pa_form IMPORTING fm_name = func_module_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. * call the generated function module of the form CALL FUNCTION func_module_name EXPORTING control_parameters = control_parameters output_options = output_options user_settings = space TABLES usuarios = user_name_address_tab EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 my_exception = 5 OTHERS = 6. endform. "print_data

Lo ejecutamos y podremos observar el formulario creado.

OBS: Un smartform es una función(SE37), entonces acá le pasamos el nombre del smartform y te pasa el nombre de la funcion. El nombre es del estilo /1BCDWB/SF00000172

Aca ejecutamos la llamada al smartform como una función, le pasamos los parámetros de impresión y la tabla USUARIOS para imprimir

Page 101: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 101 de 103

Page 102: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 102 de 103

*&---------------------------------------------------------------------* *& Report YTEST_SMART *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT YTEST_SMART. data USER_NAME_TAB like standard table of USUSERS. data USER_NAME_ADDRESS_TAB like standard table of USADDR3. start-of-selection. perform get_users. perform print_data. *&---------------------------------------------------------------------* *& Form get_users *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form get_users. CALL FUNCTION 'SUSR_USER_ADDRESS_READ_ARRAY' EXPORTING ALL_USERS = 'X' * IMPORTING * RETURNCODE = TABLES USER_NAME_TAB = user_name_tab * USER_ADDRESS_TAB = USER_NAME_ADDRESS_TAB = user_name_address_tab * EXCEPTIONS * INTERNAL_ERROR = 1 * USER_NAME_TAB_IS_EMPTY = 2 * OTHERS = 3 . IF SY-SUBRC <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. endform. "get_users *&---------------------------------------------------------------------* *& Form print_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form print_data. data: *smartforms related func_module_name type rs38l_fnam, control_parameters type ssfctrlop,

Page 103: Global Sap (1)

Introducción a la programación en SAP - Lenguaje ABAP

Página 103 de 103

output_options type ssfcompop. data: pa_form LIKE ssfscreen-fname . pa_form = 'YTEST_SMART'. output_options-tdnewid = 'X'. output_options-tdimmed = 'X'. output_options-tddelete = 'X'. control_parameters-no_dialog = ' '. * determine the name of the generated function module for the SMartform CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = pa_form IMPORTING fm_name = func_module_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. * call the generated function module of the form CALL FUNCTION func_module_name EXPORTING control_parameters = control_parameters output_options = output_options user_settings = space TABLES usuarios = user_name_address_tab EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 my_exception = 5 OTHERS = 6. endform. "print_data