ABAP - Trucos, tips, ...

En esta sección vamos a dar algunos consejos y tips para la programación en ABAP.

Reportes ALV - Detectar errores

Los reportes ALV son muy prácticos porque incluyen varias funcionalidades que de hacerlos con el método tradicional habría que codificar manualmente.

En SAP hay varios ejemplos de las funcionalidades del ALV; todos los ejemplos empiezan con BCALV_TEST_*.

Para que los reportes funcionen correctamente con toda la funcionalidad que proveé la herramienta es necesario que el catálogo y la tabla de salida estén correctamente cargados. Existe una forma para chequear esto último; para los ALV llamados mediante la función REUSE_ALV_LIST* se debe ingresar el valor &SOS en la línea de comandos. Cuando se trate de un objeto ALV o un ALV llamado mediante REUSE_ALV_GRID*, basta con posicionar el puntero en una zona vacía del ALV (sin registros de la tabla de salida) y hacer doble click derecho mientras se presiona la tecla SHIFT.

Cuando ingresamos en el modo de chequeo de consistencia mediante los métodos mencionados el sistema nos indica si hay algún error en la llamada al ALV, y también podemos visualizar los principales parámetros que se le envían al ALV.

Modificar programas con el bloqueo de editor activado

Qué hacer cuando necesitamos modificar un programa que tiene el bloqueo de editor activado? Por lo general, le pedimos a quien lo haya activado, que lo libere. El problema es que por lo general (casi siempre) esa persona ya no está en el proyecto o en el lugar donde estamos.

En ese caso, existe un truco para poder quitar el bloqueo. Desde la SE16, ingresamos a la tabla PROGDIR. En el campo NAME ponemos el nombre del programa que queremos desbloquear. Al traer los registros que cumplen con nuestra selección (F8) aparecerá un registro con el nombre de nuestro programa. Lo seleccionamos y presionamos el lapiz para modificar el registro. Borramos la X que hay en el campo EDTX (que indica que está activado el bloqueol de editor) y grabamos.

Listo! Ahora podemos modificar el programa normalmente.

 

Debug

Como todos sabemos, para realizar un debug en SAP basta con escribir "/h" en la línea de comandos y presionar enter. Pero a veces no tenemos la línea de comandos, así que no podemos empezar a debuggear. En esos casos solemos empezar a debuggear antes del punto que nos interesa, pero con sólo utilizar el siguiente archivo es posible debuggear justo en el momento preciso:

debug.txt

Arrastrar el archivo y soltarlo sobre la dynpro a debuggear.

Crear una transacción para queries de ámbito global

A partir de los queries (de la transacción SQ01) podemos realizar reportes de manera rápida. Sin embargo, para transportarlos correctamente a otros ambientes, debemos crear una transacción particular. No es conveniente crear una transacción que llame al programa que genera automáticamente SAP cuando se crea el query porque el nombre del mismo cambia dependiendo del ambiente. La forma correcta de transportar queries es creando una transacción que llame al programa START_REPORT. La transacción debe ser del tipo "Transacción de parámetros" y hay que cargar los siguientes campos de la dynpro con estos valores:

D_SREPOVARI-REPORT: Nombre del Grupo de Usuarios del Query
D_SREPOVARI-EXTDREPORT: Nombre del query
D_SREPOVARI-REPORTTYPE = AQ (de ABAP Query)

Dependiendo del ámbito funcional (Entorno -> Ámbitos Funcionales) el nombre del grupo de usuarios deberá tener una letra G al fina o nol, es decir, en la posición 12. Por ejemplo, si el grupo de usuarios se llama ZPRUEBA78901, habrá que ingresar ZPRUEBA78901 para ámbito estándar o ZPRUEBA78901G para ámbito global.

Por último, hay que marcar el tilde "Omitir imagen inicial".

 

Cargar una tabla interna dinámicamente con Field-Symbols

En este ejemplo utilizamos Field-Symobs para cargar los campos de una tabla interna de manera dinámica. Esto es muy útil cuando tenemos que tratar una tabla cuya estructura es desconocida en tiempo de programación.

 FIELD-SYMBOLS:
    <campo> TYPE ANY.
  DATA:
    l_preis(13),           "LIKE eipa-preis,
    l_cont(1)   TYPE n,
    l_campo(22).

  LOOP AT ti_eipa.
    l_cont = l_cont + 1.
* Precio.
    CLEAR l_campo.
    WRITE ti_eipa-preis TO l_preis CURRENCY ti_eipa-bwaer.
    CONCATENATE 'P_PREIS' l_cont INTO l_campo.
    ASSIGN (l_campo) TO <campo>.
    <campo> = l_preis.
  ENDLOOP.

F4 dinámico para cualquier campo

Si queremos crear una ayuda (F4) para cualquier campo, basta con utilizar el siguiente código:

DATA: carrid TYPE spfli-carrid, 
      hlp    TYPE string, 
      struc  TYPE dfies-tabname, 
      comp   TYPE dfies-fieldname. 

DESCRIBE FIELD carrid HELP-ID hlp. 

SPLIT hlp AT '-' INTO struc comp. 
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' 
  EXPORTING 
    tabname           = struc 
    fieldname         = comp 
  EXCEPTIONS 
    field_not_found   = 1 
    no_help_for_field = 2 
    inconsistent_help = 3 
    no_values_found   = 4 
    OTHERS            = 5.