Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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).
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.
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.
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.
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í.
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.
Funcionales
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
ABAP
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
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.
ABAP permite crear nuevas funcionalidades, o adaptar las estándares, a las necesidades
específicas del cliente, cuando la parametrización resulta Insuficiente.
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.
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.
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.
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.
Sistema de Desarrollo
Sistema Productivo
Es el sistema en el que los usuarios finales realizan la gestión diaria del negocio.
Mandantes
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.
Órdenes de Transporte
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.
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:
ABAP Workbench
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.
Permite acceder al contenido de las tablas transparentes (de base de datos) de SAP.
Lleva a cabo y gestiona los transportes de los objetos entre los diferentes sistemas SAP.
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:
Los cambios que en él se realizan surten efecto inmediato en todo el sistema SAP
por medio del mecanismo de activación.
Creación de un Dominio
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.
Reportes ABAP
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
Control
Operativas
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.
Verificar
Activar Directo
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.
Tipos de Datos
Declaración de Variables
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
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.
Parámetro VALUE
Con el parámetro VALUE inicializamos la variable con un valor distinto al por defecto.
Estructuras
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.
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:
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:
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.
Asignación de Valores
Asignación Directa
Para transportar el contenido de var1 al campo var2 podemos utilizar: <var2> = <var1>.
Sentencia MOVE
Sentencia WRITE
Observación: Esta instrucción también se utiliza (sin el TO) para dar salida por pantalla.
Sentencia MOVE-CORRESPONDING
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.
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:
Ejemplo:
AND
OR
Igual = , EQ
Distinto <> , NE
Mayor > , GT
Menor < , LT
Mayor o igual >= , GE
Menor o igual <= , LE
Sentencia CASE
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.
Proceso de Bucles
Sentencia DO
DO <n> TIMES.
...
ENDDO.
Es posible anidar DO’s. En ese caso SY-INDEX hará referencia al bucle en proceso.
Ejemplo:
DO 10 TIMES.
square = sy-index ** 2.
WRITE: / sy-index, square.
ENDDO.
Sentencia WHILE
WHILE <cond>.
...
ENDWHILE.
Ejemplo:
WHILE sy-subrc = 0.
REPLACE space WITH '-' INTO text.
ENDWHILE.
Sentencias de Control
Sentencia CHECK
Ejemplo:
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:
DO.
IF sy-index > limit.
EXIT.
ENDIF.
WRITE / sy-index.
ENDDO.
Sentencia STOP
Sentencia WRITE
Como hemos comentado, para mostrar por pantalla un valor utilizaremos WRITE.
Con la Barra / indicaremos si queremos saltar una línea o no antes de imprimir (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:
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.
Sentencia SKIP
Para saltar una o varias líneas utilizaremos SKIP. Por defecto el salto será de una línea.
Sentencia NEW-PAGE
Pantallas de Selección
Sentencia PARAMETERS
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:
Sentencia SELECT-OPTIONS
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.
Ejemplo:
Sentencia SELECTION-SCREEN
Sirve para colocar una línea separación, marcos, botones, comentarios, etc.
Tablas Internas
Sintaxis:
Ejemplos:
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.
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).
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).
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:
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:
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.
Ejemplo:
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.
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:
Para clasificar una tabla interna utilizamos SORT, pudiendo especificar por cuales campos.
Ejemplos:
SORT GT BY CAMPO1.
SORT GT_DATOS BY DATO2 DESCENDING DATO3 ASCENDING.
Podemos recorrer una tabla interna con la instrucción LOOP ... ENDLOOP.
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.
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.
Observación: En general un SY-SUBRC <> 0 indica que la última instrucción no fue exitosa.
Ejemplo:
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.
Recordemos que si la búsqueda ha sido positiva SY-SUBRC valdrá cero, sino <> 0.
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:
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).
Ejemplos:
CLEAR <wa>.
Ejemplo:
CLEAR GE_ESTRUCTURA.
REFRESH <intab>.
Ejemplo:
REFRESH GT_TABLA.
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.
ENDLOOP.
Ejemplo:
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.
• Módulos de Función
Subrutinas Internas
PERFORM <modulo>.
FORM <modulo>
.... Subprograma.
ENDFORM.
...
PERFORM <modulo> USING var1 var2 ...
...
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á:
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:
Subrutinas Externas
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.
Como nombre todos deberían tener el del programa principal y luego estas letras.
Ejemplo:
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.
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.
Ejemplo:
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.
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.
<var> = <ref>-><meth>()
Ejemplo:
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).
SELECT
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.
BETWEEN:
LIKE:
Se pueden utilizar:
‘_’ como carácter cualquiera.
‘%’ como una cadena de caracteres.
IN:
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.
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).
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:
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.
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>.
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.
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'.
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:
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:
Disposición
Filtrar Download
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.
START-OF-SELECTION.
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.
GR_FUNCTIONS = GR_TABLE->GET_FUNCTIONS( ).
GR_FUNCTIONS->SET_ALL( ABAP_TRUE ).
Opciones de Visualización
GR_DISPLAY = GR_TABLE->GET_DISPLAY_SETTINGS( ).
GR_DISPLAY-
>SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
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.
GR_COLUMNS = GR_TABLE->GET_COLUMNS( ).
Orden
GR_SORTS = GR_TABLE->GET_SORTS( ).
GR_SORTS->ADD_SORT( 'nombrecolumna' ).
Sumarizaciones
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.
GR_FILTER = GR_TABLE->GET_FILTERS( ).
GR_FILTER->ADD_FILTER( COLUMNNAME = 'nombrecolumna' LOW = 'valor' ).