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