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

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

При разработке сложных систем на платформе 1С:Предприятие 8.3 часто возникает задача автоматизированного анализа исходного кода. Это особенно актуально, когда мы используем расширения конфигурации и хотим быть уверены, что после очередного обновления типового решения логика перехваченных процедур (через аннотации &Вместо, &Перед или &После) не изменилась настолько, что наше расширение начнет работать некорректно. Напрямую прочитать свойство ТекстМодуля через встроенный язык невозможно, поэтому нам придется использовать обходные, но эффективные пути.

Решение 1: Выгрузка конфигурации в файлы через командную строку

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

Для выполнения этой задачи мы воспользуемся параметром /DumpConfigToFiles. Важно помнить, что для работы этого метода конфигуратор должен быть закрыт, так как система будет запускать новый процесс 1cv8.exe в режиме DESIGNER.

Рассмотрим пример кода, который выполняет такую выгрузку:


Кавычка = """"; 
ПутьКБазе = СтрЗаменить(СтрокаСоединенияИнформационнойБазы(), Кавычка, Кавычка + Кавычка); 
КодВозврата = Неопределено; 
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь.Имя; 
Пароль = ""; // Укажите пароль, если он есть
КаталогВыгрузки = "C:\ConfigDump";
ИмяФайлаСообщений = КаталогВыгрузки + "\log.txt"; 

КомандаЗапуска = Кавычка + КаталогПрограммы() + "1cv8.exe" + Кавычка 
    + " DESIGNER" 
    + " /IBConnectionString " + Кавычка + ПутьКБазе + Кавычка 
    + " /N " + Кавычка + Пользователь + Кавычка 
    + " /P " + Кавычка + Пароль + Кавычка 
    + " /DumpConfigToFiles " + Кавычка + КаталогВыгрузки + Кавычка 
    + " /Out " + Кавычка + ИмяФайлаСообщений + Кавычка 
    + " /DisableStartupMessages /DisableStartupDialogs";

ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);

После выполнения этой команды в указанном каталоге появится иерархия папок и файлов. Тексты модулей будут доступны в обычных текстовых файлах внутри соответствующих папок объектов метаданных.

Решение 2: Оптимизация выгрузки с помощью фильтров

Выгрузка всей конфигурации может занять длительное время (от нескольких минут до часа для крупных решений вроде ERP). Если нам нужно проверить только конкретные модули, мы можем использовать механизм фильтрации, доступный в современных версиях платформы (8.3.10+).

Проанализируем шаги для настройки выборочной выгрузки:

  1. Создадим текстовый файл конфигурации фильтра (например, filter.txt).
  2. В файле укажем объекты, которые нас интересуют, например: CommonModule.ОбщегоНазначения.
  3. Добавим параметр -filter в команду запуска: /DumpConfigToFiles "Путь" -filter "ПутьКФайлуФильтра".

Этот подход позволяет сократить время получения кода до нескольких секунд, что делает проверку модулей после обновления практически мгновенной.

Решение 3: Контроль изменений через хеш-суммы (CRC)

Выясним, как автоматизировать проверку того, изменился ли код модуля, не читая его текст глазами. Для этого удобно использовать расчет контрольной суммы (MD5 или SHA-1).

Алгоритм действий будет следующим:

Решение 4: Использование механизма проверки применимости расширений

Не забудем, что сама платформа предоставляет инструменты контроля. Использование ключа командной строки /CheckExtension позволяет проверить, корректно ли расширение подключается к текущей версии основной конфигурации. Если сигнатуры методов (количество параметров, типы) изменились, платформа сообщит об этом.

Однако, это не заменяет логическую проверку. Если 1С изменила внутренний алгоритм функции, но сохранила ее имя и параметры, расширение "подцепится", но может работать неправильно. Именно поэтому метод с чтением текста модуля через /DumpConfigToFiles остается самым надежным для глубокого анализа. Для автоматизации сопоставления и проверки методов расширений по файлам выгрузки можно использовать обработку для анализа методов расширений после обновлений.

Альтернативные и экспертные методы

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

  1. Прямое чтение из СУБД (SQL): Данные конфигурации хранятся в таблице Config. Текст модулей упакован алгоритмом Deflate. Если вы обладаете навыками работы с SQL и умеете программно распаковывать бинарные данные, можно извлекать код напрямую. Однако помните, что структура хранения данных в таблице Config официально не документирована и может меняться.
  2. Инструменты OneScript: В сообществе разработчиков популярны библиотеки на базе oscript (например, v8unpack), которые позволяют работать с файлами .cf и извлекать из них любые данные без использования запущенного экземпляра 1С.
  3. Режим EDT (Enterprise Development Tools): Если вы перейдете на разработку в среде EDT, то вопрос программного чтения кода отпадет сам собой. В EDT вся конфигурация изначально хранится в текстовом виде в проекте Git. Это позволяет использовать стандартные инструменты git diff для мгновенного отслеживания любых изменений в любых модулях.

Подводя итог, можно сказать: несмотря на отсутствие прямой функции ПолучитьТекстМодуля(), связка из пакетного режима конфигуратора (/DumpConfigToFiles) и системы фильтрации объектов является "золотым стандартом" для решения задачи программного анализа кода в 1С.

← На главную