Захват корневого объекта «Конфигурация» в хранилище 1С: порядок, права, командная строка

· 8 мин

Содержание

Захватить корень в хранилище можно так: открыть в Конфигураторе конфигурацию, подключённую к хранилищу, встать в дереве на верхний узел «Конфигурация» и выбрать Конфигурация → Хранилище конфигурации → Захватить объекты.... Дальше в окне остаётся отметить корень и нажать «Захватить». Чаще всего это нужно, когда разработчик добавляет в конфигурацию новый объект или меняет её общие свойства, а кнопка помещения не даёт сохранить правки.

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

Что такое корень и зачем его захватывать

Корень — самый верхний элемент дерева метаданных, узел «Конфигурация». В нём лежат свойства всей конфигурации: имя, поставщик, версия, режимы совместимости, основные роли, общие настройки интерфейса. Вместе с корнем хранится и список подчинённых объектов.

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

Корень нужен в таких случаях:

  • ➕ добавление нового объекта верхнего уровня (справочник, документ, регистр, отчёт);
  • ⚙️ изменение свойств самой конфигурации: версия, поставщик, режим совместимости;
  • 🔐 правка списка ролей и подсистем на уровне конфигурации;
  • 🗑 удаление объекта, если платформа требует захвата родителя.

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

Как устроено файловое хранилище и права в нём

Файловое хранилище — это обычная папка. В ней лежит файл 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. Код возврата процесса при ошибках захвата не всегда отличается от нуля, поэтому полагаться только на него нельзя.

Диагностика блокировок: что проверить по порядку

Когда захват не проходит, действуйте от простого к сложному.

Диагностика: выберите симптом

Забытый захват уволенного или ушедшего сотрудника

Это самая неприятная ситуация. Обратиться уже не к кому, а корень занят. Порядок такой:

  1. Администратор хранилища открывает его от своего имени.
  2. Проверяет, что у забытого захвата нет локальных правок, которые стоит сохранить.
  3. Снимает захват средствами администрирования хранилища.
  4. Фиксирует в журнале команды, кто и когда снял блокировку.

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

Перед любым вмешательством в файл хранилища сделайте его резервную копию. Повреждённый 1cv8ddb.1CD восстановить без копии практически нереально.

Как не мешать друг другу в командной разработке

Захват корня — тяжёлая операция для всей команды. Несколько правил снижают число конфликтов:

  • 📌 захватывайте только то, что правите сегодня;
  • ⏱ помещайте правки в конце рабочего дня, а не копите неделями;
  • ✍️ пишите в комментарии к помещению, что изменено и зачем: через полгода это спасёт;
  • 🔄 перед началом работы обновляйте конфигурацию из хранилища;
  • 🧪 тестируйте на копии базы, а не на рабочей;
  • 👤 один человек отвечает за корень и свойства конфигурации.
Перед захватом корня
Выполнено: 0 / 5

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

Что выбрать: захват корня, объекта или расширение

Что вам нужно изменить?

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

Можно ли захватить корень без права администрирования?
Да. Для захвата нужно право «Захват объектов». Администрирование требуется только для работы с пользователями и снятия чужих блокировок.
Блокирует ли захват корня работу пользователей в рабочей базе?
Нет. Хранилище относится к разработке. Пользователи рабочей базы продолжают работать, пока вы не загрузите обновлённую конфигурацию.
Что будет, если закрыть Конфигуратор с захваченным корнем?
Захват сохранится в хранилище. Его держит ваша учётная запись, а не открытое окно. Снять его можно будет при следующем входе.
Нужно ли захватывать корень при каждом помещении?
Нет. Только когда меняются общие свойства или добавляются новые объекты верхнего уровня. Правки внутри объектов идут через захват самих объектов.
Как узнать, кто захватил корень?
Откройте окно захвата: рядом с занятым объектом отображается имя владельца. Дополнительно посмотрите отчёт по истории хранилища.
Работает ли командный захват в серверном хранилище?
Да. Отличается только строка подключения в ключе /ConfigurationRepositoryF: вместо пути к папке указывается адрес сервера хранилища.