Russian Qt Forum
Май 03, 2024, 21:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: 1с + Qt  (Прочитано 10579 раз)
JayFOX
Гость
« : Май 16, 2012, 23:24 »

Всем привет.

Нужно подключиться к 1с из Qt-приложения.
Нашел на форуме вот что 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С лезть? В любом случае хочется решить вопрос с кодировками(руками).
Спасибо.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Май 17, 2012, 14:41 »

Из ошибки видно, что не удается найти
Код:
NewObject(QString)
.

Ты сгенерируй документацию
Код:
QString QAxBase::generateDocumentation ()
- очень помогает.
Записан
JayFOX
Гость
« Ответ #2 : Май 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с? На сокетах? Хочет больше функционала вынести  к "себе" в программу.
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #3 : Май 17, 2012, 18:26 »

Может есть идеи как иначе организовать общение между программой и 1с? На сокетах? Хочет больше функционала вынести  к "себе" в программу.
Идей тьма, но встроенные средства скудны, внешних нормальных(с открытыми исходниками )  я не нашел. Сейчас вообще, просто пишу консольные скрипты, которые сохраняют результаты в файл. И дергаю эти утилитки из 1С.
Записан
JayFOX
Гость
« Ответ #4 : Май 19, 2012, 13:36 »

Небольшая победа. В 7.7 не было "NewObject", а есть "CreateObject". Теперь мучаю
Код:
QAxObject *res = query->querySubObject("Execute(QString)", trUtf8("ВЫБРАТЬ * ИЗ Справочник.Справочник1"));
« Последнее редактирование: Май 19, 2012, 13:38 от JayFOX » Записан
JayFOX
Гость
« Ответ #5 : Май 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);
Но тут явно уже не поможет. Как быть? спасибо.
Записан
voron1980
Гость
« Ответ #6 : Май 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/
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #7 : Май 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, например).

Может вы работаете под каким-то ограниченным пользователем?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.