#7958
Cristina Nicolàs
Superadministrador

Hola Miguel,

Lo he estado revisando y no hay ninguna opción de configuración que permita cambiar este comportamiento de hacer un pedido por almacén.
Habrá que cambiar el comportamiento a través de un desarrollo.

Si el desarrollo se tiene que hacer en forma de extensiones hay pocos eventos a los que suscribirse, y en concreto no hay ninguno en el punto exacto en el que lo necesitarías.

En la codeunit 333, la función en donde se decide si hay que crear un nuevo pedido o continuar creando líneas en el pedido actual es la función CheckInsertFinalizePurchaseOrderHeader().
Si en esta función se lanzara un evento en el que pudieras cambiar el resultado de si hay que crear nuevo pedido o no, sin duda sería a este al evento al que te tendrías que suscribir y el desarrollo sería muy limpio.
Pero no hay evento aquí.

Podrías solicitarlo a Microsoft en su foro de Github para ver si lo incluyen en el futuro.

Si no puedes esperar a que Microsoft lo incluya en el futuro, habrá que buscar una forma alternativa de hacerlo.

Justo después de la llamada a CheckInsertFinalizePurchaseOrderHeader(), si hay que crear nuevo pedido se llama a la función InsertHeader(). Aquí si hay un evento, el OnAfterInsertPurchOrderHeader().
Como forma alternativa, yo intentaría suscribirme a este evento, y si no quiero que se cree nuevo pedido, eliminaría el pedido acabado de crear y haría un GET del pedido anterior para que el sistema continúe creando líneas en el pedido anterior.
Lo que no sé es si suscribiéndote a este evento tendrás la información necesaria para decidir si hay que crear o no nuevo pedido, o si sabrás encontrar cuál es el Nº de pedido anterior.

Y haciéndolo de este modo, habrá saltos en los Nº de pedido porque habrás eliminado pedidos de por medio.
Y quizá haya alguna otra cosa que no funcione correctamente. No lo sé. Habría que probarlo bien.

Si esta forma no funciona, otra forma alternativa que podrías intentar es suscribirte a un evento al principio de todo (seguramente al evento OnBeforeCode()), y aquí recorrer todas las líneas de la hoja de demanda que vayan a crear pedido de compra y dejar el campo de almacén vacío. De esta forma, al tener todas las líneas el mismo almacén, el sistema no creará distintos pedidos.
Antes de cambiar el valor del almacén, te tendrás que guardar en algún sitio (seguramente lo mejor sería en un campo nuevo que te crees en la tabla de líneas de hoja de demanda) el valor que tenía originalmente.
Y después te suscribes a un evento de cuando se crea la línea del pedido de compra (por ejemplo al OnBeforePurchOrderLineValidateNo() o al OnBeforePurchOrderLineInsert()) y le vuelves a poner el valor que corresponda de código de almacén, según lo que te hayas guardado en el primer evento.

La mejor opción sin duda sería poder tener un evento en la función CheckInsertFinalizePurchaseOrderHeader(). Así que te recomiendo que se lo solicites a Microsoft.

Pero si no, la segunda mejor opción creo que es esta última que comento. Me parece más limpia que la que te comentaba de eliminar las cabeceras de pedido que no quieres.

Ya me contarás por qué opción te decantas y con que problemas te encuentras.

Un saludo,
Cristina Nicolàs

Register New Account