Зависла 1С или держит блокировку: как завершить сеанс и освободить базу
Содержание
Снять задачу в 1С можно на трёх уровнях: закрыть зависшее окно через диспетчер задач Windows, завершить сеанс пользователя
в консоли кластера серверов (или командой rac) и, в крайнем случае, оборвать соединение прямо в СУБД. Если завис только интерфейс у одного человека — хватает диспетчера задач. Если база «занята», документы не проводятся с ошибкой блокировки, а виновник давно ушёл домой — нужен сеанс в консоли.
Порядок всегда один: от мягкого к жёсткому. Сначала попросить пользователя закрыть программу, затем завершить сеанс штатно, и только потом — убивать процесс или соединение в СУБД.
| Способ | Когда применять | Что потеряется |
|---|---|---|
| Диспетчер задач Windows | Окно 1С не отвечает на одном компьютере | Несохранённые данные в открытых формах |
| Форма «Активные пользователи» в 1С | Нужно выгнать сеанс без доступа к серверу | Незавершённая операция пользователя |
Консоль кластера / rac | Клиент-серверная база, сеанс держит блокировку или лицензию | Транзакция откатится |
| СУБД (MS SQL, PostgreSQL) | Сеанс в 1С уже удалён, а блокировка в базе осталась | Транзакция откатится, у сеанса будет ошибка |
Откуда берутся зависшие сеансы и блокировки
Каждый запуск 1С — это сеанс. В клиент-серверном варианте сеанс живёт на сервере 1С отдельно от окна на компьютере пользователя. Закрыли окно аварийно — сеанс на сервере может ещё какое-то время висеть и занимать лицензию.
Блокировки возникают внутри транзакций. Проведение документа, закрытие месяца , обновление цен — всё это транзакции. Пока транзакция не завершена, записи, которые она меняет, заняты. Другой пользователь, который хочет записать те же данные, ждёт.
Типичные виновники:
- 🐢 долгая операция — закрытие месяца, перепроведение за год, расчёт себестоимости;
- 🔁 «зависшее» фоновое или регламентное задание — обмен, загрузка курсов, полнотекстовый индекс;
- 💥 аварийно закрытый клиент, чей сеанс остался на сервере;
- 🧱 обработка или доработка, которая открывает транзакцию и ждёт ответа пользователя;
- 🌐 оборванное сетевое соединение по VPN или с терминального сервера.
Что видит пользователь, которому мешают:
Превышено время ожидания захвата блокировки
Конфликт блокировок при выполнении транзакции
Ошибка блокировки объекта. Объект уже заблокирован
Первая строка значит, что транзакция ждала занятые данные дольше допустимого и сдалась. Вторая — взаимоблокировка: два сеанса держат данные, нужные друг другу, и СУБД или сервер 1С жертвует одним из них. Третья — объектная блокировка: документ открыт на редактирование в другом сеансе.
Как снять задачу 1С в диспетчере задач Windows
Это самый частый смысл фразы «снять задачу»: окно 1С побелело, на клики не реагирует, «Не отвечает» в заголовке.
- Подождите 2–3 минуты. Тяжёлый отчёт или проведение могут просто работать, а окно в это время не перерисовывается.
- Нажмите
Ctrl+Shift+Esc— откроется диспетчер задач. - На вкладке «Процессы» найдите «1С:Предприятие». На вкладке «Подробности» это процесс
1cv8.exe(толстый клиент и конфигуратор) или1cv8c.exe(тонкий клиент). - Выделите его и нажмите «Снять задачу».
Всё, что не было записано, пропадёт. Если в это время проводился документ, транзакция откатится — документ останется непроведённым, а не «наполовину проведённым».
На терминальном сервере процессов 1cv8c.exe будет много — по одному на каждого пользователя. Добавьте на вкладке «Подробности» столбец «Имя пользователя» и снимайте только процесс нужного человека. Снять чужой процесс может только пользователь с правами администратора сервера.
Из командной строки то же делает taskkill:
rem Посмотреть все процессы 1С
tasklist /FI "IMAGENAME eq 1cv8c.exe"
rem Завершить конкретный процесс по PID
taskkill /PID 12345 /F
Не используйте taskkill /IM 1cv8c.exe /F на терминальном сервере — команда закроет 1С у всех пользователей сразу.
После снятия задачи в клиент-серверной базе сеанс может остаться на сервере. Если программа при повторном входе ругается на нехватку лицензий или данные всё ещё заблокированы — переходите к следующим разделам.
Как завершить сеанс 1С изнутри программы
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) есть форма «Активные пользователи». Она открывается из раздела Администрирование → Обслуживание. Нужны права администратора.
- Откройте форму «Активные пользователи». В списке видны пользователь, компьютер, приложение (тонкий клиент, фоновое задание, конфигуратор) и время начала сеанса.
- Выделите строку и нажмите «Завершить сеанс».
- Обновите список и проверьте, что строка исчезла.
В клиент-серверной базе программа может спросить параметры администрирования кластера — логин и пароль администратора кластера, если он задан. В файловой базе принудительно завершить чужой сеанс из этой формы нельзя: там нет сервера, который бы им управлял.
Если нужно выгнать всех (например, перед обновлением), в том же разделе есть «Блокировка работы пользователей». Включите её, укажите сообщение и код разрешения. Пользователи получат предупреждение и будут отключены, а администратор войдёт с параметром запуска /UC<код>.
Перед блокировкой отправьте людям сообщение заранее, минут за 10–15. Тогда меньше шансов, что кто-то потеряет недописанный документ.
Снятие задачи через консоль кластера серверов 1С
Для клиент-серверной базы это основной и самый надёжный способ. Консоль — оснастка «Администрирование серверов 1С:Предприятия», ставится вместе с сервером 1С.
Найти сеанс-виновник
- Откройте консоль и разверните дерево:
Центральные серверы 1С:Предприятия → имя сервера → Кластеры → кластер → Информационные базы → ваша база. - Откройте узел «Сеансы». Здесь видно пользователя, компьютер, приложение, время начала и время последней активности.
- Откройте узел «Блокировки» той же базы. В нём видно, какой сеанс что держит. Если документы не проводятся у всех — ищите сеанс, который упоминается в блокировках чаще остальных или держит их дольше всех.
Полезные столбцы в «Сеансах» — время вызова, объём данных, время в СУБД. Сеанс, у которого текущий вызов идёт 40 минут при обычных 2–3 секундах, — главный подозреваемый.
Удалить сеанс
- Щёлкните правой кнопкой по строке сеанса.
- Выберите «Удалить».
- Подтвердите.
Сервер отправит сеансу сигнал завершения. Его активная транзакция откатится, блокировки освободятся, лицензия вернётся в пул. Пользователь увидит сообщение о разрыве соединения.
Если удаляете сеанс фонового задания (приложение «Фоновое задание»), регламентная операция прервётся. Закрытие месяца или обмен придётся запустить заново.
Если сеанс после удаления не исчезает несколько минут, проверьте узел «Соединения»: зависшее соединение тоже можно разорвать. Завершать весь рабочий процесс (rphost) — крайняя мера: он обслуживает сразу много пользователей, и все они получат ошибку. Делайте это только вне рабочего времени или предупредив людей.
То же самое из командной строки: rac
Если консоли под рукой нет или нужно автоматизировать, используйте утилиту rac. Ей нужна запущенная служба сервера администрирования ras (по умолчанию порт 1545).
rem Узнать идентификатор кластера
rac cluster list
rem Список сеансов кластера
rac session list --cluster=<uuid кластера>
rem Завершить сеанс
rac session terminate --cluster=<uuid кластера> --session=<uuid сеанса>
Если кластер защищён паролем, к командам добавляются параметры администратора кластера. Их точные имена и остальные возможности, включая просмотр блокировок, покажет rac help session и rac help lock.
Блокировки на уровне СУБД: когда 1С уже не помогает
Бывает, что сеанс в консоли удалён, а блокировка в базе данных осталась. Чаще всего так выглядит соединение, которое СУБД не успела закрыть после сбоя рабочего процесса. Тогда смотрят на сам SQL-сервер.
Действуйте здесь только при уверенности, что соединение принадлежит зависшему сеансу. Убитое соединение откатывает транзакцию, а рабочий процесс 1С, которому оно принадлежало, получит ошибку.
Microsoft SQL Server
В SQL Server Management Studio откройте «Монитор активности» — в разделе «Процессы» есть столбец «Блокирован кем» (blocking). Или запросом:
-- Кто кого блокирует
SELECT session_id, blocking_session_id, wait_type, wait_time, status, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
-- Завершить соединение-виновник (номер берётся из blocking_session_id)
KILL 57;
Убивать нужно голову цепочки — то соединение, которое само никем не блокировано, но блокирует других.
PostgreSQL
-- Активные соединения базы 1С
SELECT pid, usename, state, query_start, wait_event_type, left(query, 80)
FROM pg_stat_activity
WHERE datname = 'имя_базы';
-- Сначала мягко: отменить текущий запрос
SELECT pg_cancel_backend(12345);
-- Если не помогло: закрыть соединение
SELECT pg_terminate_backend(12345);
pg_cancel_backend прерывает только выполняемый запрос, соединение остаётся. pg_terminate_backend закрывает его целиком.
Особенности файловой базы
В файловом варианте нет кластера и консоли. Каждый клиент работает с файлом 1Cv8.1CD напрямую, а блокировки ставятся на уровне файловой системы.
Что из этого следует:
- 🖥 снять задачу можно только на том компьютере, где запущена 1С — диспетчером задач или
taskkill; - 📂 если база лежит в сетевой папке, увидеть, кто её держит, можно на сервере с папкой: «Управление компьютером → Общие папки → Открытые файлы». Там же файл можно закрыть, но это оборвёт работу пользователя;
- 🔒 рядом с базой лежит служебный файл блокировки
1Cv8.1CL. Его не удаляют, пока в базе кто-то есть.
Удалять служебные файлы рядом с 1Cv8.1CD, пока база открыта хотя бы у одного пользователя, нельзя. Сначала убедитесь, что все процессы 1С закрыты на всех компьютерах, и сделайте копию каталога базы.
Если база «занята», а на компьютерах 1С никто не запускал, проверьте, нет ли на самом сервере процесса веб-публикации (Apache или IIS с модулем 1С) — он тоже открывает файловую базу . Перезапуск веб-сервера отключит всех, кто работает через браузер.
Как не допускать зависших задач
Снимать задачи придётся реже, если настроить несколько вещей заранее.
На сервере 1С. В свойствах информационной базы в консоли кластера есть параметры засыпания пассивного сеанса и завершения спящего сеанса. Задайте, например, 30 минут на засыпание и несколько часов на завершение. Брошенные сеансы будут сами освобождать лицензии.
Время ожидания блокировки. В конфигураторе: Администрирование → Параметры информационной базы → Время ожидания блокировки данных. Слишком маленькое значение даёт ложные ошибки у пользователей, слишком большое — долгое «зависание» перед ошибкой. Обычно хватает 20–60 секунд.
Тяжёлые операции — вне рабочего времени. Закрытие месяца, перепроведение, пересчёт итогов, обновление конфигурации ставьте на вечер. Регламентные задания с обменами разнесите по времени, чтобы они не пересекались.
Режим блокировок. В конфигурациях с автоматическим режимом управления блокировками блокируются целые таблицы, и конфликты случаются чаще. Современные типовые конфигурации работают в управляемом режиме. Если у вас доработанная старая конфигурация, перевод на управляемый режим — задача для программиста, но эффект заметный.
Сеть. Нестабильный VPN — частая причина «призрачных» сеансов. Для удалённых сотрудников надёжнее терминальный сервер или веб-клиент, чем тонкий клиент через медленный канал.