Разработчики, долгое время работающие в среде 1С:Предприятие 7.7, прекрасно знают об ограничениях стандартного Конфигуратора. Одной из наиболее острых проблем является отсутствие встроенной поддержки регулярных выражений (RegExp) при поиске по текстам модулей. Стандартный поиск позволяет искать только по точным совпадениям или простейшим маскам, что существенно замедляет рефакторинг и анализ сложного унаследованного кода. В этой статье мы подробно разберем, как расширить возможности Конфигуратора 1С 7.7, внедрив в него локальный и глобальный поиск с использованием регулярных выражений.
Для расширения возможностей Конфигуратора 1С 7.7 традиционно используется инструмент OpenConf — открытая архитектура автоматизации среды разработки. Одним из самых популярных решений для работы с регулярными выражениями является скрипт FindText.vbs. Разберем детально, как устроен этот механизм и какие возможности он предоставляет разработчику.
Скрипт FindText.vbs осуществляет поиск внутри текста активного модуля, задействуя системную библиотеку Windows Script Host и стандартный COM-объект VBScript.RegExp. Рассмотрим базовые возможности и логику его работы:
FindWithAddBookmarks — не просто находит первое совпадение, а мгновенно сканирует весь модуль и расставляет стандартные закладки (Bookmarks) Конфигуратора на всех строках, где регулярное выражение дало результат. Это позволяет разработчику быстро перемещаться по найденным строкам с помощью стандартной клавиши F2. Если накопление закладок мешает работе, можно воспользоваться альтернативным макросом FindWithoutAddBookmarks, который просто позиционирует курсор на найденных фрагментах без изменения закладок.FindText.vbs предлагает предустановленные шаблоны фильтрации. Например, мы можем искать совпадения только в исполняемом коде (игнорируя строки, начинающиеся с //) или, наоборот, только в секциях комментариев для проведения ревизии документации кода.Для понимания того, как работает движок поиска на низком уровне, проанализируем фрагмент кода, инициализирующий объект поиска в скрипте:
Dim regEx, Matches
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "Процедура\s+(\w+)" ' Шаблон для поиска объявлений процедур
regEx.IgnoreCase = True ' Игнорировать регистр букв в 1С
regEx.Global = True ' Найти все совпадения в модуле
Если вы хотите получить более современную среду разработки внутри 1С 7.7, идеальным решением станет интеграция плагина SciColorer для OpenConf. Этот плагин полностью заменяет устаревший штатный текстовый редактор Конфигуратора на передовой редактор на базе библиотеки Scintilla, дополненный парсером синтаксиса Colorer.
Использование Scintilla дает разработчику полноценный встроенный поиск по регулярным выражениям без необходимости написания сложных внешних скриптов автоматизации. Для вывода результатов используется функция SciColorer::ShowSearchResultsOfSelectedText(). Разберем её преимущества:
Встроенный инструмент 1С 7.7 "Поиск во всех текстах" крайне ограничен и абсолютно не поддерживает регулярные выражения. Если перед нами стоит задача провести глобальный рефакторинг по всей конфигурации (например, найти все вызовы процедур с определенным набором параметров во всех глобальных и локальных модулях, формах и таблицах), стандартных средств OpenConf будет недостаточно. В этом случае мы должны применить профессиональный подход с декомпиляцией конфигурации.
Разберем этот процесс по шагам:
1Cv7.md на структурированный каталог обычных текстовых файлов. Каждый модуль (будь то модуль документа, справочника или формы) выгружается как отдельный файл с расширением .txt или .pcode.(?<=...) и (?<!...)) и опережающей проверки (Lookahead: (?=...) и (?!...)). Это позволяет задавать условия вида "найти имя переменной Х, только если перед ней не стоит ключевое слово Перем".1Cv7.md.Рассмотрим еще один альтернативный и очень интересный сценарий работы, упомянутый опытными разработчиками. Если нам необходимо извлечь и обработать результаты штатного поиска Конфигуратора, но при этом мы хотим отфильтровать их с помощью регулярных выражений, мы можем использовать связку утилит.
Для этого применяется специализированная утилита UICtrlDataSpy.exe. Она позволяет в реальном времени перехватывать текстовые данные из стандартных окон вывода и списков Windows-приложений (включая окна Конфигуратора 1С). Разберем эту схему работы:
UICtrlDataSpy и сохраняем его в текстовый файл или буфер обмена.При написании регулярных выражений важно учитывать различия между возможностями встроенного движка VBScript.RegExp (используемого в FindText.vbs) и современными внешними движками (PCRE в Notepad++ / VS Code):
VBScript.RegExp обязательно выставляйте флаг IgnoreCase = True. Во внешних редакторах используйте модификатор поиска (?i).$1, $2). Если вам требуются именованные группы для сложной замены, используйте Notepad++.(?<=...) не поддерживаются в VBScript.RegExp. Если вам нужно найти использование метода ПолучитьАтрибут, перед которым нет точки (то есть это не вызов метода объекта), написать такое регулярное выражение для локального скрипта OpenConf будет крайне сложно. В этом случае лучшим выбором станет выгрузка через GComp и поиск во внешнем редакторе с поддержкой стандарта PCRE.Используя предложенные методы и инструменты, мы можем существенно повысить скорость и качество разработки в среде 1С:Предприятие 7.7, превратив рутинный поиск и рефакторинг кода в удобный и автоматизированный процесс.