Russian Qt Forum

Qt => ActiveX => Тема начата: JayFOX от Май 16, 2012, 23:24



Название: 1с + Qt
Отправлено: JayFOX от Май 16, 2012, 23:24
Всем привет.

Нужно подключиться к 1с из Qt-приложения.
Нашел на форуме вот что http://www.prog.org.ru/topic_17499_0.html (http://www.prog.org.ru/topic_17499_0.html) и столкнулся с аналогичной проблемой.
Скачал пустую 1с 7.7, создал в ней справочник и теперь хочу из него что-нибудь получить. Исходники в utf-8 (хотя как только уже не вертел). Взял код из примеров с форума.
Код:
    QAxObject *act = new QAxObject("V77.Application");
    connect(act,SIGNAL(exception(int,QString,QString,QString)),this,SLOT(err(int,QString,QString,QString)));
    QString path = trUtf8("C:\\1");
    QString user = "user";
    QString pass = "123";
    QString connectString = "/D"+path+" /N"+user+" /P"+pass;
    qDebug()<<act->dynamicCall("Initialize(const QVariant&, const QVariant&, const QVariant&)",
                               act->dynamicCall("RMTrade"),
                               connectString,
                               "no_splash_show");
    QAxObject *query = act->querySubObject("NewObject(QString)", trUtf8("Запрос"));
Получаю
Код:
QVariant(bool, true) 
QAxBase::dynamicCallHelper: NewObject(QString): No such property in {63112d80-94f0-11d2-9f39-008048da120f} [unknown]
Candidates are:
P.S. Вообще, задача уведомлять 1С базу из web-сервера о новых заказах, приходящих с интернет-магазина. Может не самый лучший способ прямо в 1С лезть? В любом случае хочется решить вопрос с кодировками(руками).
Спасибо.


Название: Re: 1с + Qt
Отправлено: alex312 от Май 17, 2012, 14:41
Из ошибки видно, что не удается найти
Код:
NewObject(QString)
.

Ты сгенерируй документацию
Код:
QString QAxBase::generateDocumentation ()
- очень помогает.


Название: Re: 1с + Qt
Отправлено: JayFOX от Май 17, 2012, 17:12
В сгенерированной документации "Initialize" функции не было, но она прокатила. Там вообще очень скудно:
Код:
Signals:
void exception(int code, QString source, QString disc, QString help);
void propertyChanged(QString name);
void signal(QString name, int argc, void* argv);
Properties:
QString objectName;
QString control;

Может есть идеи как иначе организовать общение между программой и 1с? На сокетах? Хочет больше функционала вынести  к "себе" в программу.


Название: Re: 1с + Qt
Отправлено: alex312 от Май 17, 2012, 18:26
Может есть идеи как иначе организовать общение между программой и 1с? На сокетах? Хочет больше функционала вынести  к "себе" в программу.
Идей тьма, но встроенные средства скудны, внешних нормальных(с открытыми исходниками )  я не нашел. Сейчас вообще, просто пишу консольные скрипты, которые сохраняют результаты в файл. И дергаю эти утилитки из 1С.


Название: Re: 1с + Qt
Отправлено: JayFOX от Май 19, 2012, 13:36
Небольшая победа. В 7.7 не было "NewObject", а есть "CreateObject". Теперь мучаю
Код:
QAxObject *res = query->querySubObject("Execute(QString)", trUtf8("ВЫБРАТЬ * ИЗ Справочник.Справочник1"));


Название: Re: 1с + Qt
Отправлено: JayFOX от Май 21, 2012, 16:54
Друзья, прошу помощи!
Перенес программу на другой компьютер windows 7 home premium, до этого все работало на ultimate. Сейчас же при подключении к 1с получаю вот что:
Код:
CoCreateInstance failure (????? ?? ???????????????)
QAxBase::setControl: requested control V77.Application could not be instantiated
До этого такое сообщение было когда запускал 1с из потока, починил там вот чем:
Код:
CoInitializeEx(NULL, COINIT_MULTITHREADED);
Но тут явно уже не поможет. Как быть? спасибо.


Название: Re: 1с + Qt
Отправлено: voron1980 от Май 22, 2012, 18:58
QAxBase::setControl: requested control V77.Application could not be instantiated

Кажется V77.Application По крайней мере V81.Application и V82.Application не будет работать без ключа(HASP) и надо еще dll регистрировать.
Вот пример
Код:
cmd
> cd /d "C:\Program Files\1cv82\8.2.15.294\bin\"
> regsvr32 -i comcntr.dll
Еще надо HASP  и ключ установить, у вас на windows 7 ultimate ключ стоял же?
Мне тоже стало интересно с 1С как то соединиться но без ключа, а то смысл программы на QT немного теряется, можно 1С из командной строки запускать сразу и указывать ей обработку на автозапуск.
могу ошибаться конечно.
Вот хорошая статья по интеграции магазина и 1С.
http://habrahabr.ru/post/139657/


Название: Re: 1с + Qt
Отправлено: alex312 от Май 22, 2012, 22:01
Друзья, прошу помощи!
Перенес программу на другой компьютер windows 7 home premium, до этого все работало на ultimate. Сейчас же при подключении к 1с получаю вот что:
Код:
CoCreateInstance failure (????? ?? ???????????????)
QAxBase::setControl: requested control V77.Application could not be instantiated
До этого такое сообщение было когда запускал 1с из потока, починил там вот чем:
Код:
CoInitializeEx(NULL, COINIT_MULTITHREADED);
Но тут явно уже не поможет. Как быть? спасибо.
1) Попробуй создать V77.Application из другой программы, да хоть при помощи самой 1С.
2) попробуй создать при помощи Qt другой COM, (word, например).

Может вы работаете под каким-то ограниченным пользователем?