Как настроить и использовать поиск по регулярным выражениям в 1С 7.7

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Разработчики, долгое время работающие в среде 1С:Предприятие 7.7, прекрасно знают об ограничениях стандартного Конфигуратора. Одной из наиболее острых проблем является отсутствие встроенной поддержки регулярных выражений (RegExp) при поиске по текстам модулей. Стандартный поиск позволяет искать только по точным совпадениям или простейшим маскам, что существенно замедляет рефакторинг и анализ сложного унаследованного кода. В этой статье мы подробно разберем, как расширить возможности Конфигуратора 1С 7.7, внедрив в него локальный и глобальный поиск с использованием регулярных выражений.

Решение 1. Локальный поиск по RegExp с помощью скрипта FindText.vbs для OpenConf

Для расширения возможностей Конфигуратора 1С 7.7 традиционно используется инструмент OpenConf — открытая архитектура автоматизации среды разработки. Одним из самых популярных решений для работы с регулярными выражениями является скрипт FindText.vbs. Разберем детально, как устроен этот механизм и какие возможности он предоставляет разработчику.

Скрипт FindText.vbs осуществляет поиск внутри текста активного модуля, задействуя системную библиотеку Windows Script Host и стандартный COM-объект VBScript.RegExp. Рассмотрим базовые возможности и логику его работы:

  1. Автоматическая расстановка закладок. Основной макрос скрипта — FindWithAddBookmarks — не просто находит первое совпадение, а мгновенно сканирует весь модуль и расставляет стандартные закладки (Bookmarks) Конфигуратора на всех строках, где регулярное выражение дало результат. Это позволяет разработчику быстро перемещаться по найденным строкам с помощью стандартной клавиши F2. Если накопление закладок мешает работе, можно воспользоваться альтернативным макросом FindWithoutAddBookmarks, который просто позиционирует курсор на найденных фрагментах без изменения закладок.
  2. Исключение комментариев из области поиска. Одной из главных проблем при поиске по регулярным выражениям в коде 1С является ложное срабатывание внутри закомментированных строк. Скрипт FindText.vbs предлагает предустановленные шаблоны фильтрации. Например, мы можем искать совпадения только в исполняемом коде (игнорируя строки, начинающиеся с //) или, наоборот, только в секциях комментариев для проведения ревизии документации кода.
  3. Удобство интерфейса (Юзабилити). Скрипт запоминает историю последних поисковых запросов в рамках текущей сессии работы. Если перед вызовом макроса выделить слово в модуле или установить на него курсор, скрипт автоматически подставит его в качестве стартового значения для регулярного выражения. Если в результате поиска найдено ровно одно совпадение, скрипт сработает бесшумно — он не станет открывать диалоговые окна, а сразу переведет фокус редактора на нужную строку.

Для понимания того, как работает движок поиска на низком уровне, проанализируем фрагмент кода, инициализирующий объект поиска в скрипте:


Dim regEx, Matches
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "Процедура\s+(\w+)" ' Шаблон для поиска объявлений процедур
regEx.IgnoreCase = True             ' Игнорировать регистр букв в 1С
regEx.Global = True                 ' Найти все совпадения в модуле

Решение 2. Использование возможностей плагина SciColorer

Если вы хотите получить более современную среду разработки внутри 1С 7.7, идеальным решением станет интеграция плагина SciColorer для OpenConf. Этот плагин полностью заменяет устаревший штатный текстовый редактор Конфигуратора на передовой редактор на базе библиотеки Scintilla, дополненный парсером синтаксиса Colorer.

Использование Scintilla дает разработчику полноценный встроенный поиск по регулярным выражениям без необходимости написания сложных внешних скриптов автоматизации. Для вывода результатов используется функция SciColorer::ShowSearchResultsOfSelectedText(). Разберем её преимущества:

Решение 3. Организация глобального поиска (GComp + Windows Grep / Notepad++)

Встроенный инструмент 1С 7.7 "Поиск во всех текстах" крайне ограничен и абсолютно не поддерживает регулярные выражения. Если перед нами стоит задача провести глобальный рефакторинг по всей конфигурации (например, найти все вызовы процедур с определенным набором параметров во всех глобальных и локальных модулях, формах и таблицах), стандартных средств OpenConf будет недостаточно. В этом случае мы должны применить профессиональный подход с декомпиляцией конфигурации.

Разберем этот процесс по шагам:

  1. Декомпиляция файла конфигурации. Используем специализированную утилиту GComp. Она позволяет разобрать бинарный файл структуры метаданных и модулей 1Cv7.md на структурированный каталог обычных текстовых файлов. Каждый модуль (будь то модуль документа, справочника или формы) выгружается как отдельный файл с расширением .txt или .pcode.
  2. Выбор инструмента поиска. Получив каталог с исходными текстами конфигурации, мы можем использовать любой современный текстовый редактор или специализированный поисковик. Наиболее популярными решениями являются Notepad++, VS Code или классическая утилита Windows Grep.
  3. Преимущества внешнего поиска. Внешние редакторы используют современные полнофункциональные движки регулярных выражений (например, PCRE в Notepad++). Это дает нам колоссальные преимущества по сравнению с движком VBScript:
    • Поддержка ретроспективной проверки (Lookbehind: (?<=...) и (?<!...)) и опережающей проверки (Lookahead: (?=...) и (?!...)). Это позволяет задавать условия вида "найти имя переменной Х, только если перед ней не стоит ключевое слово Перем".
    • Возможность многострочного поиска (Multiline), когда регулярное выражение может сопоставлять данные, распределенные по нескольким строкам модуля.
    • Возможность выполнения безопасной глобальной автозамены по регулярным выражениям во всех файлах проекта одновременно с последующей обратной сборкой конфигурации утилитой GComp в рабочий файл 1Cv7.md.

Решение 4. Использование утилиты CtrlDataSpy для перехвата данных поиска

Рассмотрим еще один альтернативный и очень интересный сценарий работы, упомянутый опытными разработчиками. Если нам необходимо извлечь и обработать результаты штатного поиска Конфигуратора, но при этом мы хотим отфильтровать их с помощью регулярных выражений, мы можем использовать связку утилит.

Для этого применяется специализированная утилита UICtrlDataSpy.exe. Она позволяет в реальном времени перехватывать текстовые данные из стандартных окон вывода и списков Windows-приложений (включая окна Конфигуратора 1С). Разберем эту схему работы:

  1. Запускаем стандартный поиск во всех текстах в Конфигураторе 1С 7.7.
  2. Полученный список результатов перехватываем с помощью утилиты UICtrlDataSpy и сохраняем его в текстовый файл или буфер обмена.
  3. Открываем полученный список результатов поиска в редакторе Notepad++ и применяем к нему любые регулярные выражения для тонкой фильтрации, группировки или быстрого извлечения нужных сигнатур кода.

Сравнительный анализ возможностей движков регулярных выражений

При написании регулярных выражений важно учитывать различия между возможностями встроенного движка VBScript.RegExp (используемого в FindText.vbs) и современными внешними движками (PCRE в Notepad++ / VS Code):

Используя предложенные методы и инструменты, мы можем существенно повысить скорость и качество разработки в среде 1С:Предприятие 7.7, превратив рутинный поиск и рефакторинг кода в удобный и автоматизированный процесс.

← На главную