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;