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

📄 clspurchase.cls

📁 金算盘软件代码
💻 CLS
📖 第 1 页 / 共 5 页
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsPurchase"
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 strBillNO         As String   '单据号
Private blnIsVoid         As Boolean  '是否作废
Private thehWnd           As Long     '列表窗体的句柄
Private strDelOrVoid      As String   '提示信息:“删除!” 或 “作废”
Private blnIsInvoice  As Boolean  '单据开票标志(单货同到)
Private blnIsPay  As Boolean  '单据已付款标志
Private lngWriteOffID() As Long
Private blnNoAlert As Boolean    '不提示警告信息标志
Private blnIsPrinted As Boolean  '是否已打印标志
Private mlngInvoiceActivityID As Long
Private mblnOtherBill As Boolean
Private mblnIsCash As Boolean
Private mstrErrMsg 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 = "", _
                                            Optional ByVal blnWriteOffBill As Boolean = False) As Integer
    Dim strSQL As String
    Dim recTemp As rdoResultset
    Dim strVoucher As String
    Dim intResult As Integer
'On Error GoTo theErr
    If blnByVoid Then
        strDelOrVoid = "作废"
    Else
        strDelOrVoid = "删除"
    End If
    If lngReceiptID <> 0 Then
        lngActivityID = lngReceiptID
    End If
    If lngReceiptTypeID <> 0 Then
        lngActivityTypeID = ReceiptType2ActivityType(lngReceiptTypeID)
    ElseIf lngActivityTypeID <> 0 Then
        lngReceiptTypeID = ActivityType2ReceiptType(lngActivityTypeID)
    End If
    If strBillNO = "" Then
        strBillNO = ID2String(lngReceiptTypeID, lngReceiptID) & "号"
    End If
    If strReceiptTypeName <> "" Then
        strTypeName = strReceiptTypeName
    End If
    
    BeforeDelete = 0 '取消删除
    If blnSelectRealVoucher() Then
        cMsgBox strBillNO & strTypeName & "单据核销的入库单已生成非暂估的凭证,不能" & strDelOrVoid
        Exit Function
    End If
    '删除作废单据无须判断
    If Not blnIsVoid Then
        If blnIsPrinted Then
         If BillRePrintRight(lngReceiptTypeID, True) Then
            If mblnOtherBill = False Then
                If ShowMsg(thehWnd, strBillNO & strTypeName & "单据已经打印,您确实要" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_SYSTEMMODAL + MB_DEFBUTTON2, strDelOrVoid & "单据") = vbNo Then
                   Exit Function
                End If
            End If
            blnNoAlert = True
         Else
            cMsgBox strBillNO & strTypeName & "单据中的商品已经打印,不能" & strDelOrVoid & "!"
            Exit Function
         End If
        End If
        '已调价
        If blnItemAdjusted(lngActivityID) Then
            cMsgBox strBillNO & strTypeName & "单据中的商品已经调价,不能" & strDelOrVoid
            Exit Function
        End If
        '已结帐
        If blnBillIsClosed(lngActivityTypeID + 1, lngActivityID) Then
            cMsgBox strBillNO & strTypeName & "单据已经结帐,不能" & strDelOrVoid
            Exit Function
        End If
        
        Select Case IsVoucher_ItemActivity(lngActivityID, strVoucher)
        Case -1
            GoTo TheErr
        Case 1
            cMsgBox strBillNO & strTypeName & "单据已生成凭证“" & strVoucher & "”,不能" & strDelOrVoid
            Exit Function
        End Select
        
        Select Case IsProduce()
        Case -1
            GoTo TheErr
        Case 1
            cMsgBox strBillNO & strTypeName & "单据的批次商品已发生出库业务,不能" & strDelOrVoid
            Exit Function
        End Select
        Select Case lngActivityTypeID
        Case 1, 2, 4, 6
            If mblnOtherBill = False And blnWriteOffBill = False Then
                If BillPublic.blnIsInvoice(True, lngActivityID) = True Then
                     blnNoAlert = True
                     If ShowMsg(thehWnd, strBillNO & strTypeName & "单据已开票,继续" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then
                        GoTo TheErr
                     End If
                End If
            End If
        End Select
        '7)盘赢入库单由盘点表生成判断
        If lngActivityTypeID = 9 Then
            If DeleteStockTakingToReceipt() <> 1 Then
                blnNoAlert = True
                If ShowMsg(thehWnd, strBillNO & "盘盈单是由盘点表产生,继续" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then
                    Exit Function
                End If
            End If
        End If
        If Not blnWriteOffBill Then
            If blnModifyOrderQuantityOK(thehWnd, lngActivityID, True, strDelOrVoid) = False Then
                Exit Function
            End If
        End If
    End If
    '删除作废单据无须判断
    If blnIsVoid Then
        BeforeDelete = 1
        Exit Function
    End If
    
    If Not blnWriteOffBill Then
        Dim i As Long
        If Not blnWriteOff(thehWnd, lngReceiptTypeID, lngActivityID, strDelOrVoid, lngWriteOffID) Then
            For i = LBound(lngWriteOffID) To UBound(lngWriteOffID)
                If lngWriteOffID(i) <> 0 Then
                    Dim clsTmp As clsPurchase
                    Set clsTmp = New clsPurchase
                    clsTmp.SethWnd thehWnd
                    If clsTmp.BeforeDelete(False, lngWriteOffID(i), lngReceiptTypeID, , True) <> 1 Then
                        Set clsTmp = Nothing
                        GoTo TheErr
                    End If
                    Set clsTmp = Nothing
                End If
            Next
        Else
            GoTo TheErr
        End If
        If mblnOtherBill = False Then
            If blnDelWriteOffBillNote(thehWnd, lngReceiptTypeID, lngActivityID, strDelOrVoid) = False Then
                GoTo TheErr
            End If
        End If
    End If
    If Not mblnOtherBill Then
        If lngActivityTypeID = 1 Then
'            strSql = "SELECT * FROM ItemActivity WHERE lngActivityID=" & lngActivityID
'            Set recTemp = gclsBase.BaseDB.OpenRecordset(strSql, dbOpenForwardOnly)
'            If Not (recTemp.BOF And recTemp.EOF) Then
'                mlngInvoiceActivityID = recTemp!lngInvoiceActivityID
'            End If
'            recTemp.Close
'            Set recTemp = Nothing
            If mlngInvoiceActivityID > 0 Then
                If ShowMsg(thehWnd, strBillNO & strTypeName & "单据是由发票核销自动生成的单据,如果" & strDelOrVoid & ",将删除其他同时生成的单据,您确实要" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then
                    GoTo TheErr
                End If
                blnNoAlert = True
                If DelOtherBill() = False Then
                    GoTo TheErr
                End If
            End If
        End If
    End If
    
   Dim lngTmp As Long
   lngTmp = lngActivityIsSelected(lngActivityID)
   Select Case lngActivityTypeID
   Case 2
      If lngTmp <> 0 Then
         cMsgBox strBillNO & strTypeName & "单据中的商品已经销售,不能" & strDelOrVoid & "!"
         GoTo TheErr
      End If
   Case 13
      If lngTmp = 16 Then
         cMsgBox strBillNO & strTypeName & "单据中的商品已经结算,不能" & strDelOrVoid & "!"
         GoTo TheErr
      ElseIf lngTmp <> 0 Then
         cMsgBox strBillNO & strTypeName & "单据中的商品已经调拨,不能" & strDelOrVoid & "!"
         GoTo TheErr
      End If
   Case 3, 16
      If lngTmp <> 0 Then
         cMsgBox strBillNO & strTypeName & "单据中的商品已经结算,不能" & strDelOrVoid & "!"
         GoTo TheErr
      End If
   Case Else
      If lngTmp <> 0 Then
         blnNoAlert = True
         If mblnOtherBill = False Then
            If ShowMsg(thehWnd, strBillNO & strTypeName & "单据已开票,继续" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then
               GoTo TheErr
            End If
         End If
      End If
   End Select
    
    strSQL = "SELECT Sum(ItemActivityDetail.dblSettlementQuantity) AS dblSettlementQuantityOfSum, " _
                 & " Sum(ItemActivityDetail.dblCurrSettlementAmount) AS dblCurrSettlementAmountOfSum, " _
                 & " Sum(ItemActivityDetail.dblPaymentQuantity) AS dblPaymentQuantityOfSum, " _
                 & " Sum(ItemActivityDetail.dblCurrPaymentAmount) AS dblCurrPaymentAmountOfSum, " _
                 & " Sum(ItemActivityDetail.dblInvoiceQuantity) AS dblInvoiceQuantityOfSum, " _
                 & " Sum(ItemActivityDetail.dblCurrInvoiceAmount) AS dblCurrInvoiceAmountOfSum, " _
                 & " Sum(ItemActivityDetail.dblEntrustQuantity) AS dblEntrustQuantityOfSum, " _
                 & " Sum(ItemActivityDetail.dblEntrustAmount) AS dblEntrustAmountOfSum, " _
                 & " Sum(ItemActivityDetail.dblExpenseAmount) AS dblExpenseAmountOfSum " _
                 & " 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(2) + recTemp(3) <> 0 Then '付款数量、原币付款金额
        If mblnOtherBill = False Then
            Select Case lngActivityTypeID
            Case 1, 2, 4, 6
                blnNoAlert = True
                If mblnIsCash Then
                    If ShowMsg(thehWnd, strDelOrVoid & strBillNO & strTypeName & "单据将删除其对应的现金结算单据,继续" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then GoTo EndProc
                Else
                    If ShowMsg(thehWnd, strBillNO & strTypeName & "单据已付款或已核销,继续" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then GoTo EndProc
                End If
            End Select
        End If
        blnIsPay = True
    Else

⌨️ 快捷键说明

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