В процессе многолетней эксплуатации и обновления нетиповых конфигураций, таких как 1С:Управление торговлей, в коде неизбежно накапливается «мертвый груз» — процедуры и функции, которые больше не вызываются. Разберем ситуацию: стоит ли тратить время на чистку этого кода, как он влияет на систему и какими инструментами пользоваться, чтобы не нарушить работоспособность программы.
Проанализируем ситуацию с точки зрения работы предприятия. Само по себе наличие текста неиспользуемой процедуры в модуле практически не замедляет выполнение кода в режиме реального времени. Однако, это не означает, что лишний код полностью безвреден. Рассмотрим скрытые факторы влияния:
Config. Это замедляет операции обновления конфигурации базы данных, создание резервных копий и может приводить к раздуванию локального кэша пользователей.Выясним, почему встроенный механизм «Поиск неиспользуемых процедур и функций» часто оказывается неэффективным. Как отмечают опытные разработчики, этот инструмент обладает рядом ограничений:
Во-первых, он плохо справляется с динамическим назначением обработчиков. Рассмотрим примеры, которые встроенный поиск может ошибочно пометить как неиспользуемые:
// Использование объекта Действие
Кнопка.УстановитьДействие("Нажатие", Новый Действие("ОбработчикНажатияКнопки"));
// Подключение обработчика ожидания
ПодключитьОбработчикОжидания("ВыполнитьПроверкуСтатуса", 60);
Во-вторых, встроенный поиск практически не контролирует экспортные процедуры в общих модулях. Платформа не может быть уверена, что метод не вызывается из внешней обработки, через COM-соединение, HTTP-сервис или из расширения конфигурации.
В-третьих, огромную проблему представляют вызовы через методы Выполнить() и Вычислить(). Если имя процедуры собирается в строковой переменной в зависимости от условий, статический анализатор Конфигуратора никогда не найдет такую связь.
Посмотрим на альтернативные решения, которые позволяют провести более глубокий аудит кода, чем стандартные средства:
Если мы решили очистить конфигурацию, действовать нужно крайне осторожно. Разберем по шагам алгоритм безопасной чистки:
Чтобы убедиться, что процедура действительно не используется, можно использовать замер производительности на реальной базе в течение длительного периода (например, недели). Если за это время счетчик вызовов процедуры равен нулю, это серьезный кандидат на удаление.
Другой надежный способ — временное логирование. В подозрительную процедуру можно добавить код записи в Журнал Регистрации:
Процедура СомнительнаяПроцедура() Экспорт
// Временный код для аудита
ЗаписьЖурналаРегистрации("АудитКода", УровеньЖурналаРегистрации.Предупреждение, , , "Вызвана СомнительнаяПроцедура");
// Основная логика процедуры
...
КонецПроцедуры
Никогда не удаляйте код сразу. Рассмотрим более безопасные методы:
#Если Ложь Тогда
Процедура СтараяПроцедураКоторуюЖалкоУдалить()
// Текст старого кода
КонецПроцедуры
#КонецЕсли
_Удалить_ОбщийМодуль, и переносите сомнительные методы туда. Это позволит очистить основные рабочие модули и при этом легко вернуть код, если он вдруг понадобится.Чтобы не сталкиваться с проблемой 3000 неиспользуемых функций в будущем, проанализируем лучшие практики:
Использование расширений: Старайтесь выносить доработки в расширения конфигурации. Это позволит сохранять типовую конфигурацию в чистоте и значительно упростит процесс обновления.
Регулярный рефакторинг: Не оставляйте «хвосты» сразу после того, как функционал стал ненужным. Чистить код по горячим следам гораздо проще, чем пытаться вспомнить назначение процедуры через два года.
Автоматизированное тестирование: Использование инструментов Vanessa-ADD или 1С:Автоматизированное тестирование позволит вам быть уверенными, что удаление очередной «лишней» функции не сломало ключевые бизнес-процессы предприятия.
Заключение: Заниматься чисткой «мертвого» кода стоит не ради мифического прироста скорости в пользовательском режиме, а ради здоровья самой конфигурации и удобства работы программиста. Помните: чистый код — это залог быстрого и безошибочного обновления системы в будущем.