33
www.aprendeabap.com AprendeABAP en 7 días 1

– AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

  • Upload
    others

  • View
    14

  • Download
    7

Embed Size (px)

Citation preview

Page 1: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!1

Page 2: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!2

Page 3: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Copyright 2018 AprendeABAP.com.

Todos los Derechos Reservados.

Impreso por CreateSpace.

Prohibida la reproducción total o parcial de este libro. Prohibida la exhibición de este libro en cualquier plataforma física o digital sin autorización expresa del autor. Esto incluye pero no se limita a reimpresiones, extractos, fotocopias,

grabación, o cualquier otro medio de comunicación. Para mayor información por favor contactar con el autor vía correo electrónico en [email protected]

http://www.aprendeabap.com

Facebook: /AprendeAbap

Twitter: @AprendeABAP

Youtube: /AprendeABAP

!3

Page 4: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Agradecimientos.

A mi familia, por ser acompañantes silenciosos en esta aventura.

A todos los compañeros de trabajo que he tenido a lo largo de estos años, por todo lo que he podido aprender de ellos.

A ti, que me has dado tu confianza en tu proceso de aprendizaje.

!4

Page 5: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Introducción. Más que darte las gracias por haber confiado tus datos, permíteme felicitarte ya que no todas las personas, a pesar de la necesidad, son capaces de tomar las oportunidades que se le presentan en el camino.

Si echas una mirada al mundo, notarás que no estamos pasando por momentos felices a nivel laboral, quizá tú estés aquí   por que fuiste afectado de alguna manera, o quizá quieras evitar que “llegue la ola” y te lleve.

A pesar de la situación actual, en la que en muchos países hay serios problemas de desempleo, los profesionales en SAP siempre son requeridos en muchas partes del mundo; en ocasiones podrás ganar buen dinero, en otras no tanto, pero trabajo, a un consultor de cualquier módulo de SAP, no le va a faltar.

Este es el comienzo de lo que espero sea un largo camino, hoy comienzas con el objetivo de aprender ABAP, el lenguaje de programación de SAP. Con este libro darás tus primeros pasos en ABAP, pasarás de no saber nada a estar en la capacidad de atender los requerimientos más comunes que hay en pocos días.

Vendrán más proyectos en el futuro en el cual no estarás solo/a, en donde intensificarás tu aprendizaje con temas avanzados, con teoría y práctica, te enseñaré donde puedes conseguir acceso estable al sistema mediante suscripción – porque SAP no es gratis – , algo que recomiendo que hagas para que puedas poner en práctica lo que vayas aprendiendo día a día.

!5

Page 6: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Día 0: Características del Lenguaje ABAP.

Las siglas ABAP significan: Advanced Business Application Programming.

Al lenguaje se le conoce como ABAP/4 por tratarse de un lenguaje de 4ta generación; esto es, se trata de un lenguaje estructurado orientado a eventos, es decir, no responde a una secuencia lineal tradicional, sino “salta” su ejecución a diferentes bloques de código dependiendo del cumplimiento de una serie de condiciones o eventos asociadas a dicho bloque.

El núcleo (kernel) de SAP está escrito en lenguaje C, incluido el propio ABAP; todas las capas superiores, es decir, los diferentes módulos del sistema, si están escritos en lenguaje ABAP.

SAP trabaja mediante transacciones de diálogos; ventanas gráficas que requieren interacciones con el usuario, cuyos datos son procesados y tratados en las bases de datos del sistema.

En ABAP se maneja el concepto de Objetos, es decir, un Programa, una Tabla, un Campo de una Tabla, una Transacción, un Elemento de Datos, una Estructura de Datos, cada uno es un objeto en sí. Y si, ABAP también permite la programación Orientada a Objetos, pero la misma no está contemplada en este libro.

Entre las distintas aplicaciones que se pueden desarrollar en ABAP tendremos:

• Reportes: Ampliamente solicitados, consiste de manera general en capturar información relevante introducida en pantalla por el usuario, que servirá de criterios de búsqueda en las tablas de la Base de Datos, recopilar los datos obtenidos, y presentárselos al usuario en alguno de los diferentes formatos de reportes existentes.

• Transacciones: Es el nombre que se le da en SAP a los programas de diálogo, que requieren interacción con el usuario, para solicitar y mostrar datos e información; SAP está estructurado en una serie de transacciones Standard (previstas por el sistema), para los diferentes módulos, que cubren el universo de escenarios posibles de un negocio o industria; pero en ABAP podemos crear nuevas transacciones de diálogo (en adelante solo transacciones), adaptadas a las necesidades específicas de cada cliente. Cada transacción está conectada con un programa ABAP, de manera de que al llamar al código de una transacción, se ejecute el programa asociado.

!6

Page 7: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

• Adaptaciones:  En ocasiones, en un proyecto de implantación SAP, un cliente requiere que una transacción Standard realice una acción no contemplada en el paquete inicial de SAP, por lo que se requiere de programación ABAP para realizar estos ajustes en determinadas funciones de código, que permiten modificar o hacer ajustes a los objetos Standard.

• Utilidades: Objetos existentes para mejoras al sistema (BADI’s, BAPI’s), funciones, interfaces, así como utilidades para carga masiva de datos (Bath Input).

!7

Page 8: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Día 1: Tipos de Datos en ABAP. En el capítulo anterior hablamos sobre los Fundamentos de la Programación Lógica. Ahora vamos a iniciarnos finalmente en el lenguaje ABAP, y vamos a comenzar entendiendo los diferentes Tipos de Datos que el sistema permite.

En ABAP existen los siguientes tipos de datos:

!

Declaración de Campos

Para declarar variables en un programa ABAP, debemos utilizar la sentencia DATA.

Ejemplo:

DATA var.

Esta sentencia, (ejemplo de arriba), crea una variable llamada <var> del tipo C tamaño 1, que es la definición por defecto.

NOTA: Todas las líneas de instrucciones que escribimos en ABAP deben estar terminadas en un punto ‘.’; de lo contrario, el programa producirá errores de sintaxis.

!8

Page 9: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Si queremos que la variable sea de tamaño 4, debemos escribirlo de la siguiente manera:

DATA var(4).

Ahora, si lo que queremos es declarar una variable que no sea tipo C, por ejemplo, queremos declarar una variable tipo entero, utilizaremos la sentencia TYPE para indicar el tipo de dato que queremos:

DATA var TYPE i.

Con el parámetro LIKE podemos declarar una variable con los mismos atributos de longitud y tipo que una variable de base de datos:

DATA var LIKE mara-matnr.

MARA-MATNR hace referencia al campo MATNR de la tabla MARA; y la instrucción esta declarando una variable del mismo tipo de datos de dicho campo. (Luego veremos todo lo relacionado con las tablas y campos de la Base de Datos).

La instrucción de arriba también puede escribirse como:

DATA var TYPE mara-matnr.

Con el parámetro VALUE podemos inicializar la variable con un valor distinto al que tiene por defecto:

DATA var TYPE i VALUE 1.

Esta instrucción declara una variable tipo entero con valor inicial de 1.

Si queremos declarar dos o más variables a la vez, lo podemos hacer de dos formas, la primera es escribiendo una línea debajo de otra de la manera como lo hemos venido viendo hasta ahora:

DATA var1 TYPE i VALUE 1. DATA var2 TYPE mara-matnr. DATA var3 LIKE mara-matnr.

La segunda opción es escribiendo la sentencia DATA una sola vez seguida de dos puntos (: ) y terminando cada línea con coma ( , ) en vez de punto, colocando el punto al final de la última línea de declaración; veamos el ejemplo anterior escrito bajo esta forma:

DATA: var1 TYPE i VALUE 1, var2 TYPE mara-matnr, var3 LIKE mara-matnr.

!9

Page 10: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

También podemos crear una Estructura de Datos, esto es, un conjunto de datos relacionados lógicamente en una estructura. Luego de la sentencia DATA; utilizamos las sentencias BEGIN OF y END OF para determinar el inicio y final de la estructura. Ejemplo:

DATA: BEGIN OF nombre_estructura, var1 TYPE i, var2 TYPE i, END OF nombre_estructura.

Posteriormente, el acceso a los campos de la estructura será con la instrucción:

<nombre_estructura> - <campo_estructura>.

Ejemplos:

nombre_estructura-var1. nombre_estructura-var2.

Tablas Internas.

El tema de las Tablas Internas se tocará a fondo en un capítulo posterior, por ahora quédate con que, en ABAP existe una variante de las Tablas Tradicionales de Bases de Datos (BD), que son llamadas las “Tablas Internas”; éstas, a diferencia de las Tablas de BD, se guardarán en memoria y solo serán accesibles desde el Programa que las creó, y no son Tablas guardadas en la BD general consumiendo recursos del sistema.

En SAP, las Tablas “normales” se les conoce como Tablas Transparentes, mientras que a estas secciones de memoria que permiten almacenar una serie de registros dentro de un programa, con una estructura de datos determinada, se les conoce como Tablas Internas.

Quédate con esto por ahora y si no se entendió muy bien, no te preocupes que le dedicaremos un capítulo entero a esto más adelante.

Las Tablas en SAP, tanto las internas como las transparentes, están formadas por Estructuras de Datos, por lo que hay dos maneras de declarar una Tabla Interna en un programa ABAP:

!10

Page 11: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

a) Declarando la Estructura de Datos y la Tabla en una misma sentencia, utilizando OCCURS.

DATA: BEGIN OF itab OCCURS 100, nombre LIKE LFA1-NAME1, ciudad LIKE LFA1-ORT1, ventas LIKE LFC3-SOLLL,

END OF itab.

b) Declarando por un lado la Estructura de Datos, y luego declarando la Tabla Interna indicando la sentencia TYPE TABLE OF.

DATA: BEGIN OF ed, nombre LIKE LFA1-NAME1, ciudad LIKE LFA1-ORT1, ventas LIKE LFC3-SOLLL, END OF ed. DATA: itab TYPE TABLE OF ed.

Las dos sentencias crean una Tabla Interna llamada ITAB, con 3 campos (nombre, ciudad y ventas), la diferencia es que la primera Tabla tiene un espacio reservado de 100 líneas en memoria principal.

Esto no significa que el tamaño máximo de la Tabla sea el indicado, ya que si este se desborda los datos se guardan en un fichero de paginación, bajando lógicamente el tiempo de proceso de las Tablas Internas, pero evitando que el área global de almacenamiento destinado por SAP para tablas internas se agote.

Las Tablas Internas se declaran, inicializan y referencian como una Estructura de Datos.

También podemos utilizar la misma Estructura que una Tabla de Base de Datos. Para ello utilizaremos la instrucción INCLUDE STRUCTURE.

DATA BEGIN OF sociedad OCCURS 10. INCLUDE STRUCTURE T001. DATA END OF sociedad.

T001 es una Estructura del Diccionario de Datos de SAP, esto lo veremos en el siguiente capítulo.

!11

Page 12: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Variables del sistema

El sistema SAP tiene algunas variables internas que se van actualizando automáticamente y que pueden ser utilizadas en los programas.

Todas ellas empiezan por el prefijo SY- y entre las más utilizadas tenemos

<SY-SUBRC>; que nos da el código de retorno de una instrucción, o <SY-TABIX>; que contiene la línea de proceso de una tabla interna.

Todas las variables del sistema se encuentran en la Estructura de Datos llamada SYS.

En el siguiente artículo enumero las variables del sistema más utilizadas en el entorno de programación ABAP:

Artículo Variables del Sistema

Asignando valores

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

Una asignación directa, como resultado de una operación aritmética o como resultado de una conversión automática entre campos con valores de diferente tipo de datos.

La instrucción MOVE realiza un transporte del contenido del <var1> al campo <var2>.

MOVE <var1> TO <var2>.

Esta última instrucción también se puede escribir de la siguiente manera:

<var2> = <var1>.

Ejemplos:

MOVE var1 TO var2. var2 = var1.

!12

Page 13: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Si deseamos, por algún motivo, inicializar las variables que estamos utilizando, (borrarles el valor que tienen y dejarlas en blanco), aplicaríamos la sentencia CLEAR como se muestra en el ejemplo:

CLEAR var.

CLEAR inicializa al valor que tiene asignado como valor inicial (ver Tabla 1) sin tener en cuenta las cláusulas VALUE que existan para esa variable.

La asignación e inicialización de las Estructuras de Datos funciona de la misma forma que en las variables normales. Un CLEAR inicializa todos los campos del registro.

Con respecto a las Tablas Internas, hay una diferencia, la instrucción CLEAR solo inicializa la línea de cabecera (más adelante se verá que es esto); para inicializar una Tabla Interna completa requerimos la sentencia REFRESH.

REFRESH itab.

Existen otras consideraciones para las Tablas Internas, pero las abordaremos más adelante.

Podremos conseguir una asignación más potente con MOVE-CORRESPONDING.

MOVE-CORRESPONDING <var1> TO <var2>.

Esta instrucción mueve de <var1> a <var2> aquellos campos que tengan idéntico nombre.

Operaciones Aritméticas en ABAP/4

En ABAP/4 las operaciones aritméticas básicas se pueden implementar de dos formas:

Con la instrucción COMPUTE y los símbolos +, -, /, *.

COMPUTE var1 = <Expresión Aritmética>.

Donde la sentencia COMPUTE es opcional; es decir, se puede omitir de la sentencia, veamos un ejemplo:

COMPUTE var1 = var2 + var3. var1 = var2 + var3.

!13

Page 14: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Ambas instrucciones suma las variables <var2> con <var3> y guarda el resultado en <var1>.

Si se trata de una operación compleja donde necesitemos paréntesis, dejaremos un espacio en blanco precediendo y siguiendo al paréntesis. Ejemplo:

var1 = var1 + ( var2 + var3 ).

También existe una serie de instrucciones para realizar operaciones matemáticas, como las siguientes:

• ADD TO. - Sumar. • SUBSTRACT FROM. - Restar. • MULTIPLY BY. - Multiplicar. • DIVIDE BY. - Dividir. • EXP. - Exponencial. • LOG. - Logaritmo. • SIN. - Seno. • COS. - Coseno. • SQRT. - Raíz cuadrada. • DIV. - División exacta. (7 div 2 = 3) • MOD. - Residuo. (7 mod 2 = 1) • STRLEN. - Longitud de una variable.

Procesando campos de tipo texto

El lenguaje ABAP ofrece una cantidad de instrucciones para el procesamiento de cadenas de texto, veamos algunas de ellas:

SHIFT <campo>. Realiza un desplazamiento de un caracter hacia la izquierda.

SHIFT <campo> BY <n> PLACES (RIGHT) .Realiza un desplazamiento de N caracteres hacia la Izquierda o si se especifica hacia la derecha, introduciendo blancos por el lado opuesto.

SHIFT <campo> BY 2 PLACES CIRCULAR (RIGHT). Realiza un desplazamiento cíclico hacia la izquierda o si se especifica hacia la derecha.

REPLACE <cadena1> WITH <cadena2> INTO <campo>. Reemplaza <cadena1> por <cadena2> dentro de la variable campo. Si la variable del sistema SY-SUBRC es diferente de 0; es que <cadena1> no existe dentro de la variable <campo>.

Existe otra instrucción de sustitución, TRANSLATE.

!14

Page 15: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

TRANSLATE <campo> TO UPPER CASE .Pasa el contenido de <campo> a Mayúsculas.

TO LOWER CASE. Como la anterior, pero pasando el contenido a minúsculas.

La instrucción SEARCH busca una cadena dentro de un campo o una tabla.

SEARCH <campo>/<tabla> FOR <cadena>. Si el Resultado es positivo, SY-SUBRC es igual a 0. En caso de que sea una tabla, SY-TABIX contiene la línea de la tabla donde se ha encontrado.

Para borrar los blancos de una cadena utilizaremos CONDENSE.

CONDENSE <campo> (NO-GAPS).

Esta instrucción borra todos los blancos que se encuentren comenzando la cadena por la izquierda y en caso de encontrar series de blancos intermedios dejará únicamente uno por serie.

La cláusula NO-GAPS borra todos los blancos estén donde estén.

!15

Page 16: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Día 2: Diccionario de Datos. En este capítulo estudiaremos lo que considero que es la base de todo el sistema SAP; su repositorio de Datos, conocido como “Diccionario de Datos”; en él encontraremos toda la información del sistema estructurada en Tablas estándar, Estructuras de Datos, Vistas de Tablas, Elementos de Datos y Dominios.

Para acceder al Diccionario de Datos se ingresa a través de la Transacción SE11; si no recuerdas como ingresar un código de Transacción, lo puedes hacer en la barra de pulsadores en la parte superior de la pantalla.

El Diccionario de Datos es la “fuente” de información centralizada de todo el sistema SAP, allí se encuentra (y almacena) todos los datos que se procesan en el sistema; es, digamos, el corazón de SAP.

En el Diccionario de Datos (de ahora en adelante el Diccionario), encontramos la siguiente estructura de objetos, ordenados desde su capa más inferior:

• Dominio. • Elemento de Datos. • Campo. • Estructura de Datos. • Tablas.

El DOMINIO describe el campo de valores posibles, es de un carácter técnico, es el nivel más bajo que existe para determinar el tipo de dato de un objeto.

Ejemplo; un dominio denominado <S_PLANE> tiene un tipo de dato CHAR de tamaño 10 (una cadena de caracteres de 10 posiciones).

!16

Page 17: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!

El ELEMENTO DE DATOS describe el significado de un campo independientemente de las Tablas donde se utilice. Tiene un carácter semántico. Un Elemento de Datos está asociado a un Dominio, y puede ser utilizado en múltiples Tablas, incluso ser referenciado directamente desde un Programa al momento de declarar una nueva variable.

Siguiendo el ejemplo anterior, tenemos un Elemento de Datos llamado <S_PLANETYE>, que hace referencia al tipo de avión, y está formado por el Dominio <S_PLANE>, mostrado antes.

!17

Page 18: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!

NOTA: Desde el editor de un programa ABAP, podemos declarar una variable que haga referencia a un Elemento de Datos; de esta forma, la variable tomará el tipo de datos del dominio asociado a dicho Elemento de Datos. Siguiendo con el ejemplo:

DATA: var TYPE S_PLANETYE.

En este caso, la variable denominada <var> será una cadena de caracteres de 10 posiciones, o dicho de otra manera, un campo tipo texto de 10 posiciones; porque le indicamos que tome las propiedades del Elemento de Datos <S_PLANETYPE>, y ese Elemento de Datos tiene como Dominio el objeto <S_PLANE>, que como vimos arriba, se trata de un tipo CHAR de 10 posiciones.

Si te confunde un poco, lo siguiente lo esclarecerá.

DATA: var TYPE S_PLANETYE.

DATA: var TYPE char10.

Las dos instrucciones escritas arriba obtienen exactamente el mismo resultado, la variable <var> será un tipo CHAR de 10 posiciones.

!18

Page 19: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

La ventaja de esta forma de estructurar el Diccionario es que si cuentas con una serie de Tablas, con campos del mismo tipo, por ejemplo CHAR10, si bien se permite asignarle a cada campo directamente el tipo de datos CHAR de 10 posiciones; hacerlo de esta manera implica que, al momento de ser solicitado un cambio del tipo de datos, (digamos que piden cambiarlo a un CHAR de 12 posiciones), te corresponde modificar Tabla por Tabla para ajustar todos los campos afectados.

Si en su lugar, se crea un Elemento de Datos cuyo Dominio sea un objeto de tipo CHAR10, pongámosle por nombre <ED>; y le asignamos el ED a los campos de cada Tabla; al momento de requerir el ajuste a CHAR12, bastará con cambiar el Dominio del Elemento de Datos <ED> para que el cambio se replique en TODAS las Tablas que lo contengan; es decir, haríamos el cambio una sola vez, y éste se replica en todas las Tablas que hacen referencia al Elemento de Datos.

EL CAMPO, como su nombre lo indica, es el renglón o columna de una Estructura de Datos. Si recuerdas del capítulo anterior el momento en que mencionábamos la creación de una Estructura de Datos, cuya sentencia sería la siguiente:

DATA: BEGIN OF nombre_estructura,        var1 TYPE i,        var2 TYPE i,       END OF nombre_estructura.

Las variables <var1> y <var2> serán campos de la Estructura de Datos creada.

Lo mismo ocurre en el Diccionario de Datos, el campo es el espacio o columna única de cada Tabla o Estructura de Datos; y a cada campo se le asigna un Elemento de Datos existente, absorbiendo el campo las propiedades del Elemento de Datos.

!19

Page 20: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!

Como vemos en la gráfica, un campo llamado <PLANETYPE> perteneciente a la Tabla SFLIGHT y está formado por el Elemento de Datos <S_PLANETYE > que vimos anteriormente.

La ESTRUCTURA DE DATOS la vimos un poco en el capítulo anterior (Tipos de Datos en ABAP), se trata de un conjunto de campos relacionados lógicamente entre sí en un único objeto, que recibe por nombre Estructura de Datos.

Lo que en ABAP se conoce como Estructura de Datos, en otros lenguajes de programación podrían conocerse como Arreglos o Registros, sería de manera general una analogía válida.

En el capítulo de los Tipos de Datos, pudimos ver cómo se pueden crear Estructuras de Datos directamente desde el editor ABAP.

a) Declarando las variables (campos) en el mismo editor.

DATA: BEGIN OF nombre_estructura,        var1 TYPE i,        var2 TYPE i,       END OF nombre_estructura.

b) Tomando como referencia una Estructura de Datos ya creada en el Diccionario.

!20

Page 21: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

DATA BEGIN OF sociedad.          INCLUDE STRUCTURE SYST. DATA END OF sociedad.

También, las Estructuras de Datos pueden crearse en el Diccionario, como la Estructura <SYST> usada en el ejemplo anterior, que contiene las variables del sistema.

!

Una Estructura de Datos contiene un único registro o línea; si deseamos guardar múltiples registros con la misma Estructura, tendremos que pasar a crear una Tabla basada en dicha Estructura de Datos.

Las TABLAS son objetos, basados en estructuras de datos, capaces de almacenar gran cantidad de información en múltiples líneas de registros. Un ejemplo de tablas en el Diccionario de Datos lo vimos en la imagen que reflejaba la tabla SFLIGHT; y si en un programa quisiéramos crear una tabla cuya forma sea similar a la estructura de datos <SYST>; lo podríamos hacer de la siguiente manera:

DATA: itab TYPE TABLE OF SYST.

!21

Page 22: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Tipos de tablas.

Existen diversos tipos de tablas:

• Tablas TRANSP (transparentes): Tablas normales relacionales (SQL).

• Tablas POOL: Tablas SAP que se guardan junto a otras tablas SAP en una única tabla física de Base de Datos. Mejorando el acceso a los registros.

• Tablas CLUSTER: Varias tablas que se guardan en un cluster de Base de Datos. Se guardan registros de varias tablas SAP con la misma clave cluster, en el mismo cluster físico de la base de datos.

Las que usaremos cada día serán las Tablas Transparentes, que es el nombre que le da SAP a las Tablas de Base de Datos relacionales. De hecho, los dos términos más comunes utilizados en el día a día de un Consultor ABAP son “Tablas Transparentes” y “Tablas Internas”; ya comprendimos que las primeras son las Tablas del Diccionario de Datos, y las segundas son espacios de memoria que se utilizan dentro de un Programa, cuya existencia es únicamente en tiempo de ejecución del Programa en cuestión.

Los datos en SAP.

Los datos en SAP se pueden clasificar de la siguiente manera:

• Datos maestros: Son datos que no se modifican muy a menudo. Ejemplo: Materiales, Cuentas, Bancos, Clientes. Se almacenarán en Tablas transparentes.

• Datos de movimientos: Datos muy volátiles y con gran volumen de generación. Ejemplo: Facturas, Pedidos. Se suelen guardar en Tablas tipo CLUSTER todos ellos con formato parecido (documentos).

• Datos del sistema o de control: Muchas Tablas con pocos datos. Se suelen guardar en Tablas de tipo POOL.

!22

Page 23: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Instrucciones SQL de ABAP.

El lenguaje ABAP tiene un conjunto de sentencias SQL para su aplicación sobre tablas de la Base de Datos SAP.

Algo muy interesante de este Entorno de Programación, es que, a diferencia de otros lenguajes, no se requiere realizar ningún tipo de protocolo de conexión con la Base de Datos; escribimos directamente las sentencias SQL y el sistema se encarga de comunicarse con el Diccionario de Datos de manera implícita para nosotros.

Las siguientes son las instrucciones SQL permitidas:

• SELECT - Lectura. • INSERT - Insertar. • UPDATE - Actualizar. • MODIFY - Modificar. • DELETE - Eliminar. • COMMIT WORK - Asentar cambios. • ROLLBACK WORK - Revertir cambios.

Adicionalmente, contamos con las siguientes variables del sistema:

• SY-SUBRC: Código de retorno de una operación. El valor 0 indica que la instrucción fue satisfactoria y se cumplió el objetivo, bien sea obtener datos de una Tabla, o insertar/modificarlos; un retorno con valor 4 indica que la consulta no arrojó datos, o bien no se pudo insertar/modificar en un Tabla del dDiccionario.

• SY-DBCNT: Cantidad de registros afectados por la operación procesada si se trata de una modificación/inserción, o bien la cantidad de registros encontrados en una consulta.

SELECT: Instrucción fundamental para leer información de la Base de Datos.

Lectura de un único registro:

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

Si SY-SUBRC = 0. Registro encontrado. Resultado en <tab>.

Si SY-SUBRC = 4. No existe el registro buscado.

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

!23

Page 24: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

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

Selecciona cada uno de los registros que cumplan la condición de la cláusula WHERE, (o todos en caso de no utilizarla). El resultado lo tendremos en el área de trabajo <tab>. En cada iteración del ciclo SELECT - ENDSELECT se procesa un único registro encontrado, y el ciclo se repetirá tantas veces como registros se consigan. Es útil si se desea realizar algún tratamiento a cada registro encontrado de una vez.

Si SY-SUBRC = 0. Algún registro encontrado.

Si SY-SUBRC = 4. No existe ningún registro que cumpla la condición del WHERE.

Ejemplo:

SELECT * FROM mara WHERE matnr = itab-matnr.    WRITE: mara-matnr.    ENDSELECT. 

Por cada registro encontrado, se imprime en pantalla el valor de dicho registro y se sigue leyendo en la tabla en búsqueda de más registros.

Otras posibilidades del WHERE:

SELECT * FROM <tab> WHERE <campo>... BETWEEN <var1> AND <var2>.

Si <campo> está entre los valores <var1> y <var2>.

LIKE <literal condición>. Si <campo> cumple la condición.

También se pueden utilizar:

• ‘_’ como caracter cualquiera. • ‘%’ como una cadena de caracteres. • IN (<var1>, <var2>...). Si <campo> está en el conjunto de valores

<var1>, <var2>...

!24

Page 25: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Otras lecturas:

Podemos leer una Tabla de Base de Datos y simultáneamente llenar una Tabla Interna con el resultado de la lectura.

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

Esta instrucción lee la Base de Datos, obtiene todos los registros que cumplan con la condición, y los almacena en una Tabla Interna llamada <itab>.

A diferencia del ciclo SELECT – ENDSELECT, en el que por cada acierto se procede a leer en la Base de Datos; aquí se realiza un único acceso a las Tablas para extraer todos los registros que cumplan con la condición.

Si bien ambas opciones cumplen con el mismo resultado, por temas de rendimiento recomiendo utilizar esta última ya que se consumen menos recursos con un único acceso a BD, para obtener todas las coincidencias en una Tabla Interna, y luego procesar esos resultados desde la Tabla Interna, que como ya sabemos, es un objeto propio del Programa en ejecución.

Veamos cómo queda el mismo ejemplo del caso anterior:

SELECT * INTO TABLE itab   FROM mara WHERE matnr = itab-matnr. LOOP AT itab.    WRITE: itab-matnr. ENDLOOP.  

NOTA: En un capítulo posterior veremos que es un LOOP.

Podemos indicar un orden en el proceso de selección de registros.

SELECT *...ORDER BY <campo1> <campo2>.

No requiere mayor explicación salvo que el criterio de ordenamiento siempre es prevaleciendo el campo de la izquierda.

!25

Page 26: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

INSERT: Permite introducir registros sencillos o el contenido de una Tabla Interna en una Tabla Transparente del Diccionario de Datos SAP.

INSERT <tab>.

Grabará en la BD el contenido de la Estructura <tab>.

Si SY-SUBRC = 0. Registro insertado.

Si SY-SUBRC > 0. La clave del registro que queríamos insertar ya existía en la tabla.

También es posible introducir datos desde una Tabla Interna.

INSERT <tab> FROM TABLE <itab>.

Si SY-SUBRC = 0. Registros insertados.

Si existe algún registro en la BD (Base de Datos) con clave igual a algún registro de la Tabla Interna, se producirá un error de ejecución del programa. (Por registro duplicado).

UPDATE: Permite modificar el contenido de uno o varios registros.

UPDATE <tab>.

Modifica el registro de la Tabla del Diccionario de Datos que está especificado en la estructura <tab>.

Si queremos modificar el contenido de más de un registro a la vez:

UPDATE <tab> SET <campo>=<valor> WHERE <cond>.

Con este UPDATE, todos los registros que cumplan <cond> modificarán el contenido del <campo> por <valor>.

Es posible modificar registros desde una Tabla Interna:

UPDATE <tab> FROM TABLE <intab>.

Si el sistema no puede actualizar un registro, el proceso no finalizará sino que continuará con el siguiente registro.

Si SY-SUBRC = 0. Todos los registros modificados.

Si SY-SUBRC = 4. No todos los registros han sido modificados.

!26

Page 27: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

En SY-DBCNT Tendremos la cantidad de registros modificados.

MODIFY: Se utiliza cuando no se sepa con certeza si un registro existe o no, para modificarlo o añadirlo.

MODIFY <tab>.

MODIFY <tab> FROM TABLE <intab>.

NOTA: En caso de conocerse la existencia o no de un registro, se recomienda utilizar INSERT o UPDATE.

DELETE: Se utiliza para realizar borrados de datos en una BD del Diccionario.

DELETE <tab>. Borrará el registro que especifiquemos en el área de trabajo.

DELETE FROM <tab> WHERE <cond>. Para borrar más de un registro (todos los que cumplan la condición <cond>).

DELETE FROM <tab> FROM TABLE <itab>. Pa r a b o r r a r e n l a Ta b l a Transparente <tab>, todos los registros contenidos en la Tabla Interna <itab>.

Si SY-SUBRC = 0. Todos los registros han sido borrados.

Si SY-SUBRC = 4. No todos los registros han sido borrados.

En SY-DBCNT tendremos la cantidad de registros borrados.

!27

Page 28: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Otros aspectos del Diccionario de Datos.

El control de mandante (ese numerito que representa el sistema al que estamos conectados), es automático. Siempre se procesará el mandante en uso; en caso de requerir procesar datos de otro cliente/mandante diferente al que estamos conectados, utilizaremos la instrucción CLIENT SPECIFIED en nuestras consultas al Diccionario.

Debemos evitar el uso de las instrucciones INSERT, DELETE, MODIFY y UPDATE sobre las Tablas de Datos Maestros del Diccionario; si requerimos hacer un cambio a nivel de datos, éstos se harán vía Transacciones estándar, Módulos de Funciones (BAPI) o Bath Input; ya que los datos que se guardan en una transacción suelen estar replicados en diferentes Tablas (Modelo de BD Relacional), y si modificamos el contenido de una Tabla en particular, podríamos generar inconsistencias importantes en el sistema.

Actualización de la Base de Datos.

Si deseamos forzar un cambio que afecta alguna tabla de la Base de Datos, debemos ejecutar la sentencia COMMIT WORK en nuestros Programas, esta sentencia realiza un UPDATE físico en la BD, haciendo irrevocable cualquier modificación.

Si deseamos deshacer los cambios hechos luego del último COMMIT WORK, utilizaremos la sentencia ROLLBACK WORK, esta sentencia nos reversa los cambios hasta el estado en que se encontraban tras el último COMMIT WORK ejecutado.

Chequeo de autorizaciones.

Todas las consultas SQL en SAP no realizan verificación alguna sobre autorizaciones de usuarios, siendo esto algo que debemos controlar para evitar que todos los usuarios puedan acceder a determinado tipo de información.

Este control es responsabilidad del consultor ABAP, determinar si un usuario tiene o no autorización a nuestros desarrollos.

Para determinar la autorización de los usuarios en nuestros desarrollos se utilizará el siguiente trozo de código:

!28

Page 29: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

AUTHORITY-CHECK.

AUTHORITY-CHECK OBJECT <objeto_de_autorización>

ID <Campo1> FIELD <f1>

ID <Campo2> FIELD <f2>

ID <Campo3> DUMMY.

...

Esto se conoce como OBJETO DE AUTORIZACIÓN o AUTHORITY-CHECK, en el uso diario solemos escucharlo de ambas maneras, veamos los campos que contiene:

<CampoX> son los campos de autorización del objeto. (se le indica sobre que campos del sistema se va a evaluar la autorización).

<fX> son los valores posibles de autorización de dichos campos. (leer, modificar, ambos, ninguno).

DUMMY es un parámetro que indica que no es necesario verificar este campo.

Si al procesar el objeto, el campo del sistema SY-SUBRC es igual a 0, es que el usuario está autorizado a ver/procesar la información, de lo contrario, indica que no tiene los permisos para ello.

Lo común es que en nuestros desarrollos, indiquemos este Objeto al comienzo del mismo, y luego verifiquemos el SY-SUBRC, permitiendo continuar con la ejecución solo si el valor del campo es 0.

Veamos un ejemplo de cómo se llenan los campos para el Objeto de Autorización:

Vamos a verificar el Authority Check “Acreedor: Autorizaciones para Sociedades” para saber si un usuario puede visualizar Proveedores en la Sociedad 0001.

Este Objeto de Autorización estándar se llama ‘F_LFA1_BUK’.

La operación Visualizar responde al código ‘01’ y el campo sobre el cual queremos evaluar la propiedad de visualización se llama ‘ACTVT’. El campo Sociedad, por su parte, se llama ‘BUKRS’.

!29

Page 30: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Así quedaría el Authority Check:

AUTHORITY CHECK OBJECT ‘F_LFA1_BUK’

ID ‘ACTVT’ FIELD ‘01’

ID ‘BUKRS’ FIELD ‘0001’.

Con esto cubrimos el apartado del Diccionario de Datos, el siguiente tema a estudiar serán las Tablas Internas.

!30

Page 31: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

Adquiere el Libro en Amazon Has leído hasta aquí una primera parte del libro, que consiste en los siguientes apartados:

• Día 0: Características del Lenguaje ABAP. • Día 1: Tipos de Datos en ABAP. • Día 2: Diccionario de Datos.

Aún nos queda por cubrir los siguientes puntos:

• Día 3: Tablas Internas. • Día 4: Entorno de Programación. • Día 5: Sub Rutinas. • Día 6: Módulo de Funciones. • Día 7: Reportes o Informes. • Recursos Recomendados y Regalo Adicional.

Ya viste la calidad del contenido, no te puedes quedar con la información a media.

Para poder acceder a estos contenidos, puedes acudir al siguiente enlace para comprar el libro.

Adquiere aquí el libro Aprende ABAP en 7 días.

!31

Page 32: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!32

Page 33: – AprendeABAP en 7 días · – AprendeABAP en 7 días Agradecimientos. A mi familia, por ser acompañantes silenciosos en esta aventura. A todos los compañeros de trabajo que

www.aprendeabap.com – AprendeABAP en 7 días

!33