Vous êtes sur la page 1sur 103

MANUAL DE INTRODUCCIN A LA PROGRAMACIN EN SAP LENGUAJE ABAP

Introduccin a la programacin en SAP - Lenguaje ABAP

Pgina 2 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

TABLA, ELEMENTO DE DATOS Y DOMINIO DE DATOS, Cmo se relacionan?


Una tabla es una estructura que almacena datos, un dominio es una norma que contiene la definicin de datos y el elemento de datos contiene la definicin de la etiqueta que tendr el campo cuando sea utilizado en algn 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:

Campo de tabla

Elemento de Datos

Dominio de Datos

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 continuacin.

Pgina 3 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

DOMINIO DE DATOS.
Creacin de un dominio de datos.
Para crear un Dominio de datos se debern realizar los siguientes pasos:

Paso 1:
1.- Desde la pantalla principal de SAP, en la parte superior ingresar la transaccin SE11 y luego presionar Intro.

A continuacin se describe el paso 2.

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

1 2

Pgina 4 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

1. Domain:: Marcar la opcin Domain e ingresar el nombre del dominio a crear. 2. Create: Presionar el botn Create. Al hacerlo, se desplegar la siguiente pantalla:

1 4 2 3

A continuacin se describe el paso 3.

Paso 3:
1. Short text: corresponde a la descripcin del dominio, por ej: Cdigo de la pelcula, 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: nmero de caracteres que tendr el campo (el largo). Decimal places: nmero de decimales de entrada que admitir el campo.

Pgina 5 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

3. Output lenght: nmero de caracteres que se desplegarn en pantalla, (se desplegarn siempre y cuando el campo contenga datos). La opcin Lowercase, sirve para indicar si el campo admitir minsculas, si se marca admite Maysculas / Minsculas, sino slo admitir Maysculas. 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 cdigo de continente, se podra crear un listado con los continentes (en caso contrario saltar al paso 6). Dicho listado aparecer cuando el campo sea utilizado en algn reporte o formulario, para realizarlo se deber presionar la pestaa Value Ranges.

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

Pgina 6 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Donde: 1. Fix val: En la columna Fix val, se ingresa el cdigo del campo, por ejemplo 001. Short text se ingresa el detalle o descripcin del campo, por ejemplo Oceana.

Paso 5:
2. Activate: Presionar el botn Activate ( ), de este modo el objeto a crear quedar en estado Activo en el diccionario de datos de SAP.

Pgina 7 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

Opcin A Nombre del paquete de desarrollo

Guardar

Opcin B

Ac existen dos opciones: Opcin A: Guardar el objeto en una clase de desarrollo de SAP. Generalmente se utiliza esta opcin, dado que de esta forma se pueden transportar luego los objetos a otro sistema.

Opcin B: Guardar el objeto en forma local. Esto se utiliza slo si se


crearn 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 botn Guardar. Si se eligi la opcin A, aparecer la siguiente pantalla:

Pgina 8 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Cdigo de la orden de transporte

Botn Aceptar

En el cuadro sealado va el cdigo de la orden de transporte en la que quedar almacenado el objeto. Este cdigo se genera en forma automtica. Luego se presiona el botn Aceptar.

Pgina 9 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

ELEMENTO DE DATOS
Creacin 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 creacin de un dominio de datos.

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

1.- Marcar la opcin 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 botn Enter.

Pgina 10 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Paso 4:
Al realizar el paso anterior aparecer la siguiente pantalla, debemos completar los campos: en donde

1 3 2

Pgina 11 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Donde: 1. Short text: corresponde a la descripcin del elemento de datos, por ej: Cdigo de la pelcula, Nombre del cliente, etc. 2. Domain: corresponde al nombre del dominio al cul pertenecer el elemento de datos. 3. Field Label: Una vez completados estos campos, se deber presionar la pestaa Field Label, realizado esto, aparecer la siguiente pantalla:

Paso 5: 1. Lenght: Corresponde al largo que tendrn los campos asociados al


elemento de datos, se expresa en nmeros. Por Ej., si el elemento corresponde al nombre de cliente el largo podra ser 30, si fuese la edad sera 3, etc. En los casilleros Short, Mdium, Long y Heading debe ir el mismo valor (nmero). 2. Field label: Corresponde a la etiqueta del campo, (cuando se use este campo en algn report o interface, el nombre aparecer tal como se escriba ac,

Pgina 12 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

por eso es importante escribir un nombre simple y claro del campo en cuestin), por ej. si el campo correspondiera al nombre del cliente podra ser Nombre_clie. . En los casilleros Short, Mdium, Long y Heading debe ir el mismo valor (texto), pero puede darse el caso de que el casillero Short no alcance para escribir la descripcin. En este caso se debe escribir una descripcin ms corta y en los dems se escribe una ms extensa. Paso 6: 3. Activate: Presionar el botn 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 Creacin de un dominio de datos.

Pgina 13 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

TABLAS
Creacin de una tabla.
Para crear una tabla se deben realizar los siguientes pasos (se describirn los pasos bsicos para llevar a cabo este proceso):

Paso 1:
Realizar el paso 1 descrito en el tem Pasos para la creacin de un dominio de datos.

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

Donde: 1. Database table: Marcar la opcin Database table e ingresar el nombre de la tabla a crear. 2. Create: Presionar el botn Create.

Pgina 14 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

1 4 3

Donde: 1. Short text: corresponde a la descripcin 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 transaccin de datos). 3. Data Browser/Table View Maint: corresponde a que tipo de acceso tendr la tabla, se recomienda dejarla con Display/Maintenance Allowed (Visualizacin/Mantencin 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.

Pgina 15 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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, tambin a veces denominada llave), lo cul significa que este campo servir para identificar a un conjunto de datos de la tabla. Por ej, en el caso de un cliente podra ser el RUT, en caso de una factura podra ser el N de factura, etc. 3. Data element: ac se debe sealar el elemento de datos al cul pertenecer el campo de la tabla a crear. Al hacer clic en este casillero, se habilita con el cul se pueden buscar los elementos de datos existentes en el el icono sistema, tambin se puede hacer una bsqueda 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 buscarn los elementos de datos cuyo nombre comiencen por ZP.

Pgina 16 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 continuacin: 2. Technical Settings: Corresponde a las caractersticas tcnicas de la tabla y se deben completar los campos indicados a continuacin:

3.4

3.5

3.1 3.2

3.3

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 categora de tamao de la tabla. 2.3 Log data changes: se sugiere marcar esta opcin para vaya que guardando en archivo de registro los cambios que se vayan efectuando a la tabla.

Pgina 17 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

2.4 Save: se debe presionar este botn para guardar las caractersticas tcnicas 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 activacin de la tabla. 4. Luego presionar el botn 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 generacin del dilogo de mantencin de la tabla, al hacerlo aparecer la siguiente pantalla.

5.3 5.4 5.1 5.2

5.1 Authorization Group: es el grupo de autorizacin al cul pertenecer la tabla.

Pgina 18 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

5.2 Function group: es el grupo de funciones al cul pertenecer la tabla. Si no existe la funcin de grupo, se debe crear una, para ello revisar el tem Crear una funcin de grupo. 5.3 Find Scr Numbers: este botn sirve para generar en forma automticamente los valores para el item Mant Screen No. 5.4 Creacin: se debe presionar este botn para concluir la operacin de generacin del dilogo de mantencin de la tabla.

Paso 5:
Realizar el paso 6 descrito en el tem Creacin de un dominio de datos.

Ejercicios
Basndose en lo explicado en los tems Dominio de Datos, Elemento de Datos, y Creacin 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 PEL_ID PELTXT Key X Type NUMC CHAR Length 10 40 Description Cdigo Pelcula Nombre Pelcula original Ao Duracin en minutos Pais de origen ( Cdigo Pais ISO ) Cdigo gnero (Terror, Drama, etc.) Cdigo director

AGNO DURACION PAIS_ID

NUMC NUMC CHAR

4 4 2

GENERO_ID

NUMC

DIRECTOR_ID

NUMC

10

Pgina 19 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Para Gnero crear en el dominio, mbito de valores (Value Ranges)., con la siguiente lista: Cine de accin Cine de animacin Cine de aventuras Cine Blico Serie B Ciencia Ficcin Cine de autor Cine fantstico Cine negro Cine pornogrfico Comedia (cine) Comedia romntica Documental Drama Melodrama Cine histrico Intriga y suspense Cine musical Cine policiaco Cine de terror Western

Ejercicio N 2.
Crear tabla ZDIRECTORES con los siguientes campos
Field name DIRECTOR_ID NOMBRE NACION FEC_NAC FEC_MUE Key X Type NUMC CHAR NUMC DATS DATS Length 10 60 2 8 8 Description Cdigo director Nombre Completo director Nacionalidad(Cdigo ISO pais) Fecha nacimiento Fecha Fallecimiento

Crear Dominio y Elemento de datos respectivo para cada campo.

Pgina 20 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Ejercicio N 3.
Crear tabla ZDVD con los siguientes campos
Field name DVD_ID PEL_ID PRECIO MONEDA STOCK ZONA Key X X Type NUMC NUMC CURR cuky DEC numc Length 10 10 15 5 5 1 decimals Description Cdigo DVD Cdigo Pelcula Precio Unitario DVD Moneda Stock DVD Zona DVD

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

Pgina 21 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

PROGRAMAS EN ABAP
Creacin de un programa.
A continuacin 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 transaccin SE38 y luego presionar Intro.

A continuacin se describe el paso 2.

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

Pgina 22 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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: Botn Create. Se debe presionar este botn una vez ingresado el nombre del programa.

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

Pgina 23 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

3 1. Title: corresponde a la descripcin del programa, por ej.: Generacin 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 tambin existe Module Pool, Include, entre otros. (estos tipos sern explicados ms adelante). 3. Save: Botn Save (Guardar), se debe presionar para poder guardar el programa en el sistema.

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

Pgina 24 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Opcin A

Guardar

Opcin B

Ac existen dos opciones: Opcin A: Guardar el objeto en una clase de desarrollo de SAP. Generalmente se utiliza esta opcin, 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.

Opcin 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 botn Guardar. Si se realiza lo indicado en la opcin A, aparecer la siguiente pantalla:

Nombre del paquete Aceptar

Pgina 25 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Luego, al presionar el botn Aceptar se desplegar la siguiente pantalla:

Guardar

Al presionar el botn Guardar aparecer la siguiente pantalla.

Cdigo orden de transporte Aceptar

En el cuadro sealado va el cdigo de la orden de transporte en la que quedar almacenado el objeto. Este cdigo se genera en forma automtica. Luego se presiona el botn Aceptar. Por cualquier duda acerca de los paquetes de desarrollo. Revisar el tem Creacin de un paquete de desarrollo (package).

Al presionar el botn Aceptar aparecer la siguiente pantalla.

Pgina 26 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Ac desarrollaremos el programa.

El siguiente cdigo es una muestra bsica de cmo 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.

Pgina 27 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

A continuacin se ve el cdigo mostrado anteriormente y los botones que ms se utilizan:

Procesar Activar Modificar Chequear

Donde: Chequear: Se utiliza este botn para saber si la sintaxis del cdigo es correcta. Modificar: se utiliza este botn cuando se quiera modificar el cdigo fuente del programa.

Pgina 28 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Activar: su funcin es dejar en estado activo el programa en el sistema. Es

importante que los programas sean activados antes de ejecutarlos o testearlos, ya que slo as, al momento de compilar, tomar los cambios que se hayan efectuado.
Procesar: sirve para ejecutar compilar el programa.

Pgina 29 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Clusula SELECT
La clusula SELECT nos permite seleccionar datos de una tabla. Ac hay unos ejemplos bsicos de seleccin de datos. Seleccionar todas las pelculas e imprimir cdigo 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 pelculas con pas origen Chile e imprimir cdigo 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 pelculas con pas origen Chile o Argentina e imprimir cdigo 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.

Pgina 30 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Operator Meaning =, EQ <>, NE <, LT >, GT <=, LE >=, GE True, if the content of col is the same as the content of f. True, if the content of col is different to the content of f. True, if the content of col is less than the content of f. True, if the content of col is greater than the content of f. True, if the content of col is less than or equal to the content of f. True, if the content of col is greater than or equal to the content of f.

Seleccionar todas las pelculas con pas origen Chile o Argentina cuya duracin no sea mayor a 120 minutos, e imprimir cdigo 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.

Pgina 31 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

TABLAS INTERNAS
Las tablas internas permiten trabajar con los datos de una tabla de SAP en forma ms eficiente. En forma lgica se trabaja de la siguiente forma: los datos se encuentran en una tabla de SAP, y travs de cdigo 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 continuacin 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 pelculas e imprimir cdigo 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.

Pgina 32 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Seleccionar todas las pelculas e imprimir cdigo 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 clusula 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.

Pgina 33 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

PARAMETERS (Parmetros).
Los Parameters sirven para obtener informacin de una tabla interna tabla maestra de SAP teniendo como referencia un valor ingresado por el usuario. Cmo funciona internamente?, el parmetro se vincula a un campo de tabla (a travs del cdigo fuente) y al momento de realizar la consulta, la bsqueda de datos se basa en el valor ingresado en pantalla por el usuario. A continuacin 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 cdigo debe ser insertado en un programa nuevo. Al compilarlo, y si no existen errores, en la pantalla debera aparecer lo siguiente:

Pgina 34 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 minsculas Al aplicarlo al cdigo, basndose en el ejemplo anterior sera 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.

Pgina 35 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Al compilar debiera aparecer lo siguiente:

Al presionar este botn, aparecer la ventana con el listado que ingresamos al momento de crear el dominio de datos.

Pgina 36 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

SELECT-OPTIONS (Opciones de seleccin).


Los SELECT-OPTIONS sirven para obtener informacin de una tabla interna tabla maestra de SAP teniendo como referencia uno varios valores ingresados por el usuario. Cmo funciona internamente?, el select-option se vincula a un campo de tabla (a travs del cdigo fuente) y al momento de realizar la consulta, la bsqueda de datos se basa en el valor ingresado en pantalla por el usuario. A continuacin 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 cdigo debe ser insertado en un programa nuevo. Al compilarlo, y si no existen errores, en la pantalla debera aparecer lo siguiente:

Pgina 37 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 minsculas 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 cdigo, basndose en el ejemplo anterior sera 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.

Pgina 38 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Al compilar debiera aparecer lo siguiente:

Al presionar este botn, aparecer la ventana para ingresar el listado de valores a utilizar en la bsqueda de datos.

Pgina 39 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

MODULARIZACION
La modularizacin bsicamente se trata de ir creando el programa y agrupando el cdigo en subrutinas, stas son llamadas a travs de la clusula 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 parmetros 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.

Pgina 40 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Form write_peliculas. Loop at tb_zpeliculas WRITE:/ tb_ZPELICULAS-PEL_ID, tb_ZPELICULAS-PELTXT. Endloop. Endform.

Ejemplo N 3 Ejemplo de subrutina con parmetros 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.

Pgina 41 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

INCLUDES
Los includes son programas que pueden ser llamados desde otros, la nica diferencia con lo explicado en el item Creacin 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 crearn los siguientes includes ZPELICULAS_TOP.: Para declarar variables ZPELICULAS_F01 : Para declarar subrutinas En el cdigo 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 cdigo 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.

Pgina 42 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Finalmente el cdigo 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 .

Pgina 43 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

EVENTOS
INITIALIZATION
En este ejemplo se propondr el ao actual para la bsqueda de pelculas. 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 pas CL en la bsqueda. 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.

Pgina 44 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

AT-SELECTION-SCREEN
Validar datos en la pantalla inicial del reporte. En este ejemplo validamos que en parmetro pas 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 invlido. 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 estn en la tabla T100.

Pgina 45 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

FUNCTIONS (Funciones)
Definicin
Una function se podra 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 funcin Z_LEER_PELICULA que dado un id de pelcula entregue el nombre. Entonces en el programa principal esta funcin se llamara:

Cmo crear una funcin


Paso 1:
Ir a la transaccin SE37. Al hacerlo aparecer la siguiente pantalla:

Crear

Luego presionar el botn Create.

Pgina 46 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 botn Save,

Paso 3:
Al hacerlo aparecer la siguiente pantalla:

De acuerdo al cdigo ejemplo, se deben colocar en los campos. Se debe completar tal como se muestra en la figura y en base al cdigo para llamar a la funcin. Una vez completados los campos se presiona la pestaa Export.

Pgina 47 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 cdigo para llamar a la funcin. Una vez completados los campos se presiona la pestaa Tables.

Pgina 48 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 cdigo para llamar a la funcin. Fijarse en la lnea que sale la palabra PARAMETERS, en este caso la tabla a vincular es zpeliculas.

Pgina 49 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

Guardar

Activar

Esta ventana aparece casi en blanco, lo que se muestra es como queda una vez insertado el cdigo En esta ventana debe ser insertado el siguiente cdigo (pinchar la pestaa Source Code):

Pgina 50 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Cdigo para llamar a la funcin 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 IMPORTING PELTXT = p_nombre_pel EXCEPTIONS Not_ found = 1. If sy-subrc ne 0. Clear p_nombre_pel . Endif. Endform. Form write_peliculas using p_pel_id P_nombre_pel. WRITE:/ p_PEL_ID, P_nombre_pel. Endform.
TIPS: El campo que va en el EXPORTING de la funcin debe agregarse en la pestaa IMPORT (tal como en el Paso 3).

Ver el paso 3
TIPS: El campo que va en el IMPORTING de la funcin debe agregarse en la pestaa EXPORT (tal como en el Paso 4).

Ver el paso 4

Finalmente guardamos y activamos la funcin.

Pgina 51 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Ejercicio N 1 Crear funcin (SE37) Z_READ_DVD que dado un cdigo de DVD, como salida entregue: ID_DVD Nombre Pelcula Nombre Director Ao Pelcula Duracin en minutos Pas de origen Gnero Precio DVD Stock DVD

Ejercicio N 2
Crear funcin Z_READ_DVD_2 que dado un cdigo 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 DVD_ID PEL_ID PELTXT Key Type NUMC NUMC CHAR Length 10 10 40 Description Cdigo Pelcula Nombre Pelcula original Ao Duracin en minutos Pais de origen ( Cdigo Pais ISO ) Cdigo gnero (Terror, Drama, etc.) Cdigo director

AGNO DURACION PAIS_ID

NUMC NUMC CHAR

4 4 2

GENERO_ID

NUMC

DIRECTOR_ID NOMBRE

NUMC

10

Pgina 52 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

PRECIO MONEDA STOCK

Precio Unitario DVD Moneda Stock DVD

Pgina 53 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

PAQUETES DE DESARROLLO (Package).


Creacin de un paquete de desarrollo.
A continuacin 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 transaccin SE80 y luego presionar Intro.

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

Pgina 54 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Ac se debe hacer clic sobre con el botn 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: 1

2 Donde:

Pgina 55 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

1. Package: corresponde al nombre del paquete, por norma debe comenzar por Z Y. Short text: corresponde a la descripcin del paquete. Software Component: corresponde al componente de software, por lo general es HOME. 2. Create: Se debe presionar este botn para crear el paquete.

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

Cdigo de la orden de transporte

Crear orden

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 cul se explica a continuacin. Cdigo de la orden: Ac va el cdigo de la orden de transporte. Crear orden: se debe presionar este botn en que caso de que no exista una orden de transporte.

Pgina 56 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 botn para guardar los cambios.

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

Aceptar

Pgina 57 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Al presionar el botn Aceptar de desplegar la siguiente pantalla:

Guardar

Ac se presiona el botn Guardar, con esta accin quedar almacenado en el diccionario el paquete creado.

Pgina 58 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

FUNCIONES DE GRUPO
Crear una funcin de grupo
A continuacin se describen los pasos para crear una funcin de grupo.

Paso 1:
1.- Desde la pantalla principal de SAP, en la parte superior ingresar la transaccin SE80 y luego presionar Intro.

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

Pgina 59 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Ac se debe hacer clic sobre con el botn 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 funcin.

Pgina 60 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Short text: corresponde a la descripcin del grupo de funcin. Person responsible: es el usuario que crear, en este caso, el grupo de funcin. Save: se debe presionar este botn para guardar el objeto a crear.

Paso 4:
Realizar el paso 6 descrito en el tem Creacin de un dominio de datos.

Pgina 61 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Reportes ALV
Los reportes ALV bsicamente son un conjunto de datos obtenidos a partir de una consulta a una o ms tablas de datos. La salida es generada con un formato ms elegante que un reporte normal. A continuacin 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.

Pgina 62 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 caractersticas del campo ref_fieldname) * ddictxt : El texto del encabezado sera (S)hort (M)iddle (L)ong * reptext_ddic : Informacin del encabezado de la columna * seltext_l : Texto largo * seltext_m : Texto medio * seltext_s : Texto pequeo * outputlen : 18. (ancho de la columna) * hotspot : 'X'. (se activa mano de seleccin) * 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 posicin de la columna * just : Justificacin 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

Pgina 63 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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.

Pgina 64 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Ejercicio N 1:
Crear reporte ALV, dado nombre de pelcula y nombre de director (select-options), entregue el siguiente listado: DVD ID Nombre Pelcula original Ao Duracin en minutos Pas de origen Gnero Nombre director Precio Unitario DVD Moneda Stock DVD Hint: Crear tabla interna con la mismos campos que se exigen en la salida del reporte, despus 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.

Pgina 65 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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.

Pgina 66 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

DYNPROS
Definicin
Una dynpro se podra 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, exportacin de datos a un fichero (archivo) local a un servidor externo, entre otras.

Creacin de una dynpro


Paso 1: Con la transaccin SE38 creamos programa tipo M (modulpool)

Pgina 67 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Paso 2:
Ir a la transaccin SE51

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

Pgina 68 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

2 1

Disposicin: al presionar este botn se abrir una ventana donde podremos disear la pantalla de la dynpro. Al hacerlo se desplegar la siguiente pantalla:

Pgina 69 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Objetos que se pueden agregar a la dynpro

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.

Pgina 70 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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.

Pgina 71 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Variable ABAP en que guardaremos valor de campo de entrada

largo

tipo

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

Pgina 72 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Pgina 73 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Texto a desplegar

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

Pgina 74 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Una vez que se han creado los campos, se debe presionar el botn Logic Process (Lgica del Proceso)

Logic Process

Pgina 75 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 lnea 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.

Pgina 76 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

*&---------------------------------------------------------------------* *& 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 lnea y directamente lo creamos.

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

Pgina 77 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Nombre del Status GUI

Descripcin del Status GUI

Luego al hacer clic en Aceptar aparecer la siguiente pantalla:

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

Grabamos y activamos. Volvemos a la dynpro, lgica. Creamos el ttulo, equivalentemente, con doble clic:

Pgina 78 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Al hacer el paso anterior aparecer la siguiente ventana:

En campo Titulo le damos nombre y luego se presiona el botn Enter. Al hacerlo, volveremos a la ventana de la lgica del programa. En el PAI tenemos que traspasar los campos de entrada en la pantalla al programa principal. Para ello usamos la instruccin field para cada campo de entrada.

Instruccin FIELD

Pgina 79 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

OK_CODE es solo un nombre

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 accin que existe dentro de la pantalla, para eso creamos el modulo USER_COMMAND_0200 (doble clic).

Pgina 80 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

*&---------------------------------------------------------------------* *& 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 botn se presion. En este caso definimos que para el botn SAVE (ver status GUI), grabamos el director y en el caso de BACK salimos de la transaccin. Ahora hay que asignar una transaccin a la dynpro

Pgina 81 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Pgina 82 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Cdigo

Nombre

Tipo

Pgina 83 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Guardar

Crear nueva sesin

N de la Dynpro

Luego presionamos el botn Guardar y listo. Para probar, primero presionemos el botn indicado como Crear nueva sesin Ahora ejecutamos la transaccin, va comando, para ello nos posicionamos en la parte superior de la pantalla e ingresamos la transaccin.

Pgina 84 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

A travs de esta interfaz, podemos ir agregando datos a la tabla. Para grabarlos debemos presionar el botn Guardar de la barra de herramientas.

Pgina 85 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

A continuacin se muestra el cdigo que debe ser inserto, para ello se debe volver a la ventana de la lgica 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 *----------------------------------------------------------------------*

Pgina 86 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

* -->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 field field field field zdirectores-director_id. zdirectores-nombre. zdirectores-nacion. zdirectores-fec_nac. zdirectores-fec_mue.

module user_command_0200.999

Una vez inserto este cdigo, chequeamos si no existen errores, guardamos y estaramos en condiciones en usar la interfaz para ir agregando, en este caso, nuevos directores.

Pgina 87 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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 JVASQUEZ CRUIZ GGONZALEZ PTAPIA Nombre Jaime Vazquez Cristian Ruiz German Gonzalez Pablo Tapia

Solucin: Desde la ventana principal de SAP, escribimos la transaccin SMARTFORM, creamos el smartform y definimos la tabla de entrada usuarios

Pgina 88 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

2. TABLAS 1. Interface form. 3. Def. Tabla ZUSUARIOS

En este ejemplo usaremos la ventana MAIN que se crea por defecto, acurdense 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.

Pgina 89 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Crear texto, HEADER

Fjate en el botn 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, fjate que esto es drag & drop.

Pgina 90 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

1. Lista de campos

4. drag & drop 2. Lista de campos

3. variable de sistema DATE

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

Pgina 91 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

Pgina 92 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

1. Details

Pgina 93 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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.

Ojo con esto

Pgina 94 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

Pgina 95 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

1. Datos globales

Work area para la tabla

Volvamos a la tabla

Pgina 96 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Fjarse que las tablas tienen reas para Cabecera: normalmente aqu definimos el nombre de las columnas. Principal: las lneas se imprimen aqu. Pie: Ejemplo, impresin de los totales

Pgina 97 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Entonces creamos Entrada en tabla, y definimos el tipo de lnea

Pgina 98 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

Pgina 99 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Para que esto tengo sentido, hay que crear el programa ABAP de impresin, 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 OBS: Un smartform es una formname = pa_form funcin(SE37), entonces ac le IMPORTING pasamos el nombre del smartform y fm_name = func_module_name te pasa el nombre de la funcion. El EXCEPTIONS nombre es del estilo no_form = 1 no_function_module = 2 /1BCDWB/SF00000172 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

Aca ejecutamos la llamada al smartform como una funcin, le pasamos los parmetros de impresin y la tabla USUARIOS para imprimir

Lo ejecutamos y podremos observar el formulario creado.

Pgina 100 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

Pgina 101 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

*&---------------------------------------------------------------------* *& Report YTEST_SMART *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT data data YTEST_SMART. USER_NAME_TAB like standard table of USUSERS. 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. "get_users

endform.

*&---------------------------------------------------------------------* *& Form print_data *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form print_data. data: *smartforms related func_module_name type rs38l_fnam, control_parameters type ssfctrlop,

Pgina 102 de 103

Introduccin a la programacin en SAP - Lenguaje ABAP

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

Pgina 103 de 103