Имя: Пароль:
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
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший