Имя: Пароль:
1C
1С v8
Просмотр свойств СОМ объекта 1с
0 serafxxxx
 
09.09.11
12:05
Я в ступоре. 3-й день лазю по OleView-еру, не могу найти методов объекта "V8.Application"
Открываю папку ObjectClasses в OleView, нахожу там 2 класса "1CV8.Application" и "1СV8 COM Connector Class"

Если кликать на "1CV8.Application", то нельзя просмотреть TypeInformation. В "1СV8 COM Connector Class" можно открыть TypeInformation, но я не вижу там методов, которые можно использовать..

Где их можно увидеть? (конкретно итересует метод NewObject и наличие остальных)
1 Cube
 
09.09.11
12:10
(0) Так, это, методы те же, что и в обычном коде на v8...
2 Cube
 
09.09.11
12:11
(0) Конкретно спроси, что надо, мы подскажем :)
3 serafxxxx
 
09.09.11
12:22
Ситуёвина в следующем: пишу проект на с++, есть необходимость общаться с 1с-кой.

Сначала использовал с++ библиотеку VOLE для этих целей. Чтобы создать запрос в 1Ске проделывал следующее:

vole::object zapros=v8._v8.invoke_method<vole::object>(L"NewObject",L"Запрос");

Это работает. Но уж очень сложно с 1с таким макаром работать. Интегрировал в свой проект скриптовый движок Lua, подключил библиотеку LuaCOM, которая позволяет работать с СОМ объектами прямо из скрипта.

Вот такая штука в скриптах работает:
kontr=v8:Справочники().Контрагенты:НайтиПоНаименованию("Дом быта"):ПолучитьОбъект()

А создать объект как создавал в с++ ранее не выходит:

zap=v8:NewObject("Запрос")

Выдает ошибку "несовпадение типов"

Теперь я переписываюсь с разработчиком LuaCOM и он попросил IDL (описание) к СОМ объекту с которым я работаю. А там нихрена нету про NewObject и проблема повисла..
4 serafxxxx
 
09.09.11
12:23
буду очень благодарен, если кто-нибудь объяснить где увидеть все доступные свойства и методы СОМ объекта
5 Cube
 
09.09.11
12:33
6 DmitrO
 
09.09.11
12:38
и не увидишь. ITypeInfo не поддерживается ни глобальным контекстом 1С ни объектами 1С. Если не много понимать что такое 1С, то даже станет понятно почему.
7 serafxxxx
 
09.09.11
13:11
Cube, вы немного не поняли, в с++ метод NewObject работает, а вот из Lua - нет (ругается на несовпадение типа параметра).
Да и (1) сообщение не верное: например, глобальную ф-цию "Тип" мне не удаётся вызвать.

Dmitro, не могли бы вы поподробней?)
8 Cube
 
09.09.11
13:23
(7) Агент+ допиливаешь что-ли?))
9 serafxxxx
 
09.09.11
13:28
Нет, не знаю что такое Агент+) Пишу с нуля приложение
10 DmitrO
 
09.09.11
13:31
А что подробней-то? Говорю же ITypeInfo нету. Нет его, забудь про IDL. Не может его быть. Только позднее связывание.
"Тип" это встроенная функция, а не функция глобального контекста. Встроенные функции не доступны через OLE.

Что такое Lua я знать не знаю, поэтому в чем там проблема понятия не имею.
Из C++ с 1С всегда работаю без всяких сторонних библиотек. Для упрощения использую ATL - все работает без проблем.
11 serafxxxx
 
09.09.11
13:34
(10) Вы используете компилятор от микрософт, а я - gcc, потому без библиотек никак.
12 Cube
 
09.09.11
13:36
Уууу, тут я уже не помощник))) Какие-то слова незнакомые пошли :))
13 DmitrO
 
09.09.11
13:43
gcc для win32 приложения использующего OLE.. ?)
Не, я даже не буду спрашивать "зачем" - мне реально не интересно это.
Нет у меня такого опыта.
14 serafxxxx
 
09.09.11
14:16
просто OLE там не основное, так, плагин.
15 Serginio1
 
09.09.11
15:00
Можно описать диспинтерфейсы, что бу быстрее и удобнее работать
16 serafxxxx
 
13.09.11
10:02
Блин, и всё-таки!
Может когда пишешь
zap=v8:NewObject("Запрос")
Надо передавать не строку, а результат функции Тип? Как обратиться к этой ф-ции через COM?
17 hhhh
 
13.09.11
10:16
(16) ну напишите функцию в 1С, которая всё вытаскивает и возвращает уже готовую таблицу с данными. Нафига вам на на такой низкий уровень опускаться, запросы туда сюда гонять?
18 serafxxxx
 
13.09.11
10:19
А как и где лучше функцию объявить чтобы она была в зоне видимости?
19 serafxxxx
 
13.09.11
10:26
Разобрался)
20 serafxxxx
 
13.09.11
10:28
На первое время пойдет, но вообще предполагалось, что должно работать на разных конфигурациях без их изменения
21 serafxxxx
 
14.09.11
16:59
Оказывается, что если инициализировать соединение так:

v8=luacom.CreateObject("V8.Application")
v8:Connect("File='c:\1c\';Usr='usr';Pwd='pwd';")

то

запр=v8:NewObject("Запрос")

выкидывает "несовпадение типов", а если инициализировать так:

v8=luacom.CreateObject("V8.COMConnector")
v8=v8:Connect("File='c:\1c\';Usr='usr';Pwd='pwd';")

то NewObject работает нормально:)
22 DmitrO
 
14.09.11
17:14
(21) вообще-то это два весьма разных способа подключения.

v8=luacom.CreateObject("V8.Application")
v8:Connect("File='c:\1c\';Usr='usr';Pwd='pwd';")
Тут прежде чем создавать объект Запрос не мешало бы проверить что возвращает Connect, а возвращает он булево значение, подключилось или нет.
23 DmitrO
 
14.09.11
17:16
(22)+ и возможность подключения и тем и тем способом зависит от прав пользователя.
24 serafxxxx
 
14.09.11
17:20
(22) да, у меня проверялось
(23) пользователя виндовз?
25 ksupalo
 
14.09.11
17:33
По сабжу.
Не знаю какие там у Вас цели (0), но гонять запросы - это не правильно... Попроси народ написать все что нужно в общем модуле, а потом просто вызывай серверные процедуры.
Ты будешь в чистом виде работать в архитектуре клиент-сервер - послал запрос, получил ответ. Это правильно, если прога на с++ будет клиентом для 1С.

Гонять данные по COM можно, только если это разовая процедура, например разовая перекачка данных.
26 serafxxxx
 
14.09.11
17:46
(25) спасибо, учту)
27 DmitrO
 
14.09.11
18:10
(24)пользователя 1С