Ситуация, когда после внезапного выключения компьютера или системного сбоя внешняя обработка (.epf или .erf) перестает открываться, знакома многим разработчикам. При попытке зайти в нее через Конфигуратор 1С выдает критическую ошибку «Неверный формат хранилища данных» или «Ошибка формата потока». Если открыть такой файл через HEX-редактор, часто можно увидеть, что значительная часть данных забита нулями, хотя в середине файла еще просматриваются фрагменты кода. В этой статье мы подробно разберем, как спасти плоды своего многочасового труда и какие механизмы платформы 1С приводят к подобным повреждениям.
Прежде чем переходить к спасательным операциям, разберем внутреннее устройство файла. Внешняя обработка 1С — это не просто текстовый файл, а структурированное хранилище (Compound File), напоминающее по логике ZIP-архив. Внутри него находятся потоки данных: тексты модулей, описания форм, макеты и картинки. Все они сжаты алгоритмом Zlib.
Проблема заключается в том, как 1С работает с внешними файлами. Когда вы открываете обработку, платформа не работает с исходным файлом напрямую на диске постоянно. Она создает временную рабочую копию в системной папке Temp. При нажатии кнопки «Сохранить» данные записываются в файл, но структура контейнера (FAT-таблица смещений) окончательно закрывается и финализируется только в момент корректного закрытия обработки или Конфигуратора. Если происходит «жесткая» перезагрузка, заголовок файла оказывается поврежденным, а указатели на данные — стертыми. Рассмотрим способы восстановления данных от самых простых к более сложным.
Если в вашей операционной системе Windows включена служба теневого копирования (по умолчанию на системных дисках она часто активна), это самый надежный способ вернуть файл в состояние за несколько часов до сбоя. Даже если при нажатии правой кнопкой мыши на файл пункт «Предыдущие версии» пуст, данные могут быть в системе.
Проанализируем алгоритм действий через командную строку от имени администратора:
vssadmin list shadows
\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2).C:. Выполним команду (подставив свое имя тома):
mklink /d %SystemDrive%\shadow \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\
C: появилась папка shadow. Зайдем в нее и перейдем по пути, где лежал наш файл. Скопируем его из «прошлого» в безопасное место.Как мы уже выяснили, при работе с внешней обработкой 1С создает ее копию в каталоге временных файлов пользователя. Путь к ней обычно выглядит так: %TEMP% (или C:\Users\ИмяПользователя\AppData\Local\Temp).
Рассмотрим важный нюанс: ни в коем случае не запускайте 1С сразу после сбоя! Платформа имеет привычку вычищать временные файлы предыдущих сессий при новом запуске. Сначала выполним следующие действия:
%TEMP%..tmp и размером, примерно соответствующим вашей обработке. Часто они имеют маску имени вида v8_XXXX_XX.tmp..epf, после чего попытаемся открыть в Конфигураторе.Помимо папки Temp, 1С сохраняет промежуточные состояния объектов в своем кэше. Рассмотрим, где искать эти данные. Путь к кэшу обычно следующий:
%LocalAppData%\1C\1cv8\идентификатор_базы\Config
Внутри этой папки находятся файлы с именами-идентификаторами (GUID). Если вы примерно помните время последнего успешного сохранения или запуска обработки на отладку, можно попробовать найти файл по дате. Эти файлы часто не имеют расширения, но внутри содержат те же сжатые блоки Zlib. Можно попробовать поочередно открывать их утилитами для распаковки контейнеров 1С.
Если файл поврежден настолько, что заголовок уничтожен, но данные внутри видны в HEX-редакторе, мы можем попытаться вытащить текст модуля вручную. Текстовые данные в 1С почти всегда сжимаются. Сигнатура (начало) сжатого блока Zlib обычно выглядит как 78 9C или 78 DA.
Разберем последовательность действий для продвинутых пользователей:
.epf в любом HEX-редакторе.78 9C.Чтобы в будущем не прибегать к подобным методам, проанализируем полезные привычки разработчика 1С:
.epf и при каждом сохранении делает его копию в архивную папку с добавлением временной метки в имя файла.Помните, что при работе с обычными формами в старых конфигурациях 1С (как в нашем примере) визуальная часть формы и ее программный код хранятся в разных потоках. Поэтому, если вам удалось восстановить хотя бы текст модуля, это уже 90% успеха, так как алгоритмы восстанавливать вручную гораздо дольше, чем перерисовывать кнопки на форме.