Как извлечь файл конфигурации (.cf) из файла выгрузки (.dt) без восстановления базы данных?

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

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

Понимание структуры файла .dt

Прежде чем приступать к решению, проанализируем, что представляет собой файл .dt. Это транспортный контейнер, который оптимизирован для последовательной записи. В отличие от файла базы данных .1cd, в .dt отсутствует таблица смещений, которая позволила бы мгновенно перейти к нужному блоку. Файл состоит из заголовка (сигнатура 1CIBDmpF) и последовательности потоков данных, сжатых алгоритмом zlib (deflate).

Внутри этого сжатого потока конфигурация хранится не единым куском, а в виде записей, соответствующих системным таблицам Config или ConfigSave. Это означает, что для получения полноценного .cf нам нужно не просто «вырезать» часть файла, а собрать структуру контейнера конфигурации из отдельных объектов метаданных, форм и модулей.

Способ 1: Метод «частичного развертывания» на SQL-сервере

Это один из самых надежных способов, не требующий стороннего софта, кроме самой платформы 1С:Предприятие и установленного SQL-сервера. Разберем этот алгоритм по шагам:

  1. Подготовка пустой базы: Создадим на SQL-сервере абсолютно пустую базу данных и добавим ее в список информационных баз 1С.
  2. Запуск загрузки: Начнем процесс «Загрузить информационную базу...» из нашего тяжелого .dt файла.
  3. Мониторинг процесса: Особенность механизма загрузки 1С заключается в том, что платформа сначала создает структуру таблиц и записывает данные конфигурации в таблицу Config, и только после этого приступает к наполнению таблиц данными (справочниками, документами, регистрами).
  4. Прерывание: Как только мы увидим в консоли SQL-сервера или через монитор ресурсов, что началось активное заполнение таблиц данными (объем базы в SQL начал стремительно расти), мы можем принудительно завершить сеанс загрузки (убить процесс rphost или прервать соединение).
  5. Выгрузка CF: После прерывания конфигурация уже будет физически находиться в базе. Попробуем зайти в конфигуратор этой «недоразвернутой» базы. Даже если платформа выдаст ошибку о несоответствии данных, конфигурация (метаданные) обычно доступна для выгрузки через меню «Конфигурация» — «Сохранить конфигурацию в файл...».

Важный нюанс: Этот метод требует наличия SQL-сервера, но позволяет избежать ожидания загрузки сотен гигабайт данных и экономит дисковое пространство, так как мы останавливаем процесс до того, как данные займут все место.

Способ 2: Использование специализированных утилит

Существуют инструменты, разработанные сообществом, которые умеют парсить внутреннюю структуру контейнеров 1С. Рассмотрим наиболее известные подходы:

Использование модифицированного v8unpack
Классическая утилита v8unpack предназначена для работы с .cf, .epf и .erf. Однако существуют версии, способные обрабатывать и дампы. Проанализируем логику работы: файл .dt сначала распаковывается из zlib, а затем из полученного потока извлекаются объекты. Для автоматизации этого процесса можно использовать скрипты на Python, которые имитируют работу распаковщика.

Пример логики для самописного скрипта (на языке Python с использованием библиотеки zlib):


import zlib

def extract_dt(input_file):
    with open(input_file, 'rb') as f:
        # Пропускаем заголовок 1CIBDmpF
        f.seek(16) 
        d = zlib.decompressobj(-zlib.MAX_WBITS)
        # Далее следует потоковая распаковка блоков...
        # В распакованном виде ищем сигнатуры таблиц Config

Специализированный софт (Tool_1CD и аналоги)
Хотя основная версия Tool_1CD работает с файловыми базами .1cd, существуют дочерние проекты и «распаковщики дампов», которые могут читать .dt и сохранять только выбранные таблицы (в нашем случае Config) в новую файловую базу. После того как таблица конфигурации перенесена в пустую файловую базу, из нее легко извлечь .cf обычными средствами платформы.

Способ 3: Ручной разбор потока данных

Если вы обладаете навыками работы с HEX-редакторами и понимаете структуру хранения данных 1С, можно попытаться найти начало конфигурации внутри распакованного потока. Выясним причину сложности этого метода: данные конфигурации в .dt хранятся в сжатом виде внутри уже сжатого потока (двойное сжатие).

Выделим основные этапы для исследователя:

  1. Распакуем .dt файл, убрав заголовок и применив deflate.
  2. В полученном двоичном файле ищем упоминания системных имен файлов конфигурации, таких как root, metadata или versions.
  3. Конфигурация представляет собой набор записей, где каждая запись — это файл внутри контейнера. Нам необходимо собрать их воедино, соблюдая структуру формата .cf (который сам является файловой системой 1С в миниатюре).

Совет: Проанализируем структуру таблицы Config. Она состоит из полей FileName и BinaryData. В .dt эти поля записываются последовательно. Если вам удастся извлечь все бинарные данные, относящиеся к именам файлов конфигурации, вы сможете собрать рабочий .cf файл.

Выводы и рекомендации

Проанализировав ситуацию, можно сделать вывод: «честного» способа в один клик извлечь .cf из .dt без использования платформы не существует, так как формат .dt является закрытым и транспортным. Однако:

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

← На главную