📄 bos_wipe1bill_plugins.cls
字号:
End If
End Sub
'*********************************************************************
'数据更改:
'0 报销项目 改变,
' 1不允许 报销项目为 差旅费
' 2分录1中的报销项目更改时(即新增一个报销项目时)将报销部门带入
'1 申请部门 改变
' 1,如果分割部门没有值,则将申请部门的值付到单据体的分割部门上
'2 根据报销金额的更改,
' 1更新单据体 补领金额 和退还金额
' 2更新单据头 报销总额,并更新大写
' 3更新单据头 补领金额 和退还金额
' 3 是否分割部门 改变
' 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)
Dim i As Integer
With m_BillInterface
'-------------------------------------------------------------------
'报销项目 改变
'-------------------------------------------------------------------
If dct("FFieldName") = "FWipeItem" Then
' 不允许 报销项目为 差旅费
If InStr(1, .Data("Page2").Item(Row)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP"), "差旅") Then
.SetFieldValue "FWipeItem", 0
MsgBox "支出凭单不能报销差旅费!", vbOKOnly + vbInformation, HINTINFO
Exit Sub
End If
'改变分录1中的报销项目,将部门带进去
If Trim(.GetFieldValue("FDivideDep", Row, Enu_ValueType_FDSP)) = "" Then
.SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND), Row
End If
' '改变报销项目,将报销项目编号带出来
' .SetFieldValue "FText", .GetFieldValue("FWipeItem", Row, Enu_ValueType_FDSP), Row
End If
'-------------------------------------------------------------------
'申请部门变更时,如果分割部门没有值,则将申请部门的值付到单据体的分割部门上
'-------------------------------------------------------------------
If dct("FFieldName") = "FReqDept" Then
i = 1
While i <= .Data("Page2").Size
If Trim(.GetFieldValue("FDivideDep", i, Enu_ValueType_FDSP)) = "" Or .GetFieldValue("FCheckDep") = 0 Then
.SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND), i
End If
i = i + 1
Wend
End If
'-------------------------------------------------------------------
'改变分录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
'-------------------------------------------------------------------
'是否分割部门进行修改
'-------------------------------------------------------------------
If dct("FFieldName") = "FCheckDep" Then
i = 1
While i <= .Data("Page2").Size
If .GetFieldValue("FCheckDep") = 0 Then
.SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND), i
End If
i = i + 1
Wend
ShowDep CInt(.GetFieldValue("FCheckDep"))
End If
End With
End Sub
'是否显示分割部门
Private Function ShowDep(iType As Integer)
With m_BillInterface
If iType = 1 Then
iShowDepType = 1
.SetFieldValue "FCheckDep", 1
.BillEntrys(1).BOSFields("FDivideDep").Visible = True
Else
iShowDepType = 0
.SetFieldValue "FCheckDep", 0
.BillEntrys(1).BOSFields("FDivideDep").Visible = False
End If
.BillEntrys(2).Visible = False
' .RefreshBill
Exit Function
End With
End Function
'*********************************************************************
'判断
'3 判断当前金额有没有超过预算金额
'参数 cBalanceAmt 预算余额
' sret 错误返回
'返回值: true 预算余额大于等于报销金额 ,false预算余额小于报销金额
'*********************************************************************
Private Function compareNum(ByRef lBalanceAmt As Currency, ByRef sRet As String, Optional iType As Integer) As Boolean
'-------------------------------------------------------------------
'判断
'3 判断当前金额有没有超过预算金额
'-------------------------------------------------------------------
Dim lAmt As Currency '借款金额
Dim lbudget As Currency '预算金额
Dim lUseAmt As Currency '已用预处金额
Dim lUseAmt1 As Currency '借款金额
Dim lUseAmt2 As Currency '报销金额
Dim lUseAmt21 As Currency
Dim lUseAmt22 As Currency
Dim lUseAmt23 As Currency
Dim lUseAmt3 As Currency '当次报销金额
Dim lbudgetID As Long '预算方案ID
Dim lDepId As Long '部门ID
Dim lDetailId As Long
Dim lAcctId As Long '会计科目
Dim lBudgetAccId As Long '预算科目
Dim sAccIdDepId As String '预算科目对应会计科目和部门 和字符串
Dim lBudgetCon As Long '预算控制 0本期预算 1累计预算 2本年预算 3方案预算 4季度预算 5半年预算
Dim sConBound As String '预算控制范围的字符串
Dim sConBound1 As String
Dim rs As New ADODB.Recordset
Dim sSql As String
Dim iYear As Integer
Dim iPeriod As Integer
Dim i As Integer, j As Integer
Dim sFid_src As String '源单编号
Dim sErr As String
On Error GoTo ERR
With m_BillInterface
'取对应预算方案
lbudgetID = lBudgetProjectID
'循环分录中的所有列
i = 1
beg: While i <= .Data("Page2").Size
'对应部门,
If Trim(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FFLD")) = "" Then
i = i + 1
GoTo beg
End If
lDepId = .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FFLD")
'取借款金额的值
If iType = 1 Then
lAmt = 0
Else
lAmt = .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FloanAmt"))("FFLD")
End If
'会计科目--报销科目=借款科目(如果有借款存在)
lAcctId = .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FFLD")
'2根据财务科目内码取预算科目的内码 lBudgetAccId
sSql = "select FBudgetItem from t_EP_ER_AccToMgAccEntry1 t1 " & _
" inner join t_EP_ER_AccToMgAcc t2 on t1.fid=t2.fid " & _
" where FAcctID = '" & lAcctId & "' and FDepID ='" & lDepId & "'"
Set rs = .K3Lib.GetData(sSql)
If rs.State = adStateOpen And rs.RecordCount > 0 Then
lBudgetAccId = rs("FBudgetItem")
Else
sErr = sErr & "您录入第" & CStr(i) & "列中的 “会计科目”:" & _
CStr(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FFND")) & "-" & CStr(.Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP")) & _
" 和 “部门”" & .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FFND") & "-" & .Data("Page2").Item(i)(.DataSrv.TableInfo("map")("FDivideDep"))("FDSP") & _
" 没有对应预算科目!"
compareNum = False
sRet = sErr
Exit Function
End If
If rs.State = adStateOpen Then rs.Close
'取预算范围,是月还是季还是年,没有的话,默认为季度预算
Set rs = .K3Lib.GetData("select FValue from T_SystemProfile where FCategory='mg' and FKey='BudGet_Con'")
If rs.State = adStateOpen And rs.RecordCount > 0 Then
lBudgetCon = rs("FValue")
Else
lBudgetCon = 4
End If
If rs.State = adStateOpen Then rs.Close
'3 根据预算类型进行条件拼写
' iYear = CInt(.K3Lib.GetData("select FValue from t_systemprofile where FCategory='GL' and FKey='CurrentYear'")("FValue"))
' iPeriod = CInt(.K3Lib.GetData("select FValue from t_systemprofile where FCategory='GL' and FKey='CurrentPeriod'")("FValue"))
' iYear = Left(.K3Lib.GetData("select convert(varchar(19),getdate(),21) as date")("Date"), 4)
' iPeriod = Mid(.K3Lib.GetData("select convert(varchar(19),getdate(),21) as date")("Date"), 6, 2)
iYear = Left(.GetFieldValue("FBillDate"), 4)
iPeriod = Mid(.GetFieldValue("FBillDate"), 6, 2)
Select Case lBudgetCon '0本期预算 1累计预算 2本年预算 3方案预算 4季度预算 5半年预算
Case 0
sConBound = "FYear= " & iYear & " and FPeriod <=" & iPeriod
sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='" & CStr(iPeriod) & "'"
Case 1
Case 2
sConBound = "FYear= " & iYear
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -