#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++;
}
}
OLE 1C, не получается управлять метаданными в 1С через С++
вот с чего я начал работать. ПРостой перебор всех справочников и их реквизитов.
Код:
Ругается при первом же вызове:
Код:
IntializationLine = "Метаданные.Справочник";
Variant CountSpr = Ole1C.OleFunction("EvalExpr", IntializationLine);
Variant CountSpr = Ole1C.OleFunction("EvalExpr", IntializationLine);
на сколько я понял дело в имени функции!
Код:
Variant CountSpr = Ole1C.OleFunction("EvalExpr", IntializationLine);
тут я использую EvalExpr. Это имя я использовал когда создавал объекты с помощью ыункции
Код:
СоздатьОбъект("Справочник.Номенклатура");
дело в том что Метаданные в 1С не создаются с помощью - СоздатьОбъект, Это функция вызывается напрямую:
Код:
Метаданные.Документ(1).РеквизитШапки(1).Идентификатор;
скорей всего имя функции надо указать какоенить другое, только не знаю какое! :(
Заранее спасибо, Ганиев Ренат.