Capacitacion ABAP

UNIDAD 1: INTRODUCCIÓN A ABAP Y A SAP Lección 1: Introducción a ABAP y a SAP Centro de Capacitación Profesional E-SAP Es

Views 293 Downloads 11 File size 4MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

  • Author / Uploaded
  • Rocio
Citation preview

UNIDAD 1: INTRODUCCIÓN A ABAP Y A SAP Lección 1: Introducción a ABAP y a SAP Centro de Capacitación Profesional E-SAP Estimado Alumno, bienvenido a E-SAP Centro de Capacitación Profesional SAP & ABAP.

Proceso de Estudios El contenido de esta carrera se encuentra dividido en Unidades. Cada unidad ha sido desarrollada para estudiar el contenido de sus lecciones en el transcurso de 1 semana. Todos los lunes de cada semana se te asignarán nuevas unidades para estudiar. El centro de capacitación ESAP desea que obtengas el máximo provecho de tu capacitación, para ello te recomendamos: Se constante en el estudio de tus lecciones, toma apuntes online y no dudes de consultar al instructor de cuanto tema no te quede claro. No te aceleres ni dejes el estudio de las lecciones para último momento. Las lecciones de cada unidad están diagramadas para estudiarse, repasarse y asimilarse con comodidad en el transcurso de una semana. Obtendrás el máximo de asimilación, si escuchas las locuciones, miras los videos, lees y repasas los textos tomando apuntes a medida que tus estudios progresan. Respeta tu cronograma de estudios. Semanalmente se te asignaran nuevos contenidos. Cada semana se dará por sentado que realizaste, comprendiste y asimilaste los contenidos de la semana anterior. Por ello te recomendamos, que realices el estudio de las lecciones de manera paulatina, no estudiando todas las lecciones al mismo tiempo, para que puedas analizar, asimilar, repasar y tomar apuntes de cada tema tratado. Si bien los contenidos multimedia que presentan las lecciones varían de unas a otras, en parámetros generales, obtendrás el máximo provecho respecto a la asimilación de contenidos, si aplicas la siguiente metodología en el estudio de las lecciones: 1º : Escuchar el Audio de la lección, siguiendo los puntos gráficos indicados por la locución. 2º : Realizar una lectura analítica completa del texto de la lección, análisis de gráficas, imágenes y videos. 3º : Tomar Apuntes Online y realizar los ejercicios propuestos. 4º : Si al finalizar este proceso de estudio de la lección, algún concepto no te ha quedado claro, no dudes en contactar al instructor para evacuar tus 39

dudas.

Datos Personales Es MUY importante que completes tus datos personales e incluyas tu fotografía. Te recomendamos que antes de iniciar tus estudios accedas al panel "Datos Personales" de tu menú y completes tu perfil. Con tus datos personales completos podemos brindarte un mejor servicio de tutorías, debido a que el instructor conociendo tu perfil, sabrá como encarar tu pregunta de la mejor manera. Además obtendrás muchos más beneficios sobre tu certificación digital y participación en la comunidad cuanto más completos tus datos personales estén. Por último te informamos que llegada la fecha de examen, no podrás realizar el mismo si tu perfil de alumno está incompleto.

Aclaraciones importantes Si necesitas una diagramación o prorroga en alguna unidad a medida que realices tus estudios contacta a tu instructor. Visita el siguiente vínculo para conocer las limitaciones sobre las garantías del servicio: Garantías del Servicio. Las consultas a realizar a tu instructor deben ser sobre los temas tratados en el curso estudiado, caso contrario el instructor no tiene responsabilidad de responderlas. Ahora sí!! Eres Bienvenido al centro de capacitación E-SAP. Esperamos que encuentres muy placentera y gratificante tu experiencia de estudios. Estamos en contacto cuando tú lo desees. Te deseamos éxito y aplicación en tus estudios. E-SAP Centro de Capacitación Profesional SAP & ABAP http://esap.cvosoft.com

Lección 2: Presentación instructor

Lección 3: Instalación de SAPNetWeaver 1|

Qué es SAPNetWeaver?

SAPNetWeaver es una versión reducida de SAP que es perfecta para empezar a aprender la programación en ABAP, entre otros temas. La licencia inicial de

39

SAPNetWeaver es por 30 días pero puede extenderse. Esto lo explicaremos más adelante en el curso.

2|

Donde descargarlo?

Vamos a descargar el SAPNetWeaver de la SDN, pero previamente a la descarga debemos registrarnos como usuarios. Para ello, hacemos doble click en el siguiente link: DESCARGAS Registrarnos en la SDN Una vez registrados, se nos enviará a nuestro correo personal un mail con el usuario y password. La password podemos cambiarla una vez logueados a la SDN. Ahora sí, estamos listos para descargar el SAPNetweaver y lo haremos desde el link que mostramos a continuación. Aquí descargaremos dos archivos de más de 3GB de tamaño entre los dos, que deberemos descargar en una misma carpeta en nuestro disco rígido. Es importante saber que en la SDN existen varias versiones disponibles para instalar. Nosotros explicaremos el procedimiento de instalación de la versión SAP NetWeaver 7.01 SR1 SP3 ABAP Trial Version. Si bien la instalación de las otras versiones es casi idéntica, pueden variar algunas pantallas del proceso de instalación.

DESCARGA SDN Descargar SAPNetweaver

39

DESCARGA ALTERNATIVA Debido a que en ciertas ocasiones no funcionan los links de descarga de la SDN, existe esta variante para que descarguen los ejecutables. Descargar SAPNetweaver Será necesario instalar la JRE en caso de no estar instalada en la máquina. Para esto, accederemos al sitio oficial de Sun Microsystems, seleccionaremos la plataforma que en nuestro caso será Windows y el lenguaje que será Multilenguaje. Finalmente, descargaremos el programa en nuestra maquina y luego lo ejecutamos. Pero debemos tener en cuenta que solo debe instalarse la versión 1.4.2.x que podemos descargar en el siguiente link: DESCARGAS Descargar JRE Para descomprimir los archivos de instalación de SAPNetWeaver necesitaremos del programa Winrar. Si todavía no lo tenemos instalado en nuestra máquina, podremos descargarlo de la siguiente dirección: DESCARGAS Descargar WinRar

3|

Requerimientos del sistema

Los requerimientos de la PC para realizar la instalación de SAPNetweaver son: Tener instalada la JRE 1.4.2.x Windows XP Profesional Service Pack 2, Windows Server 2003 o Windows Vista. En caso de utilizar Windows 7 u otro sistema operativo distinto a los anteriormente mencionados les recomendamos la instalación de una máquina virtual. Este procedimiento lo explicamos en la sección de descargas de esta lección. El Hostname no debe tener más de 13 caracteres

39

El Filesystem debe ser NTFS

En caso de no tener un sistema NTFS será necesario convertirlo utilizando el procedimiento que se puede descargar del área de descargas de la lección. Internet Explorer 5.5 o superior o Firefox 1.0 o superior Mínimo 2GB de memoria RAM Mínimo Procesador Intel Pentium III 1.1 GHz o superior (o procesador compatible) Mínimo 30 GB de espacio libre en el disco rígido (24GB permanentes libres) Resolución del monitor (1024*768 o superior a 256 colores) Estar seguro que no existan otros sistemas SAP instalados en la máquina Si ya realizamos la instalación y falló, debemos desinstalarlo tal como se explica en la sección de descargas. El sistema SAP requiere de muchos puertos para servicios de comunicación. Por lo tanto, previamente a la instalación chequear que el archivo Windows/System32/drivers/etc/services no tenga entradas para los puertos 3200, 3600 y 8000. Si existen deben comentarse colocando un # delante de la línea.

39

Para instalar administrador

y utilizar

el

sistema,

hay

que

estar

logueado

como

Si se utiliza un servidor DHCP para asignar dinámicamente la dirección IP de la máquina, no será necesario instalar ningún agregado. Caso contrario, o si la máquina no se conecta a internet, se deberá instalar el Ms LoopBack Adapter. El procedimiento de instalación del Ms LoopBack Adapter está documentado dentro de la documentación de la instalación y lo comentamos en los siguientes puntos de la lección.

4|

Recomendaciones

Desactivar el firewall de windows y el antivirus que tengamos instalado Es recomendable desactivar el firewall de windows y des-instalar el antivirus que tenemos instalado. Servicio “Servidor” de nombre lanmanserver funcionando Asegurarse que este servicio está activo y funcionando ya que sino la instalación falla. Debe estar fijado en modo de inicio automático.

Aumentar el tamaño de la memoria virtual del equipo Para ello utilizar el Procedimiento para aumentar la memoria virtual del equipo que está disponible en la sección de descargas de la lección. Usuario del sistema como Administrador y con password El usuario con el que accedemos a Windows debe tener permisos de administrador y contraseña. Es importante ya que la consola de SAP trabajará con este usuario y con su contraseña. Si no la fijamos la consola fallará. Generar un punto de restauración en Windows previo a la realización de la instalación para realizar la vuelva atrás en caso de error. Este procedimiento lo explicamos en la sección de descargas de la lección. 39

5|

Observación preliminar

Antes de comenzar con el procedimiento formal de la instalación del sistema consultaremos la documentación oficial que viene con los archivos que previamente descargamos en nuestra máquina. Lo primero que haremos será ejecutar el primero de los dos archivos de instalación, y dentro de los archivos que se descomprimen, haremos doble click en el archivo START.htm.

Luego de unos minutos, veremos la siguiente pantalla de bienvenida:

39

Presionamos Next y vemos la siguiente pantalla What to expect:

Presionamos Next y vemos la pantalla de requisitos para que el sistema funcione. En el último punto de esta pantalla figura el paso a paso para la instalación del MS LoopBack Adapter solo en caso de tener configurada una IP fija en la computadora.

Presionamos Next y vemos la siguiente pantalla donde figura la dirección web para renovar la licencia.

39

Presionamos Next y veremos la pantalla con la explicación del procedimiento de instalación.

6|

Pasos de la instalación

La instalación del SAPNetWeaver consiste en la instalación del servidor de aplicaciones y del SAP GUI que es la interfase gráfica que nos va a permitir acceder al sistema SAP. La instalación de ambas aplicaciones puede tardar más de cuatro horas dependiendo del funcionamiento de la computadora. Los pasos para la instalación son los siguientes: 39

Debemos colocar, si no lo hemos hecho antes, los dos archivos ejecutables dentro de una misma carpeta. Instalación del servidor de aplicación Ejecutaremos el archivo SAP_Netweaver701SR1_2008_Installation_Master/IM_WINDOWS_I386/sapinst.exe.

Veremos la siguiente pantalla donde seleccionaremos la opción SAP Netweaver 7.0 SR1 including Enhacement Package 1/SAP Application Server ABAP/MaxDB/Central System/Central System y presionamos Next.

39

Luego leemos y aceptamos la licencia del producto.

39

En caso de no tener instalada la JRE veremos la siguiente pantalla. Aquí tendremos que utilizar el browser para colocar la ruta donde se encuentra la carpeta de la JRE. En caso de tener instalada correctamente la JRE versión 1.4.2.X no veremos esta pantalla.

39

Luego debo elegir un nombre para el SAPSID y presiono Next.

39

En la siguiente pantalla, simplemente presionamos el botón Next sin ingresar datos.

39

Ahora ingresamos la password master para todos los usuarios. Si presionamos F1 sobre el campo veremos las condiciones que debe cumplir la password.

39

En la siguiente pantalla, el programa de instalación evaluará si la configuración de nuestra computadora cumple con los pre-requisitos para la instalación. Seguramente habrá alguno o más puntos que no cumplamos. Igual así, seguiremos adelante con la instalación presionando el botón Cancel.

39

Luego veremos la siguiente pantalla para la instalación del SAP CRYPTOGRAPHIC SOFTWARE. Simplemente presionamos el botón Next.

39

En la siguiente pantalla vemos un resumen de las configuraciones previamente seteadas. Presionamos Next.

39

Ahora sí, la instalación del servidor de aplicaciones ha comenzado.

39

Luego de cuatro horas aproximadamente, dependiendo del equipo, si la instalación finalizó correctamente, veremos la siguiente ventana.

Luego de finalizada la instalación del servidor de aplicación, veremos en nuestro escritorio el ícono del SAP Management Console.

Instalación del SAP GUI Ahora vamos a instalar el SAP GUI. Para esto, tendremos que ejecutar el archivo SAPGUI710C3/SAP_GUI_7.10_C3_Trial_2009217_1034.exe y veremos la siguiente pantalla.

Luego, en la siguiente pantalla, tildaremos a la izquierda del texto SAP GUI 7.10 C3 Trial y presionamos el botón Next.

39

Finalizada la instalación del SAP GUI, veremos en el escritorio de nuestra PC dos íconos nuevos, uno es el TWEAK SAP GUI el cual nos permitirá configurar ciertos aspectos no obligatorios de visualización de la pantalla y el otro es el SAP Logon el cual nos permitirá loguearnos al sistema SAP.

Llegado a este punto de la instalación, deberemos reiniciar la computadora.

7|

Configurando el SAP Logon

Antes de poder tener acceso al sistema SAP, se tiene configurar una nueva entrada en el SAPLogon. Para esto, hacemos doble click en el SAP Logon y veremos la siguiente pantalla.

39

Presionamos el botón Nueva entrada y luego continuar y en la siguiente pantalla completamos los campos con los siguientes datos y después presionamos el botón Terminar.

39

8|

Iniciando el sistema SAP

Una vez que hayamos terminado la instalación del servidor de aplicaciones y el SAPGUI reiniciaremos nuestro equipo y al iniciarse veremos dos usuarios: uno es el del administrador que comúnmente utilizamos y el otro es el NSPADMIN que crea la instalación. Para utilizar el sistema SAPNetWeaver, utilizaremos el usuario administrador con el que venimos trabajando, no se debe utilizar el usuario NSPADMIN. Para poder trabajar con el sistema SAP, cada vez que encendamos nuestra PC, debemos levantar el servidor de aplicaciones. Para ello, hacemos doble click en el ícono SAP Management Console. Una vez abierta la aplicación, abrimos el menú NSP/Todas las tareas y presionamos Start.

Luego en la siguiente pantalla, se nos pedirá que ingresemos la password del usuario Administrador de Windows con el que instalamos la aplicación.

39

Finalmente, si todo resulto bien, al cabo de un minuto o menos veremos en verde los procesos.

9|

Recomendaciones Post instalación

Es importante tener en cuenta las siguientes recomendaciones luego de realizada correctamente la instalación: No debemos actualizar la versión de la JRE a pesar de las recomendaciones de Windows.

Lección 4: Qué es SAP? 39

1|

Qué es SAP?

SAP es un sistema ERP, que sirve para la administración integral de una empresa. El sistema SAP está compuesto por una serie de áreas funcionales o módulos que responden de forma completa y en tiempo real a los procesos operativos de las compañías. Aunque pueden ser agrupados en cuatro grandes áreas (financiera, logística, recursos humanos y funciones multiaplicaciones), funcionan de un modo integrado, dado que existen conexiones naturales entre los distintos procesos.

2|

Arquitectura SAP

SAP se configura como una arquitectura cliente-servidor de tres capas, con un reparto claro de las funciones. Las bases de datos están instaladas en un servidor y componen la capa de datos, el sistema es instalado en otro servidor y compone la capa de aplicación y la capa de presentación está formada por el SAP GUI que es la interfase gráfica del usuario de SAP.

39

3|

Qué Módulos Funcionales componen al sistema SAP?

Existen varias versiones del sistema, siendo la más utilizada la R/3 estándar. Los principales módulos de esta solución son: SD (Comercial) MM (Gestión de Materiales) PP (Planificación de Producto) QM (Gestión de Calidad) PM (Mantenimiento) HR (Gestión de Recursos Humanos) FI (Gestión Financiera) CO (Controlling) TR (Tesoreria) PS (Sistema de Proyectos) WF (Workflow) 39

IS (Soluciones Sectoriales) Aparte de la solución R/3 estándar, existen otras soluciones del sistema, especialmente diseñadas según los requerimientos de la industria a la que está destinada. Así existe la solución ISU-Utilities para empresas de servicios o la solución Banking para bancos.

Lección 5: Qué es ABAP? 1|

Qué es Abap?

ABAP es un lenguaje de cuarta generación, propiedad de SAP, que se utiliza para programar la mayoría de sus productos ( R/3, etc.). Mediante ABAP se desarrollan nuevas aplicaciones como complemento a las ya existentes, en la versión de SAP instalada o como apoyo a la configuración del sistema, lo que es llamado en SAP como Z y permite a los usuarios cumplimentar los requerimientos no satisfechos por la versión estándar del sistema.

2|

Fortalezas del ABAP

Las principales fortalezas del lenguaje son: Utiliza sentencias de OPEN SQL para conectarse con prácticamente cualquier base de datos. Es un lenguaje estructurado que puede ser también programado orientado a objetos. Cuenta con miles de funciones para el manejo de archivos, bases de datos, fechas, etc. Permite conexiones RFC para conectar a los sistemas SAP con cualquier otro sistema o lenguaje de programación. Permite la creación de aplicaciones multiidioma. Posee una ayuda muy potente sobre la sintaxis y la semántica del lenguaje. Permite la realización de reportes en forma rápida y sencilla. ABAP. Es un lenguaje de programación orientado a eventos donde la secuencia de instrucciones depende del cumplimiento de una condición o evento.

39

3|

Secuencia de Eventos

La estructura de un programa ABAP no es la clásica estructura TOP-DOWN, típica de los lenguajes estructurados. En el siguiente gráfico vemos la secuencia de eventos que puede cumplir un programa.

Lección 6: Ambientes, Mandantes y Clases de desarrollo o Paquetes 1|

Ambientes y Mandantes

Como en todos los ámbitos de desarrollo de software, se configuran en SAP tres ambientes, uno de desarrollo, uno de pruebas y otro de producción, que es donde se utilizan las aplicaciones desarrolladas y probadas satisfactoriamente. A su vez, en cada ambiente, existen distintos mandantes, siendo independientes los datos que se visualizan en cada mandante dentro del mismo ambiente. Por ejemplo, puede existir el mandante 100, que se utiliza para la configuración del sistema, el mandante 200 que se utiliza para el desarrollo de las aplicaciones y el mandante 300, que se utiliza para las pruebas unitarias dentro del ambiente de desarrollo. Por último, existen dentro de cada mandante, dos tipos de objetos, los que son independientes de mandante y los que son dependientes de mandante. Por ejemplo, un programa es independiente de mandante ya que si lo creamos en el mandante 200, el programa también va a existir en los mandantes 100 y 300. Los datos de una tabla son dependientes del mandante ya que si a esta tabla le ingresamos registros en el mandante 200, estos registros no van a existir en los restantes mandantes dentro del mismo ambiente. En el gráfico que vemos a continuación, tenemos una posible distribución de los mandantes y los ambientes dentro de una instalación SAP. 39

Los datos de las bases de datos y los formularios (concepto que veremos más adelante) son dependientes del mandante en el que fueron creados.

2|

Clase de desarrollo o Paquete

La Clase de Desarrollo o también llamada Paquete es una forma de organizar todos los nuevos objetos que se crean en SAP, clasificándolos generalmente por módulos. Poniendo un ejemplo, un objeto sería un archivo y la clase de desarrollo sería la carpeta donde guardamos el archivo. Existe la Clase de Desarrollo $TMP, que se utiliza para los objetos temporales que no se van a transportar entre ambientes, osea para pruebas. Al momento de crear un nuevo objeto en el sistema, SAP nos proporcionará la pantalla que vemos a continuación para que le asignemos el Paquete al que pertenece. En este caso, el paquete es Z_WEB_SERVICE.

Lección 7: Login al sistema SAP y Ayuda en ABAP Login al sistema SAP

39

1|

Como dijimos anteriormente, la arquitectura que utiliza SAP es Cliente-servidor de tres capas, donde el sistema y las bases de datos están instaladas en el servidor y los usuarios se conectan a éste a través del SAP Logon.

Es importante recordar, que para poder conectarnos a SAP en nuestra PC debemos levantar el servidor de aplicaciones tal como lo explicamos en la lección de Instalación de SAPNetWeaver. Luego, hacemos doble click en el SAP Logon y introducimos el mandante que es 001, el usuario que es BCUSER y la password que es minisap.

visualizamos

el

modo

SAP con

el

menú

39

Una vez introducidos los datos, correspondiente al usuario logueado.

Desde este sector, podemos acceder a todas las transacciones permitidas para el usuario logueado. Otra forma de hacer lo mismo es escribir la transacción a la que deseamos ir en el campo de comandos. Por ejemplo, más adelante veremos que la transacción SE38 nos lleva al Editor ABAP.

2|

Ayuda en ABAP

Existen cuatro sistemas de ayuda para aprender y desarrollar en ABAP. Es muy importante tenerlos en cuenta para resolver rápido cualquier inquietud que nos surja. Ellos son: Desde el entorno de trabajo, presionando F1 sobre cualquier sentencia, el sistema nos proporcionará ayuda con ejemplos que generalmente son muy útiles.

39

Usando la ayuda extendida de SAP. En todas las pantallas de SAP tenemos la opción Help desde la que podemos buscar información.

SDN. Donde vamos a encontrar una enorme cantidad de información y ayuda sobre cualquier tema dentro del mundo SAP.

39

Internet en general. Aparte de la SDN, existen muchas otras páginas, foros y blogs donde encontraremos información muy útil.

Lección 8: Video - La navegación en el entorno de desarrollo ABAP

Lección 9: Mi primer programa ABAP 1|

Mi primer programa ABAP

Vamos a crear nuestro primer programa en ABAP. Para esto nos logueamos a SAP como lo vimos en la lección anterior, escribimos en el campo de comandos la transacción SE38 y presionamos enter. Visualizaremos el Editor ABAP, allí escribiremos el nombre del programa que vamos a crear, el cual debe empezar con Z y presionaremos el botón .

39

Luego aparecerá una ventana que nos va a pedir: Título: Debe ser lo más descriptivo posible. En este caso será "Mi primer programa Abap". Tipo: Se refiere al tipo de objeto que estamos creando. Generalmente será "Programa ejecutable". Luego presionamos grabar y el sistema en una nueva ventana nos solicitara que ingresemos el paquete o clase de desarrollo, a lo que presionaremos el botón "Objeto local" que es lo mismo que escribir $TMP y presionar grabar. En el editor escribiremos el siguiente código y luego presionaremos el botón que compilará y activará nuestro programa.

39

"Activate"

Todas las sentencias en ABAP terminan con un punto. ABAP no distingue entre minúsculas y mayúsculas. Una sentencia ABAP puede ocupar más de una linea. Las cadenas de texto se escriben entre comillas simples. Una vez compilado sin presionando la tecla F8.

errores,

lo

ejecutaremos con

el

botón ejecutar

o

La pantalla de salida que visualizaremos será la siguiente:

Felicitaciones! acabas de crear tu primer programa ABAP. PRETTY PRINTER. Se utiliza para unificar los criterios de mayúsculas y minúsculas en los programas ABAP. Para configurarlo acceder a UTILITIES->SETTINGS->ABAP EDITOR->PRETTY PRINTER

39

2|

Ordenes de Transporte

En el ejemplo anterior, creamos un objeto que como es de prueba, lo asignamos a la clase de desarrollo $TMP. Pero si quisiéramos transportarlo a otro ambiente tenemos que asignarlo a una clase de desarrollo o paquete que no sea de prueba. Luego de realizar la asignación, el sistema nos solicitará que asociemos el objeto creado a una orden de transporte que es un número único en SAP que sirve para agrupar objetos que van a ser transportados entre ambientes.

Una orden de transporte puede ser de dos tipos: Customizing: cuando se utiliza para la configuración del sistema. Workbench: cuando se utiliza para el desarrollo de programas. Para la administración de las ordenes de transporte se utilizan las transacciones SE10, SE01 y SE09. Una orden de transporte puede tener dos estados: Modificable: cuando la orden puede ser modificada, osea se le pueden agregar o quitar objetos. Liberada: cuando la orden no puede ser modificada, está lista para ser transportada a otro ambiente. sobre la

39

Para liberar una orden, basta con presionar el botón para transportar tarea que compone la orden y también sobre orden misma.

UNIDAD 2: DECLARACION Y PROCESAMIENTO DE DATOS

39

Lección 1: Características de los programas ABAP 1|

Aplicaciones ABAP

Dentro del mundo ABAP se pueden crear distintos tipos de objetos. Los más comunes de ellos son: Reporte, Reporte interactivo y Reporte ALV Programa de Dialogo Formularios Batch Input User exists Field exits Funciones y RFC A medida que avanza el curso vamos a ir viendo en detalle cada uno de ellos. Ahora nos vamos a ocupar de los llamados Reportes Clásicos o simplemente Reportes. REPORTE. Es un programa que consiste en una serie

de instrucciones y palabras clave cuyo objetivo es procesar datos de entrada o datos que se obtienen de las tablas del sistema y mostrar los resultados del procesamiento por pantalla.

Existen cuatro tipos de palabras claves: Declarativas: se utilizan para declarar datos que vamos a usar dentro del programa. Ej.: DATA, TABLES y CONSTANT. Eventos: que ocurren en el programa. Ej.: START-OF-SELECTION, TOP-OF-PAGE, etc. Control: sentencias de control de flujo de programa. Ej.: IF, WHILE, DO, etc. Operativas: realizan funciones según la palabra clave. Ej.: WRITE, MOVE, etc. Generalmente la estructura de un reporte va a ser de la siguiente manera:

39

Existen dos formas de utilizar los comentarios en un programa ABAP: Con un asterisco en la primera columna de la fila. Con comillas dobles en cualquier posición de la línea.

2|

Eventos de un programa ABAP

Como dijimos anteriormente, la programación ABAP es orientada a eventos. Los principales eventos que pueden ocurrir dentro de un programa son: INITIALIZATION Es el primer evento que se ejecuta. Nos permite inicializar los campos de la pantalla de selección de un programa o cualquier otra variable. AT SELECTION-SCREEN Permite formatear la pantalla de selección según nuestras necesidades. START-OF SELECTION Si no es precedido por otro evento, el sistema inserta este evento antes de la primera línea de código ejecutable. END-OF-SELECTION Contiene las últimas sentencias que se ejecutarán en el programa. AT LINE-SELECTION Permite al usuario seleccionar una línea de un listado y realizar alguna acción. Se utiliza en los reportes interactivos. AT USER-COMMAND Se ejecuta cuando el usuario presiona un botón del menú en un reporte.

39

TOP-OF-PAGE Ejecuta las instrucciones al inicio de la página (encabezados). END-OF-PAGE Ejecuta la instrucciones al final de la página (Pie de Página). Veamos un ejemplo de como usaríamos los eventos en un programa ABAP. Para ello nos logueamos a SAP, ingresamos a la transacción SE38 y creamos el programa Z_PRUEBA_EVENTOS que lo grabamos como programa ejecutable y como objeto local con el siguiente código:

Si ejecutamos este programa produciríamos la siguiente salida:

No importa el orden en el que se escriban los eventos dentro de un programa.

39

3|

Utilizando el debugger

Es muy importante saber utilizar el debugger ya que en programación las cosas solo funcionan si y solo si son perfectas osea sin errores. Algunos errores se detectan a simple vista pero para resolver otros vamos a necesitar ejecutar nuestro programa y saber exactamente cuales son los valores que van tomando las variables internas del mismo. Para esto existe el debugger. Veamos como debaguear el programa Z_PRUEBA_EVENTOS que acabamos de crear. Para ello, visualizamos el programa a través de la transacción SE38 y colocamos un breakpoint luego de la declaración de las variables presionando el botón para breakpoints de sesión que durarán mientras la sesión este abierta o para breakpoints externos.

Luego ejecutaremos el programa y veremos en debugger en acción.

39

Presionando el botón Single step sentencia a sentencia.

o la tecla F5, ejecutaremos paso a paso osea

Presionando el botón Execute o la tecla F6, ejecutaremos subrutina a subrutina sin entrar en el contenido de cada una. Más adelante veremos el concepto de subrutina en detalle. Presionando el botón Return o la tecla F7, retornaremos a la rutina de nivel superior de la rutina actual en ejecución. o la tecla F8, continuaremos la ejecución hasta el final

39

Presionando el botón Run del programa.

En la parte inferior de la pantalla del debugger podemos ingresar el nombre de cualquiera de las variables del programa para saber cual es su contenido en cualquier momento del mismo. También podemos modificar el contenido de una variable para saber cual sería el resultado del programa con esta modificación.

Lección 2: Video - Los eventos y el debugger

LECCION_2_1_ABAP_INICIAL_V4_2.swf

Lección 3: Declaración de datos 1|

Tipos de datos ABAP

Los principales tipos de datos que se utilizan en ABAP son:

También existen los Tipos STRING que se utiliza para cadenas de longitud variable y XSTRING que se utiliza como un string hexadecimal para cadenas de caracteres muy grandes. Para declarar una variable utilizaremos la palabras clave DATA y TYPE tal como vemos en el siguiente ejemplo.

Con el agregado de VALUE, inicializamos con un valor determinado a una variable. 39

Cuando declaramos variables de tipo caracter (TYPE c) debemos especificar la longitud de la cadena. De lo contrario el sistema asumirá que su longitud es 1 caracter. También podemos declarar variables que sean de igual tipo que otras ya creadas en el sistema. Para esto utilizamos la sentencia LIKE. En el siguiente caso, creamos la variable V_CLIENTE que es del mismo tipo que el campo KUNNR de la tabla Maestro de Clientes.

2|

Estructuras de datos

Una estructura es un conjunto de campos relacionados. Los componentes pueden ser simples campos, otras estructuras o inclusive tablas. Existen tres formas de definir una estructura: La primera es utilizando la palabra clave DATA. En el siguiente ejemplo creamos una estructura de clientes que tendrá los mismos campos que la tabla de clientes KNA1.

En la segunda forma también utilizamos la palabra clave DATA pero vamos a crear una estructura de clientes solo con ciertos campos.

La tercera forma es utilizando TIPOS, que son formatos de estructuras que pueden ser utilizados por cualquier otra estructura sin necesidad de reescribir el código. Para esto se utiliza la palabra reservada TYPES.

39

3|

Constantes

Una constante es una variable que se declara dentro de un programa cuyo valor permanecerá tal como lo indica su nombre constante a la largo del programa. Para su declaración se utiliza la palabra reservada CONSTANTS.

La utilización de constantes ayuda a que el mantenimiento de las aplicaciones ABAP sea más sencillo.

4|

Include de datos

Un include es un objeto ABAP que se utiliza entre otras cosa para modularizar la declaración de los datos de manera que el programa ABAP resulte más legible y mantenible. Para su creación se utiliza la palabra clave INCLUDE seguida del nombre del include.

La utilización de INCLUDES considerada una buena práctica programación.

5|

es de

Variables del sistema

A parte de las variables que define el programador, existen otras que han sido definidas por el sistema y que son de gran utilidad dentro de los programas ABAP. Se encuentran en la tabla SYST y contienen información que va desde la hora del sistema a saber si se ejecuto correctamente una sentencia ABAP o una actualización a una base de datos. Su contenido no puede ser modificado en los programas sino que cambia simplemente con la ejecución de los mismos. Las más comúnmente usadas son: SY-SUBRC: código de retorno posterior a la ejecución de una sentencia ABAP. Si la ejecución fue correcta, entonces es 0, sino es distinto de cero SY-DATUM: contiene la fecha del sistema. SY-UZEIT: contiene la hora del sistema. SY-INDEX: contiene la cantidad de repeticiones de los bucles.

39

Leccion 4: Video - Gestión de versiones

LECCION_2_3_ABAP_INICIAL_V4.swf

Lección 5: Procesamiento de los datos 1|

Asignación de valores

Existen dos formas básicas para asignar un valor a una variable. La primera consiste en la asignación simple.

La segunda forma es mediante la sentencia MOVE.

2|

Inicialización de variables

Para la inicialización de las variables utilizamos la sentencia CLEAR.

Si inicializamos las variables que declaramos a continuación:

El contenido de los campos sería el siguiente:

39

Una sentencia muy importante a la hora de consultar el contenido de las variables que declaramos en nuestros programas es IS INITIAL. En la siguiente imagen vemos un ejemplo de su utilización.

La sentencia IS INITIAL es muy útil cuando se trabaja con tablas internas (concepto que veremos más adelante en el curso). Para más ayuda presionar F1 sobre la sentencia.

3|

Operaciones con caracteres

Existen algunas funciones que se utilizan para tratar caracteres que son muy útiles en el trabajo diario de un programador ABAP. Ellas son: CONCATENATE: se utiliza para concatenar varios campos alfanuméricos en uno solo.

Esta

sentencia

concatena

los

campos V_CAMPO1,

V_CAMPO2 y

V_CAMPO3 en

la variable V_CAMPO. Todos estos campos son de tipo caracter. Con la cláusula SEPARATED BY se puede especificar un campo alfanumérico que se utilizará como separador entre los campos V_CAMPO1, V_CAMPO2 y V_CAMPO3. La sentencia CONCATENATE es muy útil cuando se trabaja con fechas ya que las fechas en SAP son del formato AAAAMMDD y cuando se muestran en un listado se deben convertir a DD.MM.AAAA. Para más ayuda presionar F1 sobre la sentencia. TRANSLATE: se utiliza para convertir caracteres de mayúscula a minúscula o viceversa, o para realizar sustituciones de caracteres a través de ciertas reglas.

39

La sentencia anterior convierte a mayúsculas el contenido de la variable V_TEXTO, siendo V_TEXTO de tipo caracter. La sentencia TRANSLATE es muy útil para la conversión de texto a mayúscula o minúscula. Para más ayuda presionar F1 sobre la sentencia. REPLACE: reemplaza cierta parte de una cadena de caracteres por otra cadena de caracteres o caracter.

La sentencia anterior reemplaza el contenido de la variable V_TEXTO que es 'Hola' por el texto 'Casa'. La sentencia REPLACE es muy útil cuando se trabaja con importes. Para más ayuda presionar F1 sobre la sentencia. SPLIT: divide a un campo alfanumérico en varios campos por un separador.

La sentencia anterior utiliza el separador ',' para dividir el contenido del campo V_TEXTO_LARGO en las variables V_CAMPO1, V_CAMPO2, V_CAMPO3 y V_CAMPO4 que son de tipo caracter (TYPE c). Si todos los campos destino son lo suficientemente grandes para almacenar las partes del campo V_TEXTO_LARGO, SY-SUBRC valdrá 0, caso contrario valdrá 4. La sentencia SPLIT es muy útil cuando se trabaja con textos largos y es necesario separarlos por algún caracter especial. Para más ayuda presionar F1 sobre la sentencia. SHIFT: se utiliza para desplazar el contenido de un campo alfanumérico. Realiza el desplazamiento del contenido de un campo hasta un string dado.

La sentencia anterior realiza el desplazamiento del campo V_ALFABETO hasta la quinta posición, quedando el resto de los caracteres que componen a V_ALFABETO en la variable y eliminando los dos primeros.

39

La sentencia SHIFT es muy útil cuando se trabaja con números de documentos o cualquier otro número. que haya sido grabado en tablas SAP con ceros a la izquierda. Para más ayuda presionar F1 sobre la sentencia. SEARCH: se utiliza para buscar una cadena de caracteres dentro de un campo alfanumérico.

La sentencia anterior busca en el campo V_ALFABETO la secuencia de caracteres 'ABC'. Como la secuencia existe, devolverá SY-SUBRC igual a 0. Caso contrario, si no existiera, sería distinto igual a 4.

La sentencia SEARCH es muy útil cuando se trabaja con tablas internas y se busca la ocurrencia de una determinada cadena en un campo de la tabla. Para más ayuda presionar F1 sobre la sentencia.

CONDENSE: se utiliza para borrar espacios en blanco en campos alfanuméricos. Borra cualquier secuencia de espacios en blanco, dejando solo uno que exista entre palabras existentes en el campo. Los espacios en blanco por la izquierda también desaparecen.

La salida en pantalla de la sentencia anterior sería 'Dr. Rafael Castro'. Con el agregado de la cláusula NO-GAPS al final de la sentencia, se eliminarán todos los espacios en blanco osea que también se eliminan los espacios existentes entre las palabras. La sentencia CONDENSE es muy útil en los reportes, cuando se quiere formatear la salida en pantalla de un campo determinado. Para más ayuda presionar F1 sobre la sentencia.

4|

Operaciones Aritméticas

En ABAP las cuatro operaciones básicas ( +, -, * , / ) se pueden implementar de dos maneras obteniendo el mismo resultado.

39

Siendo el resultado el mismo de ambas formas. También se utilizan las siguientes sentencias para operar aritméticamente con datos:

Lección 6: Control del Flujo de Datos 1|

Condiciones

Las condiciones en ABAP se pueden representar de dos formas. Una es utilizando la palabra clave IF-ENDIF.

Si ninguna de las condiciones es valida, el sistema ejecutará las declaraciones que estén debajo del ELSE. La otra forma es mediante CASE-ENDCASE.

Si ninguna de las condiciones es valida, el sistema ejecutará las declaraciones que estén debajo del WHEN OTHERS. En ambas formas se utilizan los siguientes operadores lógicos.

39

Si en cada condición, se chequea que la variable sea igual a determinado valor, y la cantidad de condiciones es alta, sería aconsejable utilizar CASE-ENDCASE.

2|

Bucles

Los bucles en ABAP se puede pueden representar de tres formas. La primera es mediante la palabra clave LOOP-ENDLOOP.

En el ejemplo anterior, Tabla es una tabla interna (Concepto que veremos en detalle más adelante). Con el agregado de la cláusula WHERE se puede restringir el número de líneas a leer ya que se producirá la iteración siempre y cuando se cumpla la condición. Para más información presionar F1 sobre la sentencia. La utilización de la cláusula WHERE siempre y cuando sea posible es una buena práctica de programación. Otra forma es mediante la palabra clave DO-ENDDO.

La iteración se ejecutará solo si la condición es verdadera.

3|

Sentencias de Control

Las sentencias de control se utilizan para terminar el procesamiento de un bucle, de un proceso o de un programa. Ellas son:

39

CHECK : verifica si la condición es verdadera. Si la condición es falsa, y la sentencia está dentro de un bucle, se saltearán todas las sentencias siguientes que estén dentro del bucle y se continuará con la siguiente iteración. Fuera de un bucle se saltearán todas las sentencias hasta el final del evento o del programa en proceso.

EXIT: dentro de un bucle saldrá del bucle, dentro de una subrutina saldrá de la misma y fuera de un bucle saldrá del programa.

CONTINUE: se utiliza solo dentro de bucle. Luego de la ejecución de la sentencia el sistema continua con la siguiente iteración.

STOP: se finaliza el programa en ejecución pero antes se ejecuta el evento ENDOF-SELECTION.

LEAVE: se finaliza el programa en ejecución pero no se ejecutará el evento ENDOF-SELECTION.

Lección 7: Formateando un Listado 1|

Formato de salida de los datos

ABAP ofrece una serie de instrucciones especialmente diseñadas para generar reportes de manera sencilla. Una de ellas es la sentencia WRITE.

39

Donde offset indica la columna donde empezará la impresión y long indica la longitud de los valores a visualizar. Veamos un ejemplo:

Y la salida por pantalla es:

Existen muchos comandos adicionales a WRITE que se utilizan para producir una salida por pantalla determinada. Algunos de ellos son: Left-justified

Salida justificada a izquierda

Centered

Salida Centrada

Right-justified

Salida justificada a derecha

no-zero

Si el campo contiene ceros, estos serán cambiados por blancos

no-gap

El blanco despues del campo que se desea imprimir es omitido

no-sign

El signo no aparece en la salida

decimals n

n define el número de digitos decimales

round n

Redondea el campo de salida para los tipos p

dd/mm/yyyy

Fecha con separadores

Para dejar una línea en blanco se utiliza la sentencia SKIP y para escribir una línea horizontal se utiliza la sentencia ULINE.

Formatos de Página 39

2|

Existen instrucciones especialmente destinadas a darle formato a la salida de un reporte ya sea por pantalla o por impresora. El evento TOP-OF-PAGE se utiliza para cambiar la cabecera de una página. Este evento ocurre tan pronto como el sistema empieza a procesar una nueva página. Por ejemplo, si queremos escribir un título particular al comienzo de cada página pondremos:

El evento END-OF-SELECTION se utiliza para cambiar el pie de página. Este evento se ejecuta luego del evento START-OF-SELECTION.

El evento END-OF-SELECTION se utiliza generalmente para hacer la impresión de los datos de modo que se separe esto del procesamiento de los mismos. Para modificar la cantidad de líneas o columnas que se visualizan en la pantalla se utiliza la sentencia NO STANDARD PAGE HEADING.

Lección 8: Pantalla de selección 1|

Parámetros de selección

Si queremos introducir algunas delimitaciones a nuestro programa de modo que nuestro reporte solo se ejecute para ciertos datos que el usuario deberá introducir en la pantalla entonces deberemos crear una pantalla de selección. PANTALLA DE SELECCIÓN. Es un área dentro de los reportes en donde se especifican los parámetros de selección por los cuales se va a ejecutar el programa. Sirve para restringir el procesamiento y la salida de los datos. Por lo general se coloca después de la declaración de datos. Dentro de una pantalla de selección se pueden declarar dos tipos de objetos: PARAMETER en los cuales el usuario podrá ingresar valores individuales y SELECTOPTIONS en donde el usuario podrá ingresar rangos de valores. En el siguiente ejemplo declaramos los parámetros P_FECHA y P_NOMBRE.

39

La longitud máxima que puede tener el nombre de un parámetro es de 8 posiciones. El agregado de la cláusula OBLIGATORY hace que el parámetro sea obligatorio. El agregado de la cláusula DEFAULT asigna un valor por defecto al parámetro. Si ejecutamos nuestro reporte veremos lo siguiente:

Lo que vemos es que al ejecutar nuestro reporte nos aparece la pantalla de selección que acabamos de crear. Vemos que a la derecha de la fecha nos aparece el icono . Si presionamos sobre el ícono o presionamos F4 dentro del campo fecha, se abrirá la siguiente ventana:

Aquí estamos viendo la ayuda de búsqueda asociada al campo SY-DATUM el cual es el tipo de nuestro parámetro. El tema de las ayudas de búsqueda lo veremos en detalle en la próxima unidad. Ahora vamos a cambiar las descripciones de los parámetros que aparecen en pantalla. Para esto vamos a ir a:

39

Y ingresamos las descripciones que mejor se adapten a nuestro propósito.

También se pueden crear parámetros tipo Checkbox en donde el usuario puede tildar las opciones que prefiera o tipo Radiobutton donde el usuario selecciona una de las opciones entre todas las existentes. Veamos un ejemplo de estos dos tipos de parámetros:

Los cuales se visualizarán de la siguiente manera en pantalla:

Los SELECT-OPTIONS son iguales a los PARAMETER salvo que en ellos se puede ingresar rangos de valores a parte de valores individuales. En el siguiente ejemplo, declaramos el SELECT-OPTIONS S_CLAVEP.

39

De nuevo, si ejecutamos el reporte, a la derecha del campo Clave de país nos aparece el icono , si lo presionamos vemos la ayuda de búsqueda correspondiente al tipo LAND1_GP que es un tipo de la tabla KNA1.

2|

Clases de Mensajes

Una vez que ingresamos todos los parámetros de nuestro reporte y ejecutamos el programa, lo que vamos a querer es que dependiendo de los parámetros introducidos se produzcan determinadas acciones. Para analizar el contenido de los parámetros existe el evento AT SELECTION-SCREEN. En este evento es donde se validan los valores ingresados en la pantalla de selección. Supongamos que queremos que la fecha ingresada por pantalla sea mayor o igual a la fecha actual y que si no es así se emita un mensaje en la pantalla advirtiendo que el valor introducido es incorrecto. Para esto vamos a tener que crear una Clase de mensajes a través de la transacción SE91 tal como vemos a continuación:

Le asignamos una descripción y grabamos.

39

Y creamos nuestro primer mensaje.

Luego en nuestro programa, pondremos el código correspondiente en el evento AT SELECTION-SCREEN para hacer cumplir con esta validación.

Por último ejecutamos nuestro reporte con una fecha de la pantalla de selección anterior a la fecha actual y vemos el siguiente mensaje en el extremo inferior izquierdo de la pantalla. 39

El mensaje que mostramos es un mensaje de error. Esto está determinado por la letra e que se antecede al número del mensaje y la clase de mensajes entre paréntesis. Los tipos de mensajes existentes son: Tipo

Significado del Comportamiento mensaje

El mensaje aparece en

S

Status

El programa continua sin interrupción

la línea de status

I

Información

El programa continua después de la interrupción

una ventana de dialogo

W

Warning

Depende del contexto del mensaje

Barra de status

E

Error

Depende del contexto del mensaje

Barra de status

A

Terminación

El programa termina después una ventana de un cuadro de dialogo de dialogo

X

Dump

Error en tiempo de ejecución un dump tipo X

Lección 9: Video - El evento AT SELECTION-SCREEN y los tipos de mensajes

LECCION_2_6_ABAP_INICIAL_V4.swf

39

UNIDAD 3: DICCIONARIO DE DATOS Lección 1: Extensión de la licencia de SAPNetWeaver 1|

Pasos para extender la licencia de SAPNetWeaver

Vamos a explicar los pasos a seguir para extender la licencia de SAPNetWeaver. Recordemos que la licencia inicial de la instalación es de 30 días por lo tanto antes de cumplirse este plazo deberemos realizar este procedimiento. El plazo de la nueva licencia será por 3 meses y podrá ser renovada indefinidamente. Lo primero que debemos hacer es solicitarle a SAP una nueva licencia para nuestro producto. Esto lo haremos desde la siguiente dirección web. DESCARGAS Solicitar nueva licencia de SAPNetWeaver

Allí veremos la siguiente pantalla donde se especifican todas las versiones gratuitas disponibles de los productos SAP. La correspondiente a nuestra instalación es la NSP - SAPNetWeaver 7.0.

39

Al fondo de la pantalla completamos la información pedida con nuestros datos. El SDN User ID es el nombre de usuario que creamos en la primera unidad para la instalación de SAPNetWeaver.Tildamos la conformidad de la licencia. El System ID es NSP SAPNetWeaver 7.0/2004s.

Para obtener el Hardware key vamos a loguearnos en SAP e ir a la transacción SLICENSE. El Hardware key es el número que aparece a la derecha del texto Active Hardware key.

39

Una vez que obtenemos el Hardware key, volvemos a la pantalla de la licencia, copiamos el número, presionamos el botón Submit y veremos la siguiente ventana.

Si todo andubo bien, veremos el mensaje: "Your request has been succesfully submited. You will receive an email with your license key information". Luego, recibiremos un mail en nuestro correo, que tendrá adjunto el archivo NSP.txt con la información de nuestra nueva licencia. Descargaremos el archivo adjunto en nuestro escritorio.

Luego verificamos que el Active Hardware Key que figura en la transacción SLICENSE del sistema coincida con el mismo código que figura al final del archivo. En caso de no coincidir ambos, debemos copiar el Active Hardware Key de la transacción SLICENSE encima del mismo código que se encuentra al final del archivo. Luego en la transacción SLICENSE, presionamos el botón New licenses, luego el botón Install y por último seleccionamos el archivo NSP.txt con la información de la licencia del escritorio.

Luego veremos la siguiente ventana indicándonos que la nueva licencia se instaló correctamente.

39

Por último, vemos que la nueva fecha de expiración es tres meses posterior a la fecha actual.

Lección 2: Tablas internas. 1|

Qué son las Tablas internas?

Si queremos guardar una colección de registros de datos de la misma estructura en memoria, sin necesidad de acceder continuamente a las bases de datos y poder realizar diversas operaciones con este conjunto de información, entonces utilizaremos tablas internas. TABLA INTERNA. Es un objeto de datos que permite guardar en memoria grandes cantidades de registros de datos con la misma estructura. La cantidad de registros máxima esta relacionada con los límites especificados en la instalación del sistema. El uso típico que se le da a una tabla interna es: Para almacenar temporalmente los datos de las bases de datos para un procesamiento futuro. Para estructurar y formatear datos que se mostrarán como salida del programa. Para formatear datos para ser utilizados por otros servicios. 39

2|

Cómo se declara una Tabla interna?

La sintaxis para su declaración es la siguiente:

De esta manera definiremos una tabla interna con n líneas en memoria más una línea de cabecera o area de trabajo. La cantidad de líneas que se especifican en OCCURS no limitan el tamaño de la tabla sino la cantidad de registros que se guardarán en memoria simultáneamente.

Por lo general, en el parámetro OCCURS se especifica la cantidad 0 lo que permite trabajar con tablas de gran cantidad de registros. En el próximo ejemplo declaramos la tabla interna TI_PROVEEDORES.

Otra forma de declarar la misma tabla sería:

3|

Llenado de una tabla interna

Para llenar con datos una tabla interna utilizamos: APPEND TO : se añade un registro a la tabla interna en la última posición con los valores que tengamos en el área de trabajo. Veamos un ejemplo:

39

Llenamos la tabla interna con el contenido de una base de datos. Esto lo haremos con la sentencia SELECT que veremos en detalle en la próxima lección.

4|

Ordenamiento de una tabla interna

Para ordenar una tabla interna utilizamos la sentencia SORT.

En el ejemplo anterior ordenamos la tabla TI_PROVEEDORES de forma descendente por DNI lo cual invertirá el orden en el que fueron cargados originalmente los registros. Para ordenar de menor a mayor hay que utilizar la cláusula ASCENDING.

5|

Procesamiento de una tabla interna

Para recorrer una tabla interna y procesar registro a registro utilizaremos la sentencia LOOP-ENDLOOP.

Si no existe ningún registro que cumpla la condición especificada en la cláusula WHERE, el SY-SUBRC será distinto de cero.

6|

Lectura de una tabla interna

Para leer un registro concreto de una tabla interna sin necesidad de recorrerla utilizamos la sentencia READ TABLE.

Si se encuentra el registro buscado, el SY-SUBRC será cero, caso contrario, será distinto de cero. Si se desea leer los datos que se encuentran en una posición 39

particular de la tabla se utilizará la cláusula INDEX tal como vemos en el siguiente ejemplo.

El agregado de la Cláusula BINARY SEARCH en la sentencia READ TABLE hace que la búsqueda sea ampliamente más eficiente. Para más información sobre la sentencia presionar F1.

7|

Modificando una tabla interna

Para modificar el contenido de un registro de una tabla interna utilizamos la sentencia MODIFY. En el siguiente ejemplo modificamos el campo DNI correspondiente al primer registro de la tabla interna.

Si el registro que se intenta modificar con MODIFY no existe, se creará un nuevo registro en la tabla. Para insertar un registro en una posición determinada de una tabla interna utilizamos la sentencia INSERT. En el siguiente ejemplo insertamos un registro en la posición 2.

Para borrar el contenido de un registro de una tabla interna utilizamos la sentencia DELETE. En el siguiente ejemplo borramos el registro de la tabla interna de proveedores con DNI igual a 20857492.

Para borrar todo el contenido de una tabla interna utilizamos la sentencia REFRESH. En el siguiente ejemplo inicializamos la tabla interna TI_PROVEEDORES.

Para saber cuantos registros tiene una tabla interna utilizamos la sentencia DESCRIBE TABLE. En el siguiente ejemplo declaramos V_LINEAS que es la variable que va a contener la cantidad de filas de la tabla interna TI_PROVEEDORES luego de ejecutar la sentencia DESCRIBE TABLE.

39

Lección 3: Video - Cortes de control utilizando tablas internas en reportes.

LECCION_3_1_ABAP_INICIAL_V4_2.swf

Lección 4: Bases de datos, elementos de datos y dominios 1|

Los datos en el sistema SAP

Podemos clasificar los datos del sistema SAP en tres tipos: datos maestros, datos de movimientos y datos del sistema o de control. Datos maestros: son datos que no se modifican muy a menudo. Por ejemplo: datos de materiales, cuentas, bancos, clientes, etc. Datos de movimientos: son datos muy volátiles y con gran volumen de generación. Por ejemplo: datos de facturas, pedidos, etc. Datos del sistema o de control: son datos que tienen que ver con la configuración del sistema.

2|

Qué es el diccionario de datos?

El diccionario de datos permite la administración de todas las definiciones de datos usadas en el sistema R/3. Se accede a él a través de la transacción SE11 tal como vemos a continuación:

39

Aquí, podemos crear, modificar y visualizar tablas base de datos, Vistas, Estructuras, Elementos de datos, Grupos de tipos, Dominios, Ayudas para búsqueda y Objetos de bloqueo.

3| Cómo crear una tabla base de datos, un elemento de datos y un dominio? Vamos a crear la tabla ZTABLA_USUARIOS. Para esto ingresamos el nombre de la nueva tabla a la derecha del texto "Database table" y presionamos el botón . Aquí, veremos la siguiente pantalla:

Completamos la Short Description "Descripción breve" de la nueva tabla con el texto "Tabla de usuarios". En la solapa Delivery and Maintenance "Entrega y actualización" completamos la Delivery Class "Clase de entrega" con "A" que significa que la tabla es de aplicación y que tiene datos maestros y de movimientos. Existen

39

otras opciones que podremos ver si presionamos el botón que aparece al posicionar el cursor en el cuadro de texto. En Data Browser/Table View Mant. elegiremos la opción "Display/Maintenance Allowed" esto significa que se podrá actualizar el contenido de la tabla mediante la transacción SM30. En la solapa "Campos" vamos a ingresar los campos que va a tener nuestra tabla. Estos van a ser: DNI, NOMBRE_APE, ESTADO_USU y el MANDANTE que no debe faltar en ninguna tabla.

Todas las tablas base de datos que creemos deben tener el mandante como primer campo de la tabla. Este debe ser parte de la clave. A cada campo de la tabla se le puede asignar un tipo instalado seleccionando la línea del campo y presionando el botón , como podría ser CHAR de 30 posiciones o crear un elemento de datos para cada campo. En nuestra tabla, crearemos los elementos de datos Z_DNI, Z_NOMBRE_APE y Z_ESTADO_USU. También es posible utilizar elementos de datos que ya existen en el sistema, como es el caso del MANDT. Para crear el elemento de datos Z_DNI haremos doble click sobre el elemento, el sistema nos ofrecerá guardar la tabla, diremos que sí y le asignaremos como paquete objeto local. Luego nos aparecerá la siguiente ventana de dialogo:

39

Presionaremos la opción "Yes" y nos aparecerá la siguiente pantalla:

En la Descripción breve completaremos una descripción del contenido del campo. Luego podemos elegir entre crear un dominio para este campo, utilizar un tipo instalado o predefined type ya existente en el sistema o utilizar un tipo referencia o Reference type. En este caso utilizaremos un tipo instalado y le asignaremos el tipo de datos NUMC de 8 posiciones. Luego iremos a la solapa Field Label o Denom.campo y actualizaremos los denominadores de campo que son los títulos con los que se verá el campo cuando se visualice en una transacción o reporte.

39

En este caso los denominadores de campo son todos iguales pero la idea es dar una descripción más detallada del breve a la cabecera. Por último activaremos el elemento de datos mediante el botón y nos aparecerá una nueva ventana de diálogo donde confirmaremos la activación seleccionando el elemento a activar y presionando el botón

.

Para el campo NOMBRE_APE crearemos el elemento de datos Z_NOMBRE_APE tal como hicimos con Z_DNI. Para el campo ESTADO_USU, crearemos el elemento de datos Z_ESTADO_USU tal como hicimos con Z_DNI y también crearemos el dominio ZZ_ESTADO_USU para asociarle el ámbito de valores: A=Activo, I=Inactivo y N=Anulado.

El objetivo de crear un dominio es asociarle un ámbito de valores, sino es preferible utilizar un tipo instalado. Si hacemos doble click sobre ZZ_ESTADO_USU el sistema nos preguntará en una ventana de diálogo si deseamos crear el dominio. Contestaremos que sí y veremos la siguiente pantalla:

39

Completamos la Descripción breve del dominio con "Estado del usuario". El tipo de datos será CHAR de 1 posición. Luego en la solapa Value Range o Ámbito de valores completaremos el ámbito de los valores del dominio.

Por último activamos el dominio ZZ_ESTADO_USU, luego activamos el elemento de datos Z_ESTADO_USU y finalmente lo que nos queda antes de activar la tabla ZTABLA_USUARIOS es configurar las opciones técnicas de la tabla presionando el botón

.

Aquí completaremos la Clase de datos con "APPL0" que es la correspondiente a "Datos maestros, tablas transparentes" y la Categ.tamaño con "3" que es el valor correspondiente a una tabla de 110.000 a 460.000 registros de datos. 39

Finalmente activamos la tabla ZTABLA_USUARIOS y felicitaciones acabamos de crear nuestra primera tabla Z.

Lección 5: Video - Vistas de tablas bases de datos

LECCION_3_2_ABAP_INICIAL_V4_9.swf

Lección 6: Actualización y visualización de registros, Estructuras y Ayudas de búsqueda. 1|

Creación de una superficie de actualización para una tabla

Una vez que creamos la tabla ZTABLA_USUARIOS vamos a crearle una superficie de actualización para poder ingresarle registros. Para esto vamos a ingresar a la transacción SE11 con el nombre de la tabla y vamos a ir a la siguiente opción del menú:

39

Aquí veremos la siguiente pantalla en donde completaremos los campos: Authorization group: con &NC& que significa que no estamos asociando la superficie a ningún grupo en particular. Function group: aquí pondremos el mismo nombre de la tabla. Este tema lo veremos en detalle en la unidad Funciones y Subrutinas. Maintenance type: seleccionaremos un nivel osea one step.

39

Luego presionaremos el botón imágenes.

y el sistema nos ofrecerá números de

Presionaremos el botón y se completará con números, el campo de la pantalla "Overview screen". Finalmente presionamos el botón y guardamos los cambios como "Objeto local". Ahora vamos a probar de ingresar registros en la tabla ZTABLA_USUARIOS, para ello vamos a ir a la transacción SM30, escribiendo el nombre de nuestra tabla y presionamos el botón .

39

Aquí presionamos el botón tabla.

y comenzamos a cargar registros en nuestra

Al finalizar la carga presionamos el botón

2|

.

Visualización de los registros de una tabla

Para visualizar los datos que acabamos de crear vamos a utilizar la transacción SE16. Allí vamos a escribir el nombre de nuestra tabla y presionamos enter. Inmediatamente después, veremos la siguiente pantalla en donde podremos filtrar los datos a mostrar por cualquiera de los campos que componen nuestra tabla. También podremos saber la cantidad de registros de nuestra tabla con el botón .

39

Aquí presionamos F8 y visualizaremos el contenido de la tabla ZTABLA_USUARIOS tal como vemos:

3|

Creación de una estructura

Vamos a crear una estructura, para ello accedemos a la transacción SE11, en Tipo de datos colocamos el nombre de nuestra estructura que será ZUSUARIOS y presionamos el botón Create. Luego aparecerá en la pantalla la siguiente ventana de diálogo, seleccionamos la opción Structure y presionamos el botón continuar de la tilde verde.

Luego ingresamos la Descripción breve que será "Estructura de usuarios" y los campos que tendrá la estructura, que en este caso serán los mismos de la tabla ZTABLA_USUARIOS como vemos a continuación:

39

Finalmente activamos.

4|

Creación de una ayuda de búsqueda para parámetros

Una ayuda de búsqueda es un objeto ABAP que sirve para definir posibles valores de selección. Supongamos que tenemos un reporte ABAP con la siguiente pantalla de selección:

Y queremos que al presionar F4 sobre el campo de entrada de la pantalla se muestren los nombre y apellidos de los usuarios. Para esto, tenemos que crear la ayuda de búsqueda Z_AYUDA_USUARIOS en la transacción SE11. Ingresamos el nombre Z_AYUDA_USUARIOS o la derecha del texto Search help, presionamos el botón Create y veremos la siguiente ventana de diálogo:

Aquí seleccionaremos la opción "Elementary search help" y completamos la pantalla con los siguientes datos:

39

El método de selección será el nombre de la tabla de donde se obtienen los datos. Los campos NOMBRE_APE, DNI y ESTADO_USU son los que se mostrarán por pantalla al utilizar la ayuda y el campo NOMBRE_APE en particular será el que se exporte a la pantalla del reporte por eso tiene tildada la columna EXP. Para finalizar activamos la ayuda. Luego, modificaremos la declaración del parámetro de la pantalla de selección de nuestro reporte con la sentencia MATCHCODE OBJECT seguida del nombre de la ayuda de búsqueda que acabamos de crear.

Vemos que al ejecutar el reporte aparece el icono a la derecha del campo Usuario. Finalmente, si lo presionamos veremos el siguiente listado de opciones de selección:

39

Antes de crear una nueva ayuda de búsqueda es conveniente chequear en el diccionario de datos si no existe una que cumpla con mis requisitos.

Lección 7: Instrucciones SQL: La sentencia SELECT 1|

La sentencia SELECT

Existen en ABAP un conjunto de sentencias que se utilizan para acceder a las bases de datos. La principal sentencia es SELECT, cuya sintaxis es la siguiente:

Si quisiéramos obtener todos los registros de la tabla ZTABLA_USUARIOS usaríamos el siguiente código:

Donde TI_USUARIOS es una tabla interna del mismo tipo de la tabla ZTABLA_USUARIOS. El asterisco indica que se obtendrán todos los campos de la tabla. La cláusula INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna. Evitar el uso del * cuando solo se requiera obtener algunos campos de la tabla origen. En la sentencia anterior, en caso de existir registros en la tabla ZTABLA_USUARIOS, estos pisarán el contenido de la tabla interna TI_USUARIOS. Podría ocurrir que queramos conservar el contenido de la tabla interna TI_USUARIOS luego de reiteradas selecciones. En este caso tendríamos que usar la cláusula APPENDING TABLE en lugar de INTO TABLE. Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la selección. Si quisiéramos obtener de todos los campos de la tabla ZTABLA_USUARIOS el campo DNI deberíamos crear una tabla auxiliar solo con el campo DNI para alojar el resultado de la consulta.

39

Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir. Si quisiéramos obtener la primera ocurrencia de la tabla ZTABLA_USUARIOS donde se cumpla determinada condición debemos usar la cláusula SINGLE como vemos a continuación:

El resultado de esta consulta será guardado en la estructura WA_USUARIOS que es del mismo tipo que la tabla ZTABLA_USUARIOS. Si quisiéramos hacer la misma consulta anterior pero necesitamos obtener solo el campo DNI entonces ya no sería necesaria la estructura WA_USUARIOS sino que guardaríamos el resultado en la variable V_DNI tal como vemos en el siguiente ejemplo:

Si quisiéramos obtener de una tabla los registros que cumplan una condición pero queremos guardarlos en una tabla interna que no tiene la misma estructura que la tabla, entonces tenemos que usar la cláusula INTO CORRESPONDING FIELDS OF TABLE.

En el ejemplo anterior, la tabla interna TI_USUARIOS2 está compuesta por los campos NOMBRE_APE y ESTADO_USU. Supongamos que tenemos un reporte que tiene la pantalla de selección:

39

Donde Nombre y Apellido es el parameter P_NOMAPE y Estado Usuario es el selectoptions S_ESTADO. Si quisiéramos hacer una selección a la tabla ZTABLA_USUARIOS en base a lo que los usuarios ingresan por pantalla haríamos lo siguiente:

La cláusula IN se utiliza para los select-options en las condiciones de un select. Ahora, si quisiéramos obtener el usuario activo con DNI más alto tendríamos que usar la cláusula MAX de la siguiente forma:

Si quisiéramos saber la cantidad de usuarios con estado = "activo", debemos usar la cláusula COUNT de la siguiente manera:

Si quisiéramos obtener de una tabla todos los registros que existan en una tabla interna cargada con datos, entonces debemos utilizar la sentencia FOR ALL ENTRIES IN que nos permite especificar condiciones en tiempo de ejecución. Veamos un ejemplo:

Si quisiéramos obtener todos los registros que cumplan con un patrón de texto en alguno de sus campos, debemos utilizar la sentencia LIKE como vemos en el siguiente ejemplo:

39

Lección 8: INSERT, UPDATE, MODIFY, DELETE y actualización y recuperación de la BD. 1|

La sentencia INSERT

La sentencia INSERT permite introducir nuevos registros a una base de datos. Por ejemplo, si quisiéramos introducir un nuevo registro en la tabla ZTABLA_USUARIOS haríamos lo siguiente:

Siempre después de un INSERT se debe preguntar por el SY-SUBRC. Si es cero, el registro se inserto correctamente, caso contrario, se produjo un error y el registro no se inserto. Si quisiéramos introducir todos los registros de una tabla interna haríamos lo siguiente:

Si existe algún registro en la base de datos con igual clave que un registro en la tabla interna se producirá un error de ejecución en el programa.

2|

La sentencia UPDATE

La sentencia UPDATE permite actualizar el contenido de uno o varios registros de una tabla base de datos. Por ejemplo, si quisiéramos actualizar un registro de una tabla base de datos haríamos lo siguiente:

39

Siempre después de un UPDATE se debe preguntar por el SY-SUBRC. Si es cero, el registro se actualizo correctamente, caso contrario, se produjo un error y el registro no se actualizo. Si quisiéramos actualizar los registros de la tabla ZTABLA_USUARIOS que cumplan determinada condición, haríamos lo siguiente:

Si quisiéramos actualizar todos los registros de la tabla ZTABLA_USUARIOS a partir del contenido de una tabla interna haríamos lo siguiente:

3|

La sentencia MODIFY

La sentencia MODIFY permite modificar el contenido de uno o varios registros de una tabla base de datos. Por ejemplo, si quisiéramos modificar un registro de una tabla base de datos haríamos lo siguiente:

Siempre después de un MODIFY se debe preguntar por el SY-SUBRC. Si es cero, el registro se modifico correctamente, caso contrario, se produjo un error y el registro no se modifico. Si quisiéramos modificar todos los registros de la tabla ZTABLA_USUARIOS a partir del contenido de una tabla interna haríamos lo siguiente:

39

Si el registro que se intenta modificar, no existe en la tabla, este se crea.

4|

La sentencia DELETE

La sentencia DELETE permite borrar el contenido de uno o varios registros de una tabla base de datos. Por ejemplo, si quisiéramos borrar un registro de una tabla base de datos haríamos lo siguiente:

Siempre después de un DELETE se debe preguntar por el SY-SUBRC. Si es cero, el registro se borro correctamente, caso contrario, se produjo un error y el registro no se borro. La cantidad de registros borrados se guarda en SY-DBCNT. Si quisiéramos borrar los registros de la tabla ZTABLA_USUARIOS que cumplan determinada condición, haríamos lo siguiente:

Si quisiéramos borrar todos los registros de la tabla ZTABLA_USUARIOS a partir del contenido de una tabla interna haríamos lo siguiente:

5|

Actualización y recuperación de una base de datos

Para finalizar una unidad de procesamiento lógico LUW de base de datos se utiliza un COMMIT WORK, que realiza un update físico en la base de datos, haciendo irrevocable cualquier modificación en la base de datos. Si deseamos deshacer todas las operaciones realizadas sobre la base de datos desde el último COMMIT WORK, realizaremos un ROLLBACK WORK. Veamos un ejemplo al insertar registros en la base de datos ZTABLA_USUARIOS:

39

Es conveniente, después de un INSERT, MODIFY, UPDATE o DELETE realizar un COMMIT WORK y ROLLBACK WORK.

Lección 9: Video - Actualización y Recuperación de una Base de datos

LECCION_3_6_ABAP_INICIAL_V4_2.swf

39

UNIDAD 4: SUBRUTINAS, FUNCIONES Y BATCH Lección 1: Subrutina 1|

Qué son las subrutinas?

Las subrutinas son secciones de código que pueden ser utilizadas más de una vez. La idea de pasar el código de los programas a subrutinas, es para que los programas sean más fáciles de leer y de mantener. MODULARIZAR. Se llama así a la acción de pasar el código de un programa a subrutinas, para mejorar la lectura y mantenimiento del mismo. Lo ideal es que una subrutina no tenga más de 50 líneas de código. La modularización ayuda a encontrar más fácilmente los errores en los programas. Esto se debe a que al debaguear un programa solo me preocupo por que el resultado de una subrutina sea el esperado sin entrar en detalle de como se llega a ese resultado. Una subrutina se declara con la palabra reservada PERFORM seguida del nombre de la subrutina. Veamos un ejemplo:

Aquí creamos una subrutina para modularizar la selección de los datos. Si hacemos doble click en el nombre de la subrutina, el sistema nos propondrá crear la subrutina en la siguiente ventana de diálogo:

Contestaremos que sí y el sistema nos preguntará donde queremos guardar la subrutina, las opciones son: crear un nuevo include de datos o crearlas en el mismo programa de control. En este caso, las crearemos en el programa de control. 39

Luego el sistema generará el siguiente bloque de código en nuestro programa para que lo completemos con el código que corresponda:

Es importante que el nombre que se le asigne a una subrutina sea lo más representativo posible del resultado que produce la subrutina. La longitud del nombre no puede exceder los 30 caracteres

2|

Tipos de subrutinas

Existen dos tipos de subrutinas: Internas: cuando la subrutina está dentro del mismo programa que la llama. Externas: cuando la subrutina está en un programa distinto al que las llama. Como puede ser el caso de un include de subrutinas o otro programa.

3|

Subrutinas internas

Como vimos en el ejemplo del punto 1, para crear una subrutina interna usamos la palabra clave PERFORM seguida del nombre de la subrutina. Esto crea un bloque FORMENDFORM donde colocamos nuestro código. Se pueden pasar datos entre los programas principales y una subrutina a través de parámetros. A los parámetros definidos en el programa principal, a la derecha de la palabra PERFORM se los llama parámetros actuales. A los parámetros definidos en la subrutina, a la derecha de la palabra FORM, se los llama parámetros formales. Los parámetros pueden ser de tres tipos: De entrada: cuando se utilizan para pasar datos del programa principal a la subrutina. De salida: cuando se utilizan para pasar datos de la subrutina al programa principal. De entrada y salida: cuando se utilizan para pasar datos de la subrutina al programa principal y también viceversa.

39

4|

Paso de parámetros a subrutinas

Para pasar los parámetros utilizaremos tres opciones: USING, CHANGING y TABLES. Estas opciones se deben escribir en el orden que mostramos a continuación en el siguiente gráfico:

En el bloque FORM-ENDFORM debemos especificar el tipo de los parámetros formales. De esta forma nos aseguramos que solo se pasen parámetros del tipo que corresponde a la subrutina. Veamos un ejemplo donde pasamos una tabla interna, una estructura y una variable de tipo carácter.

Cuando una subrutina es llamada, los parámetros deben ser pasados en el mismo orden en el que fueron declarados, por lo tanto, se debe respetar esta misma secuencia en el bloque FORM-ENDFORM. Existen tres formas de pasar parámetros: Paso por valor: durante la llamada a la subrutina, los parámetros formales son creados como copias de los parámetros actuales. Los cambios en los parámetros formales no afectan a los parámetros actuales. Veamos un ejemplo:

39

Y la salida será B. Paso por referencia: durante la llamada a la subrutina, solo la dirección de los parámetros actuales se transfieren a los parámetros formales. Dentro de la subrutina, se trabaja con el campo del programa que hace la llamada. Si cambiamos los parámetros formales, el contenido del campo del programa que hace la llamada también cambia.

Y la salida será A B y A X. Paso por valor y resultado: durante la llamada a la subrutina, los parámetros formales son creados como copias de los parámetros actuales. Los cambios en los parámetros formales son copiados a los parámetros actuales al final de la subrutina.

39

Y la salida será H1 es: B.

5|

Subrutinas externas

Si quisiéramos llamar a una subrutina que está en un programa distinto al que estamos procesando, debemos utilizar la siguiente sintaxis

También podemos agregar includes de subrutinas a nuestro programa de la siguiente manera:

Lección 2: Módulos de función 1|

Qué son los Módulos de función?

Los módulos de función son funciones que han sido creadas y almacenadas en SAP y que pueden ser utilizadas por cualquier programa ABAP. Para acceder a estas funciones, utilizaremos la transacción SE37 como vemos a continuación:

39

Tienen una interfaz definida, ya que su diseño facilita el paso de parámetros tanto de entrada como de salida.

Veamos un ejemplo de como utilizar un módulo de función ya existente. Vamos a crear un nuevo programa ABAP, donde vamos a ejecutar la función POPUP_TO_CONFIRM que se utiliza para pedir confirmación al usuario antes de tomar una acción determinada. En el menú del editor ABAP existe el botón Pattern que nos permite crear dentro de un programa el esqueleto de cualquier función creada a través de la transacción SE37, simplemente ingresando el nombre de la función que necesitemos.

La ejecución de este programa dará como resultado la siguiente salida:

2|

Cómo crear un Módulo de función?

Para crear un módulo de función accedemos a la transacción SE37. Allí escribiremos el nombre de nuestra función que será Z_TEST_CLIENTES y presionaremos el botón Create, como vemos a continuación: 39

Inmediatemente después veremos la siguiente ventana de diálogo en donde debemos escribir el nombre del grupo de funciones al que pertenece la función y una descripción breve de la función que queremos crear.

GRUPO DE FUNCIONES. Es un repositorio que agrupa funciones y que se utiliza principalmente para compartir subrutinas y declaraciones de variables entre las distintas funciones pertenecientes al grupo. Para crear un grupo de funciones, debemos seleccionar en el menú de la transacción SE37 la ruta Goto/Functions Groups/Create Group tal como vemos a continuación:

Aquí ingresaremos el nombre de nuestro grupo de función y presionamos el botón Save como vemos a continuación:

39

Luego, si quisiéramos definir variables que se puedan utilizar en todas las funciones pertenecientes a nuestro grupo de funciones iríamos en el menú de la SE37 a Goto/GlobalData y veríamos la siguiente pantalla donde definiremos las variables globales.

Si quisiéramos declarar subrutinas que puedan ser utilizadas por todas las funciones del grupo, debemos en el menú de la transacción SE37, ir a Goto/MainProgram. Allí descomentamos el primero de los include que está especificado para Subprogramas, le cambiamos el nombre para que comience con Z, lo creamos haciendo doble click sobre él y luego colocamos las subrutinas en él.

39

Finalmente, volvemos a la transacción SE37 con nuestro grupo de funciones creado, presionamos Create, ingresamos el grupo de función y la descripción de la función, grabamos y veremos la función Z_TEST_CLIENTES creada tal como muestra el siguiente gráfico:

Veamos la utilidad de cada una de las solapas que se visualizan: Attributes: aquí especificamos la descripción de la función y el tipo de función que puede ser Normal, RFC o Update module. Import: aquí especificamos los parámetros de salida de la función. Export: aquí especificamos los parámetros de entrada de la función. Changing: aquí especificamos los parámetros de salida que cambiarán de valor con la ejecución de la función. 39

Tables: aquí especificamos las tablas que se utilizan en la función. Exceptions: aquí especificamos las excepciones de la función. Una excepción es un error que se produce al ejecutar la función y que ha sido catalogado cuando se creo el módulo de función de modo de poder identificar rápidamente el motivo del error. Source Code: aquí pondremos el código ABAP de la función. Ahora, volviendo a nuestra función Z_TEST_CLIENTES, vamos a agregarle como parámetro de entrada el DNI y como parámetro de salida la estructura de usuarios de la tabla que creamos en la unidad 2 Z_TABLA_USUARIOS.

Luego pondremos código en la solapa SOURCE CODE para recuperar de la tabla ZTABLA_USUARIOS, los datos del usuario al que pertenezca el DNI de entrada. Finalmente activamos y luego podremos probar nuestra función ejecutándola.

Lección 3: Video - Las Funciones POPUP

LECCION_4_2_ABAP_INICIAL_V4.swf

39

Lección 4: Módulos de función RFC 1|

Qué es un módulo de función RFC?

Un módulo de función RFC consiste en una llamada a una función que existe en un sistema distinto al del programa que la llama. El objetivo principal de las RFC es acceder a otros ambientes para obtener datos. La comunicación puede darse entre sistemas SAP o entre un sistema SAP y otro sistema que no sea SAP. Para llamar a una función RFC se debe agregar la cláusula DESTINATION al momento de declarar la función, como vemos en el siguiente ejemplo.

La RFC llamada no existe en el sistema origen pero si debe existir en el sistema destino. Veamos un ejemplo simple de cuando utilizaríamos una RFC: Si quisiéramos leer un registro de un cliente del sistema DCR, a través de un programa ABAP existente en el ambiente DTR, crearíamos una RFC en DCR que devuelva los registros de los clientes. Luego llamaríamos a esta función en DTR, utilizando un destino que previamente hemos creado a través de la transacción SM59 como veremos más adelante.

Si se produciéra un error en la ejecución de una RFC, los mensajes de error son devueltos por el sistema remoto y alojados en las variables del sistema SYMSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3 y SY-MSGV4.

39

2|

Cómo crear una RFC?

Una función RFC se crea de la misma manera que se crea un función. Se accede a la transacción SE37 y se completan los mismos parámetros que completamos para crear una función a excepción de que se debe seleccionar en la solapa de Atributos la opción Remote Enabled Module.

Los parámetros que se crean en una función RFC no se pueden pasar por Referencia, deben pasarse por valor. Esto se logra tildando el check Pass value para cada parámetro en las solapas IMPORT, EXPORT y CHANGING. A su vez , las funciones creadas como RFC, pueden ser utilizadas como módulos de función Normales. Esto se logra de dos maneras diferentes: Utilizando la declaración CALL FUNCTION DESTINATION 'NONE' . Utilizando la declaración de un módulo de función normal, sin el agregado de la cláusula DESTINATION.

3|

Tipos de RFC

Existen tres tipos de RFC:

Sincrónicas: ambos sistemas deben estar disponibles al momento de la llamada de la función. Estas RFC están basadas en una comunicación sincrónica. Generalmente, utilizaremos el tipo de RFC sincrónico para la mayoría de nuestros desarrollos.

39

Transaccionales: los sistemas no necesitan estar disponibles al momento de la llamada a la función. Un único ID de transacción es generado y los programas llamados son almacenados en el sistema junto con los datos. Para crear una RFC transaccional debo utilizar el sufijo IN BACKGROUND TASK como mostramos en el siguiente gráfico:

En las RFC transaccionales, el sistema deja un log con el pedido de la llamada remota en las tablas estándar de SAP ARFCSSTATE y ARFCSDATA con todos los valores de los parámetros pasados en la ejecución. Para visualizar este log, utilizaremos la transacción SM58.

Cuando el programa que ejecuta la RFC ejecuta la sentencia COMMIT WORK, entonces es cuando la llamada remota es enviada al sistema remoto para su ejecución. Utilizaremos el tipo de RFC transaccional para ciertos casos específicos de actualizaciones donde no se requiera que dichas actualizaciones se realicen en forma inmediata sino recién cuando el programa llamador ejecuta un COMMIT WORK. Asincrónicas: el programa llamador, llama a la función RFC y inmediatamente después termina su procesamiento. Luego la función RFC se ejecuta independientemente del programa llamador. Para crear una RFC asincrónica debo utilizar el sufijo STARTING NEW TASK como mostramos en el siguiente gráfico:

39

Lección 5: Destinos RFC

1|

Qué es un destino RFC? DESTINO RFC. Es una puerta de enlace que permite comunicar un sistema SAP con otro sistema SAP o no SAP.

Los destinos de las RFC son creados en la tabla estándar SAP RFCDES a través de la transacción SM59.

2|

Tipos de destinos RFC

Los Tipos de destinos RFC que se pueden crear en SAP son los siguientes: Conexiones ABAP Conexiones HTTP a servidor externo Conexiones internas Conexiones SNA o CPI-C Conexiones TCP/IP Conexiones vía ABAP driver

39

Para comunicar RFC entre distintos ambientes de sistemas SAP R/3 utilizaremos Conexiones ABAP.

3|

Cómo crear, visualizar, actualizar y testear destinos?

En la transacción SM59 se pueden crear, visualizar, actualizar y testear destinos RFC. Creación de un destino Para crear un nuevo destino RFC basta con presionar el botón Create y luego ingresar ciertos parámetros que dependerán del tipo de conexión a crear.

Ciertos parámetros que están en blanco en esta pantalla, como es el Target Host son necesarios para la creación del destino. En un ambiente real de trabajo deberán ser solicitados a los administradores SAP. Visualización/Modificación de un destino el

botón de

39

Para Visualizar o modificar un destino RFC basta con presionar visualización o modificación dependiendo de la acción deseada.

Testeo de un destino Podemos chequear si un destino funciona correctamente. Para ello, hacemos doble click sobre el destino y en la pantalla que nos aparece presionamos el botón Conection Test. Si la conexión funciona correctamente, veremos la siguiente pantalla:

Siempre es conveniente testear un destino RFC para comprobar que la conexión funciona correctamente.

Lección 6: Video - Los Chequeos de autorización

LECCION_4_4_ABAP_INICIAL_V4.swf

Lección 7: Batch 1|

Ejecución de Fondo

Existen dos formas de ejecutar un programa en ABAP: Online y Batch. En la ejecución Online el programa se ejecuta al momento de presionar F8 y los resultados de la ejecución se producen de manera inmediata. Esta forma de ejecución es conveniente para los programas donde se requiere interacción con el usuario o cuando el tiempo de ejecución es muy poco. Pero en ciertos otros casos, especialmente hablando en un ambiente real de trabajo, el tiempo de procesamiento de un programa podría ser muy alto. Esto se puede deber a que el programa tiene muchos accesos a base de datos, que tienen millones de registros, a la ejecución de múltiples transacciones o a otras varias razones. Para estos casos que acabamos de mencionar, va a ser conveniente la ejecución Batch o de fondo. Veamos un ejemplo paso a paso de como ejecutar un programa de fondo. Supongamos que tenemos el programa ABAP ZPRUEBA_FONDO_B que obtiene los registros de la tabla ZTABLA_USUARIOS y los imprime por pantalla.

39

Ahora vamos a crear el nuevo programa ABAP ZPRUEBA_FONDO el cual cumplirá el rol de programa padre del programa ZPRUEBA_FONDO_B. Lo primero que debemos hacer es crear un Job. Para esto le asignamos un nombre a la variable V_JOBNAME y luego ejecutamos la función JOB_OPEN. Para modularizar vamos a crear la subrutina ABRIR_JOB que tendrá el siguiente código.

Luego, le asignamos un nombre a la variable V_JOBNAME, que tendrá el nombre del Job. Luego de la ejecución de la función JOB_OPEN, se completa la variable V_JOBNUM con el número del Job.

39

Lo que sigue es lanzar el Job. Para esto vamos a crear la subrutina LANZAR_JOB, que ejecutará la sentencia SUBMIT, la cual sirve para ejecutar un programa dentro de otro programa y con el agregado de la cláusula VIA JOB NUMBER la ejecución del programa se realizará de fondo. Mediante la sentencia SUBMIT se pueden pasar parámetros al programa llamado, los cuales deben existir en la pantalla de selección de éste. Para más información sobre la sentencia, presionar F1.

Con el agregado de la cláusula AND RETURN el programa llamador permanece en espera mientras se ejecuta el programa llamado. Cuando el programa llamado termina, se devuelve el control al programa llamador. Por último, debemos cerrar el Job mediante la función JOB_CLOSE. Para esto vamos a crear la subrutina CERRAR_JOB como vemos a continuación.

39

Por último, después de cerrar el Job, imprimimos por pantalla el mensaje "Se lanzo el Job, para visualizarlo ir a la Trx SM37". Ahora vamos a ejecutar Online el programa ZPRUEBA_FONDO presionando F8. Veremos en la pantalla el mensaje "Se lanzo el Job, para visualizarlo ir a la Trx SM37", por lo tanto vamos a ir a buscar el resultado a la transacción SM37. Allí presionamos F8.

39

Identificamos nuestro proceso, lo tildamos y presionamos el botón Spool.

Ahora vemos el pedido del Job correspondiente a nuestro programa.

y vemos el resultado del

39

Finalmente, presionamos el botón de visualización procesamiento.

Lección 8: Video - El Spool

LECCION_4_3_ABAP_INICIAL_V4.swf

Lección 9: Uso de la memoria en ABAP 1|

La memoria en ABAP

En ciertas oportunidades, podría pasar que mientras ejecutamos un programa o objeto ABAP, necesitemos de datos que se obtengan en otro programa ABAP que se ejecuto previamente. Existen varias formas de solucionar esto, una de ellas es pasando parámetros de un programa a otro, si es que ambos objetos son programas. Otra opción es utilizar la memoria para pasar los datos. En ABAP existen sentencias que nos permiten manipular fácilmente los datos que subimos y bajamos de memoria. Para subir datos a memoria vamos a utilizar la sentencia EXPORT tal como mostramos a continuación.

El ID que se utiliza debe ser único. Veamos un ejemplo de como levantar datos a memoria.

Para bajar los datos de memoria utilizamos la sentencia IMPORT tal como mostramos a continuación.

Veamos un ejemplo de como bajar datos de memoria.

Se pueden exportar-importar tanto variables, como estructuras o tablas internas a memoria. 39

Luego de bajar los datos de memoria, es conveniente liberar el área de memoria utilizada. Esto lo hacemos con la sentencia FREE MEMORY tal como vemos a continuación.

Para que la exportación-importación de datos funcione correctamente se debe utilizar la misma sesión de memoria o ejecución. Utilizaremos la sentencia SUBMIT para poder llamar a un programa dentro de la ejecución de otro programa. Veamos un ejemplo de un programa que exporta datos:

Luego en el programa que importa los datos haremos lo siguiente:

39

UNIDAD 5: REPORTES Lección 1: Conceptos importantes de reportes 1|

Creación de una variante de ejecución

Supongamos que tenemos un reporte que tiene una pantalla de selección con 20 parámetros. Si cada vez que queremos ejecutar nuestro reporte, tenemos que introducir en la pantalla el contenido de los 20 parámetros perderíamos mucho tiempo. Para solucionar este inconveniente, SAP creo el concepto de variante, que es aplicable tanto a reportes como a cualquier objeto que se pueda ejecutar y que permite guardar los parámetros ingresados por pantalla para no tener que volver a cargarlos. Para probar este nuevo concepto, vamos a crear el reporte ZPRUEBA_USUARIOS y le vamos a ingresar los siguientes datos en la pantalla de selección que vemos a continuación.

Para crear el marco que vemos en la pantalla anterior, utilizamos la sentencia SELECTION SCREEN. Para más información sobre la sentencia presionar F1. Luego, presionamos en el menú el botón guardar y veremos la siguiente pantalla donde asignaremos un nombre y una descripción a la variante y finalmente presionamos guardar de nuevo y quedará guardada la variante ZPRUEBA.

39

Si ejecutamos otra vez el reporte, veremos en el menú, el botón obtener variante. Si lo clickeamos, podremos ver las variantes disponibles para el reporte.

2|

Creación de transacciones asociadas a reportes

Para que los usuarios finales puedan utilizar los programas que nosotros desarrollamos, debemos crear transacciones asociadas a los programas, ya que ellos no tienen acceso a la transacción SE38, ni a ninguna otra transacción de desarrollo. Mediante la transacción estándar SE93, podemos crear transacciones asociadas a reportes. Veamos un ejemplo. Vamos a ejecutar la transacción SE93, completamos el nuevo nombre de la transacción, que será ZTRX_USUARIOS y clickeamos el botón Create. Luego veremos una ventana de diálogo donde completamos la descripción breve y seleccionamos el tipo de transacción, que en nuestro caso será transacción de reporte y clickeamos continuar.

39

En la siguiente pantalla, ingresamos el nombre del programa, la pantalla de selección inicial, que por default es la 1000, podemos agregar una variante para que se ejecute con la transacción y finalmente grabamos.

Luego para ejecutar nuestra transacción la escribimos en el campo de comandos y presionamos enter como con cualquier otra transacción estándar de SAP.

3|

El navegador de objetos

Mediante la transacción SE80 podemos crear, modificar y visualizar todo tipo de objetos. Algunos de ellos son: Paquetes, Programas, Módulos de función, Clases, Aplicaciones WebDynpro, etc. Al momento de crear un programa de cierta complejidad, esta transacción resulta mucho más útil que la SE38, ya que permite crear directamente desde aquí, todos los objetos componentes de dicho programa. 39

4|

Utilización de colores en reportes

Se pueden utilizar colores a la hora de hacer impresiones por pantalla, tanto en un reporte interactivo como en un reporte clásico. Para esto, vamos a ejecutar la sentencia FORMAT COLOR antes de hacer un WRITE tal como mostramos a continuación.

Y la salida de esta sentencia en un reporte será:

Existen muchas variantes de ejecución de la sentencia FORMAT COLOR. Para obtener más información, presionar F1 sobre la sentencia.

Lección 2: Video - Los Text Symbols.

LECCION_5_2_ABAP_INICIAL_V4.swf

39

Lección 3: Status GUI y Títulos 1|

Creación de un Status GUI

Un Status GUI es un componente independiente de un programa ABAP, que sirve para proporcionarle al usuario un amplio rango de funciones en la pantalla de los programas. Esta compuesto por barras de menú, barras de herramientas estándar, barras de herramientas de aplicaciones y la configuración de teclas de función. En el siguiente gráfico, identificamos cada uno de los componentes en la pantalla de salida de un reporte ABAP.

Vamos a crear un Status GUI para el reporte ZPRUEBA_EST_USUARIOS, que mostrará los usuarios activos y los inactivos dependiendo de que botón de la barra de herramientas de la aplicación ha sido presionado. Para esto, accedemos a la transacción SE80, ingresamos el nombre del programa, presionamos enter y lo creamos tal como lo hacíamos a través de la transacción SE38. Luego, vamos a crearle un Status GUI, para ello sobre el nombre del programa, hacemos botón derecho/Create/GUI Status tal como vemos en la siguiente imagen.

En la siguiente ventana, ingresamos el nombre del Status GUI, que será 0100, una descripción que podría ser "Status del reporte de usuarios" y presionamos 39

continuar. Luego veremos a la derecha de la pantalla, los componentes del Status GUI como vemos a continuación.

Luego, desplegamos la lista que está en la Apllication Toolbar y en el primer ítem en blanco, escribimos el código de función correspondiente a la ejecución del botón de usuarios activos, que será USU_ACTI y presionamos enter. Aquí veremos una ventana de diálogo que nos indicará que no existe texto asignado a esa función y presionaremos continuar. Luego, veremos otra ventana donde completamos los datos referentes al nuevo botón.

Function Text: se utiliza para darle un nombre al botón. Icon name: será el ícono que se visualice por pantalla dentro del botón. Este se puede elegir dentro de un gran variedad de íconos que se visualizan presionando F4. Info. text: es el nombre de ayuda del botón. Este se visualizará cuando dejemos quieto unos segundos el puntero del mouse sobre el botón. Luego, presionamos continuar y en la siguiente ventana de diálogo, asignaremos una tecla de función al botón, que tendrá el mismo efecto que cuando clickeamos con el puntero del mouse el botón.

39

Finalmente con el botón creado veremos el primer ítem de la siguiente manera.

Aquí presionamos enter sobre el código USU_ACTI y completamos en la siguiente ventana, el campo Icon text. que será el texto que se visualice dentro del botón en la pantalla de salida.

39

Luego haremos lo mismo con el botón de usuarios inactivos, cuyo código será USU_INACTI y finalmente grabamos los cambios realizados y activamos. Ahora vamos a introducir código en el reporte para poder utilizar el nuevo Status GUI. Lo primero que debemos hacer es declarar la utilización del status. Esto lo haremos mediante la sentencia SET PF-STATUS, tal como vemos a continuación.

Luego para capturar cual botón clickeó el usuario, utilizaremos el evento AT USERCOMMAND junto con la variable del sistema SY-UCOMM que contendrá el código de función corresponiente al botón presionado. Las subrutinas USUARIOS_ACTIVOS y USUARIOS_INACTIVOS realizan la selección e impresión de los correspondientes registros de la tabla ZTABLA_USUARIOS.

Finalmente activamos y al ejecutar el reporte veremos:

Si presionamos el botón "Reporte de usuarios activos" vemos un listado de los usuarios activos. Si no existen registros de usuarios activos, visualizaremos un mensaje de error. Lo mismo sucederá con los usuarios inactivos.

39

Mediante la transacción standard SE41 se pueden copiar Status GUI de un programa ABAP a otro.

2|

Creación de Títulos

Vamos a crear títulos para nuestro ((reporte)). Para ello, en la transacción SE80, sobre el nombre del programa, hacemos botón derecho/Create/GUI Titles, tal como vemos en la imagen siguiente.

En la siguiente ventana asignaremos un nombre al título y su descripción, que será la que se visualice en pantalla.

39

Luego crearemos el título 0200 para los usuarios inactivos y el título 0300 para la primer pantalla del reporte. Finalmente, presionamos el botón "All title" y veremos en pantalla los tres títulos creados. Lo último que nos queda es activarlos.

Para declarar la utilización de los títulos en el reporte, usamos la sentencia SET TITLE tal como vemos en el siguiente gráfico.

Finalmente al ejecutar el reporte, visualizaremos los títulos, según los botones clickeados de la pantalla.

39

Lección 4: Reportes Interactivos.

1|

Qué es un Reporte interactivo? REPORTE INTERACTIVO. Es un tipo de reporte Abap, donde se muestra un primer listado por pantalla, con cierta información y luego clickeando una línea determinada del primer listado, se accede a otros datos relativos a esa línea y así sucesivamente por cuantos niveles tenga el listado.

A diferencia del Reporte clásico, que puede ser ejecutado tanto Online como Batch, el reporte interactivo es ejecutado solo en forma Online, ya que requiere de la interacción con el usuario. La principal ventaja de los reportes interactivos es que con pocas líneas de código se puede crear un reporte con interacción con el usuario, a diferencia de los programas de diálogo, que requieren de mucho más tiempo de construcción. Veamos un ejemplo para el cual nos convendría crear un reporte interactivo: Supongamos que tenemos un primer listado que muestra los usuarios con sus nombres y luego cuando hacemos doble click sobre un usuario en particular, vemos datos detallados del usuario, como pueden ser el país, código postal, región, etc. En este caso, bastaría con crear un reporte interactivo para cumplir con este requerimiento.

2|

Eventos y variables de un reporte interactivo

Cuando clickeamos en alguna posición de la lista principal que se muestra por pantalla, se ejecutará el evento AT LINE-SELECTION. Este evento debemos ubicarlo luego del evento START-OF-SELECTION. En este momento, ciertas variables del sistema se completan con información muy útil. Ellas son: SY-LSIND: contiene el índice de la lista de detalle. SY-LISEL: tiene el contenido de la línea seleccionada. SY-LILLI: contiene la línea seleccionada de la lista. SY-CUROW: contiene la posición del cursor vertical.

Utilizaremos el evento TOP-OF-PAGE DURING LINE-SELECTION para imprimir por pantalla los textos de las cabeceras de las listas de detalle. Existen algunos programas de prueba estándar ABAP que nos pueden servir para practicar. Ellos son: DEMO_LIST_INTERACTIVE_1, DEMO_LIST_INTERACTIVE_2, DEMO_LIST_INTERACTIVE_3, DEMO_LIST_INTERACTIVE_4.

39

3|

Mi primer reporte interactivo

Vamos a crear el reporte interactivo del ejemplo que dimos en el punto 1. Para esto, vamos a agregar en nuestra tabla de usuarios ZTABLA_USUARIOS los campos: DIRECCION que será CHAR de 30 posiciones, CODIGO_POSTAL que será CHAR de 4 posiciones, F_NACIMIENTO que será DATS de 8 posiciones y ESTADO_CIVIL que tendrá un dominio, que será CHAR de 1 posición y admitirá los valores S(Soltero) y C(Casado). Debido a que realizamos cambios en la estructura de la tabla, tendremos que adaptar la tabla base de datos, utilizando la opción del menú UTILITIES/DATABASE OBJECT/DATABASE UTILITY/ACTIVATE AND ADJUST DATABASE. Después debemos volver a generar la superficie de actualización, que creamos en la unidad 3 y finalmente ingresamos datos en la tabla a través de la transacción SM30. Luego creamos el programa ABAP ZREPORTE_INT_USUARIOS. Dentro del evento START-OF-SELECTION realizamos la selección del DNI y Nombre y Apellido de los usuarios. Después imprimimos por pantalla el resultado de la selección realizada.

La salida por pantalla de nuestro programa se verá de la siguiente manera:

Ahora vamos a agregar el evento AT LINE-SELECTION. El código que este dentro de este evento se ejecutará cuando hagamos doble click en algún lugar de la pantalla, donde se visualiza el primer listado. Utilizaremos la variable del sistema SY-LISEL para obtener el DNI correspondiente a la línea de la pantalla que ha sido clickeada. Luego crearemos la subrutina GENERAR_REPORTE_NIVEL2, la cual seleccionará de la tabla ZTABLA_USUARIOS los datos de detalle correspondientes al usuario, cuyo DNI fue capturado anteriormente y los imprimirá por pantalla.

39

Utilizaremos el evento TOP-OF-PAGE DURING LINE-SELECTION para imprimir por pantalla la cabecera de cada nivel de listados de detalle.

Finalmente ejecutamos el reporte, clickeamos la 23547312 y veremos el siguiente detalle.

línea

correspondiente

al

DNI

Otra posibilidad, es mostrar la pantalla del nivel de detalle como una ventana de dialogo o subscreen. Para esto usamos la sentencia WINDOWS STARTING AT tal como mostramos a continuación.

Y se visualizará la ventana de la siguiente manera:

39

Se pueden crear tantos niveles de listados como se requiera. El nivel del listado donde estamos lo tenemos en la variable SY-LSIND.

Lección 5: Reportes ALV: grillas y listas

1|

Qué es un ALV? ALV. Es una herramienta exclusiva de ABAP, que sirve para crear reportes de manera eficaz, rápida y estandarizada. Las principales ventajas de los reportes ALV son:

Simplifican el desarrollo de reportes, por lo tanto se reducen los tiempos de programación Proporcionan a nuestros reportes un montón de funcionalidad estándar Proporcionan una salida por pantalla estandarizada e uniforme La creación de un Reporte ALV, se basa en la utilización de funciones. Los tipos de ALV más comúnmente usados son tres: Grillas, Listas y Jerárquico. Las Grillas y las Listas pueden utilizarse en cualquier reporte, pero el Jerárquico se utiliza sólo en los casos donde se muestran datos de cabecera y de detalle, como por ejemplo números de factura y detalles o Aerolíneas y vuelos. A cada tipo de ALV le corresponde una función diferente. Ellas son: Grillas -> REUSE_ALV_GRID_DISPLAY Listas -> REUSE_ALV_LIST_DISPLAY Jerárquico -> REUSE_ALV_HIERSEQ_LIST_DISPLAY

39

2|

Mi primer reporte ALV

Vamos a crear nuestro primer reporte ALV. Para esto seguiremos los siguientes pasos: PASO 1ero. : Declaraciones de tipos, estructuras y tablas propias del ALV Dentro de este paso, declaramos el tipo SLIS, que es necesario para la utilización de reportes ALV.

También declaramos una tabla y una estructura para el catalogo del ALV que son del tipo SLIS_T_FIELDCAT_ALV y SLIS_FIELDCAT_ALV, otra estructura para la configuración de la salida que es del tipo SLIS_LAYOUT_ALV y una variable del tipo SY-REPID, para almacenar el nombre del programa.

PASO 2do. : Declaración de la tabla de salida del ALV Vamos a declarar la tabla de salida TI_USUARIOS que se mostrará en el ALV.

PASO 3ero. : Selección de los datos que se mostrarán en el ALV Ahora seleccionamos los datos de la tabla ZTABLA_USUARIOS, que mostraremos en el listado de salida y los guardamos en la tabla interna TI_USUARIOS.

PASO 4to. : Armado del catálogo del ALV Armamos el catálogo del ALV con los campos que serán las columnas de nuestro reporte. Para ello, completaremos para cada columna del listado, los siguientes campos pertenecientes a la tabla del catálogo.

39

Existen muchisimas más propiedades del catálogo que se pueden configurar según lo que necesitemos mostrar en el listado. Para más información, hacer doble click en el tipo SLIS_T_FIELDCAT_ALV. PASO 5to. : Configuración de la salida del ALV Vamos a cargar con valores la estructura ST_LAYOUT para configurar ciertos aspectos de la salida del ALV.

Existen muchismas más opciones a configurar en el layout de un reporte ALV. Para más información, hacer doble click en el tipo SLIS_LAYOUT_ALV. PASO 6to. : Ejecución de la función del ALV Por último, lo que nos queda es la ejecución de la función del ALV. Si queremos un reporte tipo grilla, ejecutaremos la función REUSE_ALV_GRID_DISPLAY. Si queremos un reporte tipo lista, ejecutaremos la función REUSE_ALV_LIST_DISPLAY. Ambas funciones se completan de la misma manera. Como dijimos anteriormente, los ALV jerárquicos se utilizan para cuando tenemos que mostrar datos de cabecera y detalle, por lo tanto no es aplicable para este ejemplo. Si es grilla:

Si es lista:

39

Finalmente si ejecutamos el reporte veremos, si usamos la función para grillas:

Y si usamos la función para listas:

Lección 6: Video - Funcionalidades estándar del ALV

LECCION_5_1_ABAP_INICIAL_V4.swf

Lección 7: Catálogo ALV automático, logos, encabezados y status 1|

Creación del catálogo en forma automática

Existen dos formas de crear el catálogo del ALV, la primera es en forma manual, ingresando campo por campo, tal como hicimos en el ejemplo de la lección anterior. La segunda, es crear el catálogo en forma automática con la función

39

REUSE_ALV_FIELDCATALOG_MERGE. Si tomamos el ejemplo de la lección anterior, el código para la creación automática sería el siguiente:

Pero para poder hacer esto vamos a tener que modificar dos puntos del programa. El primero es la forma como se declara la tabla interna del ALV. Si creamos el catálogo en forma automática debemos declarar la tabla interna utilizando LIKE y haciendo referencia a campos de una tabla base de datos existente.

Lo otro que debemos hacer es configurar el editor, para que se restrinja la cantidad de caracteres de ancho de la pantalla a 72. Esto lo hacemos desde la opción de menú Utilities/Settings/ABAP Editor/Editor/Downwars-Comp.Line Lenght(72).

2|

Utilización de Logos y encabezados

En los ALV Grilla podemos agregar logos y encabezados en los listados. Para ello, debemos declarar una tabla del tipo SLIS_T_LISTHEADER y una estructura del tipo SLIS_LISTHEADER.

Antes de completar el catálogo, vamos a llenar la tabla TI_HEADER con el encabezado del Reporte, el tipo de reporte y la fecha del sistema.

39

Luego, agregamos en la llamada a la función del ALV, el parámetro exporting I_CALL_TOP_PAGE con el literal 'TOP_OF_PAGE', que será el nombre de la subrutina que cargue el contenido del encabezado y el logo.

Ahora creamos la subrutina TOP_OF_PAGE, con la llamada a la función REUSE_ALV_COMMENTARY_WRITE, que carga el encabezado que definimos en la tabla interna TI_HEADER, junto con el logo 'ENJOYSAP_LOGO'.

Para ver los logos disponibles en el sistema o cargar nuevos debemos utilizar la transacción SE78. Finalmente ejecutamos el programa y vemos:

39

3|

Utilización de Status GUIs

Para poder utilizar un Status GUI en un reporte ALV, vamos a agregar en la llamada a la función del ALV el parámetro exporting I_CALLBACK_PF_STATUS_SET con el literal 'PF_STATUS', que será el nombre de la subrutina que declare la utilización del Status GUI y el parámetro exporting I_CALLBACK_USER_COMMAND con el literal 'USER_COMMAND', que será el nombre de la subrutina que se ejecute para capturar la acción realizada por el usuario.

Ahora definimos la subrutina PF_STATUS que setea el status.

Vamos a crear en el status, un botón con la descripción "Usuarios activos" y el código USU_ACTI. También en las Function Keys del status, agregamos los códigos para poder navegar para atrás, volver a la pantalla principal o salir del programa. Cuando creamos estos botones, debemos acordarnos de setearlos con Function Type ''E'', sino no funcionarán como esperamos.

39

Por último agregamos la subrutina que usuario.

capturará las acciones realizadas por el

Finalmente si ejecutamos el reporte, veremos en el Status GUI, el botón de usuarios activos y si lo ejecutamos, se procesará el código existente en la subrutina USER_COMMAND.

Lección 8: ALV Jerárquico y Agrupamiento 1|

Agrupamiento en un ALV

Podemos agrupar los registros que mostramos en un ALV. Para ello, declaramos una tabla del tipo SLIS_T_SORTINFO_ALV y una estructura del tipo SLIS_SORTINFO_ALV.

Luego antes de llamar a la función del ALV, vamos a cargar la tabla TI_SORT con los registros en el orden en el que deseamos agrupar.

Ahora debemos completar el parámetro exporting IT_SORT con nuestra tabla interna TI_SORT.

39

Finalmente, si ejecutamos el reporte, veremos la agrupación por Estado Civil.

2|

ALV Jerárquico

Como dijimos anteriormente, los ALV Jerárquicos se utilizan cuando tenemos que mostrar en un reporte, datos de cabecera y de posición. En las declaraciones de las tablas internas de cabecera y posiciones, debe haber como mínimo un campo en común. En el caso que mostramos a continuación, el campo común es el CARRID, que es la compañía aérea.

Debemos declarar una estructura del tipo SLIS_KEYINFO_ALV, que será ST_KEYINFO y contendrá el campo clave que une a las dos tablas internas.

Ahora vamos a cargar las tablas internas de cabecera y detalle con un juego de datos para la compañía aérea ARG. En el programa de ejemplo de la lección, también cargamos un juego de datos para la compañía aérea LAN. 39

Luego crearemos el catálogo del ALV para ambas tablas internas, sumando los campos de ambas tablas en la tabla del catálogo TI_CATALOGO.

Ahora tenemos que completar la estructura ST_KEYINFO. En los campos HEADER01 y ITEM01 va a ir el campo de la tabla de cabecera que hace de vínculo con la tabla de detalles.

39

Por último, ejecutamos la función REUSE_ALV_HIERSEQ_LIST_DISPLAY.

Y veremos el siguiente reporte ALV:

Lección 9: Video - Las Bases de Datos Lógicas

LECCION_5_3_ABAP_INICIAL_V4.swf

UNIDAD 6: TRATAMIENTO DE ARCHIVOS 39

Lección 1: Archivos Locales: Upload de datos 1|

Tratamiento de archivos locales

ABAP nos proporciona una serie de métodos muy útiles para el tratamiento de archivos locales ubicados en nuestra PC mediante la clase CL_GUI_FRONTEND_SERVICES. Los conceptos de clases y métodos los veremos en detalle en el "Curso Programador ABAP Nivel Avanzado". Por ahora, nos basta con entender que los métodos se ejecutan como si fueran funciones. Para visualizar todos los métodos disponibles en la clase, editamos un programa ABAP y presionamos el botón Pattern o Patrones. Aquí marcamos la opción "ABAP Object Patterns" y presionamos continuar. En la siguiente pantalla escribimos lo siguiente:

Y luego presionamos F4 en Method y veremos la siguiente pantalla con todos los métodos de la clase:

39

Veremos en detalle los siguientes métodos: FILE_OPEN_DIALOG: para mostrar la pantalla de navegación que permita al usuario poder seleccionar el archivo del directorio de su PC. GUI_DOWNLOAD: para descargar datos de los programas a archivos en la PC. GUI_UPLOAD: para bajar datos de los archivos de la PC a nuestros programas. Otra forma de visualizar el contenido de la clase CL_GUI_FRONTEND_SERVICES es ingresando al Class Builder que es la transacción SE24.

2|

Búsqueda de archivos en la PC

Para buscar archivos locales en el directorio de nuestra PC, utilizaremos el método CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG. Veamos un ejemplo de su utilización:

39

Analicemos los parámetros más importantes del método: WINDOW_TITLE: asigna un título a la ventana de búsqueda. DEFAULT_FILENAME: contiene el nombre del archivo que buscamos en nuestra PC. Si colocamos el literal asterísco podremos ver todos los archivos que se encuentren en los directorios. FILE_TABLE: contiene la ruta y nombre del archivo seleccionado. Al igual que las funciones, el método CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG tiene definidas excepciones. Cada excepción tiene asociada una descripción que contempla cada uno de los errores posibles que pueden ocurrir al ejecutar dicho método. Si ejecutamos el código anterior veremos la siguiente ventana de diálogo:

39

Es recomendable la utilización del método FILE_OPEN_DIALOG, en los programas ABAP que trabajan con archivos locales, ya que facilita ampliamente la interacción entre el usuario y el programa y evita errores de tipeo de datos.

3|

Lectura de datos de los archivos locales

Para leer datos de los archivos locales en las tablas internas de nuestros programas, utilizaremos el método CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD.

39

Analicemos los parámetros más importantes del método: FILENAME: contiene el directorio y nombre del archivo local con el que estamos trabajando. FILETYPE: contiene el tipo o extensión del archivo local. Los tipos admitidos son: BIN: para archivos binarios. ASC: para archivos ASCII. DAT: para archivos excel. Las columnas son separadas utilizando tabs. Las líneas son separadas con saltos de línea. WK1: para archivos excel y de lotus. HAS_FIELD_SEPARATOR: indica que el archivo local tiene separadores. DATA_TAB: es la tabla interna donde almacenaremos los datos del archivo local.

39

En este método están definidas excepciones con descripciones que contemplan cada uno de los errores que se pueden producir al ejecutar el método. En algunos programas ABAP, podemos ver que se utilizan las funciones WS_UPLOAD y UPLOAD. No es recomendable la utilización de estas funciones debido a que actualmente son considerados objetos obsoletos por SAP.

Lección 2: Archivos Locales: Download de datos 1|

Grabación de datos en archivos locales

Para grabar datos existentes en las tablas internas de nuestros programas a archivos ubicados en la PC, utilizaremos el método CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD. Veamos un ejemplo de su utilización:

Analicemos algunos de los parámetros del método:

39

FILENAME: contiene el directorio y nombre del archivo a descargar a la PC. FILETYPE: contiene el tipo o extensión del archivo que descargamos a la PC. Los tipos o extensiones admitidas son: BIN: para archivos binarios. Se debe especificar la longitud del archivo en el parámetro BIN_FILESIZE. La tabla interna que se utiliza debe tener un solo campo del tipo X. ASC: para archivos ASCII. DAT: para archivos excel. Las columnas son separadas utilizando tabs. Las líneas son separadas con saltos de línea. WK1: para archivos excel y de lotus.

WRITE_FIELD_SEPARATOR: indica si se generará un separador de archivo o no y cual será. DATA_TAB: aquí se almacena el contenido del archivo. Esta tabla debe tener la misma estructura del archivo. En este método también están definidas excepciones con descripciones que contemplan cada uno de los errores que se pueden producir al ejecutar el método. Luego si ejecutamos el código veremos el mensaje que dice que la transferencia de datos se realizó correctamente y se especifica la cantidad de bytes transferida.

En algunos programas ABAP, podemos ver que se utilizan las funciones DOWNLOAD y WS_DOWNLOAD. No es recomendable la utilización de estas funciones debido a que actualmente son consideradas objetos obsoletos por SAP.

Lección 3: Video - Las Rutinas de conversión de datos

LECCION_6_2_ABAP_INICIAL_V4_2.swf

39

Lección 4: Archivos en Servidor: las sentencias OPEN y READ 1|

Tratamiento de archivos en el servidor

En un ambiente real de trabajo, es común la utilización de un servidor de aplicaciones, para trabajar con archivos. ABAP dispone de una serie de sentencias para el tratamiento de archivos ubicados en el servidor de aplicaciones. Las principales sentencias para el manejo de archivos en el servidor de aplicaciones son: OPEN DATASET: para la apertura de archivos del servidor. READ DATASET: para la lectura de archivos del servidor. TRANSFER: para transferir datos de archivos al servidor. DELETE: para borrar archivos del servidor. CLOSE: para cerrar archivos del servidor. A continuación veremos en detalle cada una de estas sentencias.

2|

Apertura de archivos en el servidor

Utilizaremos la sentencia OPEN DATASET para la apertura de archivos. La sintaxis de la sentencia es la siguiente:

Si la apertura del archivo se realizó correctamente, entonces el SY-SUBRC será 0. Caso contrario, será 8. El nombre del archivo junto con el directorio en donde se encuentra, pueden ingresarse como un literal entre comillas o en una variable. Si no ingresamos el directorio y solo ingresamos el nombre, entonces el sistema intentará abrir el archivo en el directorio en el que corre el servidor de aplicaciones. Si queremos abrir un archivo para lectura, debemos utilizar la cláusula FOR INPUT, tal como vemos a continuación:

El archivo que se intenta abrir debe existir. Caso contrario, el SY-SUBRC será 8. Si el archivo existe y está abierto, el sistema se posicionará al comienzo del archivo. 39

Veamos un ejemplo:

En el ejemplo anterior, p_path es una parámetro de la pantalla de selección en donde el usuario ingresa el directorio y nombre del archivo.

Es recomendable cerrar todos los archivos que ya están abiertos antes de realizar una re - apertura con la sentencia OPEN DATASET. Si queremos abrir un archivo para escritura, debemos utilizar la cláusula FOR OUTPUT, tal como vemos a continuación:

Si el archivo no existe, se creará automáticamente. Si existe pero está cerrado el contenido será sobrescrito. Si existe y está abierto, el sistema se posicionará al comienzo del archivo. Si la apertura se realiza correctamente, entonces el SY-SUBRC será 0. Caso contrario, será 8. Veamos un ejemplo:

Si queremos abrir un archivo para agregar información, debemos utilizar la cláusula FOR APPENDING, tal como vemos a continuación.

39

Si el archivo no existe, se creará automáticamente. Si existe pero está cerrado, el sistema lo abrirá y se posicionará al final del mismo. Si existe y está abierto, el sistema se posicionará al final del archivo. Siempre el SY-SUBRC será 0. Veamos un ejemplo:

Existen dos modos de apertura de archivos: MODO TEXTO Para abrir un archivo en modo texto, debemos utilizar la cláusula IN TEXT MODE, tal como vemos a continuación:

Si leemos o escribimos en un archivo que ha sido abierto en modo texto, la información es transferida línea a línea. Si utilizamos el modo texto debemos agregar la palabra reservada ENCODING DEFAULT Veamos un ejemplo:

MODO BINARIO Para abrir un archivo en modo binario, debemos utilizar la cláusula IN BINARY MODE, tal como vemos a continuación:

39

Si leemos o escribimos en un archivo que ha sido abierto en modo binario, la información es transferida byte a byte. Veamos un ejemplo:

3|

Lectura de archivos del servidor

Utilizaremos la sentencia READ DATASET para la lectura de archivos del servidor. La sintaxis de la sentencia es la siguiente:

Para determinar en que variable debemos almacenar los datos que leeremos del archivo, debemos conocer la estructura del archivo que leeremos. Si la lectura se realizó correctamente, entonces el SY-SUBRC será 0. Caso contrario, será 8. Veamos un ejemplo:

Nota: debido a que no disponemos de un servidor Unix para realizar las pruebas de esta lección, no habrán ejercicios de práctica.

Lección 5: Archivos en Servidor: las sentencias Transfer, Delete y Close Transferencia de archivos al servidor 39

1|

Utilizaremos la sentencia TRANSFER para transferir datos desde nuestros programas ABAP a los archivos ubicados en el servidor de aplicaciones. La sintaxis de la sentencia es la siguiente:

El modo en que se realiza la transferencia de información se corresponde con el modo de apertura del archivo. Si el archivo no está abierto para escritura, el sistema intentará abrirlo en BINARY MODE o utilizando la última ejecución de la sentencia OPEN DATASET. Veamos un ejemplo:

2|

Borrado de archivos del servidor

Utilizaremos la sentencia DELETE DATASET para borrar archivos del servidor de aplicaciones. La sintaxis de la sentencia es la siguiente:

Para borrar un archivo, previamente debemos abrirlo. Si el borrado se realiza correctamente, entonces el SY-SUBRC será 0. Caso contrario, será 4.

Veamos un ejemplo:

39

3|

Cierre de archivos del servidor

Utilizaremos la sentencia CLOSE DATASET para cerrar archivos del servidor de aplicaciones. La sintaxis de la sentencia es la siguiente:

Es ampliamente recomendable realizar siempre el cierre de los archivos. Veamos un ejemplo:

4|

Búsqueda de archivos en el servidor

Utilizando la función /SAPDMC/LSM_F4_SERVER_FILE podemos crear una ventana de navegación en el servidor de aplicaciones para poder seleccionar el archivo que deseamos. Veamos un ejemplo de su utilización:

Si ejecutamos el código anterior veremos el siguiente mensaje ya que no disponemos de un servidor de aplicaciones para probar. 39

Si lo tuviéramos, visualizaríamos una ventana de diálogo donde podremos buscar los archivos en el servidor. Nota: debido a que no disponemos de un servidor Unix para realizar las pruebas de esta lección, no habrán ejercicios de práctica.

Lección 6: Video - Administración de archivos de imágenes en SAP

LECCION_6_5_ABAP_INICIAL_V4_3.swf

Lección 7: Field-Symbols 1|

Qué son los Field Symbol?

FIELD SYMBOL. Es un tipo de sentencia ABAP que nos permite trabajar con los datos de los programas en forma dinámica en tiempo de ejecución. Al contrario de lo que sucede con el acceso estático de los datos, donde necesitamos especificar el nombre de un objeto para poder hacer algo con el, los Field Symbol nos permiten acceder y pasar datos cuyos nombres y atributos no conocemos hasta el momento de la ejecución. Se puede considerar a los Field Symbol como nombres simbólicos de los datos, ya que cuando se utilizan, el sistema trabaja con el contenido de los datos asignados y no con el contenido del field symbol. Los Field Symbol nos proveen de gran flexibilidad debido a que: Si queremos procesar partes de campos, nos permiten especificar el offset y el desplazamiento de un campo en forma dinámica. Se puede forzar a un Field Symbol para que tome diferentes atributos técnicos que los del campo asignado a él.

39

La mayoría de los errores que cometamos en la utilización de Field Symbols los detectaremos recién en tiempo de ejecución. Esto hace que sean bastante más difíciles de detectar. Por lo tanto solo debemos utilizar Field Symbol si no podemos llegar al mismo resultado con las sentencias ABAP convencionales.

2|

Declaración de un Field Symbol

Para declarar un Field Symbol vamos a utilizar la siguiente sintaxis:

Si no especificamos un tipo a un Field Symbol, este puede contener cualquier dato. Cuando asignamos un dato al Field Symbol, este hereda los atributos técnicos del dato. Los tipos de datos genéricos posibles para un Field Symbol son: Tipo de especificación

Objeto de datos

TYPE ANY o sin especificación

Todos los tipos de objetos de datos son aceptados. El field symbol adopta los atributos del dato.

TYPE C, N, P o X

Solo los tipos de datos C, N, P y X son aceptados. El field symbol adopta la longitud y decimales del dato.

TYPE TABLE

El sistema chequea si la tabla es estándar.

TYPE ANY TABLE

El sistema chequea si el campo es una tabla interna. El field symbol hereda todos los atributos de la tabla.

El sistema chequea si el campo es TYPE INDEX TABLE una tabla indexada. El field symbol hereda todos los atributos de la tabla. TYPE STANDARD TABLE

El sistema chequea si el campo es una tabla estándar. El field symbol hereda todos los atributos de la tabla.

TYPE SORTED TABLE

El sistema chequea si el campo es una tabla sorted. El field symbol hereda todos los atributos de la tabla.

TYPE HASHED TABLE

El sistema chequea si el campo es una tabla hashed. El field symbol hereda todos los atributos de la tabla.

Veamos un ejemplo de la utilización de un Field-symbol:

39

3|

Asignación de datos a un Field Symbol

Para asignar datos a un Field Symbol utilizamos la sentencia ASSIGN. La asignación que utilizamos es estática ya que sabemos el nombre del campo que queremos asignar al Field Symbol. La sintaxis utilizada sería la siguiente:

Veamos un ejemplo:

UNIDAD 7: BATCH INPUT Y BAPIS 39

Lección 1: El concepto de Batch Input 1|

Qué es un Batch Input?

Cuando se instala una aplicación en un ambiente de producción, es necesario dar de alta toda la información que es indispensable para que pueda funcionar. A este proceso lo llamamos carga inicial de datos. Supongamos que necesitamos hacer la carga inicial de datos en SAP de 10000 clientes. Para hacer esto, tendríamos que ingresar 10000 veces a la transacción maestro de clientes, lo que cual sería una tarea demasiado tediosa y sumamente costosa en tiempo. Algo similar ocurriría si necesitamos ingresar 10000 registros en una tabla base de datos, ya que si bien, en este caso, podríamos crear un programa que mediante instrucciones Open SQL carguen los registros, no estaríamos utilizando todas las validaciones estándar que tienen las transacciones SAP, por lo que necesitaríamos dedicar mucho tiempo para cubrir ese bache. Para solucionar estos inconvenientes, SAP introduce la técnica de Batch Input, mediante la cual, podremos dar de alta, modificar o borrar grandes cantidades de datos en el sistema, de forma automática y utilizando las mismas transacciones, con sus respectivas validaciones, tal como si lo hiciéramos manualmente de a 1 dato por vez. Generalmente, la carga inicial de datos se realizará levantando los datos de un archivo, tal como vimos en la unidad anterior.

2|

Técnicas de Batch Input

Existen dos técnicas para realizar un Batch Input, una se realiza de forma Online y la otra en forma Batch. Ellas son: CALL TRANSACTION: se realiza de forma Online, por lo que ejecuta las actualizaciones en el momento en que se ejecuta el programa del Batch Input. Se utiliza la sentencia estándar CALL TRANSACTION. JUEGO DE DATOS: se realiza de forma Batch y queda almacenado en SAP para su posterior ejecución mediante la transacción SM37. Consiste en la ejecución de una serie de funciones estándar para la apertura, ejecución y cierre del juego de datos.

39

3|

Pasos para la creación de un Batch Input

Los pasos para la generación de un Batch Input dependen utilizada. Veamos cuales son los pasos a seguir para cada técnica:

de

la

técnica

CALL TRANSACTION Paso 1ero: Declaración de datos propios del Batch Input Paso 2do: Lectura de datos de archivo de entrada Paso 3ero: Carga de la tabla BDCDATA Paso 4to: Ejecución de la sentencia CALL TRANSACTION JUEGO DE DATOS Paso 1ero: Declaración de las datos propios del Batch Input Paso 2do: Lectura de datos de archivo de entrada Paso 3ero: Apertura de la sesión del Juego de Datos Paso 4to: Carga de la tabla BDCDATA Paso 5to: Inserción del Juego de Datos Paso 6to: Cierre de la sesión del Juego de Datos Paso 7mo: Ejecución del Juego de Datos a través de la transacción SM37 o a través de la creación de un job y la ejecución del programa estándar RSBDCBTC

4|

Carga de la tabla BDCDATA

El paso más importante en la ejecución de un Batch Input es la carga de la tabla BDCDATA. Tal como hacemos referencia, la tabla BDCDATA será una tabla interna que tendrá los mismos campos que la estructura BDCDATA. Los campos que forman parte de esta estructura son:

39

Veamos un ejemplo sencillo de como cargaríamos la tabla BDCDATA. Supongamos que queremos hacer un Batch Input, para cargar con un registro a nuestra tabla de usuarios ZTABLA_USUARIOS. Si ejecutamos esta acción en forma manual, deberíamos hacer lo siguiente: Ingresar a la transacción SM30, introducir el nombre de la tabla, presionar el botón de modificación o maintain, presionar el botón de nuevas entradas o new entries, introducir el contenido del registro con todos sus campos, presionar el botón grabar y salir de la transacción. Si representamos en código el procedimiento anteriormente descrito, escribiríamos: Para ingresar a la primer pantalla y presionar el botón de mantenimiento.

Por cada vez que se ingrese en la tabla BDCDATA, una nueva pantalla, debe ingresarse un BDC_OKCODE. Luego, presionamos el botón de nuevas entradas.

Los números de las dynpros siempre deben tener 4 dígitos.

39

Después ingreso el registro del usuario. En la imagen que vemos a continuación no figuran todos los campos de la tabla de usuarios.

El código anterior está diseñado para dar de alta un solo registro en la tabla de usuarios. Si quisiéramos ingresar más de un registro, vamos a tener que manejar un indice. Esto lo veremos en detalle en las próximas lecciones. Por último, grabamos y salimos de ambas pantallas.

39

En la próxima lección veremos como hacer para obtener los datos para completar la tabla BDCDATA.

Lección 2: Video - Los datos propios en el sistema SAP

LECCION_7_4_ABAP_INICIAL_V4.swf

Lección 3: Subrutinas y Grabación de datos de un BI 1|

Utilización de subrutinas en un Batch Input

Para hacer más simple la creación de un batch input, vamos a utilizar la subrutina BDC_FIELD, que nos van a permitir modularizar los programas.

39

Si cambiamos el código de la lección anterior, utilizando la subrutina BDC_FIELD, el mismo quedaría de la siguiente manera:

En el ejemplo anterior, podemos ver lo importante que es la modularización en los programas batch input.

39

2| Cómo obtener los datos necesarios para la carga de la tabla BDCDATA? Vamos a explicar como obtener los valores que cargamos en la tabla interna BDCDATA. Para ello, tomamos el ejemplo de la carga de la tabla BDCDATA, que vimos en la lección anterior. Vamos a entrar a la transacción SM30, y recuperar los datos correspondientes a la primer pantalla. Existen varias formas de obtener información de una pantalla. Ellas son: Parándonos sobre un campo de entrada de datos, presionamos F1 y luego el botón de Información técnica y veremos una ventana de diálogo con información relevante para el armado de la tabla BDCDATA, como es el nombre del programa, el nombre de la dynpro y el nombre del campo.

Parándonos sobre un botón de la pantalla, presionamos F1 y veremos una ventana de diálogo con el nombre del programa y el código de función correspondiente al botón.

39

En todas las pantallas de SAP, podemos visualizar en el extremo inferior derecho de las mismas, diferentes datos de la pantalla como ser el nombre del programa en ejecución, la transacción, etc.

3|

Grabación de un Batch Input

Otra forma más eficiente de obtener los datos para la carga de la tabla BDCDATA, consiste en realizar una grabación de los pasos que hacemos en la ejecución de las transacciones, mediante la transacción SM35.

Para realizar la grabación, presionamos el botón Recording, luego el botón New Recording y veremos la siguiente ventana de diálogo.

39

Recording: aquí asignamos un nombre a la grabación. Transaction code: aquí ingresamos el nombre de la transacción. El resto de las opciones, las dejamos como están y presionamos el botón Start Recording. Luego seguiremos la secuencia de pantallas hasta generar un registro en la tabla ZTABLA_USUARIOS, que finaliza presionando el botón grabar y saliendo de la transacción. Después de esto, veremos la siguiente pantalla con la grabación.

39

Cuando estamos haciendo una grabación en la transacción SM35 y queremos ver el resultado de la misma, debemos presionar el botón grabar o el botón exit de la pantalla. Si nos fijamos, la tabla con las columnas que visualizamos en la grabación tiene la misma estructura que la tabla BDCDATA. Luego si presionamos el botón grabar, la grabación quedará almacenada en el sistema para consultarla mientras hacemos el Batch Input. También es posible exportarla a un archivo o importar de un archivo una grabación. Por último, si volvemos para atrás, presionando el botón back de la pantalla, veremos la grabación que acabamos de crear con cierta información de la misma.

39

Podremos ejecutar la grabación cuantas veces queramos, presionando el botón procesar y seleccionando la grabación de la pantalla. También es posible modificar una grabación creada para volver a ejecutarla.

Lección 4: Batch Input utilizando Call transaction 1|

Mi primer Batch Input utilizando CALL TRANSACTION

Vamos a crear nuestro primer Batch Input utilizando la técnica de CALL TRANSACTION. El objetivo del Batch Input será la carga inicial de datos de la tabla ZTABLA_USUARIOS. Para ello, vamos a crear un archivo de texto con registros que cumplan con la estructura de la tabla ZTABLA_USUARIOS, sin tener en cuenta al campo mandante. Como lo que vamos a hacer será la carga inicial de la tabla de usuarios, borraremos su contenido previamente a la ejecución de este ejemplo. Ahora, seguiremos los pasos que establecimos en la primer lección de la unidad. Paso 1ero. : Declaración de datos propios del batch input Declaramos una tabla interna y una estructura, ambas del tipo BDCDATA, otra tabla interna del tipo BDCMSGCOLL con su estructura, que servirán para almacenar los mensajes que se produzcan cuando ejecutemos el CALL TRANSACTION, la tabla interna de usuarios, que contendrá los datos que levantemos del archivo de entrada y una tabla para mostrar por pantalla los errores entre otras declaraciones.

39

Paso 2do. : Lectura de datos de archivo de entrada Ejecutamos el método CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD para levantar el archivo de entrada con la información para generar el Batch Input.

39

Paso 3ero. : Carga de la tabla BDCDATA Para cargar la tabla BDCDATA utilizamos la subrutina BDC_FIELD, que vimos en la lección anterior. Antes debemos inicializar la tabla interna del Batch Input y la de los mensajes. Como vamos a ingresar más de un registro, tendremos que manejar índices para saber en que fila de la pantalla estamos cargando los datos. Esto lo solucionamos fácilmente, concatenando al nombre del campo el número de fila que le corresponde en la pantalla entre paréntesis.

39

Paso 4to. : Ejecución de la sentencia Call Transaction Ahora vamos a ejecutar la sentencia CALL TRANSACTION. La sintaxis de la sentencia es la siguiente:

Veamos en detalle cada una de las opciones. USING: aquí especificamos la tabla BDCDATA que se utilizará. MODE: determina el modo de procesamiento que utilizará el Batch Input. Los modos posibles de procesamiento son:

39

Modo Efecto A

Procesamiento con la visualización de todas las pantallas. Es el valor por default.

E

Procesamiento donde se muestran las pantallas solo si ocurre un error. Si se alcanza un breakpoint, se termina el procesamiento con SY-SUBRC igual a 1001. El campo SY-MSGTY contendrá "S", SYMSGID contendrá "00", SY-MSGNO contrendrá "344", SY-MSGV1 contendrá "SAPMSSY3" y SY-MSGV2 contrendrá el "0131".

N

Procesamiento donde no se muestran las pantallas.

P

Procesamiento donde no se muestran las pantallas. Si se alcanza un breakpoint, se pasa el control al debugger.

Es conveniente utilizar una variable para asignar el modo de procesamiento a un Batch Input. De esta forma podremos modificar su valor dinámicamente, durante la ejecución del programa. UPDATE: determina el modo de actualización de los cambios que producirá el Batch Input. Los modos posibles son:

Update Efecto Actualización Asincrónica. A

La actualización se produce de igual forma a la que sucede si no utilizamos la sentencia COMMIT WORK AND WAIT. Valor por defecto.

S

Actualización Sincrónica. La actualización se produce de igual forma a la que sucede si utilizamos la sentencia COMMIT WORK AND WAIT.

L

Actualización Local.

MESSAGES INTO: con el uso de esta opción, todos los mensajes generados durante el procesamiento del Batch Input son almacenados en una tabla interna de tipo BDCMSGCOLL. Para armar los mensajes, vamos a utilizar la función MESSAGE_PREPARE tal como vemos a continuación:

39

Ahora que ya terminamos con todos los pasos del Batch Input, vamos a ejecutarlo con modo de procesamiento "A" que nos permite ver el paso a paso de las actualizaciones. Lo primero que hacemos es ingresar a la transacción SM30 con el nombre de la tabla y presionamos el botón Maintain.

Presionamos el botón New Entries.

39

Ingresamos todos los datos para un usuario y presionamos grabar.

Finalmente salimos de la transacción y repetiremos esta secuencia de pasos por cuantos registros de usuario ingresemos en la tabla.

La sentencia CALL TRANSACTION también es muy utilizada en reportes, para acceder a una transacción determinada, a partir de los datos clickeados en pantalla, con el agregado de la cláusula AND SKIP FIRST SCREEN. Para más información, presionar F1 sobre la sentencia.

39

Lección 5: Video - Paso a paso en la ejecución de un BI por Call Transaction

LECCION_7_5_ABAP_INICIAL_V4.swf

Lección 6: Batch Input utilizando Juego de Datos 1|

Mi primer Batch Input utilizando Juego de Datos

Vamos a crear nuestro primer Batch Input utilizando la técnica de Juego de datos. El objetivo del Batch Input será la carga inicial de datos de la tabla ZTABLA_USUARIOS. Para ello, vamos a crear un archivo de texto con registros que cumplan con la estructura de la tabla ZTABLA_USUARIOS, sin tener en cuenta el campo mandante. Como lo que vamos a hacer será la carga inicial de la tabla de usuarios, borraremos su contenido previamente a la ejecución de este ejemplo. Ahora, seguiremos los pasos que establecimos en la primer lección de la unidad. Paso 1ero. : Declaración de los datos propios del Batch Input Declaramos una tabla interna y una estructura, ambas del tipo BDCDATA y otra tabla interna de usuarios que contendrá los registros que levantemos del archivo de entrada.

39

Paso 2do. : Lectura de datos de archivo de entrada Ejecutamos el método CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD para levantar el archivo de entrada con la información para generar el batch input.

Paso 3ero. : Apertura de la sesión del Juego de Datos Para realizar la apertura de la sesión del Juego de Datos, vamos a utilizar la función BDC_OPEN_GROUP, especificando el mandante, el grupo y el usuario.

39

Paso 4to. : Carga de la tabla BDCDATA Para cargar la tabla BDCDATA utilizaremos la subrutina BDC_FIELD, que vimos en la lección dos. Antes debemos inicializar la tabla interna del Batch Input. Paso 5to. : Inserción del Juego de Datos Para realizar la inserción del Juego de Datos vamos a utilizar la función BDC_INSERT, tal como vemos a continuación.

39

Paso 6to. : Cierre de la sesión del Juego de Datos Para cerrar el Juego de Datos vamos a utilizar la función BDC_CLOSE_GROUP, tal como vemos a continuación.

Paso 7mo. : Ejecución del Juego de Datos Para realizar la ejecución del Juego de Datos vamos a entrar a la transacción SM35. Vamos a seleccionar el Juego de Datos y lo ejecutamos presionando el botón Process.

En la siguiente ventana de díalogo marcamos la opción Background y presionamos process.

Finalmente la sesión cambiará de status dependiendo del resultado de la ejecución y los datos se actualizarán en la tabla ZTABLA_USUARIOS.

39

2| Utilización del programa RSBDCBTC para la ejecución del juego de datos Podemos ejecutar el Juego de Datos en forma Online mediante la ejecución del programa estándar RSBDCBTC. Para ello vamos a tener que crear un job, submitir la ejecución del programa RSBDCBTC y cerrar el job, tal como vemos a continuación.

Luego si vamos a la transacción SM35, vemos que el juego de datos se procesó sin la necesidad de hacerlo manualmente.

Lección 7: BAPIS 1|

Qué es una BAPI?

BAPIS. Son métodos estandarizados que nos permiten realizar acciones sobre los objetos de negocios de SAP, como pueden ser, crear un pedido, crear un equipo, hacer un movimiento de mercancías. Todas cosas que hasta ahora hacíamos mediante batch input. Ventajas de las BAPIS por sobre los Batch Inputs Debido a que las BAPIS son generalmente estándar de SAP, utilizando BAPIS, nos aseguramos que los programas que desarrollemos, serán compatibles con las versiones futuras de SAP. Esto no ocurre con los batch input, ya que entre las distintas versiones de SAP, es común que se modifiquen las pantallas de las transacciones, por lo tanto la ejecución del Batch Input fallará.

Decimos que las Bapis son generalmente estándar ya que si bien se pueden crear mediante la transacción SE37 como funciones RFC, en rara ocasión tendremos que crear una nueva.

39

Se pueden utilizar BAPIS desde cualquier plataforma de desarrollo que soporte el uso de funciones RFC. Desventajas de las Bapis La mayor dificultad en la utilización de BAPIS, está en la carga correcta de los valores de las tablas de entrada. Para superar esta dificultad, podemos utilizar la SDN. 2|

Bapis estándar

Existen ciertas BAPIS que son estándares y pueden ser implementadas para la mayoría de los objetos de negocios. Estas BAPIS tienen funciones especificas, como puede ser listar las instancias existentes de un objeto de negocio SAP. Ellas son: Bapis estándar para lectura de datos GetList(): con esta Bapi se pueden seleccionar un rango de objetos como pueden ser sociedades o numeros de materiales. GetDetail(): se utiliza para recuperar los datos de una instancia de un objeto de negocio. GetStatus(): se utiliza para obtener el status de un objeto de negocio. ExistenceCheck(): chequea si existe una entrada determinada de un objeto de negocio. Bapis estándar para crear o modificar datos Create() o CreateFromData(): se utilizan para crear instancias de objetos de negocios. Change(): se utiliza para modificar una instancia de un objeto de negocio. Delete() y Undelete(): se utilizan para borrar y para cancelar el borrado de una instancia de un objeto de negocio. Bapis estándar para procesamiento masivo Las BAPIS para crear o modificar datos pueden ser utilizadas para procesamiento masivo, o sea para procesar grandes cantidades de datos. Para ello será necesario agregar el sufijo Multiple al nombre de los métodos. Por ejemplo ChangeMultiple(), CreateMultiple() or DeleteMultiple().

Bapis estándar para replicar instancias de objetos

39

Las Bapis Replicate() y SaveReplicate() son utilizadas para copiar instancias de objetos de un sistema a otro.

3|

La transacción BAPI

Para visualizar las Bapis existentes en el sistema, podemos utilizar la transacción estándar BAPI.

Veamos por ejemplo la Bapi BAPI_USER_GET_DETAILS, que se utiliza para obtener los datos personales de los usuarios de SAP. Para buscarla, clickeamos en el menú la opción Edit/Find, ingresamos el nombre del objeto que es USER, presionamos continuar y dentro del menú que vemos a la izquierda de la pantalla vamos a User y allí clickeamos GetDetail.

39

Si ejecutamos la Bapi desde la transacción SE37, previamente ingresando el nombre de usuario, que en nuestro caso será BCUSER, podremos acceder a los datos personales del usuario.

39

DYNPROS

39