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

    Ejemplos de personalización

    Este documento pretende servir de guía para realizar las personalizaciones más habituales en clientes, ofreciendo ejemplos que sirvan como punto de partida.

    Advertencia

    Si modifica valores en los documentos de la cola del Verifactu, recuerde siempre hacerlo usando el método .Validate(), ya que en muchos casos la asignación de valores en un campo puede tener repercusiones en otros.

    Añadir QR Verifactu al informe de factura de venta

    Ejemplo seguido por iDynamics VeriFactu para añadir el QR asociado a una factura de venta a su informe correspondiente, de modo que el cliente pueda verificar la factura recibida, accediendo a la registrada en la AEAT a través del QR.

    La app añade un ReportExtension al informe estándar Business Central de facturas de venta, pero se puede imitar la parte del QR en cualquier otro informe personalizado.

    reportextension 71561900 "IDPVER Standard Sales Invoice" extends "Standard Sales - Invoice"
    {
        dataset
        {
            add(Header)
            {
                column(IDPVER_VeriFactuQRExists; IDPVER_VeriFactuQRExists) { }
                column(IDPVER_VeriFactuQRPicture; IDPVER_VeriFactuQRTenantMedia.Content) { }
            }
    
            modify(Header)
            {
                trigger OnAfterAfterGetRecord()
                var
                    QRHelper: Codeunit "IDPVER QR Helper";
                begin
                    QRHelper.GetSalesInvoiceVeriFactuQRPicture(Header, IDPVER_VeriFactuQRExists, IDPVER_VeriFactuQRTenantMedia);
                end;
            }
        }
    
        labels
        {
            IDPVER_QRLbl = 'VERI*FACTU';
        }
    
        var
            IDPVER_VeriFactuQRTenantMedia: Record "Tenant Media";
            IDPVER_VeriFactuQRExists: Boolean;
    }
    

    A continuación, mostramos ejemplo de layout RDLC, donde hay 3 posibles imágenes del QR VeriFactu, dependiendo de dónde se muestre el logo de la empresa que, en el informe estándar de Business Central, se puede configurar dónde debe mostrarse (izquierda, derecha, centro).

    Lo más importante es que esta imagen QR debe cumplir ciertas propiedades requeridas por la AEAT, entre ellas, la de mostrar un texto VERI*FACTU (o su versión más larga), y su posición dentro del informe (al principio del todo): Especificaciones del VeriFactu QR en el informe de factura de venta.

    Diseño QR VeriFactu en informe factura venta

    Mostramos imagen de cómo queda el informe de factura de venta estándar con el QR VeriFactu incorporado.

    Ejemplo QR VeriFactu en informe factura venta

    Facturas simplificadas

    Por omisión, iDynamics Verifactu respetará el valor de los campos Invoice Type o Cr. Memo Type de las cabeceras de facturas y abonos, lo cuál significa que cualquier personalización de este tipo se podría realizar directamente asignando los campos anteriores al documento de venta.

    El caso siguiente, presenta un ejemplo simple en el que, si la factura de venta corresponde a un código de cliente en particular, el documento de la cola de salida se identificará automáticamente como factura simplificada.

    No es necesario alterar el contenido de los campos de contraparte (que indican los datos del cliente al que se ha emitido la factura), ya que el propio iDynamics VeriFactu omitirá el envío de esta información en el caso de facturas simplificadas o de resumen.

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPVER Load Document Mgt", 'OnAfterAddDocument', '', false, false)]
    local procedure OnAfterAddDocument(var VeriFactuDocument: Record "IDPVER Document")
    var
        SalesInvoiceHeader: Record "Sales Invoice Header";
        ClienteCaja: Code[10];
    begin
        // Obtenemos de alguna tabla de configuración el código del cliente de venta al público.
        ClienteCaja := GetClienteCaja();
    
        // Si el registro de la cola es una factura de venta, comparamos el código de cliente con un valor
        // que corresponda al código del cliente de venta al público.
        if not VeriFactuDocument.CreditMemo then
            if SalesInvoiceHeader.Get(VeriFactuDocument."Invoice No.") then
                if SalesInvoiceHeader."Bill-to Customer No." = ClienteCaja then begin
                    VeriFactuDocument.Validate("Invoice Type", 'F2');
                    VeriFactuDocument.Modify(true);
                end;
    end;
    

    Facturas emitidas por terceros

    Si se están enviando facturas emitidas por terceros, la tabla de documentos de VeriFactu IDPVER Document contiene un campo llamado "Issued by Third Party_Recip.", de tipo enum, que permite indicar este hecho. Los valores posibles, además del blanco, son: D (Destinatario) o T (Tercero).

    Para indicar que la factura está emitida por un tercero, la manera recomendada de proceder es suscribirse al evento OnAfterAddDocument, para recuperar la factura de origen y, si es de este tipo, asignar los valores correspondientes al registro de la cola.

    Por ejemplo, suponiendo que hubieran dos campos NIF Emisor y Nombre Emisor en la cabecera de las facturas de venta, este sería un posible código que implementaría la asignación:

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPVER Load Document Mgt", 'OnAfterAddDocument', '', false, false)]
    local procedure OnAfterAddDocument(var VeriFactuDocument: Record "IDPVER Document")
    var
        SalesInvoiceHeader: Record "Sales Invoice Header";
    begin
        // Si el registro de la cola es una factura de venta, recuperamos el NIF del emisor.
        if not VeriFactuDocument.CreditMemo then
            if SalesInvoiceHeader.Get(VeriFactuDocument."Invoice No.") then
                if SalesInvoiceHeader."NIF Emisor" <> '' then begin
                    VeriFactuDocument.Validate("Issued by Third Party_Recip.", VeriFactuDocument."Issued by Third Party_Recip."::T);
                    VeriFactuDocument.Validate("Third Party VAT No.", SalesInvoiceHeader."NIF Emisor");
                    VeriFactuDocument.Validate("Third Party Name",SalesIvoiceHeader."Nombre Emisor");
                    VeriFactuDocument.Modify(true);
                end;
    end;
    

    Tipo de identificador para clientes fuera de la UE

    Por precaución, ya que hay múltiples maneras de identificar a los clientes, y no queremos asignar valores incorrectos, iDynamics VeriFactu sólo asigna de manera automática el tipo de identificación NIF Europeo (02), cuando el cliente está identificado como perteneciente a la UE en la configuración de IVA, y Otro documento probatorio (06), cuando se trate de un cliente de fuera de la UE.

    Si, por ejemplo, se prefiere que la identificación predeterminada para clientes de fuera de la UE fuera Documento oficial expedido por el país de residencia (04), el siguiente código asignaría dicho valor.

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPVER Load Document Mgt", 'OnAfterAddDocument', '', false, false)]
    local procedure OnAfterAddDocument(var VeriFactuDocument: Record "IDPVER Document")
    begin
        // Si iDynamics VeriFactu ha asignado "Otro documento probatorio (06)" como identificación,
        // asignamos "Documento oficial expedido por el país de residencia (04)" en su lugar.  
        if VeriFactuDocument."Recipient VAT Identif. Type" = VeriFactuDocument."Recipient VAT Identif. Type"::"06" then begin
            VeriFactuDocument.Validate("Recipient VAT Identif. Type", VeriFactuDocument."Recipient VAT Identif. Type"::"04");
            VeriFactuDocument.Modify();
        end;
    end;
    
    Volver al principio Copyright © 2024 iDynamics Business Solutions