Помещение объектов в хранилище конфигурации: порядок, захваты и конфликты
Содержание
Чтобы поместить изменения в хранилище 1С, откройте конфигуратор, подключенный к хранилищу, и выберите Конфигурация → Хранилище конфигурации → Поместить изменения объектов в хранилище. В открывшемся дереве отметьте захваченные объекты, напишите комментарий и нажмите «Поместить». Хранилище создаст новую версию, а захват с объектов снимется — если не включить флажок «Оставить объекты захваченными».
Есть три способа сделать то же самое: из меню (весь список захваченного сразу), из контекстного меню объекта в дереве конфигурации (только выделенное) и из командной строки 1cv8 DESIGNER (для сборочных скриптов). Первый удобен в обычной работе, второй — когда нужно отдать коллеге один модуль, третий — для автоматизации. Порядок действий во всех случаях одинаковый: захватили, изменили, проверили, поместили.
Подготовка конфигурации перед помещением в хранилище
Хранилище принимает изменения из основной конфигурации (той, что открыта в дереве), а не из конфигурации базы данных. Поэтому помещать можно и без нажатия F7. Но отправлять в общее хранилище код, который вы ни разу не запускали, — верный путь сломать работу всей команде.
Перед помещением пройдитесь по короткому списку:
💡 Синтаксический контроль запускается в меню Конфигурация → Проверка конфигурации или для одного модуля из его контекстного меню. Хранилище само ошибки в коде не ищет: модуль с синтаксической ошибкой будет помещён без возражений.
Отдельно о свежих версиях. Захват в хранилище исключительный: один объект в каждый момент может держать только один разработчик. Но ваш модуль вызывает общие модули, справочники и регистры, которые за это время мог поменять кто-то другой. Команда Получить объекты из хранилища подтянет их актуальное состояние, и вы проверите свой код на той конфигурации, которая будет в хранилище после помещения.
Как поместить изменения объектов в хранилище: пошаговый порядок
Шаг 1. Захватите объект до правки
Пока объект не захвачен, в подключенной конфигурации он открыт только на чтение. Захват делается через контекстное меню объекта: Хранилище → Захватить в хранилище. В диалоге захвата обычно оставляют включённым получение захватываемых объектов: тогда вы начнёте править именно ту версию, что лежит в хранилище.
Если объект составной (например, документ с формами и макетами), захват можно выполнить рекурсивно — вместе со всеми подчинёнными объектами. Значок замка рядом с объектом в дереве показывает статус: зелёный — захвачен вами, красный — другим пользователем.
Шаг 2. Внесите изменения и проверьте их
Правьте модули, формы, реквизиты. Затем Конфигурация → Обновить конфигурацию базы данных (F7) и запуск отладки (F5). Обновление базы данных в вашей рабочей копии не влияет на хранилище и на других разработчиков.
Шаг 3. Откройте окно помещения
Выберите Конфигурация → Хранилище конфигурации → Поместить изменения объектов в хранилище. Откроется дерево конфигурации, в котором флажками отмечены захваченные вами объекты.
- ✅ Снимите флажки с объектов, которые ещё не готовы: они останутся захваченными, и вы поместите их позже.
- 📝 Заполните поле комментария. Через полгода по нему будут искать, кто и зачем поменял модуль.
- 🔒 Включите «Оставить объекты захваченными», если работа над задачей не закончена, а промежуточный результат хочется сохранить в истории.
Шаг 4. Нажмите «Поместить»
Платформа проверит ссылки между объектами, запишет новую версию и снимет захват (если вы его не оставили). Номер версии и ваш комментарий появятся в истории хранилища: Конфигурация → Хранилище конфигурации → История хранилища.
Перед помещением полезно посмотреть, что именно уйдёт в хранилище: Конфигурация → Хранилище конфигурации → Сравнить конфигурацию с хранилищем. Отчёт сравнения покажет каждое изменённое свойство и строку модуля. Так ловятся случайные правки, сделанные «на минутку» и забытые.
Захваченные объекты, корень конфигурации и блокировки
Большинство вопросов «почему не помещается» связаны не с самим помещением, а с захватом.
Новый объект требует захвата родителя
Чтобы добавить новый справочник, документ или общий модуль, нужно захватить корень конфигурации — объект с её именем на самом верху дерева. Пока корень держите вы, другие разработчики не могут добавлять объекты верхнего уровня. Поэтому порядок такой:
- Захватить корень.
- Создать новый объект.
- Как можно быстрее поместить корень вместе с новым объектом (сам объект можно оставить захваченным и дописывать дальше).
Новые реквизиты, формы и макеты добавляются внутри уже захваченного объекта — для них корень не нужен.
Как узнать, кто держит объект
Окно Конфигурация → Хранилище конфигурации → Хранилище показывает статус всех объектов и имя пользователя, который их захватил. Если коллега ушёл в отпуск с захваченным модулем, есть два пути: попросить его поместить или отменить захват удалённо, либо обратиться к администратору хранилища.
Отмена захвата
Команда Отменить захват в контекстном меню объекта снимает вашу блокировку. При отмене платформа предложит получить версию объекта из хранилища — это означает откат всех ваших локальных правок по этому объекту.
Отмена захвата с получением объекта необратимо стирает несохранённую работу. Если правки могут пригодиться, сначала сохраните конфигурацию в файл: Конфигурация → Сохранить конфигурацию в файл.
Конфликты версий и ссылочная целостность при записи
Классического «конфликта слияния», как в Git, в хранилище 1С почти не бывает: два человека не могут одновременно держать один объект. Конфликты возникают иначе.
Ссылка на объект, которого нет в хранилище
Вы создали регистр сведений и в документе добавили реквизит этого типа. Если поместить только документ, а регистр оставить у себя, хранилище откажет: в нём появилась бы ссылка в пустоту. Решение — поместить связанные объекты одной операцией. В окне помещения отметьте флажками и документ, и регистр.
Обратная ситуация — удаление. Удалённый вами объект может использоваться в чужих модулях или реквизитах. Перед удалением найдите ссылки на него через контекстное меню объекта (Поиск ссылок на объект), уберите их, и только потом помещайте.
Захват без получения последней версии
Если при захвате отключить получение объекта, вы продолжите работать со своей локальной копией. При помещении она заменит то, что лежало в хранилище, — включая чужие правки, сделанные после вашей последней синхронизации. Отключать получение стоит, только если вы точно знаете, что в хранилище за это время ничего не менялось.
Правки, сделанные без подключения
Частый сценарий: разработчик отключился от хранилища, поменял код «по-быстрому», а потом подключился обратно. При повторном подключении платформа предлагает заменить локальную конфигурацию версией из хранилища, и правки пропадают.
Правильный порядок переноса таких изменений:
- Сохранить текущую конфигурацию в файл
.cf. - Подключиться к хранилищу и согласиться на получение его версии.
- Захватить объекты, которые меняли.
- Выполнить
Конфигурация → Сравнить, объединить с конфигурацией из файлаи выбрать сохранённый.cf. - Отметить в дереве объединения только свои объекты и выполнить объединение.
- Проверить и поместить изменения в хранилище обычным способом.
Права пользователей и роль администратора хранилища
Список пользователей ведётся в Конфигурация → Хранилище конфигурации → Администрирование. Войти туда может только пользователь с административными правами в хранилище. Каждому пользователю назначается набор прав флажками.
| Право | Что даёт | Кому выдавать |
|---|---|---|
| Без дополнительных прав | Подключение, просмотр истории, получение объектов | Тестировщикам, аналитикам |
| Захват объектов | Захват, изменение и помещение | Разработчикам |
| Административные функции | Управление пользователями, отмена чужих захватов, обслуживание хранилища | Ведущему разработчику, одному-двум людям |
Отдельным флажком задаётся право изменять состав версий — оно нужно для обслуживающих операций с историей. Обычному разработчику его не дают.
Без права «Захват объектов» пользователь видит хранилище, но объекты у него остаются только на чтение, и помещать ему нечего. Это первое, что проверяют, когда новый сотрудник жалуется, что «не даёт захватить».
Если администратор отменяет чужой захват, правки того пользователя в хранилище не попадут. Они останутся только в его локальной конфигурации, и переносить их придётся через сохранение в файл и объединение.
Метки и комментарии как часть регламента
В истории хранилища на любую версию можно поставить метку — например, «Передано в продуктив» или номер выпуска. Метки помогают потом быстро получить нужную версию целиком. Договоритесь в команде о формате комментария при помещении: номер задачи из трекера и одна фраза о сути изменения. Комментарий «правки» через год ничего не скажет.
Помещение изменений из командной строки
Для сборочного сервера или пакетной обработки помещение запускают из пакетного конфигуратора. Используются параметры подключения /ConfigurationRepositoryF (адрес хранилища), /ConfigurationRepositoryN и /ConfigurationRepositoryP (пользователь и пароль) и команда /ConfigurationRepositoryCommit.
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER ^
/F "D:\Bases\Dev" /N "Разработчик" /P "" ^
/ConfigurationRepositoryF "tcp://repo-server/Buh" ^
/ConfigurationRepositoryN "build" /ConfigurationRepositoryP "secret" ^
/ConfigurationRepositoryCommit -comment "TASK-512: исправлен расчёт скидки" ^
/Out "D:\Logs\commit.log"
Номер версии платформы в пути подставьте свой. У команды есть ключи -objects (файл со списком объектов для частичного помещения) и -keepLocked (оставить захват). Полный список ключей и их точное поведение уточняйте в справке по запуску конфигуратора для вашей версии платформы. Результат всегда проверяйте по файлу из /Out: пакетный режим не показывает окон с ошибками.
💡 Пароль пользователя хранилища в bat-файле — плохая идея для общего сервера. Храните его в переменной окружения учётной записи, под которой работает сборка.
Ошибки при помещении в хранилище и что с ними делать
Если для снятия блокировки файлового хранилища нужно перезапускать службу или сервер, сначала предупредите команду: у всех подключенных разработчиков оборвётся операция с хранилищем. Делайте это, когда никто не помещает изменения.
Ещё одна неочевидная ошибка — работа в разных конфигурациях. Хранилище подключается к основной конфигурации, а расширения подключаются к своим отдельным хранилищам. Правки в расширении не попадут в хранилище основной конфигурации, сколько ни помещай.