При изучении внутреннего устройства платформы 1С:Предприятие у разработчиков нередко возникает вопрос: как именно объекты конфигурации — например, созданный общий табличный документ — представлены на уровне таблиц реляционной СУБД (Microsoft SQL Server, PostgreSQL и др.). Разберем по шагам архитектуру хранения метаданных, структуру системных таблиц и механизмы упаковки бинарных данных платформы.
В отличие от прикладных данных (справочников, документов и регистров), для которых платформа 1С создает отдельные реляционные таблицы с префиксами _Reference, _Document или _InfoRg, конфигурация не разбивается на классические таблицы по типам метаданных. Метаданные хранятся в специальных системных таблицах в виде виртуальной файловой системы (контейнера):
Проанализируем структуру самой таблицы Config. Она предельно проста и состоит из двух основных колонок:
FileName — строковое имя файла или идентификатор потока (часто представляет собой UUID объекта или служебное имя, например, root).BinaryData — бинарное поле большого объема (тип VARBINARY(MAX) или IMAGE в MS SQL Server, BYTEA в PostgreSQL).Рассмотрим подробнее, как именно табличный документ превращается в запись внутри базы данных СУБД. Платформа 1С использует собственный контейнерный формат, в котором каждый объект конфигурации разделяется на логические потоки:
BinaryData хранятся в сжатом виде с использованием алгоритма Deflate (библиотека zlib).root содержится оглавление конфигурации. В нем описаны все объекты метаданных и сопоставленные им уникальные идентификаторы (UUID).<UUID> и дополнительными подпотоками. Внутри этих блоков после распаковки находится внутренняя структура описания макета и сам сериализованный табличный документ.Внутри распакованного потока макет представляет собой либо внутренний текстовый формат 1С (древовидную структуру с разделителями в виде фигурных скобок {...}), либо бинарный поток объекта SpreadsheetDocument, содержащий информацию о ячейках, шрифтах, объединениях, линиях и графических объектах.
Если требуется проследить путь поиска макета на уровне базы данных, разберем последовательность действий, которую выполняет платформа:
Config считывается и распаковывается корневой поток метаданных root.UUID.Config для получения записи, где в поле FileName указан соответствующий идентификатор.BinaryData извлекается и декомпрессируется библиотекой zlib, после чего объект восстанавливается в оперативной памяти сервера приложений 1С.Важное предостережение: Любые попытки прямого редактирования записей в таблицах Config, ConfigSave или Params через прямые SQL-инструкции UPDATE, INSERT или DELETE категорически не рекомендуются. Платформа строго контролирует целостность кэша и контрольные суммы метаданных. Несогласованное изменение данных в SQL приведет к разрушению структуры базы и невозможности открыть конфигуратор.
Для исследования структуры макетов и работы с ними на низком уровне используем безопасные платформенные инструменты:
Посмотрим на пример получения общего макета средствами встроенного языка 1С:
// Получаем общий табличный документ по имени метаданных
МакетТаблицы = ПолучитьОбщийМакет("ИмяМоегоМакета");
// Проверяем тип полученного макета и выполняем его вывод
Если ТипЗнч(МакетТаблицы) = Тип("ТабличныйДокумент") Тогда
ОбластьШапка = МакетТаблицы.ПолучитьОбласть("Шапка");
// Дальнейшая работа с областями макета
КонецЕсли;
Таким образом, платформа 1С полностью инкапсулирует структуру метаданных внутри сжатых BLOB-хранилищ таблиц Config и ConfigSave, предоставляя разработчику высокоуровневый объектный интерфейс для безопасного доступа к элементам конфигурации.