Метод UpLinkAttrValue. Как правильно пользоваться?

Автор danver, 14.10.12, 09:23:17

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

danver

Коллеги, здравствуйте!

Необходимо программным способом проставить атрибут связи "Позиция" у объекта "Элемент маршрута", входящего в объект "Маршрут" по связи "Состоит из ...". Таблица с требуемыми объектами в базе (объекты.jpg)
таблица связей их же (связи.jpg)

Использую метод: RunMethod('UpLinkAttrValue',[21900,'Позиция',2,0,false,inReturnCode,stErrorMessage]);

Лоцман пишет, что связь между объектами не существует. Переменные inReturnCode и stErrorMessage возвращаются пустые.
Где я ошибся, подскажите, пожалуйста?

YorikER

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

Chaa

Описание метода следующее:
HResult UpLinkAttrValue(
BSTR stParentType,           // не используется
BSTR stParentProduct,        // не используется
BSTR stParentVersion,        // не используется
BSTR stChildType,            // не используется
BSTR stChildProduct,         // не используется
BSTR stChildVersion,         // не используется
long inIdLink,               // идентификатор связи
BSTR stAttrName,             // название атрибута
Variant vaAttrValue,         // значение атрибута
BSTR stIdUnit,               // уникальный идентификатор единицы измерения
WordBool boDel,              // признак удаления атрибута
BSTR stLinkType,             // не используется
Variant * inReturnCode,      // код возврата
Variant * stErrorMessage,    // сообщение об ошибке
);

Поэтому вызов должен выглядеть примерно так:
RunMethod('UpLinkAttrValue', ['', '', '', '', '', '', 21900, 'Позиция', 2, 0, False, '']);
И в работу нужно брать родительский объект, у вас это Маршрут.

danver

В работу я маршрут брал, а вот фразу "// не используется" понял не правильно. Спасибо!

KAV

Цитата: Chaa от 15.10.12, 11:42:52Описание метода следующее:
HResult UpLinkAttrValue(
BSTR stParentType,           // не используется
BSTR stParentProduct,        // не используется
BSTR stParentVersion,        // не используется
BSTR stChildType,            // не используется
BSTR stChildProduct,         // не используется
BSTR stChildVersion,         // не используется
long inIdLink,               // идентификатор связи
BSTR stAttrName,             // название атрибута
Variant vaAttrValue,         // значение атрибута
BSTR stIdUnit,               // уникальный идентификатор единицы измерения
WordBool boDel,              // признак удаления атрибута
BSTR stLinkType,             // не используется
Variant * inReturnCode,      // код возврата
Variant * stErrorMessage,    // сообщение об ошибке
);
Поэтому вызов должен выглядеть примерно так:
RunMethod('UpLinkAttrValue', ['', '', '', '', '', '', 21900, 'Позиция', 2, 0, False, '']);И в работу нужно брать родительский объект, у вас это Маршрут.

А где найти уникальный идентификатор единицы измерения для атрибута "Количество"?

Chaa

Цитата: KAV от 27.04.23, 16:43:23А где найти уникальный идентификатор единицы измерения для атрибута "Количество"?
GetMeasureListForLink, затем GetMUnitList.

KAV

Цитата: Chaa от 28.04.23, 06:39:50GetMeasureListForLink

ds_1.DATA = .RunMethod("GetMeasureListForLink", {"Сборочная единица", "Деталь", "Состоит из ..."})
Form1.TextBox1.Text = ds_1.FieldValue("_NAME")

Ничего не вернул (В Form1.TextBox1.Text пусто).

Chaa

Возможно, неправильно вас понял.

Есть единицы измерения кол-ва у количественной связи, и есть единицы измерения у атрибута "Количество".

Возможно вам нужен: RunMethod('GetInfoAboutAttribute', ['Количество', 2]);

sb_det_qty.png

KAV

ds_1.DATA = .RunMethod("GetMeasureListForLink", {"Сборочная единица", "Материал по КД", "Состоит из ..."})
ds_1.FieldValue("_NAME") - Возвращает "Безразмерные"
ID=ds_1.FieldValue("_ID_MEASURE") - тоже вернул
Но .RunMethod("GetMUnitList", {ID}) вернул пустоту

И вроде логично если смотреть по лоцману для деталей есть только величина "Не определено" и нет единиц измерения, а вот для материала по КД есть разные величины, но по умолчанию стоит "Безразмерные" и нет единиц измерения. То есть методы возвращают поля величин по умолчанию, а как найти остальные например для "материал по КД", у него есть величина "Длина" и ед. изм. "м"?
А вообще я хочу программно проставлять кол-во деталей, но для них нет величин кроме как "Не определено" и ID единиц измерения соответственно, поэтому не пойму что тогда передавать в метод "UpLinkAttrValue"

Chaa

Цитата: KAV от 28.04.23, 11:34:10поэтому не пойму что тогда передавать в метод "UpLinkAttrValue"
Пустую строку передавайте, будет без единицы измерения.

KAV

Цитата: Chaa от 28.04.23, 12:25:22Пустую строку передавайте, будет без единицы измерения.
Первоначально так и делал, не ставит количество.

KAV

Цитата: KAV от 28.04.23, 11:34:10То есть методы возвращают поля величин по умолчанию, а как найти остальные например для "материал по КД", у него есть величина "Длина" и ед. изм. "м"?
Не подскажите?


KAV

Из справки по методу "GetMeasureListForLink": "Возвращает список идентификаторов сущностей", а если сущностей несколько, как посмотреть значения полей для всех? Вместо ds_1.FieldValue что то другое?

KAV

Цитата: Chaa от 28.04.23, 10:55:02Возможно вам нужен: RunMethod('GetInfoAboutAttribute', ['Количество', 2]);

Вернул поле "name" со значением "время"

Совсем запутался!

Chaa

Цитата: KAV от 28.04.23, 12:39:03а если сущностей несколько, как посмотреть значения полей для всех?
ds.First();
while (!ds.Eof) {
  ...
  ds.Next();
}

KAV

Цитата: Chaa от 28.04.23, 10:55:02Есть единицы измерения кол-ва у количественной связи, и есть единицы измерения у атрибута "Количество".

В лоцман конфигураторе в списке атрибутов нет атрибута "Количество", так и должно быть?
В карточке изделия например детали показывает количество как атрибут связи.

Для других атрибутов связи "Позиция", "Примечание", "Зона" (которые есть в списке атрибутов в лоцман конфигураторе) получается проставить значение методом "UpLinkAttrValue", а вот "количество" не заполняется. Может как то связано с отсутствием его в списке всех атрибутов?

Chaa

Есть атрибут "Количество", который может быть у любого объекта, к которому его добавили в конфигураторе, он редактируется UpAttrValue или UpLinkAttrValue.

А еще есть количество у самой связи, включается галочкой "Количественная связь" или как-то так. Причем количества два - минимальное и максимальное. Редактируется это кол-во с помощью UpLink.

То есть у любой связи всегда есть количество в самой связи, вне зависимости от атрибутов этой связи.
+ Благодарностей: 1