Next Chapter 64 Voucher
PROJECT SOURCE CODE
SPONSORED LINKS
Voucher
'******************************************************************
'******************************************************************
'** Subject : Creating Vouchers Entry Screen
'** Date : Thursday, October, 16, 2003
'** Modified : Tuesday, October, 28, 2003
'******************************************************************
'******************************************************************
Option Explicit
Dim ADDMode As Boolean
Dim EditMode As Boolean
Dim EmptyTable As Boolean
Dim VoucherType As String
Dim FormLoaded As Boolean
Dim vRst As ADODB.Recordset
Dim Bmark
Dim Conn As ADODB.Connection
Const NumFormat As String = "#0.#0"
Dim WithEvents Txt As TextBox
Private Sub AddCmd_Click()
ADDMode = True
Call ClearFields
Call SetControls
Grd.Row = 1
Grd.Col = 1
VoucherDate = Date
Call VoucherDate_Change
VNoTxt = GetVoucherCode
Conn.BeginTrans
End Sub
Private Sub ClearFields()
Call SetGrid
DayLbl = ""
Me.DebitLbl = ""
Me.CreditLbl = ""
End Sub
Private Sub CancelCmd_Click()
Conn.RollbackTrans
ADDMode = False
EditMode = False
Call SetControls
End Sub
Private Sub DelCmd_Click()
Dim SQL As String
If VNoTxt = "" Then
MsgBox "Please, Select Voucher No. from list.", vbCritical, "Missing V.NO."
Exit Sub
End If
If MsgBox("This will delete the selected voucher [" & VNoTxt & "]. Are you sure to delete it ?", vbQuestion + vbYesNo + vbDefaultButton2, "Deletion Confirmation...") = vbNo Then Exit Sub
Dim VoucherRst As New ADODB.Recordset
VoucherRst.CursorLocation = adUseClient
'Update ACTRANS Table and then Delete record
SQL = "SELECT * FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VNoTxt & "'"
If VoucherRst.State = adStateOpen Then VoucherRst.Close
VoucherRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText
Do Until VoucherRst.EOF
Call BalancePost(EditPosting, IIf(VoucherRst!DrCr = "D", VoucherRst!DrAmt, VoucherRst!CrAmt), VoucherRst!DrCr, VoucherRst!AcCode, Conn)
VoucherRst.Delete
VoucherRst.MoveNext
Loop
Conn.CommitTrans
vRst.Requery
If Not (vRst.RecordCount > 0) Then EmptyTable = True
ADDMode = False
EditMode = False
Call SetControls
Call SetFieldsValues(vRst)
End Sub
Private Sub EditCmd_Click()
EditMode = True
Call ClearFields
Call SetControls
Grd.Row = 1
Grd.Col = 1
VNoTxt.SetFocus
Conn.BeginTrans
End Sub
Private Sub ExitCmd_Click()
Unload Me
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyEscape Then
If ADDMode Or EditMode Then
Call CancelCmd_Click
Else
Unload Me
End If
ElseIf Shift = vbCtrlMask And KeyCode = vbKeyLeft Then
If PrevCmd.Enabled Then PrevCmd.SetFocus
Call PrevCmd_Click
ElseIf Shift = vbCtrlMask And KeyCode = vbKeyRight Then
If NextCmd.Enabled Then NextCmd.SetFocus
Call NextCmd_Click
ElseIf Shift = vbCtrlMask And KeyCode = vbKeyHome Then
If TopCmd.Enabled Then TopCmd.SetFocus
Call TopCmd_Click
ElseIf Shift = vbCtrlMask And KeyCode = vbKeyEnd Then
If LastCmd.Enabled Then LastCmd.SetFocus
Call LastCmd_Click
ElseIf KeyCode = vbKeyF5 Then
Call SetAlignment
End If
End Sub
Private Sub SetGrid()
Dim i As Integer
With Grd
.Clear
.FormatString = " |Dr/Cr|<Account|>Debit|>Credit|Narration"
.ColWidth(0) = TextWidth("A") * 0
.ColWidth(1) = TextWidth("A") * 6
.ColWidth(2) = TextWidth("A") * 40
.ColWidth(3) = TextWidth("A") * 15
.ColWidth(4) = TextWidth("A") * 15
.ColWidth(5) = TextWidth("A") * 35
.RowHeight(0) = TextHeight("A") * 2
For i = 0 To .Cols - 1
.Row = 0
.Col = i
.CellFontBold = True
.CellTextStyle = flexTextRaisedLight
Next i
.Rows = 3
.Row = .FixedRows
.Col = 0
End With
End Sub
Private Sub Form_Load()
Set Txt = LTxt
End Sub
Private Sub Grd_EnterCell()
If Not (ADDMode Or EditMode) Then Exit Sub
Call SetAlignment 'Set Txt=LTxt / RTxt
Call SetMaxLength
If Grd.Col = 2 And Grd.Row > 0 Then
Txt = Grd.Text
ElseIf Grd.Col = 3 And Grd.Row > 0 Then
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "C" Then Grd.Col = 4
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "D" Then Grd.Col = 3
ElseIf Grd.Col = 4 And Grd.Row > 0 And UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "D" Then
Grd.Col = 5
ElseIf Grd.Col = 5 And Grd.Row > 2 Then
If Grd.TextMatrix(Grd.Row, 5) = "" Then
Grd.TextMatrix(Grd.Row, 5) = Grd.TextMatrix(Grd.Row - 2, 5)
End If
End If
End Sub
Private Sub Grd_KeyDown(KeyCode As Integer, Shift As Integer)
Call Txt_KeyDown(KeyCode, Shift)
End Sub
Private Sub Grd_LeaveCell()
If Not (ADDMode Or EditMode) Then Exit Sub
If Grd.Col = 1 And Grd.Row > 0 Then
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "C" Then
Grd.TextMatrix(Grd.Row, 1) = "Cr"
If Not (Val(Grd.TextMatrix(Grd.Row, 3)) = 0) Then
Grd.TextMatrix(Grd.Row, 4) = Grd.TextMatrix(Grd.Row, 3)
Grd.TextMatrix(Grd.Row, 3) = ""
End If
ElseIf UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "D" Then
Grd.TextMatrix(Grd.Row, 1) = "Dr"
If Not (Val(Grd.TextMatrix(Grd.Row, 4)) = 0) Then
Grd.TextMatrix(Grd.Row, 3) = Grd.TextMatrix(Grd.Row, 4)
Grd.TextMatrix(Grd.Row, 4) = ""
End If
End If
SaveCmd.Enabled = Not IsRowTobeAdd 'Display Debit & Credit Sum at the bottom
ElseIf Grd.Col = 2 And Grd.Row > 0 Then
If Grd.TextMatrix(Grd.Row, 1) = "Cr" And Not CrSrch.SelectedCompany = "" Then
If Not InStr(CrSrch.SelectedCompany, "-") = 0 Then
Txt = Mid(CrSrch.SelectedCompany, 1, InStr(CrSrch.SelectedCompany, "-") - 1)
Else
Txt = CrSrch.SelectedCompany
End If
Grd.TextMatrix(Grd.Row, 2) = Txt
Grd.TextMatrix(Grd.Row, 0) = CrSrch.UniqueCode
ElseIf Grd.TextMatrix(Grd.Row, 1) = "Dr" And Not DrSrch.SelectedCompany = "" Then
If Not InStr(DrSrch.SelectedCompany, "-") = 0 Then
Txt = Mid(DrSrch.SelectedCompany, 1, InStr(DrSrch.SelectedCompany, "-") - 1)
Else
Txt = DrSrch.SelectedCompany
End If
Grd.TextMatrix(Grd.Row, 2) = Txt
Grd.TextMatrix(Grd.Row, 0) = DrSrch.UniqueCode
End If
'Display Balance
If Not Grd.TextMatrix(Grd.Row, 0) = "" Then
If (Grd.Row + 1) <= (Grd.Rows - 1) Then Call MergeCells(Grd.Row + 1, Grd.TextMatrix(Grd.Row, 0))
End If
ElseIf (Grd.Col = 3 Or Grd.Col = 4) And Grd.Row > 0 Then
If Not Grd.TextMatrix(Grd.Row, 0) = "" Then
Dim Amt As Double
If Grd.TextMatrix(Grd.Row, 1) = "Cr" Then
Amt = -Val(Grd.TextMatrix(Grd.Row, 4))
Else
Amt = Val(Grd.TextMatrix(Grd.Row, 3))
End If
If (Grd.Row + 1) <= (Grd.Rows - 1) Then Call MergeCells(Grd.Row + 1, Grd.TextMatrix(Grd.Row, 0), Amt)
End If
End If
End Sub
Private Sub Grd_RowColChange()
If Not (ADDMode Or EditMode) Then Exit Sub
Dim i As Integer
Dim Amt As Double
i = Grd.Row Mod 2
Txt.Visible = i
If i = 0 Then
'MergeCells (Grd.TextMatrix(Grd.Row - 1, 0))
SaveCmd.Enabled = (ADDMode Or EditMode) And (DebitLbl.Caption = CreditLbl.Caption) And (Val(DebitLbl.Caption) <> 0 And Val(CreditLbl.Caption) <> 0)
End If
If Txt.Visible And (Grd.Col = 3 Or Grd.Col = 4) Then
If Grd.TextMatrix(Grd.Row, 1) = "Cr" And Grd.Col = 3 Then
Txt.Visible = False
ElseIf Grd.TextMatrix(Grd.Row, 1) = "Cr" And Grd.Col = 4 Then
Txt.Visible = True
ElseIf Grd.TextMatrix(Grd.Row, 1) = "Dr" And Grd.Col = 3 Then
Txt.Visible = True
ElseIf Grd.TextMatrix(Grd.Row, 1) = "Dr" And Grd.Col = 4 Then
Txt.Visible = False
End If
Else
'
End If
If Not Txt.Visible Then Exit Sub
If Not (Grd.CellWidth > 0 And Grd.CellHeight > 0) Then Exit Sub
Txt.Move (Screen.TwipsPerPixelX * 3) + Grd.CellLeft, Grd.Top + Grd.CellTop, Grd.CellWidth, Grd.CellHeight
If Txt.Visible And Txt.Enabled Then
Txt = Grd.Text
SelectText Txt
Txt.SetFocus
End If
End Sub
Private Sub MergeCells(ByVal R As Integer, ByVal vCode As String, Optional vAmount As Double)
Dim i As Integer, BalAmt As Double
Dim vTxt, SQL As String
Dim rst As New ADODB.Recordset
rst.CursorLocation = adUseClient
SQL = "Select * from ACTRANS Where ACCODE = '" & vCode & "'"
rst.Open SQL, Conn, adOpenForwardOnly, adLockReadOnly, adCmdText
If Not (rst.RecordCount > 0) Then Exit Sub
BalAmt = IIf(IsNull(rst!CLOSING), 0, rst!CLOSING) + vAmount
vTxt = "Current Balance (Rs. " & Format(Abs(BalAmt), NumFormat) & " ) " & IIf(BalAmt < 0, "Cr", IIf(BalAmt > 0, "Dr", ""))
With Grd
If Not (R > (.FixedRows - 1)) Then Exit Sub
.MergeCells = flexMergeRestrictRows
.MergeRow(R) = True
For i = 2 To .Cols - 1
.TextMatrix(R, i) = Space(10) & vTxt
Next i
End With
End Sub
Private Sub SetAlignment()
If Not (ADDMode Or EditMode) Then Exit Sub
RTxt.Visible = False
Select Case Grd.Col
Case 1 'Dr/Cr
Set Txt = LTxt
Case 2 'Account
Set Txt = LTxt
Case 3 'Debit
RTxt.Visible = True
Set Txt = RTxt
Case 4 'Credit
RTxt.Visible = True
Set Txt = RTxt
Case 5 'Narration
Set Txt = LTxt
Case Else
Set Txt = LTxt
End Select
End Sub
Private Sub SetMaxLength()
Select Case Grd.Col
Case 1 'Dr/Cr
Txt.MaxLength = 2
Case 2 'Account
Txt.MaxLength = 50
Case 3 'Debit
Txt.MaxLength = 8
Case 4 'Credit
Txt.MaxLength = 8
Case 5 'Narration
Txt.MaxLength = 50
End Select
End Sub
Private Sub LTxt_KeyDown(KeyCode As Integer, Shift As Integer)
If Not (ADDMode Or EditMode) Then Exit Sub
If Grd.Col <> 2 Then Exit Sub
If Shift = vbCtrlMask And KeyCode = 40 Then
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "C" Then CrSrch.MoveNext
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "D" Then DrSrch.MoveNext
ElseIf Shift = vbCtrlMask And KeyCode = 38 Then
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "C" Then CrSrch.MovePrevious
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "D" Then DrSrch.MovePrevious
End If
End Sub
Private Sub PrintCmd_Click()
On Error GoTo ErHand
Dim SQL As String
If VNoTxt = "" Then
MsgBox "There is no current Voucher No. to print.", vbExclamation, "Missing Values"
Exit Sub
End If
If DE.VoucherConn.State = adStateOpen Then DE.VoucherConn.Close
DE.VoucherConn.Open ShapeConnectString
If DE.rsMasterRst.State = adStateOpen Then DE.rsMasterRst.Close
SQL = "SHAPE {SELECT DISTINCT VOUCHER.VNO, VOUCHER.VTYPE, VOUCHER.VDATE, Sum(VOUCHER.DRAMT) AS TotalOfDr, Sum(VOUCHER.CRAMT) AS TotalOfCr From VOUCHER " & _
"WHERE (VOUCHER.VTYPE='" & VoucherType & "' AND VOUCHER.VNO = '" & VNoTxt & "') GROUP BY VOUCHER.VNO, VOUCHER.VTYPE, VOUCHER.VDATE ORDER BY VOUCHER.VNO DESC} AS MasterRst APPEND ({SELECT VOUCHER.SNO, VOUCHER.VTYPE, VOUCHER.VNO, VOUCHER.VDATE, VOUCHER.ACCODE, ACMAST.ACDESC, VOUCHER.ACCONTRA, CASE WHEN VOUCHER.DRCR='D' THEN VOUCHER.DRAMT ELSE Null END AS DebitAmt, CASE WHEN VOUCHER.DRCR='C' THEN VOUCHER.CRAMT ELSE Null END AS CreditAmt, VOUCHER.DRCR, VOUCHER.NARR " & _
"FROM VOUCHER INNER JOIN ACMAST ON VOUCHER.ACCODE = ACMAST.ACCODE ORDER BY VOUCHER.DRCR} AS DetailRst RELATE 'VNO' TO 'VNO','VTYPE' TO 'VTYPE') AS DetailRst"
DE.rsMasterRst.Open SQL, DE.VoucherConn, adOpenForwardOnly, adLockReadOnly, adCmdText
Set VoucherRpt.DataSource = DE
VoucherRpt.Sections("ReportHeader").Controls("lblHeader").Caption = Label1(1).Caption
If PrintChk.Value = vbChecked Then
VoucherRpt.Show
Else
VoucherRpt.PrintReport
End If
ErHand:
ErrHandler "VoucherFrm.CmdPrint"
End Sub
Private Sub RTxt_KeyPress(KeyAscii As Integer)
ValidateNumber KeyAscii
End Sub
Private Sub SaveCmd_Click()
If Not SavedData Then Exit Sub
Conn.CommitTrans
If ADDMode Then EmptyTable = False
vRst.Requery
RecordLbl = "Record " & vRst.AbsolutePosition & " of " & vRst.RecordCount
ADDMode = False
EditMode = False
Call SetControls
End Sub
Private Sub Txt_Change()
If Not (ADDMode Or EditMode) Then Exit Sub
If Grd.Col = 3 Or Grd.Col = 4 Then
Grd.Text = Txt.Text
Else
Grd.Text = Txt.Text
If Grd.Col = 2 And (ADDMode Or EditMode) Then
If Grd.TextMatrix(Grd.Row, 1) = "Cr" Then
'CrSrch.SearchValue Grd.Text
CrSrch.SearchValue Txt.Text
ElseIf Grd.TextMatrix(Grd.Row, 1) = "Dr" Then
'DrSrch.SearchValue Grd.Text
DrSrch.SearchValue Txt.Text
End If
End If
End If
End Sub
Private Sub Txt_KeyDown(KeyCode As Integer, Shift As Integer)
If Not (ADDMode Or EditMode) Then Exit Sub
If Not Shift = 0 Then Exit Sub
With Txt
Select Case KeyCode
Case vbKeyRight
If .SelStart = Len(.Text) Then Call ShiftToRightCell
Case vbKeyLeft
If .SelStart = 0 Then Call ShiftToLeftCell
Case vbKeyUp
Call ShiftToUpperCell
Case vbKeyDown
Call ShiftToLowerCell
Case vbKeyReturn
Call ShiftToRightCell
End Select
End With
End Sub
Private Sub ShiftToRightCell()
If (Grd.Col < Grd.Cols - 1) And (Grd.Col > Grd.FixedCols - 1) Then
Grd.Col = Grd.Col + 1
ElseIf Grd.Col = (Grd.Cols - 1) Then
If (Grd.Row < (Grd.Rows - 1)) Then
If IsRowTobeAdd Then
If Grd.Row = (Grd.Rows - 2) Then
Grd.Col = Grd.FixedCols
Grd.AddItem ""
Grd.AddItem ""
Grd.Row = Grd.Row + 1 'Skip with single rows (To Display Balance)
Grd.Row = Grd.Row + 1
Else
If (Grd.Row + 2) <= (Grd.Rows - 1) Then
Grd.Col = 1
Grd.Row = Grd.Row + 2
End If
End If
Else
Grd.Row = Grd.Row + 1 'Skip with single rows (To Display Balance)
'If Not EditMode Then
If SaveCmd.Enabled Then SaveCmd.SetFocus
'End If
End If
End If
End If
End Sub
Private Function IsRowTobeAdd() As Double
Dim DebitAmt, CreditAmt As Double
DebitAmt = SumOfColumn(3)
DebitLbl = Format(DebitAmt, "0.00")
CreditAmt = SumOfColumn(4)
CreditLbl = Format(CreditAmt, "0.00")
IsRowTobeAdd = Not (DebitAmt = CreditAmt)
End Function
Private Function SumOfColumn(ByVal GridCol As Integer) As Double
Dim i, vSumVal As Double
If Not Grd.Cols > GridCol Then Exit Function
For i = 1 To Grd.Rows - 1
If Not (Grd.TextMatrix(i, 0) = "" Or Grd.TextMatrix(i, 1) = "" Or Grd.TextMatrix(i, 0) = "") Then
vSumVal = vSumVal + Val(Grd.TextMatrix(i, GridCol))
End If
Next i
SumOfColumn = vSumVal
End Function
Private Sub ShiftToLeftCell()
If (Grd.Col > Grd.FixedCols) And (Grd.Col < Grd.Cols) Then
If (Grd.Col - 1) = 3 And Grd.Row > 0 Then
If UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "C" Then Grd.Col = 2
ElseIf ((Grd.Col - 1) = 4 And Grd.Row > 0) And UCase(Left(Grd.TextMatrix(Grd.Row, 1), 1)) = "D" Then
Grd.Col = 3
Else
Grd.Col = Grd.Col - 1
End If
End If
End Sub
Private Sub ShiftToUpperCell()
If (Grd.Row > Grd.FixedRows) Then Grd.Row = Grd.Row - 1
End Sub
Private Sub ShiftToLowerCell()
If (Grd.Row < Grd.Rows - 1) And (Grd.Row > Grd.FixedRows - 1) Then Grd.Row = Grd.Row + 1
End Sub
Private Sub SetControls()
'Set Forms Control's status
Grd.Enabled = (ADDMode Or EditMode)
AddCmd.Enabled = Not (ADDMode Or EditMode)
EditCmd.Enabled = Not (EmptyTable Or ADDMode Or EditMode)
PrintCmd.Enabled = Not (EmptyTable Or ADDMode Or EditMode)
PrintChk.Enabled = Not (EmptyTable Or ADDMode Or EditMode)
If Not (ADDMode Or EditMode) Then SaveCmd.Enabled = False
CancelCmd.Enabled = (ADDMode Or EditMode)
CancelCmd.Cancel = (ADDMode Or EditMode)
DelCmd.Enabled = (Not EmptyTable) And (EditMode)
ExitCmd.Enabled = Not (ADDMode Or EditMode)
ExitCmd.Cancel = Not (ADDMode Or EditMode)
VoucherDate.Enabled = (ADDMode Or EditMode)
VNoTxt.Enabled = EditMode
If Not (ADDMode Or EditMode) Then LTxt.Visible = False
If Not (ADDMode Or EditMode) Then RTxt.Visible = False
If Not (ADDMode Or EditMode) Then DrSrch.HideList
If Not (ADDMode Or EditMode) Then CrSrch.HideList
TopCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (vRst.AbsolutePosition > 1)
PrevCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (vRst.AbsolutePosition > 1)
NextCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (vRst.AbsolutePosition < vRst.RecordCount)
LastCmd.Enabled = (Not (EmptyTable Or ADDMode Or EditMode)) And (vRst.AbsolutePosition < vRst.RecordCount)
Timer1.Enabled = (ADDMode Or EditMode)
End Sub
Private Function GetCaption(ByVal vString As String) As String
Select Case vString
Case Is = "PT"
GetCaption = "Payment Voucher"
Case Is = "RT"
GetCaption = "Receipt Voucher"
Case Is = "CO"
GetCaption = "Contra Voucher"
Case Is = "JV"
GetCaption = "Journal Voucher"
Case Else
GetCaption = "Unknown Voucher Type"
End Select
End Function
Private Sub Form_Paint()
Dim SQL As String
If FormLoaded Then Exit Sub
VoucherType = Me.Tag
If Me.Tag = "" Then
MsgBox "Cannot indentified voucher type.", vbCritical, "Application Terminated"
Exit Sub
End If
Label1(1).Caption = GetCaption(VoucherType)
Me.Caption = Label1(1).Caption
Set Conn = New ADODB.Connection
Conn.mode = adModeReadWrite
Conn.CursorLocation = adUseClient
Conn.Open ShapeConnectString
With DrSrch
.DBConnectString = ConnectString
.SQLString = "SELECT VNO, VNO + Space(5) + ACDESC FROM SALE WHERE VTYPE = '" & VoucherType & "'"
.SQLString = "Select Accode, COALESCE(AcDesc + Space(5) + ' -> ' + ACAlias,AcDesc) From ACMAST Where RECType = 'A'"
.PopulateList
End With
With CrSrch
.DBConnectString = ConnectString
.SQLString = "SELECT VNO, VNO + Space(5) + ACDESC FROM SALE WHERE VTYPE = '" & VoucherType & "'"
.SQLString = "Select Accode,COALESCE(AcDesc + Space(5) + ' -> ' + ACAlias,AcDesc) From ACMAST Where RECType = 'A'"
.PopulateList
End With
Call SetGrid
Set vRst = New ADODB.Recordset
vRst.CursorLocation = adUseClient
SQL = "SHAPE {SELECT DISTINCT VOUCHER.VNO, VOUCHER.VTYPE, VOUCHER.VDATE, Sum(VOUCHER.DRAMT) AS TotalOfDr, Sum(VOUCHER.CRAMT) AS TotalOfCr From VOUCHER " & _
"WHERE (((VOUCHER.VTYPE)='" & VoucherType & "')) GROUP BY VOUCHER.VNO, VOUCHER.VTYPE, VOUCHER.VDATE ORDER BY VOUCHER.VNO DESC} AS MasterRst APPEND ({SELECT VOUCHER.SNO, VOUCHER.VTYPE, VOUCHER.VNO, VOUCHER.VDATE, VOUCHER.ACCODE, ACMAST.ACDESC, VOUCHER.ACCONTRA, VOUCHER.DRAMT, VOUCHER.CRAMT, VOUCHER.DRCR, VOUCHER.NARR " & _
"FROM VOUCHER INNER JOIN ACMAST ON VOUCHER.ACCODE = ACMAST.ACCODE ORDER BY VOUCHER.DRCR} AS DetailRst RELATE 'VNO' TO 'VNO','VTYPE' TO 'VTYPE') AS DetailRst"
vRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText
If vRst.RecordCount > 0 Then
Call SetFieldsValues(vRst)
Else
EmptyTable = True
End If
Call SetControls
FormLoaded = True
End Sub
Private Sub Txt_KeyPress(KeyAscii As Integer)
If Not (ADDMode Or EditMode) Then Exit Sub
If Grd.Col = 1 Then
If Not (UCase(Chr(KeyAscii)) = "D" Or UCase(Chr(KeyAscii)) = "C") And KeyAscii <> vbKeyBack Then KeyAscii = 0
End If
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
If Not Txt.Visible Then Exit Sub
If Not (ActiveControl.Name = "LTxt") Then
If DrSrch.ListVisible Then DrSrch.HideList
If CrSrch.ListVisible Then CrSrch.HideList
ElseIf (ActiveControl.Name = "LTxt") Then
If (Grd.Col = 2) Then
If Grd.TextMatrix(Grd.Row, 1) = "Dr" Then
CrSrch.HideList
If Not DrSrch.ListVisible Then
DrSrch.ShowList 490, 10
If ActiveControl.Name = "LTxt" Then LTxt.SetFocus
End If
ElseIf Grd.TextMatrix(Grd.Row, 1) = "Cr" Then
DrSrch.HideList
If Not CrSrch.ListVisible Then
CrSrch.ShowList 490, 10
If ActiveControl.Name = "LTxt" Then LTxt.SetFocus
End If
End If
Else
If DrSrch.ListVisible Then DrSrch.HideList
If CrSrch.ListVisible Then CrSrch.HideList
End If
End If
End Sub
Private Function SavedData() As Boolean
On Error GoTo SAM
Dim SQL, VoucherNo As String
Dim R As Integer
Dim VoucherRst As New ADODB.Recordset
VoucherRst.CursorLocation = adUseClient
If EditMode And VNoTxt = "" Then
MsgBox "Please enter a valid Voucher to edit record.", vbCritical, "Missing Value"
Exit Function
End If
VoucherNo = IIf(ADDMode, GetVoucherCode(), VNoTxt)
'Update ACTRANS Table at Editing Time
SQL = "SELECT * FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"
If VoucherRst.State = adStateOpen Then VoucherRst.Close
VoucherRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText
Do Until VoucherRst.EOF
Call BalancePost(EditPosting, IIf(VoucherRst!DrCr = "D", VoucherRst!DrAmt, VoucherRst!CrAmt), VoucherRst!DrCr, VoucherRst!AcCode, Conn)
VoucherRst.Delete
VoucherRst.MoveNext
Loop
'Saving data to voucher table
If VoucherRst.State = adStateOpen Then VoucherRst.Close
VoucherRst.Open "VOUCHER", Conn, adOpenKeyset, adLockOptimistic, adCmdTable
For R = 1 To Grd.Rows - 1 Step 2
If Not (Grd.TextMatrix(R, 0) = "" Or Grd.TextMatrix(R, 1) = "") Then
VoucherRst.AddNew
VoucherRst!sno = GetVoucherID
VoucherRst!VType = VoucherType
VoucherRst!Vno = VoucherNo
VoucherRst!vDate = VoucherDate.Value
VoucherRst!AcCode = Grd.TextMatrix(R, 0)
VoucherRst!ACContra = AccountraCode(Grd.TextMatrix(R, 1))
VoucherRst!DrAmt = IIf(Grd.TextMatrix(R, 1) = "Cr", 0, Val(Grd.TextMatrix(R, 3)))
VoucherRst!CrAmt = IIf(Grd.TextMatrix(R, 1) = "Cr", Val(Grd.TextMatrix(R, 4)), 0)
VoucherRst!DrCr = IIf(Grd.TextMatrix(R, 1) = "Cr", "C", "D")
VoucherRst!NARR = Grd.TextMatrix(R, 5)
VoucherRst.Update
End If
Next R
'Update ACTRANS Table
SQL = "SELECT * FROM VOUCHER WHERE VTYPE = '" & VoucherType & "' AND VNO = '" & VoucherNo & "'"
If VoucherRst.State = adStateOpen Then VoucherRst.Close
VoucherRst.Open SQL, Conn, adOpenKeyset, adLockOptimistic, adCmdText
Do Until VoucherRst.EOF
Call BalancePost(ADDPosting, IIf(VoucherRst!DrCr = "D", VoucherRst!DrAmt, VoucherRst!CrAmt), VoucherRst!DrCr, VoucherRst!AcCode, Conn)
VoucherRst.MoveNext
Loop
SavedData = True
Exit Function
SAM:
MsgBox "ERROR IN SAVE DATA", vbInformation, App.Title
End Function
Private Function AccountraCode(CrDr As String) As String
Dim R As Integer
For R = 1 To Grd.Rows - 1 Step 2
If Grd.TextMatrix(R, 1) = IIf(CrDr = "Cr", "Dr", "Cr") Then
'MsgBox R & CrDr & vbCrLf & Grd.TextMatrix(R, 1) & vbCrLf & Grd.TextMatrix(R, 0)
AccountraCode = Grd.TextMatrix(R, 0)
Exit For
End If
Next R
End Function
Private Sub SetFieldsValues(ByRef rst As ADODB.Recordset)
Dim ItemString As String
Dim ItemRst As New ADODB.Recordset
ItemRst.CursorLocation = adUseClient
If Not rst.RecordCount > 0 Then
RecordLbl = "(None)"
Call ClearFields
Exit Sub
End If
If rst.BOF Then rst.MoveFirst
If rst.EOF Then rst.MoveLast
RecordLbl = "Record " & rst.AbsolutePosition & " of " & rst.RecordCount
VNoTxt = rst!Vno
VoucherDate = rst!vDate
DayLbl = Format(rst!vDate, "dddd")
DebitLbl = Format(rst!TotalOfDr, NumFormat)
CreditLbl = Format(rst!TotalOfCr, NumFormat)
Set ItemRst = rst("DetailRst").UnderlyingValue
Grd.Rows = 1
If Not (ItemRst.RecordCount > 0) Then
Grd.AddItem "" 'Add a blank row if Item not found
Exit Sub
End If
Do Until ItemRst.EOF
ItemString = ItemRst!AcCode & vbTab & IIf(ItemRst!DrCr = "C", "Cr", "Dr") & vbTab & ItemRst!AcDESC
ItemString = ItemString & vbTab & ItemRst!DrAmt & vbTab & ItemRst!CrAmt & vbTab & ItemRst!NARR
Grd.AddItem ItemString
Grd.AddItem ""
Grd.Row = Grd.Rows - 1
Call MergeCells(Grd.Row, ItemRst!AcCode)
ItemRst.MoveNext
Loop
End Sub
Private Function GetVoucherCode() As String
Dim RS As New ADODB.Recordset
RS.Open "Select Max(VNO) From VOUCHER WHERE VTYPE = '" & VoucherType & "'", Conn, adOpenDynamic, adLockOptimistic
GetVoucherCode = GetProperCode(IIf(IsNull(RS(0)), "1", RS(0) + 1), 6)
End Function
Private Sub VNoTxt_GotFocus()
If Not EditMode Then Exit Sub
SelectText VNoTxt
End Sub
Private Sub VNoTxt_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then SendKeys "{TAB}"
End Sub
Private Sub VNoTxt_Validate(Cancel As Boolean)
If Not EditMode Then Exit Sub
Dim SQL As String
Dim BeforeSearchBmark
If VNoTxt.Text = "" Then Exit Sub
If vRst.AbsolutePosition > 0 Then BeforeSearchBmark = vRst.Bookmark
VNoTxt = GetProperCode(VNoTxt, 6)
vRst.MoveFirst
vRst.Find "VNO='" & VNoTxt & "'"
If vRst.EOF Then
MsgBox "Voucher No. not found.", vbCritical, "Invalid Voucher No."
If Not IsEmpty(BeforeSearchBmark) Then vRst.Bookmark = BeforeSearchBmark
Else
Bmark = vRst.Bookmark
Call SetFieldsValues(vRst)
Grd.Row = 1
Grd.Col = 1
End If
End Sub
Private Sub VoucherDate_Change()
DayLbl = Format(VoucherDate, "dddd")
End Sub
Private Sub NextCmd_Click()
NextMove vRst
Call SetFieldsValues(vRst)
Call SetControls
End Sub
Private Sub PrevCmd_Click()
PreviousMove vRst
Call SetFieldsValues(vRst)
Call SetControls
End Sub
Private Sub TopCmd_Click()
TopMove vRst
Call SetFieldsValues(vRst)
Call SetControls
End Sub
Private Sub LastCmd_Click()
LastMove vRst
Call SetFieldsValues(vRst)
Call SetControls
End Sub
Private Sub VoucherDate_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then SendKeys "{TAB}"
End Sub
Private Function GetVoucherID() As String
Dim RS As New ADODB.Recordset
RS.Open "Select Max(SNO) From Voucher", Conn, adOpenDynamic, adLockOptimistic
If Not RS.EOF Then GetVoucherID = GetProperCode(IIf(IsNull(RS(0)), "1", Mid(RS(0), 2) + 1), 6) Else GetVoucherID = GetProperCode("1", 6)
End Function