📄 bos_wipebill_plugins.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 = "BOS_WipeBill_PlugIns"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Attribute VB_Description = "This is BillEvent Interface Class, made by K3BOSPLUGINSWIZAED"
Option Explicit
Dim iRet As Integer
'定义 BillEvent 接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillInterface As BillEvent
Attribute m_BillInterface.VB_VarHelpID = -1
Public Sub Show(ByVal oBillInterface As Object)
'BillEvent 接口实现
'注意: 此方法必须存在, 请勿修改
Set m_BillInterface = oBillInterface
With m_BillInterface
.BillEntrys.Item(1).BOSFields("FWipeItem").Filter = "t_Account.FNumber like '4105%' or t_Account.FNumber like '55%' " 'ORDER BY substring(FNumber,1,1) desc"
.BillEntrys(1).BOSFields("FDivideDep").Visible = False
.RefreshBill
End With
End Sub
Private Sub Class_Terminate()
'释放接口对象
'注意: 此方法必须存在, 请勿修改
Set m_BillInterface = Nothing
End Sub
Private Sub m_BillInterface_AfterDeleteRow(ByVal Index As Long, ByVal lRow As Long)
With m_BillInterface
'填写单据头的报销总额--取报销金额的总和--从分录1中取报销金额的总和
.SetFieldValue "FWipeAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FWipeAmt", "", 0))
'填写单据头的总额借款--取借款金额的总和--从分录1中取报销金额的总和
.SetFieldValue "FLoanAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FLoanAmt", "", 0))
'将单据头的报销总额--转换为大写,将报销总额转化为大写
.SetFieldValue "FCapitalAmtSum", PricetoChinese(.GetFieldValue("FWipeAmtSum"))
'填写单据头的--取补领金额 和 退还金额
If .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") > 0 Then '报销金额 大于 借款金额
.SetFieldValue "FSupplyAmtSum", .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum")
.SetFieldValue "FRefundAmtSum", 0
ElseIf .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") < 0 Then '报销金额 小于 借款金额
.SetFieldValue "FRefundAmtSum", .GetFieldValue("FLoanAmtSum") - .GetFieldValue("FWipeAmtSum")
.SetFieldValue "FSupplyAmtSum", 0
Else
.SetFieldValue "FSupplyAmtSum", 0
.SetFieldValue "FRefundAmtSum", 0
End If
End With
End Sub
Private Sub m_BillInterface_AfterLoadBill()
With m_BillInterface
If iRet = 1 Then
.BillEntrys(1).BOSFields("FDivideDep").Visible = True
Exit Sub
Else
.BillEntrys(1).BOSFields("FDivideDep").Visible = False
Exit Sub
End If
End With
End Sub
Private Sub m_BillInterface_AfterNewBill()
'-------------------------------------------------------------------
'新增单据后,为第三个单据体付值
'-------------------------------------------------------------------
With m_BillInterface
'第三个单据体
' .DeleteEntryData (4)
.BillEntrys(3).MaxRows = 6
.InsertNewRowAndFill 4, 1, "FChargeType", "市内交通费"
.InsertNewRowAndFill 4, 2, "FChargeType", "住宿费"
.InsertNewRowAndFill 4, 3, "FChargeType", "业务招待费"
.InsertNewRowAndFill 4, 4, "FChargeType", "会务费"
.InsertNewRowAndFill 4, 5, "FChargeType", "硬座补贴"
.InsertNewRowAndFill 4, 6, "FChargeType", "其他"
.BillEntrys(1).Visible = False
.BillEntrys(1).Visible = True
.RefreshBill
'-------------------------------------------------------------------
'新增单据后,取当前的预算方案编号
'-------------------------------------------------------------------
Dim rs As New ADODB.Recordset
Set rs = .K3Lib.GetData("select FProjectID,FName from t_mgBudgetSet where fexec=1")
If rs.State = adStateOpen And rs.RecordCount > 0 Then
.SetFieldValue "FBudgetScheme", rs("FName")
lBudgetProjectID = rs("FProjectID")
Else
MsgBox "当前没有正在执行的预算!", vbOKOnly + vbExclamation, HINTINFO
lBudgetProjectID = 0
End If
'-------------------------------------------------------------------
'新增单据后,分割部门隐藏
'-------------------------------------------------------------------
.BillEntrys(1).BOSFields("FDivideDep").Visible = False
iRet = 0
.RefreshBill
End With
End Sub
'*********************************************************************
'选单后,为分录3付值,并向单据头的 报销金额付值 ,同时转换为大写
'*********************************************************************
Private Sub m_BillInterface_AfterSelBill(ByVal lSelBillType As Long)
m_BillInterface.DeleteEntryData (4)
m_BillInterface_AfterNewBill
With m_BillInterface
.SetFieldValue "FLoanAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FLoanAmt", "", 0))
.SetFieldValue "FWipeAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FWipeAmt", "", 0))
'将单据头的报销总额--转换为大写,将报销总额转化为大写
.SetFieldValue "FCapitalAmtSum", PricetoChinese(.GetFieldValue("FWipeAmtSum"))
.RefreshBill
End With
End Sub
'*********************************************************************
'保存前,进行报销金额的判断
'1 是否录入差旅费明细
'2 报销金额是否大于预算余额
'*********************************************************************
Private Sub m_BillInterface_BeforeSave(bCancel As Boolean)
Dim sRet As String, bret As Boolean
Dim lBalanceAmt As Currency
Dim i As Integer
Dim lsum
Dim sErr As String
With m_BillInterface
'判断报销项目是否与借款项目相等
'判断是否录入了差旅费的明细,且明细是否和总和相等
lsum = 0
For i = 1 To .Data("page2").Size
If InStr(1, .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP"), "差旅") Then
lsum = lsum + CCur(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeAmt"))("FFLD"))
bret = True
End If
If Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FFLD")) <> Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FLoanItem"))("FFLD")) And _
Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FLoanItem"))("FFLD")) <> "" Then
MsgBox "第" & CStr(i) & "行,“报销项目”与选择的借款单的“借款项目”不相同,不能保存!"
bCancel = True
Exit Sub
End If
Next i
If bret = True Then
If lsum <> .Sum(.GetFieldInfoByKey("FTraAmt", "", 0)) + .Sum(.GetFieldInfoByKey("FSubsidyAmt", "", 0)) + .Sum(.GetFieldInfoByKey("FChargeAmt", "", 0)) Then
sErr = "请录入差旅费报销信息的明细项!" & vbCrLf & "或请检查“差旅费明细”总额是否与报销信息中的“差旅费”报销金额相等!"
bCancel = True
End If
' MsgBox sErr, vbOKOnly + vbInformation, HINTINFO
' Exit Sub
End If
'进行报销金额的判断
If compareNum(lBalanceAmt, sRet) = False Then
sErr = sErr & vbCrLf & sRet
bCancel = True
End If
If sErr <> "" Then MsgBox sErr, vbOKOnly + vbInformation, HINTINFO
End With
End Sub
'*********************************************************************
'数据更改:
'1 根据报销金额的更改,
' 1更新单据体 补领金额 和退还金额
' 2更新单据头 报销总额,并更新大写
' 3更新单据头 补领金额 和退还金额
'2 分录1中的报销项目更改时(即新增一个报销项目时)将报销部门带入
'*********************************************************************
Private Sub m_BillInterface_Change(ByVal dct As KFO.IDictionary, ByVal dctFld As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean)
With m_BillInterface
'改变分录1中的报销金额
If dct("FFieldName") = "FWipeAmt" Then
'填写单据体的补领金额 和退还金额
If .GetFieldValue("FLoanAmt") <> 0 Then
If .GetFieldValue("FLoanAmt") - .GetFieldValue("FWipeAmt") > 0 Then
.SetFieldValue "FRefundAmt", .GetFieldValue("FLoanAmt") - .GetFieldValue("FWipeAmt")
.SetFieldValue "FSupplyAmt", 0
ElseIf .GetFieldValue("FLoanAmt") - .GetFieldValue("FWipeAmt") < 0 Then
.SetFieldValue "FSupplyAmt", .GetFieldValue("FWipeAmt") - .GetFieldValue("FLoanAmt")
.SetFieldValue "FRefundAmt", 0
End If
End If
'填写单据头的报销总额--取报销金额的总和--从分录1中取报销金额的总和
.SetFieldValue "FWipeAmtSum", m_BillInterface.Sum(m_BillInterface.GetFieldInfoByKey("FWipeAmt", "", 0))
'将单据头的报销总额--转换为大写,将报销总额转化为大写
.SetFieldValue "FCapitalAmtSum", PricetoChinese(.GetFieldValue("FWipeAmtSum"))
'填写单据头的--取补领金额 和 退还金额
If .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") > 0 Then '报销金额 大于 借款金额
.SetFieldValue "FSupplyAmtSum", .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum")
.SetFieldValue "FRefundAmtSum", 0
ElseIf .GetFieldValue("FWipeAmtSum") - .GetFieldValue("FLoanAmtSum") < 0 Then '报销金额 小于 借款金额
.SetFieldValue "FRefundAmtSum", .GetFieldValue("FLoanAmtSum") - .GetFieldValue("FWipeAmtSum")
.SetFieldValue "FSupplyAmtSum", 0
Else
.SetFieldValue "FSupplyAmtSum", 0
.SetFieldValue "FRefundAmtSum", 0
End If
End If
'改变分录1中的报销项目,将部门带进去
If dct("FFieldName") = "FWipeItem" Then
.SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND)
End If
'是否分割部门进行修改
If dct("FFieldName") = "FCheckDep" Then
If .GetFieldValue("FCheckDep") = 1 Then
iRet = 1
' .BillEntrys(1).BOSFields("FDivideDep").LabelWidth = 0
.BillEntrys(1).BOSFields("FDivideDep").Visible = True
.RefreshBill
Else
iRet = 0
.BillEntrys(1).BOSFields("FDivideDep").Visible = False
.RefreshBill
End If
End If
End With
End Sub
'*********************************************************************
'判断
'3 判断当前金额有没有超过预算金额
'参数 cBalanceAmt 预算余额
' sret 错误返回
'返回值: true 预算余额大于等于报销金额 ,false预算余额小于报销金额
'*********************************************************************
Private Function compareNum(ByRef lBalanceAmt As Currency, ByRef sRet As String, Optional iType As Integer) As Boolean
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -