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

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

При сопровождении крупных систем на базе 1С:Предприятие разработчики часто сталкиваются с необходимостью массового анализа кода. Например, когда нужно найти места использования сотни различных процедур или функций, стандартный инструмент «Глобальный поиск» в Конфигураторе становится неэффективным, так как требует ручного запуска для каждого запроса. В рамках данной статьи мы разберем, как можно автоматизировать этот процесс, получив доступ к исходным кодам конфигурации программными методами.

Метод 1: Использование штатного механизма выгрузки конфигурации в файлы

Наиболее надежный и поддерживаемый платформой способ — это использование команды выгрузки конфигурации в текстовые файлы (XML). Этот механизм позволяет превратить бинарный файл конфигурации (CF) в набор папок и файлов, где каждый модуль представлен в виде обычного текста. Рассмотрим, как это сделать через командную строку, чтобы автоматизировать процесс.

Для запуска выгрузки программно, нам потребуется использовать параметры запуска Конфигуратора. Разберем пример команды:


"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "Server\Base" /N "Admin" /P "Password" /DumpConfigToFiles "C:\ConfigSrc" -Format Hierarchical

Проанализируем используемые ключи:

  1. DESIGNER — запуск в режиме конфигуратора.
  2. /DumpConfigToFiles — основная команда, указывающая путь к папке, куда будут выгружены исходники.
  3. -Format Hierarchical — позволяет сохранить иерархическую структуру метаданных, что значительно упрощает последующий поиск.

После завершения этой операции мы получим дерево каталогов. Тексты модулей будут находиться в файлах с расширением .bsl или внутри XML-описаний объектов. Теперь для поиска по 100 процедурам нам достаточно написать простейший скрипт на языке 1С или воспользоваться утилитами типа grep или PowerShell.

Метод 2: Автоматизация поиска с помощью PowerShell

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


$procedures = Get-Content "C:\List.txt"
$sourcePath = "C:\ConfigSrc"

foreach ($proc in $procedures) {
    Write-Host "Поиск процедуры: $proc"
    Select-String -Path "$sourcePath\*.bsl" -Pattern $proc | Export-Csv -Path "C:\Result.csv" -Append
}

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

Метод 3: Использование Enterprise Development Tool (EDT)

EDT — это современная среда разработки для 1С, построенная на базе Eclipse. В отличие от классического Конфигуратора, EDT индексирует весь проект целиком. Проанализируем преимущества этого подхода:

Метод 4: Использование OneScript для глубокой автоматизации

Если нам нужно решение внутри экосистемы 1С, но без привязки к тяжелому Конфигуратору, мы можем использовать OneScript. Рассмотрим, как библиотеки OneScript помогают в нашей задаче. Например, библиотека v8runner позволяет управлять запуском Конфигуратора, а инструменты типа gitsync умеют эффективно выгружать код и отслеживать его изменения.

С помощью OneScript можно реализовать следующий алгоритм:

  1. Программно запустить выгрузку через V8Runner.
  2. Использовать объект ЧтениеТекста для анализа файлов .bsl.
  3. Сформировать отчет в формате Excel или JSON с результатами поиска.

Метод 5: Низкоуровневый доступ через SQL (для продвинутых задач)

Выясним причину, почему иногда выгрузка в файлы не подходит — это скорость. Для очень больших конфигураций (ERP, УТ 11) выгрузка может занимать продолжительное время. В таком случае можно обратиться напрямую к таблице Config в базе данных SQL.

Важно: Текст модулей в таблице Config хранится в сжатом виде (алгоритм Deflate/Zlib). Чтобы прочитать его, потребуется внешняя компонента или скрипт (на Python или C#), который выполнит следующие шаги:

  1. Подключение к SQL-серверу и выполнение запроса SELECT BinaryData FROM Config WHERE FileName = '...'.
  2. Чтение двоичных данных.
  3. Пропуск заголовка (обычно первые несколько байт) и распаковка потока данных.
  4. Преобразование полученного байтового массива в строку UTF-8.

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

Метод 6: BSL Language Server и статический анализ

Для профессиональной работы с кодом рекомендуется обратить внимание на BSL Language Server. Это инструмент, который реализует протокол LSP и «понимает» синтаксис 1С. Разберем, как его использовать:

Сервер может просканировать всю папку с исходниками (полученными в Меcounter 1) и построить дерево зависимостей. Существуют консольные версии анализаторов, которые могут выдать список всех вызовов конкретной функции, отличая реальный вызов от простого упоминания в комментариях или строковых литералах. Это на порядок точнее, чем простой текстовый поиск.

Подведем итог: Для разовой задачи проще всего использовать связку /DumpConfigToFiles и поиск средствами ОС. Для регулярного глубокого анализа лучше перевести разработку в EDT или настроить конвейер статического анализа с использованием OneScript и BSL Language Server.

← На главную