Имя: Пароль:
 
1C
 
Подключение OLE в регламентном задании
0 le_
 
13.08.10
10:12
Во время выполнения задания, при попытке подключиться через OLE ругается: Ошибка при вызове конструктора (COMОбъект): Интерфейс не поддерживается.

Подключаюсь так:
База7 = Новый COMОбъект("V77.Application");
Открыта = в77.Initialize(в77.RMTrade, СтрокаСоединения);
1 le_
 
13.08.10
10:12
Возможно ли это вообще - подключиться по OLE в регламентном задании?
2 le_
 
13.08.10
10:13
База7 = Новый COMОбъект("V77.Application");
Открыта = База7.Initialize(База7.RMTrade, СтрокаСоединения);
3 1C-Nick
 
13.08.10
10:23
по идее возможно

Создает COM-объект (например, Word, Excel и т.д.). Методы и свойства СОМ-объектов в дальнейшем становятся доступными через данный объект.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
4 le_
 
13.08.10
10:29
(3) Чего же оно тогда ругается?..
5 пента
 
13.08.10
10:30
у windows-пользователя регламентного задания есть права на создание COM-объектов ?
6 le_
 
13.08.10
10:32
(5) Да, есть это админ с полными правами.
7 1C-Nick
 
13.08.10
10:34
может там 7.7 не стоит? не из регламентного задания на сервере работает процедура?
8 пента
 
13.08.10
10:36
используется ? - NO_SPLASH_SHOW
9 пента
 
13.08.10
10:37
Открыта = База7.Initialize(База7.RMTrade, СтрокаСоединения, "NO_SPLASH_SHOW")
10 le_
 
13.08.10
10:39
7.7 установлена. Не из регл. задания работает.
Это я как раз внешнюю обработку, которая забирает данные из 7-ки пытаюсь в регламентные задания перенести.

Добавил NO_SPLASH_SHOW - не помогло.

В журнал регистрации записывается ошибка: Интерфейс не поддерживается.
11 1C-Nick
 
13.08.10
10:42
а если так V77 = Новый COMObject("V77.COMConnector")
12 73
 
13.08.10
10:44
(6) Регламентное задание выполняется не под админом, а под учёткой типа USR1CV81/USR1CV82
13 1C-Nick
 
13.08.10
10:54
(12) я бы не был так категоричен. этому пользователю можно и админские права дать и своего указать под которым будет служба работать...
14 le_
 
13.08.10
10:54
(12)Да, сервер работает под пользователем USR1CV81. А где у него задаются права на создание COM-объектов?..
15 1C-Nick
 
13.08.10
11:00
(12) все таки прав)
(14) попробуй его внести в группу Distributed COM Users
16 le_
 
13.08.10
11:04
(15) Добавил пользователя в группу "Пользователи DCOM" - не помогло.

Говорят, можно настроить доступ с помощью утилиты DCOMCNFG - но что-то не могу найти там V77.Application...
17 1C-Nick
 
13.08.10
11:08
(16) найдешь где это права раздается отпишись плиз, самому интересно.
делать учетку админом не по феншую будет, но на крайний вариант сойдет
18 73
 
13.08.10
11:14
Посмотри тут про 1с что-то есть?
Администрирование-Службы компонентов-Компьютеры-Мой компьютер-НастройкаDCOM.
что-то типа V77.Application
19 le_
 
13.08.10
11:18
Нашел!
Всё заработало :)

Сделал так:
Пуск - Выполнить - DCOMCNFG.

Там разворачиваем "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Настройка DCOM". Внури есть V77.GeneralPropPage и V77.SalaryPropPage. Права задаются в свойствах на закладке "Безопасность".
20 le_
 
13.08.10
11:22
После всего нужно перезапустить службу "Агент сервера 1С:Предприятия 8.1".
21 odekolon
 
10.09.10
09:27
Платформа 8.2, ОС - WinXP (но как выяснилось те же симптомы и на 8.1, ОС Win 2003)
У меня проблема другого толка, но м.б. кто-нибудь подскажет.
Когда запускаю семерочку по OLE (из восьмерочки), она повисает на входе в базу!
Проблемы возникают при любом вызове на сервере в клиент-серверном варианте. К слову на той же самой машине в файловой версии "зависание" не проявляется (так что не указывайте на то, что у меня ПриНачалеРаботыСистемы висит "предупреждение", не висит!).
При этом taskmgr кажет появление нового процесса 1cv7, который отжирает вместо 50 Мб (при запуске в файловой версии) всего мегов 5. При этом процессор так же отдыхает, т.е. показывает загруженность в ноль.
Что характерно я быстро не сдался. Быстренько накатал свой com-объект, который умел бы запускать 1С-ку и возвращать соединение. С этим com-объектом проявляются те же симптомы. В файловой версии все хоккей, а в клиент-серверной - подвисает на входе.
Снятие процесса 1cv7 приводит к exception'у.

Так же была задача в регламентном задании переносить данные справочника из одной базы в другую.

ЗЫ: Подключаюсь точно так же:
 База7 = Новый COMОбъект("V77.Application");
 Открыта = в77.Initialize(в77.RMTrade, СтрокаСоединения);
22 le_
 
10.09.10
10:10
Может быть, в строке соединения ошибка?..
23 le_
 
10.09.10
10:13
И еще, может быть, с этим связано:
V1CEnterprise.Application - версия независимый ключ;
V77.Application - версия зависимый ключ;
V77S.Application - версия зависимый ключ, SQL версия;
V77L.Application - версия зависимый ключ, локальная версия;
V77M.Application - версия зависимый ключ, сетевая версия.
24 odekolon
 
10.09.10
10:30
В строке соединения ошибок нет. О том свидетельствует то, что при запуске НаКлиенте тот же самый текст обрабатывается без проблем, а НаСервере подвисает именно на входе, т.е. на строке:
 Открыта = в77.Initialize(в77.RMTrade, СтрокаСоединения);
25 odekolon
 
10.09.10
10:32
К слову, я уже пробовал предложенные способы описания ком-объекта, эффект одинаковый. Повторюсь, пробовал как на 8.1, так и на 8.2 с операционками: WinXP, Win2003.
26 le_
 
10.09.10
10:44
(24) А пользователь, под которым сервер работает имеет доступ к базе семерки?
27 odekolon
 
10.09.10
11:06
Многоуважаемый le_! ;)))))
Извиняюсь за свою невнимательность! ;)))))
Права-то я расставил первым делом (когда-то уже голову ломал над этим), а есть ли база в списке пользователя, под которым запускается агент, не удостоверился. Ёпта! :(((((((
Семерка просто ждала, когда я выберу базу, которой нету в списке...... ;_))
Аааа :(((
28 le_
 
10.09.10
11:26
(27) Вообще-то, если строка соединения указана правильно, то оно должно было подключиться, несмотря на то, что список баз в профиле этого пользователя пуст.

Я, например, никогда не входил в систему под пользователем USR1CV82 и не заполнял этот список. Главное - правильно составить строку подключения.
29 odekolon
 
10.09.10
13:50
Еще интересный глюк:
ОЛЕ1 = Новый COMОбъект("V77.Application");    
Рез = ОЛЕ1.Initialize(ОЛЕ1.RMTrade, "/d" + СокрЛП(БазаИсточник.Каталог) + " /n" + БазаИсточник.Пользователь + " /p" + БазаИсточник.Пароль + "" , "NO_SPLASH_SHOW");    
ОЛЕ2 = Новый COMОбъект("V77.Application");
Рез = ОЛЕ2.Initialize(ОЛЕ2.RMTrade, "/d" + СокрЛП(БазаПриемник.Каталог) + " /n" + БазаПриемник.Пользователь + " /p" + БазаПриемник.Пароль + "" , "NO_SPLASH_SHOW");
Вылетает с ошибкой, что интерфейс не поддерживается.

По одиночке базы входят без проблем.
30 odekolon
 
10.09.10
14:26
Проблему решил. Службу начал запускать с системной учетной записью. По другому работать не хочет.
31 le_
 
10.09.10
14:50
(30) Ну, как раз по поводу "Интерфейс не поддерживается" и было сообщение в (0).
А в (19) описано решение.
32 TheReal
 
15.09.10
13:36
Еще не вставшая проблема, но в продолжение топика. мб это оффтоп, но ...

Требуется в регламентом задании подключаться к базе 81 через COM, передавать туда кой какие данные.

Меня терзают сомнения , по поводу стабильности, если несколько соеденителей открыты это бэд. Пока процесс представляется так, раз в 10 минут идет выполнение задания, в задании создание COM соединения и пр, не провиснут ли эти COM соеденители.

Вопрос есть ли способ контролить запушено ли уже такое задание и еще не окончено, или где то в глобальном месте хранить COM соединение созданное однажды и не париться.

Вопрос может быть не в тему, но если у кого есть опыт ответьте, мб я чего то не учел.
33 МихаилМ
 
15.09.10
14:01
если выполняется на сервере, то сервер может работать
и под линуксом. на линуксе КОМ нет.
34 TheReal
 
15.09.10
14:17
MS-вский сервак
35 TheReal
 
15.09.10
14:34
Пока решил сделать вот что,

в начале выполнения задания искать фоновые задания запущенные больше N секунд назад, N  из регламентного получаю.

непосредственного запуска фонового задания не предвидится, поэтому думаю что сканает от параллельных сеансов COM
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший