📄 bos_qmphybill.cls
字号:
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 + -