К статье
Практический материал

Разработка и Конфигурация · 9 мин

1С: как захватить все роли в хранилище конфигурации

Как захватить все роли в хранилище 1С через конфигуратор и пакетный режим, проверить результат, избежать конфликтов захвата и типичных ошибок при групповой разработке.

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

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

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

Что такое захват объектов в хранилище и зачем он нужен

Хранилище конфигурации — это централизованное хранилище версий конфигурации, через которое несколько разработчиков синхронизируют изменения. Механизм захвата гарантирует, что конкретный объект метаданных в каждый момент времени редактирует только один человек.

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

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

Подготовка: подключение к хранилищу и права

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

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

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

Захват всех ролей через диалог в конфигураторе

Основной способ — диалог захвата объектов. Откройте «Конфигурация → Хранилище конфигурации → Захватить в хранилище». Появится окно с деревом объектов конфигурации, где можно отметить нужные элементы флажками.

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

После нажатия «ОК» захваченные роли отобразятся в дереве конфигурации с признаком захвата. Проверить результат можно через «Хранилище конфигурации → Состояние объектов хранилища» — там видно, какие объекты захвачены вами, а какие коллегами.

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

Альтернатива: захват через корневой объект конфигурации

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

Этот способ оправдан только при работе в одиночку или при полной изоляции проекта. В командной разработке захват всей конфигурации надолго блокирует коллег, поэтому применяйте его осознанно и предупреждайте команду.

Пакетный захват ролей через командную строку

Для автоматизации — например, в скриптах сборки или при массовой обработке — используется пакетный режим конфигуратора. Команда захвата объектов хранилища выполняется параметром /ConfigurationRepositoryLock с указанием файла списка объектов.

bash
1cv8 DESIGNER /F"C:\Bases\Dev" /N Developer /P password /ConfigurationRepositoryF "\\server\repo" /ConfigurationRepositoryN Developer /ConfigurationRepositoryP password /ConfigurationRepositoryLock -objects C:\Scripts\roles.xml

Файл списка объектов — это XML, где перечислены полные имена объектов метаданных. Для ролей имена имеют вид Role.ИмяРоли. Список можно получить выгрузкой конфигурации в файлы или сформировать скриптом, перебрав роли в дереве конфигурации.

Для снятия захвата в пакетном режиме применяется команда /ConfigurationRepositoryUnlock с тем же списком объектов. Это удобно для скриптов, которые захватывают объекты, обновляют конфигурацию и сразу освобождают блокировки.

Проверка результата и типичные проблемы

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

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

Контрольные точки

Как проверить результат

Пиктограммы объектов в дереве конфигурации
Норма

У ролей отображается признак захвата текущим пользователем

Тревожный признак

Признака нет — захват не выполнен или объект занят другим пользователем

Состояние объектов хранилища
Норма

Все нужные роли числятся за вашим пользователем

Тревожный признак

Часть ролей захвачена коллегами — требуется согласование

Помещение изменений
Норма

Изменённые роли помещаются без ошибок

Тревожный признак

Ошибка «объект не захвачен» — повторите захват перед помещением

Типичные ошибки при массовом захвате ролей

Типичные ошибки
01
Захват всех ролей «на всякий случай» и удержание их неделями — блокирует работу всей команды по правам доступа
02
Захват без предварительного получения актуальной версии — при помещении возникают конфликты версий
03
Помещение изменений и забытие про отмену захвата — объекты остаются занятыми, хотя работа завершена
04
Попытка захватить роли, уже занятые коллегой, и параллельное редактирование локальной копии — изменения одного из разработчиков будут потеряны
05
Запуск пакетного захвата без проверки файла списка — в XML попадают лишние объекты или неверные имена, и команда завершается ошибкой

Когда захватывать все роли, а когда — только нужные

Маршрут решения

Как выбрать действие

Первичная загрузка конфигурации в новое хранилищеЗахватывайте всю конфигурацию целиком, включая все роли
Переработка модели прав затрагивает большинство ролейЗахватите ветку «Роли» полностью и предупредите команду о сроках
Меняются 2–3 роли под конкретную задачуЗахватывайте только эти роли, чтобы не блокировать коллег
Работа ведётся скриптами и CI-сборкойИспользуйте пакетный захват с файлом списка и обязательной отменой захвата в конце

FAQ

Можно ли захватить роль, которую уже захватил другой разработчик?

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

Что будет с моими изменениями ролей, если отменить захват без помещения?

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

Как узнать, кто захватил конкретную роль?

Откройте «Конфигурация → Хранилище конфигурации → Состояние объектов хранилища» и найдите нужную роль — в списке будет указан пользователь, захвативший объект, и время захвата.

Нужно ли захватывать роли при обновлении конфигурации из файла .cf?

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

Можно ли захватить роли внешней обработкой или кодом на встроенном языке?

Штатных средств работы с хранилищем из встроенного языка нет. Автоматизация выполняется через пакетный режим конфигуратора с параметрами командной строки и файлом списка объектов.

Итог

Что важно запомнить

Все роли захватываются через диалог «Захватить в хранилище» с флажком на узле «Общие → Роли» либо пакетной командой /ConfigurationRepositoryLock с XML-списком объектов. Перед захватом получите актуальную версию, после помещения изменений отменяйте захват, а в командной работе блокируйте только те объекты, которые реально редактируете.