Вернуть объект или всю конфигурацию к прежней версии хранилища

· 9 мин

Содержание

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

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

Как хранилище хранит версии и почему «откат» — это новая версия

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

Ключевые свойства, от которых зависит откат:

  • 📦 Версия создаётся при каждом помещении. У неё есть номер, автор, дата и комментарий.
  • 🔒 Захват блокирует объект: менять его может только тот, кто захватил. Остальные видят объект только для чтения.
  • 📜 История линейна. Версии не удаляются и не переписываются. Вернуться «назад во времени» нельзя, можно только поместить новую версию со старым содержимым.
  • 🏷️ Метки ставятся на версии из истории. Ими удобно отмечать состояние, переданное в рабочую базу.

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

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

Перед откатом: что проверить и сохранить

Откат в хранилище редко ломает что-то сам по себе. Ломает спешка: не та версия, чужие захваты, забытый объект.

Проверьте до начала:

  1. Номер нужной версии. Откройте Конфигурация → Хранилище конфигурации → История хранилища, найдите версию с ошибкой и ту, что перед ней. Запишите оба номера.
  2. Состав неудачной версии. Выделите версию и откройте отчёт по ней или список изменений. Там видно, какие объекты затронуты.
  3. Кто сейчас держит эти объекты. В окне хранилища (Конфигурация → Хранилище конфигурации → Хранилище...) у захваченных объектов показан пользователь. Захваченный коллегой объект вы не измените, пока он не поместит или не отменит захват.
  4. Свежесть вашей копии. Выполните Обновить конфигурацию из хранилища, чтобы сравнивать с актуальным состоянием, а не с недельной давностью.
  5. Копию на всякий случай. Сохраните текущую конфигурацию в файл: Конфигурация → Сохранить конфигурацию в файл. Это минута, а запасной .cf выручит при любой путанице.

Если правок много, договоритесь с командой: на время отката никто не помещает изменения в затронутые объекты. Иначе между вашим сравнением и помещением кто-то успеет поменять тот же модуль.

Готовность к откату
Выполнено: 0 / 5

Отмена захвата: откат объекта, который ещё не помещён

Самый частый случай. Вы захватили модуль, поправили, поняли, что зря, и хотите вернуть всё как было в хранилище.

Порядок:

  1. В дереве конфигурации выделите объект. Если правки задели несколько объектов, выделите их все или общий узел.
  2. Вызовите Конфигурация → Хранилище конфигурации → Отменить захват или команду из контекстного меню объекта.
  3. В открывшемся окне проверьте список объектов. Флажками отметьте те, захват которых снимаете.
  4. Если нужно снять захват с подчинённых объектов (реквизитов, форм, макетов), включите рекурсивный режим.
  5. Нажмите ОК.

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

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

Если захват держит другой человек

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

  • 👤 Администратор подключается к хранилищу под своей учётной записью.
  • 🗂️ В окне хранилища выделяет объекты, захваченные этим пользователем, и отменяет захват.
  • ⚠️ Правки, которые тот разработчик не поместил, пропадут для хранилища. В его локальной копии они останутся, но поместить их он уже не сможет без повторного захвата.

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

Возврат к прежней версии из истории хранилища

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

Откат одного или нескольких объектов

Подходит, когда ошибка в конкретных модулях или формах.

  1. Откройте окно хранилища и выделите нужный объект.
  2. Откройте историю этого объекта командой на панели окна хранилища. В списке будут только версии, где объект менялся.
  3. Выделите версию перед неудачной и откройте её или сравните с текущей конфигурацией. Так вы убедитесь, что берёте нужное состояние.
  4. Захватите объект в хранилище: Конфигурация → Хранилище конфигурации → Захватить в хранилище. Захват делайте с получением актуальной версии, чтобы не перезаписать чужие правки.
  5. Перенесите в объект старое содержимое. Для модуля надёжнее всего скопировать текст из открытой старой версии. Для форм и макетов используйте сравнение и объединение (следующий раздел).
  6. Проверьте синтаксис (Ctrl+F7 в модуле) и обновите конфигурацию базы данных.
  7. Поместите объект в хранилище с комментарием: «Откат изменений версии 214: вернул прежний расчёт».

Откат всей неудачной версии

Если версия затронула десяток объектов, переносить их по одному долго. Удобнее так:

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

Комментарий к откату — не формальность. Через полгода по нему станет ясно, почему в истории одна и та же правка появилась и исчезла.

Сравнение версий: как найти, что именно изменилось

Без сравнения откат превращается в угадывание. В конфигураторе три полезных режима.

Что сравниваемГде запуститьКогда нужно
Две версии из историиВ истории хранилища выделить две версии и запустить сравнениеПонять, что поменялось между версиями 210 и 214
Свою конфигурацию с хранилищемКонфигурация → Хранилище конфигурации → Сравнить конфигурацию с хранилищемУвидеть свои непомещённые правки или отставание копии
Конфигурацию с файлом .cfКонфигурация → Сравнить конфигурации или Сравнить, объединить с конфигурацией из файлаОткат целой версии, перенос между базами

В окне сравнения:

  • 🟢 по дереву видно, какие объекты отличаются, у каждого показан признак изменения;
  • 🔍 для модулей откройте построчное сравнение текста — отличия подсвечиваются;
  • 🧾 для форм сравнивается и структура элементов, и модуль формы;
  • 📄 отчёт о сравнении можно вывести в табличный документ и приложить к задаче.

Совет из практики: включите в окне сравнения отбор «Показывать только отличия». На крупной конфигурации без него дерево из тысяч объектов не прочитать.

Откат через выгрузку версии в файл и пакетный режим

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

Через отдельную файловую базу

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

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

Пакетные команды конфигуратора

Для скриптов сборки выгрузку версии делают без интерфейса. Параметры подключения к хранилищу: /ConfigurationRepositoryF (путь или адрес), /ConfigurationRepositoryN (пользователь), /ConfigurationRepositoryP (пароль). Выгрузка версии в файл — /ConfigurationRepositoryDumpCfg с ключом -v и номером версии.

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /F "D:\Bases\DevCopy" ^
  /ConfigurationRepositoryF "tcp://repo-server/ERP" ^
  /ConfigurationRepositoryN "builder" /ConfigurationRepositoryP "***" ^
  /ConfigurationRepositoryDumpCfg "D:\Releases\erp_v213.cf" -v 213 ^
  /Out "D:\Logs\dump_213.log"

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

Ошибки при откате и как их не допустить

Здесь собраны ситуации, которые не следуют из шагов выше, но регулярно встречаются в командах разработки.

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

Ещё три привычки, которые снимают половину проблем с откатом:

  • 🏷️ ставьте метку на версию, которую передали в рабочую базу — к ней проще вернуться;
  • ✂️ помещайте изменения небольшими порциями по одной задаче, тогда откат задевает только её;
  • 🧹 не держите захват неделями: чем дольше объект захвачен, тем выше шанс конфликта при откате.

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

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