Помещение объектов в хранилище конфигурации: порядок, захваты и конфликты

· 9 мин

Содержание

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

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

Подготовка конфигурации перед помещением в хранилище

Хранилище принимает изменения из основной конфигурации (той, что открыта в дереве), а не из конфигурации базы данных. Поэтому помещать можно и без нажатия F7. Но отправлять в общее хранилище код, который вы ни разу не запускали, — верный путь сломать работу всей команде.

Перед помещением пройдитесь по короткому списку:

Перед помещением в хранилище
Выполнено: 0 / 5

💡 Синтаксический контроль запускается в меню Конфигурация → Проверка конфигурации или для одного модуля из его контекстного меню. Хранилище само ошибки в коде не ищет: модуль с синтаксической ошибкой будет помещён без возражений.

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

Как поместить изменения объектов в хранилище: пошаговый порядок

Шаг 1. Захватите объект до правки

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

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

Шаг 2. Внесите изменения и проверьте их

Правьте модули, формы, реквизиты. Затем Конфигурация → Обновить конфигурацию базы данных (F7) и запуск отладки (F5). Обновление базы данных в вашей рабочей копии не влияет на хранилище и на других разработчиков.

Шаг 3. Откройте окно помещения

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

  • ✅ Снимите флажки с объектов, которые ещё не готовы: они останутся захваченными, и вы поместите их позже.
  • 📝 Заполните поле комментария. Через полгода по нему будут искать, кто и зачем поменял модуль.
  • 🔒 Включите «Оставить объекты захваченными», если работа над задачей не закончена, а промежуточный результат хочется сохранить в истории.

Шаг 4. Нажмите «Поместить»

Платформа проверит ссылки между объектами, запишет новую версию и снимет захват (если вы его не оставили). Номер версии и ваш комментарий появятся в истории хранилища: Конфигурация → Хранилище конфигурации → История хранилища.

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

Захваченные объекты, корень конфигурации и блокировки

Большинство вопросов «почему не помещается» связаны не с самим помещением, а с захватом.

Новый объект требует захвата родителя

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

  1. Захватить корень.
  2. Создать новый объект.
  3. Как можно быстрее поместить корень вместе с новым объектом (сам объект можно оставить захваченным и дописывать дальше).

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

Как узнать, кто держит объект

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

Отмена захвата

Команда Отменить захват в контекстном меню объекта снимает вашу блокировку. При отмене платформа предложит получить версию объекта из хранилища — это означает откат всех ваших локальных правок по этому объекту.

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

Конфликты версий и ссылочная целостность при записи

Классического «конфликта слияния», как в Git, в хранилище 1С почти не бывает: два человека не могут одновременно держать один объект. Конфликты возникают иначе.

Ссылка на объект, которого нет в хранилище

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

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

Захват без получения последней версии

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

Правки, сделанные без подключения

Частый сценарий: разработчик отключился от хранилища, поменял код «по-быстрому», а потом подключился обратно. При повторном подключении платформа предлагает заменить локальную конфигурацию версией из хранилища, и правки пропадают.

Правильный порядок переноса таких изменений:

  1. Сохранить текущую конфигурацию в файл .cf.
  2. Подключиться к хранилищу и согласиться на получение его версии.
  3. Захватить объекты, которые меняли.
  4. Выполнить Конфигурация → Сравнить, объединить с конфигурацией из файла и выбрать сохранённый .cf.
  5. Отметить в дереве объединения только свои объекты и выполнить объединение.
  6. Проверить и поместить изменения в хранилище обычным способом.

Права пользователей и роль администратора хранилища

Список пользователей ведётся в Конфигурация → Хранилище конфигурации → Администрирование. Войти туда может только пользователь с административными правами в хранилище. Каждому пользователю назначается набор прав флажками.

ПравоЧто даётКому выдавать
Без дополнительных правПодключение, просмотр истории, получение объектовТестировщикам, аналитикам
Захват объектовЗахват, изменение и помещениеРазработчикам
Административные функцииУправление пользователями, отмена чужих захватов, обслуживание хранилищаВедущему разработчику, одному-двум людям

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

Без права «Захват объектов» пользователь видит хранилище, но объекты у него остаются только на чтение, и помещать ему нечего. Это первое, что проверяют, когда новый сотрудник жалуется, что «не даёт захватить».

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

Метки и комментарии как часть регламента

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

Помещение изменений из командной строки

Для сборочного сервера или пакетной обработки помещение запускают из пакетного конфигуратора. Используются параметры подключения /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-файле — плохая идея для общего сервера. Храните его в переменной окружения учётной записи, под которой работает сборка.

Ошибки при помещении в хранилище и что с ними делать

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

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

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

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

Можно ли откатить неудачное помещение?
Откатить версию в хранилище нельзя, но можно вернуть старое состояние объекта. Откройте историю хранилища, выберите предыдущую версию, получите из неё объект, захватите его и поместите заново с комментарием об откате.
Нужно ли обновлять конфигурацию базы данных перед помещением?
Для самого помещения — нет: в хранилище уходит основная конфигурация. Но без обновления вы не проверите изменения в отладке, поэтому на практике F7 делают перед каждым помещением.
Сколько объектов можно поместить за один раз?
Ограничения на количество нет. Удобнее помещать логически связанными порциями под одну задачу: так история читается, а откат одной задачи не задевает другие.
Что будет с моими правками, если сломается локальная база?
Всё, что не помещено, хранится только в вашей конфигурации. Регулярно сохраняйте конфигурацию в файл или помещайте промежуточные версии с флажком «Оставить объекты захваченными».
Видят ли пользователи рабочей базы помещённые изменения?
Нет. Хранилище — инструмент разработки. В рабочую базу изменения попадают отдельно: через файл поставки, файл конфигурации или обновление базы, подключенной к хранилищу.