dimension.utils

Gestionar Dimensiones Financieras en MSDyn365FO con X++

Con la llegada de la versión 2012 de Microsoft Dynamics AX hubo un importante cambio en la forma en la que el ERP gestiona las Dimensiones Financieras. El modelo de datos cambió significativamente y con él, el modo en que nosotros, como desarrolladores, getionábamos y trabajábamos con ellas a través de X++. Dynamics 365 for Finance and Operations ha sido continuista en este aspecto, y la forma de trabajar con ellas es prácticamente la misma.

La principal diferencia que encontramos con este cambio fue que, mientras que en la versión 2009 o anterior teníamos limitado el número de dimensiones que podíamos utilizar en 10, en AX 2012 y MSDyn365FO ese límite desaparece. A nivel técnico, antes trabajábamos con un enumerado (SysDimension) para controlar las distintas dimensiones, y un EDT de tipo Array para almacenarlas, de forma que, si queríamos acceder a ellas, solo teníamos que acceder a los elementos de ese array para obtener los valores. Ahora, estas dimensiones vienen creadas directamente en base de datos, y la forma en la que se almacenan nos podrían recordar más a las dimensiones de inventario que ha utilizado históricamente el ERP, de forma que, lo que hacemos es almacenar posibles combinaciones de los distintos valores de las dimensiones, y utilizar un valor único (RecId) de esa combinación para asignar las dimensiones al registro correspondiente.

Este cambio, obviamente, abre muchísimo el abanico de posibilidades para explotar la información financiera a través de las dimensiones, pero, para los técnicos, supuso un pequeño dolor de cabeza el aprender a gestionar esta nueva estructura de dimensiones, es por ello, que quiero compartir con vosotros unos cuantos métodos que utilizo en todos los proyectos en los que participo, y que hacen que me olvide de esta gestión, facilitando mucho el uso de estas dimensiones. Podéis descargar esta clase directamente desde mi cuenta de GitHub y a continuación paso a explicaros su funcionamiento.

Como decía, antes gestionábamos las dimensiones a través del enumerado SysDimension, pero ahora, trabajamos con estas dimensiones por medio de su nombre, que viene dado por la persona que las crea o modifica, por lo que, lo primero que hacemos, es crear una serie de variables constantes estáticas que nos permitirán utilizar los nombres de las dimensiones en cualquier punto de la aplicación.
Importante: Si en algún momento se añade o modifica el nombre de alguna de las dimensiones es imprescindibles venir a esta clase y cambiar su nombre. Lo bueno es que estará centralizado y el cambio será mínimo. ¡¡¡No utilicéis el literal del nombre a discreción en todos los sitios!!!

JATDimensionUtils

De este modo, cada vez que quiera utilizar el nombre de una dimensión solo tendré que utilizar la siguiente sintaxis:

Ahora os voy a mostrar los distintos métodos que tengo dentro de esta misma clase y que me facilitan la vida.

GetDimensionAttributeValueSetId

Este método nos permitirá obtener el DefaultDimension dado un container con las dimensiones que queremos asociar al registro. Nos sirve por ejemplo para asociar dimensiones a la cuenta o cuenta de contrapartida de una línea de diario cuando son de tipo Vend, Cust, Bank…
Parámetro: Container con el total de dimensiones, seguido del nombre y valor de la dimensión.
Retorno: RecId asociado a la combinación de dimensiones obtenidas por parámetros.

GetLedgerDimensionId

Este método nos permitirá obtener el LedgerDimension dado un container con la cuenta contable (MainAccount) y las dimensiones que queremos asociar al registro. Nos sirve por ejemplo para asociar dimensiones a la cuenta o cuenta de contrapartida de una línea de diario cuando son de tipo Ledger.
Parámetro: Container con el MainAccount, seguido del nombre y valor de la dimensión.
Retorno: RecId asociado a la combinación de cuenta y dimensiones obtenidas por parámetros.

ChangeDimensionValue

Este método nos permitirá modificar los valores de algunas de las dimensiones que ya tiene asociadas el registro.
Parámetro: RecId de las dimensiones que ya tiene asociadas el registro y Container con los pares Nombre y Valor de las dimensiones que se quieren modificar.
Retorno: RecId de la combinación de dimensiones antiguas y nuevos valores asociados al registro.

GetDimensionValue

Este método nos permitirá obtener el valor de una dimensión concreta asociada al registro.
Parámetro: RecId de la combinación de dimensiones asociadas al registro y nombre de la dimensión que se quiere obtener.
Retorno: Valor de la dimensión requerida.

CheckDimensionValue

Con este método seremos capaces de validar si un valor concreto existe en una dimensión concreta, independientemente de si estas dimensiones son estándar o personalizadas.
Parámetro: Nombre y valor de la dimensión que queremos validar.
Retorno: Booleano que indicará si este valor existe o no en la dimensión indicada.

Y hasta aquí mi pequeña ayuda para trabajar con dimensiones. Cualquier corrección, aporte, idea o comentario será más que bienvenido. Saludos!


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload CAPTCHA.

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

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies