Как завершить сеансы пользователей в 1С при обновлении конфигурации, если кнопка "Завершить сеансы и повторить" недоступна?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

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

Почему кнопка "Завершить сеансы и повторить" в Конфигураторе может быть недоступна?

Чтобы понять, как обойти эту проблему, давайте сначала выясним ее причину. Платформа 1С автоматически активирует кнопку "Завершить сеансы и повторить" в Конфигураторе только в тех случаях, когда она обнаруживает изменения в структуре метаданных. К таким изменениям относятся:

  1. Добавление, удаление или изменение типов реквизитов, табличных частей, измерений и ресурсов регистров.
  2. Добавление или удаление объектов метаданных (справочников, документов, отчетов и т.д.).
  3. Изменение свойств существующих объектов метаданных, которые влияют на структуру базы данных.

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

"Кустарный" метод: Временное добавление реквизита (и почему стоит искать альтернативы)

Многие разработчики, столкнувшись с проблемой неактивной кнопки, прибегают к следующему "кустарному" способу, как это описано в сообщении 1:

  1. Добавляем "ненужный" реквизит (например, с именем "УдалитьТест") в любой справочник или другой объект метаданных.
  2. Это действие изменяет структуру метаданных, что приводит к активации кнопки "Завершить сеансы и повторить".
  3. Используем эту кнопку для обновления базы данных.
  4. При следующем обновлении удаляем этот временный реквизит.

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

"Не кустарный" способ завершения через Конфигуратор: Изменение типа существующего реквизита

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

Давайте разберем этот процесс по шагам:

  1. Выбираем реквизит для модификации: Откроем Конфигуратор и найдем любой существующий реквизит в любом объекте метаданных (например, в справочнике, документе, регистре). Желательно выбрать реквизит, который:
    • Не является критичным для текущей работы.
    • Имеет простой тип данных (например, "Строка", "Число", "Булево"), который легко временно изменить и вернуть обратно.
  2. Временно изменяем тип данных: Дважды кликнем по выбранному реквизиту, чтобы открыть его свойства. Временно изменим его тип данных на какой-либо другой. Например, если реквизит был типа "Строка", изменим его на "Число".
  3. Возвращаем исходный тип данных: Сразу же после изменения, вернем тип данных реквизита к его исходному состоянию (в нашем примере, обратно на "Строка").
  4. Сохраняем конфигурацию: Сохраним изменения конфигурации базы данных (Ctrl+S или меню "Конфигурация" -> "Сохранить конфигурацию").
  5. Проверяем доступность кнопки: Мы увидим, что платформа 1С зафиксировала это "изменение" структуры метаданных, и кнопка "Завершить сеансы и повторить" (или просто "Обновить конфигурацию базы данных" с активной возможностью завершения сеансов) станет доступной.
  6. Применяем обновление: Теперь мы можем нажать эту кнопку, чтобы завершить сеансы пользователей и корректно обновить конфигурацию.

Преимущества этого метода:

Недостатки:

Штатные способы завершения сеансов из режима "Предприятие"

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

Механизм блокировки работы пользователей (Библиотека Стандартных Подсистем - БСП)

В большинстве современных типовых конфигураций 1С (например, 1С:ERP, 1С:Бухгалтерия, 1С:ЗУП и др.) используется Библиотека Стандартных Подсистем (БСП), которая включает в себя мощный и гибкий механизм для управления сеансами и блокировки работы пользователей. Этот механизм является основным рекомендуемым способом для таких операций.

Давайте разберем этот механизм подробнее:

  1. Доступ к функционалу: Для доступа к механизму блокировки работы пользователей, нам необходимо войти в систему в режиме "Предприятие" под пользователем с административными правами. Затем перейдем в раздел "Администрирование" (или схожий раздел, в зависимости от конфигурации) и найдем пункт "Обслуживание". В нем мы увидим ссылку "Блокировка работы пользователей" (сообщение 3 и 10).
  2. Настройка блокировки: Открыв форму блокировки, мы сможем:
    • Установить время начала и окончания блокировки: Это позволяет заранее запланировать период, когда система будет недоступна для обычных пользователей.
    • Добавить сообщение для пользователей: Это критически важный пункт. Мы можем написать предупреждение о предстоящих работах, дать рекомендации по сохранению данных и указать примерное время возобновления работы. Это значительно снижает стресс у пользователей и предотвращает потерю данных.
    • Установить флаг "Установить блокировку": Активация этого флага и применение настроек приведет к следующим действиям.
    • Задать "Код для разблокировки": Этот код позволит администратору (или любому, кто его знает) войти в систему, даже когда блокировка активна. Это необходимо для проведения технических работ.
  3. Применение блокировки: После активации блокировки система выполнит следующие действия:
    • Автоматическое завершение активных сеансов: Все активные сеансы обычных пользователей будут завершены. Часто перед этим пользователи увидят информационное сообщение о блокировке, дающее им время на сохранение данных.
    • Запрет на новый вход: Пользователи не смогут войти в систему до тех пор, пока блокировка не будет снята или не истечет установленное время.

Важные нюансы для клиент-серверного варианта:

Преимущества использования механизма БСП:

Блокировка работы пользователей (общий механизм платформы)

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

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

Другие способы управления сеансами (для общего развития)

Хотя автор темы и указал на отсутствие доступа к консоли кластера, полезно знать и о других методах управления сеансами, которые являются частью комплексного подхода к администрированию 1С.

Через Консоль кластера серверов 1С

Если бы у нас был доступ к консоли кластера серверов 1С, это был бы наиболее полный и гибкий инструмент для управления сеансами в клиент-серверном варианте (сообщение 4). Через Консоль кластера мы можем:

  1. Просмотреть все активные сеансы: Мы увидим детальную информацию о каждом сеансе (пользователь, приложение, компьютер, время активности и т.д.).
  2. Принудительно завершить сеансы: Мы можем выбрать один или несколько сеансов и принудительно завершить их. Это особенно полезно для "зависших" сеансов, которые могут не отображаться другими средствами платформы.

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

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

Использование встроенного языка 1С (программно)

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

Мы можем написать код, который будет находить сессии по определенным параметрам (например, по имени пользователя, приложению, компьютеру) и завершать их программно. Это дает максимальную гибкость и возможность автоматизации.

Давайте посмотрим на пример такого программного завершения сеансов:


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

// Получаем список всех активных сеансов
Сеансы = РаботаССессиямиПользователей.ПолучитьСеансы();

// Создаем список пользователей, сеансы которых нужно завершить
ПользователиДляЗавершения = Новый Массив();
ПользователиДляЗавершения.Добавить("Иванов И.И.");
ПользователиДляЗавершения.Добавить("Петров П.П.");

Для Каждого ТекущийСеанс Из Сеансы Цикл
    // Проверяем, является ли пользователь текущего сеанса одним из тех, кого нужно завершить
    Если ПользователиДляЗавершения.Найти(ТекущийСеанс.Пользователь.Наименование) <> Неопределено Тогда
        Попытка
            // Завершаем сеанс
            РаботаССессиямиПользователей.ЗавершитьСеанс(ТекущийСеанс.Идентификатор);
            Сообщить("Сеанс пользователя " + ТекущийСеанс.Пользователь.Наименование + " (ИД: " + ТекущийСеанс.Идентификатор + ") успешно завершен.");
        Исключение Как Искл
            Сообщить("Ошибка при завершении сеанса пользователя " + ТекущийСеанс.Пользователь.Наименование + ": " + Искл.Описание);
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

// Пример завершения всех сеансов, кроме административного
// (ИСПОЛЬЗУЙТЕ С ОСТОРОЖНОСТЬЮ!)
// Для Каждого ТекущийСеанс Из РаботаССессиямиПользователей.ПолучитьСеансы() Цикл
//     // Исключаем текущий сеанс администратора и другие критичные сеансы
//     Если ТекущийСеанс.Пользователь.Наименование <> "Администратор" ИЛИ ТекущийСеанс.Идентификатор <> РаботаССессиямиПользователей.ИдентификаторТекущегоСеанса() Тогда
//         Попытка
//             РаботаССессиямиПользователей.ЗавершитьСеанс(ТекущийСеанс.Идентификатор);
//             Сообщить("Сеанс ИД " + ТекущийСеанс.Идентификатор + " завершен.");
//         Исключение Как Искл
//             Сообщить("Ошибка завершения сеанса ИД " + ТекущийСеанс.Идентификатор + ": " + Искл.Описание);
//         КонецПопытки;
//     КонецЕсли;
// КонецЦикла;

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

Недостатки: Требует квалификации разработчика для написания и отладки кода.

Через Конфигуратор (для файлового режима)

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

  1. Открыть Конфигуратор.
  2. Перейти в меню "Администрирование" → "Активные пользователи".
  3. Выбрать нужные сеансы в списке и нажать кнопку "Завершить сеанс".

Этот метод не относится к проблеме автора (который работает с серверной базой), но является стандартным для файловых баз.

Рекомендации и лучшие практики

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

  1. Предупреждайте пользователей заранее: Перед любыми работами, требующими завершения сеансов, обязательно информируйте пользователей о предстоящих технических работах, их продолжительности и необходимости сохранить данные. Используйте все доступные каналы связи (электронная почта, внутренние чаты, объявления).
  2. Используйте штатные механизмы блокировки: Механизмы блокировки работы пользователей (особенно через БСП) предпочтительнее "кустарных" способов, так как они предоставляют пользователям информацию и дают возможность мягко завершить работу.
  3. Планируйте работы в нерабочее время: По возможности, проводите все обновления и технические работы вне рабочего времени, когда активность пользователей минимальна.
  4. Обеспечьте адекватные права доступа: Убедитесь, что администраторы системы имеют достаточные права для выполнения всех необходимых операций, включая, по возможности, доступ к консоли кластера серверов 1С.
  5. Разрабатывайте в отдельной базе: Всегда ведите разработку и тестирование в отдельной (тестовой) базе данных. Внесение изменений в боевую базу должно происходить только после тщательного тестирования и по согласованному регламенту.

В итоге, проблема с недоступностью кнопки "Завершить сеансы и повторить" в Конфигураторе при изменении только кода модулей вполне решаема. Мы рассмотрели как "хитрость" с изменением типа реквизита прямо в Конфигураторе, так и более предпочтительные штатные механизмы платформы 1С и БСП, доступные из режима "Предприятие". Выбор конкретного метода будет зависеть от наших прав доступа, используемой конфигурации и требований к "мягкости" завершения сеансов. Для автоматизации этого процесса можно использовать расширение для принудительного завершения сеансов пользователей.

← На главную