Как проверить отдельную форму на неиспользуемые процедуры и функции в 1С

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

В процессе разработки и поддержки конфигураций 1С программисты часто сталкиваются с ситуацией, когда после рефакторинга или оптимизации кода в модуле формы остаются "осиротевшие" процедуры и функции. Это неэкспортные методы, на которые больше нет ссылок внутри модуля. Оставлять такой «мертвый» код в системе крайне нежелательно: он затрудняет чтение программы, увеличивает объем конфигурации и вызывает справедливые замечания со стороны специалистов по тестированию (QA).

Стандартный Конфигуратор 1С предлагает инструмент полной проверки конфигурации, который умеет находить неиспользуемые процедуры. Однако у этого механизма есть огромный минус — его нельзя запустить точечно для одного конкретного объекта (например, только для той формы, которую вы сейчас правите). Запуск полной проверки всей базы может занять часы, особенно на крупных типовых решениях уровня ERP или Комплексной автоматизации.

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


Почему Конфигуратор 1С не умеет проверять одну форму?

Давайте выясним причину такого поведения платформы. Поиск ссылок на процедуры и функции — это комплексный процесс анализа связей. На первый взгляд кажется, что для неэкспортных методов (у которых нет ключевого слова Экспорт) проверка должна локализоваться строго в пределах одного модуля. Ведь неэкспортную процедуру формы физически невозможно вызвать из другого общего модуля или формы.

Однако алгоритмы проверки Конфигуратора исторически закладывались как глобальные. Платформа анализирует всю конфигурацию целиком для построения полной карты вызовов. Более того, если процедура объявлена как экспортная (даже внутри модуля объекта или формы), она теоретически может вызываться из любого другого места конфигурации. Поэтому частичная проверка с отбором по одному объекту в стандартном Конфигураторе просто не предусмотрена архитектурно.

Но как быть разработчику, которому нужно быстро проверить результаты своей работы "здесь и сейчас"? Рассмотрим доступные и практичные варианты.


Вариант 1. Использование среды разработки 1С:EDT (Enterprise Development Tools)

Если вы хотите проверять код на лету, наиболее технологичным решением является переход на современную среду разработки 1С:EDT. Она построена на базе Eclipse и выполняет фоновый инкрементальный анализ кода прямо в процессе его написания.

Разберем по шагам, как это работает в 1С:EDT:

  1. В процессе редактирования модуля формы EDT автоматически сканирует текст на соответствие правилам контроля качества.
  2. За поиск "мертвого" кода отвечает встроенное правило проверки module-unused-method (Неиспользуемый метод модуля).
  3. Если вы объявили локальную (неэкспортную) процедуру или функцию, но не вызвали ее в коде модуля и не привязали к событиям элементов формы, EDT сразу же подсветит ее имя желтой волнистой линией.
  4. В панели "Проблемы" (Problems) вы увидите четкое предупреждение. Вам не нужно запускать никаких проверок вручную — все происходит в режиме реального времени.

Этот подход экономит колоссальное количество времени, так как вы видите свои ошибки еще до момента компиляции и сохранения конфигурации.


Вариант 2. Статический анализ с помощью Phoenix BSL и BSL Language Server

Что делать, если вы по-прежнему работаете в классическом Конфигураторе 1С и не планируете переходить на EDT? Для этого сценария отлично подойдет связка Конфигуратора со сторонними инструментами статического анализа кода, такими как BSL Language Server и утилита Phoenix BSL.

Phoenix BSL — это легковесное внешнее приложение с открытым исходным кодом, которое работает "в паре" с Конфигуратором 1С. Проанализируем алгоритм его работы:

  1. Вы открываете нужный модуль формы непосредственно в Конфигураторе 1С.
  2. Нажимаете сочетание горячих клавиш (по умолчанию это Ctrl + I).
  3. Phoenix BSL мгновенно перехватывает текст текущего открытого модуля, передает его в BSL Language Server и выводит отчет об ошибках в красивом всплывающем окне поверх Конфигуратора.
  4. Диагностика под названием UnusedLocalMethod моментально укажет вам на все неиспользуемые неэкспортные методы именно в этой форме.

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


Вариант 3. Выгрузка объекта в файлы и ручной анализ (Парсинг)

Если у вас нет возможности установить внешнее программное обеспечение (например, из-за строгих политик безопасности на рабочем месте), можно прибегнуть к "ручному" полуавтоматическому методу анализа выгруженных файлов.

Выполним следующие шаги:

  1. В дереве конфигурации нажмите правой кнопкой мыши на интересующую вас обработку, документ или отчет и выберите команду Выгрузить в файлы....
  2. Платформа выгрузит структуру объекта в виде XML-файлов и модулей в формате обычного текста (файлы с расширением .bsl).
  3. Откройте полученный текстовый файл модуля (например, ФормаДокумента.bsl) в любом продвинутом текстовом редакторе (Notepad++, VS Code, Sublime Text).
  4. Используйте встроенные инструменты поиска по регулярным выражениям (RegEx). Для поиска объявлений процедур и функций используйте паттерн: (?i)Процедура\s+(\w+)\( или (?i)Функция\s+(\w+)\(.
  5. Для каждого найденного имени метода выполните поиск по тексту файла. Если количество совпадений равно единице (то есть имя встречается только в строке объявления Процедура ИмяМетода()), значит, данная процедура гарантированно не используется в этом модуле и ее можно безопасно удалить.

Как бороться с ложными срабатываниями (Проблема динамических вызовов)

При поиске неиспользуемого кода вы неизбежно столкнетесь с проблемой "ложноположительных" результатов. Это ситуации, когда платформа или анализатор утверждают, что метод не используется, хотя на самом деле он вызывается динамически.

Рассмотрим основные примеры динамических вызовов в 1С:

Во всех этих случаях имя процедуры передается в виде текстовой строки. Стандартный парсер Конфигуратора не может сопоставить строковый литерал с реальным объявлением метода, поэтому он выдаст предупреждение: "Не обнаружено ссылок на процедуру".

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

1. Использование стандартизированных префиксов

Согласно стандартам разработки фирмы "1С" (требование АПК), методам, которые предназначены для динамического подключения, следует давать префикс Подключаемый_. Например:


&НаКлиенте
Процедура Подключаемый_ОбработатьВыборРежима()
    // Этот метод вызывается динамически через ОписаниеОповещения
КонецПроцедуры

Современные анализаторы кода (включая 1С:EDT и BSL Language Server) обучены игнорировать методы с префиксом Подключаемый_ (или английским аналогом Attachable_) при поиске неиспользуемого кода.

2. Подавление предупреждений с помощью аннотаций в коде

Если вы используете продвинутые системы контроля качества (например, SonarQube или BSL LS), вы можете явно указать анализатору, что данную процедуру не нужно проверять на использование. Для этого используются специальные комментарии-инструкции непосредственно перед объявлением метода:


// BSLLS:UnusedLocalMethod-off
&НаКлиенте
Процедура ИмяПроцедурыДляДинамическогоВызова()
    // Код метода
КонецПроцедуры
// BSLLS:UnusedLocalMethod-on

Таким образом, ваш код останется чистым от ложных предупреждений, а автоматические тесты сборки (CI/CD) не будут прерываться из-за ложных срабатываний.


Резюме

Мы проанализировали проблему поиска неиспользуемого кода для одной конкретной формы в 1С. Несмотря на то, что стандартный Конфигуратор не имеет гибкой настройки отборов для этой операции, вы можете эффективно решать эту задачу с помощью внешних инструментов. Использование 1С:EDT или плагина Phoenix BSL позволяет разработчику мгновенно находить "мертвый" код и поддерживать высокое качество разработки без лишних временных затрат.

← На главную