' Скрипт на изменение свойства
' Копирует файл из записи универсального справочника на вкладку "файлы и ссылки"
' v 1.0.0

Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID, PropValue)

    Dim UniItemID, UniItem, UniItemProp, CardFileID
    UniItemID = GetProp(CardData, "Вид договора", Null)
    If Not IsNullGuid(UniItemID) Then
        Set UniItem = Sect(RefUniversal(UserSession), "Item").GetRow(UniItemID)
        Set UniItemProp = SubSect(UniItem, "Properties").FindRow("@Name='Карточка'")
        If IsNull(UniItemProp) Then
            MsgBox "В Универсальном справочнике не найдено свойство 'Карточка'", vbOKOnly Or vbExclamation, "Предупреждение"
            Exit Function
        End If
        CardFileID = UniItemProp.Value("Value")
        If IsNull(CardFileID) Or CardFileID = vbNullString Then
            MsgBox "В Универсальном справочнике для вида договора не задан файл", vbOKOnly Or vbExclamation, "Предупреждение"
            Exit Function
        End If
        AttachCardFileCopy UserSession, CardData, CardFileID
    End If

    DoEvent = 2

End Function

Function IsNullGuid(ID)
    IsNullGuid = (IsNull(ID) Or ID = vbNullString Or ID = "00000000-0000-0000-0000-000000000000" Or ID = "{00000000-0000-0000-0000-000000000000}")
End Function

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

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

' Прикрепление к карточке копии существующей карточки файла
Sub AttachCardFileCopy(UserSession, CardData, CardFileID)
    Dim FileListID, FileListData, FileList
    FileListID = MainInfo(CardData).Value("FilesID")
    Set FileListData = UserSession.CardManager.CardData(FileListID)
    Set FileList = CreateObject("TOFileList.FileList")
    Set FileList.UserSession = UserSession
    Set FileList.CardData = FileListData
    FileList.FileRefs.Clear
    FileList.CopyExistingFile CardFileID
End Sub