domingo, 30 de diciembre de 2007

Determinación de condiciones

A veces estamos parametrizando condiciones de precios, o condiciones de salida, y necesitamos que un campo "Z" que nos hemos creado nosotros sirva como criterio para la determinación de dicha condición.

Si vamos a la parametrización estándar de dicha condición, siempre podemos elegir entre un catálogo de campos (Field Catalog) bastante amplio, que nos da mucho juego a la hora de elegir los criterios de determinación.

¿Y qué pasa si el campo que nosotros necesitamos no está entre los disponibles del Field Catalog?
Pues que nos toca añadirlo. Y como suele pasar en SAP, pues para algunas condiciones si está el punto de parametrización que te permite hacerlo (en SD algunas), pero para otras no (por ejemplo output determination de MM).

Solución, meter el campo a las bravas. Para ello tenemos que ir a la vista de actualización (SM30) de la tabla V_T681F. Y allí introducir el nuevo campo que nos hace falta. Grabas y ya lo tendrás disponible en el field catalog de la parametrización estándar.

Ordenes de transporte con datos de una tabla

Muchas veces nos vemos en el aprieto de que unos datos de una tabla han ido a productivo y no se sabe muy bien que orden de transporte ha sido la causante del pequeño desastre.

Pues hay una salida, hay que buscar la orden en la que han ido esos datos en SAP de la siguiente manera:

Hacer una búsqueda de las ordenes que tengan el objeto R3TR TABU con el nombre de la tabla que estemos buscando.
Con el listado de ordenes que nos salgan nos vamos a la transacción SE16 y buscamos en la tabla E071K con los siguientes criterios:
  • Request/task (E071K-TRKORR): El listado del paso anterior
  • Program ID (E071K-PGMID): R3TR
  • Object type (E071K-OBJECT): TABU
  • Table name (E071K-OBJNAME): Nombre de la tabla
  • Object name (E071K-TABKEY): la clave de los datos que buscamos

martes, 9 de octubre de 2007

F1 en un campo

En SAP cuando pulsas F1 sobre alguno de los campos de una pantalla, por ejemplo numero de pedido en la transacción VA03, aparece una ventana emergente con información sobre ese campo.

Dicha ayuda es una especie de Sapscript, que se puede definir también para los campos no estándar que se creen, para así aportar información al usuario cuando utilice dichos campos tal y como hace SAP estándar.

Ahora, la pregunta es: ¿donde se almacena dicha información?
Pues ha habido suerte, dicha información se almacena en la tabla DOKTL. Una tabla transparente que contiene el contenido de esas ventanas de ayuda, línea a línea.

Gracias a Alfonso por despertar esta duda y por auto responderse.

lunes, 19 de febrero de 2007

Función llamada en UPDATE TASK

Muchas veces tenemos que comprobar en nuestro código ABAP, si nuestro programa se está ejecutando en fondo. Para ello nos valemos de la variable de sistema sy-batch, y de este modo evitamos lanzar cuadros de diálogo cuando un programa se esta ejecutando en fondo, ya que esto provocaría la terminación inmediata de dicho programa con un DUMP breve.

Esto es bien sabido por todos los programadores y raro es el programa que te encuentras que no controle este error; pero muy distinto es el caso de los módulos de funciones que son ejecutados en "UPDATE TASK", es decir, en proceso de actualización.

Cuando se hace una llamada a un módulo de funciones de la siguiente manera:

CALL FUNCTION funcion IN UPDATE TASK

Este módulo de funciones se ejecutará cuando el programa en cuestión este actualizando, básicamente cuando se haga un COMMIT.


En estos casos tampoco está permitido hacer llamadas a cuadros de diálogo, ni llamadas a otras transacciones mediante CALL TRANSACTION. En caso de que dentro de una de estás funciones se haga una llamada de este tipo, el programa terminará de manera inmediata con un DUMP breve.

Para controlar si estamos dentro de una función que haya sido llamada en UPDATE TASK, deberemos añadir un control mediante cualquiera de las dos siguientes fórmulas:

  1. Comprobando que SY-ONCOM <> 'V'.
  2. Con la función TH_IN_UPDATE_TASK.

Por lo tanto y como norma general cada vez que creemos un módulo de funciones que vaya a ser llamado en UPDATE TASK, además de marcarlo como tal en los atributos de dicho módulo de funciones, deberemos comprobar cada vez que vayamos a mostrar un cuadro de diálogo, o un CALL TRANSACTION, que no se haya llamado a dicho módulo de funciones en UPDATE TASK. Así siempre tendremos aislados este tipo de errores.

lunes, 12 de febrero de 2007

Fecha de vencimiento / Due date

Cuando quieras calcular la fecha de vencimiento igual que hace la FBL5N hay que utilizar la siguiente función:

call function 'DETERMINE_DUE_DATE'
EXPORTING
i_faede =
i_gl_faede = 'X'
IMPORTING
e_faede =
EXCEPTIONS
others = 1

La determinación de la fecha de vencimiento se basa en los campos SHKZG (Indicador debe/haber), KOART (Clase de cuenta) y ZFBDT(Fecha base para cálculo del vencimiento).