ApiExplorer написан в первую очередь для исследования свойств модулей и показа базовых принципов работы с TCS Api. Более тонкие способы он не отражает, так как там нет универсального способа.
Описание классов в TCSAPIHelp.chm и ApiExplorer немного различны, такое впечатление что некоторые изменения не учтены в APIHelp.
APIHelp более актуален, а ApiExplorer по факту универсален, работает самостоятельно, да и мы более не расширяли.
Для "архива" функция DbNodeByNodeId выдает ошибку ”Object no longer valid”,
хотя для "Номенклатуры" работает:
К сожалению особенность работы самого TechnologiCS с некоторыми деревьями, которая пока находит такое отражение в АПИ.
В TechnologiCS некоторые деревья строятся динамически в процессе работы (их немного, но они есть). В частности в Архиве изнчально существует только первый уровень Архива, а все остальные подключаются по необходимости. Поэтому в данном случае необходимо перед таким вызовом либо найти Архив, либо раскрыть все первые ветки Архива.
Как правило в работе мы используем функции на подобие такого.
'<doc Поиск ноды в дереве по полному пути
'<par DbTree As IDbTree>
'<par FullPath Полный путь>
'<type As Integer Идентификатор ноды. -1 Не найдена>
'>
Function GetDbTreeNodeId( DbTree, FullPath )
GetDbTreeNodeId = -1
Paths = Split( CStr(FullPath), "\\" )
If Not IsArray(Paths) Then Exit Function
Set PNode = Nothing
'Dim PNode as IDbNode
Lvl = 0
For i=0 To DbTree.RootNodes.Count-1
Set PNode = DbTree.RootNodes.Item(i)
If PNode.Text=Paths(Lvl) Then Exit For
Set PNode = Nothing
Next
For Lvl=1 To UBound(Paths)
If Not PNode Is Nothing Then
Set Node = Nothing
'Dim Node As IDbNode
For I=0 To PNode.Count-1
Set Node = PNode.Item(i)
If Node.Text=Paths(Lvl) Then Exit For
Set Node = Nothing
Next
Set PNode = Node
End If
Next
If Not PNode Is Nothing Then GetDbTreeNodeId = PNode.NodeId
End Function
'<doc Поиск ноды в дереве идентификатору
'<par DbTree As IDbTree>
'<par PNode As IDbNode >
'<par NodeId As Integer >
'<type As Boolean >
'>
Function SelectDbTreeByNodeId( DbTree, PNode, NodeId )
SelectDbTreeByNodeId = False
If PNode Is Nothing Then
For i=0 To DbTree.RootNodes.Count-1
Set PNode = DbTree.RootNodes.Item(i)
If PNode.NodeId=NodeId Then
PNode.Selected = True
SelectDbTreeByNodeId = True
Else
SelectDbTreeByNodeId = SelectDbTreeByNodeId( DbTree, PNode, NodeId )
End If
If SelectDbTreeByNodeId Then Exit Function
Next
Else
For i=0 To PNode.Count-1
Set Item = PNode.Item(i)
'Item As IDbNode
If Item.NodeId=NodeId Then
Item.Selected = True
SelectDbTreeByNodeId = True
Else
If Item.HasChildNodes Then SelectDbTreeByNodeId = SelectDbTreeByNodeId( DbTree, Item, NodeId )
End If
If SelectDbTreeByNodeId Then Exit Function
Next
End If
End Function
Для 6.2 рекомендуется установить последние сервис паки.