Документ занят другим пользователем: как снять блокировку в 1С 8.3
Содержание
Чтобы разблокировать документ в 1С, нужно закрыть форму этого документа у того, кто его держит. В тексте ошибки 1С обычно называет пользователя и компьютер. Попросите коллегу закрыть документ или выйти из программы. Если сеанс завис или человек ушёл, администратор завершает его через «Активные пользователи» или консоль кластера серверов, и блокировка снимается сама.
Отдельного пункта «Разблокировать документ» в 1С нет. Блокировка живёт ровно столько, сколько живёт сеанс, который её поставил. Поэтому вся работа сводится к двум вопросам: кто держит объект и как аккуратно закрыть этот сеанс. Исключение — документы, закрытые датой запрета или правами: технически это не блокировка, и снимается она иначе. Инструкция подходит для 1С:Предприятия 8.3 с интерфейсом «Такси» в файловом и клиент-серверном варианте.
Какие бывают блокировки документа и как их отличить
Под словом «заблокирован» пользователи понимают четыре разных ситуации. Способ разблокировки зависит от того, какая из них у вас.
| Что видит пользователь | Что происходит | Как снять |
|---|---|---|
Ошибка блокировки объекта. Объект уже заблокирован с именем пользователя и компьютера | Документ открыт и изменён в другом сеансе | Закрыть форму или сеанс владельца |
Конфликт блокировок при выполнении транзакции с фразой о превышении времени ожидания | Другая транзакция пишет те же данные: проведение, закрытие месяца, обмен | Дождаться окончания операции или найти зависший процесс |
| Сообщение о запрете изменения данных на дату документа | Период закрыт датой запрета | Изменить дату запрета (нужны права) |
| Форма открывается только для просмотра, кнопки записи нет | Не хватает прав на изменение | Добавить права через группы доступа |
Первые две — настоящие блокировки платформы. Вторые две — ограничения прикладной логики и прав. Путать их не стоит: завершение чужого сеанса закрытый период не откроет.
Объектная блокировка
Её ставит платформа, когда пользователь начинает менять документ в форме. Достаточно поправить одно поле и не записать — документ уже занят. Пока форма открыта, второй человек может документ смотреть, но записать или провести не сможет. Блокировка снимается, когда владелец записывает и закрывает форму, закрывает её без сохранения или завершает сеанс.
Транзакционная блокировка
Её ставит сама операция записи. Когда бухгалтер проводит документ, платформа блокирует нужные записи регистров. Если в это время закрытие месяца или обмен держат те же данные, второй процесс ждёт. По умолчанию ожидание длится около 20 секунд, затем выходит ошибка конфликта блокировок. Обычно это разовая ситуация: повторите проведение через минуту.
Как узнать, кто заблокировал документ
Начните с текста ошибки. При объектной блокировке 1С пишет пользователя, компьютер, время начала сеанса и тип приложения. Этого почти всегда достаточно, чтобы позвонить коллеге.
Если в сообщении указан ваш же пользователь, значит, документ открыт у вас во втором окне или в другом сеансе под той же учётной записью. Так бывает, когда под одним логином работают несколько человек или программа запущена дважды.
Когда текст ошибки уже закрыт или не помог, смотрите список сеансов:
- Откройте
Главное меню → Сервис и настройки → Параметрыи включите флажокРежим технического специалиста(в части релизов он называется «Отображать команду “Все функции”»). - Выберите
Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. - Найдите сеанс с нужным пользователем и компьютером. В колонках видно время начала работы и приложение.
В Конфигураторе тот же список открывается через Администрирование → Активные пользователи.
Технологический журнал для повторяющихся конфликтов
Если транзакционные конфликты случаются регулярно, разовая проверка не поможет. Включите технологический журнал с событиями блокировок. Файл logcfg.xml кладут в папку conf каталога платформы на сервере 1С:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\v8logs\locks" history="24">
<event>
<eq property="name" value="TLOCK"/>
</event>
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<property name="all"/>
</log>
</config>
TTIMEOUT фиксирует превышение времени ожидания, TDEADLOCK — взаимоблокировки, TLOCK — сами управляемые блокировки. В записях есть номера сеансов и контекст: какая операция держала данные. history="24" хранит логи 24 часа.
Событие TLOCK на нагруженной базе пишет много. Включайте журнал на время диагностики и следите за местом на диске. Когда причина найдена, удалите logcfg.xml или уберите из него события.
Снять блокировку документа из самой программы
Порядок — от мягкого к жёсткому. Каждый следующий шаг ближе к потере чужих несохранённых данных.
Шаг 1. Договориться с владельцем
Позвоните или напишите тому, кого назвала 1С. Пусть запишет документ и закроет форму. Через секунду документ свободен, повторите запись. Это единственный способ, при котором никто ничего не теряет.
Шаг 2. Завершить сеанс через «Активные пользователи»
Подходит, если человек ушёл, а компьютер включён, или сеанс остался «висеть» после обрыва связи.
- Откройте список активных пользователей, как описано выше.
- Выделите сеанс владельца блокировки.
- Нажмите команду завершения сеанса в командной панели формы.
- В клиент-серверной базе программа попросит логин и пароль администратора кластера, если он задан.
После завершения сеанса объектная блокировка исчезает. Документ можно записывать.
Несохранённые изменения в завершённом сеансе пропадут. Если коллега полчаса заполнял табличную часть, всё это исчезнет. Завершайте чужой сеанс, только когда связаться с человеком нельзя.
Шаг 3. Файловая база: закрыть зависший процесс
В файловом варианте нет кластера и его консоли. Если сеанс завис, а список активных пользователей его не завершает:
- На компьютере владельца откройте диспетчер задач.
- Найдите процесс
1cv8c.exe(тонкий клиент) или1cv8.exe(толстый клиент, Конфигуратор). - Завершите процесс.
Если компьютер уже выключен, а в списке всё ещё висит его сеанс, попросите всех выйти из базы. Сеансы «призраки» в файловой базе исчезают, когда все пользователи отключились. Удалять служебные файлы из каталога базы вручную при работающих пользователях нельзя: это прямой путь к повреждению базы.
Разблокировка через консоль администрирования серверов 1С
В клиент-серверном варианте самый надёжный инструмент — консоль кластера. Она видит все сеансы, включая фоновые задания и подключения обмена, которых пользователь в программе не видит.
- Запустите «Администрирование серверов 1С Предприятия» на сервере или на компьютере администратора.
- Раскройте
Центральные серверы 1С:Предприятия → имя сервера → Кластеры → кластер → Информационные базы → нужная база. - Откройте ветку
Сеансы. Колонки показывают пользователя, компьютер, приложение и время начала. - Рядом есть ветка
Блокировки. В ней видно, какой сеанс держит объект. Это помогает, когда пользователь в ошибке назван, а сеансов у него несколько. - Щёлкните правой кнопкой по нужному сеансу и выберите
Удалить.
Если консоль не открывается и пишет про отсутствие компонента, на компьютере не зарегистрирована библиотека radmin.dll. Её регистрируют командой из папки bin установленной версии платформы, запустив командную строку от имени администратора:
cd "C:\Program Files\1cv8\8.3.25.1374\bin"
regsvr32 radmin.dll
Номер версии в пути замените на свой. Версия консоли и платформы на сервере должна совпадать.
Через утилиту rac
Без графической консоли сеансы смотрят утилитой rac. Нужен запущенный сервис администрирования ras.
rac cluster list
rac session list --cluster=<id кластера>
rac session terminate --cluster=<id кластера> --session=<id сеанса>
Идентификатор кластера берут из вывода первой команды, сеанса — из второй. Если кластер защищён паролем, добавьте параметры --cluster-user и --cluster-pwd. Полный список параметров выводит rac help session.
Если документ держит фоновое задание (например, обмен с сайтом или ЭДО), его сеанс в консоли отмечен как фоновый. После удаления задание запустится снова по расписанию. Если конфликт повторяется, разбирайтесь с регламентным заданием, а не с документом.
Блокировки на уровне СУБД: MS SQL и PostgreSQL
Управляемые блокировки 1С хранятся в менеджере блокировок кластера, а не в базе данных. СУБД держит свои блокировки на время транзакции. Смотреть туда стоит, когда в консоли кластера всё чисто, а запись документа висит минутами.
Завершение процесса в СУБД обрывает транзакцию 1С посередине. Платформа откатит изменения, а пользователь получит ошибку. Делайте это только когда понимаете, чей это запрос.
MS SQL Server
Найти, кто кого блокирует:
SELECT r.session_id, r.blocking_session_id, r.wait_type,
r.wait_time, s.host_name, s.program_name
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
WHERE r.blocking_session_id <> 0;
В колонке blocking_session_id — номер сеанса-виновника. По host_name видно, с какого сервера он пришёл: для 1С это сервер с рабочими процессами, а не компьютер пользователя. Завершить сеанс СУБД можно командой KILL <номер>.
PostgreSQL
SELECT pid, pg_blocking_pids(pid) AS blocked_by,
state, now() - xact_start AS duration, query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;
Сначала попробуйте отменить запрос: SELECT pg_cancel_backend(<pid>);. Если не помогло — SELECT pg_terminate_backend(<pid>);, это закрывает соединение целиком.
Связать процесс СУБД с конкретным пользователем 1С напрямую нельзя. Сопоставляйте по времени начала транзакции и по технологическому журналу.
Документ «не даёт изменить»: дата запрета и права доступа
Если сообщение говорит про запрет изменения данных, никакого сеанса искать не нужно. Бухгалтер закрыл период, и документы до этой даты защищены.
В 1С:Бухгалтерии 3.0 настройка находится в разделе Администрирование → Проведение документов: флажок «Дата запрета изменения» и ссылка на настройку дат. Дату можно задать общую или отдельно по организациям и пользователям. Чтобы поправить документ, ответственный временно сдвигает дату назад, вносит изменения и возвращает дату на место.
Правка документа в закрытом периоде меняет уже сданную отчётность. Сначала решите с главным бухгалтером, нужна ли уточнённая декларация, и только потом снимайте запрет.
Если форма открывается только для просмотра, дело в правах. В типовых конфигурациях права задают в Администрирование → Настройки пользователей и прав → Группы доступа. Добавьте пользователя в группу с правом на изменение этого вида документов. Ограничения могут действовать и на уровне записей: пользователь видит документы чужой организации, но менять их не может. Это тоже настраивается в группе доступа, на вкладке ограничений.
Как сделать, чтобы документы блокировались реже
Блокировки — нормальная защита данных. Цель не убрать их, а сократить время, пока они держатся.
- 🧾 Каждому сотруднику свой логин. Общая учётная запись «Бухгалтер» на троих — главный источник путаницы, кто держит документ.
- 🪟 Не держать документы открытыми. Заполнили — записали — закрыли. Форма, брошенная на обед с изменениями, держит документ весь обед.
- 🕐 Разнести тяжёлые операции. Закрытие месяца, групповое перепроведение и обмены лучше запускать вне рабочих часов или когда остальные не проводят документы за тот же период.
- 🔁 Следить за регламентными заданиями. Обмен, который запускается каждую минуту и работает пять минут, неизбежно сталкивается с людьми.
- 🔐 Управляемый режим блокировок. Современные типовые конфигурации работают в управляемом режиме. Если ваша база доработана давно и всё ещё в автоматическом режиме, конфликтов будет больше: переводом занимается программист.
Если документ нужно временно закрыть от правок самостоятельно, для этого есть дата запрета, а не «вечно открытая форма». Программно платформа даёт методы ЗаблокироватьДанныеДляРедактирования() и РазблокироватьДанныеДляРедактирования(), но они работают только в пределах своего сеанса. Снять чужую блокировку кодом из другого сеанса нельзя.