Разработка и Конфигурация · 9 мин
1С: как захватить все роли в хранилище конфигурации
Как захватить все роли в хранилище 1С через конфигуратор и пакетный режим, проверить результат, избежать конфликтов захвата и типичных ошибок при групповой разработке.
Захват всех ролей в хранилище конфигурации 1С — типовая задача при переходе проекта на групповую разработку, при массовом пересмотре прав доступа или при подготовке к обновлению типовой конфигурации. Пока объект не захвачен, ваши изменения ролей не попадут в хранилище при помещении, а другие разработчики могут параллельно править те же объекты и создавать конфликты.
Роли в дереве конфигурации находятся в ветке «Общие» → «Роли». Их может быть от нескольких штук до сотен в крупных конфигурациях, поэтому захватывать объекты по одному через контекстное меню долго и неудобно. Ниже разобраны способы захватить все роли сразу: через диалог захвата с отбором, через корневой объект и через пакетный режим конфигуратора.
Важно понимать: захват — это не изменение объектов, а блокировка их в хранилище за вашим пользователем. До помещения изменений другие разработчики не смогут захватить эти же роли, поэтому массовый захват без необходимости блокирует работу коллег.
Что такое захват объектов в хранилище и зачем он нужен
Хранилище конфигурации — это централизованное хранилище версий конфигурации, через которое несколько разработчиков синхронизируют изменения. Механизм захвата гарантирует, что конкретный объект метаданных в каждый момент времени редактирует только один человек.
Пока роль не захвачена, вы можете локально менять её в конфигураторе, но при попытке поместить изменения в хранилище платформа сообщит, что объект не захвачен, и откажет в помещении. Захват фиксируется в хранилище от имени пользователя, и остальные увидят в диалоге захвата, что объект занят.
Захватывать все роли сразу имеет смысл в ограниченном наборе сценариев: первичная постановка конфигурации на поддержку хранилища, массовый редизайн модели прав, слияние доработок из внешнего файла конфигурации. В повседневной работе лучше захватывать только те роли, которые реально меняете.
Подготовка: подключение к хранилищу и права
Перед захватом убедитесь, что конфигуратор подключён к хранилищу: меню «Конфигурация → Хранилище конфигурации → Подключиться к хранилищу». Если конфигурация уже подключена, в заголовке окна конфигуратора и в статусе объектов это видно по пиктограммам замков у объектов в дереве конфигурации.
Пользователь хранилища должен иметь права на захват и помещение объектов. Права настраиваются администратором хранилища через «Администрирование → Пользователи хранилища». Если у вашей учётной записи нет права захвата, команды будут недоступны или завершатся ошибкой.
Также заранее получите актуальную версию из хранилища: «Конфигурация → Хранилище конфигурации → Получить из хранилища» для всей конфигурации или хотя бы для ветки ролей. Захват на фоне устаревшей версии повышает риск конфликтов при последующем помещении.
Захват всех ролей через диалог в конфигураторе
Основной способ — диалог захвата объектов. Откройте «Конфигурация → Хранилище конфигурации → Захватить в хранилище». Появится окно с деревом объектов конфигурации, где можно отметить нужные элементы флажками.
Чтобы захватить все роли, раскройте ветку «Общие» и установите флажок на узле «Роли» — платформа автоматически отметит все вложенные объекты. Если часть ролей уже захвачена другими пользователями, платформа покажет это и не даст захватить занятые объекты; вы получите только свободные.
После нажатия «ОК» захваченные роли отобразятся в дереве конфигурации с признаком захвата. Проверить результат можно через «Хранилище конфигурации → Состояние объектов хранилища» — там видно, какие объекты захвачены вами, а какие коллегами.
- 1Откройте конфигуратор и подключитесь к хранилищу под своим пользователем
- 2Получите актуальную версию конфигурации из хранилища
- 3Откройте «Конфигурация → Хранилище конфигурации → Захватить в хранилище»
- 4В диалоге раскройте «Общие» и поставьте флажок на узле «Роли»
- 5Нажмите «ОК» и убедитесь, что роли отмечены признаком захвата в дереве конфигурации
Альтернатива: захват через корневой объект конфигурации
Если нужно захватить не только роли, а всю конфигурацию целиком (например, при первичной загрузке в пустое хранилище), откройте контекстное меню корневого узла дерева конфигурации и выберите захват. В диалоге отметьте все объекты, включая ветку ролей.
Этот способ оправдан только при работе в одиночку или при полной изоляции проекта. В командной разработке захват всей конфигурации надолго блокирует коллег, поэтому применяйте его осознанно и предупреждайте команду.
Пакетный захват ролей через командную строку
Для автоматизации — например, в скриптах сборки или при массовой обработке — используется пакетный режим конфигуратора. Команда захвата объектов хранилища выполняется параметром /ConfigurationRepositoryLock с указанием файла списка объектов.
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 с тем же списком объектов. Это удобно для скриптов, которые захватывают объекты, обновляют конфигурацию и сразу освобождают блокировки.
Проверка результата и типичные проблемы
После захвата откройте «Хранилище конфигурации → Состояние объектов хранилища» и отфильтруйте по пользователю. Все роли должны числиться захваченными вами. Если часть ролей не захватилась — вероятно, их уже держат коллеги, и в диалоге захвата было соответствующее сообщение.
Типичная проблема — «висячие» захваты: разработчик захватил объекты и ушёл, не поместив изменения и не сняв захват. Администратор хранилища может отменить чужой захват через диалог администрирования, но делать это стоит только после подтверждения, что коллега не потеряет несохранённые изменения.
Как проверить результат
У ролей отображается признак захвата текущим пользователем
Признака нет — захват не выполнен или объект занят другим пользователем
Все нужные роли числятся за вашим пользователем
Часть ролей захвачена коллегами — требуется согласование
Изменённые роли помещаются без ошибок
Ошибка «объект не захвачен» — повторите захват перед помещением
Типичные ошибки при массовом захвате ролей
Когда захватывать все роли, а когда — только нужные
Как выбрать действие
FAQ
Можно ли захватить роль, которую уже захватил другой разработчик?
Нет, штатно это невозможно — хранилище не допускает двойного захвата. Администратор хранилища может принудительно отменить чужой захват, но перед этим нужно убедиться, что коллега не потеряет несохранённые изменения.
Что будет с моими изменениями ролей, если отменить захват без помещения?
Локальные изменения в вашей базе сохранятся, но в хранилище они не попадут, а блокировка снимется. Другой разработчик сможет захватить объект и поместить свою версию, после чего вам придётся объединять изменения вручную.
Как узнать, кто захватил конкретную роль?
Откройте «Конфигурация → Хранилище конфигурации → Состояние объектов хранилища» и найдите нужную роль — в списке будет указан пользователь, захвативший объект, и время захвата.
Нужно ли захватывать роли при обновлении конфигурации из файла .cf?
Да, если конфигурация подключена к хранилищу: платформа потребует захвата всех изменяемых объектов, включая роли, иначе обновление не выполнится. Обычно при загрузке из файла диалог сравнения предлагает захватить изменённые объекты автоматически.
Можно ли захватить роли внешней обработкой или кодом на встроенном языке?
Штатных средств работы с хранилищем из встроенного языка нет. Автоматизация выполняется через пакетный режим конфигуратора с параметрами командной строки и файлом списка объектов.
Что важно запомнить
Все роли захватываются через диалог «Захватить в хранилище» с флажком на узле «Общие → Роли» либо пакетной командой /ConfigurationRepositoryLock с XML-списком объектов. Перед захватом получите актуальную версию, после помещения изменений отменяйте захват, а в командной работе блокируйте только те объекты, которые реально редактируете.