Nuevo procesamiento de precios BC

-Business Central está en continuo desarrollo, prueba de ello están las diferentes nuevas funcionalidades y nueva forma de plantear la funcionalidad ya existente. Comentamos en otro artículo como acceder y habilitar los nuevos desarrollos que propone Microsoft para su ERP, para poder hacer un testeo y para ver cómo funcionan sus nuevas características. Paso a documentar una nueva forma de calcular los precios en BC, que se basa en un nuevo tipo de objeto que están empezando a implementar en su código del estándar. Dicha funcionalidad o característica, está disponible desde la versión lanzada el día 16 de Noviembre de 2020, y que pasará a ser un cambio real en la segunda ola de la versión de BC de 2022. 

Esta nueva forma de calcular los precios se basa en un tipo objeto que están empezando a implementar, llamado Interface y que es muy potente a la hora de utilizarlo, ya que mediante esta nueva herramienta podremos usar el mismo código para desarrollar otros comportamientos del mismo. Introducimos así un nuevo concepto llamado polimorfismo, hasta ahora no utilizado para el desarrollo del ERP de Microsoft, y que abre un mundo de posibilidades. Para poder utilizar este nuevo método, como en el anterior artículo desarrollo, tendremos que activarlo desde la página 2610 (Administración de características), el cual tiene que ser habilitado por un administrador para todos los usuarios.

 

Para facilitar la comprensión de todo este proceso, resumiré brevemente en qué consiste una interface. Una interfaz en Al, es similar a una interfaz en otro lenguaje de programación, es usado cuando necesitas declarar las capacidades de un objeto, para definir después sus diferentes comportamientos. Esto, permite reutilizar código, y soporta el polimorfismo a la hora de llamar a métodos del objeto. Un objeto de tipo interface, sólo contiene las funciones del mismo con el cuerpo vacío, ya que este, se irá rellenando cuando creemos las diferentes codeunits con las diferentes características para ir creando, por así decirlo, perfiles de esta interfaz. Para esta nueva funcionalidad, se han creado varias interfaces, pero la más importante es “Price Calculation”, de la cual pondré a continuación una captura para ver la estructura:

Como vemos, consta de varias funciones, a las que podremos meterle variables o no, dependiendo si se requieren para dicha función. Siempre se crearán vacías, ya que como he dicho antes, es como una estructura, en la que, dependiendo de si la queremos usar para una cosa u otra, se ejecutará código distinto. 

Una vez tenemos claro el concepto de lo que es y para que se utiliza una interfaz, procedo a ver el modo de implementación de la misma, ya que tendremos que crearnos tantos perfiles de esta interfaz como nosotros queramos, de modo que podremos elegir la que queramos en cualquier momento dependiendo de las necesidades. Para la implementación, simplemente tendremos que crearnos una codeunit con un nombre identificativo y a la hora de declararlo, indicar que implementa la interfaz de la que “depende”, a modo de ejemplo muestro una captura de la codeunit 7002, la cual es la usada por el estándar para incorporar la nueva funcionalidad de calcular los precios:

Una vez declarada la codeunit que implementa una interfaz, tendremos que llamar a todos los procedimientos que tenga esta creada, si fuera de otra manera, nos saltará un error. Podremos implementarlos fácilmente, ya que nos aparecerá una bombilla, y una vez hagamos click, sólo tendremos que seleccionar “implement interface” y se nos crearán vacíos. Ahora, sólo faltará personalizar cada función para que se ejecute lo que deseemos. Para la nueva funcionalidad, el estándar trae varias codeunits que implementan esta nueva interfaz, las cuales recogen en un objeto Enum llamado “Price Calculation Handler” con Id 7011, con el siguiente código: 

 

 

Como podemos ver, si no está definido en la configuración, por defecto cogerá la interfaz de la versión 15, la cual notifica que será reemplazada por la versión 16 próximamente. A esta configuración podremos acceder buscando en nuestro BC “Método de cálculo de precios”, donde podremos seleccionar la implementación que nosotros queramos tanto para precios de venta como de compra. También podremos acceder, buscando “Implementaciones de cálculo de precios”, desde donde podremos seleccionar el predeterminado que queramos.

Crear nuestra propia interfaz

Para crear nuestra interfaz a la hora de calcular los precios, tendremos, primero, que crear una extensión del objeto Enum “Price Calculation Handler”, donde indicaremos el nombre de nuestra codeunit que ahora pasaremos a crear, pero primero, voy a mostrar la extensión del Enum para su comprensión: 

En este caso, como este documento es para fines explicativos, voy a crear mi codeunit con el nombre personalizado, pero haré una copia de la versión 16 que nos trae la nueva funcionalidad de Business Central, quedando algo así:

Con estos dos archivos, una vez compilemos nuestro código, podremos seleccionar esta nueva implementación en la página antes mencionada de método de cálculo de precios:

A continuación, seleccionamos nuestra implementación:

Funcionalidad

Haciendo referencia a la funcionalidad dentro del sistema, hay que dejar claro que mediante estas interfaces podremos controlar todo a la hora de calcular los precios y de asignar el que queramos para cada producto y cliente en función de cómo lo desarrollemos, ya que la interfaz “Price Calculation” nos permite dar peso al precio del producto al nivel que nosotros deseemos. Recordemos que podremos hacer tantas implementaciones de esta interfaz como queramos. Para configurar esta nueva funcionalidad ya podemos acceder a la “lista de precios de venta” y “lista de precios de compra”.

Por ejemplo, nosotros podemos asignar a un producto varias líneas de precio de venta, tanto por producto y cliente, como por grupos de clientes (tabla Price List Line 7001):

De esta forma, se pueden crear precios para todos los usuarios:

 

O para grupos de usuarios, los cuales, se asignan en la propia ficha del cliente en la sección de facturación:

 

En este punto, tendríamos asignado para el mismo cliente diferentes precios del producto que vemos en las capturas, así que, mediante la implementación que hemos seleccionado en la página de método de calculo de precios, asignará más peso al precio de producto que hayamos indicado en la función adecuada en nuestra implementación, ya que le llega tanto el precio de la ficha del producto, y las líneas de la tabla “Price List Line”. Automáticamente, cuando vayamos a hacer un pedido de venta, en las líneas del pedido, cuando seleccionemos el producto que hemos preconfigurado, se pondrá el precio al que hayamos dado más importancia en la implementación de la interfaz “Price Calculation” seleccionada.

Crear cuenta

¿Ya tienes una cuenta?
Accede o Reestablece tu contraseña