Acceso a datos entre empresas en Dynamics NAV

Acceso a datos entre empresas con Dynamics NAV

Jose Carlos Herrero Tutoriales Leave a Comment

Una de las peticiones más habituales entre nuestros clientes de Dynamics NAV es poder ver información de otras empresas desde aquélla en la que estamos accediendo. Se suele dar el caso de un grupo de empresas en el que se necesita la información del stock de todas ellas, o una empresa que compra a otra del grupo y se requiere ver en la venta si tiene stock disponible en la asociada.

Este requerimiento se puede resolver mediante programación haciendo uso de la función CHANGECOMPANY. Los parámetros y las indicaciones de uso son las siguientes:

  • Redirecciona la referencia de la tabla de una empresa a otra.

[Ok :=] Record.CHANGECOMPANY([CompanyName])

  • Parameters

Record

Type: Record

La tabla a la que quieres acceder desde otra empresa.

CompanyName

Type: Text or code

El nombre de la empresa a la que quieres apuntar. Si omites este parámetro vuelves a posicionarte en la empresa desde la que se ejecuta el código.

Property Value/Return Value

Type: Boolean

Verdadero si encuentra la empresa a donde reposicionarse.

Si se omite el resultado de la llamada y no puede encontrar la empresa se da un error en tiempo de ejecución

  • Observaciones

Cuando se ejecuta la función el usuario tiene que tener permisos para acceder a los datos. La función CHANGECOMPNAY no está afectada por la función RESET. La función RESET se aplica a filtros y CHANGECOMPANY no es un filtro.

  • Importante

Incluso si has ejecutado la función CHANGECOMPNY los desencadenadores (triggers) se ejecutan en la empresa desde la que se lanza, no en la empresa especificada en la función CHANGECOMPANY.

  • Ejemplo

Si tenemos la empresa TEST_A y la empresa TEST_B y ejecutamos el siguiente código desde la empresa TEST_A.

Item.CHANGECOMPANY(TEST_B);

Item.INIT;

Item.”No.” := ‘’;

Item.INSERT(TRUE);

El código del insert:

OnInsert()

IF “No.” = ” THEN BEGIN

  GetInvtSetup;

  InvtSetup.TESTFIELD(“Item Nos.”);

  NoSeriesMgt.InitSeries(InvtSetup.”Item Nos.”,xRec.”No. Series”,0D,”No.”,”No. Series”);

END;

Se ejecuta en la empresa TEST_A a todos los efectos. Es decir, la serie la va a buscar en la empresa TEST_A y las funciones y registros que mire serán todos de la empresa TEST_A y no de la empresa TEST_B.

Los campos calculados hacen referencia a otras tablas por lo que se aplica la anterior limitación. Cuando llamamos a CALCFIELDS se va a aplicar siempre a la empresa desde la que se lanza el código, no a la empresa indicada en la función CHANGECOMPANY.

La limitación de los disparadores cómo el INSERT requiere mucho código para hacer una redirección a la empresa a la que queremos reposicionarnos, por lo que vamos a dejar cómo solucionar ese punto para otro artículo. La limitación de los CALCFIELDS es más fácil de solventar. Vamos a ver un ejemplo de función que con un par de parámetros nos va a dar las existencias de la empresa que queramos.

  • Ejemplo

GetInvCompany(ItemNo : Code[20];CompName : Text[30]) : Decimal

ItemLedgEntry.CHANGECOMPANY(CompName);

ItemLedgEntry.SETCURRENTKEY(“Item No.”,Open,”Variant Code”,Positive,”Location Code”,”Posting Date”);

ItemLedgEntry.SETRANGE(“Item No.”,ItemNo);

ItemLedgEntry.CALCSUMS(Quantity);

EXIT(ItemLedgEntry.Quantity);

 

Vamos a hacer un ejercicio con toda esta información para entender mejor el funcionamiento. El ejercicio va a ser lo siguiente:

Ejercicio: Informe que muestre el nombre de la empresa, el código del producto, la descripción del producto y las existencias

1. Creamos una estructura sencilla de Report, con la tabla Company como Dataitem principal y la tabla Item como Dataitem dependiente de Item.

Acceso a datos entre empresas en Dynamics NAV

2. Para mostrar las existencias creamos una variable de tipo Decimal.

Acceso a datos entre empresas en Dynamics NAV

3. Para el cálculo de las existencias creamos una función.

Acceso a datos entre empresas en Dynamics NAV

4. Añadimos unas líneas de código.

Acceso a datos entre empresas en Dynamics NAV

5. Creamos una estructura sencilla con el asistente.

Acceso a datos entre empresas en Dynamics NAV

6. Probamos que está todo correcto.

Acceso a datos entre empresas en Dynamics NAV

 

Jose Carlos Herrero
Dynamics

 

 

Deja un comentario