It is in Codeunit 1302
procedure AvgDaysToPay(CustNo: Code[20]): Decimal
var
CustLedgEntry: Record "Cust. Ledger Entry";
CustLedgEntry2: Record "Cust. Ledger Entry";
AvgDaysToPay: Decimal;
TotalDaysToPay: Decimal;
TotalNoOfInv: Integer;
begin
with CustLedgEntry do begin
AvgDaysToPay := 0;
SetCurrentKey("Customer No.", "Posting Date");
SetFilterForPostedDocs(CustLedgEntry, CustNo, "Document Type"::Invoice);
SetRange(Open, false);
if FindSet() then
repeat
case true of
"Closed at Date" > "Posting Date":
UpdateDaysToPay("Closed at Date" - "Posting Date", TotalDaysToPay, TotalNoOfInv);
"Closed by Entry No." <> 0:
if CustLedgEntry2.Get("Closed by Entry No.") then
UpdateDaysToPay(CustLedgEntry2."Posting Date" - "Posting Date", TotalDaysToPay, TotalNoOfInv);
else begin
CustLedgEntry2.SetCurrentKey("Closed by Entry No.");
CustLedgEntry2.SetRange("Closed by Entry No.", "Entry No.");
if CustLedgEntry2.FindFirst() then
UpdateDaysToPay(CustLedgEntry2."Posting Date" - "Posting Date", TotalDaysToPay, TotalNoOfInv);
end;
end;
until Next() = 0;
end;
if TotalNoOfInv <> 0 then
AvgDaysToPay := TotalDaysToPay / TotalNoOfInv;
exit(AvgDaysToPay);
end;
procedure InvoicePaymentDaysAverage(CustomerNo: Code[20]): Decimal
begin
exit(Round(CalcInvPmtDaysAverage(CustomerNo), 1));
end;
local procedure CalcInvPmtDaysAverage(CustomerNo: Code[20]): Decimal
var
CustLedgEntry: Record "Cust. Ledger Entry";
DetailedCustLedgEntry: Record "Detailed Cust. Ledg. Entry";
PaymentDays: Integer;
InvoiceCount: Integer;
begin
CustLedgEntry.SetCurrentKey("Document Type", "Customer No.", Open);
if CustomerNo <> '' then
CustLedgEntry.SetRange("Customer No.", CustomerNo);
CustLedgEntry.SetRange("Document Type", CustLedgEntry."Document Type"::Invoice);
CustLedgEntry.SetRange(Open, false);
CustLedgEntry.SetFilter("Due Date", '<>%1', 0D);
if not CustLedgEntry.FindSet() then
exit(0);
repeat
DetailedCustLedgEntry.SetCurrentKey("Cust. Ledger Entry No.");
DetailedCustLedgEntry.SetRange("Cust. Ledger Entry No.", CustLedgEntry."Entry No.");
DetailedCustLedgEntry.SetRange("Document Type", DetailedCustLedgEntry."Document Type"::Payment);
if DetailedCustLedgEntry.FindLast() then begin
PaymentDays += DetailedCustLedgEntry."Posting Date" - CustLedgEntry."Due Date";
InvoiceCount += 1;
end;
until CustLedgEntry.Next() = 0;
if InvoiceCount = 0 then
exit(0);
exit(PaymentDays / InvoiceCount);
end;