⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clsvouchermethod.cls

📁 金算盘软件代码
💻 CLS
📖 第 1 页 / 共 4 页
字号:
        cMsgBox "凭证已记帐,不能修改!"
        ElseIf IsChecked Then cMsgBox "凭证已复核,不能修改!"
        ElseIf oldlngOperatorID <> gclsBase.OperatorID Then cMsgBox "不能修改别人填制的凭证!"
        ElseIf lngVoucherSourceID > 1 Then cMsgBox "不能修改机制凭证!"
        Else: cMsgBox "不能修改凭证!"
        End If
        Exit Function
    End If
    
End Function


'删除凭证
'Optional ByRef lngVoucherID_Cancel :如果删除的凭证有冲销凭证,返回删除的冲销凭证的ID(作用:让列表不显示删除的冲销凭证)
'blnTrans:删除由通用转帐模块调用(不必进行删除权限检查)
'blnTrans1:删除通用转帐凭证
'blnByVoid:删除功能由作废调用
'blnBeginTran   起用事务标志
Public Function DeleteVoucher(lngVoucherID As Long, Optional blnNoMsg As Boolean, Optional argVoucher As String, Optional ByRef lngVoucherID_Cancel As Long, Optional blnTrans As Boolean, Optional ByVal blnByVoid As Boolean, Optional ByVal blnTrans1 As Boolean = False, Optional ByVal blnBeginTran As Boolean = True) As Boolean
    Dim strSql As String
    Dim recTemp As rdoResultset
    Dim lngSourceVoucherID As Long
    Dim lngTransVoucherID As Long  '冲销凭证的来源凭证ID 或 转帐凭证的对应转帐模板ID
    Dim i As Long
    Dim strTip As String
    Dim strDelVoid As String
    Dim strVoucherName As String
    Dim strT As String
    
    If blnTrans1 Then
        strT = "转帐凭证"
    Else
        strT = "凭证"
    End If
    strDelVoid = IIf(blnByVoid, "作废", "删除")

'    If blnByVoid Then GoTo theBegin '作废操作调用删除
    If blnTrans = True Then GoTo theBegin '跳过权限检查
    Select Case lngVoucherSourceID
        Case 2
            strVoucherName = "冲销凭证"
        Case Else
            strVoucherName = "凭证"
    End Select
    If Trim(argVoucher) = "" Then
        strTip = "本张"
    Else
        strTip = argVoucher + "号"
    End If
    
    If Not GetVoucherStatus(lngVoucherID) Then
        If blnDeleted Then
            DeleteVoucher = True
        End If
        Exit Function
    End If
    If IsClosed Then
    '期间已结帐
        cMsgBox strTip & "凭证期间的会计期间已结帐,不能" & strDelVoid & "!", strDelVoid & "凭证"
        Exit Function
    End If
    '凭证已记帐或复核,删除凭证功能应置灰
    '不能对别人填制的凭证进行删除操作
    If Not IsChecked And Not IsPosted And (oldlngOperatorID = gclsBase.OperatorID) Then
        Select Case lngVoucherSourceID
            Case 15 '记提折旧
                If DelIntperiod(lngVoucherID) = False Then
                    Exit Function
                End If
        End Select
        GoTo theDel
    Else
        '可依据情况,给出不能删除的原因
        If IsPosted Then
            If blnNoMsg = False Then cMsgBox strTip & "凭证已记帐,不能" & strDelVoid & "!", strDelVoid & "凭证"
        ElseIf IsChecked Then
            If blnNoMsg = False Then cMsgBox strTip & "凭证已复核,不能" & strDelVoid & "!", strDelVoid & "凭证"
        ElseIf oldlngOperatorID <> gclsBase.OperatorID Then
            If blnTrans1 Then
                If blnNoMsg = False Then cMsgBox "不能覆盖他人执行转帐生成的凭证!", "执行转帐凭证"
            Else    '***********
                If blnNoMsg = False Then cMsgBox "不能" & strDelVoid & "别人填制的凭证!", strDelVoid & "凭证"
            End If
        Else
            If blnNoMsg = False Then cMsgBox "不能" & strDelVoid & strTip & "凭证!"
        End If
        Exit Function
    End If
    
theDel:
      
    If blnNoMsg = False Then
        '如果删除作废的单据,应只删除单据体
        If IsCancel Then
            If ShowMsg(thehWnd, strDelVoid & strTip & "凭证将同时删除其冲销凭证" & strVoucher_Cancel & "您确实要" & strDelVoid & strTip & "凭证吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
        ElseIf strSourceVoucherCode <> "" Then
            If ShowMsg(thehWnd, strTip & "凭证是根据" & strSourceVoucherCode & "号凭证生成的冲销凭证,您确实要" & strDelVoid & strTip & "凭证吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
        End If
        If IsVoid Then
            If blnByVoid Then Exit Function
            If ShowMsg(thehWnd, "您确实要" & strDelVoid & "已经作废的" & strTip & strVoucherName & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
            If (Not blnTrans) And blnBeginTran Then gclsBase.BaseWorkSpace.BeginTrans
            GoTo DeleteItem
        ElseIf IsError Then '凭证有误
             If ShowMsg(thehWnd, "您确实要" & strDelVoid & "有错误标志的凭证吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
        '3.带"打印"标志的凭证
        ElseIf IsPrint Then
             If ShowMsg(thehWnd, "您确实要" & strDelVoid & "有打印标志的凭证吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
        '4.需要在下月初,进行冲销的凭证
        Else
            If blnByVoid And IsCancel = False And strSourceVoucherCode = "" Then
                If ShowMsg(thehWnd, "凭证作废后将不能取消作废,您确实要" & strDelVoid & strTip & strVoucherName & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
            ElseIf IsCancel = False And strSourceVoucherCode = "" Then
                If ShowMsg(thehWnd, "您确实要" & strDelVoid & strTip & strVoucherName & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, strDelVoid & "凭证") <> IDYES Then Exit Function
            End If
        End If
    Else
        GoTo theBegin
    End If
''''''''''''
    If Not GetVoucherStatus(lngVoucherID) Then
        If blnDeleted Then
            DeleteVoucher = True
        End If
        Exit Function
    End If
    If IsClosed Then
    '期间已结帐
        cMsgBox strTip & "凭证期间的会计期间已结帐,不能" & strDelVoid & "!", strDelVoid & "凭证"
        Exit Function
    End If
    '凭证已记帐或复核,删除凭证功能应置灰
    '不能对别人填制的凭证进行删除操作
    If Not IsChecked And Not IsPosted And (oldlngOperatorID = gclsBase.OperatorID) Then
        GoTo theBegin
    Else
        '可依据情况,给出不能删除的原因
        If IsPosted Then
            If blnNoMsg = False Then cMsgBox strTip & "凭证已记帐,不能" & strDelVoid & "!", strDelVoid & "凭证"
        ElseIf IsChecked Then
            If blnNoMsg = False Then cMsgBox strTip & "凭证已复核,不能" & strDelVoid & "!", strDelVoid & "凭证"
        ElseIf oldlngOperatorID <> gclsBase.OperatorID Then
            If blnTrans1 Then
                If blnNoMsg = False Then cMsgBox "不能覆盖他人执行转帐生成的凭证!", "执行转帐凭证"
            Else    '***********
                If blnNoMsg = False Then cMsgBox "不能" & strDelVoid & "别人填制的凭证!", strDelVoid & "凭证"
            End If
        Else
            If blnNoMsg = False Then cMsgBox "不能" & strDelVoid & strTip & "凭证!"
        End If
        Exit Function
    End If
''''''''''''
theBegin:
On Error GoTo DeleteVoucherErr
    
    If (Not blnTrans) And blnBeginTran Then gclsBase.BaseWorkSpace.BeginTrans
    
    Select Case lngVoucherSourceID
    Case 1 '   手工
    Case 2 '删除冲销凭证
    Case 3, 4        '清除《Setting》
        If lngVoucherSourceID = 3 Then
            strSql = "DELETE From Setting WHERE strSection='损益结转' AND LTRIM(strSetting)='" & lngVoucherID & "'"
        Else
            strSql = "DELETE From Setting WHERE strSection='汇兑损益' AND LTRIM(strSetting)='" & lngVoucherID & "'"
        End If
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    
    Case 5, 6, 7, 8  '清除业务表:《Activity》
        strSql = "UPDATE Activity SET lngVoucherID = 0 WHERE lngVoucherID=" & lngVoucherID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    
    Case 9, 10, 11   '清除商品业务表:《ItemActivity》
        strSql = "UPDATE ItemActivity SET blnNoInvoice=0," & _
                    "lngVoucherID = DECODE(lngVoucherID," & lngVoucherID & ",0 ,lngVoucherID)," & _
                    "lngVoucherID1 = DECODE(lngVoucherID1," & lngVoucherID & ",0 ,lngVoucherID1) " & _
                    " WHERE lngVoucherID=" & lngVoucherID & " OR lngVoucherID1=" & lngVoucherID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
        strSql = "UPDATE Activity SET lngVoucherID = 0 WHERE lngVoucherID=" & lngVoucherID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    
    Case 12         '成本结转
        'cMsgBox "处理方法待定!!!"
     
    Case 15
        If DelIntperiod(lngVoucherID) = False Then GoTo DeleteVoucherErr
    Case 16         '通用转帐
        '删除的通用转帐凭证是最近生成的,应将通用转帐中的“最近生成凭证ID”TransVoucher.lngVoucherID重新设置
        '说明:lngSourceVoucherID保存转帐模板的ID(王成再在通用转帐中设置)
        
        '1)判断凭证是否是某条通用转帐模板最近生成的
        strSql = "SELECT TransVoucher.lngTransVoucherID From TransVoucher WHERE lngVoucherID=" & lngVoucherID
        Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
        
        If Not recTemp.BOF Then '是最近生成
            lngTransVoucherID = recTemp(0)
            Set recTemp = Nothing
            '寻找改转帐模板另一最近生成的凭证
            strSql = "SELECT Max(lngVoucherID) AS lngVoucherIDOfMax From Voucher WHERE lngVoucherSourceID=16 AND lngSourceVoucherID=" & lngTransVoucherID & " AND lngVoucherID <>" & lngVoucherID
            Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
            If recTemp.BOF And recTemp.EOF Then
                strSql = "UPDATE TransVoucher SET lngExecutantID = 0, strExecuteDate = ' ',lngVoucherID = 0 WHERE lngTransVoucherID=" & lngTransVoucherID
            Else
                If Not IsNull(recTemp(0)) Then
                    strSql = "SELECT lngOperatorID,strDate,lngVoucherID From Voucher WHERE lngVoucherID=" & recTemp(0)

                    Set recTemp = Nothing '关闭生成最大ID的记录集
                    Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                    If recTemp.BOF And recTemp.EOF Then GoTo DeleteVoucherErr
                    strSql = "UPDATE TransVoucher SET lngExecutantID = " & recTemp(0) & ", strExecuteDate = '" & recTemp(1) & "' ,lngVoucherID =" & recTemp(2) & " WHERE lngTransVoucherID=" & lngTransVoucherID
                Else
                    strSql = "UPDATE TransVoucher SET lngExecutantID = 0, strExecuteDate = ' ',lngVoucherID = 0 WHERE lngTransVoucherID=" & lngTransVoucherID
                End If
            End If
            Set recTemp = Nothing
            If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
        Else
            Set recTemp = Nothing
        End If
    End Select
    
    '改变AccountDaily 和 AccountBalance
    If Not ChangeAllAccount_from_Voucher("D", lngVoucherID) Then GoTo DeleteVoucherErr
    '删除现金流量表
    strSql = "DELETE FROM VoucherCashFlow " & _
             "WHERE lngVoucherDetailID IN (SELECT lngVoucherDetailID FROM VoucherDetail WHERE lngVoucherID=" & lngVoucherID & ")"
    If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    If gclsBase.ControlAccount = False Then
        Select Case lngVoucherSourceID
            Case 5, 6, 7, 8, 9, 10, 11
            Case Else
                If Not IsVoid Then
                    If blnDeleteCashToArap(lngVoucherID, 3, False) = False Then GoTo DeleteVoucherErr
                End If
            End Select
    End If
    If gclsBase.Trade = "邮电通信" Then
        '删除(邮电)工程开票资料
        strSql = "DELETE FROM ProjectInvoice " & _
                 "WHERE lngVoucherDetailID IN (SELECT lngVoucherDetailID FROM VoucherDetail WHERE lngVoucherID=" & lngVoucherID & ")"
    End If
    If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    '修改支票领用报销明细
    strSql = "UPDATE CheckDetail SET blnIsUsed=0,strUseDate=' ',dblCurrAmount=0,lngVoucherDetailID=0 " & _
             "WHERE lngVoucherDetailID IN (SELECT lngVoucherDetailID FROM VoucherDetail WHERE lngVoucherID=" & lngVoucherID & ")"
    If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr

DeleteItem:
    If Not blnByVoid Then
        '删除本张凭证
       
        strSql = "DELETE From VoucherDetail WHERE lngVoucherID=" & lngVoucherID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
        strSql = "DELETE From Voucher WHERE lngVoucherID=" & lngVoucherID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    Else '作废
        strSql = "UPDATE Voucher SET blnIsVoid = 1,lngSourceVoucherID=0 WHERE lngVoucherID=" & lngVoucherID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteVoucherErr
    End If
        If Not blnByVoid Then blnMaxNODecrease intYear, bytPeriod, 41, CStr(lngVoucherTypeID), intVoucherNO
    
    If Not recTemp Is Nothing Then Set recTemp = Nothing
    '-------------------------
    If IsVoid = False Then
        If lngVoucherSourceID = 15 Then DelFixedAlterRecord intYear, bytPeriod
        If gclsBase.ControlAccount Then
            If lngVoucherSourceID = 4 Then
                strSql = "SELECT lngActivityID FROM Activity WHERE lngVoucherID=" & lngVoucherID
                Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
                If recTemp.EOF Then
                    recTemp.Close
                    Set recTemp = Nothing
                    GoTo NoVoucher
                End If
                Dim lngActivityID() As Long
                recTemp.MoveLast
                recTemp.MoveFirst
                ReDim lngActivityID(recTemp.RowCount)
                i = 0
                Do While recTemp.EOF = False
                   lngActivityID(i) = recTemp("lngActivityID")
                   recTemp.MoveNext
                   i = i + 1
                Loop
                recTemp.Close
                Set recTemp = Nothing
                Dim clsListM As clsListMethod
                Set clsListM = New clsListMethod
                clsListM.SethWnd thehWnd
                
                For i = 0 To UBound(lngActivityID) - 1
                    If lngActivityID(i) > 0 Then
                        If clsListM.DeleteRow1(lngActivityID(i), False, False, False) = False Then
                            GoTo DeleteVoucherErr
                        End If
                    End If
                Next i
NoVoucher:
            End If
        End If
    End If
    '-----------------------
    If IsCancel Then
        '删除冲销凭证
        For i = 0 To UBound(lngCancelID) - 1
            If lngCancelID(i) > 0 Then
                If DeleteVoucher(lngCancelID(i), False, , , False, False, False, False) = False Then GoTo DeleteVoucherErr
            End If
        Next i
    End If
    
    If (Not blnTrans) And blnBeginTran Then gclsBase.BaseWorkSpace.CommitTrans
    DeleteVoucher = True
    Screen.MousePointer = vbDefault
    
    Exit Function
DeleteVoucherErr:
    Screen.MousePointer = vbDefault
    If (Not blnTrans) And blnBeginTran Then gclsBase.BaseWorkSpace.RollBacktrans
    If Not recTemp Is Nothing Then Set recTemp = Nothing
    If blnNoMsg = False Then
        cMsgBox strDelVoid & strTip & strVoucherName & "失败!", strDelVoid & "凭证"
    End If
End Function


'错误/取消错误
'lngVoucherID:要错误/取消错误的单据号
Public Function ChangeError(lngVoucherID As Long) As Boolean

    '对凭证作"错误"标志,只能由复核人或制单人执行
    '取消凭证的"错误"标志,只能由制单人取消

End Function

'复核/取消复核
Public Function ChangeCheck(lngVoucherID As Long, argVoucher As String) As Boolean
    strVoucher = argVoucher
    
    If Not GetVoucherStatus(lngVoucherID, False) Then Exit Function
    If Not IsChecked Then
        If CheckVoucher(lngVoucherID, , argVoucher) Then
            ChangeCheck = True
            '如果列表有记帐人一项,则将本凭证的的记帐人一项置为当前操作员的名字
            SetVoucherItem "复核", gclsBase.OperatorName, frmVoucherList.grdList.Row
        End If
    Else
        If UnCheckVoucher(lngVoucherID, , argVoucher) Then
            ChangeCheck = True
            '如果列表有复核人一项,则将本凭证的的复核人一项置空
            SetVoucherItem "复核", "", frmVoucherList.grdList.Row
        End If
    End If
End Function


'复核凭证
'argVoucher 凭证的名称
'blnMulti   多张复核调用时,设置为True
Public Function CheckVoucher(lngVoucherID As Long, Optional blnNoMsg As Boolean, Optional argVoucher As String, Optional blnMulti As Boolean, Optional ByVal blnGetVoucherMsg As Boolean = True) As Boolean
    Dim strSql As String

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -