Re: Вернуть параметры номенклатурной позиции. Возможно ?
Существует необходимость возврата параметров номенклатурной позиции возможно ли это средствами АПИ
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Вернуть параметры номенклатурной позиции. Возможно ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Существует необходимость возврата параметров номенклатурной позиции возможно ли это средствами АПИ
Возможно. Спозиционируйтесь на нужную номенклатуру. Возьмите ее зависимый объект параметры (пока только через зависимый работает) (метод ChildObjects) и можете либо изменить значение, либо добавить новый параметр. Подробее уже можно увидеть в примерчике, что лежит в дистрибутиве.
Gordon писал(а):
Возможно. Спозиционируйтесь на нужную номенклатуру. Возьмите ее зависимый объект параметры (пока только через зависимый работает) (метод ChildObjects) и можете либо изменить значение, либо добавить новый параметр. Подробее уже можно увидеть в примерчике, что лежит в дистрибутиве.
Для позиционирования на справочник едениц измерения
App.Mesuriments
а где узнать внутренние названия других справочников ?
Приведенный пример на Делфи не подходит так как его просто нет и необходимо написать на ВБА
Вот конкретный примерчик создания параметра номенклатуры.
Перед использованием, неплохо ознакомится с 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 'получим зависимый объект параметры номенклатуры 'Особенности работы через зависимые объекты смотри в теме '<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> Set NmkPars = Childs.ModuleByName("NmkParameters").Value 'Добавим значение параметра с кодом "TCS_T_IZG" значение "10" If Not NmkPars.SetParameterValueByParCode("TCS_T_IZG", 10, 0, True) Then MsgBox "Нет прав?" If NmkPars.ShowModal("Убедитесь что отработала") Then End If End If L1: Set NmkPars = Nothing Set Childs = Nothing Set Nmks = Nothing End If 'освободим объект приложения и завершим работу Set App = Nothing Set TCS = Nothing End Sub
все работает )))
Записать параметр так:
If Not NmkPars.SetParameterValueByParCode("TCS_T_IZG", 10, 0, True) Then MsgBox "Нет прав?"
А как считать параметр?
Ну гляньте функции указанного интерфейса, или свойства просмотрите (программа исследования объектов ТКС - выкладывалась на форуме)
Лучше всего - CurrentParameterValue и CurrentParameterNmk
Процедура для записи параметра номенклатуры:
Private Sub SavePar( _ Spravochnik As String, _ IDnomenklaturi As Double, _ KodPar As String, _ TextPar As String) On Error GoTo err: If App.NmkClasses.Locate("NOTE", Spravochnik, 0) Then Set Nmks = App.Nomenclatures(App.NmkClasses.Properties("ID").AsInteger) If Nmks.Locate("ID", IDnomenklaturi, 0) Then Set Childs = Nmks.ChildModules Set NmkPars = Childs.ModuleByName("NmkParameters").Value If Not NmkPars.SetParameterValueByParCode(KodPar, TextPar, 0, True) Then MsgBox "Параметры номенклатуры не переданны в виду отсутствия прав.", _ vbCritical + vbSystemModal, _ "Запрет доступа" End If End If End If Exit Sub err: Set NmkPars = Nothing Set Childs = Nothing MsgBox "Ошибка записи параметра в API", vbCritical + vbSystemModal, "Критическая ошибка" End Sub
Gordon писал(а):
Ну гляньте функции указанного интерфейса, или свойства просмотрите
Глянул и ничего не выглядел: в тексте программы нет ремарок, в файле справки по API тоже пусто.
Хотелось бы получить ответ в виде процедуры (см. предыдущее сообщение)
В VBA есть Objects Browser, в котором расписаны все классы, их свойства и методы, и наши подсказки к ним.
Комментарии... Учтем, будем подробнее пример описывать (в принципе многое похоже на АДО, кто работал поймет).
Пример вроде правильно написан. Работает? Если нужны комментарии к нему - добавим.
CurrentParameterValue покажет мне значение параметра, на котором стоит курсор.
Как передвинуть курсор на параметр с заданным кодом параметра?
Молчанье было ему ответом, поэтому отвечаю сам себе.
Может кому пригодиться...
Процедура считывания параметра номенклатуры:
[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 Set Nmks = App.Nomenclatures(App.NmkClasses.Properties("ID").AsInteger) If Nmks.Locate("ID", IDnomenklaturi, 0) Then Set Childs = Nmks.ChildModules Set NmkPars = Childs.ModuleByName("NmkParameters").Value NmkPars.First While Not NmkPars.EOF If NmkPars.Properties(12).DisplayText = KodPar Then TextPar.Text = NmkPars.CurrentParameterValue NmkPars.Next Wend End If End If Set NmkPars = Nothing Set Childs = Nothing Exit Sub err: Set NmkPars = Nothing Set Childs = Nothing MsgBox "Ошибка чтения параметра через API интерфейс.", vbCritical + vbSystemModal, "Критическая ошибка" End Sub
Так так бы и и спросили - как прочитать параметры! В новой версии еще проще будет
Я спрашивал 15.12.2003:
Сергей Девятериков писал(а):
Записать параметр так:If Not NmkPars.SetParameterValueByParCode("TCS_T_IZG", 10, 0, True) Then MsgBox "Нет прав?"
А как считать параметр?
Понял. Это в продолжении. Вообще програмка исследования объектов должна тут помочь. Она все свойства объекта выдает. Ну да ладно, теперь понятно.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Вернуть параметры номенклатурной позиции. Возможно ?