' Скрипт на открытие ' Проверяет пренадлежность открывающего пользователя к шгруппе DV или подразделениям в совйстве 'Подразделениея' ' ' v 1.2.1 Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID) DoEvent = 0 Dim Units, Unit, CurrentUserID, Flag, CollEmpty CurrentUserID = StaffObject(UserSession).GetCurrentUserID If IsEmployeeInGroup(UserSession, "Божественная двшная группа", CurrentUserID) Then Exit Function End If Set Units = Prop(CardData, "Подразделения") If Not Units Is Nothing Then Flag = False: CollEmpty = True For Each Unit In SubSect(Units, "SelectedValues").Rows CollEmpty = False If IsEmployeeInUnit(UserSession, Unit.Value("SelectedValue"), CurrentUserID) Then Flag = True Exit For End If Next If Not (Flag Or CollEmpty) Then MsgBox "Доступ к карточке запрещен", vbOKOnly Or vbExclamation, "Предупреждение" DoEvent = 8 ' 8 - закрыть карточку End If End If End Function ' Проверить вхождение пользователя в группу DV Function IsEmployeeInGroup(UserSession, GroupAlias, EmployeeID) Dim Row For Each Row In Sect(RefStaff(UserSession), "AlternateHierarchy").AllRows If Row.Value("Name") = GroupAlias Then IsEmployeeInGroup = StaffObject(UserSession).IsEmployeeInGroup(EmployeeID, Row.ID) Exit Function End If Next IsEmployeeInGroup = False End Function ' Проверить вхождение пользователя в подразделение и дочерние подразделения Function IsEmployeeInUnit(UserSession, UnitID, EmployeeID) Dim Employee, CurUnit Set Employee = Sect(RefStaff(UserSession), "Employees").GetRow(EmployeeID) Set CurUnit = Employee.SubSection.ParentRow Do While Not (IsNull(CurUnit) Or CurUnit Is Nothing) If GoodGuid(CurUnit.ID) = GoodGuid(UnitID) Then IsEmployeeInUnit = True Exit Function End If Set CurUnit = CurUnit.ParentRow Loop IsEmployeeInUnit = False End Function ' Нормализуем гуид Function GoodGuid(Guid) If IsNull(Guid) Then GoodGuid = Guid Exit Function End If GoodGuid = UCase(Replace(Replace(CStr(Guid), "{", ""), "}", "")) End Function ' Справочник сотрудников Function RefStaff(UserSession) Set RefStaff = UserSession.CardManager.DictionaryData("{6710B92A-E148-4363-8A6F-1AA0EB18936C}") End Function ' Получение StaffObject Function StaffObject(UserSession) Set StaffObject = CreateObject("TOHelperObjects.StaffObject") Set StaffObject.UserSession = UserSession End Function ' Получение секции карточки по имени Function Sect(CardData, Alias) Set Sect = CardData.Sections(CardData.Type.AllSections.GetByAlias(Alias).ID) End Function ' Получение подчиненной секции по имени Function SubSect(RowData, Alias) Set SubSect = RowData.ChildSections(RowData.Section.Type.ChildSections.GetByAlias(Alias).ID) End Function ' Нулевая строка секции MainInfo Function MainInfo(CardData) Set MainInfo = Sect(CardData, "MainInfo").FirstRow End Function ' Строка свойства Function Prop(CardData, Alias) Set Prop = Nothing Dim Row: For Each Row In Sect(CardData, "Properties").Rows If Row.Value("Name") = Alias Then Set Prop = Row Exit Function End If Next End Function ' Получение значения свойства Function GetProp(CardData, Alias, DefaultValue) Dim Row: Set Row = Prop(CardData, Alias) If Row Is Nothing Then GetProp = DefaultValue Else GetProp = Row.Value("Value") If IsNull(GetProp) Then GetProp = DefaultValue End If End Function