void __fastcall TConnect_To_1c_Form::SpeedButton1Click(TObject *Sender)
{
Caption = "Connect_To_1c - Идет процесс подключения...";
Serv = CreateOleObject("V77.Application");
Trade = Serv.OlePropertyGet("RMTrade");
if ( VarType(Trade) == varDispatch )
{
return;
}
Serv.Exec(Function("Initialize") << Trade <<" /M /DC:\\1c_database\\MnfcDemo /NСимошкин"<< "NO_SPLASH_SHOW" );
Caption = "Connect_To_1c - Присоединились !";
}
//---------------------------------------------------------------------------
void __fastcall TConnect_To_1c_Form::SpeedButton2Click(TObject *Sender)
{
Caption = "Connect_To_1c - Идет процесс отключения...";
Serv = Unassigned;
Serv =Serv.Empty();
Caption = "Connect_To_1c - Отсоединились";
}
//---------------------------------------------------------------------------
void __fastcall TConnect_To_1c_Form::SpeedButton3Click(TObject *Sender)
{
Materialy(); // эта функция загружает справочник материалов в TTreeView
/*
//а эта реализация загружает справочник "Контрагенты" в M_Pers - TMemo
M_Pers->Clear();
Variant Spr = Serv.Exec(Function("EvalExpr")
<<"СоздатьОбъект(\"Справочник.Контрагенты\")");
Spr.Exec(Function("ВыбратьЭлементы"));
while (Spr.Exec(Function("ПолучитьЭлемент")) > 0)
{
M_Pers->Lines->Add(Spr.OlePropertyGet("Наименование"));
}
*/
}
//---------------------------------------------------------------------------
void __fastcall TConnect_To_1c_Form::Materialy()
{
// TV - это TTreeView
TV->Items->Clear();
Direct(EmptyVar.Empty(),NULL,"Материалы");
}
//---------------------------------------------------------------------------
void __fastcall TConnect_To_1c_Form::Direct(Variant Elem, TTreeNode* Node,String Sprav)
{
// Универсальный метод загрузки любого справочника в TV - TTreeView
Variant Spr = Serv.Exec(Function("EvalExpr")<<"СоздатьОбъект(\"Справочник."+Sprav+"\")");
if (!Elem.IsEmpty())
{
Spr.Exec(Function("ИспользоватьРодителя")<<Elem);
}
Spr.Exec(Function("ВыбратьЭлементы")<<1);
while (Spr.Exec(Function("ПолучитьЭлемент"))> 0)
{
Test = Spr.Exec(Function("Родитель"));
E1 = Test.Exec(Function("Наименование"));
if(!Elem.IsEmpty())
{E2 = Elem.Exec(Function("Наименование"));}
else {E2 = "";}
if (Spr.Exec(Function("ЭтоГруппа")) == 1)
{
if (E1 == E2)
{
pChildNode = TV->Items->AddChild(Node,Spr.OlePropertyGet("Наименование"));
ParentElem = Spr.Exec(Function("ТекущийЭлемент"));
Direct(ParentElem, pChildNode, Sprav);
}
}
else
{
if (E1 == E2)
{
TV->Items->AddChild(Node,Spr.OlePropertyGet("Наименование"));
}
}
Application->ProcessMessages();
}
}
//---------------------------------------------------------------------------
void __fastcall TConnect_To_1c_Form::SpeedButton5Click(TObject *Sender)
{
// Загрузка плана счетов в TMemo
M_Pers->Lines->BeginUpdate();
M_Pers->Clear();
Variant Spr = Serv.Exec(Function("EvalExpr")<<"СоздатьОбъект(\"Счет\")");
Variant CurrSchet;
Spr.Exec(Function("ВыбратьСчета"));
int tmp_int=0;
String val_str;
while (Spr.Exec(Function("ПолучитьСчет")) > 0)
{
CurrSchet=CurrSchet.Empty();
CurrSchet=Spr.Exec(Function("ТекущийСчет"));
tmp_int=CurrSchet.OlePropertyGet("Валютный");
if (tmp_int){val_str="Валютный";}
else{val_str=" - ";}
M_Pers->Lines->Add(CurrSchet.OlePropertyGet("Код")+String(" ")+CurrSchet.OlePropertyGet("Наименование")+String(" ")+val_str+Spr.Exec(Function("ПолнНаименование")));
}
M_Pers->Lines->EndUpdate();
}
//---------------------------------------------------------------------------
void __fastcall TConnect_To_1c_Form::N11Click(TObject *Sender)
{
// это сохранение плана счетов из 1с в мою таблицу б.д.
Caption = "Connect_To_1c - Идет процесс получения плана счетов...";
DataSource1->DataSet=NULL;
Variant Spr = Serv.Exec(Function("EvalExpr")<<"СоздатьОбъект(\"Счет\")");
Variant CurrSchet;
Spr.Exec(Function("ВыбратьСчета"));
int Valyta=0;
int Act=0;
int Zab=0;
int Kol=0;
int Count=0;
String Code="";
String Name="";
String Comment="";
while (Spr.Exec(Function("ПолучитьСчет")) > 0)
{
Count++;
CurrSchet=CurrSchet.Empty();
CurrSchet=Spr.Exec(Function("ТекущийСчет"));
Valyta=CurrSchet.OlePropertyGet("Валютный");
Kol=CurrSchet.OlePropertyGet("Количественный");
Zab=CurrSchet.OlePropertyGet("Забалансовый");
Act=CurrSchet.OlePropertyGet("Активный");
Code=CurrSchet.OlePropertyGet("Код");
Name=CurrSchet.OlePropertyGet("Наименование");
Comment=Spr.Exec(Function("ПолнНаименование"));
ADOQuery1->SQL->Text="Insert INTO T_PScetGen (REC_GUID,REC_GUID, PValyta, PKol, PZab, PAct, PGroup, PCode, PName, PComment,REC_C) VALUES ("+IntToStr(Count)+", "+IntToStr(Count)+", "+IntToStr(Valyta)+", "+IntToStr(Kol)+", "+IntToStr(Zab)+", "+IntToStr(Act)+", 0, '"+Code+"', '"+Name+"', '"+Comment+"', 1)";
ADOQuery1->ExecSQL();
LevelControl(Code); // создаем иерархическую структуру счетов
Caption = "Connect_To_1c - Идет процесс получения плана счетов... Получено="+IntToStr(Count);
Update();
}
Caption = "Connect_To_1c - Получение плана счетов завершено. Всего получено="+IntToStr(Count);
Update();
ADOQuery1->SQL->Text="Select * from T_PScetGen";
DataSource1->DataSet=ADOQuery1;
ADOQuery1->Open();
}
//---------------------------------------------------------------------------
1С и C++Builder
1C и C++Builder,т.е. о связи 1C и C++Builder.
Есть платные компоненты Direct1c, см. в "ya.ru"
-2-
Исследуй этот небольшой примерчик - может и компоненты не потребуются...
Код: