Форум программистов, компьютерный форум, киберфорум
1С: Администрирование и интеграция
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.58/100: Рейтинг темы: голосов - 100, средняя оценка - 4.58
3 / 3 / 0
Регистрация: 14.05.2013
Сообщений: 29

V82.COMConnector правильно получить NewObject из Справочники

25.07.2013, 06:13. Показов 19763. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
С 1С совсем не работал, но очень хочется получить из неё данные .
В общем, с начало всё рождалось здесь:
Qt + COM (ActiveX) = Властелин упрвления сервером 1С предприятия
Qt определение вывода ошибок в определенной кодировке (для русского текста)

Сейчас уже вопрос наверно не кутистам, а к 1сникам.
Подскажите пожалуйста, как правильно выбрать всех пользователей из справочника?
Например, захожу в конфигуратор - открыть конфигурацию
Слева есть список объектов и всего всего, есть пункт Справочники - Пользователи
Как правильно сделать NewObject чтобы получить ссылку на этих пользователей?
C++
1
2
3
    QAxObject * ax = new QAxObject("V82.COMConnector");
    QAxObject * ac = ax->querySubObject("Connect(\"Srvr=\"172.0.0.100\";Ref=\"base1\";Usr=\"1C-Bot\";Pwd=\"56q\";\")");
    QAxObject * ab = ac->querySubObject("NewObject",QAxObject::tr("Справочники.Пользователи;"));
но в ответ ругается
C++
1
2
3
4
5
6
7
QAxBase: Error calling IDispatch member NewObject: Exception thrown by server
             Code       : 1001
             Source     : 1C:Enterprise 8.2.15.319
             Description: ??? ?? ????????? '???????????.????????????;'
             Help       :
         Connect to the exception(int,QString,QString,QString) signal to catch t
his exception
По коду 1001 я понял, что это отсутствие данного метода, собственно поэтому и ошибка Error calling IDispatch member NewObject что никакой указатель не вернулся.
Но если сделать
C++
1
QAxObject * ab = ac->querySubObject("NewObject",QAxObject::tr("Справочники;"));
То какая то другая ошибка будет (кодировку не могу победить, извините), не 1001, т.е. как бы существует Справочники, но что-то не то вызываю.

Вопрос - как правильно сделать соединитель на Справочники.Пользователи и потом через метод String выбрать всех пользователей?
зы И ещё, если кто знает, подскажите пожалуйста, где можно посмотреть подробные логи действий на 1С сервере, ведь ошибка которая мне вопросиками отдается, должна же она где то на сервере храниться?!
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2013, 06:13
Ответы с готовыми решениями:

PowerShell и V82.COMConnector
Добрый день! Задача следующая: Необходимо создать com-object 1С и вытащить запросом кое-какие данные Проблема заключается в том,...

Visual Studio Express 2012 C++ подключение к 1С V82.COMConnector (COM) объекту
Хочу подключиться через com зарегистрированную библиотеку к 1С серверу. С VS совсем не работал ... В Qt есть такой пакет ActiveQT: ...

COM соединение ошибка объектного типа (NewObject)
В общем подключаюсь к внешней базе через функцию, объявив глобальную переменную для COM объекта, что бы дальше пользоваться в запросах: ...

52
1 / 1 / 0
Регистрация: 22.04.2014
Сообщений: 42
16.09.2014, 14:20
Студворк — интернет-сервис помощи студентам
только если так
1C
1
ВЫБРАТЬ схМаркаСельхозТехники.ВидТехники as view ИЗ Справочник.схМаркаСельхозТехники КАК схМаркаСельхозТехники
и все равно в проге пустота(
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
16.09.2014, 14:22
kosyachok90, в 1С (как и в остальных языках) типы делятся на сложные и примитивные
Вот лучше тебе в своей программе по максимуму стараться работать с примитивными типами 1С

Один из сложных типов 1С - это указатель на запись другой таблицы, такие лучше не выбирать в результирующую выборку

Добавлено через 36 секунд
kosyachok90, тип скажи какой у поля ВидТехники ?
1
340 / 315 / 43
Регистрация: 20.08.2014
Сообщений: 1,242
Записей в блоге: 1
16.09.2014, 14:23
Dethmontt, да это да. Поэтому они ж только COM и дают наружу. Тут надо с вами согласен надоть будет выданным 1с методами пользоватся.
1
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
16.09.2014, 14:24
kosyachok90, возможно ВидТехники это ссылка на другую запись другой таблицы, Qt не знает как тебе это отобразить!
А в 1С это обрабатывает платформа!
1
1 / 1 / 0
Регистрация: 22.04.2014
Сообщений: 42
17.09.2014, 13:48
Ребята, ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!!!!!
Dethmontt, ты полностью прав!
Я прям не помню когда таким счастливым был!
СПАСИБО!!!!

Добавлено через 23 часа 17 минут
А не могли бы Вы еще с одним вопросом помочь:
К примеру надо добавить данные в справочник, но как это сделать- ума не приложу(как выяснилось insert into не подходит). Может кто направит на истинный путь как это реализовать!
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.09.2014, 17:15
kosyachok90, только встроенным языком 1Ц

C++ (Qt)
1
2
3
4
axo* CatalogManager = serv->querySubObject("NewObject(QString)", str(tr("Справочники")));
axo* CatalogObject = CatalogManager.querySubObject("СоздатьЭлемент()");
CatalogObject ->dynamicCall("Наименование", str(tr("Привет из Qt")));
CatalogObject ->dynamicCall("Записать()");
Как разрушать объекты я думаю ты сам знаешь =)))
1
1 / 1 / 0
Регистрация: 22.04.2014
Сообщений: 42
17.09.2014, 17:32
да, знаю! Еще раз огромное спасибо!!!!
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.09.2014, 17:32
kosyachok90, сории, туплю я что то...

Для менеджера не доступен конструктор NewObject()
1
1 / 1 / 0
Регистрация: 22.04.2014
Сообщений: 42
17.09.2014, 17:36
C++ (Qt)
1
axo* qry = serv->querySubObject("NewObject(QString)", str(tr("СправочникМенеджер.Справочник")));
во как)
(мало-ли кто еще столкнется с такой задачей)
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
17.09.2014, 17:43
C++ (Qt)
1
2
3
4
5
axo* Catalog = serv->querySubObject("Справочники"); //Свойство глобального контекста
axo* CatalogManager = Catalog.querySubObject("Номенклатура"); //Идентификатор справочника в конфигураторе
axo* CatalogObject = CatalogManager.querySubObject("СоздатьЭлемент()"); //Метод возвращающий новый объект элемента справочника
CatalogObject ->dynamicCall("Наименование", str(tr("Привет из Qt")));
CatalogObject ->dynamicCall("Записать()");
Добавлено через 1 минуту
kosyachok90, или так =)))
1
17.09.2014, 19:09

Не по теме:

Я не пойму, почему критикуют ЯП 1ц: тут стрелочки сюда, стрелочки туда... Точку упразднили - плохо видно? :D

0
44 / 44 / 12
Регистрация: 05.04.2015
Сообщений: 345
06.03.2016, 13:42
Удалось решить с русским языком?
0
0 / 0 / 0
Регистрация: 03.12.2021
Сообщений: 2
21.12.2021, 02:32
Реализовал с помощью #include <comdef.h>

Пример использования:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <cdispatchhelper.h>
 
int MainWindow::TEST()
{
    HRESULT hr;
    VARIANT varRet;
 
    CDispatchHelper v8COMBase, v8Connector, v8SpravPol, v8QuerryBuilder, v8Querry, v8QuerryRes, v8QuerryRows;
 
    // Если COM соединение
 
    hr = v8COMBase.CreateInstance(L"V83.COMConnector", CLSCTX_INPROC_SERVER);
    if( FAILED(hr) ) // проверка на присутствие 1С Automation Sever-а
    {
        qInfo( logInfo() ) << "Переустановите 1С Предприятие!";
        return 0;
    }
 
    v8Connector = v8COMBase.Invoke(LPOLESTR( L"Connect" ), LPOLESTR( L"Srvr=\"test.ru\";Ref=\"test\";Usr=\"test\";Pwd=\"qwerty\"" ));
    if( !v8Connector )
    {
        qInfo( logInfo() ) << "Невозможно подключиться к базе 1С Предприятия";
        v8COMBase.Release();
        return 0;
    }
 
    // Если толстый клиент
 
//    hr = v8COMBase.CreateInstance(L"V83.Application");
//    if( FAILED(hr) ) // проверка на присутствие 1С Automation Sever-а
//    {
//        qInfo( logInfo() ) << "Переустановите 1С Предприятие!";
//        return 0;
//    }
 
//    varRet = v8COMBase.Invoke(LPOLESTR( L"Connect" ), LPOLESTR( L"Srvr=\"test.ru\";Ref=\"test\";Usr=\"test\";Pwd=\"qwerty\"" ));
//    if( (varRet.vt != VT_BOOL)||(varRet.boolVal == 0) ) // проверка удачно/не удачно
//    {
//        qInfo( logInfo() ) << "Невозможно подключиться к базе 1С Предприятия";
//        v8COMBase.Release();
//        return 0;
//    }
 
    // Если COM соединение
 
    v8Querry = v8Connector.Invoke(LPOLESTR( L"NewObject" ), LPOLESTR( L"Запрос" ));
    if( !v8Querry )
    {
        qInfo( logInfo() ) << "Невозможно получить объект 'Запрос'";
        v8COMBase.Release();
        return 0;
    }
 
    // Если толстый клиент
 
//    v8Querry = v8COMBase.Invoke(LPOLESTR( L"NewObject" ), LPOLESTR( L"Запрос" ));
//    if( !v8Querry )
//    {
//        qInfo( logInfo() ) << "Невозможно получить объект 'Запрос'";
//        v8COMBase.Release();
//        return 0;
//    }
 
    v8Querry.Put( LPOLESTR( L"Текст" ), LPOLESTR( L"ВЫБРАТЬ Пользователи.Наименование КАК Наименование, Пользователи.ФизическоеЛицо.Наименование КАК ФизическоеЛицоНаименование ИЗ Справочник.Пользователи КАК Пользователи ГДЕ Пользователи.Наименование like \"%Екатерина%\"" ) );
 
    v8QuerryRes = v8Querry.Invoke( LPOLESTR( L"Выполнить" ) );
 
    if( !v8QuerryRes )
    {
        qInfo( logInfo() ) << "Невозможно выполнить процедуру 'Выполнить'";
        v8COMBase.Release();
        return 0;
    }
 
    v8QuerryRows = v8QuerryRes.Invoke( LPOLESTR( L"Выбрать" ) );
 
    if( !v8QuerryRows )
    {
        qInfo( logInfo() ) << "Невозможно выполнить процедуру 'Выбрать'";
        v8COMBase.Release();
        return 0;
    }
 
    for(int i = 0; i < v8QuerryRows.Invoke( LPOLESTR( L"Количество" ) ).intVal; i++)
        if( VARIANT_TRUE == v8QuerryRows.Invoke( LPOLESTR( L"Следующий" ) ).boolVal )
            qInfo( logInfo() ) << "Наименование: " << QString::fromWCharArray( v8QuerryRows.Get(LPOLESTR( L"Наименование" )).bstrVal )
                               << " ФизическоеЛицоНаименование: " << QString::fromWCharArray( v8QuerryRows.Get(LPOLESTR( L"ФизическоеЛицоНаименование" )).bstrVal );
 
    v8QuerryBuilder.Release();
    v8Querry.Release();
    v8QuerryRows.Release();
    v8QuerryRes.Release();
    v8Connector.Release();
    v8COMBase.Release();
 
    return 0;
}
Вложения
Тип файла: 7z cdispatchhelper.7z (1.4 Кб, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.12.2021, 02:32

COMConnector к УТ11
Привет. хочу законектится к УТ 11(8.3 sql) из УТ 10.3(8.2) через &quot;V83.COMConnector&quot;, но приложение просто вылетает, однако через...

1C 8.3 COMConnector Исключение при подключении [C#]
Доброго времени суток. Надеюсь по адресу обращаюсь. Не могу никак заставить работать программу. На форме 1 кнопка. Текст клика: ...

Comcntr.dll, V83.COMConnector
Здравствуйте, не подскажете где можно взять документацию по comcntr.dll? Или подскажите по ошибке. Платформа 8.3.11. Ошибка на строке 12 -...

Нарушение Прав Доступа! Comconnector
Имеется чистая файловая конфигурация УТ 8.3.5.1098. Подключаюсь с помощью COM объекта, успешно создаю и провожу &quot;ЗаказКлиента&quot;....

Подключение к серверной базе 1С используя ComConnector
Добрый день. Имеется на корпоративном сервере база 1С, на компьютере 1С - нет. Необходимо написать программу, которая будет подключаться...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru