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

📄 clspurchaseorder.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 = "clsPurchaseOrder"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
'蔡奇科

'采购订单

'如果采购单使用了本订单,则删除本订单应给出提示,若删除应将采购单表中的“采购订单ID”字段的值改为0


Option Explicit
Private thehWnd As Long
Private mblnIsSaveListset As Boolean                            'Whether or not save lngViewID in list

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 IsVoid(lngPurchaseOrderID As Long) As Integer
    Dim strSql As String
    Dim recTemp As rdoResultset
    
    strSql = "SELECT PurchaseOrder.blnIsVoid FROM PurchaseOrder WHERE (((PurchaseOrder.lngPurchaseOrderID)=" & lngPurchaseOrderID & "))"
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
    If recTemp.BOF And recTemp.EOF Then
        cMsgBox "列表的数据已被修改,请重新刷新后再进行操作!"
        IsVoid = -1
        Set recTemp = Nothing
        Exit Function
    End If
    
    If recTemp(0) <> 0 Then
        IsVoid = 1 '作废
    Else
        IsVoid = 0 '没有作废
    End If
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
End Function

'blnByVoid:删除功能由作废调用
Public Function DeletePurchaseOrder(lngPurchaseID As Long, Optional blnByVoid As Boolean) As Boolean
    Dim strSql As String
    Dim recTemp As rdoResultset
'    Dim recTmp As rdoResultset
    Dim strMsg As String
    Dim intResult As Integer
    Dim strDelOrVoid As String
    Dim blnVoid As Boolean
    '-----------------------------------------
    Dim intYear As Integer '凭证会计年度
    Dim bytPeriod As Byte   '凭证会计期间
    Dim lngReceiptTypeID As Long
    Dim strReceiptNo As String
    Dim lngReceiptNo As Long
    '------------------------------------------
    On Error GoTo DeleteErr

    If blnByVoid Then
        strDelOrVoid = "作废"
    Else
        strDelOrVoid = "删除"
    End If

    '规则判断
    '判断是否已执行
    strSql = "SELECT Sum(PurchaseOrderDetail.dblReceiveQuantity) AS dblReceiveQuantityOfSum From PurchaseOrderDetail " _
           & " WHERE (PurchaseOrderDetail.lngPurchaseOrderID)=" & lngPurchaseID
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
    If recTemp.EOF And recTemp.BOF Then Exit Function
    
    If IsNull(recTemp(0)) = False Then
        If CDbl(recTemp(0)) > 0 Then
            If ShowMsg(thehWnd, "本张采购订单已经执行,您确实要" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then
                Set recTemp = Nothing
                Exit Function
            End If
        End If
    End If
    Set recTemp = Nothing
    '判断是否关闭
    strSql = "SELECT PurchaseOrderDetail.blnIsClose From PurchaseOrderDetail WHERE (PurchaseOrderDetail.blnIsClose)<>0 AND (PurchaseOrderDetail.lngPurchaseOrderID)=" & lngPurchaseID
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
    If Not recTemp.EOF Then
        If Len(strMsg) <> 0 Then
            strMsg = strMsg & "和已经关闭的"
        Else
            strMsg = strMsg & "已经关闭的"
        End If
    End If
    Set recTemp = Nothing
    
    '判断单据已否已作废
    strSql = "SELECT PurchaseOrder.blnIsVoid,PurchaseOrder.* FROM PurchaseOrder WHERE (((PurchaseOrder.lngPurchaseOrderID)=" & lngPurchaseID & "))"
    Set recTemp = gclsBase.BaseDB.OpenResultset(strSql, rdOpenStatic)
    If recTemp.BOF And recTemp.EOF Then
        cMsgBox "列表的数据已被修改,请重新刷新后再进行操作!"
        Set recTemp = Nothing
        Exit Function
    End If
    blnVoid = (recTemp(0) <> 0) '作废/没有作废
    '-------------------------------------------------------------------
    intYear = recTemp!intYear
    bytPeriod = recTemp!bytPeriod
    lngReceiptTypeID = 1
    strReceiptNo = recTemp!strReceiptNo
    lngReceiptNo = recTemp!lngReceiptNo
    '--------------------------------------------------------------------
    If blnVoid = False And recTemp!blnIsPrinted <> 0 Then
      If BillRePrintRight(1, True) Then
          If ShowMsg(thehWnd, "本张" & strMsg & "采购订单已经打印,您确实要" & strDelOrVoid & "吗?", MB_YESNO + MB_ICONQUESTION + MB_SYSTEMMODAL + MB_DEFBUTTON2, strDelOrVoid & "单据") = vbNo Then
            recTemp.Close
            Set recTemp = Nothing
            Exit Function

          End If
      Else
          ShowMsg thehWnd, "本张" & strMsg & "采购订单已经打印,不能" & strDelOrVoid & "!", MB_OK + MB_ICONEXCLAMATION + MB_SYSTEMMODAL, strDelOrVoid & "单据"
            recTemp.Close
            Set recTemp = Nothing
            Exit Function

      End If
    End If
    
    '提问
    If blnByVoid Then
        If blnVoid Then Exit Function
        If ShowMsg(thehWnd, "本张" & strMsg & "采购订单作废后将不能取消作废,您确实要作废吗?", MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2 + MB_SYSTEMMODAL, "提示信息") <> IDYES Then Exit Function
    Else
        If blnVoid Then
            If ShowMsg(thehWnd, "确实要删除本张已经作废的采购订单吗?", vbQuestion + vbYesNo + vbDefaultButton2, "提示信息") <> vbYes Then Exit Function
        Else
            If ShowMsg(thehWnd, "确实要删除本张" & strMsg & "采购订单吗?", vbQuestion + vbYesNo + vbDefaultButton2, "提示信息") <> vbYes Then Exit Function
        End If
    End If
    
    gclsBase.BaseWorkSpace.BeginTrans
    
    '1)单据是作废单据,不执行
    If Not blnVoid Then
        '改变《商品表》:Item中的采购在订量
        strSql = "UPDATE Item SET Item.dblPOQuantity = " & _
            " (SELECT Item.dblPOQuantity-SUM(PurchaseOrderDetail.dblQuantity-PurchaseOrderDetail.dblReceiveQuantity) " & _
            " FROM PurchaseOrderDetail WHERE PurchaseOrderDetail.lngPurchaseOrderID = " & lngPurchaseID & _
            " AND PurchaseOrderDetail.lngItemID=Item.lngItemID ) " & _
            " WHERE Item.lngItemID IN (SELECT PurchaseOrderDetail.lngItemID FROM PurchaseOrderDetail " & _
            " WHERE PurchaseOrderDetail.lngPurchaseOrderID=" & lngPurchaseID & ")"
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteErr
    
            
        '将采购订单表中的“采购订单ID”字段的值改为0
        strSql = "UPDATE ItemActivityDetail SET ItemActivityDetail.lngOrderDetailID = 0 " & _
            " WHERE ItemActivityDetail.lngActivityDetailID IN " & _
            " (SELECT Q1.lngActivityDetailID FROM ItemActivity,ItemActivityDetail Q1,PurchaseOrderDetail " & _
            " WHERE ItemActivity.lngActivityID = Q1.lngActivityID " & _
            " AND Q1.lngOrderDetailID = PurchaseOrderDetail.lngPurchaseOrderDetailID " & _
            " AND ItemActivity.lngActivityID IN (1,2,3) " & _
            " AND PurchaseOrderDetail.lngPurchaseOrderID=" & lngPurchaseID & ")"
        
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteErr
    End If

    '2)作废操作不执行
    If Not blnByVoid Then
        '删除本张采购订单
        strSql = "DELETE From PurchaseOrderDetail WHERE PurchaseOrderDetail.lngPurchaseOrderID=" & lngPurchaseID
        gclsBase.ExecSQL strSql
        strSql = "DELETE From PurchaseOrder WHERE PurchaseOrder.lngPurchaseOrderID=" & lngPurchaseID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteErr
    Else
        strSql = "UPDATE PurchaseOrder SET blnIsVoid = 1 WHERE lngPurchaseOrderID=" & lngPurchaseID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteErr
        strSql = "UPDATE PurchaseOrderDetail SET dblReceiveQuantity=0 WHERE lngPurchaseOrderID=" & lngPurchaseID
        If gclsBase.ExecSQL(strSql) = False Then GoTo DeleteErr
    End If
'------------------------------------------------------------------------------
    If Not blnByVoid Then blnMaxNODecrease intYear, bytPeriod, lngReceiptTypeID, strReceiptNo, lngReceiptNo
'------------------------------------------------------------------------------
    gclsBase.BaseWorkSpace.CommitTrans
    DeletePurchaseOrder = True
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    Exit Function
DeleteErr:
    On Error Resume Next
    gclsBase.BaseWorkSpace.RollBacktrans
    If Not recTemp Is Nothing Then
        Set recTemp = Nothing
    End If
    
    cMsgBox Left(strDelOrVoid, 2) & "本张采购订单时出错!”"
    
End Function

⌨️ 快捷键说明

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