Тема: TCSApp

Сразу прошу  прощения  за возможно повторный вопрос!

1) В редакторе скриптов TCS 6.2 все стандартные скрипты активно используют методы класса TCSApp.

Однако описания методов этого класса я найти не смог. В файле  API help с этой точки зрения класс не рассматривается.

Есть ли подобное описание в природе?

2) Возможно ли редактирование встроенных форм класса TCSApp?

    Я получу к ним доступ если открою TcsApi.tlb и т.п. с помощью Delphi?

3) Редактор Интерфейса.
Интересует возможность не только включать\ отключать кнопки, но и добавлять свои - новые, а так же возможность увеличить размер значков. Есть\нет\будет\ и что с этим делать)

Спасибо!

Re: TCSApp

kondopog2005 пишет:

1) В редакторе скриптов TCS 6.2 все стандартные скрипты активно используют методы класса TCSApp.
Однако описания методов этого класса я найти не смог. В файле  API help с этой точки зрения класс не рассматривается.
Есть ли подобное описание в природе?

Описание есть в файле TCSAPIHelp.chm, только надо смотреть не описание классов, а интерфейсов:

kondopog2005 пишет:

2) Возможно ли редактирование встроенных форм класса TCSApp?

    Я получу к ним доступ если открою TcsApi.tlb и т.п. с помощью Delphi?

Не совсем понятен вопрос по редактированию встроенных форм. Если можно, уточните, о каком редактировании идёт речь?
Для работы с API TechnologiCS в Delphi необходимо осуществить импорт библиотеки классов, как описано здесь: https://forum.technologics.ru/post7019.html#p7019

kondopog2005 пишет:

3) Редактор Интерфейса.
Интересует возможность не только включать\ отключать кнопки, но и добавлять свои - новые, а так же возможность увеличить размер значков. Есть\нет\будет\ и что с этим делать)

В текущей версии  6.3.0.0(19094) увеличивать размер значков нельзя, в качестве "своих" кнопок можно на панель инструментов подключать макросы и меню макросов.

(изменено: kondopog2005, 4 февраля 2014 23:07:30)

Re: TCSApp

Не совсем понятен вопрос по редактированию встроенных форм. Если можно, уточните, о каком редактировании идёт речь?

Для свойства IOcs_Application_Archive

Пример на VB:

Dim OCS As CSDN.OCS
Dim App As CSDN.Ocs_Application
Sub Test()
    Call Login
    
    Dim Archive As CSDN.Archive
    
    Set Archive = App.Archive
    
    I = Archive.ShowModal("Архив документов")
        
    Set Archive = Nothing
    
End Sub
Sub Login()
    
    If OCS Is Nothing Then Set OCS = CreateObject("CSDN.OCS")
    
    If App Is Nothing Then Set App = OCS.Login 
    
End Sub

Archive -  форма ввода (диалоговое окно). Эту форму можно редактировать отдельно (добавлять новые кнопки, лейблы, свойства и т.п. через редактор форм)?
Это пример.

Конкретно меня интересует CreateDocWz ( в названии мог ошибиться, завтра проверю)


В текущей версии  6.3.0.0(19094) увеличивать размер значков нельзя, в качестве "своих" кнопок можно на панель инструментов подключать макросы и меню макросов.

Это следует понимать  так:
Можно добавить на панель инструментов "кнопку" с назначенным макросом\меню макросов,
а не как раньше  (добавить макрос со значком в общее меню "Макросы" на панели инструментов) ?

Re: TCSApp

kondopog2005 пишет:

Эту форму можно редактировать отдельно (добавлять новые кнопки, лейблы, свойства и т.п. через редактор форм)?

В редакторе форм ввода отдельно редактировать нельзя - её можно помещать на форму ввода целиком и с помощью интерфейса ICustomizedModule можно скрывать отдельные кнопки и  помещать свои вызовы макросов. Лейблы и свойства добавить нельзя.
В общем случае любой модуль TechnologiCS, который наследует интерфейс IGModule, можно помещать на форму ввода.

kondopog2005 пишет:

Это следует понимать  так:
Можно добавить на панель инструментов "кнопку" с назначенным макросом\меню макросов,
а не как раньше  (добавить макрос со значком в общее меню "Макросы" на панели инструментов) ?

Следует понимать так: макросы со значками, помещённые в общее меню "Макросы", можно  помещать на панель инструментов. То есть сначала создаём макрос, потом можно для определённого интерфейса пользователя сделать видиммым этот макрос (или меню макросов) на панель инструментов, при этом этот макрос будет видим и в общем меню макросов.

Re: TCSApp

Описание классов в TCSAPIHelp.chm и ApiExplorer немного различны, такое впечатление что некоторые изменения не учтены в APIHelp.

Например хотелось бы разъяснения в следующем вопросе:

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

Select Case VID
            Case "Наряд-заказ на изготовление кальки"
                  INode=72
                   
            Case "Наряд-заказ на внесение в электронный архив"
                  INode=71
                  
            Case "Извещение об изменении"
                 INode=70
                 
           Case Else
              Call TCSApp.ShowErrorMessage("Данный тип документа не поддерживается")
              Exit Sub
End Select

Set Arch = TCSApp.Archive
Set pp = Arch.DbTree.DbNodeByNodeId(INode)

pp.Selected=True

Но возникли ошибки!
Для "архива" функция DbNodeByNodeId выдает ошибку ”Object no longer valid”,
хотя для "Номенклатуры" работает:

Const IdDOC = 19                      'Идентификатор справочника "Документация" 

Nmks.DbTree.RootNodes.Item(0).Selected = True
RootNodeId = Nmks.DbTree.Selected.NodeId

Set Nmks = TCSApp.Nomenclatures(IdDOC)
Set CurNode = Nmks.DbTree.DbNodeByNodeId(RootNodeId)

Приходится писать замену…

'Сначала проверка на существование (видимость) у пользователя Ветви Архива
    d=Arch.DbTree.RootNodes.item(0).count
    For j=0 To (d-1)
        If Arch.DbTree.RootNodes.item(0).item(j).Text="Отдел 24" Then
        x=j
        Exit For
        End If
    Next


'Затем выбор идентификатора ( он нужен и для других целей) и пошаговое определение ветви

Select Case VID
            Case "Наряд-заказ на изготовление кальки"
                  INode=72
                  Set pth=Arch.DbTree.RootNodes.item(0).item(x)
                  ggg=pth.count
                  Set pp=pth.item(4).item(1)
                                                                    
            Case "Наряд-заказ на внесение в электронный архив"
                  INode=71
                  Set pth=Arch.DbTree.RootNodes.item(0).item(x)
                  ggg=pth.count
                  Set pp=pth.item(4).item(0)
                  
            Case "Извещение об изменении"
                 INode=70
                 Set pth=Arch.DbTree.RootNodes.item(0).item(x)
                 ggg=pth.count
                 Set pp=pth.item(1)
                 
           Case Else
              Call TCSApp.ShowErrorMessage("Данный тип документа не поддерживается")
              Exit Sub

End Select


pp.Selected=True

В APIHelp  указано, что данная функция работает с DbTree независимо от родительского класса, в ApiExplorer  просмотреть DbTree  - нет возможности ни в одном классе

Re: TCSApp

ApiExplorer

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 рекомендуется установить последние сервис паки.

Re: TCSApp

Можно ли средствами VBS убрать запрос подтверждения действия у пользователя( задать ответ). Интересует действие разузлования в итоговой спецификации.

Re: TCSApp

Убрать запрос подтверждения на выполнение разузлования итоговой спецификации в текущей версии (6.3.0.0(19094)) нельзя.

Re: TCSApp

В 6.3 можно https://help.technologics.ru/6.3/TCSAPI … Spec_9.htm