Имя: Пароль:
1C
 
Как корректно отключать соединения от сервера 1С в v8.1. Делюсь.
,
0 Rabajaba
 
26.09.08
16:16
В связи с тем, что информация в КЗ Книга знаний: v8: Выгонялка пользователей для 1С 7.7, 8.0, 8.1 устарела для v8.1 предлагаю такой вариант корректного отключения пользователей.
Для нагладности пользователь и пароль для админа кластера и админа конкретной БД одинаковы. Сервер и База это строковые имена.

Что конкретно делает этот код:
перебор всех кластеров в конкретном сервере. после идет выборка всех процессов этого сервера и подключение к его рабочим процессам для отключения от конкретной базы.

// подключимся к агенту, чтобы узнать все процессы
Коннектор = Новый COMОбъект("v81.COMConnector");
Агент = Коннектор.ConnectAgent(Сервер);
Кластеры = Агент.GetClusters();
Для каждого Кластер из Кластеры Цикл
   // получим и береберем процессы кластера
   Агент.Authenticate(Кластер, Пользователь,Пароль);
   Процессы = Агент.GetWorkingProcesses(Кластер);
   Для каждого Процесс из Процессы Цикл
       Порт = Процесс.MainPort;
       Попытка
           // теперь есть адрес и порт для подключения к рабочему процессу
           РабПроц = Коннектор.ConnectWorkingProcess(Сервер + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
           // логин админа кластера
           РабПроц.AuthenticateAdmin(Пользователь, Пароль);
           // логин админа базы
           РабПроц.AddAuthentication(Пользователь,Пароль);
           
           ИнформационнаяБаза = РабПроц.CreateInfoBaseInfo();
           ИнформационнаяБаза.Name = База;
           СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза);
           // Разорвать соединения клиентских приложений.
           Для Каждого Соединение Из СоединенияБазы Цикл
               Если нРег(Соединение.AppID) = "1cv8" Тогда // убиваем только предрятия
                    РабПроц.Disconnect(Соединение);
               КонецЕсли;
           КонецЦикла;
       Исключение
           ЛогОбмена("РезервноеКопирование.Остановка", ИнформацияОбОшибке().Описание);
           ЛогОшибок("Работа с процессов сервера для отключения пользователей");
       КонецПопытки;
   КонецЦикла;
КонецЦикла;
1 Serg_1960
 
26.09.08
16:29
Актуальная тема <вариант корректного отключения пользователей> :)
Возможны варианты:
Глобальный контекст
УстановитьБлокировкуУстановкиСоединений (SetConnectionsLock)
Синтаксис:
УстановитьБлокировкуУстановкиСоединений(<Блокировка>)
Параметры:
<Блокировка> (обязательный)
Тип: БлокировкаУстановкиСоединений. Новое описание блокировки установки соединений.
Описание:
Изменяет блокировку установки соединений. Для выполнения требуются права администратора информационной базы.
2 Salvador Limones
 
26.09.08
16:31
(0) В чем прикол-то?
Переписал код с VBS в 1С для 8.1, а так алгоритм один-в-один.
3 Rabajaba
 
26.09.08
16:32
Вариант в (1) указывает на то, что после установки никто не сможет зайти в БД.
Вариант (0) показывает как отключить пользователей "на горячую".
4 Rabajaba
 
26.09.08
16:32
(2) вчитайтесь получше в код КБ сначала, а потом пишите.
5 Salvador Limones
 
26.09.08
16:35
(4) Мда.... Ты накурен?
6 H A D G E H O G s
 
26.09.08
16:36
(0) ПО стилю заголовка так Гения напоминает...
7 Serg_1960
 
26.09.08
16:40
(3) <никто не сможет зайти> - а если ипользуя ключ /UC и пароль блокировки?
8 Rabajaba
 
26.09.08
16:41
Ты понятие один в один используешь чисто чтобы поприкалываться?

Set connector = CreateObject("V81.COMConnector")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(0)
ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
Set WorkingProcessConnection = Connector.ConnectWorkingProcess(ConnectString)
WorkingProcessConnection.AddAuthentication UserName, UserPass
Set ibDesc = WorkingProcessConnection.CreateInfoBaseInfo()
ibDesc.Name = BaseName
Connections = WorkingProcessConnection.GetInfoBaseConnections(ibDesc)


покажешь перебор кластеров и процессов?
И рас ты такой умный, чего не переписал то? чего не выложил? жадный?
9 shachneff
 
26.09.08
16:42
(1) Указанный метод не выполняет функцию выгоняния пользователей из базы. Он препятствует их входу в нее.
Программная обвязка может использовать флаг наличия блокировки, а так же время начала и окончания блокировки (при наличии) и обеспечивает корректный выход пользователей из системы методом ЗавершитьРаботуСистемы.

(0) Приведенный автором код выгоняет всех резко и безальтернативно.
10 Rabajaba
 
26.09.08
16:42
(7), прошу прощения, не указал, что так можно.
Эти два варианта преследуют немного разные задачи, но часто можно использовать и тот и тот.
11 Serg_1960
 
26.09.08
16:47
Эй! (6) и (8) Вы чего, вечером в пятницу звереете что-ли? Чего завелись оба с пол оборота?

Фраза <корректного отключения> позабавила. Ничего себе "корректно"... Да это серпом по #цензура# - сразу и надолго :) Вот и предложил корректный вариант "от 1С"
12 Rabajaba
 
26.09.08
16:51
"Корректного отключения от сервера" полностью фраза звучит. :)
Это не означает корректного отключения пользователя от базы.
13 Serg_1960
 
26.09.08
16:51
(0) "в целом" полезное решение. Вот только мне не понятно: а Вы "свой собственный" процесс не прервете таким образом раньше остальных?
14 goodfella
 
26.09.08
16:52
(11) Это всё лимонес, та еще скатина.
15 ShoGUN
 
26.09.08
16:53
(10) Справился? :) А код тестировался? По идее он срубает и тот сеанс, из которого запущен.
16 UnAmerican
 
26.09.08
16:53
0 Так выгонишь и на работу в понедельник не приходи )).
17 Rabajaba
 
26.09.08
16:54
Этот код выполняется в фоновом задании в моем случае.
Да и потом это только основа, туда же можно ещё насовать проверок на пользователей, хостов и тп.
18 Rabajaba
 
26.09.08
16:55
(15) отлично срубает, пока под предприятием тестил :)
19 Serg_1960
 
26.09.08
16:56
(17) Сорри. Я в последнее время, наверное, как-то "не так" услышанное воспринимаю. Все время слышу не то, что мне хотели сказать :) Как "рыба" - замечательно!
20 H A D G E H O G s
 
26.09.08
16:57
(11) Я? Завелся? Шутить изволите...
(14) Все правильно Сальвадор сказал.. Ничего уникального и суперсверхвозможного в (0) не вижу.
21 1C-Nick
 
26.09.08
17:07
(6) +1 по заголовку думал Гений пишет =)
А вообще приведите пример для чего такое надо, чем не нравится механизм из типовой с завершением раобты системы в коде по значению в регистре сведений или по текущему времени?
22 Rabajaba
 
26.09.08
17:11
Ночь. Архивирование. Винт ждет бекапа. Продолжать? :)
23 Serg_1960
 
26.09.08
17:12
(20)Вы глубоко не правы :( Автор не хотел быть "уникальным" или "оригинальным". Кому-то он, возможно, реально сбережет время.
Я знаю, все что я сказал и скажу - давно сказали до меня, - но это не повод молчать:
Ирония в том, что специалист, в отличие от всех "остальных", понимает как много он не понимает...
24 Кураж
 
26.09.08
17:13
Вот сколько это http://infostart.ru/projects/1836/ уже валяется, а изобретатели велосипедов никак не угомонятся!
25 Serg_1960
 
26.09.08
17:15
(22) И у меня по ночам "бурная" жизнь продолжается. А по утру (иногда) юзверам ключей не хватает из-за "зависших" процесов, а админ только руками разводит... :(
26 Serg_1960
 
26.09.08
17:18
(24) Вот видите, Ваша ссылка - еще один "плюс" к обсуждению велосипедов :))
27 H A D G E H O G s
 
26.09.08
17:19
(25) Зависшие, именно "зависшие" - потерявшие связь с сервером 1С процессы лечатся релизом 2.2 и соответствующей службой здесь:
http://www.infostart.ru/projects/1737/
28 1C-Nick
 
26.09.08
17:20
(22) (25) - я имел ввиду примеры когда завершение работы пользователей должно происходить таким способом, а не скажем завершение сеансов и выключение компьютеров по расписанию
29 wPa
 
26.09.08
17:25
(25) А рестартануть службу 1с и сиквеоа утром?
30 H A D G E H O G s
 
26.09.08
17:29
(27) Хотя я вот точно не скажу - остается ли захваченной лицензия при завершении соединения с сервером 1С, или нет..
31 Serg_1960
 
26.09.08
17:38
(27)-(30) Спасибо за отклик. У меня очень р-е-д-к-о (но бывает) - и причины не понятные (ночью обмен по почте идет). Как "защита от дурака" алгоритмом можно проверять "на всякий случай" и рубить. Сорри, я "одеяло на себя стянул"... больше не буду :)
32 ОМЭЗ
 
26.09.08
17:49
(27)А что это за файлы и для чего они нужны?
33 H A D G E H O G s
 
26.09.08
17:56
(32) Да это чушь всякая, мусор. Лучше не трогать.
34 goodfella
 
26.09.08
17:57
(33) Хлам. Согласен.
35 ОМЭЗ
 
26.09.08
18:04
(34)Ага только что поставил и смотрел
Закон Брукера: Даже маленькая практика стоит большой теории.