Тема: Связать 2 номенклатуры

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

Подскажите как макросом выполнить связь (через CreateNew режима NMKLinks) не получается, пишет, что номенклатура не принадлежит данному классу!

Re: Связать 2 номенклатуры

Версию TechnologiCS скажите пожалуйста. Есть проблемка похоже с NMKLinks.
Есть свойство API_NmkUserLinks   - оно предназначено для произвольных связей через АПИ (но его нет на экране пользователя).

(изменено: kaff, 19 января 2010 13:51:11)

Re: Связать 2 номенклатуры

Олег Зырянов пишет:

TechnologiCS 5.1.0

Если можно код набросать...

Re: Связать 2 номенклатуры

Вот примерчик. Но еще раз обращу внимание это именно связанная номенклатура для использования в АПИ, в самом TechnologiCS ее не видно, а в АПИ можно использовать как вам требуется.

Ошибку со связанной номенклатурой постараемся поправить в ближайшем сервис паке на 5.7

Sub FormMacro_Test(TCSActiveModule)'Тест связанных через АПИ позиций
  Const MY_FLG = 12345 'Мой флаг
  Set ApiLinks = TCSActiveModule.Properties("API_NmkUserLinks").AsIDispatch
  If Not ApiLinks Is Nothing Then
     If TCSApp.NmkClasses.ShowModal( "Выберите класс номенклатуры, которую хотите привязать" )>0 Then 
       ClassId = TCSApp.NmkClasses.Properties("ID").AsInteger
       If TCSApp.Nomenclatures( ClassId ).ShowModal( "Выберите номенклатуру котороую хотите привязать" )>0 Then 
          Dim KeyProperties(2)
          Dim KeyValues(2)
          KeyProperties(0) = "USER_FLAG"
          KeyProperties(1) = "NMK_ID"
          KeyProperties(2) = "NMK_ATTACH_ID"
          KeyValues(0) = MY_FLG
          KeyValues(1) = TCSApp.Nomenclatures( ClassId ).Properties("ID").AsInteger
          KeyValues(2) = ClassId
          If Not ApiLinks.Locate( KeyProperties, KeyValues, 0 ) Then 
            Call ApiLinks.CancelChanges
            Call ApiLinks.CreateNew
            For i=0 To 2 
              ApiLinks.Properties( KeyProperties(i) ).Value = KeyValues(i)
            Next          
            ApiLinks.Properties( "REM" ).AsString = "Связанная номенклатура для АПИ"
            Call ApiLinks.SaveChanges                      
          End If
          I = ApiLinks.ShowModal( "Связнные номенклатурные позиции (доступны только через АПИ)" )
       End If
     End If
  End If
End Sub