![]() |
|
COM соединение в фоновом задании | ☑ | ||
---|---|---|---|---|
0
Viktorilia
16.09.15
✎
10:35
|
Добрый день. Задача следующая. Перенести подключение к удаленной базе в фоновое задание. Вызов процедуры происходит из формы списка документа:
Если глV21Object = Неопределено Тогда ПутьКБазе = Константы.ПутьКБазеАвтовесов.Получить(); СтруктураПодключения = МодульРегламентныхЗаданий.ПолучитьСтруктуруПодключения_Авто(ПутьКБазе) ; глV21Object = МодульРегламентныхЗаданий.ПодключитсяКИнформационнойБазе2(СтруктураПодключения); Если глV21Object = Неопределено Тогда Сообщить( "Ошибка подключения к базе данных!!!", СтатусСообщения.Важное ) ; Возврат ; КонецЕсли; Сообщить( ""+ТекущаяДата() + " - Подключение к конфигурации "+глV21Object.Метаданные.Synonym+" выполнено успешно!" ) ; КонецЕсли; КонецЕсли; |
|||
1
Viktorilia
16.09.15
✎
10:36
|
Извиняюсь вот эта процедура в модуле списка документа:
//МассивЗаданий=Новый Массив(); // //Задание=ФоновыеЗадания.Выполнить("МодульФоновыхЗаданий.COMСоединение"); //МассивЗаданий.Добавить(Задание); //Попытка //ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий); //// Исключение ////Сообщить("Подключение к базе ""Автовесовой"" не произошло!"); //КонецПопытки; //МассивЗаданий.Очистить(); |
|||
2
Viktorilia
16.09.15
✎
10:37
|
В модуле Фоновых заданий: Процедура COMСоединение() Экспорт
///-- если константа заполнена то создаем соеденение Если ЗначениеЗаполнено(Константы.ПутьКБазеАвтовесов.Получить()) Тогда Если глV21Object = Неопределено Тогда ПутьКБазе = Константы.ПутьКБазеАвтовесов.Получить(); СтруктураПодключения = МодульРегламентныхЗаданий.ПолучитьСтруктуруПодключения_Авто(ПутьКБазе) ; глV21Object = МодульРегламентныхЗаданий.ПодключитсяКИнформационнойБазе2(СтруктураПодключения); Если глV21Object = Неопределено Тогда Сообщить( "Ошибка подключения к базе данных!!!", СтатусСообщения.Важное ) ; Возврат ; КонецЕсли; Сообщить( ""+ТекущаяДата() + " - Подключение к конфигурации "+глV21Object.Метаданные.Synonym+" выполнено успешно!" ) ; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
3
Апош
16.09.15
✎
10:38
|
назови свою процедуру "COMСоеденение". это уже будет не зарезервированное слово
|
|||
4
Viktorilia
16.09.15
✎
10:38
|
Пременная глV21Object определяется в моле приложения:
перем глV21Object Экспорт; |
|||
5
Viktorilia
16.09.15
✎
10:41
|
При запуске фонового задания переменная не видится. Свойства Модуля фонового задания:Внешнее соед, на клиенте, сервер, вызов сервера
|
|||
6
Viktorilia
16.09.15
✎
10:42
|
база серверная
|
|||
7
Остап Сулейманович
16.09.15
✎
10:46
|
Не увидел вопроса... Но если дело в том, что в модуле фонового задания не видно переменной - то ее объявить нужно в модуле внешнего соединения. Модуль приложения компилируется при интерактивном запуске. А фоновое работает из под внешнего соединения.
|
|||
8
Viktorilia
16.09.15
✎
10:52
|
(7)Ок, Спасибо.Скажите а как дальше работать с объектом ComConnector. Сервер 64-х разрядный. Т.е. нужно ли регистрировать библиотеку? Я прочитала про обертку COM+
|
|||
9
Viktorilia
16.09.15
✎
10:52
|
имею ввиду библиотеку comcntr.dll
|
|||
10
olegves
16.09.15
✎
10:56
|
(0) имхо, лучше уж сразу и данные прочитать в фоновом задании (или там обмен какой)
|
|||
11
Viktorilia
16.09.15
✎
10:58
|
да мне хотя бы к базе подключиться
|
|||
12
Viktorilia
16.09.15
✎
10:58
|
(7)Суть поняла, но почему то все равно переменная не определена.
|
|||
13
Остап Сулейманович
16.09.15
✎
10:59
|
(9) В общем случае библиотеку нужно регистрировать. Но если ОНО у вас работает вне фоновых заданий то ОНО уже зарегистрировано и никаких больше регистраций не нужно.
|
|||
14
olegves
16.09.15
✎
11:04
|
(13) не факт. Фоновое задание выполняется с правами (по умолчанию) пользователя, под которым стартован сервер 1С, вот этому пользователю и нужны права на компоненту. Если этот пользователь на том же компе, где уже зарегана компонента, то все ОК, а если на другой машинке, то на ней и нужно регать сомстрл
|
|||
15
Остап Сулейманович
16.09.15
✎
11:08
|
(14) Таки да. Но права на использование и регистрация самой компоненты все-таки разные вещи. Компонента может быть зарегистрирована, а прав на запуск нет. И тогда повторная регистрация не поможет.
|
|||
16
Viktorilia
16.09.15
✎
11:16
|
Я больше даже имею ввиду похожую ситуацию , найденную в интернете: Объект V81.Application выполняется в рамках нового процесса 1cv8.exe.
Объект V81.COMConnector является внутрипроцессным сервером. На удаленном компьютере нет процесса, в котором он может быть создан. Чтобы объект V81.COMConnector можно было создать на удаленном компьютере, регистрации компоненты comcntr.dll в COM утилитой regsvr32.exe недостаточно. Требуется выполнить регистрацию на удаленном компьютере компоненты comcntr.dll в качестве приложения COM+. |
|||
17
Viktorilia
16.09.15
✎
11:27
|
Еще такой момент:64 битные приложения не могут запускать 32 битные DLL которые активируются при запуске 32 битного COM объекта 1С. Для решения проблемы нужно воспользоваться оберткой COM+ которая являясь 64 битным приложением может взаимодействовать с 32 битными библиотеками.
|
|||
18
Viktorilia
16.09.15
✎
11:28
|
Для это необходимо выполнить следующие шаги:
Запускаем консоль «Службы компонентов» (например: Пуск ? Администрирование ? Службы компонентов. В ветке Приложения COM+ добавляем новое приложение: Создать ? Приложение На вопрос «Установка или создание нового приложения» - выбираем «Создать новое приложение». Имя нового приложения лучше написать чтобы было понятно о чем речь: V8_ComConnector, способ активации - «серверное приложение». Учетная запись для запуска приложения: выбираем учетку под которой стартует сервер 1С. В ветке созданного приложения переходим на ветку «Роли» открываем роль «CreatorOwner» и далее в разделе «Пользователи» создаем пользователя - учетную запись под которой работает сервер 1С. В ветке созданного приложения переходим на ветку «Компоненты» и создаем компонент: Создать ? Компонент Выбираем «Установка новых компонентов», и в диалоге выбираем нужную DLL-ку (comcntr.dll) Открываем свойства только что созданного компонента, идем на вкладку «Безопасность», проверяем в списке «Явно установленные для выделенных объектов роли» стоит ли «птичка» напротив роль CreatorOwner - если нет, тогда устанавливаем эту «птичку». |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |