Зачем?! На C и вправду ничего в экосистеме 1С нет. Или мне не попадалось. И, кроме пополнения списка в статье VKislitsin, хотелось сравнить скорость с платформой 1С. Здесь, правда, возникает проблема: если получить скорость разбора контейнера в компоненте просто, как получить эту скорость в 1С? Приходится прибегать к замеру «по часам», что даёт очень не точный результат.
В Windows в режиме тонкого клиента среднее значение времени получения метаданных из ERP 2.5.12.48 компонентой составляет 640 мс. Открытие того же файла в 1С Конфигураторе 8.3.23.1739 (х64) – около 5 000 мс. Таким образом, прирост скорости в ≈ 8 раз. Но из внешней компоненты возвращается текст в JSON, его разбор и отображение в 1С занимает, вместе с запросом в ВК, ≈ 3000 мс. При таком расчете прирост скорости падает с 8 до ≈ 1,7 раза.
Для тестирования скорости желательно временно отключить Защиту в реальном времени Microsoft Defender (если он у вас включен). Служба Antimalware service executable очень сильно тормозить выполнение ВК.
В Linux, запущенной в Oracle VM VirtualBox, в режиме тонкого клиента среднее значение времени получения метаданных из ERP 2.5.12.48 компонентой составляет 1030 мс. Открытие того же файла в 1С Конфигураторе 8.3.23.1739 (х64) – около 20 000 мс. Таким образом, прирост скорости в ≈ 20 раз. Как неожиданно и... странно!
Для реализации работы в веб-клиенте использовалась обработка из статьи Решение для работы внешней компоненты в веб-браузере под Windows и Linux: 1С + Installer.
Эта статья, в некотором смысле, опирается на работу Андрея Овсянкина Описание формата файлов конфигурации (CF, EPF, ERF) и использует её терминологию.
Работу с контейнером можно разделить на два уровня: уровень файлов и уровень метаданных. В этой статье речь пойдёт больше про уровень файлов и, совсем немного, про уровень метаданных.
Контейнер – файл с конфигурацией (cf), внешняя обработка (epf), внешний отчет (erf) или расширение (cfe). Если проводить аналогию с файловой системой, то контейнер - это логический диск. Файл внутри контейнера – это поименованная совокупность данных. Файл всегда состоит из двух документов: документа заголовка и документа с содержимым файла. Документ, в свою очередь, состоит из блоков. Блок – это структура из заголовка и следующего строго за ним тела блока. Начиная с версии платформы 8.3.16, появилась новая версия контейнера. Эта версия есть только для конфигурации (cf), и представляет собой адаптацию для работы с 64-х разрядными (UINT64) адресами (старая версия работает с 32-х разрядными (INT32) адресами).
Метаданное – это связанная совокупность файлов. Метаданные – вся структура метаданных в контейнере. В контейнере для работы с метаданными находятся несколько вспомогательных файлов: root, version, versions, copyinfo, configinfo. Root/configinfo – это файл, с которого начинается работа с метаданными контейнера.
Root используется для конфигурации (cf), внешней обработке (epf), внешнего отчета (erf), для расширения (cfe) – configinfo. Внутри root файла находится id файла с описанием структуры метаданных.
В файле version находится информация о версии контейнера, например: {{216,0,{80323,0}}}, где 80323 – номер версии. Если номер версии меньше 80316 – версия с 32-х разрядной адресацией, иначе – с 64-х разрядной. Имеет смысл только для конфигурации, в обработке, отчете, расширении всегда 32-х разрядная версия, вне зависимости от того, что написано в файле version.
В файле versions находятся пары «id метаданного», id версии метаданного. Используется для кэширования метаданных.
В файле copyinfo в формате внутренних данных 1С хранится информация об изменениях. Есть, судя по всему, только во внешних отчётах и обработках.
Configinfo используется в расширении вместо root, version, versions.
В файле с описанием структуры метаданных, в разделах видов метаданных находится список id самих метаданных. Id метаданного совпадает с именем файла атрибутов, содержащим описание метаданного. В этом файле находится список частей метаданного произвольного количества: формы, макеты, команды, перерасчеты. Помимо этого у метаданного, в зависимости от его вида метаданного, могут быть постфиксы единичных частей: модуль объекта, модуль менеджера, справочная информация и так далее.
Например, в ERP 2.5.12.48.cf, у справочника Файлы с id e7b0ae70-0192-456c-9dc5-e66049fa9df2, постфикса модуля объекта (см. ниже таблицу) - 0, то есть, id файла с модулем объекта - id.0, e7b0ae70-0192-456c-9dc5-e66049fa9df2.0. Аналогично, модуль менеджера - e7b0ae70-0192-456c-9dc5-e66049fa9df2.3, справочная информация, e7b0ae70-0192-456c-9dc5-e66049fa9df2.1, предопределенные данные, внезапно!, e7b0ae70-0192-456c-9dc5-e66049fa9df2.1c. Не все постфиксы однозначные и цифровые.
С частями произвольного количества несколько сложнее: нужно в файле атрибутов найти id части, для справочников id форм - fdf816d2-1ead-11d5-b975-0050bae0a95d. Получаем имена файлов формы, например, ФормаВыбора: Атрибуты формы - 5a398637-a06c-4442-9093-a864fa7f049f, Форма и модуль - 5a398637-a06c-4442-9093-a864fa7f049f.0, Справочная
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.17.157
Вступайте в нашу телеграмм-группу Инфостарт
