DSO - Days Sales Outstanding

Calcola il numero di Days Sales nei debitori del periodo corrente utilizzando il metodo di esaurimento.

Valore restituito

Questa routine calcola un singolo valore che rappresenta la quantità di Days Sales inclusi nella cifra relativa ai debitori commerciali del periodo corrente. La routine secondaria DSO inclusa si basa sui presupposti seguenti:

  • Debitori e Vendite sono valori positivi.

  • I parametri forniti sono punti di vista definiti completamente (ad esempio, Conto/C1/C2/C3/C4/ICP) poiché la routine utilizza la funzione HS.GETCELL.

  • La routine calcola i giorni risalendo il più possibile indietro nel tempo. Tuttavia, si interromperà se il valore periodico delle vendite per qualsiasi periodo è un valore negativo o zero.

Sintassi

CALL DSO (strDSO,strDEBTOR,strSALES,strDIP)

Tabella 12-9 Sintassi della funzione DSO

Parametro Valori validi

strDSO

Conto definito completamente con dimensioni custom e interaziendali. Questo conto è la destinazione per il calcolo.

strDEBTOR

Conto definito completamente con dimensioni custom e interaziendali. Questo conto è l'origine per i debiti commerciali del periodo corrente.

strSALES

Conto definito completamente con dimensioni custom e interaziendali. Questo conto è l'origine per le vendite.

Esclude in modo specifico i riferimenti alla frequenza.

strDIP

Conto definito completamente con dimensioni custom e interaziendali. Questo conto è l'origine per il numero di giorni nel periodo.

Si presuppone che si trovi nell'entità [None].

Descrizione dettagliata

Questa routine accetta i valori nel conto Debitori (parametro 2) e nel conto Vendite (parametro 3) per il periodo corrente e li confronta. Se uno dei valori è zero o negativo, il calcolo viene interrotto. Per ogni periodo successivo in cui il valore debitori supera il valore delle vendite cumulative (risalendo dal periodo corrente), la routine aggiunge il numero di giorni per tale periodo come specificato nei giorni nel conto Periodo (parametro 4) a un totale progressivo.

Quando tutti i valori Debitori sono stati esauriti in questo modo, i giorni del periodo finale vengono calcolati come proporzione dei debitori non scaduti rispetto al valore periodico delle vendite.

Infine, la routine pubblica il totale progressivo nel conto di destinazione (parametro 1).

Esempio

L'esempio calcola i giorni totali in sospeso per i mesi mostrati.

Tabella 12-10 Esempio di funzione DSO

Month Debitori Vendite periodo Giorni nel mese Formula per DSO DSO totale

Settembre

12,000

2,500

30

100%

30

Agosto

N/D

1,750

31

100%

31

Luglio

N/D

2,250

31

100%

31

Giugno

N/D

2,500

30

100%

30

Maggio

N/D

2,000

31

100%

31

Aprile

N/D

2,250

30

2000/2250

26.7

Totale

N/D

N/D

N/D

N/D

179.7

Script campione

' 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