ES | EN
  • Apps
  • Soporte
  • Sitio web iDynamics
    Mostrar / Ocultar índice

    Ejemplos de personalización

    Este documento predetende servir de guía para facilitar las personalizaciones más habituales en clientes.

    INVOIC - Actualizar / Modificar información de las partes involucradas

    En el siguiente ejemplo modificamos el GLN del pagador de un mensaje INVOIC. La ficha de Cliente dispone de un campo GLN (Global Location Number) que es el identificador unívoco que se utiliza en las transacciones EDI. Si queremos que un cliente se identifique con un GLN distinto cuando conste como pagador de la factura (PR), necesitamos cambiar el identificador GLN en el momento de crear el registro de tipo "SINCP" del mensaje INVOIC. Dado que la ficha sólo tiene un campo GLN, vamos a suponer que hemos añadido un nuevo campo "GLN Pagador" a la ficha del cliente que contiene el GLN a aplicar.

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPEDI INVOIC Management", 'OnBeforeWriteSINCP', '', false, false)]
    local procedure ActualizaGLNPagador(SalesInvoiceHeader: Record "Sales Invoice Header"; var SINCP: Text[1024])
    var
        Customer: Record Customer;
        SINCP_Temp: Text;
        TipoInterlocutor: Text[3];
    begin
        // La estructura del mensaje INVOIC está disponible en la documentación del producto: https://docs.idynamics.es/es/edi/developers/
        SINCP_Temp := SINCP;
    
        // Obtenemos el tipo de interlocutor de la posición 7 del registro SINCP
        TipoInterlocutor := CopyStr(SINCP, 7, 2);
    
        if TipoInterlocutor = 'PR' then begin
            Customer.Get(SalesInvoiceHeader."Sell-to Customer No.");
            if Customer."GLN Pagador" <> '' then begin
                SINCP := CopyStr(SINCP_Temp, 1, 9)    // Copiamos el registro SINCP hasta la posición del GLN
                SINCP += PadStr(Customer."GLN Pagador", 17, ' '); // Añadimos el GLN desde el campo personalizado "GLN Pagador"
                SINCP += CopyStr(SINCP_Temp, 27)  // Copiamos el resto del registro SINCP.
            end;
        end;
    end;
    

    ORDERS - Incorporar al pedido de venta información adicional recibida en el mensaje EDI

    Este ejemplo incorpora, en campos personalizados del pedido de venta de Business Central, información recibida en el mensaje ORDERS. En concreto, se ha añadido al pedido de venta los campos "EDI Calificador ref.adicional" y "EDI Ref. adicional" que van a ser rellenados a partir de los campos "Calificador referencia 2" y "Referencia 2" del mensaje ORDERS.

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPEDI ORDERS Management", 'OnAfterER1P', '', false, false)]
    local procedure AsignaDepartamento(var SalesHeader: Record "Sales Header"; ReadText: Text)
    var
        TipoInterlocutor: Code[2];
    begin
        TipoInterlocutor := COPYSTR(readText, 7, 2);
    
        if TipoInterlocutor = 'BY' then begin
            SalesHeader."EDI Calificador ref.adicional" := COPYSTR(readText, 494, 3);
            SalesHeader."EDI Ref. adicional" := COPYSTR(readText, 497, 17);
            if SalesHeader.Modify() then;
        end;
    end;
    

    INVOIC - Añadir al mensaje INVOIC información adicional

    En el siguiente ejemplo, se añade al mensaje INVOIC la referencia cruzada del producto y el número del pedido del cliente.

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPEDI INVOIC Management", 'OnBeforeWriteSINCL', '', false, false)]
    local procedure AddReferenciaCliente(var SINCL: Text[1024]; SalesInvoiceLine: Record "Sales Invoice Line")
    var
        ItemCross: Record "Item Cross Reference";
        SalesInvoiceHeader: Record "Sales Invoice Header";
        SINCL_Temp: Text[1024];
    begin
        SINCL_Temp := SINCL;
    
        //Busca la referencia cruzada
        ItemCross.Reset();
        ItemCross.setrange("Item No.", SalesInvoiceLine."No.");
        ItemCross.setrange("Cross-Reference Type", ItemCross."Cross-Reference Type"::Customer);
        ItemCross.SetRange("Cross-Reference Type No.", SalesInvoiceLine."Sell-to Customer No.");
        if ItemCross.FindFirst() then begin
            SINCL := copystr(SINCL_Temp, 1, 78);
            SINCL += PadStr(ItemCross."Cross-Reference No.", 15, ' ');
            SINCL += copystr(SINCL_Temp, 94);
        end;
    
        SINCL_Temp := SINCL;
    
        //Busca la cabecera de la factura
        SalesInvoiceHeader.get(SalesInvoiceLine."Document No.");
        if SalesInvoiceHeader."External Document No." <> '' then begin
            SINCL := copystr(SINCL_Temp, 1, 348);
            SINCL += PadStr(SalesInvoiceHeader."External Document No.", 17, ' ');
            SINCL += copystr(SINCL_Temp, 366)
        end;
    
    end;
    
    Volver al principio Copyright © 2024 iDynamics Business Solutions