При проведении аудита кода, построении графов вызовов функций, поиске дубликатов или настройке версионирования в Git часто возникает задача выгрузить исходный код не только из основной конфигурации, но и из сотен внешних отчетов и обработок (файлов .epf и .erf). Встроенный язык 1С не предоставляет средств прямой рефлексии для чтения исходного кода модулей в режиме предприятия, поэтому решение строится на пакетном режиме запуска конфигуратора либо на прямом разборе контейнеров.
Разберем по шагам все доступные варианты решения: от штатных ключей запуска Конфигуратора до скриптов пакетной автоматизации и специализированных утилит.
Для выгрузки исходных кодов из основной конфигурации 1С:Предприятия используется пакетный запуск Конфигуратора с соответствующими параметрами командной строки.
Рассмотрим основные параметры командной строки:
/DumpConfigFiles <КаталогВыгрузки> -Module позволяет выгрузить только тексты модулей конфигурации без лишних XML-описаний метаданных./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
Штатный параметр /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
Проанализируем важные технические нюансы работы этого скрипта:
/F.ЧтениеXML или регулярных выражений.Запуск Конфигуратора для 200 файлов может занимать от 30 минут до часа из-за накладных расходов на инициализацию среды платформы. Если требуется высокая скорость разбора, рассмотрим прямой разбор двоичных контейнеров 1С без запуска 1cv8.exe.
Файлы конфигураций и внешних обработок представляют собой составные контейнеры (Compound File), в которых потоки данных сжаты алгоритмом Deflate. Консольные утилиты (например, oscript-v8unpack или классический v8unpack) распаковывают внутреннее дерево потоков за доли секунды.
Преимущества прямого разбора контейнеров:
/DumpConfigFiles <Каталог> -Module./DumpExternalDataProcessorOrReportToFiles.