Описание

Скрипт на изменение свойства. Получает значение свойства "Вид договора", типа запись универсального справочника, получает свойство "Группа согласующих" в справочнике, получает состав группы и записывает сотрудников в свойство карточки "Согласующие лица".

Тело

' Скрипт, получающий состав группы
Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID, PropValue)
    Dim MembersProp, MembersPropVals, UniItemID, UniItem, GroupProp
    Dim GroupID, Group, Staff, Members, Member, EmplID, DispVal
    Set MembersProp = Prop(CardData, "Согласующие лица")
    Set MembersPropVals = SubSect(MembersProp, "SelectedValues")
    MembersProp.Value("DisplayValue") = vbNullString
    MembersPropVals.Rows.Clear
    UniItemID = GetProp(CardData, "Вид договора", Null)
    If Not IsNull(UniItemID) Then
        Set UniItem = Sect(RefUniversal(UserSession), "Item").GetRow(UniItemID)
        Set GroupProp = SubSect(UniItem, "Properties").FindRow("@Name='Группа согласующих'")
        If Not GroupProp Is Nothing Then
            GroupID = GroupProp.Value("Value")
            If Not IsNull(GroupID) Then
                Set Group = Sect(RefStaff(UserSession), "AlternateHierarchy").GetRow(GroupID)
                Set Members = SubSect(Group, "Group").Rows
                DispVal = vbNullString
                Set Staff = StaffObject(UserSession)
                For Each Member In Members
                    EmplID = Member.Value("EmployeeID")
                    With MembersPropVals.Rows.AddNew
                        .Value("Order") = MembersPropVals.Rows.Count
                        .Value("SelectedValue") = EmplID
                    End With
                    DispVal = DispVal & "; " & Staff.GetEmployeeName(EmplID, True)
                Next
                If Len(DispVal) > 0 Then
                    DispVal = Right(DispVal, Len(DispVal) - 2)
                End If
                MembersProp.Value("DisplayValue") = DispVal
            End If
        Else
            MsgBox "Не найдено свойство записи универсального справочника Группа согласующих", vbOKOnly or vbExclamation, "Предупреждение"
        End If
    End If
    DoEvent = 2
End Function

' Универсальный справочник
Function RefUniversal(UserSession)
    Set RefUniversal = UserSession.CardManager.DictionaryData("{B2A438B7-8BB3-4B13-AF6E-F2F8996E148B}")
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

' Строка свойства
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

' Установка значения свойства
Sub SetProp(CardData, Alias, Value, DisplayValue)
    Prop(CardData, Alias).Value("Value") = Value
    Prop(CardData, Alias).Value("DisplayValue") = DisplayValue
End Sub