При сопровождении крупных систем на базе 1С:Предприятие разработчики часто сталкиваются с необходимостью массового анализа кода. Например, когда нужно найти места использования сотни различных процедур или функций, стандартный инструмент «Глобальный поиск» в Конфигураторе становится неэффективным, так как требует ручного запуска для каждого запроса. В рамках данной статьи мы разберем, как можно автоматизировать этот процесс, получив доступ к исходным кодам конфигурации программными методами.
Наиболее надежный и поддерживаемый платформой способ — это использование команды выгрузки конфигурации в текстовые файлы (XML). Этот механизм позволяет превратить бинарный файл конфигурации (CF) в набор папок и файлов, где каждый модуль представлен в виде обычного текста. Рассмотрим, как это сделать через командную строку, чтобы автоматизировать процесс.
Для запуска выгрузки программно, нам потребуется использовать параметры запуска Конфигуратора. Разберем пример команды:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "Server\Base" /N "Admin" /P "Password" /DumpConfigToFiles "C:\ConfigSrc" -Format Hierarchical
Проанализируем используемые ключи:
DESIGNER — запуск в режиме конфигуратора./DumpConfigToFiles — основная команда, указывающая путь к папке, куда будут выгружены исходники.-Format Hierarchical — позволяет сохранить иерархическую структуру метаданных, что значительно упрощает последующий поиск.После завершения этой операции мы получим дерево каталогов. Тексты модулей будут находиться в файлах с расширением .bsl или внутри XML-описаний объектов. Теперь для поиска по 100 процедурам нам достаточно написать простейший скрипт на языке 1С или воспользоваться утилитами типа grep или 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С и не нагружая сервер приложений долгими запросами глобального поиска.
EDT — это современная среда разработки для 1С, построенная на базе Eclipse. В отличие от классического Конфигуратора, EDT индексирует весь проект целиком. Проанализируем преимущества этого подхода:
Если нам нужно решение внутри экосистемы 1С, но без привязки к тяжелому Конфигуратору, мы можем использовать OneScript. Рассмотрим, как библиотеки OneScript помогают в нашей задаче. Например, библиотека v8runner позволяет управлять запуском Конфигуратора, а инструменты типа gitsync умеют эффективно выгружать код и отслеживать его изменения.
С помощью OneScript можно реализовать следующий алгоритм:
V8Runner.ЧтениеТекста для анализа файлов .bsl.Выясним причину, почему иногда выгрузка в файлы не подходит — это скорость. Для очень больших конфигураций (ERP, УТ 11) выгрузка может занимать продолжительное время. В таком случае можно обратиться напрямую к таблице Config в базе данных SQL.
Важно: Текст модулей в таблице Config хранится в сжатом виде (алгоритм Deflate/Zlib). Чтобы прочитать его, потребуется внешняя компонента или скрипт (на Python или C#), который выполнит следующие шаги:
SELECT BinaryData FROM Config WHERE FileName = '...'.Хотя этот метод технически сложен и не рекомендуется для регулярного использования, он является самым быстрым способом получения текста любого модуля без запуска графической оболочки 1С.
Для профессиональной работы с кодом рекомендуется обратить внимание на BSL Language Server. Это инструмент, который реализует протокол LSP и «понимает» синтаксис 1С. Разберем, как его использовать:
Сервер может просканировать всю папку с исходниками (полученными в Меcounter 1) и построить дерево зависимостей. Существуют консольные версии анализаторов, которые могут выдать список всех вызовов конкретной функции, отличая реальный вызов от простого упоминания в комментариях или строковых литералах. Это на порядок точнее, чем простой текстовый поиск.
Подведем итог: Для разовой задачи проще всего использовать связку /DumpConfigToFiles и поиск средствами ОС. Для регулярного глубокого анализа лучше перевести разработку в EDT или настроить конвейер статического анализа с использованием OneScript и BSL Language Server.