Закрыть все соединения 1с

Обновлено: 02.07.2024

Завершение сеанса пользователя в 1С может потребоваться в следующих случаях:

  • обновление информационной базы;
  • проведение восстановления работы на сервере или профилактических работ;
  • зависшие сеансы пользователей, которые препятствуют повторному входу;
  • добавление нового объекта метаданных в конфигурацию.

В данной инструкции мы расскажем, как правильно завершить сеанс пользователя и покажем несколько способов в зависимости от требований.

Эти и другие работы мы выполняем в рамках ИТ-аутсорсинга.

Важно запомнить, что прежде чем завершать сеанс пользователя, требуется предупредить пользователя об этом, так как возможна потеря данных.

Закрытие сеансов из конфигуратора

При внесении изменений в структуру базы и обновлении конфигурации в динамическом режиме может появиться ошибка, которая не предоставит нам возможности продолжить выполнение обновления до тех пор, пока не завершим сеанс пользователя.

Ошибка активных сеансов

Рисунок 1 - Ошибка активных сеансов

Для завершения сеанса требуется:

  1. Нажать кнопку Завершить сеансы и повторить.
  2. Дождаться окна реструктуризации базы.
  3. Нажать Принять.

Завершение сеансов пользователя из программы 1С

В основном все продукты фирмы 1С 8 версии имеют механизм, позволяющий удаленно завершить работу пользователя и обеспечить администратору монопольный доступ к базе. Это обработка Блокировка соединений с информационной базой. Найти её можно по следующему адресу: Администрирование => обслуживание => блокировка работы пользователей.

Блокировка работы пользователей

Рисунок 2 - Блокировка работы пользователей

Подтверждение блокировки сеанса

Рисунок 3 - Подтверждение блокировки сеанса

Удаление пользователей из RDP

Удалить пользователя из терминального сервера можно при наличии определенных прав на это действие. Возможно завершить работу из стандартного диспетчера задач, но простое прерывание сеанса - не очень правильно. Второй вариант - использование диспетчера задач, удаленное подключение к сеансу и корректное завершение с помощью выхода из программы. Это, конечно, долгий способ и нет гарантий, что пока выполняется выход одного пользователя, не будет подключен еще пользователь, который запустит программу.

Для сервера 1С и обладая правами Администратора для кластера серверов 1С, необходимо:

  1. Запустить консоль администрирования сервера 1С.
  2. В ветке Информационные базы, найти базу, в которой будем завершать работу пользователя.
  3. Открыв её, зайти в ветку Сеансы.
  4. Щелкнув правой кнопкой мыши по имени пользователя, выбрать пункт Удалить.

Удаление в консоли администрирования

Рисунок 4 - Удаление в консоли администрирования

Часто бывает, что при работе в серверном режиме зависшие сеансы пользователей не видны средствами платформы, их можно удалить только через консоль.

Перезагрузка сервера

Нельзя и упустить такой момент, что одним из способов завершения сеанса пользователей является банальная перезагрузка сервера, выполнить её можно, если все вышеуказанные способы не сработали, но такое случается редко. Безусловно, требуется пользователей предупредить, чтобы они успели сохранить файлы и завершить работу с программами.

Лично у меня на релизах от 8.2.9.х до текущего 8.2.12.96 не всегда происходит полное отключение сеансов. Например, устанавливаю обновление, умный конфигуратор мне выдает кнопку "Завершить сеансы и продолжить", после нажатия на которую остается несколько подключенных соединений.

Также в течение дня часто остаются соединения по закрытым сеансам.

Зачем это нужно

Для себя нашел два пути применения:

1. Перед инсталляцией обновлений необходимо отключить пользователей от системы;

2. Регламентное задание, отвечающее за резервное копирование, должно отключить все подключенные сеансы.

В первом случае удобство состоит в том, что есть кнопка в режиме предприятия, нажав на которую происходит полное завершение.

Как это сделать

Первое, что нам нужно - это определить имя базы и сервер, на котором она расположена. Для этого разбираем строку соединения базы.

Если Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr" ) > 0 Тогда
// серверный вариант
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 6 );
ИмяСервера = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
// теперь ищем имя базы
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Ref color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 5 );
ИмяБазы = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
Иначе
// для других способов подключения алгоритм не актуален
Возврат;
КонецЕсли;

Для работы с агентом сервера необходимо использовать COM-объект

Коннектор = Новый COMОбъект ( "v82.COMConnector" );

который позволяет подключится к агенту сервера:

Агент = Коннектор . ConnectAgent ( ИмяСервера );

Теперь перебираем все кластеры, в которых учавствует агент:

Кластеры = Агент . GetClusters ();
Для каждого Кластер из Кластеры Цикл

Чтобы получить доступ к процессам кластера, необходимо аутентифицироваться, если для кластера задан администратор:

АдминистраторКластера = "Имя администратора кластера" ;
ПарольКластера = "Пароль администратора кластера" ;
Агент . Authenticate ( Кластер , АдминистраторКластера , ПарольКластера );

если кластер без ограничения доступа, то следует писать так:

Агент . Authenticate ( Кластер , , );

Теперь необходимо получить перечень процессов, которые обрабатывают данный кластер:

Процессы = Агент . GetWorkingProcesses ( Кластер );
Для каждого Процесс из Процессы Цикл

Т.к. к рабочему процессу необходимо подключаться через коннектор, то необходимо вычислить порт, на котором работает данный процесс:

Порт = Процесс . MainPort ;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор . ConnectWorkingProcess ( ИмяСервера + ":" + СтрЗаменить ( Порт , Символы . НПП , "" ));

Рабочий процесс необходимо для разрыва соединений. Разрыв сессий происходит через агента. Опишем подробно. Сначала необходимо аутентифицироваться в рабочем процесс по имени и паролю пользователя, у которого в базе данных есть право "Администратор":

РабПроц . AddAuthentication ( "Имя администратора БД" , "Пароль администратора БД" );

На этом этапе есть объект агента и рабочего процесса, который обслуживает текущий кластер. Далее необходимо найти искомую базу данных:

Базы = Агент . GetInfoBases ( Кластер );
Для каждого База из Базы Цикл
Если База . Name = ИмяБазы Тогда
ИнформационнаяБаза = База ;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИнформационнаяБаза = "" Тогда
// база не найдена
КонецЕсли;

Отключение сеансов

Итак у нас есть все необходимые объекты для непосредственного обрыва сессий. При это рекомендую полностью разобраться, какие именно сессии мы будем разрывать, иначе можно отключить сессию, в которой выполняется этот код :

Сеансы = Агент . GetInfoBaseSessions ( Кластер , ИнформационнаяБаза );
Для каждого Сеанс из Сеансы Цикл
Если нРег ( Сеанс . AppID ) = "backgroundjob" ИЛИ нРег ( Сеанс . AppID ) = "designer" Тогда
// если это сеансы конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Сеанс . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
Агент . TerminateSession ( Кластер , Сеанс );
КонецЦикла;

Также у типа "Сеанс" есть ещё много разных свойств, например, имя компьютера, данные о языке, времени и длительности подключения и тп.

Отключение соединений

Отключение соединений происходит через объект рабочего процесса. Обрабатывает соединение тип "Соединение", у которого структура свойств напоминает тип "Сеанс". Итак, как отключенить соединения:

СоединенияБазы = Агент . GetInfoBaseConnections ( Кластер , ИнформационнаяБаза );
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Если нРег ( Соединение . Application ) = "backgroundjob" ИЛИ нРег ( Соединение . Application ) = "designer" Тогда
// если это соединение конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Соединение . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
РабПроц . Disconnect ( Соединение );
КонецЦикла;

Выводы

Получен пример отключения сеансов и соединений с информационной базы. При должном знании свойств каждого типа (рабочий процесс, агент сервера, сеанс, соединение) можно, например, сделать откючение конкретного пользователя по расписанию (однако, совершенно другой вопрос зачем это делать) либо, используя данные конструкции, написать внешнее приложение, которое будет использовать COM-объект "v82.COMConnector".

P.S.

Для понимающих работу с этими типами: код намеренно раздут, для того, чтобы под отладчиком было удобнее просматривать значения всех типов. Да, некоторые места можно написать короче и элегантнее, однако цель была в наглядности кода.

Код целиком

Если Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr" ) > 0 Тогда
// серверный вариант
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Srvr color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 6 );
ИмяСервера = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
// теперь ищем имя базы
Поиск1 = Найти ( СтрокаСоединенияИнформационнойБазы (), "Ref color: red;">);
ПодстрокаПоиска = Сред ( СтрокаСоединенияИнформационнойБазы (), Поиск1 + 5 );
ИмяБазы = Лев ( ПодстрокаПоиска , Найти ( ПодстрокаПоиска , """" ) - 1 );
Иначе
// для других способов подключения алгоритм не актуален
Возврат;
КонецЕсли;

Коннектор = Новый COMОбъект ( "v82.COMConnector" );
Агент = Коннектор . ConnectAgent ( ИмяСервера );
Кластеры = Агент . GetClusters ();
Для каждого Кластер из Кластеры Цикл
АдминистраторКластера = "Имя администратора кластера" ;
ПарольКластера = "Пароль администратора кластера" ;
Агент . Authenticate ( Кластер , АдминистраторКластера , ПарольКластера );
Процессы = Агент . GetWorkingProcesses ( Кластер );
Для каждого Процесс из Процессы Цикл
Порт = Процесс . MainPort ;
// теперь есть адрес и порт для подключения к рабочему процессу
РабПроц = Коннектор . ConnectWorkingProcess ( Имяервера + ":" + СтрЗаменить ( Порт , Символы . НПП , "" ));
РабПроц . AddAuthentication ( "Имя администратора БД" , "Пароль администратора БД" );

Базы = Агент . GetInfoBases ( Кластер );
Для каждого База из Базы Цикл
Если База . Name = ИмяБазы Тогда
ИнформационнаяБаза = База ;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИнформационнаяБаза = "" Тогда
// база не найдена
КонецЕсли;

Сеансы = Агент . GetInfoBaseSessions ( Кластер , ИнформационнаяБаза );
Для каждого Сеанс из Сеансы Цикл
Если нРег ( Сеанс . AppID ) = "backgroundjob" ИЛИ нРег ( Сеанс . AppID ) = "designer" Тогда
// если это сеансы конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Сеанс . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
Агент . TerminateSession ( Кластер , Сеанс );
КонецЦикла;

СоединенияБазы = Агент . GetInfoBaseConnections ( Кластер , ИнформационнаяБаза );
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Если нРег ( Соединение . Application ) = "backgroundjob" ИЛИ нРег ( Соединение . Application ) = "designer" Тогда
// если это соединение конфигуратора или фонового задания, то не отключаем
Продолжить;
КонецЕсли;
Если Соединение . UserName = ИмяПользователя () Тогда
// это текущий пользователь
Продолжить;
КонецЕсли;
РабПроц . Disconnect ( Соединение );
КонецЦикла;
КонецЦикла;
КонецЦикла;

При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:

  1. Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
  2. Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
  3. Меньший расход ресурсов операционной системы.

В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:

  1. В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.
  2. При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
  3. При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.

1.1 Порядок установки COM-соединения

Для организации доступа к данным 1С:Предприятия 8.0 через COM -соединение, выполняется следующая последовательность действий:

Важно! В связи с отсутствием пользовательского интерфейса в COM-соеденении не все объекты, а также свойства и методы можно использовать в COM -соединении.

Объекты 1С:Предприятия, доступные извне через COM -соединение:

  1. Экспортируемые переменные и процедуры/функции модуля внешнего соединения
  2. Экспортируемые переменные и процедуры/функции общих модулей
  3. Включение и исключение модулей целиком с помощью установки свойств общих модулей
  4. Включение и исключение фрагментов общих модулей с помощью препроцессора
  5. Глобальный контекст 1С:Предприятия 8.0, за исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, . )

1.2 Модуль внешнего соединения

Как уже отмечалось обязанности модуля приложения при работе через COM -соединение, выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий ПриНачалеРаботыСистемы() и ПриЗавершенииРаботыСистемы(), в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.

Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.

1.3 Общие модули

Для общих модулей введены свойства "Клиент", "Сервер" и "ВнешнееСоединение". Они предназначены для определения в конфигурации использования модулей в клиент - серверном варианте и в режиме COM -соединения.

1.4 Объект "V8.COMConnector"

Строка соединения с ИБ представляет собой цепочку фрагментов вида Параметр=Значение. Фрагменты отделяются друг от друга символами ';'. Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки (").

Usr - имя пользователя;
Pwd - пароль.

Для файлового варианта определен параметр:

File - каталог информационной базы.

Для клиент-серверного варианта определены параметры:

Srvr - имя сервера 1С:Предприятия;
Ref - имя информационной базы на сервере.

Метод Connect возвращает ссылку на созданный объект COM -соединения.

Метод Connect устанавливает COM -соединение с информационной базой 1С:Предприятия 8.0 и возвращает ссылку на объект COM -соединение.

// Создается объект-коннектор
V8 = Новый COMObject ("V8.COMConnector");
// создается объект COM -соединение
Соединение = V8.Connect ("File=""c:\InfoBases\Trade""; Usr =""Director"";")

Авторизация доступа через COM -соединение возможна как с помощью параметров строки соединения «Usr» и «Pwd», так и через пользователя Windows, в любом случае должно быть право на «Внешнее соединение».

1.5 Объект "COM-соединение"

COM -соединение с информационной базой 1С:Предприятия предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому COM -соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

Кроме того, COM -соединение имеет дополнительный метод NewObject, с помощью которого можно создавать значения определенных типов.

тз = Соединение. NewObject ("ТаблицаЗначений");

Метод String Позволяет получать строковые представления значений 1С:Предприятия.

1.6. Особенности работы с COM -соединением

В Automation и в COM -соединении TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.

Имеется возможность организации пула COM-соединений. При этом на принимающей на сервере 1С:Предприятия ЗАРАНЕЕ создаются несколько объектов COM-соединения и на установку соединения требуется еще меньше времени, поскольку не нужно создавать новый объект.

Реализован новый объект ПостроительЗапроса, предназначенный для генерации текстов запросов на основании указанных настроек. Данный объект поддерживает функциональность построителя отчета, не относящуюся к выводу отчета в табличный документ и другим задачам, связанным с пользовательским интерфейсом. Данный объект может использоваться на сервере 1С:Предприятия и в COM -соединении.

Доступно использование COM -объектов при работе встроенного языка на сервере 1С:Предприятия.

Соединения кластера серверов 1С:Предприятия 8.1

Этот раздел содержит пояснения к списку соединений кластера серверов 1С:Предприятия, отображаемому в утилите администрирования клиент-серверного варианта работы. Подробная информация о работе утилиты администрирования клиент-серверного варианта работы содержится в главе "Утилита администрирования кластера серверов" книги "1С:Предприятие 8.1 Клиент-сервер".

Краткий и подробный список соединений

Утилита администрирования клиент-серверного варианта работы в различных ветках дерева объектов отображает список соединений кластера серверов в разрезе объекта текущей ветки.

Список соединений, отображаемый в ветке "Соединения" содержит краткий список всех соединений кластера серверов в целом, как это показано на рисунке.


В ветках "Процессы/<Имя_сервера>/Соединения" и "Рабочие серверы/<Имя_сервера>/Процессы/<Имя_сервера>/Соединения" также отображается краткий список соединений выбранного рабочего процесса.

В ветке "Информационные базы/<Информационная_база>/Соединения" отображается полный список соединений выбранной информационной базы.

Полный список соединений содержит максимально подробную информацию о каждом соединении. Для ее получения утилита администрирования кластера серверов устанавливает соединение не только с агентом центрального сервера кластера, но и с каждым из рабочих процессов (процесс rphost), которым принадлежат отображаемые соединения. При этом необходима аутентификация администратора каждой из информационных баз, которой принадлежат отображаемые соединения. Если аутентификация не выполнена, то в списке соединений отображается только краткая информация о соединениях. Соединения утилиты администрирования кластера серверов с рабочими процессами отображаются в списке соединений и могут оказать влияние на работу информационных баз, в частности на возможность перевода информационной базы в режим монопольного доступа.

Источники соединений

Среди свойств соединения имеется свойство "Приложение", которое определяет источник соединения. В зависимости от источника соединения могут использоваться для различных целей и оказывать различное влияние на работу информационных баз. Возможные источники соединений и особенности соединений от каждого из источников приведены в таблице.

"Да" в колонке "ИБ" означает, что соединение устанавливается с определенной информационной базой, требует аутентификации пользователя информационной базы и может оказывать влияние на работу информационной базы, в частности на возможность установки монопольного доступа к информационной базе. Для этих соединений возможно отображение свойств и принудительное удаление.

"Да" в колонке "Процесс" означает, что соединение устанавливается с рабочим процессом в целом и не требует аутентификации пользователя информационной базы. Эти соединения не мешают установке монопольного доступа к информационной базе, не требуют аутентификации пользователя информационной базы и не могут быть принудительно удалены. Для них также не возможно отображение диалога свойств.

Свойства соединений

В любом списке соединений имеется возможность просмотра свойств соединения. Диалог свойств содержит полную информацию о соединении, для получения которой необходимо соединение утилиты администрирования кластера серверов с рабочим процессом, которому принадлежит данное соединение, и аутентификация администратора информационной базы, которой принадлежит данное соединение. Если аутентификация администратора информационной базы не выполнена, то открытие диалога свойств соединения не возможно.


Отображение диалога свойств соединения возможно только для соединений с информационными базами, но не возможно для служебных соединений с кластером.

Соединения утилиты администрирования кластера серверов

  • утилита администрирования кластера серверов будет закрыта;
  • соединение утилиты администрирования кластера серверов с данным центральным сервером будет разорвано. Для этого в локальном меню ветки соответствующего центрального сервера необходимо выполнить пункт "Отсоединить" или "Refresh";
  • соединения утилиты администрирования кластера серверов с информационной базой будут явно разорваны этой утилитой (или другим ее экземпляром).

При первом получении списка соединений информационной базы соединения данного экземпляра утилиты администрирования кластера серверов могут быть не отображены, поскольку они устанавливаются в процессе получения информации о соединениях и на момент начала получения списка соединений могут отсутствовать. Их можно будет увидеть при повторном отображении списка соединений информационной базы.

Удаление (разрыв) соединений

Удаление соединений с информационной базой может быть выполнено путем выбора одного или нескольких соединений с информационной базой и выполнения пункта "Delete" локального меню списка соединений.

При удалении соединения консоль посылает на сервер сигнал на разрыв клиентского соединения и удаляет строку соединения из отображаемого списка без дополнительного запроса нового списка соединений. Действия сервера после получения сигнала зависят от состояния клиентского потока. Если клиентский поток находится в клиентском приложении, то соединение разрывается. Если клиентский поток находится на сервере 1С:Предприятия, то отреагировать на сигнал он может только при переходе на новую строку кода на встроенном языке. Если клиентский поток находится в сервере баз данных, то сигнал передается серверу баз данных. Сервер баз данных также не всегда может прервать выполнение запроса. Если передача сигнала на разрыв соединения не приводит к фактическому разрыву соединения, то при обновлении списка соединений данное соединение появится снова.

На практике часто возникает необходимость выгнать всех пользователей из 1С или завершить сеансы принудительно с последующей настройкой блокировки начала новых сеансов. Для чего это нужно? Для того чтобы разработчик мог спокойно применить все изменеия в конфигурации базы данных и пользователи не помешали ему в этом.

Включаем блокировку соединений с информационной базой 1C

Подключаемся на свой сервер 1С, открываем консоль кластеров, находи свою базу данных, прожимаем правой кнопкой мыши по базе и заходим в свойства нашей базы данных 1С.

Открываем свойства информационной базы 1С

Устанавливаем блокировку начала сеансов

Внимание: Также на время блокировки рекомендую останавливать все фоновые задания, отметив чекбоксом пункт Блокировка регламентных заданий включена.

Завершаем зависшие сеансы из консоли кластера серверов 1С

Удаляем все активные сеансы 1С через консоль кластера

Удаляем все активные сеансы 1С через консоль кластера

Внимание: Во избежание всемирного коллапса и хаоса, так как пользователи могут проработать весь день и ни разу не сохранить введёные или данные в документ, обязательно уведомлите их заранее и перед завершением сеанса сообщите дополнительно о вашем намерении и необходимости завершении их сеансов.

Получаем монополный доступ к информационной базе с кодом разрешения

Всё, блокировку настроили, сеансы подчистили. Как теперь попасть в информационную базу 1С? Запускаем 1С предприятие, выбираем нашу базу, нажимаем Изменить/Далее и в поле Дополнительные параметры запуска вводим нашь код разрешения через пробел от ключа /uc вначале параметра. Готово, Можно стартовать!

Читайте также: