DSO - Days Sales Outstanding

Berechnet die Anzahl der Tage in der aktuellen Periode, an denen die Debitoren von einem Zahlungsaufschub Gebrauch gemacht haben.

Rückgabewert

Diese Routine berechnet einen einzelnen Wert, der die Anzahl der Tage darstellt, die in der Warenschuldnerposition der aktuellen Periode enthalten sind. Die enthaltene DSO-Unterroutine geht von den folgenden Annahmen aus:

  • Sowohl "Debtors" als auch "Sales" sind positive Zahlen.

  • Die angegebenen Parameter sind vollständig definierte Points of View (z.B. Account/C1/C2/C3/C4/ICP), da die Routine die Funktion HS.GETCELL verwendet.

  • Die Routine berechnet die Tage und geht dabei soweit wie möglich in die Vergangenheit. Sie wird jedoch angehalten, wenn der periodische Umsatzwert für eine beliebige Periode ein negativer Wert oder null ist.

Syntax

CALL DSO (strDSO,strDEBTOR,strSALES,strDIP)

Tabelle 12-9 Syntax der Funktion DSO

Parameter Gültige Werte

strDSO

Vollständig definiertes Konto mit benutzerdefinierten Dimensionen und Intercompany-Dimensionen. Dieses Konto ist das Ziel für die Berechnung.

strDEBTOR

Vollständig definiertes Konto mit benutzerdefinierten Dimensionen und Intercompany-Dimensionen. Dieses Konto ist die Quelle für die Warenschuldner der aktuellen Periode.

strSALES

Vollständig definiertes Konto mit benutzerdefinierten Dimensionen und Intercompany-Dimensionen. Dieses Konto ist die Quelle für den Umsatz.

Schließen Sie Verweise auf die Häufigkeit explizit aus.

strDIP

Vollständig definiertes Konto mit benutzerdefinierten Dimensionen und Intercompany-Dimensionen. Dieses Konto ist die Quelle für die Anzahl der Tage in der Periode.

Es wird vorausgesetzt, dass es sich in der Entity [None] befindet.

Detaillierte Beschreibung

Diese Routine ruft die Werte aus dem Konto Debtors (Parameter 2) und dem Konto Sales (Parameter 3) für die aktuelle Periode ab und vergleicht sie. Wenn ein Wert null oder eine negative Zahl ist, wird die Berechnung angehalten. Jedes Mal, wenn der Debitorenwert in einer nachfolgenden Periode den kumulativen Umsatzwert überschreitet (rückwirkend ab der aktuellen Periode), fügt die Routine die Anzahl Tage für diese Periode gemäß der Angabe für die Tage im Konto Period (Parameter 4) zu einer laufenden Summe hinzu.

Wenn auf diese Art und Weise alle Debitorenwerte verbraucht wurden, werden die Tage der Endperiode als Anteil der nicht abgelaufenen Debitoren im Vergleich zum periodischen Umsatzwert berechnet.

Schließlich bucht die Routine die laufende Summe auf das Zielkonto (Parameter 1).

Beispiel

Im Beispiel wird die Gesamtforderungslaufzeit in Tagen für die angezeigten Monate berechnet.

Tabelle 12-10 Beispiel für die Funktion DSO

Month Debitoren Periodenumsatz Tage im Monat Formel für DSO Summe DSO

September

12.000

2.500

30

100 %

30

August

N/V

1.750

31

100 %

31

Juli

N/V

2.250

31

100 %

31

Juni

N/V

2.500

30

100 %

30

Mai

N/V

2.000

31

100 %

31

April

N/V

2.250

30

2000/2250

26.7

Summe

N/V

N/V

N/V

N/V

179.7

Beispielskript

' Use within the calculation section:
' 1. Standard use
CALL DSO("A#DSO","A#TradeDebtors.C1#AllAges.C2#[None].I#[ICP Top","A#TotalSales.C1#[None].C2#AllProducts.I#[ICP Top]", "A#DIP")
' 2. Use with a common custom dimension
set vPRODUCT = ARRAY("C2#PRODUCT1","C2#PRODUCT2", ….. ,"C2#PRODUCTn")
FOR EACH iITEM IN vPRODUCT
CALL DSO("" A#DSO.""&iITEM,"" A#TradeDebtors.C1#AllAges.I#[ICP Top].""&iITEM,"" A#TotalSales.C1#[None].I#[ICP Top]."" &iITEM,"" A#DIP"")
NEXT
' Actual script of Sub-routine
SUB DSO(strDSO,strDEBTOR,strSALES,strDIP)
DIM vTEST
DIM vDSO
DIM vCOUNT
DIM vXS_1
DIM vXS
HS.CLEAR(strDSO)
vTEST = HS.GETCELL(strDEBTOR) * HS.GETCELL(strSALES&"".W#Periodic"") * HS.GETCELL(strDIP&"".E#[None]"")
' checks if any of the parameters are zero (uses principle of X * 0 = 0)
IF vTEST = 0 THEN
EXIT SUB
ELSE
vDSO = 0
vCOUNT = 0
vXS_1 = HS.GETCELL(strDEBTOR)
vXS = vXS_1 - HS.GETCELL(strSALES&"".W#Periodic"")
' ensures that periodic sales are not negative or zero
WHILE vXS > 0 AND vXS_1 > vXS
vDSO = vDSO + HS.GETCELL(strDIP&"".E#[None].P#CUR-"" &vCOUNT)
vCOUNT = vCOUNT + 1
vXS_1 = vXS
vXS = vXS - HS.GETCELL(strSALES&"".W#Periodic.P#CUR-"" &vCOUNT)
WEND
IF vXS = vXS_1 THEN
vCOUNT = vCOUNT - 1
END IF
vDSO = vDSO + (vXS_1 / HS.GETCELL(strSALES&"".W#Periodic.P#CUR-"" &vCOUNT)*HS.GETCELL(strDIP&"".E#[None].P#CUR-"" &vCOUNT))
IF vDSO < 0 THEN
vDSO = 0
END IF
END IF
HS.EXP strDSO &"="& vDSO
END SUB