Re: Раскрывается DBTree при проходе по веткам

Мне нужно, чтобы при проходе(поиске) по дереву, оно не раскрывалось. Но, тем не менее, при

   If TCSActiveModule.DbTree.UpdateLock=0 Then
       TCSActiveModule.DbTree.BeginUpdate
   End If
   Call FullReadTree(TCSActiveModule.DbTree,ArchTree,kod)
   Do While TCSActiveModule.DbTree.UpdateLock>0
       TCSActiveModule.DbTree.EndUpdate
   Loop

Sub  FullReadNode1( Node,Name,Kod)
  If kod=0 Then
      For i=0 To Node.Count-1 
        Call FullReadNode1( Node.Item(i),Name,Kod)
        If Node.Item(i).Text=name Then
          Kod=Node.Item(i).NodeId
          Exit For 'Выход из цикла
        End If
      Next
  End If
End Sub

Sub  FullReadTree( DbTree,name,kod)
  For i=0 To DbTree.RootNodes.Count-1
   If DbTree.RootNodes.Item(i).UpdateLock=0 Then
      DbTree.RootNodes.Item(i).BeginUpdate 
   End if
   Call FullReadNode1(DbTree.RootNodes.Item(i),Name,kod)
    If kod<>0 Then
       Exit For
    End If
  Next   
End Sub

Несмотря на TCSActiveModule.DbTree.BeginUpdate происходит полное (до найденного
“name”) раскрытие дерева. Почему ?
Пробовал вставлять BeginUpdate перед каждым переходом следующую на ветку или на узел.
Не помогает. Что делать ?

Re: Раскрывается DBTree при проходе по веткам

Вы действительно думаете, что программный код легче читается, когда его выкладываете простым текстом?

Re: Раскрывается DBTree при проходе по веткам

Извините. Исправлюсь.

Мне нужно, чтобы при проходе(поиске) по дереву, оно не раскрывалось. Но, тем не менее, при

…
If TCSActiveModule.DbTree.UpdateLock=0 Then
  TCSActiveModule.DbTree.BeginUpdate
End If
Call FullReadTree(TCSActiveModule.DbTree,ArchTree,kod)
Do While TCSActiveModule.DbTree.UpdateLock>0
  TCSActiveModule.DbTree.EndUpdate
Loop
…
Sub FullReadNode1( Node,Name,Kod)
  If kod=0 Then
    For i=0 To Node.Count-1
      Call FullReadNode1( Node.Item(i),Name,Kod)
      If Node.Item(i).Text=name Then
        Kod=Node.Item(i).NodeId
        Exit For 'Выход из цикла
      End If
      Next
    End If
End Sub

Sub FullReadTree( DbTree,name,kod)
  For i=0 To DbTree.RootNodes.Count-1
    If DbTree.RootNodes.Item(i).UpdateLock=0 Then
      DbTree.RootNodes.Item(i).BeginUpdate
    End if
    Call FullReadNode1(DbTree.RootNodes.Item(i),Name,kod)
    If kod<>0 Then
      Exit For
    End If
  Next
End Sub

Несмотря на TCSActiveModule.DbTree.BeginUpdate происходит полное (до найденного
“name”) раскрытие дерева. Почему ?
Пробовал вставлять BeginUpdate перед каждым переходом следующую на ветку или на узел.
Не помогает. Что делать ?

Re: Раскрывается DBTree при проходе по веткам

Какова цель всех манипуляций?
Для чего понадобилось открывать ветки?
Откуда запускается Ваш макрос?

Re: Раскрывается DBTree при проходе по веткам

Для чего понадобилось открывать ветки?

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

Re: Раскрывается DBTree при проходе по веткам

Какова задача?

Re: Раскрывается DBTree при проходе по веткам

Откуда запускается Ваш макрос?

Честное слово, не пойму - какая разница откуда запускается макрос ?
В исходном состоянии дерево свернута. Моя задача : найти заданную ветку , не разворачивая дерево.
Не обижайтесь на непонятливых.

Re: Раскрывается DBTree при проходе по веткам

Этоя к тому клоню, что вместо

Call FullReadTree(TCSActiveModule.DbTree,ArchTree,kod)

напишите

Dim IArchive : Set IArchive = tcsApp.Archive
IArchive.UserModuleName = IArchive.UniqueUserModuleName
    Call FullReadTree(IArchive.DbTree,ArchTree,kod)
TCSApp.DeleteModuleByUserModuleName( IArchive.UserModuleName )

тогда поиск будет производится не в дереве активного окна, а в дереве отдельно открытого Архива (или номенклатурного справочника, если необходимо). При этом визуальных изменений открытого окна не будет.

Re: Раскрывается DBTree при проходе по веткам

поиск будет производится не в дереве активного окна, а в дереве отдельно открытого Архива (или номенклатурного справочника, если необходимо). При этом визуальных изменений открытого окна не будет.

Я так понял Вас, что в любом активном окне дерево будет раскрываться, при пробеге по нему.
Ваш совет, проверил, отрабатывает четко. Тему можно считать закрытой.
Искренне благодарю !

Re: Раскрывается DBTree при проходе по веткам

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

 Dim TP_module
Set TP_module = TCSActiveModule 
TP_module.UserModuleName = TP_module.UniqueUserModuleName

Выдаётся сообщение
Not supported for user-created modules!
CSDN.NmkTechnology

От TCSActiveModule отказываться не хотелось бы, т.к. пользователь может стоять не только на всём ТП, а на какой-либо его ветви.
Посоветуйте, пожалуйста.

Re: Раскрывается DBTree при проходе по веткам

TP_module.UserModuleName = TP_module.UniqueUserModuleName

Просто модуль создан внутри самой программы  и его нельзя вывести из глобального скопа (именно для этого и используется UserModuleName.

Чтобы проделать тоже самое, надо просто получить  техпроцесс самому (например от TCSApp).

Re: Раскрывается DBTree при проходе по веткам

Весь ТП получить могу по идентификатору номенклатуры и версии
tcsapp.NmkTechnology(...),
а если

пользователь может стоять не только на всём ТП, а на какой-либо его ветви

Как в этом случае идентифицировать модуль?

Re: Раскрывается DBTree при проходе по веткам

Ну поскольку у интерфейса INmkTechnology я не вижу таких свойств, правильнее всего воспользоваться свойством CurrentVersion и объекта INmkTechnology

Re: Раскрывается DBTree при проходе по веткам

Давайте уточним.
Чтобы избежать визуального пробега по техпроцессу, надо создать копию модуля.
Для этого надо иметь возможность обратиться к модулю по имени.

TP_module.UserModuleName = TP_module.UniqueUserModuleName

Обратиться к модулю по имени в случае, когда активным модулем является весь ТП, можно с помощью

tcsapp.NmkTechnology(...)

Это понятно.
Под вопросом остаётся обращение к модулю ТП, когда активным является часть ТП, например, в дереве операций выбрана одна из них, и в активном модуле - позиции ТП, связанные с этой операцией.
Поясните, как может помочь

CurrentVersion объекта INmkTechnology

Re: Раскрывается DBTree при проходе по веткам

Может речь об этом:
https://help.technologics.ru/5.7/TCSAPI … tion_9.htm
Указываете параметр 0 - показать все

Re: Раскрывается DBTree при проходе по веткам

Возможно, может помочь.
Но поскольку, когда стоим на ветке дерева, пробегать надо только по позициям этой ветки,
то придётся анализировать, в корневой или во вложенной ветви находимся, а также что это - операция или переход, чтобы взять соответствующий идентификатор для .ShowOperation( TECH_ID ).
Пока не знаю, можно ли такой анализ осуществить.

Re: Раскрывается DBTree при проходе по веткам

Можно уточнить, что вы конкретно хотите сделать?    :)

Re: Раскрывается DBTree при проходе по веткам

Пользователь стоит на всём ТП или, если нужно работать с конкретной операцией/переходом, выбирает соответствующую ветвь. Затем запускает макрос. Вначале считываются все позиции активного модуля (если стоит на операции/переходе, то считываются только позиции, связанные с ними) и предлагаются для дальнейшей работы... Функционально у меня всё работает. Здесь заинтересовалась возможностью избавить пользователя от визуализации пробега по позициям ТП при считывании.

Re: Раскрывается DBTree при проходе по веткам

А как насчет функций:

objectvariable.BeginUpdate  и  objectvariable.EndUpdate

Если в цикле у вас перебираются позиции активного модуля, то перебор этот будет скрыт от пользователя, и допустим можно вставить ProgressBar, чтоб хоть что-то показывалось)

Спасибо сказали: snake1

Re: Раскрывается DBTree при проходе по веткам

Елена, совет прямо в точку, замечательно всё скрылось  (а ProgressBar я уже использовала).
Премного благодарна!

Re: Раскрывается DBTree при проходе по веткам

:)  ну и гуд

Re: Раскрывается DBTree при проходе по веткам

Кстати, Help по этим командам очень скудный.

Re: Раскрывается DBTree при проходе по веткам

:/ Да хелп, порою, удручает)))

Если есть вопросы, пишите на форум, обязательно  поможем, главное объясните, что хотите чтоб получилось....