Calcula el número de días de ventas pendientes de los deudores en el periodo actual mediante el método de agotamiento.
Valor de retorno
Esta rutina calcula un solo valor que representa el número de días de ventas incluidos en la cifra de deudores comerciales en el periodo actual. La subrutina DSO incluida parte de estos supuestos:
Tanto la cifra de deudores como la de ventas son cifras positivas.
Los parámetros proporcionados son puntos de vista totalmente definidos (por ejemplo, cuenta/C1/C2/C3/C4/ICP) porque la rutina utiliza la función HS.GETCELL.
La rutina calcula los días lo más hacia atrás posible. No obstante, se detendrá si el valor de las ventas periódicas para cualquier periodo es un valor negativo o cero.
Sintaxis
CALL DSO (strDSO,strDEBTOR,strSALES,strDIP)
Tabla 12-9 Sintaxis la de función DSO
| Parámetro | Valores válidos |
|---|---|
|
strDSO |
Cuenta totalmente definida con dimensiones personalizadas y de intercompañía. Esta cuenta es el destino del cálculo. |
|
strDEBTOR |
Cuenta totalmente definida con dimensiones personalizadas y de intercompañía. Esta cuenta es el origen para los deudores comerciales del periodo actual. |
|
strSALES |
Cuenta totalmente definida con dimensiones personalizadas y de intercompañía. Esta cuenta es el origen para las ventas. Excluya específicamente las referencias a la frecuencia. |
|
strDIP |
Cuenta totalmente definida con dimensiones personalizadas y de intercompañía. Esta cuenta es el origen del número de días en el periodo. Se supone que está en la entidad [Ninguna]. |
Descripción detallada
La rutina toma los valores de la cuenta de deudores (parámetro 2) y de la cuenta de ventas (parámetro 3) para el periodo actual y los compara. Si muestran un valor cero o negativo, el cálculo se detiene. Para cada periodo sucesivo en el que el valor de deudores exceda el valor de ventas acumuladas (hacia atrás desde el periodo actual), la rutina agregará el número de días para ese periodo según los días especificados en la cuenta de periodo (parámetro 4) y hasta el total acumulativo.
Cuando todos los valores de los deudores se han agotado, los días del período final se calculan como una proporción de los deudores no caducados frente al valor de las ventas periódicas.
Por último, la rutina contabiliza el total acumulado en la cuenta de destino (parámetro 1).
Ejemplo
En el ejemplo se calcula el total de días pendientes para los meses mostrados.
Tabla 12-10 Ejemplo de la función DSO
| Month | Deudores | Ventas del periodo | Días en el mes | Fórmula para DSO | DSO total |
|---|---|---|---|---|---|
|
Septiembre |
12 000 |
2500 |
30 |
100 % |
30 |
|
Agosto |
N/A |
1750 |
31 |
100 % |
31 |
|
Julio |
N/A |
2250 |
31 |
100 % |
31 |
|
Junio |
N/A |
2500 |
30 |
100 % |
30 |
|
Mayo |
N/A |
2000 |
31 |
100 % |
31 |
|
Abril |
N/A |
2250 |
30 |
2000/2250 |
26,7 |
|
Total |
N/A |
N/A |
N/A |
N/A |
179,7 |
Script de ejemplo
' 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