Первооткрывателями в этом направлении были brix8x c распаковщиком, awa с Конфигурация описания форматов файлов .data
В 2016 году он открыл исходники Tool1CD
Руки тянулись к внутренним скобкофайлам.
На основе анализа исходных текстов Tool1CD родилась идея написать читатель/писатель файлов CF.
В настоящее время есть несколько публикаций, которые с легкостью в этом деле могут помочь:
Было принято решение разобраться с внутренним форматом хранения CF и реализовать на первоначальном этапе просмотрщик конфигурации CF и в дальнейшем добавить возможность редактирования конфигурации.
Как известно конфигурация хранится в виде контейнеров с именами в виде GUID, которые еще дополнительно могут быть упакованы deflat-oм.
В структуре конфигурации выделяются несколько файлов которые стоят особняком:
- root
- version
- versions
Первый файл хранил скобкофайл такого формата:
{2,2675ed56-f553-43f7-9418-4a578c23d298,ctpBS8bn1FK8kA8nng8iMCTeKI4QT6pTam0Yz0ObEj4J90snslp4aF29RFLepwn5
a1hcvDfoM/1l+4GviOPO2A==}
2 - скорее всего количество объектов
2675ed56-f553-43f7-9418-4a578c23d298 - идентификатор файла с описанием структуры конфигурации
ctpBS8bn1FK8kA8nng8iMCTeKI4QT6pTam0Yz0ObEj4J90snslp4aF29RFLepwn5
a1hcvDfoM/1l+4GviOPO2A== - base64 от конфигурации
Для чтения конфигурации нам нужен как раз второй идентификатор чтобы начать чтение структуры.
Основная работа по определению идентификаторов метаданных была проведена awa

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

Основные метаданные хранятся в такой структуре
Принцип описания:
1 - поле, это идентификатор коллекции объектов метаданных
2 - поле, количество объектов метаданных в конфигурации (N)
Следующие N, следующие через запятую, это идентификаторы объектов конкретных метаданных
Так, для
{9cd510ce-abfc-11d4-9434-004095e12fc7,1,bbd9252d-96d2-433f-829b-a7787b936246}
9cd510ce-abfc-11d4-9434-004095e12fc7 - это "Языки"
1 - 1 штука в конфигурации присутствует
bbd9252d-96d2-433f-829b-a7787b936246 - идентификатор языка "Русский"
для того чтобы в этом убедиться сможем открыть файл с именем bbd9252d-96d2-433f-829b-a7787b936246 в файловой системе и убедиться в этом
Содержимое файла
{1,
{0,
{3,
{1,0,bbd9252d-96d2-433f-829b-a7787b936246},"Русский",
{1,"ru","Русский"},"",0,0,00000000-0000-0000-0000-000000000000,0},"ru"},0}
В конфигураторе это выглядит так

Также можно увидеть, что в структуре
{46b4cd97-fd13-4eaa-aba2-3bddd7699218,3,91727d27-c2c6-4dd6-b6c1-4b41a7173d13,b31a73ed-9d25-4a9e-88f8-4eb8bee172fe,6bb4e05e-9801-4c0e-8463-f014881d5a72}
хранится информация по "Хранилищам настроек", а именно
46b4cd97-fd13-4eaa-aba2-3bddd7699218 - идентификатор метаданных
3 - три объекта в конфигурации создано
91727d27-c2c6-4dd6-b6c1-4b41a7173d13,
b31a73ed-9d25-4a9e-88f8-4eb8bee172fe,
6bb4e05e-9801-4c0e-8463-f014881d5a72 - это идентификаторы конкретных хранилищ настроек, созданных в конфигурации.
Для того чтобы получить имена конкретных объектов метаданных, необходимо прочитать файлы с данными гуидами и уже из них прочитать имена (синоним и др.) метаданных.
{1,
{2,
{0,
{3,
{1,0,6bb4e05e-9801-4c0e-8463-f014881d5a72},"ХранилищеНастроек3",
{0},"",0,0,00000000-0000-0000-0000-000000000000,0}
},0cd7ff3b-714e-4ccc-b284-685985415e47,19f1d794-3f2e-4bdd-8fcc-3126cbc46ad3,00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000},2,
{3daea016-69b7-4ed4-9453-127911372fe6,0},
{b8533c0c-2342-4db3-91a2-c2b08cbf6b23,0}
}
Структура корневых объектов метаданных схожа, но различается расположением имени объекта и других составных частей, как реквизиты, табличные части, формы, команды и др.
Если посмотреть в файловой системе структуру распакованной конфигурации, можно видеть

файлы в виде GUID, но также могут быть файлы вида GUID.0/GUID.1/GUID.1c - которые также могут хранить различные части метаданных.

Как правило, файлы с расширением 2d957479-815b-4110-9912-eb2a8cf8c6d3.0 - хранят модуль объекта, хотя могут хранить и текст общего модуля, при этом содержимое файла также состоит из нескольких частей:

К примеру, так может храниться общий модуль. Но это не всегда так, встречается хранение текста общего модуля прямо в самом файле с расширением .0
Но если в поставку текст модуля не включен, структура будет несколько другая

При этом в файле image хранится информация, описанная в статье Андрея
Для всех составных объектов (справочники, документы и др.) в основном корневом файле в структуре описываются все составные части:
- Реквизиты
- Табличные части
- Формы
- Команды
- Макеты

Вот как раз 5-гуидный блок последний и представляет собой указание, где искать информацию по реквизитам, формам, командам и др. объектам.
По некоторым объектам данные хранятся прямо в этом же файле, так реквизиты будут здесь же с описанием их типов, а вот формы будут храниться в отдельных файлах, гуиды которых можно в этом файле прочитать и распарсить потом для определения имени формы.
Вот по такому принципу реализована программка v8reader.
Разработка идет с использованием C++ Builder.
В планах реализация не только чтения метаданных, но и запись в файл.

Кому интересна данная тема, милости просим на github.ru
Вступайте в нашу телеграмм-группу Инфостарт
