DSO - 매출 회전 일수

소모 메소드를 사용하여 현재 기간 채무자의 영업 일수를 계산합니다.

반환 값

이 루틴은 현재 기간 거래 채무자 수치에 포함된 영업 일수의 금액을 나타내는 단일 값을 계산합니다. 포함된 DSO 서브루틴에서는 다음과 같이 가정합니다.

  • 채무자와 판매가 모두 양수입니다.

  • 루틴에서 HS.GETCELL 함수를 사용하기 때문에 제공된 매개변수가 완전히 정의된 POV(예: 계정/C1/C2/C3/C4/ICP)입니다.

  • 이 루틴은 가능한 가장 이전 시점까지의 일수를 계산합니다. 하지만 임의 기간의 주기적 판매 값이 음수 또는 0이면 중지됩니다.

구문

CALL DSO (strDSO,strDEBTOR,strSALES,strDIP)

표 12-9 DSO 함수 구문

매개변수 적합한 값

strDSO

사용자정의 및 내부거래 차원으로 완전히 정의된 계정입니다. 이 계정은 계산 대상입니다.

strDEBTOR

사용자정의 및 내부거래 차원으로 완전히 정의된 계정입니다. 이 계정은 현재 기간 거래 채무자의 소스입니다.

strSALES

사용자정의 및 내부거래 차원으로 완전히 정의된 계정입니다. 이 계정은 판매 소스입니다.

빈도 참조를 구체적으로 제외합니다.

strDIP

사용자정의 및 내부거래 차원으로 완전히 정의된 계정입니다. 이 계정은 기간 일수의 소스입니다.

[None] 엔티티에 있는 것으로 가정됩니다.

자세한 설명

이 루틴은 현재 기간에 대한 Debtors 계정(매개변수 2) 및 Sales 계정(매개변수 3)의 값을 사용하고 비교합니다. 두 값 중 하나가 0 또는 음수이면 계산이 중지됩니다. 현재 기간부터 역순으로 Debtors 값이 누적 판매 값을 초과하는 각 연속 기간에 대해 루틴이 Period 계정(매개변수 4)에 일수로 지정된 해당 기간의 일수를 실행 합계에 더합니다.

채무자 값이 이런 방식으로 모두 소모된 경우 최종 기간의 일수가 주기적 판매 값에 대한 만료되지 않은 채무자 비율로 계산됩니다.

최종적으로, 이 루틴은 실행 합계를 Destination 계정(매개변수 1)에 게시합니다.

이 예에서는 표시된 달의 총 회전 일수를 계산합니다.

표 12-10 DSO 함수 예

Month 채무자 판매 기간 달의 일수 DSO 공식 총 DSO

9월

12,000

2,500

30

100%

30

8월

N/A

1,750

31

100%

31

7월

N/A

2,250

31

100%

31

6월

N/A

2,500

30

100%

30

5월

N/A

2,000

31

100%

31

4월

N/A

2,250

30

2000/2250

26.7

합계

N/A

N/A

N/A

N/A

179.7

샘플 스크립트

' 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