При совместной разработке в 1С разработчики часто сталкиваются с ситуацией, когда необходимо накатить доработки из стороннего файла конфигурации (.cf) или обновить релиз поставщика, но конфигурация подключена к хранилищу. В окне сравнения и объединения отсутствует прямая кнопка «Захватить все измененные объекты», а попытка выполнить объединение без предварительного захвата приводит к ошибкам или блокировке редактирования. Разберем архитектурные особенности механизма хранилища 1С и эффективные практические сценарии захвата объектов перед объединением.
Проанализируем архитектуру работы хранилища конфигурации 1С. В основе механизма лежит модель пессимистических блокировок (Pessimistic Locking). Платформа запрещает локальное изменение структуры метаданных и программных модулей, если за объектом в хранилище не зафиксирован статус захвата текущим пользователем.
Окно сравнения и объединения строит дерево различий на основе слепка метаданных, загруженного в память в момент открытия инструмента. Если бы захват происходил непосредственно из окна сравнения после анализа, возникал бы риск конфликта: за время анализа другой разработчик мог изменить и поместить объект в хранилище. В таком случае локальная версия становилась бы неактуальной, а автоматическое объединение привело бы к потере чужих правок. По этой причине захват должен выполняться до или во время синхронизации структуры.
Рассмотрим сценарий полного обновления типовой конфигурации поставщика через меню Конфигурация — Поддержка — Обновить конфигурацию или при масштабном накатывании релиза.
При обновлении конфигурации поставщика платформа модифицирует не только основную конфигурацию, но и служебные таблицы конфигурации поставщика в базе хранилища. Для этого обязательно требуется захват корня конфигурации.
Важно: рекурсивный захват корня полностью блокирует разработку для всей команды. Используем этот подход только во время регламентных окон обновления, когда другие программисты не ведут активную разработку в хранилище.
Разберем ситуацию, когда из файла .cf требуется перенести только определенный список доработок, не блокируя всю конфигурацию для коллег.
Если список объектов заранее неизвестен, выполним предварительное сравнение и воспользуемся механизмом сохранения настроек объединения:
.mrgsettings).Проанализируем наиболее надежный подход для крупных проектов с высокой интенсивностью разработки. Чтобы не занимать хранилище долгим процессом ручного трехстороннего сравнения и разрешения конфликтов, используем промежуточную базу:
.cf..cf.Такой подход сокращает время удержания захваченных объектов в хранилище с нескольких часов до нескольких минут, что исключает простои других участников команды разработки.
Если обновление выполняется по заранее известному списку метаданных, рассмотрим возможность пакетного захвата через командную строку запуска конфигуратора. Платформа 1С поддерживает специальные параметры для управления хранилищем:
/ConfigurationRepositoryLock:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "D:\Bases\MyBase" /N "Admin" /P "Pass" /ConfigurationRepositoryF "D:\Repository" /ConfigurationRepositoryN "Admin" /ConfigurationRepositoryP "RepoPass" /ConfigurationRepositoryLock -objects "Справочник.Номенклатура Документ.РеализацияТоваровУслуг"
/ConfigurationRepositoryUpdateCfg:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "D:\Bases\MyBase" /N "Admin" /P "Pass" /ConfigurationRepositoryF "D:\Repository" /ConfigurationRepositoryN "Admin" /ConfigurationRepositoryP "RepoPass" /ConfigurationRepositoryUpdateCfg
С помощью пакетных скриптов можно автоматизировать рутинные действия по захвату и освобождению метаданных при регулярных интеграциях.