Имя: Пароль:
1C
1С v8
Запуск клиентского сеанса на сервере
0 SpellKeeper
 
04.10.17
16:26
Добрый день.
У меня есть внешняя dll с com-объектами, через которую надо подключиться к сторонней базе (не 1С) и забрать некоторые данные.
Хотел делать это в фоновом задании. Но фоновые задания запускаются на сервере, а там com-объект вызвать нельзя.
На инфостарте предлагается любопытный метод обойти эту проблему.
http://catalog.mista.ru/public/317865/
Но тут вылезает другая проблема.
Из фонового задания не запускается клиентский сеанс.
Если это регламентное задание запустит на клиенте - проходит в лет. А через фоновое - доходит до строки ЗапуститьПриложение(СтрокаЗапуска);
и все. Новый сеанс не создается, и фоновое подвисает в бесконечности. Убить получается только перезапуском службы 1С на сервере.
Подскажите, как обойти эту проблему?
1 SpellKeeper
 
04.10.17
16:28
Забыл.
Работаем на 8.2.
Переход на 8.3 пока не возможен.
2 SpellKeeper
 
04.10.17
17:33
up
3 d4rkmesa
 
04.10.17
18:27
Я бы сделал по-другому:

СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    
    appСоединение = Новый COMОбъект("V82.Application");
    
    Попытка
        
        appСоединение.Connect(СтрокаСоединения + " Usr=""" + СокрЛП(Константы._ПользовательЗапускКлиентскихПроцедур.Получить().Наименование) + """;Pwd="""
        + СокрЛП(Константы._ПарольПользователяЗапускКлиентскихПроцедур.Получить()) + """");        
        
    Исключение
        
        ЗаписьЖурналаРегистрации("Рассылка отчетов: " + СокрЛП(НастройкаРассылки.Наименование), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат;
        
    КонецПопытки;
    
    appСоединение.Visible = false;
    
    appСоединение.МодульЗапускаКлиентскихПроцедур.НашаКлиентскаяПроцедура(ПараметрЗапуска);
    
    appСоединение.ЗавершитьРаботуСистемы(Ложь);
4 Tateossian
 
04.10.17
18:41
(3) Com-объект на сервере (вроде автор об этом упомянул) не создать. (0) А вне фонового задания запускает приложение?
5 breezee
 
04.10.17
19:16
А точно ком нельзя на сервере? ComConnector ,tp ghj,ktv jnhf,fnsdfk
6 Филиал-msk
 
04.10.17
19:39
(5) Представь себе, что это Линукс
7 d4rkmesa
 
04.10.17
20:12
(4) Это же по сути обычный клиент запускается, не com-коннектор с собственным контекстом. Насколько я понял, проблема в том что процедура не работает на сервере. Главное установить 32-разрядный клиент  предприятия на сервере. К примеру, у нас так отчеты на базе универсального рассылаются.
8 Филиал-msk
 
04.10.17
20:29
(0) Судя по всему оно хочет какого-то интерактива. Например, пожаловаться на отсутствие доступа, сообщить о нарушении безопасного режима, просто достучаться пользователем сервера до десктопа и т.п.
9 SpellKeeper
 
06.10.17
10:33
Подниму тему, т.к. проблема так и не ушла.
Подвисание я убрал. У нас админы чего-то перемудрили при установке 1С. получилось, что процедура КаталогПрограммы() на клиенте и на сервере возвращала разные значения, хотя запускалась на одном компе.

Тем не менее. Ни фоновое задание, ни на сервере клиентское приложение не открывается. Я вывел данные в журнал регистрации, и, судя по ним, клиентская часть даже не запускается. При этом запуск делается через попытку.
    Попытка
        ЗапуститьПриложение(СтрокаЗапуска,,Истина);    
        ЗаписьЖурналаРегистрации("Загрузка ЭЦП", УровеньЖурналаРегистрации.Информация, , , "Клиентское приложение запущено");
    Исключение
        ЗаписьЖурналаРегистрации("Загрузка ЭЦП", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка запуска клиентского приложения " + ОписаниеОшибки());
    КонецПопытки;
В журнале регистрации сообщение "Клиентское приложение запущено". Т.е. ошибок нет, но по факту клиент не запустился.
10 Мыш
 
06.10.17
10:38
(9) > процедура КаталогПрограммы() на клиенте и на сервере возвращала разные значения, хотя запускалась на одном компе

Легко. Сервер 64, клиент 32