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

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

В процессе рефакторинга и оптимизации кода крупного проекта регулярно возникает задача очистки модуля от устаревших, «мертвых» процедур и функций. Проверка всей конфигурации на крупных базах (например, ERP или Управление холдингом) может занимать длительное время и генерировать огромное количество лишних сообщений по другим объектам. В этой статье мы разберем, как быстро найти неиспользуемые локальные (неэкспортные) методы в пределах одного конкретного модуля.

Особенности анализа неиспользуемого кода

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

Также важно учитывать особенности каскадных вызовов. Если неиспользуемая процедура Ф1() внутри себя вызывает процедуру Ф2(), то при первом проходе анализатор подсветит как неиспользуемую только Ф1(), поскольку на Ф2() формально есть ссылка. Полная очистка кода в таких случаях выполняется в 2–3 последовательных захода по мере удаления неактивных методов.

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


#Область ПрограммныйИнтерфейс

Процедура ГлавныйМетод() Экспорт
    // Экспортный метод, доступен снаружи
    ОбработатьДанные();
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ОбработатьДанные()
    // Локальный метод, используется в ГлавныйМетод()
    Результат = 1;
КонецПроцедуры

Процедура СтараяНеиспользуемаяПроцедура()
    // Локальный метод, на который нет ссылок в модуле
    Результат = 0;
КонецПроцедуры

#КонецОбласти

Способ 1. Использование контекстного меню «Найти использование»

Самый простой вариант, не требующий стороннего софта или запуска тяжелых проверок, — точечный ручной поиск через интерфейс Конфигуратора 1С.

  1. Откроем нужный модуль в Конфигураторе.
  2. Нажмем правой кнопкой мыши на имя проверяемой процедуры или функции в тексте либо в дереве процедур.
  3. В контекстном меню выберем пункт Найти использование (или используем горячие клавиши).

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

Способ 2. Временное снятие ключевого слова Экспорт

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

  1. Временно уберем ключевое слово Экспорт у проверяемой процедуры.
  2. Запустим синтаксический контроль модуля.
  3. Если процедура вызывалась из внешних модулей, система выдаст ошибку о недоступности метода.
  4. После анализа вернем ключевое слово Экспорт на место или окончательно закомментируем/удалим процедуру, если вызовов не обнаружено.

Способ 3. Использование статического анализатора BSL Language Server

Для профессиональной разработки и мгновенного анализа одиночных файлов отлично подходит бесплатный статический анализатор BSL Language Server и плагины для редакторов кода (например, VS Code).

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

  1. Сохраним текст модуля в файл Модуль.bsl.
  2. Откроем файл в VS Code с установленным расширением BSL Language Server.
  3. Анализатор мгновенно запустит диагностику UnusedLocalMethod и подсветит все локальные процедуры и функции, на которые отсутствуют ссылки внутри этого файла.

Также проверку можно запустить из командной строки для конкретного файла:

bsl-language-server analyze --diagnostic UnusedLocalMethod --src ./Модуль.bsl

Способ 4. Проверка через 1C:EDT (Enterprise Development Tools)

Если разработка ведется в среде 1C:EDT, проверка на неиспользуемые методы выполняется «на лету» с помощью встроенной диагностики module-unused-method.

Чтобы проверка одного модуля не замедляла работу всей системы, рекомендуется настроить специальный профиль проверок:

  1. Откроем настройки проверок проекта в EDT.
  2. Создадим отдельный профиль, в котором включим только правило поиска неиспользуемых локальных методов.
  3. В окне редактора модуля неиспользуемые неэкспортные процедуры будут автоматически подчеркиваться предупреждениями.

Способ 5. Ограничения статического анализа

Проанализируем ситуации, когда автоматические проверки могут дать ложный результат или пропустить вызов:

  1. Динамические вызовы строкой: Если имя процедуры передается строкой в платформенные механизмы (например, ОписаниеОповещения, ПодключитьОбработчикОжидания(), УстановитьДействие()), ни один статический анализатор не сможет отследить такой вызов. Подобные методы необходимо проверять вручную перед удалением.
  2. Модули форм: При изолированном анализе модуля формы отдельно от файла метаданных формы все неэкспортные обработчики событий элементов и команд будут ошибочно помечены как неиспользуемые, так как связь с элементами формы описана в структуре самой формы, а не в BSL-коде.
← На главную