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:
- Creación del Encabezado de la Factura:
Primero, se llama a la funciónCreateHeaderInvoice
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. - Filtrar Líneas de Envío:
Luego, se resetea el registroSalesShipmentLine
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.
- 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 buclerepeat-until
, llamando a la funciónCreateInvoiceLineFromShipment
para cada línea de envío. - Registrar la Factura:
Finalmente, se utiliza el codeunitSalesPost
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:
- Inicialización del Registro:
Se inicializa el registroSalesHeader
conSalesHeader.Init()
. - Validación del Tipo de Documento:
Se valida que el tipo de documento sea una factura (Invoice
). - Inserción del Registro:
Se inserta el registro con un número de documento vacío para que el sistema lo genere automáticamente. - 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:
- Inicialización del Codeunit:
Se limpia el codeunitSalesGetShipment
para asegurarse de que esté en un estado limpio. - Configuración del Encabezado de Ventas:
Se establece el encabezado de ventas conSalesGetShipment.SetSalesHeader(SalesHeader)
. - Creación de las Líneas de Factura:
Finalmente, se llama aSalesGetShipment.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!