Функция GetProductFromBO

Автор viper_ava, 13.12.15, 21:30:59

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

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

viper_ava

Доброго времени суток!

При выполнении функции GetProductFromBO не возвращается в большинстве случаев наименование из справочника,
а именно:

Если передавать в качестве Location путь объекта справочника Стандарт. изделий - то все работает отлично и название объекта приходит.
А если я передаю путь объекта из справочника МиС - то функция возвращает NULL. Перепробовал много различных вариантов пути - но так и не понял зависимости - в одном случае все же получилось вернуть наименование, путь был вида 0;Material: ....... ; Sortament: .......^SortamentEx: ....   это сработало. как только выбирается материал с более коротким путем - то наименование не возвращается, например:  0;Material: .......^ Sortament: или вообще без сортамента

Собственно вопрос - почему? Либо подскажите какие-то другие варианты запроса имени из справочника.


Slaviation

Вот пример кода получения из МиС атрибута Designation по Location (id)

//Получить обозначение материала из МиС
_bstr_t GetMaterialDesignationFromMis(const _bstr_t& id)
{
   _bstr_t res("");
   if(!id.length()) return res;
   
   CLSID Clsid;
   if(FAILED(CLSIDFromProgID(_T("Materials.BOSimpleProvider"), &Clsid))) return res;

   IUnknownPtr unknown(NULL);
   const IBOSimpleProviderPtr boSimpleProvider(NULL);
   if(SUCCEEDED(GetActiveObject(Clsid, NULL, &unknown)) && unknown)
   {
      if(FAILED(unknown->QueryInterface(__uuidof(KompasObjectPtr), (LPVOID*)&boSimpleProvider)) || !boSimpleProvider) return res;
   }
   else if(FAILED(CoCreateInstance(Clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, __uuidof(IBOSimpleProviderPtr), (LPVOID*)&boSimpleProvider)) || !boSimpleProvider) return res;

   BSTR classID(SysAllocString(L"")), objectID(SysAllocString(L""));
   if(FAILED(boSimpleProvider->GetObjectInfo(id, &classID, &objectID))) return res;
   const IBOObjectPtr boObject(boSimpleProvider->GetObject(classID, objectID, 1));
   const IBOAttributeCollectionPtr boAttributeCollection(boObject->Attributes);
   const IBOAttributePtr boAttribute(boAttributeCollection->Attribute["Designation"]);
   res = boAttribute->AsString;

   SysFreeString(classID);   SysFreeString(objectID);
   
   return res;
}

viper_ava

Это Вы делаете запрос к справочнику МиС,
а мне нужно чтобы Лоцман сам нашел материал и вставил в дерево.
Суть примерно такова - нужно в Лоцман создать объект "Материал по КД", путь в справочнике мы знаем,
использую NewObject (и InsertObject для создания связи). Есть варианты как реализовать на C#?
Спасибо!