' 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