Automatiza la Creación de Facturas desde Albaranes en Business Central

Descubre cómo automatizar la creación de facturas a partir de albaranes en Business Central utilizando AL.

La automatización en la creación de documentos es una de las mayores ventajas de Business Central. En esta ocasión, veremos cómo se puede automatizar la generación de facturas a partir de albaranes de envío utilizando un codeunit en AL. Este enfoque no solo ahorra tiempo, sino que también reduce errores manuales, mejorando la eficiencia del negocio.

¡Vamos manos a la obra! 🤩

Definiendo el Proceso Principal

codeunit 60004 "CrearLineasFacturaDesdeAlbaranes"
{
    procedure Ejecute(SalesShipment: Text; CustomerNo: Code[20])
    var
        SalesHeader: Record "Sales Header";
        SalesShipmentLine: Record "Sales Shipment Line";
        SalesPost: Codeunit "Sales-Post";
    begin
        CreateHeaderInvoice(CustomerNo, SalesHeader);

        SalesShipmentLine.Reset();
        SalesShipmentLine.SetFilter("Document No.", SalesShipment);
        SalesShipmentLine.SetFilter("Qty. Shipped Not Invoiced", '<>0');
        if SalesShipmentLine.FindSet() then
            repeat
                CreateInvoiceLineFromShipment(SalesShipmentLine, SalesHeader);
            until SalesShipmentLine.Next() < 1;

        Clear(SalesPost);
        SalesPost.Run(SalesHeader);
    end;

La función Ejecute es el corazón del codeunit. Aquí se reciben como parámetros el número del albarán de envío (SalesShipment) y el número del cliente (CustomerNo). Vamos a desglosar esta función paso a paso:

  1. Creación del Encabezado de la Factura:
    Primero, se llama a la función CreateHeaderInvoice para crear el encabezado de la factura. Esto se hace pasando el número de cliente y una variable de registro de encabezado de ventas.
  2. Filtrar Líneas de Envío:
    Luego, se resetea el registro SalesShipmentLine y se aplican dos filtros:
  • Document No.: Se filtra por el número del documento de envío proporcionado.
  • Qty. Shipped Not Invoiced: Se filtra para obtener solo las líneas donde la cantidad enviada no ha sido facturada.
  1. Crear Líneas de Factura:
    Si se encuentran líneas de envío que cumplan con los filtros anteriores, se itera sobre cada línea con un bucle repeat-until, llamando a la función CreateInvoiceLineFromShipment para cada línea de envío.
  2. Registrar la Factura:
    Finalmente, se utiliza el codeunit SalesPost para registrar la factura generada.

Creación del Encabezado de la Factura

    procedure CreateHeaderInvoice(CustomerNo: Code[20]; var SalesHeader: Record "Sales Header")
    begin
        SalesHeader.Init();
        SalesHeader.Validate("Document Type", SalesHeader."Document Type"::Invoice);
        SalesHeader."No." := '';
        SalesHeader.Insert(true);

        SalesHeader.Invoice := true;
        SalesHeader.Validate("Sell-to Customer No.", CustomerNo);
        SalesHeader.Modify();
    end;

Esta función CreateHeaderInvoice es responsable de inicializar y configurar el encabezado de la factura. Aquí está el desglose:

  1. Inicialización del Registro:
    Se inicializa el registro SalesHeader con SalesHeader.Init().
  2. Validación del Tipo de Documento:
    Se valida que el tipo de documento sea una factura (Invoice).
  3. Inserción del Registro:
    Se inserta el registro con un número de documento vacío para que el sistema lo genere automáticamente.
  4. Configuración del Cliente y Modificación del Registro:
    Se marca el documento como una factura (SalesHeader.Invoice := true;) y se valida el número del cliente. Finalmente, se modifica el registro para guardar los cambios.

Creación de las Líneas de Factura desde Albaranes

    procedure CreateInvoiceLineFromShipment(var SalesShipmentLine: Record "Sales Shipment Line"; SalesHeader: Record "Sales Header")
    var
        SalesGetShipment: Codeunit "Sales-Get Shipment";
    begin
        Clear(SalesGetShipment);
        SalesGetShipment.SetSalesHeader(SalesHeader);
        SalesGetShipment.CreateInvLines(SalesShipmentLine);
    end;
}

La función CreateInvoiceLineFromShipment se encarga de crear las líneas de factura basadas en las líneas de envío. Aquí está el desglose:

  1. Inicialización del Codeunit:
    Se limpia el codeunit SalesGetShipment para asegurarse de que esté en un estado limpio.
  2. Configuración del Encabezado de Ventas:
    Se establece el encabezado de ventas con SalesGetShipment.SetSalesHeader(SalesHeader).
  3. Creación de las Líneas de Factura:
    Finalmente, se llama a SalesGetShipment.CreateInvLines(SalesShipmentLine) para crear las líneas de factura basadas en las líneas de envío.

Beneficios y Aplicaciones Prácticas

Implementar este codeunit en un entorno real de Business Central puede ofrecer numerosos beneficios:

  • Ahorro de Tiempo: Automatiza tareas repetitivas y manuales, permitiendo al personal concentrarse en tareas más estratégicas.
  • Reducción de Errores: Minimiza la entrada manual de datos, reduciendo la posibilidad de errores humanos.
  • Eficiencia Operativa: Mejora la eficiencia operativa al agilizar el proceso de facturación.

Conclusión

Automatizar la creación de facturas a partir de albaranes en Business Central es una práctica que puede transformar la eficiencia y precisión de las operaciones. Este codeunit muestra cómo se puede implementar esta automatización de manera efectiva.

Si quieres ver el código completo, está en GitHub.

¡Hasta la próxima y feliz programación!

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *