Как вернуть объект к прежней версии в хранилище 1С
Содержание
Откат объекта в хранилище конфигурации делают в Конфигураторе через меню Конфигурация → Хранилище конфигурации. Если правки ещё не помещены — объект возвращает к версии из хранилища команда Отменить захват. Если изменение уже помещено — объект откатывают к прежней версии через Историю хранилища и объединение конфигураций
.
Важно сразу развести два разных действия. «Отменить захват» убирает ваши несохранённые правки захваченного объекта. Откат через историю возвращает объект к состоянию той версии, которая уже лежит в хранилище. Ниже — когда выбрать какой способ, точные пути и типичные ошибки.
Когда приходится откатывать объект
Хранилище хранит всю историю доработок конфигурации. Откат нужен, когда последнее изменение оказалось хуже предыдущего состояния:
- 🐞 доработку поместили в хранилище, а она сломала рабочий механизм;
- 🔀 объединение прошло с ошибкой, и объект склеился не так, как нужно;
- 🗑️ объект (реквизит, форму, справочник) удалили и зафиксировали удаление, а он ещё нужен;
- 🧪 экспериментальные правки захватили, но помещать их не собирались;
- ⏪ перед релизом нужно вернуть конкретный модуль к версии двухдневной давности.
Во всех случаях откат — это не «стирание» истории. Хранилище только пополняется: вы возвращаете прежнее содержимое объекта и помещаете его как новую версию.
Три способа отката отличаются глубиной возврата и тем, нужно ли потом помещать объект в хранилище:
| Способ | Когда применять | Нужно помещать в хранилище | Основной риск |
|---|---|---|---|
| Отменить захват | Правки захвачены, но ещё не помещены | Нет, захват просто снимается | Несохранённые правки теряются сразу |
| Откат через историю | Изменение уже помещено | Да, откат — это новая версия | Можно задеть зависимые объекты |
| Восстановление из версии | Объект удалён и удаление помещено | Да | Данные базы откат не возвращает |
Дальше — каждый способ по шагам, с точными путями меню.
Что проверить до отката: права, захват и блокировки
Откат доступен только из Конфигуратора при подключении к хранилищу. Подключение: Конфигурация → Хранилище конфигурации → Подключиться к хранилищу, укажите адрес хранилища, имя пользователя и пароль. Через режим 1С:Предприятие откатить объект нельзя — хранилище работает на уровне конфигурации, а не данных.
Если база переведена на хранилище, то в режиме сравнения вы увидите пометки захвата: замок у объекта означает, что он захвачен, а серый замок — что захвачен другим пользователем. Эти пометки подскажут, свободен ли объект для отката.
Три условия, без которых откат не пройдёт:
- Права пользователя хранилища. Ваша учётная запись должна иметь право захватывать объект. Управление пользователями и правами — в настройках хранилища, их меняет администратор хранилища.
- Объект должен быть захвачен вами. Пока объект не захвачен, его нельзя менять. Захват: выделите объект в дереве конфигурации →
Конфигурация → Хранилище конфигурации → Захватить в хранилище. - Объект не захвачен другим. Если объект держит другой разработчик, вы не сможете его откатить, пока он не отменит захват. Принудительно снять чужой захват может только администратор хранилища.
Перед массовым откатом выгрузите текущую конфигурацию в файл: Конфигурация → Сохранить конфигурацию в файл (.cf). Это ваша точка возврата, если объединение пойдёт не так.
Отмена захвата: откат ещё не помещённых правок
Самый простой случай. Вы захватили объект, наменяли, но в хранилище ещё не поместили — и хотите всё вернуть.
- Выделите объект в дереве конфигурации.
Конфигурация → Хранилище конфигурации → Отменить захват.- Подтвердите отмену.
Конфигуратор снимет захват и вернёт объект к версии, которая сейчас хранится в хранилище. Все несохранённые правки этого объекта будут потеряны безвозвратно — отмена захвата не кладёт их ни в какую историю.
Отмена захвата откатывает только к последней помещённой версии. Если нужная версия — не последняя, этот способ не подойдёт, используйте откат через историю.
Если объект захвачен другим сотрудником и его срочно нужно освободить, администратор хранилища выполняет принудительную отмену захвата из той же команды. Предупредите коллегу: его несохранённые правки по этому объекту тоже пропадут.
Когда применять этот способ. Отмена захвата подходит, если вы ещё не успели поместить объект и хотите откатиться к текущему состоянию хранилища. Это самая быстрая и безопасная операция: она не трогает ни структуру базы, ни историю хранилища. Ничего не помещаете и не обновляете — просто снимаете захват.
Откат к ранее помещённой версии через историю хранилища
Это основной сценарий, когда ошибочное изменение уже в хранилище. Порядок такой.
Шаг 1. Найдите версию. Откройте Конфигурация → Хранилище конфигурации → История хранилища. В списке — номер версии, дата, автор и комментарий к помещению. Определите номер версии, к состоянию которой нужно вернуть объект.
Шаг 2. Захватите объект. Без захвата изменить объект нельзя: Конфигурация → Хранилище конфигурации → Захватить в хранилище.
Шаг 3. Перенесите прежнее состояние. Надёжный способ — через сравнение и объединение. Получите конфигурацию нужной версии отдельным файлом .cf (пакетным режимом, см. раздел ниже) и выполните Конфигурация → Сравнить, объединить с конфигурацией из файла. В окне объединения снимите все галочки и отметьте только откатываемый объект — тогда остальная конфигурация не затронется.
Шаг 4. Обновите конфигурацию базы данных. После объединения нажмите Обновить конфигурацию базы данных (F7). Если откат меняет структуру (состав реквизитов, таблиц), для обновления понадобится монопольный доступ к базе.
Шаг 5. Поместите объект. Конфигурация → Хранилище конфигурации → Поместить в хранилище. В комментарии укажите, что это откат к версии № N — так в истории будет видно, что произошло.
Историю удалять нельзя и не нужно. После отката в хранилище появится новая версия, повторяющая старое содержимое объекта. Прежние версии остаются на месте.
Почему именно объединение, а не «загрузка версии целиком». Если просто получить всю конфигурацию старой версии, вы откатите заодно и чужие правки, сделанные после. Объединение по одному объекту снимает эту проблему: в хранилище вернётся прежним только тот объект, который вы отметили, остальная конфигурация останется актуальной. Поэтому при точечном откате всегда снимайте все галочки в окне объединения и оставляйте только нужные объекты.
Откат нескольких объектов за один заход
Если ошибочным оказался целый блок доработки, объекты откатывают группой, чтобы не разбить связи между ними.
- В дереве конфигурации выделите все нужные объекты с
CtrlилиShift. - Захватите их одной командой «Захватить в хранилище».
- В окне объединения из файла нужной версии отметьте галочками весь набор откатываемых объектов сразу.
- Обновите конфигурацию БД (F7).
- Поместите все объекты одним помещением с общим комментарием.
При групповом откате следите за ссылками. Если откатываемый объект ссылается на реквизит, который в текущей версии удалён, перенесите и его — иначе получите потерянную ссылку. В окне объединения Конфигуратор показывает объекты, которых не хватает для целостности: не игнорируйте этот список.
Восстановление удалённого объекта
Удалённый и помещённый объект исчезает из текущей конфигурации, но остаётся во всех версиях хранилища до момента удаления. Порядок восстановления:
- В «Истории хранилища» найдите версию, в которой объект ещё существовал (обычно — предыдущая перед той, где в комментарии стоит удаление).
- Получите эту версию файлом
.cf. - Запустите
Сравнить, объединить с конфигурацией из файла. Объект, который есть в старой версии и отсутствует в текущей, объединение покажет как добавляемый — отметьте его. - Обновите конфигурацию БД (F7) и поместите объект в хранилище.
Нюанс про данные. Откат касается конфигурации (метаданных), а не содержимого базы. Если вместе с объектом (например, справочником или его реквизитом) при удалении были потеряны данные в таблицах базы, восстановление метаданных их не вернёт. Данные придётся поднимать из резервной копии базы отдельно. Поэтому восстановление удалённого реквизита имеет смысл делать на базе, где эти данные ещё есть.
Пакетный режим и автоматизация отката
Разовый откат удобнее делать руками, но получить конфигурацию конкретной версии отдельным файлом проще пакетным запуском Конфигуратора. Команда вида:
1cv8 CONFIG /F"C:\base" /N"Разработчик" /P"пароль" ^
/ConfigurationRepositoryF"C:\repo" ^
/ConfigurationRepositoryN"ИмяВХранилище" ^
/ConfigurationRepositoryP"парольХранилища" ^
/ConfigurationRepositoryUpdateCfg -v 125 ^
/ConfigurationRepositoryReport "C:\report.mxl"
Здесь -v 125 — номер версии, к которой поднимается конфигурация, а ключ отчёта выгружает историю хранилища в файл, чтобы найти нужный номер версии. Такой запуск можно направить на отдельную (копийную) базу, затем из полученной конфигурации объединить объект в рабочую.
Точный набор и написание ключей /ConfigurationRepository* зависят от версии платформы. Перед использованием в скрипте сверьтесь со справкой по пакетному режиму — запустите 1cv8 /? или откройте документацию по параметрам командной строки. Не подставляйте ключи, в которых не уверены.
Если откатов много и они регулярны, разложите задачу на два шага и автоматизируйте первый. Пакетный запуск получает конфигурацию нужной версии в копийную базу или в файл .cf без участия человека — по расписанию или по команде сборки. А вот объединение объектов удобнее оставлять на ручной контроль: именно здесь решается, какие объекты и зависимости переносить, и ошибка в автоматическом объединении обойдётся дороже, чем сэкономленное время.
Отдельная история — перевод разработки с хранилища на Git. Для этого существуют внешние мосты, которые выгружают историю хранилища в репозиторий Git. Это уже не про разовый откат, а про смену модели совместной работы, и настраивается отдельно. Для точечного возврата одного объекта пакетного режима и объединения достаточно.