Seguro que todos hemos padecido cuando algún cliente nos ha demandado añadir algún campo nuevo en la gestión de las series y lotes para llevarlos a los movimientos de producto y, así, mejorar sus controles internos, funcionabilidad, trazabilidad, etc.
En este artículo veremos cómo desenredar todas las tablas temporales relacionadas (dan algún problema que otro) en las que se sustenta esta funcionabilidad.
A continuación, vamos a ver todos los pasos de forma precisa, clara y ordenada, ya que trabajar con estas tablas sin tener referencias previas es muy lioso, y es fácil que nos equivoquemos.
Para este tutorial vamos a utilizar Visual Studio Code. ¡Vamos a empezar!
1. Extender tablas
Lo primero que podemos pensar es: “creo el campo en la tabla y listo”, ya que solo requerimos el campo, pero no. Tenemos que crear el campo en una serie de tablas para que el proceso que queremos crear se integre, y funcione en perfecta armonía con el estándar de Business Central (que no se os olvide extender las correspondientes páginas donde se muestran esas tablas).
Las tablas que tenemos que extender para poder trabajar con el campo son:
- Entry Summary
- Item Journal Line
- Item Ledger Entry
- Tracking Specification
- Reservation Entry
Aquí tenéis un ejemplo de extensión de una tabla con una variable de tipo texto.
Las páginas correspondientes a las tablas son:
- Item Tracking Summary
- Item Journal Line
- Item Ledger Entries
- Reservation Entries
- Item Tracking Lines
Os dejo por aquí un ejemplo de cómo extender la página para poder visualizar el nuevo campo creado.
2. Crear Codeunit
En este punto es donde todo ocurre, es casi como si fuera magia. Los datos del campo se van transfiriendo de una tabla temporal a otra. Os voy a mostrar cómo hacerlo y cómo poder comprobar el campo en cada una de las fases de la gestión de lotes.
2.1. Página Item Tracking Lines
En esta página tendremos que suscribirnos a 4 eventos:
- OnRegisterChangeOnAfterCreateReservEntry -> Pasamos el campo de la línea de seguimiento de producto (tracking specification) a movimiento de reserva (reservation entry), y aplicamos Modify a movimiento de reserva.
- OnAfterCopyTrackingSpec -> Transferimos el campo de la línea de seguimiento de producto (origen) a la línea de seguimiento de producto (destino).
- OnAfterEntriesAreIdentical -> Comprobamos que ReservEntry1 y ReservEntry2 sean iguales.
- OnAfterMoveFields -> Copiamos el campo de la línea de seguimiento de producto (tracking specification) a movimiento de reserva (reservation entry).
2.2. Codeunit Item Jnl.-Post Line
Además, en esta Codeunit también nos suscribiremos a 3 eventos más:
- OnBeforeInsertSetupTempSplitItemJnlLine -> Transferimos el campo de la línea de seguimiento de producto (tracking specification) a la línea de diario de producto (item journal line).
- OnAfterInitItemLedgEntry -> Transferimos el campo de la línea de diario de producto (item journal line) a los movimientos de productos (item legder entry).
- OnBeforePostItemJnlLine -> Comprobamos que no podemos recuperar los movimientos de productos (item legder entry) desde la línea de diario de producto (item journal line). Comprobamos en la línea de diario de producto que no se aplique desde ningún movimiento(entry), ni a ningún movimiento. Si se cumplen todos los requisitos entonces transferimos el campo desde los movimientos de productos a la línea de diario de producto.
2.3. Codeunit Item Tracking Data Collection
Y, para finalizar, en esta Codeunit nos suscribiremos a estos últimos 3 eventos:
- OnAfterAssistEditTrackingNo -> Transferimos el campo de Tracking Specification a Entry Summary
- OnAfterCreateEntrySummary2 -> Transferimos el campo de Reservation Entry a Entry Summary y aplicamos Modify a Entry Summary
- OnTransferItemLedgToTempRecOnBeforeInsert -> Transferimos el campo de Item Ledger Entry a Reservation Entry
2.4. Extras
Os dejo por aquí una función auxiliar que te vendrá genial para recuperar el nuevo campo que hemos creado.
También necesitarás modificar la función de asignar número de lote para que también se transfiera el nuevo campo, ya que este no se encuentra en el código básico de Business Central, para ello nos aprovecharemos de la función anterior.
Si todavía te has quedado con ganas de más y quieres sacarle el máximo partido a tu Business Central, ¡no dudes en contactarnos! En Aitana contamos con un grupo de expertos dispuestos a asesorarte en las mejores soluciones para tu negocio. ¿A qué esperas?
Omar Doussas
Business Applications
Consulta tus dudas sin compromiso
(o deja un comentario más abajo)