David Emerson
davide at dalyn.co.nz
Wed Oct 1 21:40:54 CDT 2003
Group,
AXP FE, SQL2000 BE.
Along similar lines to my other question on this subject. This time I am
calculating outstanding accounts. This function is called from a loop. I
am not sure how I can convert it all into a single sproc that can calculate
the new CurrentMth, OneMonth, curMthTwo, and ThreeMonths fields.
LOOP CALLING OF FUNCTION
Set rstStatement = basRunDataObject("dbo.spMthEndCurrentStatements",
adCmdStoredProc)
Do Until rstStatement.EOF
Call basUpdateAgedDebts(rstStatement!CustIDNo,
rstStatement!StatementID)
rstStatement.MoveNext
Loop
Public Function basUpdateAgedDebts(lngCustID As Long, lngStatID As Long)
On Error GoTo Err_basUpdateAgedDebts
Dim intStatNo As Integer, curReceipts As Currency, curCurrent As Currency
Dim curMthOne As Currency, curMthTwo As Currency, curMthThree As Currency
Dim rst As ADODB.Recordset
Call basInfo("Updating aged debtor fields." & vbCrLf &
DLookup("MName", "dbo.tblCustomers", "CustomerID = " & lngCustID))
'Get aged debts from previous statements
intStatNo = DLookup("InvNumber", "dbo.tblCustomers", "CustomerID = " &
lngCustID)
curCurrent = Nz(basCustomDLookUp("CurrentMth", "dbo.tblCustStatement",
"CustIDNo = " & lngCustID & " and StatementNumber = " & intStatNo - 1), 0)
curMthOne = Nz(basCustomDLookUp("OneMonth", "dbo.tblCustStatement",
"CustIDNo = " & lngCustID & " and StatementNumber = " & intStatNo - 1), 0)
curMthTwo = Nz(basCustomDLookUp("TwoMonths", "dbo.tblCustStatement",
"CustIDNo = " & lngCustID & " and StatementNumber = " & intStatNo - 1), 0)
curMthThree = Nz(basCustomDLookUp("ThreeMonths",
"dbo.tblCustStatement", "CustIDNo = " & lngCustID & " and StatementNumber =
" & intStatNo - 1), 0)
Set rst = basRunDataObject("dbo.vwMthEndStatReceipts", adCmdTable)
rst.Find "LinkIDNo = " & lngStatID
If Not (rst.EOF Or rst.EOF) Then 'Receipt record exist
curReceipts = Nz(Abs(rst!Receipts), 0)
Else
curReceipts = 0
End If
'Deduct receipts from aged debts from oldest to current
If curReceipts >= curMthThree Then
curReceipts = curReceipts - curMthThree
curMthThree = 0
Else
curMthThree = curMthThree - curReceipts
curReceipts = 0
End If
If curReceipts >= curMthTwo Then
curReceipts = curReceipts - curMthTwo
curMthTwo = 0
Else
curMthTwo = curMthTwo - curReceipts
curReceipts = 0
End If
If curReceipts >= curMthOne Then
curReceipts = curReceipts - curMthOne
curMthOne = 0
Else
curMthOne = curMthOne - curReceipts
curReceipts = 0
End If
curCurrent = curCurrent - curReceipts
'Age debts up by one month
curMthThree = curMthThree + curMthTwo
curMthTwo = curMthOne
If curCurrent >= 0 Then
curMthOne = curCurrent
curCurrent = 0
Else
curMthOne = 0
End If
'If more paid than due then curCurrent will be in negative at this point
Set rst = basRunDataObject("dbo.spMthEndStatCharges", adCmdStoredProc)
rst.Find "LinkIDNo = " & lngStatID
If Not (rst.EOF Or rst.EOF) Then
curCurrent = curCurrent + Nz(rst!Charges, 0)
End If
'Make faster(?) by opening a query with just the current customers being
processed
Set rst = basRunDataObject("dbo.tblCustStatement", adCmdTable)
With rst
.Find "StatementID = " & lngStatID, , adSearchForward
If Not (.BOF Or .EOF) Then 'Statement record exists
!CurrentMth = curCurrent
!OneMonth = curMthOne
!TwoMonths = curMthTwo
!ThreeMonths = curMthThree
!StatementNote = DLookup("StatementNote",
"dbo.tblCustomers", "CustomerID = " & lngCustID)
.Update
End If
End With
rst.Close
Set rst = Nothing
Regards
David Emerson
DALYN Software Ltd
25b Cunliffe St, Johnsonville
Wellington, New Zealand
Ph/Fax (877) 456-1205