При разработке сложных систем на платформе 1С:Предприятие 8.3 часто возникает задача автоматизированного анализа исходного кода. Это особенно актуально, когда мы используем расширения конфигурации и хотим быть уверены, что после очередного обновления типового решения логика перехваченных процедур (через аннотации &Вместо, &Перед или &После) не изменилась настолько, что наше расширение начнет работать некорректно. Напрямую прочитать свойство ТекстМодуля через встроенный язык невозможно, поэтому нам придется использовать обходные, но эффективные пути.
Самый надежный и официально поддерживаемый способ получить текст любого модуля — это использование пакетного режима работы конфигуратора. Платформа позволяет выгрузить всю конфигурацию или ее части в формат XML и текстовые файлы. Разберем, как это реализовать программно прямо из кода 1С.
Для выполнения этой задачи мы воспользуемся параметром /DumpConfigToFiles. Важно помнить, что для работы этого метода конфигуратор должен быть закрыт, так как система будет запускать новый процесс 1cv8.exe в режиме DESIGNER.
Рассмотрим пример кода, который выполняет такую выгрузку:
Кавычка = """";
ПутьКБазе = СтрЗаменить(СтрокаСоединенияИнформационнойБазы(), Кавычка, Кавычка + Кавычка);
КодВозврата = Неопределено;
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь.Имя;
Пароль = ""; // Укажите пароль, если он есть
КаталогВыгрузки = "C:\ConfigDump";
ИмяФайлаСообщений = КаталогВыгрузки + "\log.txt";
КомандаЗапуска = Кавычка + КаталогПрограммы() + "1cv8.exe" + Кавычка
+ " DESIGNER"
+ " /IBConnectionString " + Кавычка + ПутьКБазе + Кавычка
+ " /N " + Кавычка + Пользователь + Кавычка
+ " /P " + Кавычка + Пароль + Кавычка
+ " /DumpConfigToFiles " + Кавычка + КаталогВыгрузки + Кавычка
+ " /Out " + Кавычка + ИмяФайлаСообщений + Кавычка
+ " /DisableStartupMessages /DisableStartupDialogs";
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);
После выполнения этой команды в указанном каталоге появится иерархия папок и файлов. Тексты модулей будут доступны в обычных текстовых файлах внутри соответствующих папок объектов метаданных.
Выгрузка всей конфигурации может занять длительное время (от нескольких минут до часа для крупных решений вроде ERP). Если нам нужно проверить только конкретные модули, мы можем использовать механизм фильтрации, доступный в современных версиях платформы (8.3.10+).
Проанализируем шаги для настройки выборочной выгрузки:
filter.txt).CommonModule.ОбщегоНазначения.-filter в команду запуска: /DumpConfigToFiles "Путь" -filter "ПутьКФайлуФильтра".Этот подход позволяет сократить время получения кода до нескольких секунд, что делает проверку модулей после обновления практически мгновенной.
Выясним, как автоматизировать проверку того, изменился ли код модуля, не читая его текст глазами. Для этого удобно использовать расчет контрольной суммы (MD5 или SHA-1).
Алгоритм действий будет следующим:
Не забудем, что сама платформа предоставляет инструменты контроля. Использование ключа командной строки /CheckExtension позволяет проверить, корректно ли расширение подключается к текущей версии основной конфигурации. Если сигнатуры методов (количество параметров, типы) изменились, платформа сообщит об этом.
Однако, это не заменяет логическую проверку. Если 1С изменила внутренний алгоритм функции, но сохранила ее имя и параметры, расширение "подцепится", но может работать неправильно. Именно поэтому метод с чтением текста модуля через /DumpConfigToFiles остается самым надежным для глубокого анализа. Для автоматизации сопоставления и проверки методов расширений по файлам выгрузки можно использовать обработку для анализа методов расширений после обновлений.
Существуют и более экзотические способы получения кода, которые мы рассмотрим для полноты картины; в частности, для имитации действий пользователя в интерфейсе можно использовать платформу для создания программных роботов с визуальным конструктором:
Config. Текст модулей упакован алгоритмом Deflate. Если вы обладаете навыками работы с SQL и умеете программно распаковывать бинарные данные, можно извлекать код напрямую. Однако помните, что структура хранения данных в таблице Config официально не документирована и может меняться.oscript (например, v8unpack), которые позволяют работать с файлами .cf и извлекать из них любые данные без использования запущенного экземпляра 1С.git diff для мгновенного отслеживания любых изменений в любых модулях.Подводя итог, можно сказать: несмотря на отсутствие прямой функции ПолучитьТекстМодуля(), связка из пакетного режима конфигуратора (/DumpConfigToFiles) и системы фильтрации объектов является "золотым стандартом" для решения задачи программного анализа кода в 1С.