Modificar funcionalidad de las hojas de demanda

Cursos de Navision 100% online Foros Foro Dynamics NAV y Business Central Modificar funcionalidad de las hojas de demanda

Este debate contiene 6 respuestas, tiene 3 mensajes y lo actualizó  Cristina Nicolàs hace 10 meses, 2 semanas.

Viendo 7 publicaciones - del 1 al 7 (de un total de 7)
  • Autor
    Publicaciones
  • #7935

    Leasba Consulting
    Participante

    Buenos dias,

    Mi nombre es Miguel, soy desarrollador en la empresa Leasba Consulting S.L. y estoy empezado a trabajar con Navision siguiendo vuestros cursos, lo cual me está sirviendo de gran ayuda por que desconocía totalmente este lenguaje, la estructura tanto de tablas como de paginas, etc..

    Quisiera realizar una modificación en las hojas de demanda  de Business Central y no se si se podrá realizar desde la configuración de la aplicación o habrá que realizarla mediante alguna extensión. El problema que tenemos es que desde las hojas de demanda tenemos varios productos con el mismo proveedor pero con distinto código de almacén y al  EJECUTAR MENSAJES ACCIÓN-DEM. nos crea un pedido de compra para cada producto. Necesitaríamos que los productos que son del mismo proveedor, aunque tengan el código de almacén distinto, nos lo incluyera todos en el mismo pedido de compra sin hacer la separación por el código de almacén.

    Si fuese necesario hacerlo desde código, he visto que EJECUTAR MENSAJES ACCIÓN-DEM. llama a la codeunit 333 pero no tengo muy claro con que evento habría que interactuar.

    Espero me podáis ayudar

    salu2

     

    #7938

    Cristina Nicolàs
    Jefe de claves

    Hola Miguel,

    Esta tarde pruebo un par de cosillas y después te digo.

    Hace mucho tiempo que no trabajo con la hoja de demanda, pero la verdad es que si me hubieran preguntado, hubiera dicho que se haría un único pedido sin separar por almacén.

    En cualquier caso, si, las modificaciones a como se crean los pedidos desde la hoja de demanda se tendrán que hacer mayoritariamente en la codeunit 333. Habrá que ver cuantos eventos hay en esta codeunit y si hay alguno que pueda servir para el propósito que necesitas.

    Después te digo.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #7958

    Cristina Nicolàs
    Jefe de claves

    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

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #7974

    Leasba Consulting
    Participante

    Buenos días Cristina, gracias por tu rápida respuesta.

    Como bien dices el punto ideal para realizar las modificaciones sería en la función  CheckInsertFinalizePurchaseOrderHeader(), pero no hay ningún evento con el que poder interactuar. Creo que tienes toda la razón con que la segunda opción es la mejor, ya había barajado el tema de la variable para almacenar el cambio y los eventos OnBeforePurchOrderLineInsert() o OnAfterPurchOrderLineInsert(), y ahora que me lo has confirmado me voy a decantar por ahí.

    Me pongo manos a la obra y ya te comentaré como me va, que seguro que algún contratiempo irá surgiendo.

    salu2

    Miguel

    #8075

    Laura Nicolàs
    Jefe de claves

    Hola a los dos,

    Si creeis que faltan eventos en esta codeunit, no dejeis de solicitarlo en el foro de GitHub.
    Microsoft va a añadir nuevos eventos únicamente si hay solicitudes… si lo pedís ahora (aunque lo vayais a solucionar de otra forma), estará disponible para todos la proxima vez que lo necesitemos ,-)

    Salut!
    Laura Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #8120

    Leasba Consulting
    Participante

    Muy buenas,

    ya he realizado la solicitud en el foro de GitHub como me dijisteis y la han transferido a ALAppExtensions repository, a ver si la toman en cuenta y nos facilitan alguna solución más óptima.

    De momento lo he solucionado interactuando entre las funciones OnBeforeCarryOutReqLineAction() (donde le cambio el valor de la variable para que me lo valide) y el OnBeforePurchOrderLineInsert() (donde se lo devuelvo) y aparentemente el resultado es bueno. Solo me tiene un poco despistado la función FinalizeOrderHeader() (al finalizar cada pedido), que cuando entra en la parte  “// Not a recurring journal” vuelve ha hacer un filtrado para traer todas las líneas de esa pedido y vuelve a filtrar por el código de almacén y las líneas en las que he cambiado el código para pasar la validación no me las trae y no las elimina donde ejecuta “ReqLine2.DELETE(TRUE);”, pero en este punto estoy un poco perdido con lo que está haciendo, no sé si me podréis orientar un poco. Gracias.

    salu2

    Miguel

     

    #8127

    Cristina Nicolàs
    Jefe de claves

    Hola Miguel,

    Yo diría que en este punto lo que hace es eliminar las líneas de la Hoja de Demanda que ya ha procesado.

    En una hoja de demanda puedes tener múltiples líneas: unas que creen pedidos de compra, otras que creen pedidos de transferencia, otras que creen órdenes de fabricación, otras a las que le dices que no quieres que hagan nada, etc.
    Cuando ejecutas acciones, después las líneas de la hoja de demanda se eliminan y la hoja de demanda queda vacía si se ha procesado todo. O quedan sólo las que no han sido procesadas.

    Ahora entiendo que en este punto ha determinado que ya ha procesado las líneas de la hoja de demanda y las quiere eliminar (siempre y cuando no sean líneas periódicas, de ahí ese comentario de Not a recurring journal).

    Total, que tendrás que ver como pone esos filtros para encontrar las líneas de hoja de demanda a eliminar y tendrás que asegurarte que en este momento tengan la información que necesitan.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

Viendo 7 publicaciones - del 1 al 7 (de un total de 7)

Debes estar registrado para responder a este debate.

Members Currently Active: 2
jmp, masdware
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 1.028, Posts: 3.244, Members: 993
Welcome to our newest member, ACUSTICA
Most users ever online was 15 on 5 April, 2019 9:31 am