📄 bos_wipe2bill_plugins.cls
字号:
' 3更新单据头 补领金额 和退还金额
'3 申请部门变更时,如果分割部门没有值,则将申请部门的值付到单据体的分割部门上
'*********************************************************************
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
'-------------------------------------------------------------------
'报销项目 改变
'-------------------------------------------------------------------
If dct("FFieldName") = "FWipeItem" Then
'不允许 报销项目为 差旅费
If InStr(1, .Data("Page2").Item(Row)(.DataSrv.TableInfo("map")("FWipeItem"))("FDSP"), "差旅") Then
.SetFieldValue "FWipeItem", 0
MsgBox "支出证明单不能报销差旅费!", vbInformation + vbOKOnly, HINTINFO
End If
'改变分录1中的报销项目,将部门带进去
.SetFieldValue "FDivideDep", .GetFieldValue("FReqDept", , Enu_ValueType_FFND)
End If
'-------------------------------------------------------------------
'申请部门变更时,如果分割部门没有值,则将申请部门的值付到单据体的分割部门上
'-------------------------------------------------------------------
If dct("FFieldName") = "FReqDept" Then
Dim i As Integer
i = 1
While i <= .Data("Page2").Size
If Trim(.GetFieldValue("FDivideDep", i, Enu_ValueType_FDSP)) = "" 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
End With
End Sub
'是否显示分割部门
Private Function ShowDep(iType As Integer)
With m_BillInterface
If iType = 1 Then
iShowDepType = 1
.BillEntrys(1).BOSFields("FDivideDep").Visible = True
.RefreshBill
Exit Function
Else
iShowDepType = 0
.BillEntrys(1).BOSFields("FDivideDep").Visible = False
.RefreshBill
Exit Function
End If
End With
End Function
'*********************************************************************
'判断
'3 判断当前金额有没有超过预算金额
'参数 cBalanceAmt 预算余额
' sret 错误返回
' iType 0 计算预算余额 1 计算除当次以外的预算余额
'返回值: 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 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
sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)= '" & CStr(iYear) & "'"
Case 3
Case 4
If iPeriod <= 3 Then
sConBound = "FYear= " & iYear & " and FPeriod<=3 " ' in (1,2,3)"
sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='03'"
ElseIf iPeriod >= 4 And iPeriod <= 6 Then
sConBound = "FYear= " & iYear & " and FPeriod <=6 " 'in (4,5,6)"
sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='06'"
ElseIf iPeriod >= 7 And iPeriod <= 9 Then
sConBound = "FYear= " & iYear & " and FPeriod <=9 " 'in (7,8,9)"
sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='09'"
ElseIf iPeriod >= 10 And iPeriod <= 12 Then
sConBound = "FYear= " & iYear & " and FPeriod <=12 " 'in (10,11,12)"
sConBound1 = " substring(convert(varchar(7),FBillDate,21),1,4)='" & CStr(iYear) & "' and substring(convert(varchar(7),FBillDate,21),6,2)<='12'"
End If
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -