Re: Вернуть параметры номенклатурной позиции. Возможно ?

Существует необходимость возврата параметров номенклатурной позиции возможно ли это средствами АПИ 

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Возможно. Спозиционируйтесь на нужную номенклатуру. Возьмите ее зависимый объект параметры (пока только через зависимый работает) (метод ChildObjects) и можете либо изменить значение, либо добавить новый параметр. Подробее уже можно увидеть в примерчике, что лежит в дистрибутиве.

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Gordon писал(а):
Возможно. Спозиционируйтесь на нужную номенклатуру. Возьмите ее зависимый объект параметры (пока только через зависимый работает) (метод ChildObjects) и можете либо изменить значение, либо добавить новый параметр. Подробее уже можно увидеть в примерчике, что лежит в дистрибутиве.


Для позиционирования на справочник едениц измерения 

App.Mesuriments 
а где узнать внутренние названия других справочников ?
Приведенный пример на Делфи не подходит так как его просто нет и  необходимо написать на ВБА

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Вот конкретный примерчик создания параметра номенклатуры.

Перед использованием, неплохо ознакомится с https://forum.technologics.ru/viewtopic.php?id=59, а точнее об особенностях работы с зависимыми объектами через АПИ.


Public Sub FirstStep()

Dim TCS As CSDN.TCS
Dim App As CSDN.Tcs_Application

'Создадим объект ТКС АПИ

Set TCS = CreateObject("CSDN.TCS")

'Создадим экземляр приложения (сеанс). Внимание ! создание повторного сеанса не допустимо!


Set App = TCS.Login 'вызывает стандартное окно аутентификации пользователя

'Set App = TCS.LoginEx("Администратор", "0")  ' Если вы сами пишите диалог ввода пользователя и пароля или просто его знаете

'Set App = TCS.LoginCurrent ' если вы хотите использовать сеанс уже запущенного ТКС


If App.NmkClasses.RunModuleForSelect("Выберите класс номенклатуры", False) <> 0 Then
 
  Dim Nmks As CSDN.Nomenclatures
  
  Set Nmks = App.Nomenclatures(App.NmkClasses.Properties("ID").AsInteger)
  
  'Реально если вы знаете ИД или обозначение номенклатуры то вместо выбора будет код
  'If Nmks.Locate("NOTE", "Мое обозначение", 0) Then
  'If Nmks.Locate("ID", Мой_Идентификатор, 0) Then
  'Правда на старте вашей программы желательно добавить такой код, чтобы получить всю номенклатуру, а не текущей ветки
  'App.ShowOneTreeNodeData = False
  
   On Error GoTo L1:
   
    If Nmks.RunModuleForSelect("Выберите номенклатуру, параметры которой вы собираетесь редактировать!", False) Then
    Dim Childs As CSDN.IChildModules
    Dim NmkPars As CSDN.ParameterValues
    
    
    'получим объект зависимые объекты
    Set Childs = Nmks.ChildModules
    'получим зависимый объект параметры номенклатуры
    'Особенности работы через зависимые объекты смотри в теме
&nbsp; &nbsp; '<a class="linkification-ext" href="https://forum.technologics.ru/viewtopic.php?id=59" title="Linkification: https://forum.technologics.ru/viewtopic.php?id=59">https://forum.technologics.ru/viewtopic.php?id=59</a>
&nbsp; &nbsp; 
&nbsp; &nbsp; Set NmkPars = Childs.ModuleByName("NmkParameters").Value
&nbsp; &nbsp; 
&nbsp; &nbsp; 'Добавим значение параметра с кодом "TCS_T_IZG" значение "10"
&nbsp; &nbsp; If Not NmkPars.SetParameterValueByParCode("TCS_T_IZG", 10, 0, True) Then MsgBox "Нет прав?"
&nbsp; &nbsp; 
&nbsp; &nbsp; If NmkPars.ShowModal("Убедитесь что отработала") Then
&nbsp; &nbsp; End If
&nbsp; &nbsp; 
&nbsp; &nbsp; End If
&nbsp; 
L1:
&nbsp; Set NmkPars = Nothing
&nbsp; Set Childs = Nothing
&nbsp; Set Nmks = Nothing

End If


'освободим объект приложения и завершим работу

Set App = Nothing
Set TCS = Nothing


End Sub

Re: Вернуть параметры номенклатурной позиции. Возможно ?

все работает )))

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Записать параметр так:

If Not NmkPars.SetParameterValueByParCode("TCS_T_IZG", 10, 0, True) Then MsgBox "Нет прав?"


А как считать параметр?

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Ну гляньте функции указанного интерфейса, или свойства просмотрите (программа исследования объектов ТКС - выкладывалась на форуме)

Лучше всего -  CurrentParameterValue и CurrentParameterNmk

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Процедура для записи параметра номенклатуры:

Private Sub SavePar( _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Spravochnik As String, _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IDnomenklaturi As Double, _ 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KodPar As String, _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TextPar As String)
On Error GoTo err:
If App.NmkClasses.Locate("NOTE", Spravochnik, 0) Then
&nbsp; &nbsp; Set Nmks = App.Nomenclatures(App.NmkClasses.Properties("ID").AsInteger)
&nbsp; &nbsp; If Nmks.Locate("ID", IDnomenklaturi, 0) Then
&nbsp; &nbsp; &nbsp; &nbsp; Set Childs = Nmks.ChildModules
&nbsp; &nbsp; &nbsp; &nbsp; Set NmkPars = Childs.ModuleByName("NmkParameters").Value
&nbsp; &nbsp; &nbsp; &nbsp; If Not NmkPars.SetParameterValueByParCode(KodPar, TextPar, 0, True) Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MsgBox "Параметры номенклатуры не переданны в виду отсутствия прав.", _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vbCritical + vbSystemModal, _
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "Запрет доступа"
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If
&nbsp; &nbsp; &nbsp; &nbsp; End If
&nbsp; &nbsp; End If
Exit Sub
err:
Set NmkPars = Nothing
Set Childs = Nothing
MsgBox "Ошибка записи параметра в API", vbCritical + vbSystemModal, "Критическая ошибка"
End Sub

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Gordon писал(а):
Ну гляньте функции указанного интерфейса, или свойства просмотрите


Глянул и ничего не выглядел: в тексте программы нет ремарок, в файле справки по API тоже пусто.

Хотелось бы получить ответ в виде процедуры (см. предыдущее сообщение)

Re: Вернуть параметры номенклатурной позиции. Возможно ?

В VBA есть Objects Browser, в котором расписаны все классы, их свойства и методы, и наши подсказки к ним.

Комментарии... Учтем, будем подробнее пример описывать (в принципе многое похоже на АДО, кто работал поймет).

Пример вроде правильно написан. Работает? Если нужны комментарии к нему - добавим.

Re: Вернуть параметры номенклатурной позиции. Возможно ?

CurrentParameterValue покажет мне значение параметра, на котором стоит курсор.

Как передвинуть курсор на параметр с заданным кодом параметра?

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Молчанье было ему ответом, поэтому отвечаю сам себе.

Может кому пригодиться...
Процедура считывания параметра номенклатуры:
[ul]
Spravochnik - наименование справочника номенклатуры
IDnomenklaturi - идентификатор номенклатуры
KodPar - уникальный код параметра номенклатуры
TextPar - объект на форму, куда возвращается текстовое значение параметра номенклатуры, например ComboBox или TextBox[/ul]

Private Sub LoadPar(Spravochnik As String, IDnomenklaturi As Double, KodPar As String, TextPar As Object)
On Error GoTo err:
If App.NmkClasses.Locate("NOTE", Spravochnik, 0) Then
&nbsp; &nbsp; Set Nmks = App.Nomenclatures(App.NmkClasses.Properties("ID").AsInteger)
&nbsp; &nbsp; If Nmks.Locate("ID", IDnomenklaturi, 0) Then
&nbsp; &nbsp; &nbsp; &nbsp; Set Childs = Nmks.ChildModules
&nbsp; &nbsp; &nbsp; &nbsp; Set NmkPars = Childs.ModuleByName("NmkParameters").Value
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NmkPars.First
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; While Not NmkPars.EOF
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If NmkPars.Properties(12).DisplayText = KodPar Then TextPar.Text = NmkPars.CurrentParameterValue
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NmkPars.Next
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Wend
&nbsp; &nbsp; &nbsp; &nbsp; End If
&nbsp; &nbsp; End If
Set NmkPars = Nothing
Set Childs = Nothing
Exit Sub
err:
Set NmkPars = Nothing
Set Childs = Nothing
MsgBox "Ошибка чтения параметра через API интерфейс.", vbCritical + vbSystemModal, "Критическая ошибка"
End Sub

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Так так бы и и спросили - как прочитать параметры! В новой версии еще проще будет

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Я спрашивал 15.12.2003:

Сергей Девятериков писал(а):
Записать параметр так:

If Not NmkPars.SetParameterValueByParCode("TCS_T_IZG", 10, 0, True) Then MsgBox "Нет прав?"


А как считать параметр?

Re: Вернуть параметры номенклатурной позиции. Возможно ?

Понял. Это в продолжении. Вообще програмка исследования объектов должна тут помочь. Она все свойства объекта выдает. Ну да ладно, теперь понятно.