Как вернуть случайно удаленный объект в конфигураторе 1С, если база еще не была обновлена?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый разработчик 1С хотя бы раз в жизни сталкивался с ситуацией, когда в процессе редактирования метаданных случайно удалялся важный объект — будь то сложная обработка, отчет, документ или справочник. Ситуация усугубляется, если рефлекторно была нажата комбинация клавиш Ctrl+S (сохранение изменений). В этот момент кажется, что многочасовая работа безвозвратно утеряна.

Однако не стоит паниковать. Если вы еще не успели обновить конфигурацию базы данных (не нажимали клавишу F7 или соответствующую кнопку на панели инструментов), восстановить удаленный объект можно стандартными средствами платформы. В этой статье мы подробно разберем, как устроена система хранения конфигураций «под капотом» 1С, как безопасно вернуть удаленные данные и что делать в более сложных ситуациях.

Как устроена система хранения конфигураций в 1С

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

  1. Основная конфигурация (редактируемая): Это своего рода черновик или рабочая область разработчика. Именно в ней мы создаем новые объекты, пишем код в модулях и удаляем ненужные элементы. При нажатии клавиш Ctrl+S изменения сохраняются только в эту область. В терминах СУБД (например, MS SQL Server или PostgreSQL) эти данные хранятся в таблице ConfigSave.
  2. Конфигурация базы данных (рабочая): Это стабильная версия конфигурации, под которой в данный момент работают пользователи в режиме предприятия. Изменения попадают сюда только после успешного обновления конфигурации базы данных (клавиша F7 или меню Конфигурация — Обновить конфигурацию базы данных). В СУБД эта конфигурация живет в таблице Config.

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

Важные индикаторы состояния конфигурации

Давайте обратим внимание на заголовок окна дерева метаданных в конфигураторе. Платформа 1С визуально подсказывает нам текущий статус изменений:

Пошаговая инструкция по восстановлению удаленного объекта

Если вы случайно удалили объект метаданных (например, обработку ПечатьНакладных), сохранили изменения и видите индикатор <!>, выполните следующие шаги для восстановления:

Шаг 1. Безопасное сохранение текущего черновика (рекомендуется)

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

Для этого в меню конфигуратора выберите пункт Конфигурация — Сохранить конфигурацию в файл... и укажите имя файла (например, temp_draft.cf). В случае необходимости вы сможете позже сравнить и объединить его с восстановленной конфигурацией.

Шаг 2. Запуск процедуры отката

Перейдите в главное меню конфигуратора и выберите пункт Конфигурация — Конфигурация базы данных — Вернуться к конфигурации БД.

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

Шаг 3. Проверка результата

После завершения процесса дерево метаданных обновится. Вы увидите, что случайно удаленный объект снова появился на своем прежнем месте со всеми модулями, формами и макетами. Значок <!> в заголовке окна конфигурации исчезнет, подтверждая, что основная и рабочая конфигурации теперь абсолютно идентичны.

Что делать в сложных сценариях восстановления

К сожалению, не всегда процесс восстановления ограничивается нажатием одной кнопки. Рассмотрим ситуации, когда стандартный метод "Вернуться к конфигурации БД" не может быть применен напрямую.

Сценарий 1. Использование Хранилища конфигурации

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

  1. Если удаленный объект был вами предварительно захвачен в хранилище, достаточно просто отменить захват. Для этого нажмите правой кнопкой мыши на корень конфигурации, выберите Хранилище — Отменить захват. Объект вернется к состоянию последней помещенной в хранилище версии.
  2. Если объект не был захвачен или изменения уже были помещены в хранилище, откройте историю хранилища (Хранилище — История хранилища). Нажмите на версию, в которой объект еще существовал, и сохраните конфигурацию этой версии в файл historic_version.cf. После этого выполните сравнение и объединение вашей текущей конфигурации с сохраненным файлом, вернув только удаленный объект.

Сценарий 2. Работа с Расширениями конфигурации

Если вы удалили объект не в основной конфигурации, а внутри Расширения, стандартное меню конфигурации базы данных не поможет, так как расширения имеют собственный изолированный жизненный цикл.

Чтобы выполнить откат для расширения, выполните следующие действия:

  1. Откройте список расширений через меню Конфигурация — Расширения конфигурации.
  2. Выделите нужное расширение в списке и откройте его конфигурацию.
  3. В окне конфигурации конкретного расширения выберите меню Действия — Конфигурация — Конфигурация базы данных — Вернуться к конфигурации БД.

Сценарий 3. Худший случай — база данных уже была обновлена (нажата клавиша F7)

Если вы успели обновить конфигурацию базы данных, то таблицы Config и ConfigSave синхронизировались. Объект физически удален отовсюду. Но даже здесь есть варианты решения:

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


// Пример программного подключения и проверки восстановленной внешней обработки
ПутьКФайлу = "C:\Temp\ВосстановленнаяОбработка.epf";
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные);

Попытка
    ИмяОбработки = ВнешниеОбработки.Подключить(АдресХранилища, , Истина);
    ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяОбработки);
    Сообщить("Обработка успешно подключена и инициализирована!");
Исключение
    Сообщить("Ошибка при подключении обработки: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;

Полезные привычки для предотвращения потери данных

Давайте резюмируем простые правила, которые помогут свести к минимуму риск потери результатов вашей работы:

← На главную