Захват корневого объекта «Конфигурация» в хранилище 1С: порядок, права, командная строка
Содержание
Захватить корень в хранилище можно так: открыть в Конфигураторе конфигурацию, подключённую к хранилищу, встать в дереве на верхний узел «Конфигурация» и выбрать Конфигурация → Хранилище конфигурации → Захватить объекты.... Дальше в окне остаётся отметить корень и нажать «Захватить». Чаще всего это нужно, когда разработчик добавляет в конфигурацию новый объект или меняет её общие свойства, а кнопка помещения не даёт сохранить правки.
Типичная ситуация: двое программистов работают с одним хранилищем. Первый захватил корень «на минутку» и ушёл в отпуск. Второй не может создать даже новый справочник. Ниже разобраны оба варианта захвата, права, ключи командной строки и порядок действий, если корень занят.
Что такое корень и зачем его захватывать
Корень — самый верхний элемент дерева метаданных, узел «Конфигурация». В нём лежат свойства всей конфигурации: имя, поставщик, версия, режимы совместимости, основные роли, общие настройки интерфейса. Вместе с корнем хранится и список подчинённых объектов.
Захват — это пометка в хранилище: «этот объект сейчас правлю я». Пока пометка стоит, другие разработчики видят объект только для чтения. Это защита от того, что два человека перезапишут правки друг друга.
Корень нужен в таких случаях:
- ➕ добавление нового объекта верхнего уровня (справочник, документ, регистр, отчёт);
- ⚙️ изменение свойств самой конфигурации: версия, поставщик, режим совместимости;
- 🔐 правка списка ролей и подсистем на уровне конфигурации;
- 🗑 удаление объекта, если платформа требует захвата родителя.
Правка внутри уже существующего объекта (реквизит справочника, модуль формы) корня не требует. Достаточно захватить сам объект.
Как устроено файловое хранилище и права в нём
Файловое хранилище — это обычная папка. В ней лежит файл 1cv8ddb.1CD с историей версий и данными о пользователях. Папку открывают по сетевому пути, поэтому у всех разработчиков должен быть доступ на запись в неё.
В новых версиях платформы есть и серверный вариант хранилища, доступный по сети через службу. Принцип захвата в нём тот же, отличается только способ подключения.
У каждого пользователя хранилища есть набор прав. Это не права Windows, а внутренняя роль самого хранилища:
| Право | Что даёт |
|---|---|
| Чтение | Видеть историю и объекты, получать конфигурацию |
| Присоединение | Подключать свою базу к хранилищу |
| Захват объектов | Захватывать и помещать изменения |
| Администрирование | Создавать пользователей, менять права |
Без права «Захват объектов» пункт меню захвата будет недоступен или вернёт отказ. Права выдаёт администратор через Конфигурация → Хранилище конфигурации → Администрирование хранилища → Пользователи (название пункта может слегка отличаться в разных релизах платформы).
Почему корень не захватывается
Платформа отказывает по нескольким причинам. Перед тем как лезть в настройки, сверьтесь с таблицей.
| Симптом | Причина | Что делать |
|---|---|---|
| Окно показывает корень серым, галочку не поставить | Корень уже захвачен другим пользователем | Найти владельца и попросить поместить или отменить захват |
| Пункты меню хранилища отсутствуют | База не подключена к хранилищу | Подключить базу к хранилищу |
| Захват есть, но корень не отмечается | У вас нет права «Захват объектов» | Попросить администратора выдать право |
| Корень захвачен, но подчинённые объекты нет | Не стояла галочка про подчинённые | Повторить захват с нужной опцией |
| Версия объекта в базе старее версии в хранилище | Не обновлена локальная конфигурация | Сначала обновить конфигурацию из хранилища |
Если в хранилище есть более новая версия корня, платформа предложит сначала получить её. Игнорировать это нельзя: иначе потеряете чужие правки.
Кто держит захват
Откройте окно захвата и посмотрите на объект. Рядом с занятым объектом платформа показывает имя пользователя, который его захватил. Если имя не видно, запросите отчёт по истории хранилища и проверьте последние действия. Затем свяжитесь с человеком, а не с администратором: чаще всего достаточно нажать «Отменить захват» или «Поместить» на его стороне.
Как захватить корень через Конфигуратор: пошагово
Для начала проверьте, что вы вошли в Конфигуратор под нужным пользователем и база подключена к хранилищу. В заголовке окна конфигурации у подключённой базы видны пометка о хранилище и номер версии.
Конфигурация → Хранилище конфигурации → Обновить конфигурацию из хранилища..., если платформа сообщает о новой версии.Конфигурация → Хранилище конфигурации → Захватить объекты... или нажмите правой кнопкой на узле «Конфигурация» и выберите захват в контекстном меню.Захват с подчинёнными объектами
В окне захвата есть опция, которая распространяет захват на все вложенные объекты. Для корня это значит «захватить всю конфигурацию целиком». Включать её стоит осознанно:
- 🔒 вся конфигурация станет недоступной остальным, пока вы не поместите правки;
- 📦 при помещении платформа обработает все объекты, и операция может занять заметное время;
- 👥 коллеги не смогут захватить ни один объект.
Для типовой задачи «добавить один справочник» достаточно захватить корень без подчинённых и новый объект. Остальная конфигурация остаётся свободной.
Захват всей конфигурации на день — частая причина конфликтов в команде. Помещайте правки сразу по готовности.
Помещение и снятие захвата
Когда работа закончена, откройте Конфигурация → Хранилище конфигурации → Поместить объекты.... Платформа покажет все захваченные вами объекты. Напишите комментарий и подтвердите. После этого корень освобождается автоматически.
Если правки не нужны, выберите отмену захвата. Локальные изменения при этом откатываются до версии из хранилища.
Захват корня из командной строки
Командная строка пригодится, когда нужно захватывать и помещать объекты по расписанию, из скрипта сборки или на сервере без графического входа. Конфигуратор запускается в пакетном режиме.
Основной шаблон:
"C:\Program Files\1cv8\8.3.XX.YYYY\bin\1cv8.exe" DESIGNER ^
/F "D:\bases\dev" ^
/N "Разработчик" /P "пароль" ^
/ConfigurationRepositoryF "\\server\repo\main" ^
/ConfigurationRepositoryN "Разработчик" ^
/ConfigurationRepositoryP "пароль_хранилища" ^
/ConfigurationRepositoryLock -Revised ^
/Out "C:\logs\lock.txt"
Что здесь важно:
DESIGNERзапускает Конфигуратор без открытия окна, если добавить ключ пакетного режима по инструкции платформы;/ConfigurationRepositoryF— путь к хранилищу,/ConfigurationRepositoryNи/ConfigurationRepositoryP— пользователь и пароль хранилища (они не обязаны совпадать с пользователем базы);/ConfigurationRepositoryLock— команда захвата;-Revised— разрешает захват, если объекты в хранилище новее, чем у вас; без него команда остановится с ошибкой;/Out— файл журнала, который стоит разбирать после каждого запуска.
Чтобы захватить конкретные объекты, а не всё сразу, к команде добавляют ключ -Objects с путём к файлу списка. Формат файла и правила записи имён описаны в справке по платформе вашей версии, лучше сверять их там: от релиза к релизу формат уточняли.
Парные команды для сценариев:
| Команда | Действие |
|---|---|
/ConfigurationRepositoryLock | Захват объектов |
/ConfigurationRepositoryUnLock | Снятие захвата |
/ConfigurationRepositoryCommit | Помещение изменений |
/ConfigurationRepositoryUpdateCfg | Обновление конфигурации из хранилища |
/ConfigurationRepositoryBindCfg | Подключение базы к хранилищу |
Храните пароли хранилища не в самом bat-файле, а в защищённом файле параметров или в переменных окружения сервера сборки.
После выполнения всегда читайте файл /Out. Код возврата процесса при ошибках захвата не всегда отличается от нуля, поэтому полагаться только на него нельзя.
Диагностика блокировок: что проверить по порядку
Когда захват не проходит, действуйте от простого к сложному.
-Revised.1cv8ddb.1CD открыт на запись другим процессом. Проверьте права на папку и сетевое соединение.Забытый захват уволенного или ушедшего сотрудника
Это самая неприятная ситуация. Обратиться уже не к кому, а корень занят. Порядок такой:
- Администратор хранилища открывает его от своего имени.
- Проверяет, что у забытого захвата нет локальных правок, которые стоит сохранить.
- Снимает захват средствами администрирования хранилища.
- Фиксирует в журнале команды, кто и когда снял блокировку.
Если администратора с правом на такие действия нет, придётся восстанавливать доступ через копию файла хранилища. Делайте её заранее, до любых экспериментов.
Перед любым вмешательством в файл хранилища сделайте его резервную копию. Повреждённый 1cv8ddb.1CD восстановить без копии практически нереально.
Как не мешать друг другу в командной разработке
Захват корня — тяжёлая операция для всей команды. Несколько правил снижают число конфликтов:
- 📌 захватывайте только то, что правите сегодня;
- ⏱ помещайте правки в конце рабочего дня, а не копите неделями;
- ✍️ пишите в комментарии к помещению, что изменено и зачем: через полгода это спасёт;
- 🔄 перед началом работы обновляйте конфигурацию из хранилища;
- 🧪 тестируйте на копии базы, а не на рабочей;
- 👤 один человек отвечает за корень и свойства конфигурации.
Если разработка идёт большой командой, подумайте о ветках и об отдельных хранилищах для расширений. Расширения лежат вне основной конфигурации, и им корень типовой конфигурации не нужен совсем.
Что выбрать: захват корня, объекта или расширение
Частые вопросы
Можно ли захватить корень без права администрирования?
Блокирует ли захват корня работу пользователей в рабочей базе?
Что будет, если закрыть Конфигуратор с захваченным корнем?
Нужно ли захватывать корень при каждом помещении?
Как узнать, кто захватил корень?
Работает ли командный захват в серверном хранилище?
/ConfigurationRepositoryF: вместо пути к папке указывается адрес сервера хранилища.