Объект захвачен в хранилище конфигурации: как его освободить

· 9 мин

Содержание

Свой захват отменяют в Конфигураторе той базы, из которой объект захватывали: Конфигурация → Хранилище конфигурации → Отменить захват в хранилище. Если объект держит другой человек, отменить захват может только он сам. Администратор хранилища здесь помогает обходным путём: меняет пароль этого пользователя хранилища, подключается под ним и снимает захват.

Частое заблуждение — что достаточно отключить базу от хранилища или удалить её. Это не работает . Захват хранится в самом хранилище, а не в базе разработчика, и после отключения объекты так и висят захваченными на этом пользователе.

Почему объект остаётся захваченным

Захват — это пометка в хранилище: «объект правит пользователь X из базы Y». Пока пометка стоит, остальные не могут поместить изменения в этот объект. Снимается она тремя способами: помещением изменений, отменой захвата или вмешательством администратора.

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

  • 👤 Сотрудник уволился или ушёл в отпуск, а в хранилище остались его захваты.
  • 💻 База разработчика потеряна: пересоздали копию, сломался диск, удалили папку.
  • 🔌 Базу отключили от хранилища командой Отключиться от хранилища — захваты остались.
  • 🌳 Захвачен корень конфигурации. Без него никто не может добавлять новые объекты метаданных, и вся команда стоит.
  • 📦 Помещали с флажком «Оставить объекты захваченными» и забыли про это.
  • ⏳ Сервер хранилища или Конфигуратор завис посреди операции, и команды хранилища отвечают ошибкой или не отвечают вовсе.

Последний случай отличается от остальных. Там захват может быть вполне корректным, а проблема — в доступе к хранилищу. Его лечат иначе, об этом ниже.

Как узнать, кто и откуда держит объект

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

  1. Откройте Конфигуратор базы, подключённой к хранилищу.
  2. Выберите Конфигурация → Хранилище конфигурации → Хранилище.... Откроется окно с деревом объектов хранилища.
  3. Посмотрите на значки у объектов. Значок замка показывает захват: свой и чужой отличаются цветом.
  4. Включите отбор захваченных объектов, чтобы не листать всё дерево.
  5. Для конкретного объекта посмотрите колонки: там видно имя пользователя хранилища и информационную базу, из которой сделан захват.

В дереве конфигурации основной базы значки тоже видны. Замок рядом с объектом — признак того, что объект кем-то захвачен.

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

Что видно в окне хранилищаЧто это значитЧто делать
Захват ваш, из текущей базыОбычный рабочий случайПоместить изменения или отменить захват
Захват ваш, но из другой базыВы работали с другого компьютера или из старой копииОтменить из той базы или подключиться заново
Захват чужой, человек на связиКоллега правит объектДоговориться: он помещает или отменяет
Захват чужой, человек недоступенНужно вмешательство администратора хранилищаСменить пароль и снять захват под его учётной записью

Отмена захвата своими силами в Конфигураторе

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

  1. Откройте базу в режиме Конфигуратора под тем же пользователем хранилища.
  2. В дереве конфигурации выделите нужные объекты. Можно выделить сразу несколько.
  3. Выберите Конфигурация → Хранилище конфигурации → Отменить захват в хранилище. Ту же команду можно вызвать из контекстного меню объекта.
  4. В открывшемся окне отметьте флажками объекты, с которых снимаете захват.
  5. Нажмите ОК.

После отмены захвата локальные изменения в этих объектах пропадут. Объекты вернутся к версии из хранилища. Если правки нужны, сначала сохраните их.

Как сохранить незавершённую работу перед отменой:

  • 📁 Выгрузите конфигурацию в файл: Конфигурация → Сохранить конфигурацию в файл. Получится .cf с вашим текущим состоянием.
  • 🔍 Сравните свою конфигурацию с хранилищем и посмотрите, что именно изменено. Иногда выясняется, что правок нет и захват висел пустым.
  • 📤 Если правки готовы, их проще поместить, чем отменять: Поместить в хранилище снимает захват автоматически, если не стоит флажок «Оставить объекты захваченными».

Отменяйте захват только у тех объектов, которые действительно правили. Если в окне отмены по привычке нажать «выделить всё», можно потерять изменения в объектах, которые вы ещё не поместили.

Захват ушедшего сотрудника: работа через администратора хранилища

Самый частый запрос. Человек уволился, его база удалена, а объекты захвачены. Помочь может любой пользователь с правом «Административные функции» в хранилище.

Шаг 1. Сменить пароль пользователя хранилища

  1. Подключитесь к хранилищу под учётной записью администратора.
  2. Откройте Конфигурация → Хранилище конфигурации → Администрирование....
  3. В списке пользователей выделите сотрудника и откройте его свойства.
  4. Задайте новый пароль и сохраните.

Права пользователя при этом не трогайте. Если отобрать у него право захвата, снять захват под ним может не получиться.

Шаг 2. Подключиться под этим пользователем

  1. Возьмите любую базу, где можно спокойно работать: свою копию или чистую копию основной.
  2. Если она уже подключена к хранилищу, отключите её: Конфигурация → Хранилище конфигурации → Отключиться от хранилища.
  3. Подключитесь заново через Подключиться к хранилищу, указав адрес хранилища, имя сотрудника и новый пароль.
  4. Платформа предупредит, что этот пользователь уже работает с хранилищем из другой информационной базы. Подтвердите продолжение.

После подключения захваты сотрудника станут видны как захваты текущего пользователя.

Шаг 3. Снять захват

  1. Откройте окно хранилища и включите отбор захваченных объектов.
  2. Выделите объекты сотрудника.
  3. Выполните Отменить захват.
  4. Отключите базу от хранилища и, если сотрудник больше не работает, удалите его пользователя в окне администрирования или хотя бы поменяйте пароль ещё раз.

Если у сотрудника могли остаться правки, о которых никто не знает, перед отменой поместите его объекты в хранилище из этой же базы. Захват при этом снимется, а изменения сохранятся в истории версий, и их можно будет откатить при необходимости.

Чей захват нужно снять?

Когда хранилище не отвечает: сервер хранилища и консоль кластера

Бывает, что захват снять нельзя, потому что любая команда хранилища висит. Здесь отмена захвата ни при чём, нужно вернуть работоспособность хранилищу.

Сервер хранилища (адрес tcp://)

Сетевое хранилище обслуживает отдельная служба — сервер хранилища, процесс crserver. По умолчанию он слушает порт 1542. Адрес в Конфигураторе выглядит как tcp://имя_сервера/путь_к_хранилищу.

Что проверить по порядку:

  1. Доступен ли сервер по сети и открыт ли порт службы хранилища.
  2. Запущена ли служба сервера хранилища в списке служб Windows или в systemd на Linux.
  3. Не занят ли процесс crserver долгой операцией. Например, кто-то запустил оптимизацию хранения данных или помещение большой конфигурации.
  4. Хватает ли места на диске, где лежат файлы хранилища.

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

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

Отдельная история — завис сам Конфигуратор разработчика, подключённый к серверной информационной базе. Тогда его сеанс виден в консоли администрирования серверов 1С:

  1. Откройте консоль, разверните кластер, затем Информационные базы → имя базы → Сеансы.
  2. Найдите сеанс с приложением «Конфигуратор» и нужным пользователем.
  3. Удалите сеанс.

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

Удаление сеанса не снимает захваты в хранилище. Оно лишь освобождает базу, чтобы разработчик мог заново зайти и отменить захват штатно.

Можно ли снять захват через SQL

Короткий ответ: нет, и не стоит пытаться.

Хранилище конфигурации не живёт в СУБД. Даже если основная база стоит на MS SQL Server или PostgreSQL, хранилище — это отдельный файл формата 1С (1cv8ddb.1CD) и служебные каталоги рядом с ним. Сервер хранилища работает с этим файлом напрямую. SQL-запросом до захвата не дотянуться.

Что люди путают с «блокировками в SQL»:

  • 🔒 Блокировки данных в информационной базе: ошибки вида «конфликт блокировок при выполнении транзакции». Это про документы и регистры, не про хранилище.
  • 🧩 Привязку базы к хранилищу. Она хранится в информационной базе разработчика, но правка служебных таблиц руками ломает конфигурацию. Отвязать базу можно штатно, через Конфигуратор или пакетный режим.
  • 🛠 Редактирование файла хранилища сторонними утилитами. Такие инструменты существуют, но любое повреждение файла уничтожает историю версий всей команды.

Для отвязки базы без захода в Конфигуратор есть параметр пакетного запуска /ConfigurationRepositoryUnbindCfg. Он отключает базу от хранилища, но захваты в хранилище не трогает.

"C:\Program Files\1cv8\8.3.25.1374\bin\1cv8.exe" DESIGNER /F "D:\Bases\Dev" /N "Admin" /P "" /ConfigurationRepositoryUnbindCfg -force /Out "D:\Logs\unbind.log"

Путь к платформе и версию подставьте свои. Параметры подключения к хранилищу в пакетном режиме передают через /ConfigurationRepositoryF, /ConfigurationRepositoryN и /ConfigurationRepositoryP — адрес, пользователь и пароль хранилища.

Файловое хранилище в сетевой папке

Хранилище можно создать прямо в общей папке, без сервера хранилища. Тогда каждый Конфигуратор открывает файл 1cv8ddb.1CD по сети. У такой схемы свои поломки.

СимптомВероятная причинаЧто сделать
Ошибка доступа к файлу хранилищаФайл держит процесс, который не завершилсяНайти зависший 1cv8.exe у коллег или открытые сетевые сеансы на файловом сервере
Хранилище открывается через разАнтивирус проверяет файл при каждом обращенииДобавить папку хранилища в исключения антивируса
Права «только чтение»У пользователя Windows нет права записи в папкуВыдать права на изменение всем разработчикам
Повреждение после обрыва сетиЗапись прервалась на серединеВосстановить папку из резервной копии

Найти, кто держит файл, можно на файловом сервере. В оснастке «Общие папки» Windows есть список открытых файлов, там видно пользователя и компьютер.

Закрытие открытого файла с сервера равносильно падению Конфигуратора у того, кто его держал. Если в этот момент шло помещение, файл хранилища может повредиться. Перед этим сделайте копию всей папки хранилища.

Если команда больше двух-трёх человек или работает удалённо, файловое хранилище лучше перевести на сервер хранилища. Обрывы сети тогда не бьют по файлу напрямую.

Как не доводить до зависших захватов

Пара простых правил избавляет почти от всех историй с «чужим замком».

  • 🌳 Корень конфигурации — на минуты. Захватили, добавили объект, сразу поместили. Держать корень днями — значит блокировать всю команду.
  • 📤 Помещайте чаще. Небольшие порции изменений легче проверить и легче откатить.
  • 🏷 Один человек — один пользователь хранилища. Общий логин «Разработчик» не позволяет понять, кто держит объект.
  • 🗂 Порядок при увольнении. В чек-лист выхода сотрудника добавьте пункт: поместить или отменить все захваты, удалить пользователя хранилища.
  • 💾 Резервные копии хранилища. Копируйте папку хранилища целиком по расписанию, в момент, когда с ним никто не работает.
  • 🔐 Два администратора. Если пароль единственного администратора хранилища утерян, снять чужие захваты станет некому.
При уходе разработчика из проекта
Выполнено: 0 / 5

Частые вопросы

Отменяется ли захват при удалении пользователя из хранилища?
Не рассчитывайте на это. Сначала снимите захваты, затем удаляйте пользователя. Так история останется понятной и объекты не повиснут.
Пропадут ли правки, уже помещённые в хранилище, если отменить захват?
Нет. Отмена затрагивает только изменения в вашей базе, которые ещё не помещены. Всё, что лежит в хранилище, сохраняется в версиях.
Можно ли захватить объект, если он уже захвачен другим?
Нет. Захват монопольный: объект может держать только один пользователь хранилища. Остальные видят его и могут получать последнюю версию.
Что делать, если пароль администратора хранилища утерян?
Восстановите папку хранилища из резервной копии, где пароль известен, или обратитесь к тому, кто создавал хранилище. Ломать файл хранилища сторонними утилитами рискованно.
Нужно ли выгонять пользователей из основной базы, чтобы отменить захват?
Нет. Захват касается хранилища, а не рабочей базы. Пользователи могут работать, пока разработчик снимает захват в своей копии.