Как выгрузить модули и макеты из конфигурации и пакета внешних отчетов и обработок в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При проведении аудита кода, построении графов вызовов функций, поиске дубликатов или настройке версионирования в Git часто возникает задача выгрузить исходный код не только из основной конфигурации, но и из сотен внешних отчетов и обработок (файлов .epf и .erf). Встроенный язык 1С не предоставляет средств прямой рефлексии для чтения исходного кода модулей в режиме предприятия, поэтому решение строится на пакетном режиме запуска конфигуратора либо на прямом разборе контейнеров.

Разберем по шагам все доступные варианты решения: от штатных ключей запуска Конфигуратора до скриптов пакетной автоматизации и специализированных утилит.

Вариант 1. Выгрузка модулей и метаданных конфигурации в файлы

Для выгрузки исходных кодов из основной конфигурации 1С:Предприятия используется пакетный запуск Конфигуратора с соответствующими параметрами командной строки.

Рассмотрим основные параметры командной строки:

  1. Выгрузка только модулей: параметр /DumpConfigFiles <КаталогВыгрузки> -Module позволяет выгрузить только тексты модулей конфигурации без лишних XML-описаний метаданных.
  2. Полная выгрузка конфигурации: параметр /DumpConfigToFiles <КаталогВыгрузки> выгружает полную иерархическую структуру конфигурации в виде набора XML-файлов и модулей.

Пример вызова для файловой базы данных:


"C:\Program Files\1cv8\8.3.23.1865\bin\1cv8.exe" DESIGNER /F "D:\Bases\MyBase" /N "Admin" /P "Password" /DumpConfigFiles "D:\Dump\Modules" -Module

Вариант 2. Пакетная выгрузка внешних обработок и отчетов через Конфигуратор

Штатный параметр /DumpExternalDataProcessorOrReportToFiles позволяет разобрать один файл внешней обработки или отчета на составляющие файлы исходного кода, форм и макетов. Синтаксис команды требует указания целевого каталога и пути к исходному файлу:


"C:\Program Files\1cv8\8.3.23.1865\bin\1cv8.exe" CONFIG /F "D:\Bases\EmptyBase" /DisableStartupDialogs /DumpExternalDataProcessorOrReportToFiles "D:\Export\ProcessorDir" "D:\Processors\MyProcessor.epf"

Главная сложность заключается в том, что данный параметр не умеет обрабатывать маски файлов (например, *.epf) или каталоги целиком. Для обработки массива из десятков или сотен внешних файлов необходимо организовать циклический вызов Конфигуратора с помощью командного файла Windows Batch или скрипта PowerShell.

Рассмотрим готовый bat-скрипт, который обходит указанную папку, находит все файлы с расширениями .epf и .erf, создает для каждого отдельную подпапку и выгружает туда структуру объекта:


@ECHO OFF
@CHCP 1251

:: Указываем путь к каталогу с обработками и путь к пустой служебной базе
SET work_dir="D:\1C\ExternalProcessors"
SET empty_base="D:\1C\Bases\EmptyRepoBase"
SET path_1c="C:\Program Files\1cv8\8.3.23.1865\bin\1cv8.exe"
SET log_file=dump_output.log

IF NOT EXIST "ExternalProcessorData" MKDIR "ExternalProcessorData"

:: Обход всех файлов .epf и .erf в каталоге и его подкаталогах
FOR /R %work_dir% %%G IN (*.e?f) DO (
    ECHO Обработка файла: %%~nxG
    IF NOT EXIST "ExternalProcessorData\%%~nxG" MKDIR "ExternalProcessorData\%%~nxG"
    
    %path_1c% CONFIG /F %empty_base% /DisableStartupDialogs /Out %log_file% /DumpExternalDataProcessorOrReportToFiles "ExternalProcessorData\%%~nxG" "%%~fG"
    
    IF ERRORLEVEL 1 (
        ECHO Ошибка при выгрузке %%~nxG
    ) ELSE (
        ECHO Успешно выгружен %%~nxG
    )
)

ECHO Выгрузка всех объектов завершена.
PAUSE

Проанализируем важные технические нюансы работы этого скрипта:

  1. Использование пустой базы: Конфигуратор требует подключения к информационной базе для выполнения команды. Рекомендуется создать пустую файловую базу без конфигурации и указывать её в параметре /F.
  2. Монопольный доступ: Конфигуратор захватывает файловую базу монопольно. Если вы хотите распараллелить выгрузку сотен файлов в несколько потоков, создайте несколько копий каталога пустой базы (по числу потоков процессора).
  3. Структура модулей форм: Модуль объекта внешней обработки сохраняется отдельным файлом, однако модули управляемых форм сохраняются внутри XML-файла описания формы. Для последующего анализа кода форм потребуется дополнительно распарсить полученные XML-файлы с помощью средств ЧтениеXML или регулярных выражений.

Вариант 3. Использование сторонних утилит прямой распаковки (v8unpack)

Запуск Конфигуратора для 200 файлов может занимать от 30 минут до часа из-за накладных расходов на инициализацию среды платформы. Если требуется высокая скорость разбора, рассмотрим прямой разбор двоичных контейнеров 1С без запуска 1cv8.exe.

Файлы конфигураций и внешних обработок представляют собой составные контейнеры (Compound File), в которых потоки данных сжаты алгоритмом Deflate. Консольные утилиты (например, oscript-v8unpack или классический v8unpack) распаковывают внутреннее дерево потоков за доли секунды.

Преимущества прямого разбора контейнеров:

  1. Скорость: разбор 200 внешних обработок занимает считанные секунды.
  2. Автономность: не требуется установленная платформа 1С, наличие клиентских лицензий и создание баз данных.
  3. Доступ к сырым данным: модули обычных и управляемых форм извлекаются напрямую из внутренних потоков контейнера.

Рекомендации по организации процесса

  1. Для выгрузки модулей конфигурации используйте пакетный параметр /DumpConfigFiles <Каталог> -Module.
  2. Для внешних обработок в рамках типовой инфраструктуры используйте связку из пустой файловой базы и bat-скрипта с параметром /DumpExternalDataProcessorOrReportToFiles.
  3. Если модули выгружаются для регулярного статического анализа или построения деревьев вызовов в CI/CD-пайплайнах, настройте параллельный запуск потоков или используйте быстрые консольные распаковщики контейнеров.
← На главную