Next Chapter 23 Bank Book
Bank Book
'******************************************************************
'******************************************************************
'** Author : Samee Ullah Siddiqui
'** Subject : Creating Bank Book
'** Date : Friday, December, 12, 2003
'** Modified : Friday, December, 12, 2003
'******************************************************************
'******************************************************************
Option Explicit
Dim Bal As Double
Dim TerminateLoop As Boolean
Dim BankCode, BankName As String
Private Sub CancelCmd_Click()
Unload Me
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then SendKeys "{TAB}"
End Sub
Private Sub Form_Load()
Dim SQL As String
Dt1.Value = Date
Dt2.Value = Date
If DE.BankBKConn.State = adStateOpen Then DE.BankBKConn.Close
DE.BankBKConn.Open ShapeConnectString
Dim rst As New ADODB.Recordset
rst.CursorLocation = adUseClient
SQL = "SELECT * FROM ACMAST WHERE CASH = 'B' AND RECTYPE ='A'"
rst.Open SQL, DE.BankBKConn, adOpenForwardOnly, adLockReadOnly, adCmdText
Do Until rst.EOF
BankCB.AddItem rst!AcDESC
BankCB.ItemData(BankCB.NewIndex) = rst!AcCode
rst.MoveNext
Loop
If BankCB.ListCount > 0 Then
BankCB.ListIndex = 0
Else
OKCmd.Enabled = False
End If
End Sub
Private Sub OKCmd_Click()
Dim SQL As String
If OKCmd.Caption = "&OK" Then
If (Dt1.Value = "" Or (Not IsDate(Dt1.Value))) Then
MsgBox "Please enter a valid From date to view/print CASH BOOK", vbCritical, "Invalid Date"
Dt1.SetFocus
Exit Sub
ElseIf (Dt2.Value = "" Or (Not IsDate(Dt2.Value))) Then
MsgBox "Please enter a valid To date to view/print CASH BOOK", vbCritical, "Invalid Date"
Dt2.SetFocus
Exit Sub
End If
If CDate(Dt1.Value) > CDate(Dt2.Value) Then
MsgBox "To Date must greater then or equal to From Date", vbCritical, "Value Error..."
Exit Sub
End If
If BankCB.ListIndex < 0 Then
MsgBox "The Bank Book you want view/print could not be successfull because you have not select bank name of which Bank Book will be create." & vbCrLf & "Please Select Bank Name from drop down then press OK.", vbExclamation, "Missing Value..."
Exit Sub
Else
BankCode = GetProperCode(BankCB.ItemData(BankCB.ListIndex), 6)
BankName = BankCB.Text
End If
Dim CycleDate As Date
Dim i, V As Long
V = CDate(Dt2.Value) - CDate(Dt1.Value)
If V > 0 Then PB.Max = V
PB.Visible = True
DE.BankBKConn.BeginTrans
DE.BankBKConn.Execute "DELETE FROM BANKBOOK_TEMP"
Dim OpRst As New ADODB.Recordset
OpRst.CursorLocation = adUseClient
'Get Opening Amount of Selected Bank from ACTRANS table
Bal = 0
SQL = "SELECT * FROM ACTRANS WHERE ACCODE = '" & BankCode & "'"
OpRst.Open SQL, DE.BankBKConn, adOpenForwardOnly, adLockReadOnly, adCmdText
Bal = IIf(IsNull(OpRst!YOBDR), 0, OpRst!YOBDR)
If Bal = 0 Then Bal = IIf(IsNull(OpRst!YOBCR), 0, -OpRst!YOBCR)
OpRst.Close
'Get Opening Amount of Selected Bank from VOUCHER table
SQL = "SELECT SUM(DRAMT) AS DEBITAMT, SUM(CRAMT) AS CREDITAMT, SUM(DRAMT)-SUM(CRAMT) AS OPAMT FROM VOUCHER WHERE ACCODE = '" & BankCode & "' AND VDATE < '" & Dt1.Value & "'"
OpRst.Open SQL, DE.BankBKConn, adOpenForwardOnly, adLockReadOnly, adCmdText
Bal = Bal + IIf(IsNull(OpRst!OPAMT), 0, OpRst!OPAMT)
OKCmd.Caption = "&Abort"
CancelCmd.Enabled = False
TerminateLoop = False
Screen.MousePointer = vbHourglass
For CycleDate = Dt1.Value To Dt2.Value
If PrepairBankBook(CycleDate) Then
DoEvents
PB.Value = i
Label2(2).Caption = "Preparing of " & Format(CycleDate, "dd/mm/yy")
i = i + 1
If TerminateLoop Then
OKCmd.Caption = "&OK"
CancelCmd.Enabled = True
Screen.MousePointer = vbDefault
PB.Visible = False
Label2(2).Caption = ""
DE.BankBKConn.RollbackTrans
Exit Sub
End If
End If
Next CycleDate
Screen.MousePointer = vbDefault
OKCmd.Caption = "&OK"
CancelCmd.Enabled = True
PB.Visible = False
Label2(2).Caption = ""
DE.BankBKConn.CommitTrans
SQL = "SHAPE {SELECT * FROM BANKBOOK_TEMP;} AS BankBKCmd COMPUTE BankBKCmd, SUM(BankBKCmd.'CrAmt') AS CrTotal, SUM(BankBKCmd.'DrAmt') AS DrTotal BY 'VDATE'"
If DE.rsBankBKCmd_Grouping.State = adStateOpen Then DE.rsBankBKCmd_Grouping.Close
DE.rsBankBKCmd_Grouping.Open SQL, DE.BankBKConn, adOpenStatic, adLockReadOnly, adCmdText
Set BankBKRpt.DataSource = DE
With BankBKRpt
.Sections("DayBKCmd_Detail").Controls("txtDrNarr").Top = IIf(NarrChk.Value = vbChecked, 240, 0)
.Sections("DayBKCmd_Detail").Controls("txtDrNarr").Visible = NarrChk.Value = vbChecked
.Sections("DayBKCmd_Detail").Controls("txtCrNarr").Top = IIf(NarrChk.Value = vbChecked, 240, 0)
.Sections("DayBKCmd_Detail").Controls("txtCrNarr").Visible = NarrChk.Value = vbChecked
.Sections("DayBKCmd_Detail").Controls("Shape7").Height = IIf(NarrChk.Value = vbChecked, 480, 240)
.Sections("DayBKCmd_Detail").Controls("Shape8").Height = IIf(NarrChk.Value = vbChecked, 480, 240)
.Sections("DayBKCmd_Detail").Controls("Shape9").Height = IIf(NarrChk.Value = vbChecked, 480, 240)
.Sections("DayBKCmd_Detail").Height = IIf(NarrChk.Value = vbChecked, 480, 240)
End With
If Option1(0).Value Then
BankBKRpt.Show
Else
BankBKRpt.PrintReport
End If
Else
TerminateLoop = True
End If
End Sub
Private Function PrepairBankBook(ByVal DayDt As Date) As Boolean
Dim SQL As String
Dim i As Double
Dim CrRSt As New ADODB.Recordset
CrRSt.CursorLocation = adUseClient
Dim DrRSt As New ADODB.Recordset
DrRSt.CursorLocation = adUseClient
'Open Crdit Recordset
' SQL = "SELECT VOUCHER.SNO, VOUCHER.VTYPE, VOUCHER.VNO, VOUCHER.VDATE, VOUCHER.ACCODE, VOUCHER.ACCONTRA, VOUCHER.DRAMT, VOUCHER.CRAMT, VOUCHER.DRCR, ACMAST.ACDESC, COALESCE('(' + Voucher.NARR + ')','') AS NARRATION " & _
' "FROM VOUCHER INNER JOIN ACMAST ON VOUCHER.ACCODE = ACMAST.ACCODE WHERE VTYPE + VNO IN (SELECT VTYPE + VNO FROM VOUCHER WHERE ACCODE = '" & BankCode & "') AND VOUCHER.VDATE = '" & DayDt & "' AND VOUCHER.DRCR = 'C'"
SQL = "SELECT VOUCHER.SNO, VOUCHER.VTYPE, VOUCHER.VNO, VOUCHER.VDATE, VOUCHER.ACCODE, VOUCHER.ACCONTRA, VOUCHER.DRAMT, VOUCHER.CRAMT, VOUCHER.DRCR, ACMAST.ACDESC,COALESCE('(' + Voucher.NARR + ')',NULL) AS NARRATION " & _
"FROM VOUCHER INNER JOIN ACMAST ON VOUCHER.ACCODE = ACMAST.ACCODE WHERE VTYPE + VNO IN (SELECT VTYPE + VNO FROM VOUCHER WHERE ACCODE = '" & BankCode & "') AND VOUCHER.VDATE = '" & DayDt & "' AND VOUCHER.DRCR = 'C'"
CrRSt.Open SQL, DE.BankBKConn, adOpenForwardOnly, adLockReadOnly, adCmdText
'Open Debit Recordset
SQL = "SELECT VOUCHER.SNO, VOUCHER.VTYPE, VOUCHER.VNO, VOUCHER.VDATE, VOUCHER.ACCODE, VOUCHER.ACCONTRA, VOUCHER.DRAMT, VOUCHER.CRAMT, VOUCHER.DRCR, ACMAST.ACDESC,COALESCE('(' + Voucher.NARR + ')',NULL) AS NARRATION " & _
"FROM VOUCHER INNER JOIN ACMAST ON VOUCHER.ACCODE = ACMAST.ACCODE WHERE VTYPE + VNO IN (SELECT VTYPE + VNO FROM VOUCHER WHERE ACCODE = '" & BankCode & "') AND VOUCHER.VDATE = '" & DayDt & "' AND VOUCHER.DRCR = 'D'"
DrRSt.Open SQL, DE.BankBKConn, adOpenForwardOnly, adLockReadOnly, adCmdText
Dim TmpRst As New ADODB.Recordset
TmpRst.CursorLocation = adUseClient
TmpRst.Open "SELECT * FROM BANKBOOK_TEMP WHERE VDATE = '" & DayDt & "'", DE.BankBKConn, adOpenKeyset, adLockOptimistic, adCmdText
'Add a ROW for Selected Bank Opening (Opening)
TmpRst.AddNew
TmpRst!sno = TmpRst.RecordCount
TmpRst!vDate = DayDt
If Bal >= 0 Then
TmpRst!CRCode = "OP"
TmpRst!CrAmt = Bal
TmpRst!CRDESC = "By Opening " & BankName
ElseIf Bal < 0 Then
TmpRst!DRCode = "OP"
TmpRst!DrAmt = Bal
TmpRst!DRDESC = "To Opening " & BankName
End If
TmpRst.Update
Do Until DrRSt.EOF And CrRSt.EOF
SetCrValue:
If Not CrRSt.EOF Then
If CrRSt!AcCode <> BankCode Then 'Expect Selected Bank
TmpRst.AddNew
TmpRst!sno = TmpRst.RecordCount
TmpRst!vDate = CrRSt!vDate
TmpRst!CRCode = CrRSt!AcCode
TmpRst!CRDESC = "By " & CrRSt!AcDESC
TmpRst!CrAmt = CrRSt!CrAmt
TmpRst!CRNARR = CrRSt!NARRATION
Else
Bal = Bal - IIf(IsNull(CrRSt!CrAmt), 0, CrRSt!CrAmt)
If Not CrRSt.EOF Then CrRSt.MoveNext
GoTo SetCrValue
End If
End If
DoEvents
SetDrValue:
If Not DrRSt.EOF Then
If DrRSt.AbsolutePosition > CrRSt.RecordCount Then TmpRst.AddNew
If DrRSt!AcCode <> BankCode Then 'Expect Selected Bank
If Not IsNull(TmpRst!DRCode) Then TmpRst.AddNew
If IsNull(TmpRst!vDate) Then TmpRst!vDate = DrRSt!vDate
TmpRst!DRCode = DrRSt!AcCode
TmpRst!DRDESC = "To " & DrRSt!AcDESC
TmpRst!DrAmt = IIf(DrRSt!DrAmt = 0, Null, DrRSt!DrAmt)
TmpRst!DRNARR = DrRSt!NARRATION
Else
Bal = Bal + IIf(IsNull(DrRSt!DrAmt), 0, DrRSt!DrAmt)
If Not DrRSt.EOF Then DrRSt.MoveNext
GoTo SetDrValue
End If
End If
TmpRst.Update
If Not CrRSt.EOF Then CrRSt.MoveNext
If Not DrRSt.EOF Then DrRSt.MoveNext
Loop
'Add a ROW for Cash In Hand (Closing)
TmpRst.AddNew
TmpRst!sno = TmpRst.RecordCount
TmpRst!vDate = DayDt
If Bal >= 0 Then
TmpRst!DRCode = "CL"
TmpRst!DrAmt = Bal
TmpRst!DRDESC = "To Closing " & BankName
ElseIf Bal < 0 Then
TmpRst!CRCode = "CL"
TmpRst!CrAmt = Bal
TmpRst!CRDESC = "By Closing " & BankName
End If
TmpRst.Update
PrepairBankBook = True
End Function
Sponsored Links