В практике администраторов и разработчиков 1С нередко возникает ситуация, когда на руках имеется файл выгрузки .dt огромного объема, а свободного дискового пространства или времени для его полного развертывания в информационную базу нет. Если при этом вам необходима только конфигурация (метаданные) без самих данных, задача становится специфической. Рассмотрим подробнее, как можно «вытащить» .cf файл, используя технические особенности формата 1С.
Прежде чем приступать к решению, проанализируем, что представляет собой файл .dt. Это транспортный контейнер, который оптимизирован для последовательной записи. В отличие от файла базы данных .1cd, в .dt отсутствует таблица смещений, которая позволила бы мгновенно перейти к нужному блоку. Файл состоит из заголовка (сигнатура 1CIBDmpF) и последовательности потоков данных, сжатых алгоритмом zlib (deflate).
Внутри этого сжатого потока конфигурация хранится не единым куском, а в виде записей, соответствующих системным таблицам Config или ConfigSave. Это означает, что для получения полноценного .cf нам нужно не просто «вырезать» часть файла, а собрать структуру контейнера конфигурации из отдельных объектов метаданных, форм и модулей.
Это один из самых надежных способов, не требующий стороннего софта, кроме самой платформы 1С:Предприятие и установленного SQL-сервера. Разберем этот алгоритм по шагам:
.dt файла.Config, и только после этого приступает к наполнению таблиц данными (справочниками, документами, регистрами).rphost или прервать соединение).Важный нюанс: Этот метод требует наличия SQL-сервера, но позволяет избежать ожидания загрузки сотен гигабайт данных и экономит дисковое пространство, так как мы останавливаем процесс до того, как данные займут все место.
Существуют инструменты, разработанные сообществом, которые умеют парсить внутреннюю структуру контейнеров 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 обычными средствами платформы.
Если вы обладаете навыками работы с HEX-редакторами и понимаете структуру хранения данных 1С, можно попытаться найти начало конфигурации внутри распакованного потока. Выясним причину сложности этого метода: данные конфигурации в .dt хранятся в сжатом виде внутри уже сжатого потока (двойное сжатие).
Выделим основные этапы для исследователя:
.dt файл, убрав заголовок и применив deflate.root, metadata или versions..cf (который сам является файловой системой 1С в миниатюре).Совет: Проанализируем структуру таблицы Config. Она состоит из полей FileName и BinaryData. В .dt эти поля записываются последовательно. Если вам удастся извлечь все бинарные данные, относящиеся к именам файлов конфигурации, вы сможете собрать рабочий .cf файл.
Проанализировав ситуацию, можно сделать вывод: «честного» способа в один клик извлечь .cf из .dt без использования платформы не существует, так как формат .dt является закрытым и транспортным. Однако:
.dt третьим лицам для «выгрузки конфига» может нарушать политику безопасности вашей компании.Помните, что файл конфигурации .cf — это сердце базы данных, и правильное его извлечение позволит вам продолжить разработку или обновление даже при отсутствии доступа к полному набору данных.