Вернуть объект или всю конфигурацию к прежней версии хранилища
Содержание
Откатить изменения в хранилище 1С можно двумя путями. Если правки ещё не помещены, достаточно отменить захват объекта: Конфигурация → Хранилище конфигурации → Отменить захват, и объект вернётся к состоянию из хранилища. Если неудачная версия уже помещена, кнопки «удалить версию» нет: старое состояние берут из истории хранилища, переносят в конфигурацию через сравнение и объединение и помещают как новую версию.
Звучит громоздко, но на практике откат одного модуля занимает пару минут. Ниже порядок действий для обоих случаев, способ через выгрузку в файл и пакетные команды конфигуратора для тех, кто откатывает регулярно.
Как хранилище хранит версии и почему «откат» — это новая версия
Хранилище конфигурации — общая база разработки. Каждый разработчик подключён к нему из своей копии конфигурации и меняет объекты по схеме «захватил → изменил → поместил».
Ключевые свойства, от которых зависит откат:
- 📦 Версия создаётся при каждом помещении. У неё есть номер, автор, дата и комментарий.
- 🔒 Захват блокирует объект: менять его может только тот, кто захватил. Остальные видят объект только для чтения.
- 📜 История линейна. Версии не удаляются и не переписываются. Вернуться «назад во времени» нельзя, можно только поместить новую версию со старым содержимым.
- 🏷️ Метки ставятся на версии из истории. Ими удобно отмечать состояние, переданное в рабочую базу.
Отсюда простое правило. Всё, что лежит только в вашей локальной конфигурации, откатывается отменой захвата. Всё, что уже в хранилище, откатывается новой версией.
| Ситуация | Что делать | Что потеряется |
|---|---|---|
| Объект захвачен, правки не помещены | Отменить захват | Ваши несохранённые в хранилище правки этого объекта |
| Неудачная версия помещена, после неё ничего не меняли | Взять предыдущую версию из истории, объединить, поместить | Ничего, история сохранится |
| После неудачной версии коллеги поместили ещё несколько | Откатить только затронутые объекты, сверив с последней версией | Ничего, если не задеть чужие правки |
| Нужно состояние конфигурации на конкретную дату целиком | Сохранить версию в .cf и разобрать отличия | Ничего, работа идёт с копией |
Перед откатом: что проверить и сохранить
Откат в хранилище редко ломает что-то сам по себе. Ломает спешка: не та версия, чужие захваты, забытый объект.
Проверьте до начала:
- Номер нужной версии. Откройте
Конфигурация → Хранилище конфигурации → История хранилища, найдите версию с ошибкой и ту, что перед ней. Запишите оба номера. - Состав неудачной версии. Выделите версию и откройте отчёт по ней или список изменений. Там видно, какие объекты затронуты.
- Кто сейчас держит эти объекты. В окне хранилища (
Конфигурация → Хранилище конфигурации → Хранилище...) у захваченных объектов показан пользователь. Захваченный коллегой объект вы не измените, пока он не поместит или не отменит захват. - Свежесть вашей копии. Выполните
Обновить конфигурацию из хранилища, чтобы сравнивать с актуальным состоянием, а не с недельной давностью. - Копию на всякий случай. Сохраните текущую конфигурацию в файл:
Конфигурация → Сохранить конфигурацию в файл. Это минута, а запасной .cf выручит при любой путанице.
Если правок много, договоритесь с командой: на время отката никто не помещает изменения в затронутые объекты. Иначе между вашим сравнением и помещением кто-то успеет поменять тот же модуль.
Отмена захвата: откат объекта, который ещё не помещён
Самый частый случай. Вы захватили модуль, поправили, поняли, что зря, и хотите вернуть всё как было в хранилище.
Порядок:
- В дереве конфигурации выделите объект. Если правки задели несколько объектов, выделите их все или общий узел.
- Вызовите
Конфигурация → Хранилище конфигурации → Отменить захватили команду из контекстного меню объекта. - В открывшемся окне проверьте список объектов. Флажками отметьте те, захват которых снимаете.
- Если нужно снять захват с подчинённых объектов (реквизитов, форм, макетов), включите рекурсивный режим.
- Нажмите
ОК.
Объект получает версию из хранилища, ваши локальные правки по нему пропадают. Отмену захвата не вернуть: если в правках было что-то полезное, сначала скопируйте этот код в текстовый файл.
После отмены захвата основная конфигурация отличается от конфигурации базы данных. Чтобы отладка и запуск в режиме 1С:Предприятие шли уже по откаченному варианту, выполните Конфигурация → Обновить конфигурацию базы данных (F7).
Если захват держит другой человек
Разработчик уволился, ушёл в отпуск или его копия базы потеряна, а объекты остались захваченными. Снять чужой захват может администратор хранилища.
- 👤 Администратор подключается к хранилищу под своей учётной записью.
- 🗂️ В окне хранилища выделяет объекты, захваченные этим пользователем, и отменяет захват.
- ⚠️ Правки, которые тот разработчик не поместил, пропадут для хранилища. В его локальной копии они останутся, но поместить их он уже не сможет без повторного захвата.
Перед снятием чужого захвата узнайте, не лежит ли у коллеги в копии незаконченная работа. Её можно выгрузить в .cf и перенести позже через сравнение и объединение.
Возврат к прежней версии из истории хранилища
Неудачная версия уже помещена. Задача: получить состояние, которое было до неё, и поместить его заново.
Откат одного или нескольких объектов
Подходит, когда ошибка в конкретных модулях или формах.
- Откройте окно хранилища и выделите нужный объект.
- Откройте историю этого объекта командой на панели окна хранилища. В списке будут только версии, где объект менялся.
- Выделите версию перед неудачной и откройте её или сравните с текущей конфигурацией. Так вы убедитесь, что берёте нужное состояние.
- Захватите объект в хранилище:
Конфигурация → Хранилище конфигурации → Захватить в хранилище. Захват делайте с получением актуальной версии, чтобы не перезаписать чужие правки. - Перенесите в объект старое содержимое. Для модуля надёжнее всего скопировать текст из открытой старой версии. Для форм и макетов используйте сравнение и объединение (следующий раздел).
- Проверьте синтаксис (
Ctrl+F7в модуле) и обновите конфигурацию базы данных. - Поместите объект в хранилище с комментарием: «Откат изменений версии 214: вернул прежний расчёт».
Откат всей неудачной версии
Если версия затронула десяток объектов, переносить их по одному долго. Удобнее так:
- В истории хранилища выделите версию перед неудачной.
- Сохраните её в файл командой сохранения версии. Получится обычный .cf с конфигурацией на тот момент.
- Захватите все объекты, перечисленные в составе неудачной версии.
- Выполните
Конфигурация → Сравнить, объединить с конфигурацией из файлаи укажите сохранённый .cf. - В окне сравнения оставьте флажки только у объектов из неудачной версии. Остальные отличия, если они есть, относятся к более поздним версиям, их не трогайте.
- Выполните объединение, обновите конфигурацию базы данных, проверьте работу.
- Поместите изменения одной версией с понятным комментарием.
Комментарий к откату — не формальность. Через полгода по нему станет ясно, почему в истории одна и та же правка появилась и исчезла.
Сравнение версий: как найти, что именно изменилось
Без сравнения откат превращается в угадывание. В конфигураторе три полезных режима.
| Что сравниваем | Где запустить | Когда нужно |
|---|---|---|
| Две версии из истории | В истории хранилища выделить две версии и запустить сравнение | Понять, что поменялось между версиями 210 и 214 |
| Свою конфигурацию с хранилищем | Конфигурация → Хранилище конфигурации → Сравнить конфигурацию с хранилищем | Увидеть свои непомещённые правки или отставание копии |
| Конфигурацию с файлом .cf | Конфигурация → Сравнить конфигурации или Сравнить, объединить с конфигурацией из файла | Откат целой версии, перенос между базами |
В окне сравнения:
- 🟢 по дереву видно, какие объекты отличаются, у каждого показан признак изменения;
- 🔍 для модулей откройте построчное сравнение текста — отличия подсвечиваются;
- 🧾 для форм сравнивается и структура элементов, и модуль формы;
- 📄 отчёт о сравнении можно вывести в табличный документ и приложить к задаче.
Совет из практики: включите в окне сравнения отбор «Показывать только отличия». На крупной конфигурации без него дерево из тысяч объектов не прочитать.
Откат через выгрузку версии в файл и пакетный режим
Иногда удобнее работать не с хранилищем напрямую, а с копией. Например, когда надо собрать состояние конфигурации на дату релиза и выкатить его в рабочую базу, не трогая разработку.
Через отдельную файловую базу
- Сохраните нужную версию из истории хранилища в .cf.
- Создайте пустую файловую базу
и загрузите в неё этот .cf:
Конфигурация → Загрузить конфигурацию из файла. - Сравнивайте, проверяйте и тестируйте в этой базе. Хранилище и копии коллег не задеты.
- Перенесите нужные объекты обратно через сравнение и объединение, как описано выше.
Не загружайте старый .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"
Номер версии платформы в пути замените на свой. Пароль храните не в самом файле, а в переменной окружения или в хранилище секретов сборочного сервера.
Ошибки при откате и как их не допустить
Здесь собраны ситуации, которые не следуют из шагов выше, но регулярно встречаются в командах разработки.
Ещё три привычки, которые снимают половину проблем с откатом:
- 🏷️ ставьте метку на версию, которую передали в рабочую базу — к ней проще вернуться;
- ✂️ помещайте изменения небольшими порциями по одной задаче, тогда откат задевает только её;
- 🧹 не держите захват неделями: чем дольше объект захвачен, тем выше шанс конфликта при откате.