Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Не отрабатывает регламентное задание. Клиент-серверная 1С.

Не отрабатывает регламентное задание. Клиент-серверная 1С.
Я
   Румата
 
19.05.19 - 07:57
Доброго времени суток. Помогите разобраться. Работаю на терминальном сервере, сервер 1С Предприятия установлен на другом компьютере. Обработка по КОМ закрывает все активные сеансы пользователей. Код взял из интернета. Когда код вставляю во внешнюю обработку он прекрасно отрабатывает, когда этот же код вставляю в регламентное задание, то все активные сеансы не закрываются, хотя ошибок не возникает, пишет задание выполнено. Знаю, что все регламентные задания отрабатываются на Сервере 1С Предприятия, а не на том компьютере где регламентное задание запускается, наверняка из-за этого активные сеансы и не закрываются. Ниже приведу код обработки.

Процедура ЗакрытиеАктивныхСеансов() Экспорт
    
    ПараметрыАдминистрированияИБ=УправлениеСоединениямиИБ.ПолучитьПараметрыАдминистрированияИБ();
    Попытка
        Сеансы = ПолучитьАктивныеСеансыИБ(ПараметрыАдминистрированияИБ);
        Для каждого Сеанс Из Сеансы.Сеансы Цикл
            // Разрываем Connections с ИБ
                        
            Сеансы.АгентСервера.TerminateSession(Сеансы.КластерСерверов, Сеанс);
            СтрСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                НСтр("ru = 'Разорван сеанс: Пользователь %1, компьютер %2, начат %3, режим %4'"),
                                Сеанс.UserName,
                                Сеанс.Host,
                                Сеанс.StartedAt,
                                Сеанс.AppID);
            ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), УровеньЖурналаРегистрации.Информация, , , СтрСообщение);    
        КонецЦикла;
        
    Исключение
        
        ЗаписьЖурналаРегистрации(НСтр("ru = 'Завершение работы пользователей'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
                
    КонецПопытки;



КонецПроцедуры    
        
Функция ПолучитьАктивныеСеансыИБ(НастройкаБлокировки, знач ВсеКромеТекущего = Ложь)
    
    Результат = Новый Структура("АгентСервера,КластерСерверов,Сеансы", Неопределено, Неопределено, Новый Массив);
    ПодстрокиСтрокиСоединения = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(
        СтрокаСоединенияИнформационнойБазы(), ";");
    
    ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7));
    ИмяИБ      = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6));
    
    СистемнаяИнфо = Новый СистемнаяИнформация;
    ПодстрокиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(
        СистемнаяИнфо.ВерсияПриложения, ".");
    ИмяCOMСоединителя="v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector";


    
    COMСоединитель = Новый COMОбъект(ИмяCOMСоединителя);
    
    РазделительПорта = Найти(ИмяСервера, ":");
    Если РазделительПорта > 0 Тогда
        ИмяИПортСервера = ИмяСервера;
        ИмяСервера = Сред(ИмяИПортСервера, 1, РазделительПорта - 1);
        НомерПортаКластера = Число(Сред(ИмяИПортСервера, РазделительПорта + 1));
    ИначеЕсли НастройкаБлокировки.ПортКластераСерверов <> 0 Тогда
        НомерПортаКластера = НастройкаБлокировки.ПортКластераСерверов;
    Иначе
        НомерПортаКластера = COMСоединитель.RMngrPortDefault;
    КонецЕсли;
    
    ИдентификаторАгентаСервера = ИмяСервера;
    Если НастройкаБлокировки.ПортАгентаСервера <> 0 Тогда
        ИдентификаторАгентаСервера = ИдентификаторАгентаСервера + ":" +
            Формат(НастройкаБлокировки.ПортАгентаСервера, "ЧГ=0");
    КонецЕсли;
    
    // Подключение к агенту сервера
    АгентСервера = COMСоединитель.ConnectAgent(ИдентификаторАгентаСервера);
    Результат.АгентСервера = АгентСервера;
    
    // Найдем необходимый нам кластер
    Для каждого Кластер Из АгентСервера.GetClusters() Цикл
        
        Если Кластер.MainPort <> НомерПортаКластера Тогда
            Продолжить;
        КонецЕсли;
        
        Результат.КластерСерверов = Кластер;
        АгентСервера.Authenticate(Кластер, НастройкаБлокировки.ИмяАдминистратораКластера,
            НастройкаБлокировки.ПарольАдминистратораКластера);
        
        // Получаем список сеансов
        НомерТекущегоСеанса = НомерСеансаИнформационнойБазы();
        СписокСеансов = АгентСервера.GetSessions(Кластер);
        Для Каждого Сеанс из СписокСеансов Цикл
            Если ВРег(Сеанс.InfoBase.Name) <> ВРег(ИмяИБ) Тогда
                Продолжить;
            КонецЕсли;
            Если НЕ ВсеКромеТекущего ИЛИ (НомерТекущегоСеанса <> Сеанс.SessionID) Тогда
                Результат.Сеансы.Добавить(Сеанс);
            КонецЕсли;
        КонецЦикла;
        
    КонецЦикла;
    
Возврат Результат;



КонецФункции
 
 
   DES
 
1 - 19.05.19 - 11:00
навставляй сообщений в Журнал и посмотришь что не отрабатывает
   palsergeich
 
2 - 19.05.19 - 11:34
Если ОФ, то проверяй доступность сервера во всех процедурах и контексте
   palsergeich
 
3 - 19.05.19 - 11:35
Запросто может оказаться что коннектора на сервере нет.
Ну или через запись в РЖ
   catena
 
4 - 20.05.19 - 05:34
"пишет задание выполнено" - кто пишет?
Там в коде записи ЖР, туда заглядывал, там че?
   Cyberhawk
 
5 - 20.05.19 - 08:01
(4) "задание выполнено" - кто пишет?" // Консоль заданий, очевидно же
   catena
 
6 - 20.05.19 - 08:19
(5)Это было попыткой навести на мысль, куда смотреть.
   Cyberhawk
 
7 - 20.05.19 - 08:28
(6) Что "это"?
   Сияющий в темноте
 
8 - 20.05.19 - 08:33
Если с журналами тяжело,то создай файл во временной директории с уникальным именем(гуид)и пиши в него,все,что задание делает,тогда будет ясно,что происходит.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.