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

📄 bos_qmphybill.cls

📁 金蝶地磅称重插件
💻 CLS
📖 第 1 页 / 共 5 页
字号:
           m_BillInterface.BillHeads(1).BOSFields.Item("FItemId_Ic").FieldLock = False      '物料
           m_BillInterface.BillHeads(1).BOSFields.Item("FCarNo").FieldLock = False          '车号
        End If
       ''------------------------------------------------------------------------------------------------------------
        
       ''向单据体填充质检方案中的检验项目数据
       ''------------------------------------------------------------------------------------------------------------
       BillEntryRows = 0                                                            '单据体行数变量清为零
       If rs.RecordCount > 0 Then
          BillEntryRows = rs.RecordCount                                            '给单据体行数变量赋值
       End If
       ''开始填充数据
       While Not rs.EOF
            m_BillInterface.SetFieldValue "FId", rs!fnumber, i                          '设置“检验项目编号”字段的值
            m_BillInterface.SetFieldValue "FValue_Xx", rs!flowerlimitqty, i             '设置“标准下限”字段的值
            m_BillInterface.SetFieldValue "FValue_Sx", rs!fupperlimitqty, i             '设置“标准上限”字段的值

            Set F_D = m_BillInterface.GetFieldInfoByKey("Fvalue_Xx", "", 0)             '取得当前“标准下限”字段的Dictionary对象
            m_BillInterface.SetDecimal F_D, i, CLng(rs!fqtydecimal)                     '设置“标准下限”当前行的数据精度值

            Set F_D = m_BillInterface.GetFieldInfoByKey("Fvalue_Sx", "", 0)             '取得当前“标准上限”字段的Dictionary对象
            m_BillInterface.SetDecimal F_D, i, CLng(rs!fqtydecimal)                     '设置“标准上限”当前行的数据精度值

            Set F_D = m_BillInterface.GetFieldInfoByKey("Fvalue_Wl", "", 0)             '取得当前“检验值”字段的Dictionary对象
            m_BillInterface.SetDecimal F_D, i, CLng(rs!fqtydecimal)                     '设置“检验值”当前行的数据精度值

            If i < rs.RecordCount Then
               m_BillInterface.BillEntrys(1).BOSFields(4).Row = i + 1                  '当前行设置为下一行
               m_BillInterface.InsertNewRowAndFill 2, i + 1               '插入一个新行
            End If
            rs.MoveNext                                                                '结果集向后移动1
            i = i + 1                                                                  '当前行变量加1
       Wend
    End If
    Exit Sub
Errhandle:
    MsgBox err.Description, vbCritical, "金蝶提示"
End Sub

Private Sub m_BillInterface_beforesave(ByRef bCancel As Boolean)
    ''单据保存之前
    On Error GoTo Errhandle1
    ''如果为其它检验,则允许净重为零,否则不能为零
    If m_BillInterface.GetFieldValue("FQuantity") = 0 And m_BillInterface.GetFieldValue("FQmStyle", 1) <> "9" Then
       MsgBox "净重不能小于或等于零!", , "金蝶提示"
       bCancel = True
       Exit Sub
    End If
    
    ''如果单据没有选择检斤单,则只能选择其他质检
    '目前屏蔽
'    If m_BillInterface.GetFieldValue("FBillNo_Yd") = "" And m_BillInterface.GetFieldValue("FQmStyle", 1) <> "9" Then
'       MsgBox "如果没有选择检斤单,检验类型只能为'其他质检'", , "金蝶提示"
'       bCancel = True
'       Exit Sub
'    End If
    
    ''如果单据为新增保存,判断所选检斤单是否已被其他用户选取
    If Trim(m_BillInterface.GetFieldValue("FBillNo_Yd")) <> "" And m_BillInterface.BillStatus = Enu_BillStatusExt_New And m_BillInterface.GetFieldValue("Fitemid_ic", , Enu_ValueType_FFND) <> "102.00001" Then
       Set rs = m_BillInterface.K3Lib.GetData("select count(*) as Rowc from t_ST_SC_BalanceBill where fstatus_wl>0 and  fid in (" & m_BillInterface.GetFieldValue("FBillNo_Yd") & ")")
       If rs!rowc > 0 Then
          MsgBox "所选检斤单中已有部分或全部已被物理检验单引用,请重新进行选择!", , "金蝶提示"
          bCancel = True
          Exit Sub
       End If
    End If
    
    ''取服务器日期时间赋值给单据日期字段
    Set rs = m_BillInterface.K3Lib.GetData("select getdate()")
    m_BillInterface.SetFieldValue "FBillDate", rs.Fields(0)   '单据日期
    
    ''判断检验结果是否合格
    '----------------------------------------------------------------------------------------------------------------------------
    Dim Result_t As Boolean             '判断是否合格的变量
    Dim i As Long                       '当前行变量
    
    '如果单据体行数为零,重新给单据体变量赋值(用于单据修改保存)
    If BillEntryRows = 0 Then
       Set rs = m_BillInterface.K3Lib.GetData("select count(*) from t_ST_QM_WLDentry where finterid=" & m_BillInterface.CurBillID)
       BillEntryRows = IIf(IsNull(rs.Fields(0)) = True, 0, rs.Fields(0))
    End If
    
    ''开始判断是否合格
    For i = 1 To BillEntryRows
        ''取对应检验项目的检验方法
        Set Rs1 = m_BillInterface.K3Lib.GetData("select isnull(t2.fname,'') from QMCheckItem t1 inner join QMAInfo t2 on t1.Fqcmethodid=t2.fid where t1.fid=" & m_BillInterface.GetFieldValue("Fid", i))
        If Rs1.RecordCount > 0 Then
        ''如果当前检验项目对应的检验方法为物理检验或化学检验,则进行判断,否则不用判断。
        If Rs1.Fields(0) = "物理检验" Or Rs1.Fields(0) = "化学检验" Then
           ''如果上限值+下限值<>0,且检验检验值在上下限范围之内,则为合格
           If (Val(m_BillInterface.GetFieldValue("FValue_Xx", i)) + Val(m_BillInterface.GetFieldValue("FValue_sx", i))) <> 0 And Val(m_BillInterface.GetFieldValue("FValue_Wl", i)) >= Val(m_BillInterface.GetFieldValue("FValue_Xx", i)) And Val(m_BillInterface.GetFieldValue("FValue_Wl", i)) <= Val(m_BillInterface.GetFieldValue("FValue_Sx", i)) Then
              m_BillInterface.SetFieldValue "FNote", "合格", i
           ''如果上限值+下限值<>0,且检验检验值在上下限范围之外,则为不合格
           ElseIf (Val(m_BillInterface.GetFieldValue("FValue_Xx", i)) + Val(m_BillInterface.GetFieldValue("FValue_sx", i))) <> 0 And (Val(m_BillInterface.GetFieldValue("FValue_Wl", i)) < Val(m_BillInterface.GetFieldValue("FValue_Xx", i)) Or Val(m_BillInterface.GetFieldValue("FValue_Wl", i)) > Val(m_BillInterface.GetFieldValue("FValue_Sx", i))) Then
              m_BillInterface.SetFieldValue "FNote", "不合格", i
           ''如果上限值+下限值=0则不用判断,结果为合格
           ElseIf (Val(m_BillInterface.GetFieldValue("FValue_Xx", i)) + Val(m_BillInterface.GetFieldValue("FValue_sx", i))) = 0 Then
              m_BillInterface.SetFieldValue "FNote", "合格", i
           End If
        Else
            m_BillInterface.SetFieldValue "FNote", "合格", i
        End If
        End If
        
        ''如果备注内容为“不合格”,结果为不合格
        If m_BillInterface.GetFieldValue("Fnote", i) = "不合格" Then
           Result_t = True
        End If
    Next
    
    ''根据判断结果给检验结果字段赋值
    If Result_t = True Then
       m_BillInterface.SetFieldValue "FResult", "不合格"
    Else
       m_BillInterface.SetFieldValue "FResult", "合格"
    End If
    '----------------------------------------------------------------------------------------------------------------------------
    Exit Sub
    
Errhandle1:
    MsgBox err.Description, vbCritical, "金蝶提示"
    bCancel = True
End Sub

Private Sub m_BillInterface_AfterSave(ByRef bCancel As Boolean)
    ''单据保存之后触发
    On Error GoTo Errhandle2
    ''原单不为空时,回写检斤单对应的FStatus_Wl字段为对应的物理检验单内码
    If CurBillYd1 <> "" Then
       m_BillInterface.K3Lib.UpdateData "update t_ST_SC_BalanceBill set FStatus_Wl=" & CurBillId1 & " where Fid in(" & CurBillYd1 & ")"
    End If
    
    ''向单据体第一个分录中添加FTempQu(用于统计报表)
      m_BillInterface.K3Lib.UpdateData "update t_ST_QM_WLDentry set ftempqu=" & CurBillQty1 & " where FInterid=" & CurBillId1 & " and FIndex=1"
    Exit Sub
    
Errhandle2:
        MsgBox err.Description, vbCritical, "金蝶提示"
        bCancel = True
End Sub

Private Sub m_BillInterface_AfterSelBill(ByVal lSelBillType As Long)
    ''选单之后触发
    On Error GoTo Errhandle
    ''如果上游单据是检斤,则执行下面代码
    If lSelBillType = 110001309 Then
        Dim i As Long
        Dim Temp_S As String
        Dim Temp_CarNo As String
        Dim Dic_SelectTemp As KFO.Dictionary
        Temp_S = ""
        Temp_CarNo = ""
        
        '取所选检斤单的单据内码
        For i = Vector_SelectBill.LBound To Vector_SelectBill.UBound
            Set Dic_SelectTemp = Vector_SelectBill(i)
            
            ''给物理检验单的入厂日期和取样日期更新为第一个检斤单的单据日期
            If i = 1 And Dic_SelectTemp.GetValue("FId") <> "" Then
               Set rs = m_BillInterface.K3Lib.GetData("select t3.Fnumber,t1.FTeamGroup,t1.FCarNo,t2.FTareBalanceTime,t2.FTimeStamp from t_ST_SC_BalanceBill t1 left join t_ST_SC_BalanceBillentry t2 on t1.fid=t2.fid left join t_icitem t3 on t2.Fmateriel=t3.fitemid where t1.fid=" & Dic_SelectTemp.GetValue("FId"))
               If Not rs.EOF Then
                  m_BillInterface.SetFieldValue "Fdate_rc", rs!FTareBalanceTime & ""            '入厂日期
                  m_BillInterface.SetFieldValue "Fdate_qy", rs!FTimeStamp & ""                  '取样日期
                  m_BillInterface.SetFieldValue "FItemId_Ic", rs!fnumber & ""                   '物料
               End If
            End If
            
            '取检斤单的内码
            If Dic_SelectTemp.GetValue("FId") <> "" Then
               If i = 1 Then
                 Temp_S = Temp_S & Dic_SelectTemp.GetValue("FId")
               Else
                 Temp_S = Temp_S & "," & Dic_SelectTemp.GetValue("FId")
               End If
               
               '取车号
               Set Rs1 = m_BillInterface.K3Lib.GetData("select FCarNo from t_ST_SC_BalanceBill where Fid=" & Dic_SelectTemp.GetValue("FId"))
               If Not Rs1.EOF Then
                  Temp_CarNo = Temp_CarNo & Rs1!FCarNo & ","
               End If
            Else
               Exit For
            End If
        Next
        
        ''物理检验单添加所选检斤单单据内码
        m_BillInterface.SetFieldValue "FBillNo_Yd", Temp_S
        
        ''物理检验单添加所选检验斤单车号
        If Len(Temp_CarNo) > 0 Then
            m_BillInterface.SetFieldValue "FCarNo", Left(Temp_CarNo, Len(Temp_CarNo) - 1)
        End If
        
        ''物理检验单添加所选检斤单净重合计
        Set rs = m_BillInterface.K3Lib.GetData("select sum(isnull(FNetWeight,0)/1000-isnull(Fdeductweight,0)) as SumWeight from t_ST_SC_BalanceBillentry where Fid in (" & Temp_S & ")")
        If Not rs.EOF Then
           m_BillInterface.SetFieldValue "FQuantity", IIf(IsNull(rs!sumweight) = True, 0, rs!sumweight)
        End If
            
        ''根据“原单编号”是否为空来锁定字段
        ''------------------------------------------------------------------------------------------------------------
            m_BillInterface.BillHeads(1).BOSFields.Item("FQmStyle").FieldLock = True            '质检方案
            m_BillInterface.BillHeads(1).BOSFields.Item("FSupplyId").FieldLock = True           '供应商
            m_BillInterface.BillHeads(1).BOSFields.Item("FItemId_Ic").FieldLock = True          '物料
            m_BillInterface.BillHeads(1).BOSFields.Item("FCarNo").FieldLock = True              '车号
            m_BillInterface.BillHeads(1).BOSFields.Item("FQuantity").FieldLock = True           '净重
        ''------------------------------------------------------------------------------------------------------------
    End If
    Exit Sub
Errhandle:
    MsgBox err.Description, vbCritical, "金蝶提示"
End Sub

Private Sub m_BillInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, Cancel As Boolean)
    ''工具栏按钮单击时触发
    On Error GoTo Errhandle
    Select Case BOSTool.ToolName
        Case "mnuFeClose"           '单击生铁关闭
        
            ''如果是外购生铁,允许关闭
            If m_BillInterface.GetFieldValue("Fitemid_ic", , Enu_ValueType_FDSP) = "102.00001" And m_BillInterface.GetFieldValue("Fbillno_yd") <> "" Then
                m_BillInterface.K3Lib.UpdateData "update t_ST_SC_BalanceBill set ffeclose=1 where fid=" & m_BillInterface.GetFieldValue("Fbillno_yd")
                MsgBox "检斤单关闭操作成功!", , "金蝶提示"
            Else
                MsgBox "物料不是生铁不允许对检斤单进行关闭操作!", , "金蝶提示"
                Cancel = True
            End If
        Case "mnuFeUnClose"         '单击生铁反关
            
            ''如果是外购生铁,允许反关
            If m_BillInterface.GetFieldValue("Fitemid_ic", , Enu_ValueType_FDSP) = "102.00001" And m_BillInterface.GetFieldValue("Fbillno_yd") <> "" Then
                m_BillInterface.K3Lib.UpdateData "update t_ST_SC_BalanceBill set ffeclose=0 where fid=" & m_BillInterface.GetFieldValue("Fbillno_yd")
                MsgBox "检斤单反关操作成功!", , "金蝶提示"
            Else
                MsgBox "物料不是生铁不允许对检斤单进行反关操作!", , "金蝶提示"
                Cancel = True
            End If
        Case "mnuDrop"              '单击“作废”按钮
             
             '如果物理检验单为二级审核之后,则允许进行作废处理
             If m_BillInterface.GetFieldValue("Fstatus") = 2 Then
             
                '取物理检验单对应检斤单的单据状态

⌨️ 快捷键说明

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