Erf как открыть в 1с

Обновлено: 04.07.2024

Внутренняя структура файла конфигурации (*.cf) не является секретом. Добрые люди давно разобрали его и создали немало интересных утилит, позволяющих работать с этим форматом. На Инфостарте найдется добрый десяток (если не больше) интересных публикаций, так или иначе читающих содержимое *.cf файлов, так что тема эта совсем не новая.

Однако, хорошей, добротной документации на этот формат, к сожалению, совсем немного. На написание данной статьи меня надоумила публикация глубокоуважаемого awa, который подробно, во всех деталях описал структуру формата файловой ИБ 1С:Предприятия (*.1CD).

Та статья, как мне кажется, стала катализатором для целого ряда разработок, созданных другими авторами. Открытость и доступность информации подтолкнула творческую активность авторов, а всё сообщество получило ряд отличных инструментов по работе с файловыми базами 1С.

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

Предыстория

Как уже говорилось выше, структура формата давно известна и в сети есть информация по его структуре (хотя, довольно скудная). Мне эта информация понадобилась п ри разработке программы V8Viewer, работая над которой, я опирался на следующие материалы:

Хочется выразить благодарность авторам, за то, что поделились информацией с народом.

Терминология

Перейдем непосредственно к теме нашего обсуждения.

Для того чтобы расставить точки над i, давайте определимся с названием самого формата.

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

Предлагаю в рамках данной статьи называть данный формат «контейнер». Если уважаемая публика подскажет в комментариях правильное название, я буду очень рад.

Смотрим внутрь

Логической единицей хранения данных внутри контейнера является документ. Документ, это осмысленный законченный набор данных, который можно прочитать и каким-то образом интерпретировать. Я специально не пользуюсь термином «файл», поскольку, это название я приберегу для другой сущности, о которой чуть позже.

Итак, в общих чертах, файл CF (EPF/ERF) представляет собой контейнер, в котором хранятся документы.


Каждый документ внутри контейнера может быть разбит на блоки. Минимальной физической единицей хранения данных является блок, но осмысленной логической единицей является документ. Иными словами, документы внутри контейнера могут лежать в виде разрозненных кусочков (блоков) и для того, чтобы прочитать содержимое документа, все его кусочки нужно собрать и объединить.


Структура контейнера

Контейнер включает в себя следующие части (по порядку):

  1. Заголовок контейнера
    1. Адрес первого пустого блока, в который можно добавлять данные
    2. Размер блока по умолчанию
    3. Количество файлов в контейнере

    Для того чтобы прочитать содержимое контейнера, необходимо прочитать документ оглавления. Однако, поскольку, документ состоит из блоков, то прежде необходимо научиться собирать полный документ из этих самых блоков.

    Структура блока

    Блок состоит из заголовка и тела. В заголовке указывается общий размер всего документа, размер текущего блока и адрес (позиция в файле) следующего блока. Сразу за заголовком идет тело блока – собственно, те данные, которые нам нужны. Тело блока имеет ровно ту длину (в байтах), которая указана в заголовке.

    Внутри контейнера тут и там встречается волшебная константа, обозначающая некую «пустоту» – это число 0x7fffffff.

    Когда мы собираем документ из блоков, то смотрим в заголовке на адрес следующего блока. Если он равен 0x7fffffff, то «следующего» блока нет, этот – последний.

    Константа 0x7fffffff - это значение INT_MAX, т.е. максимальное значение 4-байтового целого числа со знаком.

    Логические «файлы»

    Я упоминал, что термин «файл» я приберегу до лучших времен. Эти времена настали :)

    Вся конфигурация хранится в контейнере в виде файлов. Если мы вспомним школьный курс информатики, то вспомним, что «файл», говорили нам – это именованный документ.

    Файл отличается от «документа» тем, что у него есть имя, и по этому имени к нему можно обращаться. Если мы будем разбирать содержимое конфигурации и строить дерево метаданных, то найдем внутри файлов очень много упоминаний других файлов. Процедура чтения конфигурации оперирует именами файлов и ссылается на них по имени.

    Если подвести итоги, то можно сказать следующее: в контейнере лежат разные документы, но некоторые из них имеют имя. Такие документы называются «файлы» и они носят не служебный, а непосредственно прикладной характер. Именно файлы хранят информацию о метаданных конфигурации.

    Компоненты файла

    Каждый файл состоит из двух документов:

    1. Документ атрибутов, который содержит имя файла и даты создания/изменения
    2. Документ содержимого, который содержит собственно тело файла

    Оглавление контейнера

    Теперь, когда все составные части озвучены, осталось рассмотреть, пожалуй, самый главный документ контейнера – документ оглавления, в котором указано расположение всех файлов контейнера. Как говорилось выше, документ оглавления это самый первый документ контейнера и он идет сразу же за заголовком контейнера.

    Оглавление представляет собой массив записей, каждая из которых указывает на файл. Поскольку, файл состоит их двух документов (атрибуты и содержимое), то запись оглавления указывает на оба из них. Запись оглавления представляет собой три числа INT32:

    1. Адрес (смещение в файле) документа атрибутов
    2. Адрес (смещение в файле) документа содержимого
    3. Число 0x7fffffff (маркер конца записи).


    Напоминаю, что каждый документ может быть разбит на блоки (фрагментирован). Алгоритм сборки документа из блоков будет рассмотрен ниже.

    Запись оглавления представляет собой 2 значащих числа INT32. Первое число – это адрес документа атрибутов файла. По этому адресу мы попадем на начало 1-го блока документа атрибутов. Из документа атрибутов мы можем узнать имя файла. Второе число – адрес документа содержимого файла. По этому адресу мы попадем на начало 1-го блока документа содержимого, откуда будем читать непосредственно данные файла.

    Особенности сжатия данных.

    Контейнер может содержать самые разные файлы. Как правило, это текстовые файлы в кодировке UTF-8. Однако среди файлов контейнера могут встречаться другие файлы-контейнеры. Проще всего провести аналогию с файловой системой. Контейнер – это директория, а файлы внутри контейнера – это ее содержимое. Директория может содержать другие директории.

    Корневой каталог этой «файловой системы» - это сам файл *.CF. Внутри него могут быть другие файлы-контейнеры, по сути – вложенные директории, которые считываются ровно по тому же самому алгоритму и имеют ровно ту же самую структуру.

    Тем не менее, есть одна особенность корневой директории. Все документы содержимого файлов внутри корневой директории сжаты по алгоритму Deflate. Содержимое файлов внутри вложенных директорий уже не сжато. Проще говоря, на верхнем уровне файла-контейнера тела всех файлов сжаты, но если файл внутри контейнера сам является контейнером, то внутри него файлы уже будут записаны в чистом виде (без сжатия).

    Цепочка свободных блоков

    В результате удаления каких-либо данных из контейнера в нем могут образовываться пустые места. Эти свободные места связываются в цепочку и образуют этакий «документ», данные которого отсутствуют. Иными словами, свободные блоки связаны друг с другом по тому же принципу, по которому связаны друг с другом блоки документов. Адрес первого свободного блока указывается в самом начале заголовка контейнера. Если адрес свободного блока равен INT_MAX, то это значит, что в середине контейнера нет свободных (пустых) блоков.

    Краткий итог по теоретической части

    1. Файл CF(EPF/ERF) записан в формате «контейнера»
    2. Контейнер начинается с заголовка
    3. Все содержимое контейнера, за исключением заголовка, записано в виде «документов»
    4. Документ может быть разбит на блоки
    5. Документ начинается с заголовка блока, по которому можно узнать, как прочитать весь документ целиком
    6. Сразу за заголовком контейнера идет документ оглавления
    7. Оглавление, это набор записей, которые указывают на «файлы» внутри контейнера
    8. Каждый файл состоит из двух документов – документа атрибутов, где указано имя этого файла и документа содержимого, где, собственно, расположены данные файла.
    9. Каждая запись оглавления содержит 2 адреса. Первый – адрес документа атрибутов файла, второй – адрес документа содержимого.
    10. Контейнер может содержать вложенные контейнеры (как бы, вложенные папки)
    11. Файлы внутри корневого контейнера сжаты по алгоритму Deflate, файлы внутри вложенных контейнеров записаны без сжатия.

    Давайте уже пощупаем байты

    Итак, настало время рассмотреть, как конкретно устроены все упомянутые выше сущности.

    Основным способом чтения данных из контейнера является чтение цепочки блоков, составляющих те или иные документы. Кажется, что правильно будет начать с принципа чтения блочных документов.

    Чтение документа по блокам

    Каждый документ в контейнере обязательно начинается с заголовка блока. При этом документ может быть разбит на несколько блоков. Для того чтобы прочитать документ, необходимо его «собрать» из блоков.

    Итак, заголовок блока представляет собой строку длиной 31 байт. Строка эта имеет следующий вид:

    [CRLF][Размер всего документа][Пробел][Размер текущего блока][Пробел][Адрес следующего блока] [Пробел] [CRLF], где:

    • CRLF – стандартный перевод строки Windows, пара символов \r\n (0x0D,0x0A)
    • Размер всего документа – общая длина документа в байтах. Записана в виде строкового представления hex-числа. Длина – 8 байт.
    • Пробел – пробел. Символ 0x20
    • Размер текущего блока – длина тела блока в байтах. Записана также в виде строкового представления числа INT32 в hex-формате. Если документ состоит из единственного блока, то размер всего документа либо меньше, либо совпадает с размером текущего блока (что логично)
    • Адрес следующего блока – адрес по которому расположен очередной блок документа. Если адрес следующего блока равен INT_MAX, то это значит, что следующего блока нет. Адрес следующего блока также записан в виде строкового представления числа.

    Сразу за заголовком блока идет тело блока, которое имеет длину, указанную в поле «Размер текущего блока».


    Рассмотрим рисунок: длина всего документа составляет 0x54 байта, красной рамкой выделены эти 0x54 байта. Это данные документа. Длина блока составляет 0x200 байт, т.е. больше чем длина самого документа. По этой причине остальные данные блока составляют "нули" неиспользуемого пространства. Значащие байты - это те, которые отмечены красной рамкой.

    Если длина документа больше длины блока, то нужно прочитать следующий блок. Если в поле «Адрес следующего блока» записано значение, отличное от 0x7fffffff, то необходимо считать текущий блок, затем перейти по этому адресу и считать другой блок. Если в этом блоке также будет задан адрес следующего блока, то надо перейти и туда. Таким образом, формируется «цепочка» блоков, из которых состоит документ.

    Чтение необходимо продолжать до тех пор, пока в поле «Адрес следующего блока» не встретится значение 0x7fffffff или пока не будет считано количество байт, указанное в поле «Размер всего документа».

    Поле «Размер всего документа» имеет смысл только для первого блока. Во всех последующих блоках документа оно имеет значение 0x00000000.

    Формат заголовка контейнера

    Заголовок контейнера имеет длину 16 байт и состоит из следующих полей:

    Поле

    Тип

    Пояснение

    Адрес первого свободного блока

    Смещение, по которому начинается цепочка свободных блоков

    Размер блока по умолчанию

    Блок может иметь произвольную длину, но значение по умолчанию можно использовать для добавления новых блоков, например.

    Поле неизвестного назначения (см. комментарии к статье) Часто совпадает с количеством файлов в контейнере

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

    Всегда равно 0 (всегда ли?)

    Формат записи документа оглавления

    Оглавление содержит перечень указателей на файлы, размещенные в контейнере

    Поле

    Тип

    Пояснение

    Адрес документа атрибутов

    Адрес документа атрибутов файла

    Адрес документа содержимого

    Адрес документа содержимого файлов

    Всегда равно 0x7fffffff

    Формат документа атрибутов файла

    Документ атрибутов описывает имя файла и даты его создания/изменения.

    Поле

    Тип

    Пояснение

    Время создания файла

    Время создания файла, выраженное в количестве 100-микросекундных интервалов, прошедших с начала нашей эры (01.01.0001 00:00:00)

    Время изменения файла

    Всегда равно 0. Возможно, это флаги атрибутов, что-то вроде «только чтение», «скрытый» и т.п. Однако, я не встречал файлов, где это поле бы отличалось от нуля.

    Строка в формате UTF-16

    Занимает все оставшееся тело документа (за вычетом 2-х дат и резервного поля)


    Принцип чтения контейнера

    Для того, чтобы прочитать контейнер мы должны сделать следующие вещи:

    Чтение оглавления

    1. Собрать из блоков документ оглавления и прочитать его
    2. Обойти все записи в документе оглавления и прочитать документы атрибутов (имена) файлов контейнера
    3. Сопоставить каждому полученному имени адрес документа содержимого
    4. На выходе получается соответствие «Имя файла» -> «Адрес содержимого»

    Чтение файлов

    1. По имени файла получить из оглавления адрес документа содержимого
    2. Собрать из блоков документ содержимого
    3. Если это корневой контейнер, то распаковать документ содержимого (он сжат)
    4. Готово. Полученный результат является данными искомого файла.

    Обновление от 25.02.2014

    В статью внесены правки, рекомендованные awa в комментариях.

    В заключение

    Данная статья не является истиной в последней инстанции, вероятно, в ней есть даже ошибки. Тем не менее, если данная тема Вам интересна, то я надеюсь, что эта статья поможет вам в реализации ваших проектов. Удачи!

    ZIP-архив можно открыть средствами проводника Windows, зайдя в него как в обычную папку (если на архив установлен пароль, система потребует его ввести).
    Для извлечения данных из архива можно воспользоваться контекстным меню. Пункт "Извлечь все" откроет мастер распаковки, где можно будет указать, куда извлечь содержимое архива.

    Файл с расширением *.rar - архив

    Для работы с RAR-архивами удобно использовать бесплатный архиватор 7-Zip или условно-бесплатную программу WinRAR (есть пробный период 40 дней, после которого программа при открытии будет ненавязчиво предлагать покупку). Обе программы добавляются в контекстное меню, откуда удобно вызывать распаковку архива по нужному пути.

    После распаковки архива вы получите файл с одним из следующих расширений:

    Файлы с расширениями *.erf и *.epf - внешние отчеты и обработки платформы 1С 8.
    Открыть из файла

    1. В главном меню 1С нажать: "Файл"-"Открыть".
    2. В появившемся окне найти и выбрать обработку.

    файл-открыть 82.jpg

    1.1. Если у вас ранние версии 1С 8.3 (8.3.14 или более ранняя): в левом верхнем углу окна 1С нажать значок:

    В открывшемся меню выбрать "Файл" -> "Открыть".

    В появившемся окне найти и выбрать обработку.

    1.2. Если у вас 1С 8.3.15 и более поздняя: в правом верхнем углу нажать значок: .

    В открывшемся меню выбрать "Файл" -> "Открыть".

    В появившемся окне найти и выбрать обработку.

    файл-открыть.JPG

    Также можно открыть обработку, просто перетащив мышкой файл обработки в окно 1С.

    Если появляется ошибка "Нарушение прав доступа"

    Нарушение прав доступа.JPG

    То вариантов для использования обработки всего два:
    Первый вариант, это регистрация обработки в справочнике "Дополнительные отчёты и обработки".
    Но, что если обработка не поддерживает такую регистрацию? А обработка очень полезная и открыть её очень хочется.
    В этом случае можно пойти по второму варианту и вновь включить возможность открытия обработок в базе через меню Файл->Открыть.
    Инструкция для этого ниже.

    Зайдите в конфигуратор базы:

    конфигуратор.jpg

    Выполните команду меню "Администрирование"->"Пользователи":

    Администрирование-Пользователи.jpg

    Двойным щелчком откройте своего пользователя:

    выбрать пользователя.jpg

    Перейдите на закладку "Прочие", установите галку "Интерактивное открытие внешних отчетов и обработок" и нажмите "ОК":

    Интерактивное открытие права.jpg

    Теперь закройте конфигуратор и базу (если она у вас была открыта). При повторном входе в базу применятся новые права для пользователя.

    Файлы с расширениями *.erf и *.epf - внешние отчеты и обработки платформы 1С 8.
    Подключить в конфигурацию на управляемых формах 8.3

    Подключение дополнительных отчетов, обработок и внешних печатных форм производится администратором или другим пользователем с полными правами в разделе "Администрирование" – "Печатные формы, отчеты и обработки"

    2020-04-08_153418.jpg

    В открывшемся окне перейдите по гиперссылке "Дополнительные отчеты и обработки":

    2020-04-08_153608.jpg

    В списке дополнительных отчетов и обработок нажмите кнопку "Добавить из файла".

    2020-04-08_153812.jpg

    При этом система выдаст предупреждение безопасности:

    2020-04-08_153927.jpg

    Файлы с расширениями *.erf и *.epf - внешние отчеты и обработки платформы 1С 8.

    Подключить в конфигурацию на обычных формах

    Внешний отчет, обработку или печатную форму можно добавить в справочник дополнительных отчетов и обработок в меню "Сервис" - "Дополнительные отчеты и обработки".

    2020-04-08_145807.jpg

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

    2020-04-08_182152.jpg

    Файл с расширением *.cfe - расширение. Подключить в конфигурацию

    Подключение расширения производится администратором или другим пользователем с полными правами в разделе "Администрирование" – "Печатные формы, отчеты и обработки" – гиперссылка "Расширения".

    2020-04-08_154111.jpg

    В списке расширений нажмите кнопку "Добавить из файла". Система выдаст предупреждение безопасности:

    2020-04-08_154451.jpg

    2020-04-08_154929.jpg

    При необходимости, отключите для расширения флажок "Безопасный режим" (указывается в описании публикации). И перезапустите сеанс.

    безопасный режим расширений.jpg

    Файл с расширением *.cf - конфигурация платформы 1С 8

    Такие файлы часто используются при обновлении конфигурации программы и служат источником обновления в режиме сравнения и объединения с произвольной конфигурацией. Файлы .cf не открываются в режиме предприятия, для работы с ними нужно зайти в режиме конфигуратора.

    Для создания базы с заданной конфигурацией нужно:

    • создать чистую базу для разработки;
    • в меню конфигурация открыть конфигурацию;
    • загрузить конфигурацию из файла - указать нужный файл .cf;
    • сохранить конфигурацию;
    • обновить конфигурацию базы данных.

    Файл с расширением *.ert - внешний отчет платформы 1С 7.7

    Для открытия в режиме '1С:Предприятие': 'Файл' > 'Открыть', и выбрать отчет. Следует иметь в виду, что ваша версия 1С должна быть не ниже той, в которой создавался ERT-файл.

    Файл с расширением *.md - конфигурация платформы 1С 7.7

    'Запуск 1С'> 'Добавить'> кликните '. ' справа от текстового поля 'Путь'. В открывшемся окне выберите файл, кликните 'ОК'.

    Позволяет получать как основные сведения о пользователях, так и некоторую расширенную информацию:

    Пользователь, дата последней активности, последний используемый клиент, домен, ГУИД и многое другое.

    Также вы можете добавить дополнительные поля, которые вам необходимы, на втором скриншоты они указаны.

    Подключается так же, как и все доп. обработки или через "Файл" - "Открыть". Можно переделать под свои нужды (пишите, если нужно).

    Работоспособность проверена в конфигурации БП, редакция

    Специальные предложения

    Electronic Software Distribution

    Интеграция 1С с системой Меркурий

    Алкогольная декларация

    Готовые переносы данных

    54-ФЗ

    Управление проектом на Инфостарте

    Траектория обучения 1С-разработчика

    Просмотры 255

    Загрузки 0

    Рейтинг 0

    Создание 24.11.21 06:00

    Обновление 24.11.21 06:00

    № Публикации 1556062

    Операционная система Не имеет значения

    Вид учета Не имеет значения

    Доступ к файлу Абонемент ($m)

    Код открыт Да

    Курс рассчитан на тех, кто уже работает с платформой “1С:Предприятие” и имеет опыт доработки различных типовых прикладных решений. 1С:Предприятие для программистов: Расширения конфигурации. Онлайн-интенсив с 15 по 28 декабря 2021 г.

    См. также

    Универсальный редактор данных (УРД) Промо

    Универсальный редактор данных (УРД) - это лучший инструмент в своем классе, который позволяет редактировать реквизиты и движения объектов

    1 стартмани

    27.08.2021 6000 124 Adeptus 51

    Доп. панель Alt+Z

    Панель, вызываемая для объекта комбинацией клавиш Alt+Z (для документа, справочника, плана вида характеристик, плана счетов и т.д.). Возможности: Редактор всех реквизитов, таблиц и движений, Анализ прав к объекту, Поиск ссылок на объект с фильтрами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Подключается как Расширение.

    2 стартмани

    24.06.2021 8119 100 sapervodichka 57

    Оптимизация размера изображений из присоединенных файлов УТ 11.4

    5 стартмани

    10.07.2020 8819 6 Neti 4

    Работа с базами данных 1С в SQL Server Management Studio (Расширение для SSMS)

    Расширение позволяет просматривать связи объектов метаданных и таблиц БД, сгруппированные данные (по группам метаданных) об используемом дисковом пространстве и выполнять трансляцию SQL текста запроса в термины 1С. И бонусом - при наведении курсора мыши на таблицу или поле показывает назначение объекта в терминах 1С.

    10 стартмани

    27.11.2019 17346 46 akpaevj 46

    Очистка кэша 1С 8 (8.0, 8.1, 8.2, 8.3). Грамотная чистка кэша 1С с сохранением настроек. Промо

    Эффективное средство для устранения ошибок, возникающих в локальном кэше 1С на клиенте, которым легко сможет воспользоваться пользователь с любым уровнем знаний. Wsf-скрипт, созданный на стандартном языке автоматизации Windows - "WSH JScript", очищает кэш 1С просто, быстро и безопасно. Кроме варианта, очищающего кэш текущего пользователя, имеется также вариант для чистки кэша 1С всех пользователей терминального-сервера.

    1 стартмани

    04.11.2018 54208 533 Eugen-S 35

    Конфигурация для администраторов "Центр управления базами" для 8.3 УФ

    Конфигурация предназначена для централизованного управления информационными базами предприятия. Разработана на БСП версии 2.4.4.76. В работе использует COM-соединение.

    3 стартмани

    09.10.2019 10778 36 WhiteOwl 17

    Информация о программных лицензиях 1С (Ring GUI)

    Обработка, представляющая из себя обертку функций Утилиты лицензирования 1С (ring) в понятном для обычного человека виде. По сути, это GUI утилиты RING

    5 стартмани

    18.09.2019 9629 34 MaxxG 6

    Обновление конфигурации 1С из cf по расписанию

    Часто в процессе внедрения или активной разработки конфигурации возникает необходимость ежедневного обновления конфигурации базы данных.

    1 стартмани

    09.09.2019 4120 1 sivin-alexey 2

    DroidRAC2 - консоль администрирования кластера серверов 1С:Предприятие 8.3 под Android Промо

    DroidRAC2 - клиент для RAS-сервиса кластера серверов платформы 1С:Предприятие 8.3 под Android.

    1 стартмани

    24.02.2017 27580 12 user700211_a.straltsou 20

    Кто уложил 1С, или мониторинг загрузки кластера в разрезе пользователей с помощью Grafana

    Мониторингом различных параметров работы кластера 1С в zabbix сейчас уже никого не удивишь. Собственно потребление памяти, процов и места на серверах обычно настраивают первыми. Потом идет мониторинг в разрезе rphost'ов и различные метрики функционирования SQL сервера. Но вот когда уже все это есть, то временами возникает вопрос - какой же конкретно нехороший человек пытается съесть все (ну не все, но много) ресурсы сервера? Можно смотреть в консоль кластера и ловить редиску там. Можно анализировать журнал регистраций, включать технологический журнал или накапливать статистку в специализированных базах 1С. Но, "настоящим" сисадминам проще как-то с внешними скриптами, базами данных и, например, Grafana. Расскажу что у нас получилось.

    MdInternals понимает формат cf, cfu, epf, erf, распаковывает содержимое в удобочитаемые Xml и текстовые файлы и загружает обратно. Позволяет программно обращаться к внутренним файлам и свойствам объектов.

    Проект состоит из частей:

    • MdInternals программно обращается к объектам и свойствам конфигурации
    • CfProject отвечает за сериализацию и десериализацию объектов MdInternals
    • MdInternals.Cil декомпилирует байт-код (OpCode) 1С
    • MdInternals.Serialization работает с внутренним полу-JSON форматом 1С вида " < 19 < "", 2 >>"

    Выгрузка файлов cf, cfu, epf, erf на диск

    Распознанные файлы записываются в дерево каталогов по видам объектов. Нераспознанные помещаются в каталог Unresolved:



    Распознанные файлы выгружаются в XML-формате. Формат XML позволяет контролировать логическую целостность файлов и обрабатывать файлы сторонними программами. Известные свойства перемещаются в соответствующие разделы (атрибуты или тэги) XML-структуры:


    Чтение из MSSQL-таблицы

    Обращение к внутренним файлам

    Создание файла из выгруженного xml-формата

    Описание Cf-Формата

    Cf-файл состоит из заголовка образа (ImageHeader) и следующими за ним страницами (ImagePage1-ImagePageN). Заголовок образа состоит из 4х байт сигнатуры, которая равна 0xFF 0xFF 0xFF 0x7F, 4х байт размера страницы и 8 зарезервированных байт. После заголовка файла идут по порядку страницы с данными. Каждая предыдущая страница ссылается на последующую.


    Каждая страница (ImagePage) состоит из заголовка страницы (ImagePageHeader), группы указателей на записи ImageRowPointers и области ImageRows.


    Заголовок страницы ImagePageHeader содержит в себе: зарезервированные 2 байта 0x0D 0x0A, 27 байт текстовой информации и еще зарезервированные 2 байта 0x0D 0x0A. Текстовая информация содержит 3 шестнадцатеричных числа: общий размер данных всех страниц (FullSize), размер текущей страницы (PageSize) и адрес следующей страницы в файле (NextPageAddress). FullSize проставляется только для первой страницы цепочки страниц. Для остальных страниц цепочки это значение 0. Для последней страницы цепочки NextPageAddress принимается равным 0xFF 0xFF 0xFF 0x7F.

    Блок указателей ImageRowPointers занимает размер, указанный в значении PageSize страницы. Каждый указатель состоит из 4х байт адреса заголовка HeaderAddress и 4х байт адреса тела BodyAddress. В конце каждого указателя помещается сигнатура 0xFF 0xFF 0xFF 0x7F. Адреса указывают на расположения внутри текущей страницы на область ImageRows.

    Заголовок ImageRowHeader начинается с блока заголовка страницы ImagePageHeader, который сообщает, сколько байт отведено под заголовок. Далее идут 20 зарезервированных байт, UTF-16 строка идентификатора данных (Id) и 4 зарезервированных байт.

    Тело ImageRowBody начинается с блока заголовка страницы ImagePageHeader, который сообщает, сколько байт отведено под тело данных. Если тело данных начинается на 0xEF 0xBB 0xBF (сигнатура UTF8), то тело содержит UTF-8 строку. Иначе тело данных содержит упакованные данные. Если распакованные данные начинаются на 0xFF 0xFF 0xFF 0x7F, то содержимое – последовательность объектов, и они записаны в CF-формате. Иначе содержимое – это строка сериализации.

    Читайте также: