Ситуация, когда после нескольких дней напряженной работы программист случайно нажимает кнопку «Отменить захват» (Undo Checkout) в хранилище конфигурации, является одной из самых стрессовых в практике разработки на платформе 1С. При отмене захвата конфигуратор заменяет текущее состояние объектов в основной конфигурации на те версии, которые хранятся в хранилище, фактически «откатывая» всю проделанную работу. Однако, если сеанс «1С:Предприятие» или сам конфигуратор не были закрыты поспешно, шансы на спасение кода практически стопроцентные. Разберем детально все способы восстановления данных.
Это основной и самый надежный способ, упомянутый в обсуждении. Он основан на архитектурной особенности 1С: в системе существуют как минимум две конфигурации — основная (в которой вы работаете) и конфигурация базы данных (которая исполняется пользователями). Если вы успели обновить конфигурацию базы данных (нажать «синюю бочку» или F5) до того, как произошла досадная отмена захвата, ваши изменения все еще физически находятся в таблицах базы данных.
Проанализируем последовательность действий для этого метода:
Конфигурация — Конфигурация базы данных — Сравнить, объединить с конфигурацией базы данных.Если вы опасаетесь выполнять объединение сразу, можно воспользоваться альтернативным путем: выгрузить конфигурацию БД в файл через меню Конфигурация — Конфигурация базы данных — Сохранить конфигурацию базы данных в файл. После этого вы сможете спокойно сравнивать основную конфигурацию с этим файлом.
Часто разработчики забывают о мощном встроенном инструменте — локальной истории. Конфигуратор сохраняет промежуточные состояния объектов при каждом сохранении (Ctrl+S), независимо от того, захвачен объект в хранилище или нет.
Рассмотрим, как воспользоваться этим механизмом:
Нужно учитывать, что локальная история хранится локально на компьютере разработчика в папке профиля пользователя. Если вы работали на сервере через удаленный рабочий стол, история будет доступна именно там.
Если конфигуратор уже был обновлен из хранилища, но у вас все еще запущен сеанс «1С:Предприятие», в котором работает ваша «правильная» логика, мы можем попытаться достать код из памяти процесса. Это возможно, так как при запуске система компилирует модули и держит их в рабочем состоянии.
Разберем алгоритм действий:
Для продвинутых администраторов и разработчиков существует способ прямого обращения к базе данных. Все данные конфигурации хранятся в системных таблицах SQL-сервера. Основная конфигурация хранится в таблице Config, а конфигурация базы данных — в таблице DBSchema или аналогичных (зависит от версии платформы).
Проанализируем логику этого процесса:
В таблице Config хранятся записи с именами объектов (UUID). Если мы точно знаем, что в базе данных еще лежит «хорошая» версия, мы можем попробовать извлечь данные напрямую. Однако, 1С хранит эти данные в сжатом и специфическом формате (в виде BLOB-объектов). Для их извлечения рекомендуется использовать специализированные утилиты, такие как Tool_1CD или скрипты на языке Python/Go, предназначенные для декомпрессии данных 1С.
Выясним причину, почему иногда удается найти файлы даже после закрытия программы. В настройках конфигуратора Сервис — Параметры — Тексты часто включена опция «Автосохранение».
Посмотрим, где искать следы работы:
%TEMP% или %AppData%\Local\1C\1cv8\..tmp или файлы кэша.В случае работы с внешними обработками или отчетами ситуация еще проще: они часто сохраняются во временных папках целиком перед запуском из конфигуратора.
Чтобы не попадать в подобные ситуации, выработаем ряд правил:
commit раз в несколько часов.Подводя итог, можно сказать: если вы случайно отменили захват, самое главное — не совершать никаких действий по записи или сохранению в конфигураторе. Спокойно проанализируйте, в каком состоянии находится «1С:Предприятие» и база данных, и воспользуйтесь механизмом Сравнить, объединить с конфигурацией базы данных. Это вернет вашу работу в исходное состояние и сэкономит массу времени.