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

📄 clsstartdel.cls

📁 金算盘软件代码
💻 CLS
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsStartDel"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False

'蔡奇科

'返回 -1:出错  0:取消操作(包括:不能删除,用户取消删除)  1:成功

Option Explicit

Private lngActivityID     As Long       '单据业务ID
Private lngActivityTypeID As Long    '业务类型ID
Private strTypeName       As String   '业务类型名称
Private blnIsVoid         As Boolean  '是否作废
Private thehWnd           As Long     '列表窗体的句柄
Private strDelOrVoid      As String   '提示信息:“删除!” 或 “作废”
'为对话框提供窗口句柄
Public Sub SethWnd(arghWnd As Long)
    thehWnd = arghWnd
End Sub

Private Sub cMsgBox(strMsg As String, Optional strTitle As String)
    If Trim(strTitle) = "" Then
        strTitle = "提示信息"
    End If
    ShowMsg thehWnd, strMsg, MB_OK + MB_ICONEXCLAMATION + MB_SYSTEMMODAL, strTitle
End Sub

'单据删除(作废)前的规则验证
Public Function BeforeDelete(Optional ByVal blnByVoid As Boolean = False, _
                                            Optional ByVal lngReceiptID As Long = 0, _
                                            Optional ByVal lngReceiptTypeID As Long = 0, _
                                            Optional ByVal strReceiptTypeName As String = "") As Integer
    Dim strSQL As String
    Dim recTemp As rdoResultset
    Dim strVoucher As String
    Dim intResult As Integer
    On Error GoTo TheErr
    strDelOrVoid = IIf(blnByVoid, "作废", "删除")
    If lngReceiptID <> 0 Then lngActivityID = lngReceiptID
    If lngReceiptTypeID <> 0 Then lngActivityTypeID = ReceiptType2ActivityType(lngReceiptTypeID)
    If strReceiptTypeName <> "" Then strTypeName = strReceiptTypeName
    
    BeforeDelete = 0 '取消删除
    Select Case IsVoucher_ItemActivity(lngActivityID, strVoucher)
    Case -1
        GoTo TheErr
    Case 1
        cMsgBox "本张" & strTypeName & "单已生成凭证“" & strVoucher & "”,不能" & strDelOrVoid
        Exit Function
    End Select
    If lngActivityTypeID = 41 Then '库存起初
        Select Case IsProduce()
        Case -1
            GoTo TheErr
        Case 1
            cMsgBox "本张" & strTypeName & "单的批次商品已发生出库业务,不能" & strDelOrVoid
            Exit Function
        End Select
    End If
    
    strSQL = "SELECT Sum(abs(dblSettlementQuantity)) AS dblSettlementQuantityOfSum, " _
                 & " Sum(abs(dblCurrSettlementAmount)) AS dblCurrSettlementAmountOfSum, " _
                 & " Sum(abs(dblPaymentQuantity)) AS dblPaymentQuantityOfSum, " _
                 & " Sum(abs(dblCurrPaymentAmount)) AS dblCurrPaymentAmountOfSum, " _
                 & " Sum(abs(dblInvoiceQuantity)) AS dblInvoiceQuantityOfSum, " _
                 & " Sum(abs(dblCurrInvoiceAmount)) AS dblCurrInvoiceAmountOfSum, " _
                 & " Sum(abs(dblEntrustQuantity)) AS dblEntrustQuantityOfSum, " _
                 & " Sum(abs(dblEntrustAmount)) AS dblEntrustAmountOfSum " _
                 & " FROM ItemActivityDetail Where (((ItemActivityDetail.lngActivityID) = " & lngActivityID & ")) GROUP BY ItemActivityDetail.lngActivityID"
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSQL, rdOpenStatic)
    If recTemp.BOF And recTemp.EOF Then GoTo TheErr
    '1 采购     与 发票
    '2 销售     与 发票
    '3 直运采购 与 直运销售
    '4 受托入库(源) 与 受托结算  3 -- 4
    '5 委托出库(源) 与 委托结算 13 -- 14
    '6 分期出库(源) 与 分期结算 16 -- 17
    
    If recTemp(4) > 10 ^ (-5) Or recTemp(5) > 10 ^ (-5) Then    '开票数量 原币开票金额
        cMsgBox "本张" & strTypeName & "单已开票,不能" & strDelOrVoid
        Set recTemp = Nothing
        Exit Function
    End If
    If recTemp(6) > 10 ^ (-5) Or recTemp(7) > 10 ^ (-5) Then    '加工数量 原币加工金额
        Select Case lngActivityTypeID
        Case 46
            cMsgBox "本张" & strTypeName & "单已结算,不能" & strDelOrVoid
        Case Else
            cMsgBox "本张" & strTypeName & "单已加工入库,不能" & strDelOrVoid
        End Select
        Set recTemp = Nothing
        Exit Function
    End If

    If recTemp(0) > 10 ^ (-5) Or recTemp(1) > 10 ^ (-5) Then
        '结算数量 原币结算金额 包括:2 直运采购 3 受托入库 13受托出库单 16分期出库单
        Select Case lngActivityTypeID
        Case 45
            cMsgBox "本张直运采购期初单中的商品已经销售,不能" & strDelOrVoid
            Exit Function
        Case Else
            cMsgBox "本张" & strTypeName & "单已进行结算,不能" & strDelOrVoid
        End Select
        Set recTemp = Nothing
        Exit Function
    End If
    
    If recTemp(2) > 10 ^ (-5) Or recTemp(3) > 10 ^ (-5) Then   '付款数量、原币付款金额
            If ShowMsg(thehWnd, "本张" & strTypeName & "单据已付款,继续" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then Exit Function
    End If
    If lngActivityIsSelected(lngActivityID, strDelOrVoid, thehWnd) <> 0 Then
        Exit Function
    End If
    
    If lngActivityTypeID = 41 Then
        strSQL = "SELECT Item.lngItemID FROM ItemActivityDetail,Item,ItemNature  "
        strSQL = strSQL & " WHERE ItemActivityDetail.lngItemID=Item.lngItemID AND Item.lngItemNatureID=ItemNature.lngItemNatureID"
        strSQL = strSQL & " AND ItemActivityDetail.lngActivityID=" & lngActivityID & " AND Item.strRecentDate<>' '"
        strSQL = strSQL & " AND (ItemNature.strCostMethod='6' OR ItemNature.strCostMethod='7')"
        Set recTemp = gclsBase.BaseDB.OpenResultset(strSQL, rdOpenForwardOnly)
        If Not recTemp.EOF Then
            recTemp.Close
            Set recTemp = Nothing
            cMsgBox "本张" & strTypeName & "单中的商品已调价,不能" & strDelOrVoid
            Exit Function
        End If
        recTemp.Close
    End If
    
    BeforeDelete = 1
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    Exit Function
TheErr:
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    BeforeDelete = -1
End Function

'判断有批次管理标志的入库类型业务是否已发生了出库类型等对应业务
Private Function IsProduce() As Integer
    Dim strSQL As String
    Dim recTemp As rdoResultset
    On Error GoTo TheErr
    
    '判断批次商品有无出库等业务
    strSQL = "SELECT PositionItemDetail.lngInActivityDetailID" _
           & " FROM PositionItemDetail,ItemActivityDetail " _
           & " WHERE PositionItemDetail.lngInActivityDetailID = ItemActivityDetail.lngActivityDetailID AND ItemActivityDetail.lngActivityID=" & lngActivityID & " AND PositionItemDetail.lngOutActivityDetailID<>0" _
           & " AND ( NOT (PositionItemDetail.lngOutActivityDetailID IN (SELECT lngActivityDetailID FROM ItemActivityDetail WHERE lngActivityID=" & lngActivityID & ")))"
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSQL, rdOpenStatic)
    If Not recTemp.EOF Then
        IsProduce = 1 '批次商品已发生出库业务
    Else
        IsProduce = 0 '没有发生出库业务
    End If
    Set recTemp = Nothing
    Exit Function
TheErr:
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    IsProduce = -1
End Function


'//////////////////////////////////////////////////////////////////////////////////////////
'
'                                           对照表处理
'
'//////////////////////////////////////////////////////////////////////////////////////////

'删除所有的对照表
Private Function DeleteObtendTables() As Integer
    On Error GoTo TheErr
    Dim strSQL As String
    Dim intResult As Integer
    '1) 删除货位批次明细表
    If lngActivityTypeID = 41 Then
        '库存期初
        If ModifyPositionWhenDeleteOutBill(lngActivityID) = False Then GoTo TheErr
    End If
    
    DeleteObtendTables = 1
    Exit Function
TheErr:
    DeleteObtendTables = -1
End Function


'////////////////////////////////////////////////////////////////////////////////
'//
'//                                 删除列表记录
'//
'////////////////////////////////////////////////////////////////////////////////
'<接口>
'blnByVoid:删除功能由作废调用
Public Function DeleteStartPeriod(arglngActivityID As Long, Optional blnByVoid As Boolean) As Boolean
    Dim strSQL As String
    Dim recTemp As rdoResultset
    Dim intResult As Integer
    '-----------------------------------------
    Dim intYear As Integer '凭证会计年度
    Dim bytPeriod As Byte   '凭证会计期间
    Dim lngReceiptTypeID As Long
    Dim strReceiptNo As String
    Dim lngReceiptNo As Long
    '------------------------------------------
    lngActivityID = arglngActivityID
    
    strDelOrVoid = IIf(blnByVoid, "作废!", "删除!")
    
    If blnPeriodClosed() Then
        cMsgBox "已有会计期间结帐,不允许" & IIf(blnByVoid, "作废", "删除") & "期初单据!"
        Exit Function
    End If
    
    strSQL = "SELECT ItemActivity.lngActivityTypeID, ItemActivity.blnIsVoid , ItemActivity.* From ItemActivity WHERE (ItemActivity.lngActivityID)=" & lngActivityID
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSQL, rdOpenStatic)
    If recTemp.BOF And recTemp.EOF Then
        cMsgBox "列表的数据已被修改,请重新刷新后再进行操作!"
        Set recTemp = Nothing
        Exit Function
    End If
    lngActivityTypeID = recTemp(0)
    blnIsVoid = IIf(recTemp(1) = 0, False, True)
    strTypeName = BillPublic.ReceiptTypeIdToName(recTemp!lngReceiptTypeID)
    '-------------------------------------------------------------------
    intYear = gclsBase.FYearOfDate(C2Date(recTemp!strDate))
    bytPeriod = gclsBase.PeriodOfDate(C2Date(recTemp!strDate))
    lngReceiptTypeID = recTemp!lngReceiptTypeID
    strReceiptNo = recTemp!strReceiptNo
    lngReceiptNo = recTemp!lngReceiptNo
'    blnIsInvoice = recTemp!blnIsInvoice
    '--------------------------------------------------------------------
    Set recTemp = Nothing
    If Not blnByVoid Then ' 非作废操作调用无须删除提问
        If blnIsVoid = False Then
            If ShowMsg(thehWnd, "您确实要删除本张" & strTypeName & "单吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then Exit Function
        Else
            If ShowMsg(thehWnd, "您确实要删除本张已经作废的" & strTypeName & "单吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then Exit Function
        End If
    End If

    '删除作废单据无须判断
    If Not blnIsVoid Then
        If BeforeDelete(blnByVoid) <> 1 Then Exit Function '判断单据能否删除
        intResult = DeleteRelation(lngActivityID, lngActivityTypeID) '删除关系(删除采购发票与受托结算单时须标记对应商品入库单及受托入库单)
        If intResult <> 1 Then GoTo DeleteErr
    '    If intResult = -1 Then GoTo theErr
    End If
    
    On Error GoTo DeleteErr
    gclsBase.BaseWorkSpace.BeginTrans
    
    '1)单据是作废单据,不执行
    If Not blnIsVoid Then
        If ChangeAllItem_from_Activity("D", lngActivityID, True) = False Then GoTo DeleteErr
'        If ChangeAllAccount_from_Activity("D", lngActivityID) = False Then GoTo DeleteErr
        If DeleteObtendTables() <> 1 Then GoTo DeleteErr
    End If
    
    '2)作废操作不执行
    If Not blnByVoid Then
        If DeleteItemActivityANDItemActivityDetail(lngActivityID) <> 0 Then GoTo DeleteErr
    Else
        If gclsBase.ExecSQL("UPDATE ItemActivity SET ItemActivity.blnIsVoid = 1 WHERE (ItemActivity.lngActivityID)=" & lngActivityID) = False Then GoTo DeleteErr
    End If
'------------------------------------------------------------------------------
    If Not blnByVoid Then blnMaxNODecrease 0, 0, lngReceiptTypeID, strReceiptNo, lngReceiptNo
'------------------------------------------------------------------------------
    
    gclsBase.BaseWorkSpace.CommitTrans
    DeleteStartPeriod = True
    Screen.MousePointer = vbDefault
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    Exit Function
DeleteErr:
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    gclsBase.BaseWorkSpace.RollBacktrans
    Screen.MousePointer = vbDefault
    cMsgBox Left(strDelOrVoid, 2) & strTypeName & "单失败!"
End Function


⌨️ 快捷键说明

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