workshop abap i - documentación

77
ABAP Workshop Diccionario de Datos y Reportes Ing. Hernán González Navas Noviembre 2009

Upload: hernangn

Post on 26-Jun-2015

2.096 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: WorkShop Abap I - Documentación

ABAP WorkshopDiccionario de Datos y Reportes

Ing. Hernán González Navas

Noviembre 2009

Page 2: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Visión General de SAP

SAP AG es el Principal Proveedor Mundial de Software Empresarial. Fue fundado en 1972, por 5 Ingenieros ex empleados de IBM, y tiene su sede en Walldorf Alemania.

Actualmente, más de 12 millones de usuarios trabajan cada día con Soluciones SAP, existen al menos 120000 Instalaciones alrededor del mundo, más de 1500 Partners, como mínimo 25 Soluciones Específicas de Industria, y supera los 40000 Clientes, en más de 120 Países. SAP es el tercer mayor proveedor mundial de software.

Además de Software, SAP proporciona Consultoría, Soporte y Formación.

Su producto característico y más exitoso es mySAP ERP (Enterprise Resource Planning), un sistema versátil, modular y totalmente Integrado, tuvo varios predecesores (R/1, R/2, R/3), y provee soluciones estándares (mejores prácticas) y customizables a todas las necesidades típicas de información de una compañía.

El mismo cuenta, entre otros, con los siguientes Módulos: finanzas (FI), tesorería (TR), control (CO), control empresarial (EC), gestión de inversiones (IM), ventas y distribución (SD), logística (LO), gestión de materiales (MM), planificación de la producción (PP), gestión de almacenes (WM), mantenimiento de planta (PM), sistema de proyectos (PS), gestión de la calidad (QM) y recursos humanos (HR).

SAP provee Soluciones de Industria para bancos, defensa y seguridad, atención de la salud, enseñanza superior e investigación, seguros, sector público, aeroespacial y defensa, automotriz, química, productos de consumo, ingeniería construcción y operaciones, alta tecnología, maquinaria industrial y componentes, ciencias de la vida, productos de construcción, minería, petróleo y gas, medios, servicios profesionales, retail, telecomunicaciones, servicios de logística y viajes, distribución mayorista, etc.

Los productos SAP trabajan en tiempo real, pueden correr sobre la mayoría de sistemas operativos y base de datos, manejar múltiples idiomas y monedas.

Su Lenguaje de Programación Histórico es ABAP, el cual permite, cuando la parametrización resulta insuficiente, ampliar los productos estándares, y desde hace algunos años, con el advenimiento de NetWeaver, también utiliza Java, principalmente para temas como integración, dispositivos móviles y portales.

Además del ERP, la aplicación primaria de mySAP Business Suite, otros exitosos productos son: Customer Relationship Management (CRM), Supplier Relationship Management (SRM), Supply Chain Management (SCM) y Product LifeCycle Management (PLM).

SAP también cuenta con una plataforma de gestión central de aplicaciones, denominada Solution Manager, que ayuda a implementar, operar, monitorear y dar soporte a las Soluciones SAP. Acompañando un proyecto SAP en todas sus etapas (de acuerdo a la Metodología ASAP: Preparación, Business BluePrint, Realización, Preparación Final, Go Live y Soporte).

En el Grupo Embotelladora Andina se utiliza SAP ERP (ex R/3), Business Warehouse (BW), Portal, Solution Manager, CRM y APO (Predecesor de SCM). Dentro del ERP casi Todos los Módulos.

Embotelladora del Atlántico - Coca-Cola Página 2 / 42

Page 3: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Visión General de NetWeaver

NetWeaver es la Nueva Plataforma Tecnológica de Todos los Productos Sap (ERP, CRM, SRM, SCM, PLM, Etc.), utiliza arquitectura orientada a servicios para empresas, y tiene como objetivo incentivar la Integración de Personas, de Información y de Procesos.

NetWeaver posee varios Componentes, construidos para trabajar juntos, ser base para la ejecución de aplicaciones, facilitar su integración, la creación de nuevas aplicaciones sobre las existentes, permitir la innovación, y ahorrar dinero.

Application Server: Actúa como la Infraestructura Subyacente de tiempo de ejecución, para los demás componentes de Sap NetWeaver. Soporta ABAP y Java. Busca robustez, escalabilidad y utilización de estándares abiertos. Usa arquitectura multicapas, con clara separación entre interfases, lógica de negocios, y datos. Brinda independencia del hardware, sistema operativo y motor de base de datos.

Process Integration (antes Exchange Infrastructure): Permite la comunicación, por medio de mensajes, entre aplicaciones SAP y No SAP, inter o extra compañía. Posee un conjunto de herramientas de modelado flexible, para reemplazar código del cliente, por configuración y generación de código. Además el BPM (Business Process Management) facilita el modelado, administración, y automatización de procesos dirigidos por el usuario.

Master Data Management: Consolida, armoniza, centraliza y administra datos maestros, a través de toda la red de negocios, en ambientes IT heterogéneos (SAP y/o No SAP), garantizando la integridad de los mismos.

Sap NetWeaver Developer Studio: Es el entorno de programación para Java.

Composite Application Framework: Entorno de modelado y desarrollo para xApps o aplicaciones compuestas (basadas en servicios de otras aplicaciones).

Visual Componer: Herramienta de modelado p/ crear contenido de un Portal.

Mobile Infrastructure: Posibilita la utilización de aplicaciones en dispositivos móviles, tales como teléfonos celulares, pagers o PDAs, creando un entorno en tiempo de ejecución independiente del dispositivo en sí.

Business Warehouse o Business Intelligence: Solución de Data Warehouse y Data Mining. Integra, transforma, consolida, depura, y almacena datos, a fin de facilitar su análisis, reporte e interpretación. Obteniendo valiosa y oportuna información estratégica, que permite la planificación corporativa, mejorar la competitividad, optimizar los procesos y reaccionar rápidamente.

Enterprise Portal: Ofrece un punto de acceso centralizado a información SAP y No SAP, dentro y fuera de la empresa. Este se basa en roles y permite la personalización por parte del usuario. Incentiva la colaboración entre las personas. Está construido con tecnología Java. En un futuro, será la interfaz de usuario o capa de presentación de todos los productos SAP.

Solution Manager: Plataforma de gestión central de aplicaciones, que ayuda a implementar, operar, monitorear y dar soporte a las Soluciones SAP Business Suite.

Embotelladora del Atlántico - Coca-Cola Página 3 / 42

Page 4: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Arquitectura SAP: Cliente Servidor

Desde el punto de vista del Software, Cliente y Servidor son definidos como niveles de servicios provistos por un componente de software. Este puede consistir de un proceso o un grupo de procesos (como es en el SAP Web Application Server). Los componentes de software que utilizan el Servicio son llamados Clientes, los que los brindan, Servidores. Al mismo tiempo, los Clientes pueden también ser Proveedores de Otros Servicios específicos. En general el objetivo es Distribuir la Carga de Trabajo de una aplicación entre varios programas que cooperan entre sí.

Los siguientes niveles son utilizados en la Arquitectura SAP:

Presentación (ej.: mostrar pantallas al usuario)

Aplicación (ej.: ejecutar lógica del negocio)

Base de Datos: (ej.: administrar y organizar los datos)

Cuando se configura un sistema SAP, se debe decidir cómo se van a distribuir los procesos requeridos en el hardware disponible. Esto básicamente se puede realizar en uno o muchos niveles, dependiendo del número de capas de computadoras utilizadas.

Embotelladora del Atlántico - Coca-Cola Página 4 / 42

Page 5: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Tipos de Profesionales SAP

Se dividen en dos Grandes Grupos:

Funcionales

Personas experimentadas en algunas áreas de la empresa que han aprendido a parametrizar esos módulos o sistemas para satisfacer las necesidades de los clientes.

Ejemplos: SD, FI, CO, MM, SCM, CRM, Etc. (En EDASA esto sería el Área Usuarios)

Obs.: Existe una movida conceptual mundial, adoptada por SAP para cambiar del enfoque de Módulos al de Procesos de Negocios. (También utilizada por Coke One)

Técnicos

Los principales son:

Administradores Basis / NetWeaver

Instalación de los diferentes sistemas, gestión del sistema operativo y de la red, administración de la base de datos, de los servidores, creación de usuarios, perfiles, seguridad y temas relacionados. (En Andina esto es realizado por HP/EDS)

ABAP

Nuevos Desarrollos o Adaptaciones de sistemas originales.

Process Integration

Integración SAP & No SAP, Dentro o Fuera de la Compañía. (No se utiliza en Andina)

Portal

Su objetivo es brindar a los usuarios una Vista Única que abarca toda la empresa.

Business Warehouse

Reportes Estratégicos utilizando herramientas de Data Warehouse y Data Mining.

Embotelladora del Atlántico - Coca-Cola Página 5 / 42

Page 6: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Visión General de ABAP

Como adelantamos, Abap (Advanced Business Application Programming) es el principal Lenguaje de Programación utilizado para desarrollar las Soluciones mySAP Business Suite.

Es propiedad de SAP y nació para desarrollar su sistema R/2, luego se utilizó casi exclusivamente en SAP R/3, y hoy es la base de la mayoría del código fuente de los productos de la compañía. Otro tanto es desarrollado en Java, principalmente para Portales, Integración y Dispositivos Móviles. Incidencia menor tienen C++ y HTML.

En sus orígenes utilizó el Paradigma Estructurado y Cobol como basamentos, luego introdujo el Paradigma Orientado a Eventos, más tarde el Orientado a Objetos, y finalmente el Orientado a Servicios. Hoy todos conviven ordenadamente en él.

ABAP permite crear nuevas funcionalidades, o adaptar las estándares, a las necesidades específicas del cliente, cuando la parametrización resulta Insuficiente.

Dentro de ABAP encontramos muchas diferentes Herramientas, entre ellas:

Diccionario de Datos

Diccionario de Datos: Administración de Tablas, Índices, Vistas, Elementos de Datos, Dominios, etc.

Reportes

Reportes Básicos / Interactivos: Reportes con Salida de Texto Simple / con Drill Drown, Botones, etc.

Queries: Para Crear Reportes Elementales, Estadísticos o de Ranking, Sin Necesidad de Programar.

ALV (Abap List Viewer): Reportes con Funciones Predefinidas c/ Sumarización, Órden, Filtro y Totales.

ALV O.O. (Sap List Viewer): ALV Orientado a Objetos, Utiliza las Clases CL_SALV_* de NetWeaver.

Ingreso Masivo de Datos

Batch Inputs: Método de Ingreso Masivo de Datos Emulando una Transacción Estándar y sus Controles.

Direct Inputs: Ingreso Masivo de Datos, Directo a las Tablas, Sin Simulación de la Transacción Estándar.

BAPIs (Business Application Program Interface): Para Acceso a Datos y Comportamientos de Objetos.

IDOCs (Intermediate Document) / EDI / ALE: Intercambio de Datos Entre Sistemas (SAP o No SAP).

LSMW (Legacy System Migration Workbench): Migración de Datos desde Sistemas Legados a SAP.

Formularios

SapScript: Para Generar Salidas Impresas de Formularios, Utiliza Programa de Control y Formulario.

SmartForms: Para Generar Salidas Impresas de Formularios, Su Aparición es Posterior a SapScript.

Interactive Forms: Formularios Interactivos de NW Basados en el PDF de Adobe y Potenciados Junto a SAP.

Embotelladora del Atlántico - Coca-Cola Página 6 / 42

Page 7: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Ampliaciones

Field Exits: Salida Disponible para Colocar una Validación del Cliente sobre un Campo Estándar.

Customer Exits: Salida Ampliamente Utilizada Para Incorporar Código Fuente del Cliente en el Estándar.

User Exits: Salida para Colocar Código del Cliente en el Estándar, Principalmente en el Módulo SD.

Screen Exits: Salida en un Module Pool Estándar para Agregar Porciones de Pantalla y su Lógica.

Fórmulas: Salida para Agregar Código del Cliente en Fórmulas de Cálculo, Principalmente para SD.

Sustituciones: Salida para Reemplazar un Valor por Otro, Generalmente dentro del Módulo de Finanzas.

Validaciones: Salida para Agregar una Validación al Estándar, Principalmente Utilizadas en Finanzas.

BTEs (Business Transaction Events): Permite Incorporar una Función del Cliente al Estándar en FI.

Classics BADIs (Business Adds In): Salida Orientada a Objetos para Incorporar Código al Estándar.

Enhancement Framework: P/ NetWeaver, Incluye Salidas Source, Function Group, Class y Kernel-BADI.

Diálogos Interactivos

BDT (Business Data Toolset): Para Generar Mantenimientos en CRM y Algunas Soluciones de Industria.

Module Pools / Screen Painter: P/ Realizar Transacciones de Diálogo con el Usuario Mediante Dynpros.

Desarrollo Web

Web Transactions (IACs): Para Crear Diálogos de Usuario para Internet Utilizando Abap y HTML.

ITS Flow Logic: Modelo que Permite Desarrollar Aplicaciones Web en HTML Tomando Datos desde SAP.

BSP (Business Server Pages): Modelo Basado en Páginas para el Diseño e Implementación Web.

Web Dynpro for Abap: Para Desarrollar Transacciones de Diálogo en NW para ser Utilizadas en Internet.

Web Services: Para Proveer y Consumir Servicios Web en NW (Soporte para la Orientación a Servicios).

Orientación a Objetos

Object Oriented Programming: Utilización de Clases, Objetos, Herencia, Polimorfismo, Interfases, Etc.

Shared Memory Objects: Instancias de Objetos, que pueden ser Almacenados en Memoria Compartida.

Persistent Objects: Abstracción O.O. de Tablas de la BD, su Objetivo es Aislar el Acceso a los Datos.

Otros

Base de Datos Lógicas: Encapsula Criterios de Selección y Acceso a Datos, Principalmente Para HR.

Desktop Office Integration (DOI): Técnica O. a Objetos p/ Comunicarse con Aplicaciones de Escritorio.

Funciones / RFC (Remote Function Call): Procedimiento con un Objetivo y una Interfase Predefinida.

Workflow: Para Realizar Seguimiento e Integración de Funcionalidades en Procesos de Negocios.

Observación: En este WorkShop Introductorio de Abap, vamos a ver Diccionario de Datos, Reportes Básicos, Interactivos, ALVs, llamados a Funciones y a Métodos de Clases.

Embotelladora del Atlántico - Coca-Cola Página 7 / 42

Page 8: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Ambientes: Desarrollo, Calidad, Producción.

Dependiendo del tamaño de la instalación se utilizarán varios sistemas que servirán a distintos propósitos, sin embargo, aun incluso en pequeñas instalaciones, un segundo sistema es casi un imperativo, puesto que no es una buena práctica, ni es recomendable por SAP, realizar los trabajos desarrollo y parametrización en el sistema productivo.

Normalmente el desarrollo y la parametrización no se llevan a cabo directamente en los sistemas productivos, ya que el riesgo de tener problemas es bastante alto; un error en un programa, una modificación en la estructura de una tabla, o una incorrecta parametrización pueden causar la indisponibilidad total del sistema.

Sin embargo, donde hay varios sistemas disponibles, los desarrolladores pueden aislar sus trabajos del entorno productivo, y cuando el trabajo de desarrollo se ha completado y probado, los objetos nuevos o modificados pueden ser transportados.

Los ambientes más habituales pueden ser:

Sistema de Desarrollo

Es aquel sistema en el cual se realizan labores de desarrollo. Normalmente, se lleva a cabo en objetos propios (solo permite la creación de objetos cuyos nombres comienzan con las letras Z o Y), además se realizan trabajos de parametrización, adaptación de estándares (exits), y como última alternativa, modificaciones de objetos originales de SAP, que sólo se podrán realizar con códigos de autorizaciones especiales, en todos estos casos (al menos que sean objetos locales) se generaran órdenes de transportes.

Sistema de Prueba o Calidad

Los sistemas de pruebas, más conocidos como de Control de Calidad, son utilizados para verificar los nuevos desarrollos o configuraciones del sistema, son útiles para validar los desarrollos con datos reales antes de su transporte a productivo.

Sistema Productivo

Es el sistema en el que los usuarios finales realizan la gestión diaria del negocio.

Embotelladora del Atlántico - Coca-Cola Página 8 / 42

Page 9: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Mandantes

Un mandante se define como una unidad independiente desde el punto de vista organizativo. Por ejemplo podría ser un grupo de empresas, una unidad comercial, etc. O también es habitual que se utilicen diferentes mandantes en Desarrollo para Programación y Parametrización. SAP incluye 3 mandantes estándares.

Mandante 000, contiene una estructura orgánica simple de una compañía de prueba y parámetros para todas las aplicaciones con parametrizaciones independientes de mandantes.

Mandante 001, es una copia del mandante 000, incluso con la compañía de prueba, si se configura o parametriza este mandante, sus parámetros serán dependientes de mandantes. Está reservado para las actividades de preparar un sistema para el entorno de producción. Normalmente es utilizado como base para la creación de nuevos mandantes.

Mandante 066, está reservado para el acceso de Sap a los sistemas de sus usuarios.

Dependencia e Independencia de Mandante

* La Información que es independiente de mandante es válida para todos ellos.

* La dependiente de mandante, solo está disponible en el mandante específico.

Los datos dependientes de mandantes son tratados en forma especial, cuando un usuario se conecta a una sesión de SAP en un mandante específico, sólo puede ver los datos de ese mandante o los que son independientes de mandante, para ello las tablas deben tener un campo de mandante (conocido como MANDT).

Órdenes de Transporte

Se generan ante una modificación o nuevo desarrollo, nuevas parametrizaciones o modificaciones de estándares, y es una lista que contiene los objetos que van a ser transportados.

Una orden de modificación esta compuesta por una o varias tareas.

Tarea es una lista de objetos creados o modificados por un usuario, las tareas pueden ser de desarrollo, corrección o de reparación. Las diferentes tareas pueden pertenecer a varios usuarios pero la orden que los contiene solo a uno (responsable o titular de la orden).

Cuando todos los cambios han sido realizados, y las tareas liberadas, la orden puede ser liberada. Las órdenes de modificación son liberadas al sistema de transporte que se encarga de exportar los objetos y guarda un registro del proceso. Cuando una orden se libera se crea un Log de transporte en forma automática. En Andina los Transportes se solicitan por Lotus Notes.

Gestión de Versiones

Con la gestión de versiones, los usuarios pueden comprobar la versión actual de un objeto y posibilita a los desarrolladores la visualización o restauración de versiones anteriores.

Embotelladora del Atlántico - Coca-Cola Página 9 / 42

Page 10: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Ingreso a SAP ERP

Utilizamos el programa SAPlogon, que nos abre una pantalla similar a esta:

Elegimos el sistema, y al dar doble clic o presionar logon aparecerá la siguiente ventana:

Antes de entrar debe conocer el mandante, su nombre de usuario y su clave de acceso. Si desea trabajar en un idioma distinto al predefinido para su usuario, debe introducir el indicador pertinente. Si en el campo Mandante ya hay un valor introducido, puede aceptarlo o sobrescribirlo. Indique su usuario SAP en el campo Usuario y su password en el campo Clave de acceso. Al escribir su clave de acceso sólo se mueve el cursor, los asteriscos (*) no.

Por motivos de seguridad, su clave de acceso no puede visualizarse.

Embotelladora del Atlántico - Coca-Cola Página 10 / 42

Page 11: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

ABAP Workbench

El ABAP Workbench incluye un grupo de herramientas y utilidades para facilitar y realizar todas las tareas relacionadas con el desarrollo y mantenimiento del sistema SAP.

Dentro de sus principales herramientas y funciones se destacan:

Diccionario ABAP (Transacción SE11)

Definir, mantener y almacenar el diccionario de datos de SAP ERP. Almacena todos los objetos, tablas, elementos de datos, dominios, vistas, documentación, información y ayuda.

Navegador de Objetos (SE80)

Gestionar y organizar los objetos de desarrollo de forma jerárquica, permitiendo un desplazamiento fácil entre los mismos y el entorno de desarrollo (otras herramientas).

Editor ABAP (SE38)

Crear y mantener los programas Abap.

Generador de Funciones (SE37)

Definir y mantener módulos de función (rutinas de propósito general).

Generador de Clases (SE24)

Definir y mantener clases (programación orientada a objetos).

Visualizador de Datos (SE16)

Permite acceder al contenido de las tablas transparentes (de base de datos) de SAP.

Organizador de Transportes (SE09)

Lleva a cabo y gestiona los transportes de los objetos entre los diferentes sistemas SAP.

Embotelladora del Atlántico - Coca-Cola Página 11 / 42

Page 12: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Diccionario de Datos ABAP

El Diccionario de Datos (SE11), es una de las herramientas del entorno de desarrollo Abap más utilizadas, es un nivel de abstracción entre SAP y la Base de Datos subyacente, para independizar las operaciones sobre tablas, vistas, índices, campos, etc. de esta.

Características:

Almacena y administra definiciones de datos.

Los cambios que en él se realizan surten efecto inmediato en todo el sistema SAP por medio del mecanismo de activación.

Está completamente integrado con el entorno de desarrollo Abap.

Los objetos básicos para la definición de datos en el diccionario de datos son Tablas, Dominios y Elementos de Datos. El Dominio se utiliza para la definición técnica de un campo (tipo de dato, longitud, etc.) y con el Elemento de Datos se establece la definición semántica (descripción corta, ayuda, etc.).

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico A

Creación de una Tabla

Definición de sus Atributos y Campos

Creación de un Elemento de Datos

Creación de un Dominio

Definición de Opciones Técnicas

Definición de Categoría de Ampliación

Generar Mantenimiento Automático

Activación de la Tabla

Probar Mantenimiento

Observación: Los ejercicios tienen por finalidad practicar y asimilar lo aprendido, no reflejan necesariamente problemas ni soluciones que encontraríamos o utilizaríamos en nuestro día a día.

Embotelladora del Atlántico - Coca-Cola Página 12 / 42

Page 13: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Reportes ABAP

Fundamentos de la Programación de Reportes

Un reporte consiste en una serie de instrucciones ABAP, cada una de las cuales empieza por una palabra clave y termina con un punto. Tipos de palabras claves:

Declarativas

Para declarar los datos que vamos a utilizar a lo largo del programa.Por ejemplo: DATA, TABLES.

Eventos

Especifica un evento, es el punto donde ABAP ejecuta un cierto proceso.Por ejemplo: START-OF-SELECTION, TOP-OF-PAGE.

Control

Sentencias de control de flujo de programa.Por ejemplo: IF, WHILE.

Operativas

Realizan funciones propias según el tipo de palabra clave.Por ejemplo: WRITE, MOVE.

Existen dos formas de utilizar comentarios en un reporte.

Con un asterisco (*) en la primera columna de una línea. Con comillas (“) en cualquier otra parte de una línea.

Estructura General de un Reporte Simple

- REPORT <nombre>. Nombre programa

- TABLES: Tablas que se utilizan

- DATA: Variables internas

- INITIALIZATION. Inicializar valores en la pantalla de selección <Sentencias>- TOP-OF-PAGE. Por inicio de página ejecutar <Sentencias>- END-OF-PAGE. Por fin de página ejecutar <Sentencias>- START-OF-SELECTION. Por inicio de programa ejecutar <Sentencias>- END-OF-SELECTION. Por fin de programa ejecutar <Sentencias>

La secuencia de Eventos en el código no es relevante y se ejecutarán según corresponda.

Embotelladora del Atlántico - Coca-Cola Página 13 / 42

Page 14: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Entorno de Programación (SE80)

La Transacción SE80 da inicio al ‘Object Navigator’, desde este podremos realizar gran parte de nuestro trabajo diario con Abap, utilizando diversas herramientas en forma transparente según el tipo de objeto seleccionado y pudiendo navegar entre los mismos.

Verificando, Activando y Ejecutando un Programa

Presionando ‘Verificar’ o Ctrl + F2 se va a realizar un chequeo de sintaxis del programa, indicándonos, si correspondiera, los errores encontrados.

Con el botón ‘Activar’ o Ctrl + F3 vamos a hacer que nuestra versión del programa esté disponible para todos los usuarios del sistema. El Activar realiza previamente un control sintáctico. En caso de ocurrir errores en el mismo, estos se informarán, y no se activará el objeto.

Presionando ‘Directo’ o F8 vamos a ejecutar la versión activa del programa.

Embotelladora del Atlántico - Coca-Cola Página 14 / 42

Verificar Activar Directo

Page 15: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Declarando Datos y Asignando Valores

Tipos de Datos

Los tipos de datos que se pueden utilizar en ABAP son:

Embotelladora del Atlántico - Coca-Cola Página 15 / 42

Page 16: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Declaración de Variables

Sentencia DATA

Las Variables de un programa se declaran con la sentencia DATA.

Si no se indica lo contrario las variables serán del tipo carácter (Texto) y la longitud 1.

Ejemplo:DATA LV_VAR_CAR.DATA LV_VAR_CAR(8). Creará una variable texto de longitud 8.

Parámetro TYPE

Con él podemos utilizar otros tipos de datos.

Ejemplo:DATA LV_NUM_CAR(5) TYPE N.DATA LV_NUMERO(2) TYPE P.DATA LV_FECHA_LIMITE TYPE D.

Parámetro LIKE

Con el parámetro LIKE podemos declarar una variable con los mismos atributos de longitud y tipo que una variable de base de datos u otra previamente definida.

Ejemplo: DATA LV_ACREEDOR LIKE LFA1-LIFNR.

Parámetro VALUE

Con el parámetro VALUE inicializamos la variable con un valor distinto al por defecto.

Ejemplo: DATA LV_CONTADOR TYPE P VALUE 1.

Estructuras

Una estructura o registro de datos es un conjunto de campos relacionados lógicamente.

Ejemplo:DATA: BEGIN OF LE_PROV,

LIFNR LIKE LFA1-LIFNR,NAME1 LIKE LFA1-NAME1,CIUDAD(20) VALUE ‘Córdoba’,FECHA TYPE D,

END OF LE_PROV.

Posteriormente el acceso a los campos del registro de datos será:WRITE: LE_PROV-NAME1,

LE_PROV-FECHA.

Embotelladora del Atlántico - Coca-Cola Página 16 / 42

Page 17: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

INCLUDE STRUCTURE

Además podemos utilizar la misma estructura que una tabla transparente o de base de datos. Para ello utilizaremos la instrucción INCLUDE STRUCTURE.

Ejemplo:

DATA BEGIN OF LE_SOCIEDADES.INCLUDE STRUCTURE T001.

DATA END OF LE_SOCIEDADES.

Tablas Internas

También usaremos la instrucción DATA para declarar tablas internas. Estas a diferencia de las de base de datos (o transparentes) se guardarán en memoria y no en el diccionario de datos.

Ejemplo:

DATA LT_PROV LIKE STANDARD TABLE OF LE_PROV.

Variables del Sistema

ABAP tiene algunas variables internas que se van actualizando automáticamente y que pueden ser utilizadas en los programas. Las más comunes son SY-SUBRC que indica el resultado de una operación, 0 si fue exitosa u otro valor para los casos erróneos, SY-UNAME almacena el nombre del usuario, SY-DATUM la fecha del sistema y SY-UZEIT la hora.

Visualizando la Estructura SYST (con SE11) podemos observarlas a todas ellas:

Embotelladora del Atlántico - Coca-Cola Página 17 / 42

Page 18: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Asignación de Valores

Existen diversas formas de asignar valores a una variable en ABAP.

Asignación Directa

Para transportar el contenido de var1 al campo var2 podemos utilizar: <var2> = <var1>.

Ejemplo: LV_VAR1 = LV_VAR2.

Sentencia MOVE

Podemos sustituir esta última instrucción por: MOVE <var1> TO <var2>.

Ejemplo: MOVE LV_VAR1 TO LV_VAR2.

Sentencia WRITE

Esta sentencia asigna el contenido formateado de la variable de origen a la de destino.

Ejemplo: DATA: lv_date_long TYPE c LENGTH 10, lv_date_mask TYPE c LENGTH 8. WRITE sy-datum TO: date_long,

date_mask DD/MM/YY.

Observación: Esta instrucción también se utiliza (sin el TO) para dar salida por pantalla.

Sentencia MOVE-CORRESPONDING

Podremos conseguir una asignación más potente con MOVE-CORRESPONDING.MOVE-CORRESPONDING <reg1> TO <reg2>.Esta instrucción mueve de reg1 a reg2 aquellos campos que tengan idéntico nombre.

Ejemplo: MOVE-CORRESPONDING ge_struc1 TO ge_struc2.

Acceso a Sub Cadenas

Es posible referenciar o asignar valores a una parte de la variable utilizando el offset.VARIABLE+offset(longitud)

Ejemplo: DATA: LV_VAR1(15) VALUE ‘EDASA Coca Cola’,LV_VAR2(15) VALUE ‘Hola’.MOVE LV_VAR1+0(5) TO LV_VAR2+5(5).WRITE LV_VAR2.

Resultado: Hola EDASA

Sentencia CLEAR

Para inicializar las variables utilizamos la sentencia: CLEAR <campo>. Ej.: CLEAR LV1.CLEAR inicializa al valor que tiene por defecto sin tener en cuenta las cláusulas VALUE.

Embotelladora del Atlántico - Coca-Cola Página 18 / 42

Page 19: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Operaciones Aritméticas en ABAP

Las principales operaciones aritméticas se pueden implementar directamente con:

Operador Función / División

+ Suma DIV Entero de una División

- Resta MOD Resto de una División

* Multiplicación ** Potencia

Ejemplos: A = 100 + 25. B = 4 * 3. C = 11 MOD 5. D = 49 / 7.

Lógica Básica

Formulando Condiciones

Sentencia IF

Como en todos los lenguajes estructurados, disponemos de una serie de instrucciones para subdividir el programa en bloques lógicos se ejecutarán cuando se cumpla una cierta condición.

Para introducir una condición utilizaremos la sentencia IF ... ELSE ... ENDIF que podrá aparecer en distintas modalidades.

Posibles Sintaxis:

IF <Cond.>. IF <Cond.>. IF <Cond.>.... … …ENDIF. ELSE. ELSEIF<Cond.>.

… …ENDIF. ELSE.

…ENDIF.

Ejemplo:

DATA time TYPE t. time = sy-uzeit.

IF time < '120000'. WRITE: / time, 'AM' .

ELSEIF time > '120000' AND time < '240000'. time = time - 12 * 3600. WRITE: / time, 'PM' .

ELSE. WRITE / 'High Noon'.

ENDIF.

Embotelladora del Atlántico - Coca-Cola Página 19 / 42

Page 20: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Operadores para Condiciones

En las condiciones utilizamos los clásicos operadores:

AND OR Igual = , EQ Distinto <> , NE Mayor > , GT Menor < , LT Mayor o igual >= , GE Menor o igual <= , LE

Sentencia CASE

Se utiliza para ejecutar diferentes instrucciones en función del contenido de un campo.

CASE <campo>.WHEN <valor1>.

....WHEN <valor2>.

....:

WHEN OTHERS.....

ENDCASE.

Ejemplo:

CASE sy-ucomm. WHEN 'BACK'.

LEAVE TO SCREEN 100. WHEN 'CANCEL'.

LEAVE SCREEN. WHEN 'EXIT'.

LEAVE PROGRAM. WHEN OTHERS.

MESSAGE '...' TYPE 'E'. ENDCASE.

Embotelladora del Atlántico - Coca-Cola Página 20 / 42

Page 21: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Proceso de Bucles

Sentencia DO

DO permite ejecutar un bloque de instrucciones tantas veces como se especifique.

DO <n> TIMES....

ENDDO.

En la variable del sistema SY-INDEX tendremos un contador del nº de repeticiones.

Es posible anidar DO’s. En ese caso SY-INDEX hará referencia al bucle en proceso.

Ejemplo:

DATA square TYPE i.

DO 10 TIMES.square = sy-index ** 2. WRITE: / sy-index, square.

ENDDO.

Sentencia WHILE

Permite ejecutar un bloque de instrucciones mientras se cumpla una condición.

WHILE <cond>....

ENDWHILE.

De la misma forma que la instrucción DO, WHILE permite anidar bucles.

Ejemplo:

DATA text TYPE string VALUE `One Two Three`.

WHILE sy-subrc = 0.REPLACE space WITH '-' INTO text.

ENDWHILE.

Embotelladora del Atlántico - Coca-Cola Página 21 / 42

Page 22: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Sentencias de Control

Se utilizan para terminar el procesamiento de un bucle o proceso.

Sentencia CHECK

La instrucción CHECK <cond>. Realiza un chequeo de <cond> de forma que si dentro de un bucle la condición es falsa, saltará todas las instrucciones que siguen al CHECK e iniciará la siguiente pasada al bucle. Fuera de un bucle, si la condición es falsa, saltará todas las instrucciones que siguen hasta el final del evento, rutina o programa en proceso.

Ejemplo:

DATA remainder TYPE i.

DO 20 TIMES. remainder = sy-index MOD 2. CHECK remainder = 0. WRITE / sy-index.

ENDDO.

Sentencia EXIT

La instrucción EXIT. Dentro de un bucle saldrá del mismo y fuera saldrá del programa. Si la instrucción EXIT está dentro de varios bucles anidados, únicamente saldrá del bucle en proceso.

Ejemplo:

DATA limit TYPE i VALUE 10.

DO. IF sy-index > limit.

EXIT. ENDIF. WRITE / sy-index.

ENDDO.

Sentencia STOP

Con la instrucción STOP finalizaremos el reporte (programa) en ejecución, y antes se ejecutará el evento END-OF-SELECTION. Esta se puede utilizar dentro de los bloques AT SELECTION-SCREEN, START-OF-SELECTION y GET.

Embotelladora del Atlántico - Coca-Cola Página 22 / 42

Page 23: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Introducción a las Sentencias de Salida en Reportes

Veremos un resumen de las sentencias de salida básicas de reportes.

Sentencia WRITE

Como hemos comentado, para mostrar por pantalla un valor utilizaremos WRITE.

WRITE /(<offset>)(<long>) ‘<datos a visualizar>‘.

Con la Barra / indicaremos si queremos saltar una línea o no antes de imprimir (opcional).

Con el Offset indicaremos la columna donde empezará la impresión (opcional).

Con Long indicaremos la longitud de los valores a visualizar (opcional).

Otras opciones son imprimir colores, íconos, intensidades, realizar un hotspot, etc.Estas alternativas de formato pueden aplicarse también con la sentencia FORMAT.

Ejemplo:

DATA: lv_text TYPE string VALUE '0123456789ABCDEF', lv_col TYPE i VALUE 25, lv_len TYPE i VALUE 5.

WRITE lv_text. WRITE /5(10) lv_text. WRITE AT lv_col(lv_len) lv_text.

Observación: Los dos puntos luego de la sentencia DATA (o cualquier otra instrucción), indican que la sentencia se aplica a todos los argumentos que siguen separados por coma.

Sentencia ULINE

Imprime una línea de Subrayados. Tendrá las mismas propiedades que el WRITE.

ULINE /(<offset>)(<long>). Ejemplo: ULINE.

Sentencia SKIP

Para saltar una o varias líneas utilizaremos SKIP. Por defecto el salto será de una línea.

SKIP <n>. Ejemplo: SKIP 2.

Sentencia NEW-PAGE

Se utiliza para saltar una página. Es especialmente útil si el reporte se va a imprimir.

Embotelladora del Atlántico - Coca-Cola Página 23 / 42

Page 24: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Pantallas de Selección

Son pantallas automáticamente generadas que construimos por medio de instrucciones Abap (PARAMETERS, SELECT-OPTIONS, SELECTION-SCREEN, etc.). El usuario las utiliza para especificar ciertos valores o filtros que luego usará el programa en su ejecución. El sistema es el encargado de transferir los valores ingresados a las variables correspondientes.

Sentencia PARAMETERS

Permite introducir un valor simple.

PARAMETERS: <var1>LIKE <tipo>DEFAULT <valor> Igual que el VALUE.OBLIGATORY. Obliga a introducir algún valor.

Por menú con las opciones, ‘Pasar a’, ‘Elementos de texto’ y ‘Textos de selección’ se podrán actualizar los títulos que aparecen junto a los parámetros de entrada definidos.

Ejemplo:

PARAMETERS: p_bukrs LIKE t001-bukrs OBLIGATORY.

Sentencia SELECT-OPTIONS

Para ingreso de valores múltiples, rangos, exclusiones, etc.Tiene por defecto la forma Desde-Hasta.

SELECT-OPTIONS: <var2>FOR fDEFAULT <valor> Igual que el VALUE.OBLIGATORY Obliga a introducir algún valor.NO INTERVALS Solo aparece el campo Desde.

Los nombres de estas variables no pueden ser superiores a 8 caracteres.

Ejemplo:

SELECT-OPTIONS S_WERKS FOR VIAUFKST-WERKS OBLIGATORY.

Sentencia SELECTION-SCREEN

Sirve para colocar una línea separación, marcos, botones, comentarios, etc.

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico B

Embotelladora del Atlántico - Coca-Cola Página 24 / 42

Page 25: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Tablas Internas

Si deseamos guardar una colección de registros de datos con la misma estructura en memoria y poder realizar operaciones diversas con este conjunto de información, utilizaremos tablas internas (en otros entornos suelen denominarse matrices).

Declarar Tablas Internas - Sentencia DATA

Sintaxis:

DATA <intab> { {TYPE tabkind OF [REF TO] type}| {LIKE tabkind OF dobj} }[WITH HEADER LINE].

Ejemplos:

DATA: LT_SPFLI TYPE STANDARD TABLE OF SPFLI,LS_SPFLI LIKE LINE OF LT_SPFLI.

Aquí definimos una tabla interna LT_SPFLI de tipo estándar e idéntica a la tabla transparente o de diccionario (que existe en la BD) SPFLI. También una estructura LS_SPFLI con los mismos campos, que posteriormente utilizaremos conjuntamente con la tabla interna.

DATA: BEGIN OF GE_T005U,BLAND TYPE T005U-BLAND, " Región o ProvinciaBEZEI TYPE T005U-BEZEI, " Denominación Provincia

END OF GE_T005U.

DATA GT_T005U LIKE STANDARD TABLE OF GE_T005U.

Ahora definimos una estructura (a veces denominada área de trabajo) para contener un código y una descripción de una provincia, y en base a esta, una tabla interna de provincias.

Algunas Observaciones:

Las letras L o G con que comienzan los nombres de las diferentes variables, estructuras y tablas internas, son una convención, de uso más o menos generalizado, que indica si son Locales (válidas dentro de una rutina) o Globales (para todo el programa).

Con el parámetro ‘WITH HEADER LINE’ nos ahorramos de definir explícitamente el área de trabajo, pero esto no es aplicable dentro de clases (Orientación a Objetos).

Esta sentencia, como muchas otras vistas, tiene más parámetros posibles, vemos aquí los mayormente utilizados a fin de no complicar innecesariamente el workshop.

También existen varias diversas otras formas de declarar tablas internas en Abap, que actualmente son obsoletas, por ej.: todas aquellas que utilicen el parámetro OCCURS ya no deberían utilizarse (aunque por compatibilidad hacia atrás, aún se soportan).

Embotelladora del Atlántico - Coca-Cola Página 25 / 42

Page 26: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Poblar una Tabla Interna - Sentencia APPEND

Añade al final de una tabla interna el contenido del área de trabajo, de otra tabla interna con idéntica estructura, o una línea en blanco, a nuestra tabla interna. Su sintaxis general es:

APPEND {wa}| {INITIAL LINE}| {LINES OF jtab [FROM idx1] [TO idx2]}

TO <intab> [SORTED BY comp].

Ejemplos:

APPEND ge_seats TO gt_seats_tab SORTED BY seatsfree.APPEND INITIAL LINE TO gt_itab.APPEND GE_WA TO GT_TAB.

Poblar una Tabla Interna - Sentencia INSERT

Esta sentencia adiciona una o más líneas en una posición específica de una tabla interna.

INSERT {wa} | {INITIAL LINE} | {LINES OF jtab [FROM idx1] [TO idx2]}.

INTO {TABLE intab} | {intab [INDEX idx]}.

Ejemplo:

   INSERT ge_conexion INTO TABLE gt_conexion.

Poblar una Tabla Interna - Sentencia COLLECT

Añade o suma el contenido del área de trabajo a la tabla interna. Sumará los campos numéricos si existe una línea en la tabla con idéntica clave a la contenida en el área de trabajo.

COLLECT wa INTO <intab>.

Ejemplo:

COLLECT ge_seats INTO gt_seats_tab.

Observación: Se puede sustituir por las instrucciones READ e INSERT o MODIFY.

Embotelladora del Atlántico - Coca-Cola Página 26 / 42

Page 27: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Poblar una Tabla Interna - Sentencia SELECT

Podemos llenar una tabla interna con el contenido de una tabla de base de datos. Siempre que la tabla interna tenga la misma estructura que la tabla de base de datos.

SELECT * FROM <tab> INTO TABLE <intab>.

Con INTO CORRESPONDING FIELDS OF TABLE colocamos los valores leídos en los campos correspondientes de la tabla interna, sin necesidad de contar con estructuras idénticas.

Ejemplos:

SELECT CARRID CONNID FLDATE PLANETYPEINTO TABLE GT_VUELOSFROM SFLIGHTWHERE CARRID EQ P_CARRIDAND CONNID IN S_CONNIDAND FLDATE IN S_FLDATE.

SELECT carrid connid cityfrom cityto FROM spfli INTO CORRESPONDING FIELDS OF gt_table.

Observación: Más adelante vamos a ver en mayor detalle la Sentencia SELECT.

Ordenar una Tabla Interna - Sentencia SORT

Para clasificar una tabla interna utilizamos SORT, pudiendo especificar por cuales campos.

SORT <intab> [BY <field 1> ....<field n>].

Si no se indica lo contrario la ordenación por defecto es ascendente.

SORT ... ASCENDING. o DESCENDING.

Ejemplos:

SORT GT BY CAMPO1.SORT GT_DATOS BY DATO2 DESCENDING DATO3 ASCENDING.

Embotelladora del Atlántico - Coca-Cola Página 27 / 42

Page 28: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Procesar una Tabla Interna - Sentencia LOOP

Podemos recorrer una tabla interna con la instrucción LOOP ... ENDLOOP.

LOOP AT <intab> ( WHERE <cond> )....ENDLOOP.

En cada iteración coloca la línea de la TI que se está procesando en la cabecera.

Si nuestra tabla interna no tiene cabecera, debemos indicarle que área de trabajo vamos a utilizar para ir colocando el contenido de la línea leída en cada iteración.

LOOP AT <intab> ( WHERE <cond> ) INTO <wa>....ENDLOOP.

Dentro del LOOP, SY-TABIX contiene el índice de la entrada que está procesando.

Además podemos restringir el proceso de una tabla con una condición WHERE.

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

Observación: En general un SY-SUBRC <> 0 indica que la última instrucción no fue exitosa.

Ejemplo:

LOOP AT GT_TAB WHERE CAMPO1 > 10 INTO GE_WA....

ENDLOOP.

Leer Entradas de una Tabla Interna - Sentencia READ TABLE

Podemos buscar un registro concreto en una tabla sin necesidad de recorrerla.

READ TABLE lee una línea desde una tabla interna. Podemos especificar cual, indicando: la clave (explícitamente o por su área de trabajo), una condición clave libre o el número de registro.

READ TABLE <intab> { FROM wa } | { WITH KEY comp1 = dobj1 comp2 = dobj2 }| { index }. | INTO ge_wa.

Recordemos que si la búsqueda ha sido positiva SY-SUBRC valdrá cero, sino <> 0.

Ejemplos: READ TABLE GT WITH KEY AUFNR = ‘1’ INTO GE.READ TABLE GT_DATOS INDEX 10 INTO GE_DATOS.

Embotelladora del Atlántico - Coca-Cola Página 28 / 42

Page 29: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Modificar Líneas de una Tabla Interna - Sentencia MODIFY

La sentencia MODIFY cambia el contenido de una o varias líneas que pueden especificarse con la clave de la tabla interna o su índice. Su sintaxis general es:

MODIFY { {TABLE intab }|{ intab INDEX idx} FROM wa. | intab FROM wa WHERE log_exp }.

Dentro de un LOOP, la cláusula INDEX es opcional (se modifica la línea actual).

Ejemplos: MODIFY GT_VIAUFKST FROM GE_VIAUFKST.MODIFY gt_scarr_tab INDEX 5 FROM ge_scarr_wa.

Eliminar Líneas de una Tabla Interna - Sentencia DELETE

Esta instrucción borra una o más filas, especificado la clave o índice de tabla interna.

También puede eliminar las filas vecinas duplicadas (idénticas o con campos iguales).

DELETE { {TABLE intab table_key} | {intab [INDEX idx]}. | intab [FROM idx1] [TO idx2] [WHERE log_exp]. | ADJACENT DUPLICATES FROM intab [COMPARING { comp1 comp2 ...}|{ALL FIELDS}]... . }.

Ejemplos:

DELETE ADJACENT DUPLICATES FROM GT_TABLA.DELETE GT_MITABLA FROM 1 TO 10.DELETE gt_otra_tabla INDEX 7.

Limpiar una Tabla Interna - Sentencias CLEAR y REFRESH

Para inicializar el área de trabajo o línea de cabecera utilizamos.

CLEAR <wa>.

Ejemplo:

CLEAR GE_ESTRUCTURA.

Para eliminar el contenido de una tabla interna usamos.

REFRESH <intab>.

Ejemplo:

REFRESH GT_TABLA.

Embotelladora del Atlántico - Coca-Cola Página 29 / 42

Page 30: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Niveles de Ruptura - Sentencias AT y SUM

Al recorrer una tabla interna con un LOOP, podemos ejecutar una serie de instrucciones, según ciertos eventos que se den en sus registros o el contenido de los mismos.

LOOP AT <intab> [INTO WA].

[AT FIRST. => En la primer línea de la tabla interna...

ENDAT.]…[AT NEW comp1. => Luego de que el campo cambia de valor

...ENDAT.…AT END OF comp1. => Antes de que el campo cambie de valor

...ENDAT.]…[AT LAST. => En la última línea de la tabla interna

SUM. => Sumariza valores numéricos...

ENDAT.]

ENDLOOP.

Ejemplo:

LOOP AT sflight_tab INTO sflight_wa. AT NEW connid.

WRITE: / sflight_wa-carrid, sflight_wa-connid. ENDAT. WRITE: / sflight_wa-fldate, sflight_wa-seatsocc. AT END OF connid.

SUM. WRITE: / 'Sum', sflight_wa-seatsocc.

ENDAT. AT END OF carrid.

SUM. WRITE: / 'Carrier Sum', sflight_wa-seatsocc.

ENDAT. AT LAST.

SUM. WRITE: / 'Overall Sum', sflight_wa-seatsocc.

ENDAT. ENDLOOP.

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico C

Embotelladora del Atlántico - Coca-Cola Página 30 / 42

Page 31: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Subrutinas

Las subrutinas son porciones de código que se utilizan para realizar una tarea repetitiva, compartir cierta lógica, reutilizar código, centralizar cambios, modularizar, hacer más entendible el código fuente de los programas, etc.

Básicamente existen 4 tipos de Subrutinas o Subprogramas.

Internas: El Subprograma y la llamada a éste están en el mismo programa.

Externas: El Subprograma y la llamada a éste están en programas distintos.

Módulos de Función

Métodos de una Clase (Programación Orientada a Objetos)

Embotelladora del Atlántico - Coca-Cola Página 31 / 42

Page 32: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Subrutinas Internas

Llamada a un procedimiento o subprograma.

PERFORM <modulo>.

FORM <modulo>.... Subprograma.

ENDFORM.

El programa principal y el procedimiento se podrán comunicar mediante parámetros.

...PERFORM <modulo> USING var1 var2 ......

FORM <modulo> USING var1 var2 ......ENDFORM.

Los parámetros pueden ser pasados por valor o por referencia. Por defecto serán por referencia. Si queremos utilizar parámetros por valor, la cabecera del módulo será:

FORM <modulo> USING VALUE(var1)....ENDFORM.

Tanto las variables como las tablas internas definidas al inicio del reporte, son globales a todas las subrutinas y por tanto accesibles en cualquier momento (no es necesario pasarlas como parámetros, aunque sí aconsejable).

Dentro de cada subrutina es posible declarar datos que sólo serán visibles dentro del módulo donde esté declarado. ABAP creará un espacio para esas variables que será liberado al salir del módulo. Por tanto se podrán utilizar variables con el mismo nombre que variables globales, aunque el valor que tengan será siempre el local en el módulo.

Ejemplo:

DATA: A1 TYPE C, A2 TYPE I, A3 TYPE C, A4 TYPE I.…PERFORM TEST USING A1 A2 CHANGING A3 A4.…

FORM TEST USING P1 TYPE CP2 TYPE I

CHANGING VALUE(P3) TYPE CVALUE(P4) TYPE I.

…ENDFORM.

Embotelladora del Atlántico - Coca-Cola Página 32 / 42

Page 33: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Subrutinas Externas

Si queremos llamar a una subrutina que está en un programa distinto utilizamos:

PERFORM <sub>(<programa>) USING ...

También existe la posibilidad de añadir porciones de código del tipo include (serían como subprogramas) con la muy utilizada instrucción:

INCLUDE <report>.

La llamada a una subrutina que esté dentro de un include, que fue incluido en el programa principal, es totalmente idéntica a una de subrutina interna.

Si ya lo hicimos en el principal, en el include no utilizaremos la sentencia REPORT.

Es bastante común definir los siguientes includes:

TOP: Para definiciones globales y pantalla de selección

FORM: Para subrutinas

CLASS: Para clases locales (para Programación Orientada Objetos)

PAI: Process After Input (para Module Pools)

PBO: Process Before Output (para Module Pools)

Como nombre todos deberían tener el del programa principal y luego estas letras.

También es posible declarar includes que se utilicen en múltiples programas.

Ejemplo:

En el Programa Principal tendríamos la Llamada a la Rutina:

DATA: A1 TYPE C, A2 TYPE I, A3 TYPE C, A4 TYPE I.…PERFORM TEST USING A1 A2 CHANGING A3 A4.…

Y en el Include FORM estaría la Definición de la Rutina.

FORM TEST USING P1 TYPE CP2 TYPE I

CHANGING VALUE(P3) TYPE CVALUE(P4) TYPE I.

…ENDFORM.

Embotelladora del Atlántico - Coca-Cola Página 33 / 42

Page 34: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Módulos de Función

Las funciones son módulos especiales guardados en una librería central, y asociados en Grupos de Funciones. Se crean, modifican o visualizan por la SE37. Se caracterizan por una interface, un objetivo bien definido, y porque realizan tratamiento de excepciones o errores.

La interface bien definida facilita el paso de parámetros de entrada y salida.

CALL FUNCTION <funcion>.EXPORTING <par_e> = <valor>

...IMPORTING <par_s> = <valor_ret>

...TABLES <tab_func> = <tab_prog>

...EXCEPTIONS <excep> = <valor>

...

Donde en el EXPORTING especificamos los parámetros de entrada, en el IMPORTING (opcional) el resultado o retorno de la función, en TABLES (opcional) las tablas que se utilizan como parámetros de entrada/salida y en EXCEPTIONS (opcional) los tipos de errores que vamos a manipular si se produjeran dentro de la función, cada error tiene un número predefinido que de corresponder se asigna a la variable SY-SUBRC.

Cuando nos encontremos en el programa principal y queramos realizar una llamada a una función, podemos utilizar el botón “Modelo” para que nos inserte un patrón con la sintaxis correcta incluyendo todos los parámetros de entrada, salida, tablas y excepciones.

Esto último también es aplicable a Métodos, Subrutinas, la sentencia Write, etc.

Ejemplo:

CALL FUNCTION 'GUI_DOWNLOAD'EXPORTING

filename = 'c:\temp\texto.txt'filetype = 'ASC'

IMPORTINGfilelength = lv_long

TABLESdata_tab = lg_tabla

EXCEPTIONSfile_write_error = 1invalid_type = 2no_authority = 3unknown_error = 4others = 10.

Embotelladora del Atlántico - Coca-Cola Página 34 / 42

Page 35: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Métodos (OOP)

Breve repaso a la POO: Podemos afirmar que una clase es un molde con el cual se crean Objetos. Un Objeto es una abstracción del mundo real. Los Atributos son los datos característicos de un objeto, y los Métodos hacen referencia a su comportamiento.

Para llamar a un Método existen diversas formas, la más utilizada es:

CALL METHOD <ref>-><meth>EXPORTING... <ii> =.<f i>...IMPORTING... <ei> =.<g i>...CHANGING ... <ci> =.<f i>...RECEIVING r = hEXCEPTIONS... <ei> = rc i...

Donde <ref> es una variable referenciada cuyo valor apunta a una instancia de una clase (objeto). Se deben pasar los parámetros de entrada en EXPORTING o CHANGING, los de salida es optativo pasarlos en IMPORTING o RECEIVING, tampoco es obligatorio controlar los errores desencadenados con EXCEPTIONS, aunque se recomienda hacerlo.

Los métodos visibles estáticos pueden ser llamados con la sentencia:

CALL METHOD <class>=><meth>...

Si la interface de un método tiene sólo parámetros IMPORTING, se puede usar:

CALL METHOD <ref>-><meth>(....<ii> =.<f i>...).

Otras formas más modernas de llamar a un método son:

<ref>-><meth> (IMPORTING... <ei> =.<g i>...)

<var> = <ref>-><meth>()

Recordemos que la Transacción para manipular clases (visualizar métodos) es la SE24.

Ejemplo:

CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING

WINDOW_TITLE = 'Seleccionar Directorio'CHANGING

SELECTED_FOLDER = lv_folderEXCEPTIONS

CNTL_ERROR = 1ERROR_NO_GUI = 2OTHERS = 3.

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico D

Embotelladora del Atlántico - Coca-Cola Página 35 / 42

Page 36: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Instrucciones SQL

ABAP tiene un subconjunto de sentencias SQL para su aplicación sobre tablas de la base de datos SAP. Las principales son: SELECT, INSERT, UPDATE, MODIFY y DELETE. En este Workshop nos concentraremos en las consultas (SELECT).

En general la variable de sistema SY-SUBRC nos indicará el código de retorno de la operación, 0 si fue satisfactoria, y distinta si hubo algún inconveniente (por ej. no se encontraron datos). SY-DBCNT nos informará la cantidad de registros afectados por la última operación.

SELECT

Lectura de un único registro de una tabla de la base de datos:

SELECT SINGLE * FROM <tab> WHERE <cond>.

Como realizamos la búsqueda de un registro, en la condición sólo podremos utilizar la igualdad y el operador AND, ya que especificaremos toda la clave del registro.

Lectura Iterativa: Selección de un grupo de registros.

SELECT * FROM <tab> (WHERE <cond>).ENDSELECT.

Selecciona todos los registros que cumplan la condición del WHERE, o todos en caso de no utilizarlo. El resultado lo tendremos en el área de trabajo, es decir en cada iteración del bucle SELECT ... ENDSELECT tendremos un registro leído en dicha área.

Por supuesto si la condición de la cláusula WHERE se acerca a la clave de la tabla, o a un índice secundario, la búsqueda de registros será más rápida.

BETWEEN:

SELECT * FROM <tab> WHERE <campo> BETWEEN <var1> AND <var2>.=> Si <campo> está entre los valores <var1> y <var2>.

LIKE:

LIKE <literal enmascarado>. => Si <campo> cumple la máscara.

Se pueden utilizar:‘_’ como carácter cualquiera.‘%’ como una cadena de caracteres.

IN:

IN (<var1> , <var2> ... ). Si <campo> esta en el conjunto de valores <var1> , <var2> ...

Embotelladora del Atlántico - Coca-Cola Página 36 / 42

Page 37: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Esta opción es muy útil en conjunto con variables SELECT-OPTIONS, ya que por medio del IN podemos comparar campos de la base de datos directamente con las opciones múltiples ingresadas por el usuario en la pantalla de selección.

Ejemplo: SELECT * FROM VBRKWHERE FKART IN S_FKARTAND FKDAT BETWEEN '20080101' AND '20081231'AND INCO2 LIKE 'A%'.

ENDSELECT.

Otras lecturas:

Podemos leer una tabla de base de datos y simultáneamente llenar una tabla interna con el resultado de la lectura (todos los registros que cumplan la condición).

SELECT * FROM <tab> INTO TABLE <intab> (WHERE <cond>).

Ej.: SELECT * FROM KNA1 INTO TABLE GT_KNA1 WHERE KUNNR GT 1000.

Llena la tabla interna <intab> eliminando los registros que pudiera tener esta.

Si queremos que respete los registros que tenía la tabla interna antes de realizar el SELECT, y solo agregue las nuevas líneas sin eliminar las anteriores, utilizaremos:

SELECT * FROM <tab> APPENDING TABLE <intab> (WHERE <cond>).

Ej.: SELECT * FROM KNA1 APPENDING TABLE GT_KNA1 WHERE KUNNR LT 5.

Para realizar una selección en base a dos o más tablas utilizamos INNER JOIN:

SELECT *INTO CORRESPONDING FIELDS OF TABLE <intab>FROM VBRK Primer TablaINNER JOIN VBRP Segunda TablaON VBRK~VBELN = VBRP~VBELN Condición de UniónWHERE VBRK~VBELN = <var1>. Condición de Restricción

Algunas Observaciones:

Además es posible utilizar junto al SELECT, los parámetros GROUP BY para agrupar, HAVING para filtrar los grupos y ORDER BY para ordenar el resultado.

El * que utilizamos en los ejemplos significa traer todos los campos de la base de datos, lo aconsejable es reemplazarlo por la lista explícita de campos que necesitamos, separados por coma, esto mejora notablemente la performance.

Por lo general conviene trabajar con TI y no con SELECT ... ENDSELECT.

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico E

Embotelladora del Atlántico - Coca-Cola Página 37 / 42

Page 38: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Reportes Interactivos

Sentencia HIDE

La sentencia HIDE nos permite asociar a cada línea de un listado ciertos campos, que posteriormente podrán ser leídos. Estos pueden o no salir en el listado. Sintaxis:

HIDE <campo>.

Ej.: HIDE: GS_VUELOS-CARRID, GS_VUELOS-CONNID, GS_VUELOS-FLDATE.

Con esta sentencia almacenamos en memoria por ejemplo el número de una factura, para que al hacer doble click en ella, tengamos disponible este ID para buscar sus datos de detalle.

Evento AT LINE-SELECTION

Se utiliza para asociar cierta lógica a la acción del usuario seleccionar una línea del listado.

AT LINE-SELECTION.<bloque-de-proceso>

Ej.: AT LINE-SELECTION.IF SY-LSIND = 1.

PERFORM DRILL_DOWN.ENDIF.

La variable de sistema SY-LSIND indica el nivel en que nos encontramos. El primer nivel es el cero, y luego se va incrementando uno cada vez que hacemos un dril down.

Evento AT USER-COMMAND

Este evento define un bloque de proceso que se activa cuando se selecciona un comando (se presiona un botón). Se utiliza en los informes interactivos cuando generan salidas secundarias. El campo del sistema SY-UCOMM nos permite saber qué código de función ha activado el usuario.

AT USER-COMMAND.<bloque-de-proceso>

Ej.: AT USER-COMMAND.IF SY-UCOMM = 'VER'.

PERFORM MOSTRAR.ENDIF.

Para agregar un botón tenemos que crear un STATUS GUI (o copiarlo de algún otro programa, por ejemplo el STLI del estándar SAPMSSY0). Para hacer uso de él utilizaremos la sentencia SET PF-STATUS 'nombre del status'.

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico F

Embotelladora del Atlántico - Coca-Cola Página 38 / 42

Page 39: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Reportes SAP List Viewer (ALV Orientado a Objetos)

Los ALV brindan una forma más sencilla de realizar reportes e incluyen funciones como ordenar, sumarizar, filtrar, etc. casi sin ninguna necesidad de codificación.

Existen dos generaciones o formas de realizar Reportes ALVs bien definidas, la primera o Abap List Viewer utilizaba las siguientes funciones y clases:

Lista -> Función REUSE_ALV_LIST_DISPLAY

Grilla a pantalla completa -> Función REUSE_ALV_GRID_DISPLAY

Grilla -> Clase CL_GUI_ALV_GRID

Lista Jerárquica -> Función REUSE_ALV_HIERSEQULIST_DISPLAY

Árbol -> Clase CL_GUI_ALV_TREE

Estas aún se soportan, pero con la llegada de NetWeaver fueron reemplazadas por la segunda generación o sAp List Viewer completamente Orientado a Objetos. Deberíamos utilizar:

Lista o Grilla -> Clase CL_SALV_TABLE

Lista Jerárquica -> Clase CL_SALV_HIERSEQU_TABLE

Árbol -> Clase CL_SALV_TREE

Así se visualiza un Reporte ALV en pantalla:

Embotelladora del Atlántico - Coca-Cola Página 39 / 42

Ordenar

Filtrar Download

Disposición

Enviar Correo

Page 40: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Podemos ver algunos ejemplos en los programas estándares SALV_DEMO*.

Salida ALV Grilla (Programa SALV_DEMO_TABLE_SIMPLE):

Salida ALV Lista Jerárquica (Programa SALV_DEMO_HIERSEQ_SIMPLE):

Salida ALV Árbol (Programa SALV_DEMO_TREE_SIMPLE):

Embotelladora del Atlántico - Coca-Cola Página 40 / 42

Page 41: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

ALV Básico

En el siguiente ejemplo, lo único nuevo que vamos a ver es: 1) definir una referencia a la clase CL_SALV_TABLE, 2) invocar el método FACTORY de dicha clase para crear nuestro objeto ALV y 3) llamar al método DISPLAY para mostrar el reporte.

DATA: GT_SPFLI TYPE TABLE OF SPFLI.DATA: GR_TABLE TYPE REF TO CL_SALV_TABLE.

START-OF-SELECTION.

SELECT * INTO TABLE GT_SPFLI FROM SPFLI.

CL_SALV_TABLE=>FACTORY(IMPORTING R_SALV_TABLE = GR_TABLECHANGING T_TABLE = GT_SPFLI ).

GR_TABLE->DISPLAY( ).

Funciones

Para agregar botones con las funciones predefinidas de los ALV (ordenar, filtrar, etc) vamos a utilizar la clase CL_SALV_FUNCTIONS. Por medio del método GET_FUNCTIONS recibiremos estas en una variable de referencia, y luego con el método SET_ALL las disponibilizaremos.

DATA: GR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.

GR_FUNCTIONS = GR_TABLE->GET_FUNCTIONS( ).GR_FUNCTIONS->SET_ALL( ABAP_TRUE ).

Opciones de Visualización

Podemos cambiar algunas opciones de visualización de un ALV utilizando la clase CL_SALV_DISPLAY_SETTINGS. Creamos una referencia y recibimos el objeto por medio del método GET_DISPLAY_SETTINGS del objeto de la clase CL_SALV_TABLE.

DATA: GR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS.

GR_DISPLAY = GR_TABLE->GET_DISPLAY_SETTINGS( ).

Por ejemplo para utilizar cebra (líneas claras y oscuras intercaladas):

GR_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).

Y si quisiéramos colocar un Título a nuestro reporte usaríamos:

GR_DISPLAY->SET_LIST_HEADER( 'Título del Reporte' ).

Embotelladora del Atlántico - Coca-Cola Página 41 / 42

Page 42: WorkShop Abap I - Documentación

ABAP Workshop Diccionario y Reportes Noviembre 2009

Columnas

Para cambiar algunos atributos específicos de una columna utilizaremos referencias a las clases CL_SALV_COLUMNS y CL_SALV_COLUMN, para las columnas en general y para cada columna en particular, respectivamente. Los métodos son GET_COLUMNS y GET_COLUMN.

DATA: GR_COLUMNS TYPE REF TO CL_SALV_COLUMNS.DATA: GR_COLUMN TYPE REF TO CL_SALV_COLUMN.

GR_COLUMNS = GR_TABLE->GET_COLUMNS( ).

GR_COLUMN = GR_COLUMNS->GET_COLUMN( 'nombrecolumna' ).GR_COLUMN->SET_LONG_TEXT( 'texto largo' ).GR_COLUMN->SET_MEDIUM_TEXT( 'texto medio’ ).GR_COLUMN->SET_SHORT_TEXT( 'texto corto' ).

Orden

Para dar un orden inicial determinado emplearemos la clase CL_SALV_SORTS, su método ADD_SORT, y el método GET_SORTS del objeto de la clase CL_SALV_TABLE como sigue:

DATA: GR_SORTS TYPE REF TO CL_SALV_SORTS.

GR_SORTS = GR_TABLE->GET_SORTS( ).GR_SORTS->ADD_SORT( 'nombrecolumna' ).

Sumarizaciones

Para incluir totales usaremos una referencia a la clase CL_SALV_AGGREGATIONS, su método ADD_AGGREGATION y GET_AGGREGATIONS del objeto referente a CL_SALV_TABLE.

DATA: GR_AGG TYPE REF TO CL_SALV_AGGREGATIONS.

GR_AGG = GR_TABLE->GET_AGGREGATIONS( ).GR_AGG->ADD_AGGREGATION( 'DISTANCE' ).

Filtros

Utilizando la clase CL_SALV_FILTERS podremos setear algunos filtros por defecto para los datos de nuestro reporte. Recibiremos el objeto con el método GET_FILTERS de la clase CL_SALV_TABLE y agregaremos un nuevo filtro con el método ADD_FILTER.

DATA: GR_FILTER TYPE REF TO CL_SALV_FILTERS.

GR_FILTER = GR_TABLE->GET_FILTERS( ).GR_FILTER->ADD_FILTER( COLUMNNAME = 'nombrecolumna' LOW = 'valor' ).

Ejemplo de Utilización para Fijación de Conocimientos - Ejercicio Práctico G

FIN - ABAP Workshop - Diccionario de Datos y Reportes

Embotelladora del Atlántico - Coca-Cola Página 42 / 42