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