Truco 67. Valores por defecto al crear Proveedores (o Clientes) en SAP.


Un requerimiento muy habitual en cualquier proyecto de implantación o de mantenimiento de Sap es la posibilidad de inicializar con valores por defecto determinados campos en el maestro de Proveedores o de Clientes en el momento de crearlos. Además, es posible que estos valores tengan dependencia de otros campos del maestro que es posible controlar (por ejemplo, según la Sociedad, Organización de Compras, Organización de Ventas, Grupo de Cuentas, etc).

Si lo que necesitamos hacer es muy genérico, con valores por defecto sin ninguna lógica de control, podríamos utilizar las variantes de transacción para inicializar valores por defecto en determinados campos de las pantallas de las transacciones. Podéis ver las siguientes entradas que hablan sobre ello y la forma de crear variantes de transacción.

Pero realmente las variantes de transacción son difíciles de configurar y poco flexibles para luego hacer cambios. Por tanto, si ademas de eso tenéis pensado incluir una lógica inteligente en esta asignación inicial de valores por defecto, yo os recomiendo utilizar la adaptación del sistema que Sap nos habilita para este caso, en concreto:

  • BADI: VENDOR_ADD_DATA
  • Metodos:
    • PRESET_VALUES_CCODE: para inicializar valores en la información de sociedad (tabla LFB1).
    • PRESET_VALUES_PORG: para inicializar valores en los datos de organización de compras (tabla LFM1).
    • PRESET_VALUES_PORG_ALTERNATIVE: para inicializar valores en los datos de organización de compras, para los datos divergentes por centro/surtido de proveedor (tabla LFM2).

bapi proveed1

Podéis consultar las definiciones de la BADI con la transacción SE18, así como la documentación asociada a cada método.

El procedimiento para implementar la BADI en nuestro sistema sería el siguiente:

  1. Creación de la implementación propia de la BADI con la transacción SE19.
  2. Programación del código necesario en el Método.
  3. Validación y pruebas.

Creación de la implementación propia de la BADI con la transacción SE19.

Desde la transacción SE19 creamos la implementación de la BADI VENDOR_ADD_DATA, con el nombre oportuno siguiendo las recomendaciones de Sap en cuanto a nomenclatura.

Truco67_2

A continuación indicaremos el nombre de la implementación de la Badi, asi como la clase asociada, enlazándola con la definición de Badi VENDOR_ADD_DATA.

Truco67_3

El sistema nos pedirá el paquete donde queremos incluir los objetos creados, asi como la correspondiente orden de transporte para luego poder pasar las especificaciones a nuestro sistema de productivo.

Programación del código necesario en el Método.

A continuación desde la misma SE19 accederemos a la implementación para acceder al código Abap del método PRESET_VALUES_CCODE, tal y como observamos en la imagen.

Truco67_4

 En mi ejemplo voy a inicializar valores incluidos en los datos de Sociedad del proveedor. Si quisierais actualizar los datos de compras usaríamos el método PRESET_VALUES_PORG en lugar del indicado.

Truco67_5

En el código incluimos la lógica de proceso de la inicialización, teniendo en cuenta que:

  • La variable I_ACTIVITY la actividad que estamos realizando: si estamos en la creación de un proveedor (valor H) o en la modificación (valor V).
  • La estructura I_LFA1 incluye toda la información de los datos generales del proveedor (no modificable).
  • La estructura E_LFB1 incluye los datos de sociedad del proveedor (modificable).

Nota: el método se ejecuta en el evento PBO (Process Before Output) en todas las pantallas donde se encuentran los datos de sociedad.

Validación y pruebas.

A continuación accedemos a las transacciones de creación de proveedores para verificar el correcto funcionamiento del código abap incluido (en este caso, al estar inicializando los datos de sociedad, podriamos utilizar la XK01 o FK01).

En nuestro ejemplo, procedemos a crear un proveedor de un grupo de cuentas 0001. Al llegar a los datos de sociedad, podemos observar como los valores deseados son inicializados según la lógica descrita en el método de la Badi.

Truco67_6

De esta manera, nos aseguramos que determinados campos relevantes se inicialicen con determinados valores al crear los proveedores, siguiendo si es necesario una lógica relevante según los valores de las unidades organizativas  o los valores de otros campos de referencia.

NOTA: si tuviéramos el mismo requerimiento, pero para el maestro de clientes, podríamos utilizar, con la misma lógica para su configuración:

  • BADI: CUSTOMER_ADD_DATA
  • Método: PRESET_VALUES_AREA

 Espero que os sea de interés.

Esta entrada fue publicada en Abap, SAP MM, Sap SD y etiquetada , , , , , , , , , , . Guarda el enlace permanente.

2 respuestas a Truco 67. Valores por defecto al crear Proveedores (o Clientes) en SAP.

  1. Duque dijo:

    Hola buen día Roberto,

    Tengo un problema necesito sabes en que tabla se guardan unos datos que necesito para crear un Query, intento visualizar la tabla con F1 pero es una tabla estructura, me puedes indicar por favor un método efectivo para realizar la búsqueda de la tabla o si de casualidad sabes en que tabla se almacenan los campos RFC y UUID para los CFDI??

    Espero me puedas ayudar de antemano gracias.

  2. Jaione Arizkuren dijo:

    Como se podría inicializar un campo Z que hemos añadido en la LFA1 sin tener que entrar en la dynpro donde se encuentra? Seria inicializarlo con un valor fijo.
    Muchas gracias.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.