Está en la página 1de 43

ABAP Workshop

Diccionario de Datos y Reportes

Ing. Hernán González Navas


Noviembre 2009
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 / 43


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 / 43


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 / 43


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 / 43


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 / 43


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.

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


ABAP Workshop Diccionario y Reportes Noviembre 2009

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 8 / 43


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 9 / 43


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 10 / 43


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 11 / 43


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 12 / 43


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 13 / 43


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 14 / 43


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

Verificar
Activar Directo

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 15 / 43


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 16 / 43


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 17 / 43


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 18 / 43


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 19 / 43


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 20 / 43


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 21 / 43


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 22 / 43


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 23 / 43


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 24 / 43


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 f
DEFAULT <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 25 / 43


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 Provincia
BEZEI 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 26 / 43


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 27 / 43


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 PLANETYPE


INTO TABLE GT_VUELOS
FROM SFLIGHT
WHERE CARRID EQ P_CARRID
AND CONNID IN S_CONNID
AND 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 28 / 43


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 29 / 43


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 30 / 43


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 31 / 43


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 32 / 43


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 C


P2 TYPE I
CHANGING VALUE(P3) TYPE C
VALUE(P4) TYPE I.

ENDFORM.

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


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 C


P2 TYPE I
CHANGING VALUE(P3) TYPE C
VALUE(P4) TYPE I.

ENDFORM.

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


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'
IMPORTING
filelength = lv_long
TABLES
data_tab = lg_tabla
EXCEPTIONS
file_write_error =1
invalid_type =2
no_authority =3
unknown_error =4
others = 10.

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


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 = h
EXCEPTIONS... <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_folder
EXCEPTIONS
CNTL_ERROR =1
ERROR_NO_GUI =2
OTHERS = 3.

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

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


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 37 / 43


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 VBRK


WHERE FKART IN S_FKART
AND 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 Tabla
INNER JOIN VBRP Segunda Tabla
ON VBRK~VBELN = VBRP~VBELN Condición de Unión
WHERE 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 38 / 43


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 39 / 43


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:

Disposición

Ordenar Enviar Correo

Filtrar Download

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


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 41 / 43


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_TABLE
CHANGING 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 42 / 43


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 43 / 43

También podría gustarte