DSO - Days Sales Outstanding

Calcule le nombre de jours de vente dans les débiteurs de la période en cours à l'aide de la méthode d'épuisement.

Valeur renvoyée

Cette routine calcule une valeur unique représentant le nombre de jours d'attente contenus dans les débiteurs des créances commerciales en cours. La sous-routine DSO incluse émet les hypothèses suivantes :

  • Débiteurs et Ventes sont tous des chiffres positifs.

  • Les paramètres fournis sont des points de vue entièrement définis (par exemple, Account/C1/C2/C3/C4/ICP) car la routine utilise la fonction HS.GETCELL.

  • La routine calcule le nombre de jours en remontant aussi loin que possible dans le temps. Cependant, il s'interrompt si la valeur des ventes périodiques pour toute période est inférieure ou égale à zéro.

Syntaxe

CALL DSO (strDSO,strDEBTOR,strSALES,strDIP)

Tableau 12-9 Syntaxe de la fonction DSO

Paramètre Valeurs valides

strDSO

Compte entièrement défini avec des dimensions libres et intragroupes. Ce compte sert de cible pour le calcul.

strDEBTOR

Compte entièrement défini avec des dimensions libres et intragroupes. Ce compte constitue la source pour les débiteurs des créances commerciales de la période en cours.

strSALES

Compte entièrement défini avec des dimensions libres et intragroupes. Ce compte sert de source pour les ventes.

Excluez spécifiquement les références à la fréquence.

strDIP

Compte entièrement défini avec des dimensions libres et intragroupes. Ce compte sert de source pour le nombre de jours dans la période.

Est en principe dans l'entité [None].

Description détaillée

La routine prend les valeurs des comptes Debtors (paramètre 2) et Sales (paramètre 3) pour la période actuelle et les compare. Si elles sont négatives ou égales à zéro, le calcul s'arrête. Pour chaque période successive où la valeur des débiteurs dépasse celle des ventes cumulées (en remontant dans le temps à partir de la période actuelle), la routine ajoute le nombre de jours de cette période, tel que spécifié dans les jours du compte Period (paramètre 4) au cumul par ligne.

Lorsque toutes les valeurs des débiteurs ont été épuisées de cette manière, le nombre de jours de la dernière période est calculé en tant que proportion de débiteurs non expirés par rapport à la valeur des ventes périodiques.

Enfin, la routine impute le cumul par ligne au compte de destination (paramètre 1).

Exemple

L'exemple calcule le nombre total de jours d'attente pour les mois indiqués.

Tableau 12-10 Exemple de fonction DSO

Mois Débiteurs Ventes de la période Jours dans le mois Formule pour DSO DSO total

Septembre

12 000

2 500

30

100 %

30

Août

Sans objet

1 750

31

100 %

31

Juillet

Sans objet

2 250

31

100 %

31

Juin

Sans objet

2 500

30

100 %

30

Mai

Sans objet

2 000

31

100 %

31

Avril

Sans objet

2 250

30

2 000/2 250

26,7

Total

Sans objet

Sans objet

Sans objet

Sans objet

179,7

Exemple de script

' 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