Имя: Пароль:
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
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn