' Скрипт на изменение свойства
' Копирует файл из записи универсального справочника на вкладку "файлы и ссылки"
' 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 |