• Este debate tiene 2 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 1 año, 11 meses por AvatarCristina Nicolàs.
Viendo 3 entradas - de la 1 a la 3 (de un total de 3)

Respuestas del foro


  • Avatar
    Jaime Capilla
    Participante
    Jaime Capilla

    Hola!!

    He creado una extensión de tabla de Customer para crear unos campos nuevos de tipo texto. Los mismos los he creado extendiendo Sales Header. La idea es que al hacer un pedido nuevo los datos de esos campos del cliente se copien en la cabecera. He creado una codeunit para ello y me he suscrito al evento [EventSubscriber(ObjectType::Table, Database::»Sales Header», ‘OnAfterValidateEvent’, ‘Sell-to Customer No.’, false, false)] con lo que al poner el código de cliente la información se copie en la cabecera de ventas. Si hago un pedido nuevo y selecciono el cliente, como el número de pedido ya se ha creado, el procedimiento funciona correctamente. Si por el contrario hago un nuevo pedido de venta desde la ficha del cliente obtengo un error

    «Cab. Venta no existe. Campos de identificación y valores: Tipo documento=’Pedido’, Nº = ‘1015″

    Tengo la sensación que en el primer caso, cuando selecciono el cliente ya tengo el numero de pedido y si se encuentra el registro que se va a modificar. En el segundo caso, cuando se dispara el evento, el número de documento aun no esta insertado en base de datos y no encuentra el registro que debe actualizar. He probado a poner en el procedimiento la condición

    if rec.»No.» = » then
    exit;

    para que si el Numero de pedido está en blanco se salga pero sigue fallando. Creo que debería suscribirme tanto el evento OnAfterValidateEvent del Sell-to Customer No. como del N0 de pedido para que funcione en ambos casos pero no se como evitar el error.

     

     

    #6893
    Avatar
    Jaime Capilla
    Participante
    Jaime Capilla

    Hola de nuevo!!

    He conseguido que me funcione en ambos casos con este codigo:

     

    [EventSubscriber(ObjectType::Table, Database::»Sales Header», ‘OnAfterValidateEvent’, ‘Sell-to Customer No.’, false, false)]
    local procedure CopyCustomerCL(var Rec: Record «Sales Header»; var xRec: Record «Sales Header»; currFieldNo: Integer)
    var
    Customer: Record Customer;
    begin
    if not Customer.Get(Rec.»Sell-to Customer No.») then
    exit;
    if rec.»No.» = » then
    exit;
    rec.»Aptdo Numero» := Customer.»Aptdo Numero»;
    rec.»Aptdo CP» := Customer.»Aptdo CP»;
    rec.»Aptdo Pob» := Customer.»Aptdo Pob»;
    rec.»Aptdo Prov» := Customer.»Aptdo Prov»;
    if not rec.Modify() then
    exit;
    end;

     

    y haciendo lo mismo para

    [EventSubscriber(ObjectType::Table, Database::»Sales Header», ‘OnAfterValidateEvent’, ‘No.’, false, false)]

    Al poner

    if not rec.Modify() then
    exit;

    consigo que no falle pero me gustaría que me indicarais si es correcto como lo he programado.

     

    #6894
    Avatar
    Cristina Nicolàs
    Superadministrador
    Cristina Nicolàs

    Hola Jaime,

    Yo creo que aquí lo que falla es que hagas el Modify.

    Como te estás suscribiendo a un OnAfterValidate no es necesario que hagas tu un Modify explícito, porque el sistema ya lo hará cuando toque.

    Lo que dices de que al crear el pedido desde la ficha del cliente te da error es seguramente por ese Modify. No es que el Nº del documento esté vacío o no, es que es posible que aun no se haya hecho el Insert.

    Yo en este caso sólo me suscribiría al ‘Sell-To Customer No.’ y no haría el modify.

    Un saludo,
    Cristina Nicolàs

    #6899
Viendo 3 entradas - de la 1 a la 3 (de un total de 3)

Debe iniciar sesión para responder a este tema.