Тема: Как связать документ из архива с заказом в Номенклатуре

Здравствуйте. Недавно начал работать с технолоджиксом и нужна помощь. Мне нужно создать на основе существующего заказа дополнительный и добавить к нему часть документов из-основного заказа. Никак не получается связать в макросе документ из архива с заказом. Пробовал разные варианты, Через "NMkDocuments", через Links у документа что бы добавить связь. В разных вариантах в основном код работает без появления ошибок но документы не связываются с заказом. Пожалуйста подскажите как это решить, желательно с примерами кода. Ниже код макроса где возникают проблемы.

'###############################################################################
Sub FormMacro_ADD_KONTR_UPAC(TCSActiveModule) 'Добавление заказа на упаковку
iPos1 = InStr(1, TCSActiveModule.p_NOTE.AsSafeString, "/")
iPos2 = InStr(iPos1+1, TCSActiveModule.p_NOTE.AsSafeString, "/")
iPos3 = InStr(1, TCSActiveModule.p_NOTE.AsSafeString, "-")
iPos4 = InStr(1, TCSActiveModule.p_NOTE.AsSafeString, ".")
'----------------------------------------------------------------------------
Str1 = Mid(TCSActiveModule.p_NOTE.AsSafeString, 1, iPos1-1)
Str2 = Mid(TCSActiveModule.p_NOTE.AsSafeString, iPos1)
Str = Str1 & "-УП_%" & Str2
Set query = TCSApp.UserRecordSet( "ZAKAZ_SOZD_Z", False, "PVALUE", Str)
Call Admin.Count_Row(query, Row_count)
Kol = Row_count + 1
NOTE = Str1 & "-УП_" & Kol & Str2
'--------------------------------------------------------------
Str3 = Mid(TCSActiveModule.p_NOTE.AsSafeString, iPos1+1, iPos3 -iPos1-1)
Str4 = Mid(TCSActiveModule.p_NOTE.AsSafeString, iPos2+1, iPos4 -iPos2-1)
CODE = Str1 & "-УП_" & Kol & "." & Str3 & "." & Str4
'---------------------------------------------------
'  'Савенков Н.В. 11.04.2024
ZakazOsn = TCSActiveModule.Properties("ID").Value
Set Zakaz = TCSActiveModule
'Node = TCSActiveModule.p_NODE_ID.Value
'  'Савенков Н.В. 11.04.2024


Call TCSActiveModule.CancelChanges
Call TCSActiveModule.CreateNew
  TCSActiveModule.Properties("NOTE").Value = NOTE
  TCSActiveModule.Properties("NMK_CODE").Value = CODE
  TCSActiveModule.Properties("NODE_ID").Value = TCSActiveModule.p_NODE_ID.Value
  TCSActiveModule.Properties("MESUR_ID").Value = 2

On Error Resume Next
Call TCSActiveModule.SaveChanges
Call TCSActiveModule.CancelChanges

Set ZakazNew = TheApp.SingleNmkFromId(TCSActiveModule.Properties("ID").Value)


Set Act = TCSActiveModule.ActionList.ActionByName("EditAction")
If  Not Act Is Nothing Then Act.Execute
'-----------------------------------------------------------------
Set Spec_vers = TCSApp.NmkSpecificationVersions(TCSActiveModule.Properties("ID").AsInteger)
              Spec_vers.UserModuleName = Spec_vers.UniqueUserModuleName
              IdNewVer = Spec_vers.CreateNewVersion("изм. 00")
              Spec_vers.Refresh
              TCSApp.DeleteModuleByUserModuleName (Spec_vers.UserModuleName)
             Set Spec_vers = Nothing
TCSActiveModule.Refresh
'  'Савенков Н.В. 11.04.2024

  Set Zakaz = TheApp.SingleNmkFromId(ZakazOsn)

  Set Param = Admin.UniqueModule(Zakaz.ChildModules.ModuleByName("NmkParameters").AsIDispatch)
  Set ParamNew = ZakazNew.Properties("Parameters").AsIDispatch

  Call Param.First
  While Not Param.EOF
     If ParamNew.SetParameterValueByParCode(Param.Properties("PAR_CODE").AsSafeString,Param.Properties("NMK_PAR_VALUE").AsSafeString , 0, True) Then FLAGPRAV = "Добавлен"
     Call Param.Next
  Wend

  'Часть кода ниже не работает как нужно ---------------------------------------------------------------------------------
  Set Param = Nothing
  Set ParamNew = Nothing
  Set Docs = Zakaz.ChildModules.ModuleByName("NMkDocuments").AsIDispatch '("NMkDocuments").AsIDispatch
  Set DocsNew = ZakazNew.Properties("NMkDocuments").AsIDispatch '.AsIDispatch

  Dim NMK

  Call Docs.First
  While Not Docs.EOF
    If Docs.Properties("PRJTYPE_NOTE").AsSafeString = "Контракт" _
      Or Docs.Properties("PRJTYPE_NOTE").AsSafeString = "Договор с Заказчиком"  Then
        'Савенков Н.В. 26.03.2024
        Set doc = theApp.SingleDoc(CSDN_Const.dspSearchDocByDocID, Docs.Properties("PRJ_ID").AsSafeInteger)

        Set NMK = doc.p_PrjVerNmk.AsIDispatch
        f = NMK.Properties("NMK_ID").Value
        c = NMK.Properties("NMK_CLASSIF_TYPE_ID").Value

        Call NMK.CancelChanges
        Call NMK.CreateNew
        NMK.Properties("NMK_CLASSIF_TYPE_ID").Value = ZakazNew.Properties("NMK_CLASSIF_TYPE_REF").Value
        NMK.Properties("NMK_ID").Value = ZakazNew.Properties("NMK_ID").Value

        Call NMK.SaveChanges
        'Непонятно как работает --- Call Arhiv_library.Creat_Link(doc, ZakazNew.Properties("ID").Value, doc.Properties("COMMENT").Value, Docs.Properties("VER_ID").Value)

        Call Docs.Next
    End If
  Wend
  'Савенков Н.В. 11.04.2024
' ---------------------------------------------------------------------------------
End Sub

Re: Как связать документ из архива с заказом в Номенклатуре

Давайте уточним версию для начала.
Код немножко сумбурно написано конечно, некоторые возможно было бы сделать намного проще, но тут может какие то у вас нюансы есть нам неизвестные.
Ну и требуется все таки для начали описать действия в самом TechnologiCS.

Заказ это видимо номенклатурный справочник у вас?
Для работы с документами номенклатуры есть отдельный интерфейс https://help.technologics.ru/7.9/TCSAPI … uments.htm.
В нем есть метод https://help.technologics.ru/7.9/TCSAPI … ent_13.htm

Собственно это все что нужно. Единственно перед созданием связи возможно стоит проверить нет ли ее уже, хотя в вашей задаче может это и лишнее.

Спасибо сказали: Назар1

Re: Как связать документ из архива с заказом в Номенклатуре

Спасибо Это помогло решить проблему, но очень странно то что для того что бы этот метод заработал пришлось использовать IF по другому документы не добавлялись или не отображались в новом заказе.

Re: Как связать документ из архива с заказом в Номенклатуре

https://help.technologics.ru/7.9/TCSAPI … ent_13.htm. Это свойство. Поэтому так да. Либо результат присваивать