Re: Помогите тупому

Пытаюсь создать библиотеку на Delphi, для дальнейшего использования при создании скриптов. 

Например, необходимо загрузить данные TCSActiveModule в собственную экранную форму, а результаты расчета передать обратно. Это необходимо при создании уникального обозначения извещений в документообороте, детали и сборки в номенклатурном справочнике согласно установленных правил на предприятии.



Заранее благодарен.

Re: Помогите тупому

А в чем именно проблема? Создаете Актив Икс, делаете у него какую нибудь функцию и вызываете. TCSActiveModule скорей всего как вариант лучше передать(хотя там есть над чем подумать). На VB попроще конечно это сделать, он сам с типами разбирается.

У нас в скрипте  CSDN_VIS_Library фукнция IntoExcel - пример на VBA.

Re: Помогите тупому

Спасибо, разобрался.
Можно ли в DLL выполнение следующих команд: 
    TCS := CreateOLEObject('CSDN.TCS' ) as ITCS;
    TCSApp := TCS.LoginCurrent;
При написании скриптов, как получить данные, со всеми вложениями начиная с текущей папки в модуле документооборота.

Re: Помогите тупому

Если код 

TCS := CreateOLEObject('CSDN.TCS' ) as ITCS; 
TCSApp := TCS.LoginCurrent; 

выполнять внутри ДЛЛ которая вызвается из наших скриптов, то код может и выполнится, но ничего хорошего не получится это точно.

Если где то для ваших собственных нужд - то без проблем.


как получить данные, со всеми вложениями начиная с...


Стандартный способ выглядит приблизительно так (возможны нюансы на сложных формах):

Если TCSApp.ShowOneTreeNodeData = True https://forum.technologics.ru/docs-hz/T … ata_13.htm

1. Зачитываете все дерево (пример здесь https://forum.technologics.ru/viewtopic.php?id=201 FullReadTree). Это скорее особенность наша, но пока придется ее учитывать
2. Пробегаетесь по всем веткам дерева начиная от текущей (свойства COunt, Item у интерфейса IDBNode https://forum.technologics.ru/docs-hz/T … DbNode.htm ). Делаете узел активным (свойство Selected у IDBNode ) и читаете записи в цикле First - > While Not Eof -> Next;

Если TCSApp.ShowOneTreeNodeData = False

1. читаете записи в цикле First - > While Not Eof -> Next;

Если вы сами устанавливаете TCSApp.ShowOneTreeNodeData то необходимо сделать Refresh активному модулю.

please-change-link

Re: Помогите тупому

Как по уникальному коду параметра получить  список его значений.

Re: Помогите тупому

Только через зависимые объекты (ChildModules).

Re: Помогите тупому

Set Parameters = TCSActiveModule.Properties("Parameters").AsIDispatch
    If (Not Parameters Is Nothing) Then 
        If TCSApp.Parameters.locate("PAR_CODE","TCS_SKL_SH",0) Then
        Set k  = TCSApp.Parameters.Properties("ParListValues").AsIDispatch
        End If
         If  k.RunModuleForSelect("Выберите", False) Then
         End If

Re: Помогите тупому

Функцией 
     Nmk := TCS_App.SingleNmkFromNMkNote[s];
нашел номенклатуру, а как определить какому классу данная номенклатура относится.
За ранее благодарен.

Re: Помогите тупому

эх...в 4.0.3(5088) никак. Просмотрели. В следующей все ок.

Re: Помогите тупому

Хочу создать версию документа, так чтобы:
1.  не показывал мастер диалога
2.  создать на основе существующей
3. скопировать способ обработки
4. скопировать список атрибутов из исходной версии
5. скопировать значение атрибутов...
6. скопировать файловый состав
7. скопировать связи.
Использую команду CreateDocVer, а Flags - значение из tagEnumCreateDocVerParams как я понимаю должен иметь одно значение.

Re: Помогите тупому

Создал переход 
GetRouting =TCSActiveModule.Properties("ROUTING_ID").Value
  GetVerState=TCSActiveModule.Properties("VERSTATE_ID").Value
  Set SetWORKFLOW = TCSActiveModule.Properties("WORKFLOW_ITEMS").AsIDispatch
  Set ActualWorkFlowItems = TCSActiveModule.Properties( "ACTUAL_WORKFLOW_ITEMS" ).AsIDispatch
  If Not ActualWorkFlowItems.Locate("NAME","Переход для API до",0) Then   
      SetWORKFLOW.CreateNew
      SetWORKFLOW.Properties("NAME").Value           = "Переход для API до"
      SetWORKFLOW.Properties("VERSTATE_BEFORE").Value= GetVerState
      SetWORKFLOW.Properties("VERSTATE_AFTER").Value = TCSActiveModule.Properties("START_STATE_ID").Value
      SetWORKFLOW.Properties("OFFICER_ID").Value     = 1015
      SetWORKFLOW.SaveChanges
      SetWORKFLOW.Refresh
      TCSActiveModule.Refresh
  End If
Выполнил
    If  ActualWorkFlowItems.Locate("NAME","Переход для API до",0) Then
    Call ActualWorkFlowItems.Execute(True,"") 
   End If
А как созданный переход удалить. Пишу
   If  SetWORKFLOW.Locate("NAME","Переход для API до",0) Then
     SetWORKFLOW.DeleteRecord True
    End If
В чем мая ошибка?

Re: Помогите тупому

Рассмотрим функцию CreateDocVer, функцию для создания новой версии документа:


Function CreateDocVer(Flags As Long, VerName As String, SourceVerID As Long, DlgCaption As String) As SingleDoc

Здесь
Flags - это комбинация флажков из EnumCreateDocVerParams
VerName - имя новой версии
SourceVerID - идентификатор версии, на базе которой создается новая версия
DlgCaption - заголовок мастера создания новой версии

Что означают флажки EnumCreateDocVerParams?
cdvBaseOnSourceDocVersion - cоздать новую версию документа на основе существующей, ее идентификатор передается через SourceVerID
cdvCopySourceDocLinks - скопировать связи (применяемость) исходной версии документа
cdvCopySourceFiles - скопировать файловый состав из исходной версии документа
cdvCopySourceLists - cкопировать листы из исходной версии документа
cdvCopySourceParamList - скопировать список атрибутов из исходной версии документа
cdvCopySourceParamValues - cкопировать значения атрибутов исходной версии документа
cdvCopySourceSketches - cкопировать эскизы из исходной версии документа
cdvCopySourceState - cкопировать текущий статус исходной версии документа
cdvCopySourceWorkFlow - cкопировать способ обработки из исходной версии документа
cdvHideFilesDialog - не показывать диалог добавления файлов
cdvMakeActive - сделать новую версию документа активной
cdvShowDialog - показать диалог мастера создания версии документа
cdvUseDlgCaption - установить свой заголовок мастеру создания версии документа, переданный через параметр DlgCaption


Хочу создать версию документа, так чтобы:
1. не показывал мастер диалога
- задаем cdvHideFilesDialog
2. создать на основе существующей - задаем cdvBaseOnSourceDocVersion и передаем идентификатор исходной версии через параметр SourceVerID
3. скопировать способ обработки - задаем cdvCopySourceWorkFlow
4. скопировать список атрибутов из исходной версии - задаем cdvCopySourceParamList
5. скопировать значение атрибутов... - задаем cdvCopySourceParamValues
6. скопировать файловый состав - задаем cdvCopySourceFiles
7. скопировать связи. - задаем cdvCopySourceDocLinks


Использую команду CreateDocVer, а Flags - значение из tagEnumCreateDocVerParams как я понимаю должен иметь одно значение.
EnumXXX - это перечислитель значений, в большинстве случаев из него можно - и нужно! - брать комбинацию нескольких значений.

Таким образом, ваш код будет выглядеть, например, так:

Dim Flags as Long
Dim Doc as SingleDoc

Flags = _
    cdvHideFilesDialog + _
    cdvBaseOnSourceDocVersion + _
    cdvCopySourceWorkFlow + _
    cdvCopySourceParamList + _
    cdvCopySourceParamValues + _
    cdvCopySourceFiles + _
    cdvCopySourceDocLinks

Set Doc = xxx.CreateDocVer(Flags, NewVerName, SourceVerID, "")

Re: Помогите тупому

А как созданный переход удалить. Пишу
If SetWORKFLOW.Locate("NAME","Переход для API до",0) Then
SetWORKFLOW.DeleteRecord True
End If
В чем мая ошибка?

Выполненные переходы удалить нельзя, а для остальных переходов этот код работать будет.

Re: Помогите тупому

Administrator писал(а):
Выполненные переходы удалить нельзя, а для остальных переходов этот код работать будет.

Выполненный да, а созданный?

Re: Помогите тупому

а созданный?
Созданный можно. Только проверьте, что вы действительно на него спозиционированы.

Re: Помогите тупому

Переход - это что имелось в виду?

Re: Помогите тупому

Олег писал(а):

Олег писал(а):
Склады.
Дело в том что, если я работаю через интерфейс TCS учетный документ
создается.
Если работаю через API, выдается сообщение " в профиле отсутствует цех"
?

Решение
                 Module.CreateNew;
                 Module.Properties[1].Value := DocTypeId ;
                 Module.Properties[5].AsString := NDokum;
                 Module.Properties[6].AsString := DateTostr(DATA1);
                 Module.Properties[7].AsString := Dokum;
                 Module.Properties[9].Value:= CehId;
                 Module.Properties[10].Value := CehId1;
                 Module.Properties[11].AsString := 'Данные из "Паруса"';
                 Module.SaveChanges;
                 Module.Refresh;


Выдает окно сообщений "профиль не выбран" при создании объекта

Set Balance = App2.Inventory.BalanceDocuments

Вываливается с сообщением "модуль данных не допускает редактирования"

    Balance.CreateNew
    Balance.Properties("BALANCEDOCUMENTTYPE_ID").Value = 1
    Balance.Properties("NUMBER").AsString = CStr(y)
    Balance.Properties("DATE").AsString = CStr(Date)
    Balance.Properties("NAME").AsString = "Autocreated balance document"
    Balance.Properties("PLANT_DEPATMENT_ID").Value = DepoID
    Balance.Properties("CLIENT_ID").Value = 1
    Balance.Properties("REM").AsString = "Imported"
    Balance.SaveChanges
    Balance.Refresh

в случае ипользования

Balance.AddBalanceDocument(CStr(y), Date, "Autocreated balance document", "Comments", 1, DepoID, 1, 0, "", -1)

всплывает окошко "такого цеха в профиле нет"

Товарищи разработчики и опытные пользователи, подскажите же как создавать учетные документы ?

Re: Помогите тупому

я в таком случае выполняю

Balance.ShowModal( "Настройте профиль" )

а затем заново пытаюсь создать документ

Re: Помогите тупому

Добрый день!

Режим "Учетные карточки".
Как через учетную карточку номенклатуры определить "Идентификатор" склада.

Спасибо.

Re: Помогите тупому

У меня при попытке использования Учетных документов появляется ошибка "Member not found". Как я понял это что то из-за пофиля? Пытаюсь так:

BalenceDoc:=TCSApp.Inventory.BalanceDocuments;
BalenceDoc.ShowModal('Проверка');
...

При работе из TechnologiCS все работает, а при работе из моего приложения, что то не получается...
Есть ли какие нибудь API функции у учетных документов для настройки профиля?

Re: Помогите тупому

Есть ли какие нибудь API функции у учетных документов для настройки профиля?

Функций АПИ нет, на практике делается так, как сказал Серегей Девятериков (см. выше на три поста).
У Вас, скорее всего, причина ошибки в другом  :?

"Member not found"

  :?  может пронаследовали что-то не оттуда?
Кстати, .ShowModal должна возвращать значение (по крайне мере для VB требуется), т.е. надо писать так

 Id = BalenceDoc.ShowModal('Проверка') 

Re: Помогите тупому

Добрый день!

Режим "Учетные карточки".
Как через учетную карточку номенклатуры определить "Идентификатор" склада.

Спасибо.


Олег, создайте зависимый "движение по учетной карточке", там есть идетификатор склада

Re: Помогите тупому

Олег[/b], создайте зависимый "движение по учетной карточке", там есть идетификатор склада


Пробывал, идетификатор склада = Null.

Re: Помогите тупому

Ну а вообще, движение-то есть? может, если Null, то сделать ShowModal и убедиться есть ли движении вообще. Может там фильтр по датам стоит так что движение в период просто не попало.

Re: Помогите тупому

Бобов писал(а):
Ну а вообще, движение-то есть? может, если Null, то сделать ShowModal и убедиться есть ли движении вообще. Может там фильтр по датам стоит так что движение в период просто не попало.

Спасибо, движений нет.
А другого способа нет?

С уважением, Олег.