Com соединение с 1С из С++

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

cheerful
Сообщения: 2
Зарегистрирован: 05 окт 2007, 13:41

Кому надо, вот пример рабочего кода подключения и работы с v8:

Variant Ole1C=CreateOleObject("V81.Application"); //Подключение к версии 8.1
//Подключение к БД файлового варианта
AnsiString ConnectLine="File=C:\Progra~l\lcv8\Db\Trade; Озг=Иванов; Pwd=super";
//Подключение к БД клиент-серверного варианта
//AnsiString ConnectLine="Srvr=ServerlC; Ref=Trade; изг=Иванов; Pwd=super";
Ole1C.OleProcedure("Connect", ConnectLine.c_str());
Variant sprorg=Ole1C.OlePropertyGet("Справочники").OlePropertyGet("Организации");
Variant organization=sprorg.OleFunction("НайтиПоКоду","000000004");
Variant newdoc=Ole1C.OlePropertyGet("Документы").OlePropertyGet("ЗаказПокупателя").OleFunction("СоздатьДокумент");
ewdoc.OlePropertySet("Организация",organization);
newdoc.OlePropertySet("Дата",Now());
newdoc.OlePropertySet("ДатаОтгрузки",Date());
newdoc.OleFunction("УстановитьНовыйНомер");
newdoc.OleFunction("УстановитьВремя",vremja);
newdoc.OleFunction("Записать");
serafxxx
Сообщения: 1
Зарегистрирован: 02 мар 2011, 12:35

Вот еще пример C++ COM 1CV8, работет через библиотеку VOLE, также надо скачать библиотеку STLSoft.
Компилировать gcc (Mingw), при линковке указывать библиотеки oleaut32, ole32, uuid.
Исходники должны быть в кодировке UTF-8, иначе gcc не поймет русских символов.

Код: Выделить всё

/* VOLE Header Files */
#include <vole/vole.hpp>

/* STLSoft Header Files */
#include <comstl/util/initialisers.hpp>
#include <comstl/util/variant.hpp>
#include <winstl/error/error_desc.hpp>

/* Standard C/C++ Header Files */
#include <iostream>
#include <stdlib.h>

using std::cout;
using std::cerr;
using std::endl;

/* ////////////////////////////////////////////////////////////////////// */

int main(){
    try{
        comstl: :o le_init    coinit;

        cout<<"start"<<endl;
        vole: :o bject  v8 = vole: :o bject::create(L"V8.Application", CLSCTX_LOCAL_SERVER, vole::coercion_level::nonDestructiveCoercion);
        cout<<"created"<<endl;


        v8.invoke_method<bool>(L"Connect",L"File=""C:\\1C8_DATA\\test"";Usr=""user"";Pwd=""qwe"";");


        vole: :o bject spr=v8.get_property<vole: :o bject>(L"Справочники");
        vole: :o bject orgs=spr.get_property<vole: :o bject>(L"Организации");
        vole: :o bject porg=orgs.invoke_method<vole: :o bject>(L"НайтиПоКоду","00003");
        vole: :o bject org=porg.invoke_method<vole: :o bject>(L"ПолучитьОбъект");
        org.put_prop(L"Наименование",L"СтройСноб!");
        org.invoke_method_v(L"Записать");
        cout<<porg.get_property<std::string>(L"Наименование")<<endl;
        //v8.put_property(L"Visible", 1);


        ::MessageBox(NULL, "All done.", "Notice", 0x10000);
        return 0;

    }catch(vole::vole_exception &x){
        cout << "error: " << x.what() << ": " << winstl::error_desc(x.hr()).c_str() << endl;

    }catch(std::exception &x){
        cout << "error: " << x.what() << endl;
    }

}
Такого примера не видел, надеюсь кому-нить пригодится :)
Ответить