Está en la página 1de 4

MANUALES Y TUTORIALES WWW.MUNDOSAP.

COM

OPTIMIZAR EL CÓDIGO EN ABAP

En esta sección pretender ser una ayuda de como optimizar el código de los programa ABAP/4. Primero haré
una introducción de como se han de diseñar los programas y seguidamente que instrucciones y como
utilizarlas (esto parte es básica para conseguir un programa optimizado). Para ver todos los "Tips & Tricks"
tenemos que ir a la transacción SE30.

Líneas ha seguir para conseguir un buen programa

• Evitar códigos muertos..


• Eliminar código innecesario y/o procesos redundantes.
• Es bueno documentar los programas o insertar comentarios en los programas. Importante también
notificar los cambios que se realicen en el programa.
• Perder tiempo en analizar lo que se necesita, que procesos utilizaremos y que tipo de datos y
estructura vamos a utilizar.
• Tener un plan adecuado para planear las pruebas que se van hacer al programa.

Instrucciones que hacen que un programa sea más optimo

LENTO RÁPIDO

SELECT * FROM <TABLA> SELECT * FROM <TABLA>


CHECK: <CONDITION> WHERE <CONDITION>
ENDSELECT ENDSELECT

Siempre que se pueda hay que poner las condiciones en los claúsula WHERE. Otro que penaliza el rendimiento es utilizar los
operador OR, NOT e IN. Lo que mejora el rendimiento es el operador EQUAL o "=".

SELECT * SELECT SINGLE *

La diferencia es que el SELECT SINGLE *. requiere una comunicación la base de datos y el SELECT * requiere dos
comunicaciones con la base de datos.

SELECT * FROM <TABLA> INTO <INT-TAB>


APPEND <INT-TAB> SELECT * FROM <TABLA> INTO TABLE <INT-TAB>
ENDSELECT
MANUALES Y TUTORIALES WWW.MUNDOSAP.COM

Con la cláusula INTO TABLE ya realiza un APPEND en el SELECT

SELECT ... WHERE + CHECK SELECT usando una función

Cualquier función que pongamos en la cláusula SELECT (SUM, MIN, ETC...) es más rápido que la mismas funciones puesto
dentro del SELECT.

SELECT INTO TABLE <INT-TAB> + LOOP AT T


………… SELECT * FROM <TABLA>
SELECT * FROM <TABLE> INTO TABLE <INT-TAB>. ……….
LOOP AT <INT-TAB>. ENDSELECT
ENDLOOP.

Es siempre más rápido tratar los datos directamente en un SELECT que almacenar los datos en una tabla interna y después tratar
dichos datos.

SELECT * FROM <TABLA-A>


SELECT * FROM <TABLA-B>
SELECT * FROM <VISTA>
……..
ENDSELECT
ENDSELECT.
ENDSELECT

Si se accede muy a menudo a diversas tablas es más recomendable hacer una vista de dichas tablas que es más rápido.

SELECT persnr FROM pers INTO TABLE ipers WHERE cond.


SELECT * FROM pers WHERE condición.
……….
SELECT * FROM persproj WHERE person = pers-persnr.
SELECT * FROM persproj FOR ALL ENTRIES IN ipers
... proceso ...
WHERE person = ipers-persnr
ENDSELECT.
………... proceso .……………
ENDSELECT.
ENDSELECT.

Con la opción ALL ENTRIES se consigue que las entradas que nos interesen del primer SELECT se busque en el segundo, por lo
tanto el segundo SELECT solo se ejecutaría una vez.

SELECT * FROM <TABLE> SELECT <columna(s)> FROM <TABLE>

Es recomendable y más rápido indicar en el SELECT que campos queremos leer.


MANUALES Y TUTORIALES WWW.MUNDOSAP.COM

SELECT sin tabla para soporte de buffer SELECT con tabla para soporte de buffer

Utilizando el SAP-Buffering conseguimos una reducción de la actividad de la base de datos y de la red.

LOOP AT <INT-TAB>
INSERT INTO <TABLE> VALUES <INT-TAB> Inserción directa. Ej: t1[ ] = t2[ ]
ENDLOOP

Es más rápido insertar directamente los contenidos de una tabla a otra que utilizar un loop para ellos.

SELECT * FROM <TABLA>


<COLUMNA-MODIFICAR STATEMENT> UPDATE <TABLA> SET <INSTRUCCIÓN COLUMNA-
UPDATE <TABLA> MODIFICAR >
ENDSELECT

Es más óptimo utilizar la instrucción UPDATE para modificar un campo o varios campos.

DO....ENDDO loop con Field-Symbol Usando el operador CA

El utilizar los operadores CO, CA, CS conseguimos que la CPU trabaje menos.

Usar la función CONCATENATE Utilizar la instrución CONCATENATE

Es más rápido utilizar instrucciones del sistema que funciones del sistema, e aquí un ejemplo:
STRING_CONCATENATE... ---> CONCATENATE
STRING_SPLIT... ---> SPLIT
STRING_LENGTH... ---> strlen()
STRING_CENTER... ---> WRITE..TO. ..CENTERED
STRING_MOVE_RIGHT ---> WRITE...TO...RIGHT-JUSTIFIED

Moviendo con offset Utilizando la instrucción CONCATENATE

Es más rápido utilizar la sentencia CONCATENATE que programar un tratamiento de un string realizado por nosotros.

Usar SEARCH y MOVE con offset Instrucción SPLIT


MANUALES Y TUTORIALES WWW.MUNDOSAP.COM

Utilizar el SPLIT es más rápido que programar un tratamiento de un string realizado por nosotros.

Cambian posiciones con SY-FDPOS Usando SHIFT...LEFT DELETING LEADING...

Es más rápido borrar espacios en blanco con la derecha con SHIFT...LEFT DELETING LEADING... que utilizar la instrucción
CONDENSE

Contar los caracteres con field length Contar los caracteres con STRLEN()

Siempre es más rápido utilizar funciones del sistema que programar para hacer un determinado tratamiento de un string.

También podría gustarte