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