' Создание новой версии ' Скрипт на кнопку в карточке ' v 2.0.0 Option Explicit Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID) DoEvent = 0 or 16 Dim CardData2, FileList2, Ver, State, Flag, FlagModif, FlagNewVer, FolderID2, LinkedID, LinkedCard If MsgBox("Вы уверены что хотите создать новую версию этого дизайна?", vbYesNo Or vbInformation, "Внимание!") = vbNo Then Exit Function End If If GetProp(CardData, "Состояние", vbNullString) <> "действующий" Then MsgBox "Внимание! Новую версию дизайна можно создавать только по действующему дизайну. Текущий дизайн не является действующим.", vbOKOnly, "Ошибка создания новой версии дизайна" Exit Function End If If GetProp(CardData, "Флаг модификации", vbNullString) <> "False" Then MsgBox "Внимание! По данному дизайну уже идет модификация.", vbOKOnly, "Предупреждение" Exit Function End If ' Копируем карточку Set CardData2 = CardData.Copy ' Чистим файлы Set FileList2 = UserSession.CardManager.CardData(MainInfo(CardData2).Value("FilesID")) Sect(FileList2, "FileReferences").Rows.Clear MainInfo(FileList2).Value("Count") = 0 ' Чистим ссылки Sect(CardData2, "CardReferences").Rows.Clear ' Проставляем версию Ver = GetProp(CardData, "Версия дизайна", 0) + 1 SetProp CardData2, "Версия дизайна", Ver, CStr(Ver) ' Пишем состояние на свойствах State = "проект" SetProp CardData2, "Состояние", State, State ' Пишем флаг согласования на свойствах Flag = "False" SetProp CardData2, "Флаг согласования", Flag, "Нет" ' Пишем флаг новой версии на свойствах FlagNewVer = "True" SetProp CardData2, "Флаг новой версии", Flag, "Да" ' Пишем флаг модификации на свойствах FlagModif = "True" SetProp CardData, "Флаг модификации", FlagModif, "Да" ' Пишем состояние на основной секции MainInfo(CardData2).Value("DocState")="{5C82A353-3F9D-4C1A-BAD4-103F85BAB54F}" ' Помещаем в папку FolderID2 = GetProp(CardData, "папка", FolderID) FolderCard(UserSession).CreateShortcut FolderID2, CardData2.ID, True ' Создаем двустороннюю ссылку на карточки LinkedID = CardData2.ID Set LinkedCard = UserSession.CardManager.CardData(LinkedID) AddCardReference CardData, UserSession, LinkedCard.ID, "Следующая версия" AddCardReference LinkedCard, UserSession, CardData.ID, "Предыдущая версия" DoEvent = 2 or 16 ' Выводим на экран новую карточку CardFrame.Host.ShowCard CardData2.ID End Function ' Получение карточки папок Function FolderCard(UserSession) Set FolderCard = UserSession.CardManager.Dictionary("{DA86FABF-4DD7-4A86-B6FF-C58C24D12DE2}") 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 AddCardReference(CardData, UserSession, Link, LinkDesc) Dim Refs, Row Set Refs = Sect(CardData, "CardReferences") Set Row = Refs.CreateRow Row.Value("Link") = Link Row.Value("CreationDate") = Now Row.Value("CreatedBy") = StaffObject(UserSession).GetCurrentUserID Row.Value("LinkDesc") = LinkDesc End Sub ' Получение 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