Тема: Определить наименование раздела архива

Здравствуйте! Необходимо определить наименование раздела архива самого нижнего уровня у документа. Выполняется

Set DOC_module=TCSApp.SingleDoc( CSDN_Const.dspSearchDocByNote,Arx_Note)
If  Not DOC_module Is Nothing Then 
    pNode=DOC_module.Properties("Tree_ID").AsInteger ' ид. раздела архива 
    '   Call TCSApp.ShowMessageBox("Ид. раздела архива",pNode) 
    TCSApp.Archive.DBTree.DbNodeByNodeId(pNode).Selected =True     '
    razdel=TCSApp.Archive.DBTree.Selected.Text '
...

При запуске макроса в новом сеансе TCS выдаёт ошибку на команде

TCSApp.Archive.DBTree.DbNodeByNodeId(pNode).Selected =True 

Пишет
"Object is no longer valid
CSDN.DbTree"
Хотелось бы обойтись без пробегания по всему дереву, а сразу, используя идентификатор раздела, перейти на раздел  и определить его наименование. А может, предложите что-нибудь другое?

P.S. Удивительно то, что после запуска другого макроса на подобную тему, в котором нет буквально таких команд, приведённый код работает без проблем. Таким образом выходим из положения на данный момент.

Re: Определить наименование раздела архива

Необходимо определить наименование раздела архива самого нижнего уровня у документа.

Вообще от для того чтобы определить название не обязательно выделять ветку. МОжно просто сделать так

pNode=DOC_module.Properties("Tree_ID").AsInteger ' ид. раздела архива
Set Node = TCSApp.Archive.DBTree.DbNodeByNodeId(pNode)
razdel = Node.Text '

Так же для работы с деревом архивов конечно же лучше использовать отдельный интерфейс IOcs_Application.ArchiveTree


Вообще к сожалению есть такой нюанс на некоторых деревьях, по хорошему нам надо исправить поведение на однообразное. Используйте такой код (в данном случае нужно раскрыть ветки первого уровня - Архивы).
Макрос запускается из из архива

Sub FormMacro_Test123(TCSActiveModule)'tets
  pNode = TCSActiveModule.Properties("Tree_ID").AsInteger
  'Dim TCSActiveModule As ITModule
  For i=0 To TCSApp.Archive.DBTree.RootNodes.Count-1 
    For j=0 To TCSApp.Archive.DBTree.RootNodes.Item(i).Count-1 
      Call TCSApp.Archive.DBTree.RootNodes.Item(i).Item(j).Expand( False )
    Next
  Next
  Set Node = TCSApp.Archive.DBTree.DbNodeByNodeId(pNode)
  'Dim Node As IDbNode
  Call TCSApp.ShowMessageBox( "", Node.FullPath( "/" ) )
End Sub
Спасибо сказали: snake1

Re: Определить наименование раздела архива

На

Call TCSApp.Archive.DBTree.RootNodes.Item(i).Item(j).Expand( False )

выдаёт ошибку
"Объект не поддерживает это свойство или метод:...Expand"
В Help Expand не нашла, версия,возможно, не та.
Пробовала обойтись без этой команды в цикле, вместо неё

TCSApp.Archive.DbTree.DbNodeByNodeId(TCSApp.Archive.DbTree.RootNodes.Item(i).Item(j).NodeId).Selected=True

но потом появляется старая ошибка на

Set Node = TCSApp.Archive.DbTree.DbNodeByNodeId(pNode)

Re: Определить наименование раздела архива

А точно, Expand в 6.0.1 появился. Ну тогда можно просто вместо него

 
 с = Call TCSApp.Archive.DBTree.RootNodes.Item(i).Item(j).Count

должно сработать.

Re: Определить наименование раздела архива

c=TCSApp.Archive.DBTree.RootNodes.Item(i).Item(j).Count

сработало, спасибо!
Заинтересовалась Expand, хочется прочитать в Hepl. Поместите, пожалуйста, ссылку.

Re: Определить наименование раздела архива

TechnologiCS API 6.0.1