DSO: periodo medio de cobro

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