Снимаем захваты, удаляем пользователя и отвязываем базу от хранилища конфигурации

· 9 мин

Содержание

Чтобы отключить пользователя от хранилища конфигурации 1С, администратор хранилища открывает в Конфигураторе Конфигурация → Хранилище конфигурации → Хранилище…, отменяет захват объектов этого пользователя, а затем в окне Администрирование… удаляет его или снимает права. Сама база разработчика отвязывается командой Отключиться от хранилища или ключом /ConfigurationRepositoryUnbindCfg -force в пакетном режиме.

Чаще всего за просьбой «отключите Иванова от хранилища» стоит одно: Иванов уволился или переустановил компьютер, а его объекты остались захваченными, и команда не может поместить свои изменения. Ниже шаги для каждого из таких случаев: от самого мягкого действия к самому жёсткому.

Что значит «отключить» от хранилища и откуда берутся блокировки

В хранилище нет постоянного «подключения», как у сеанса в базе. Там хранятся три вещи, которые и создают ощущение, что пользователь «висит»:

  • 🔒 Захваты объектов. Пользователь захватил справочник или модуль для редактирования. Пока захват не снят, остальные не могут менять этот объект.
  • 🔗 Привязка базы. Хранилище помнит, из какой информационной базы и с какого компьютера подключился пользователь. Захваты принадлежат паре «пользователь + база».
  • 👤 Учётная запись с правами. Пока она есть, человек может снова войти и захватить объекты.

Откуда берутся «зависшие» захваты:

  • 💻 разработчик переустановил Windows или удалил свою копию базы , не поместив изменения;
  • 🚪 сотрудник уволился, а его учётная запись в хранилище осталась;
  • 📦 базу разработчика восстановили из старой копии, и связь с хранилищем в ней уже не совпадает с текущей;
  • ⚡ Конфигуратор упал во время помещения, и часть объектов осталась захваченной.
Что именно нужно сделать?

Как отменить захват объектов чужого пользователя

Это штатный путь, и его хватает в большинстве ситуаций. Нужна учётная запись хранилища с правом «Административные функции».

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

Отмена захвата не переносит изменения в хранилище. Всё, что разработчик успел поменять в своей базе и не поместил, останется только у него. Если эти правки нужны, перед отменой попросите его выгрузить конфигурацию в .cf или файлы, чтобы потом сравнить и перенести изменения.

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

💡 Отменять чужие захваты по одному объекту утомительно, если их сотни. Выделите корень конфигурации с подчинёнными: платформа обработает всё дерево, но отменит захват только там, где он реально есть.

Что делать разработчику после отмены его захвата

Если человек вернулся к работе, его база по-прежнему подключена к хранилищу, но объекты уже не его. Порядок такой:

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

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

Удаление пользователя и снятие прав в администрировании хранилища

Когда сотрудник ушёл, одной отмены захватов мало: учётную запись надо убрать, иначе с его паролем можно снова войти.

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

Удалённые пользователи не исчезают бесследно. Их имена остаются в истории версий, а в окне администрирования есть флажок показа удалённых пользователей. Через него запись можно восстановить, если удалили по ошибке.

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

Сравнение способов:

СпособКогда подходитЧто теряется
Отмена захватачеловек недоступен, объекты нужны команденепомещённые правки в его базе
Снятие праввременное отстранение, аудитничего, запись и история целы
Удаление пользователяувольнение, утечка паролявозможность входа; история остаётся
Отвязка базыбаза больше не нужна или поврежденасвязь этой базы с хранилищем

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

Отвязка базы от хранилища из командной строки

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

Отвязка базы с принудительным пропуском проверок:

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER ^
  /F "D:\Bases\Dev_Ivanov" /N "Admin" /P "pass" ^
  /ConfigurationRepositoryUnbindCfg -force ^
  /DisableStartupDialogs /Out "D:\Logs\unbind.txt"

Ключ -force отключает базу, даже если в ней есть захваченные или изменённые объекты, и не спрашивает учётные данные хранилища. Для клиент-серверной базы вместо /F укажите /S "srv1c\Dev_Ivanov".

Отмена собственных захватов пользователя из его базы:

"C:\Program Files\1cv8\<версия>\bin\1cv8.exe" DESIGNER ^
  /F "D:\Bases\Dev_Ivanov" /N "Admin" /P "pass" ^
  /ConfigurationRepositoryF "tcp://srv-repo/MainRepo" ^
  /ConfigurationRepositoryN "Ivanov" /ConfigurationRepositoryP "pwd" ^
  /ConfigurationRepositoryUnlock -force ^
  /DisableStartupDialogs /Out "D:\Logs\unlock.txt"

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

После выполнения откройте файл из /Out. Пакетный режим не показывает окон, и об ошибке авторизации или неверном пути вы узнаете только из лога.

Сервер хранилища и консоль кластера: что можно оборвать

Сетевое хранилище обслуживает отдельная служба сервера хранилища (crserver), по умолчанию на порту 1542. Адрес подключения выглядит как tcp://srv-repo/MainRepo. Эта служба не входит в кластер серверов 1С.

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

Когда консоль кластера всё же полезна:

  1. Конфигуратор разработчика завис на клиент-серверной базе и не даёт обновить её структуру.
  2. Откройте консоль, найдите базу и в списке сеансов выберите строку с приложением «Конфигуратор».
  3. Удалите сеанс. Предупредите разработчика: несохранённые правки в открытом Конфигураторе пропадут.

Если зависла сама служба хранилища, её перезапускают в оснастке «Службы» Windows. Захваты при этом сохраняются: они записаны в данных хранилища, а не в памяти процесса.

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

Файловое хранилище: открытые файлы вместо «файлов блокировок»

Файловое хранилище — это каталог с файлом 1cv8ddb.1CD и служебными подкаталогами. Отдельного файла-флажка «пользователь подключён» там нет. Удалять что-либо из каталога, надеясь снять блокировку, нельзя: так вы повредите хранилище, а захваты никуда не денутся.

Если хранилище «занято» и не открывается, причина обычно в процессе, который держит файл:

  • 🖥 Конфигуратор на другом компьютере завис и не отпускает 1cv8ddb.1CD;
  • 📁 каталог лежит в общей папке, и сетевой сеанс остался открытым после обрыва связи;
  • 🛡 антивирус или программа резервного копирования проверяют файл прямо во время работы.

Что делать:

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

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

Для команды больше трёх человек файловое хранилище в общей папке — источник таких проблем. Сервер хранилища решает их: клиенты не открывают файл напрямую.

Автоматизация: скрипт вместо ручной работы

Встроенного объекта для управления хранилищем во встроенном языке 1С нет. Внешняя обработка не может сама снять чужие захваты. Она умеет только запустить Конфигуратор в пакетном режиме через ЗапуститьПриложение() с теми же ключами, что выше.

Практичнее держать на сервере .bat или PowerShell-скрипт и запускать его из Планировщика заданий. Пример ежедневного отчёта по хранилищу:

@echo off
set V8="C:\Program Files\1cv8\<версия>\bin\1cv8.exe"
%V8% DESIGNER /F "D:\Bases\RepoAdmin" /N "Admin" /P "pass" ^
  /ConfigurationRepositoryF "tcp://srv-repo/MainRepo" ^
  /ConfigurationRepositoryN "RepoAdmin" /ConfigurationRepositoryP "pwd" ^
  /ConfigurationRepositoryReport "D:\Reports\repo_%date:~-4%%date:~3,2%%date:~0,2%.mxl" ^
  /DisableStartupDialogs /Out "D:\Logs\report.txt"

Отчёт по истории хранилища показывает, кто и когда помещал изменения. Если человек неделями держит захват и ничего не помещает, это видно по отсутствию его версий.

Для массовой отвязки старых баз разработчиков делают цикл по списку путей с командой /ConfigurationRepositoryUnbindCfg -force. Пароли в скриптах храните в отдельном файле с ограниченными правами, а не в самом .bat.

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

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

Регламент работы с хранилищем
Выполнено: 0 / 7

Главная причина хаоса — общая учётная запись на нескольких людей. Захваты привязаны к паре «пользователь + база», и при общем логине уже не понять, кто держит объект и можно ли его освобождать.

Второе правило: перед переустановкой компьютера разработчик помещает всё или отменяет свои захваты. Это занимает минуту и снимает необходимость звать администратора.

Третье — понятные имена учётных записей. Логин вида «Ivanov_dev» сразу говорит, чей захват висит. Логины «user1» или «prog» через полгода приходится расшифровывать по истории версий.

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

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