Вот пример функции, возвращающей фамилию Начальника ТБ цеха. При этом подразумевается, что пользователь, получающий отчет, выполняет роль Разработчик в рабочей группе цеха.
Public Function GetNachTB(IsD, DopIsD, Ms) As String
Dim Usr ' справочник пользователей
Dim WrkGroup_Usr ' Рабочие группы - где задействован пользователь
Dim Id ' Просто Integer
Dim WRK_GROUP_ID ' Идентификатор рабочей группы
Dim UsersWrk ' Пользователи рабочей группы
Dim Wrkgr ' Справочник рабочих групп
Set Usr = TCSApp.Users
Usr.UserModuleName = Usr.UniqueUserModuleName
WRK_GROUP_ID = 0
If Usr.Locate("NAME", TCSApp.LoginUserName, 0) Then
Set WrkGroup_Usr = Usr.Properties("WORKGROUPS").AsIDispatch
WrkGroup_Usr.UserModuleName = WrkGroup_Usr.UniqueUserModuleName
Do While Not WrkGroup_Usr.EOF
If Not (WrkGroup_Usr.Properties("FIRED").AsBoolean) And (InStr(WrkGroup_Usr.Properties("OFFICER_NAME").asstring, "Разработчик") > 0) Then
WRK_GROUP_ID = WrkGroup_Usr.Properties("ID").asInteger
End If
WrkGroup_Usr.Next
Loop
End If
Set Wrkgr = TCSApp.WorkGroups
Wrkgr.UserModuleName = Wrkgr.UniqueUserModuleName
If WRK_GROUP_ID > 0 Then
If Wrkgr.Locate("ID", WRK_GROUP_ID, 0) Then
Set UsersWrk = Wrkgr.Properties("USERS").AsIDispatch
UsersWrk.UserModuleName = UsersWrk.UniqueUserModuleName
If UsersWrk.Locate("OFFICER_NAME", "Начальник ТБ цеха", 0) Then
GetNachTB = UsersWrk.Properties("USER_NAME").asstring
Else
GetNachTB = ""
End If
Call TCSApp.DeleteModuleByUserModuleName(UsersWrk.UserModuleName)
End If
End If
Call TCSApp.DeleteModuleByUserModuleName(Wrkgr.UserModuleName)
Call TCSApp.DeleteModuleByUserModuleName(WrkGroup_Usr.UserModuleName)
Call TCSApp.DeleteModuleByUserModuleName(Usr.UserModuleName)
End Function