Завершение всех сеансов 1С без доступа к кластеру: универсальный способ через расширение
База данных - Инструменты администратора БД
Завершение всех сеансов 1С без доступа к кластеру: простой технический способ через расширение
Предыстория
Ситуация знакома многим разработчикам и консультантам 1С: нужно обновить базу клиента, подключить или удалить расширение, изменить структуру данных или выполнить другую операцию, для которой требуется исключительный доступ к информационной базе.
Открываем Конфигуратор, запускаем обновление конфигурации базы данных и получаем сообщение о том, что база занята активными пользователями.
Для клиент-серверной базы стандартный путь обычно связан с администрированием кластера 1С. Нужен доступ к консоли администрирования, права администратора кластера, пароль, доступ к серверу или настроенный RAS/rac.
На практике все это есть далеко не всегда. Сервер может обслуживаться отдельной IT-службой, подрядчиком или внутренним системным администратором клиента. Разработчику дают доступ к базе и Конфигуратору, но не дают административный доступ к кластеру.
В файловой базе ситуация другая, но результат тот же: кто-то оставил открытый тонкий клиент, пользователь ушел домой, а Конфигуратор не может получить исключительный доступ.
При этом сама платформа 1С уже умеет принудительно завершать мешающие сеансы. Задача заключается только в том, чтобы вызвать штатный сценарий, при котором Конфигуратор предложит кнопку «Завершить сеансы и повторить».
Суть решения
Создаем небольшое техническое расширение, которое содержит собственный объект данных. В моем случае это независимый непериодический регистр сведений.
В расширении нет прикладной логики, форм, команд, общих модулей, фоновых заданий, COM-соединений, вызовов RAS или rac.
Оно вообще не пытается самостоятельно завершать пользовательские сеансы.
Его задача значительно проще: создать реальное изменение структуры информационной базы.
После подключения расширения выполняем обычное:
Конфигурация → Обновить конфигурацию базы данных.
Поскольку в расширении появился новый объект хранения данных, платформе необходимо создать соответствующую структуру в базе.
Для такой операции требуется исключительная блокировка.
Если в информационной базе в этот момент работают пользователи и их сеансы мешают получить необходимую блокировку, Конфигуратор показывает штатное окно ошибки исключительной блокировки.
В этом окне появляется нужная команда:
«Завершить сеансы и повторить».
Нажимаем ее, после чего дальнейшую работу выполняет сама платформа.
Важно понимать: расширение никого не отключает. Оно лишь создает изменение структуры, из-за которого Конфигуратору требуется исключительный доступ. Завершение сеансов выполняется стандартным механизмом платформы 1С.
Где это полезно
Особенно удобен такой способ на клиент-серверных базах, где у специалиста есть:
-
доступ к информационной базе;
-
административные права внутри конфигурации;
-
возможность открыть базу в Конфигураторе;
-
возможность устанавливать расширения и обновлять структуру базы;
но нет:
-
доступа к консоли кластера;
-
логина и пароля администратора кластера;
-
доступа по RDP к серверу;
-
открытого RAS;
-
возможности использовать rac.
Получается типичная ситуация: разработчик имеет право изменить структуру конфигурации, но не имеет доступа к инфраструктуре сервера, чтобы завершить забытый пользовательский сеанс.
Для одной конкретной задачи, получения исключительного доступа перед техническими работами, можно не обращаться к кластеру напрямую, а использовать штатное поведение Конфигуратора.
Подходит ли способ для файловой базы
Да.
В файловом варианте нет отдельного кластера серверов 1С, но изменение структуры информационной базы также требует освобождения базы от мешающих подключений.
Если кто-то оставил открытый клиент 1С на другом компьютере, при попытке выполнить структурное изменение Конфигуратор также должен получить необходимый режим блокировки.
Поэтому принцип не зависит от SQL Server, PostgreSQL или файлового варианта.
Расширение не работает с сервером СУБД напрямую и не вызывает административные API.
Оно всего лишь добавляет собственный объект данных и тем самым создает необходимость обновить структуру информационной базы.
Почему именно расширение
Технически похожий эффект можно получить, если добавить новый объект непосредственно в основную конфигурацию.
Но делать это только ради получения блокировки неудобно.
Во-первых, основная конфигурация получает ненужное изменение.
Во-вторых, в типовом решении могут возникнуть вопросы с поддержкой.
В-третьих, после выполнения работ технический объект придется удалять из основной конфигурации.
В-четвертых, сама задача никак не относится к прикладной логике базы.
Расширение в этом плане удобнее: оно существует отдельно, его можно подключить, применить, использовать и затем удалить.
При этом не требуется заимствовать объекты основной конфигурации. Благодаря этому подход не привязан к конкретному прикладному решению и может использоваться в БП, УТ, ЗУП, КА, ERP, УНФ, Рознице и других конфигурациях при условии поддержки необходимых возможностей платформы.
Создаем расширение
Открываем информационную базу в режиме Конфигуратор.
Переходим:
Конфигурация → Расширения конфигурации.
Создаем новое расширение.
Например:
Имя:
РПП_АварийноеЗавершениеСеансов
Назначение:
Дополнение
Префикс:
РПП_
Название и префикс принципиального значения не имеют. Можно использовать свои.
Главное, чтобы по названию было понятно, что это временный технический объект, а не часть бизнес-логики конфигурации.
Режим совместимости
Для такого расширения не требуется функциональность новых платформ.
Поэтому разумно использовать достаточно старый режим совместимости расширения, если он подходит вашей среде.
В моем варианте установлен:
Режим совместимости расширения конфигурации = 8.3.12.
Это снижает вероятность ситуации, когда техническое расширение, созданное на новой платформе, невозможно открыть на более старой рабочей версии.
Если создаете расширение самостоятельно, обязательно проверьте это свойство перед выгрузкой.
Добавляем регистр сведений
Внутри расширения создаем новый регистр сведений.
Например:
Имя:
РПП_АварийнаяБлокировкаСеансов
Название может быть любым. Регистр не блокирует пользователей и не хранит их сеансы. Имя отражает только техническое назначение расширения.
Настройки регистра:
Периодичность:
Непериодический
Режим записи:
Независимый
Стандартные команды можно отключить.
Формы создавать не требуется.
Полнотекстовый поиск не нужен.
Итоги среза первых и последних не нужны.
Никакой пользовательской функции у регистра нет.
Добавляем одно измерение
Чтобы у регистра была минимальная структура хранения, добавляем одно измерение.
Например:
Имя:
Ключ
Тип:
Строка
Длина:
1
Этого достаточно.
Итоговая структура расширения выглядит примерно так:
Расширение
Регистры сведений
РПП_АварийнаяБлокировкаСеансов
Измерения
Ключ
Никаких модулей программного кода добавлять не нужно.
Почему регистр вызывает нужное окно
Если расширение содержит только программный код или изменение поведения формы, платформа не обязательно должна менять физическую структуру информационной базы.
В таком случае нужной ситуации с исключительной блокировкой может не возникнуть.
Нам нужен объект, для которого должна появиться собственная структура хранения.
Регистр сведений для этого подходит очень хорошо.
После первого применения расширения платформе необходимо создать структуру хранения регистра.
Дальше цепочка простая:
Подключаем расширение
появляется новый объект данных
требуется изменение структуры базы
запускаем обновление конфигурации базы данных
требуется исключительная блокировка
активные сеансы мешают получить блокировку
Конфигуратор показывает ошибку
появляется «Завершить сеансы и повторить»
Никакого обхода механизмов безопасности здесь нет. Используется обычное поведение платформы при структурном обновлении информационной базы.
Как использовать расширение
После создания или загрузки расширения сохраняем изменения.
Дальше в Конфигураторе выполняем:
Конфигурация → Обновить конфигурацию базы данных.
Если информационная база свободна, структура просто обновится.
Если исключительную блокировку получить невозможно, Конфигуратор покажет сообщение о том, что база заблокирована активным сеансом.
В окне будут доступны стандартные варианты:
-
Отмена;
-
Повторить;
-
Завершить сеансы и повторить.
Выбираем последний вариант.
После этого Конфигуратор пытается завершить мешающие сеансы и повторяет операцию обновления.
Когда база освобождена, можно выполнять запланированные технические работы.
Важное предупреждение
Кнопка завершает сеансы принудительно.
Если пользователь в этот момент редактирует документ, вводит большой текст, выполняет обработку или еще не записал изменения, его работа может быть потеряна.
Поэтому этот прием не стоит использовать как обычный ежедневный способ «выгнать всех из базы».
Нормальный сценарий применения выглядит так:
-
предупредить пользователей;
-
дождаться окончания рабочего времени или согласованного окна;
-
убедиться, что большинство пользователей вышли;
-
использовать принудительное завершение только для оставшихся сеансов;
-
выполнить технические работы.
То есть это инструмент для обслуживания базы, а не механизм управления пользователями.
Нужно ли оставлять расширение подключенным
Нет.
Более того, для этого сценария удобнее использовать его как временный технический инструмент.
После первого подключения структура регистра уже создана.
Если расширение оставить в базе и ничего в нем не менять, при следующем обновлении нового структурного изменения может не быть.
Следовательно, не будет и гарантированной причины снова получать исключительную блокировку именно из-за этого расширения.
Поэтому рабочая схема такая:
Подключили расширение
применили изменение структуры
завершили мешающие сеансы
выполнили технические работы
удалили расширение
Когда инструмент понадобится снова, расширение можно подключить заново.
После повторного подключения снова появляется изменение структуры и снова возникает нужный сценарий.
Что происходит при удалении
Удаление расширения также изменяет структуру информационной базы, поскольку добавленный технический объект исчезает.
Поэтому после удаления расширения необходимо штатно применить изменение конфигурации базы данных.
Это еще одна причина не держать такой инструмент постоянно подключенным.
Он ничего не дает пользователям и не участвует в работе прикладной конфигурации.
Его назначение одно: временно создать структурное изменение, необходимое для получения штатного диалога исключительной блокировки.
Что хранится в регистре
Ничего.
Записи в регистр создавать не нужно.
Он не является журналом сеансов, таблицей блокировок или списком пользователей.
Измерение Ключ добавлено только для формирования минимальной нормальной структуры регистра.
Можно создать более сложный объект, добавить ресурсы или реквизиты, но практического смысла в этом нет.
Чем меньше техническое расширение, тем проще его поддерживать и переносить между базами.
Почему не внешняя обработка
На первый взгляд может показаться удобнее сделать внешнюю обработку с кнопкой «Завершить всех пользователей».
Но универсальное программное завершение чужих сеансов значительно сложнее.
Для серверной базы сразу появляются зависимости от инфраструктуры:
-
кластер серверов;
-
административные права;
-
аутентификация;
-
RAS;
-
rac;
-
версия платформы;
-
доступность сервера;
-
требования безопасности.
В нашем варианте все эти вопросы отсутствуют.
Расширение не управляет соединениями напрямую.
Оно передает задачу тому компоненту, который уже имеет штатный механизм работы с блокирующими сеансами, Конфигуратору.
Ограничения
У способа есть несколько важных ограничений.
Нужен доступ к Конфигуратору
Если специалист не может открыть базу в Конфигураторе и управлять расширениями, применить этот способ не получится.
Нужны права на обновление базы
Одного доступа к Конфигуратору недостаточно.
Пользователь должен иметь возможность подключать расширения и обновлять конфигурацию базы данных.
Завершение сеансов действительно принудительное
Несохраненная работа пользователей может быть потеряна.
Использовать кнопку нужно осознанно.
Расширение не заменяет консоль кластера
Этот способ не позволяет:
-
просматривать рабочие процессы;
-
управлять лицензиями;
-
завершать один произвольный сеанс;
-
анализировать соединения;
-
менять параметры рабочего сервера;
-
администрировать кластер;
-
управлять регламентными заданиями.
Он решает только одну задачу: помогает получить исключительный доступ к базе перед технической операцией, когда прямого доступа к управлению сеансами нет.
Короткий рецепт
Создаем расширение:
Имя:
РПП_АварийноеЗавершениеСеансов
Назначение:
Дополнение
Префикс:
РПП_
Режим совместимости:
8.3.12
Добавляем регистр сведений:
Имя:
РПП_АварийнаяБлокировкаСеансов
Периодичность:
Непериодический
Режим записи:
Независимый
Добавляем измерение:
Имя:
Ключ
Тип:
Строка
Длина:
1
Формы и модули не создаем.
Дальше:
-
подключаем расширение;
-
обновляем конфигурацию базы данных;
-
при ошибке исключительной блокировки нажимаем «Завершить сеансы и повторить»;
-
выполняем необходимые работы;
-
удаляем техническое расширение;
-
применяем изменение структуры после удаления.
Итог
Получается простой универсальный технический прием для случаев, когда нужно освободить информационную базу перед обновлением или другими структурными изменениями, но доступа к кластеру серверов 1С нет.
В расширении нет кода, нет внешних компонентов, нет обращения к RAS или rac и нет зависимости от объектов конкретной конфигурации.
Есть только один минимальный технический регистр сведений.
Он создает реальное изменение структуры базы, после чего Конфигуратор при невозможности получить исключительную блокировку предлагает штатную кнопку «Завершить сеансы и повторить».
Главное правило эксплуатации простое:
не держать расширение постоянно подключенным.
Использовали, выполнили работы, удалили.
В следующий раз подключили снова и получили новое структурное изменение.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.