采购部门要求K3实现只能她们才能看到订单单价和金额,还要求只能她们才能看到供应商信息。
原本只要通过设置自带的金额查看权(在“用户权限”的“高级”中设置)就能满足要求,但还要隐藏供应商信息。由于采购订单是工业老单,基本思路是先取登陆用户信息,然后判断用户组来实现隐藏,但网上资料较少,找得比较辛苦。
先参考https://www.cnblogs.com/zhugq02/p/11236741.html来对获取用户信息
MMTS中的代码复制过来就行了。
类模块Hide_amount的代码如下:
'定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer As K3BillTransfer.Bill
Private rs As ADODB.Recordset
Private cn As ADODB.Connection
Private userid As String
Public Sub Show(ByVal oBillTransfer As Object)
'接口实现
'注意: 此方法必须存在, 请勿修改
Set m_BillTransfer = oBillTransfer
End Sub
Private Sub m_BillTransfer_BillInitialize()
Dim strs As String, stra As String, strb As String
Dim numb1 As Integer, numb2 As Integer
'获取登陆用户ID
strs = PropsString()
numb1 = InStr(1, strs, "UserName=")
stra = Mid(strs, numb1, 30)
numb2 = InStr(1, stra, "UserID=")
userid = Mid(stra, numb2 + 7, 5)
' MsgBox "userid:" & userid
''K3连接数据库
Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open m_BillTransfer.Cnnstring
End Sub
Private Sub Class_Terminate()
'释放接口对象
'注意: 此方法必须存在, 请勿修改
Set m_BillTransfer = Nothing
End Sub
Private Sub m_BillTransfer_LoadBillEnd(ByVal ShowType As Long)
Dim vsEntrys As Object
Dim i As Long, j As Long
Dim strsql As String
Dim numb As Integer
Dim THeadCtl As Variant
'TODO: 请在此处添加代码响应事件 LoadBillEnd
Set rs = New ADODB.Recordset
'14成本会计,16供应部
strsql = "select numb=count(*) from t_user t1 inner join t_group t2 on t1.fuserid=t2.fuserid and t2.fgroupid in (14,16)" & _
"Where t1.fuserid > 100 And t1.fuserid = " & CInt(userid)
rs.Open strsql, cn
' MsgBox "数量有" & rs("numb")
If rs("numb").Value > 0 Then
GoTo out
Else
Set vsEntrys = m_BillTransfer.Grid '装入单据体
For i = 1 To UBound(m_BillTransfer.EntryCtl)
'隐藏金额、单价、价税合计、含税单价,列宽置0
If UCase(m_BillTransfer.EntryCtl(i).FieldName) = UCase("FAMOUNT") _
Or UCase(m_BillTransfer.EntryCtl(i).FieldName) = UCase("Fauxprice") _
Or UCase(m_BillTransfer.EntryCtl(i).FieldName) = UCase("FAllAmount") _
Or UCase(m_BillTransfer.EntryCtl(i).FieldName) = UCase("FAuxPriceDiscount") _
Or UCase(m_BillTransfer.EntryCtl(i).FieldName) = UCase("FAuxTaxPrice") Then
With vsEntrys
.col = i
.Col2 = i
.Row = -1
.BlockMode = True
.Lock = True
.BlockMode = False
.ColWidth(i) = 0
End With
End If
Next i
i = 0
THeadCtl = m_BillTransfer.m_HeadCtl '装入单据头
'隐藏供应商
For i = 0 To UBound(THeadCtl)
If UCase(THeadCtl(i).FieldName) = UCase("FSupplyID") Then
If Len(THeadCtl(i).Name) > 0 Then
m_BillTransfer.Head(i).Text = "**********"
End If
Exit For
End If
Next
out:
End If
End Sub
效果如下(隐藏金额的就不发了)
但有个BUG,就是单据反审核后,供应商能显示出来,但重新审核变*了,到时再研究