Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OLE 1C, не получается управлять метаданными в 1С через С++

520
02 января 2007 года
inkognitum
155 / / 03.05.2006
Работаю через OLE с 1С, я уже работал до этого, все получилось, но сейчас потребовалось работать с метаданными. а почему то ругается, говорит - Ошибка в OLE функции.

вот с чего я начал работать. ПРостой перебор всех справочников и их реквизитов.

Код:
#include<utilcls.h>
....
int iCoutIterace;
TTreeNode* WM[100];  // Первый уровень
TTreeNode* WN[100];  // второй уровень
TTreeNode* WX[100];  // третий уровень
....
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Variant Ole1C, rmTrade;
   HResult s1cResult;
   LPUNKNOWN pIUnknown = NULL;
   char *IntializationLine = "/DE:\\TTC\\Chelny_autosalon\\";
   s1cResult = GetActiveObject(ProgIDToClassID("V77.Application"), NULL, &pIUnknown);
   if ( s1cResult == MK_E_UNAVAILABLE ) {
      Ole1C = CreateOleObject("V77.Application");
   } else {
      Ole1C = GetActiveOleObject("V77.Application");
   }
   rmTrade = Ole1C.OlePropertyGet("RMTrade");
   /* Start OLE Automation ... */
   Ole1C.OleProcedure("Initialize", rmTrade, IntializationLine,"NO_SPLASH_SHOW");


   IntializationLine = "Метаданные.Справочник";
   Variant CountSpr = Ole1C.OleFunction("EvalExpr", IntializationLine);
   //Variant CountSpr = Ole1C.OleFunction(NULL, IntializationLine);

   for (int count_spr = 1;count_spr<=CountSpr;count_spr++){

      IntializationLine = String("Метаданные.Справочник("+IntToStr(count_spr)+").Идентификатор").c_str();
      Variant Identifikator = Ole1C.OleFunction("EvalExpr", IntializationLine);
      WN[iCoutIterace] = TreeView1->Items->AddChildFirst(WM[iCoutIterace], Identifikator);

      IntializationLine = String("Метаданные.Справочник("+IntToStr(count_spr)+").Реквизит()").c_str();
      Variant kolRek = Ole1C.OleFunction("EvalExpr", IntializationLine);

      for (int i = 1; i<= kolRek; i++) {
         IntializationLine = String("Метаданные.Справочник("+IntToStr(count_spr)+").Реквизит("+IntToStr(i)+")").c_str();
         Variant Rek = Ole1C.OleFunction("EvalExpr", IntializationLine);
         TreeView1->Items->AddChildFirst(WN[iCoutIterace], Rek);
      }


      iCoutIterace++;
   }
}


Ругается при первом же вызове:
 
Код:
IntializationLine = "Метаданные.Справочник";
Variant CountSpr = Ole1C.OleFunction("EvalExpr", IntializationLine);


на сколько я понял дело в имени функции!
 
Код:
Variant CountSpr = Ole1C.OleFunction("EvalExpr", IntializationLine);


тут я использую EvalExpr. Это имя я использовал когда создавал объекты с помощью ыункции
 
Код:
СоздатьОбъект("Справочник.Номенклатура");

дело в том что Метаданные в 1С не создаются с помощью - СоздатьОбъект, Это функция вызывается напрямую:
 
Код:
Метаданные.Документ(1).РеквизитШапки(1).Идентификатор;


скорей всего имя функции надо указать какоенить другое, только не знаю какое! :(

Заранее спасибо, Ганиев Ренат.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог