Можно ли удалять пустые процедуры и функции в коде 1С?

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

В процессе разработки или аудита конфигураций 1С разработчики регулярно сталкиваются с процедурами и функциями, не содержащими полезной кодовой нагрузки. Типичный пример — сгенерированный платформой шаблон системного события:


Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
КонецПроцедуры

Возникает закономерный вопрос: стоит ли удалять такие «пустышки», поможет ли это оптимизировать потребление памяти и ускорить выполнение базы, и к каким техническим сбоям может привести их необдуманная зачистка? Проанализируем все аспекты этой проблемы подробно.

Влияют ли пустые методы на производительность и память?

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

  1. Создание фрейма вызова: При обращении к процедуре виртуальная машина платформы выделяет память под передаваемые параметры и стек вызовов. Если пустой метод циклически вызывается миллионы раз при массовой обработке данных или проведении документов, накладные расходы стека могут привести к измеримому падению производительности.
  2. Лишний контекстный переход: Рассмотрим конкретный обработчик ОбработкаПолученияФормы в модуле менеджера. Если процедура присутствует в модуле, платформа обязана выполнить вызов обработчика перед открытием любой формы объекта. При вызове с тонкого клиента это может провоцировать лишнее серверное обращение, тогда как при полном отсутствии метода платформа использует встроенный высокооптимизированный внутренний алгоритм получения стандартной формы.

Однако удаление нескольких сотен пустых процедур в масштабах всей конфигурации само по себе не решит проблем со скоростью работы и не высвободит ощутимый объем оперативной памяти. Оптимизация системы достигается пересмотром алгоритмов работы с СУБД, оптимизацией запросов и сокращением серверных вызовов, а не удалением комментариев и пустых строк кода.

Почему нельзя просто стереть текст процедуры из модуля?

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

  1. Срыв обработчиков событий элементов и объектов: Платформа 1С жестко привязывает имя процедуры к событию в палитре свойств. Если удалить текст процедуры ОбработкаПолученияФормы, но оставить заполненным одноименное свойство в палитре свойств объекта метаданных, при первой же попытке открыть форму приложение упадет с критической ошибкой «Обработчик события не найден». Это же правило распространяется на события управляемых форм (например, ПриСозданииНаСервере, ПриОткрытии).
  2. Нарушение работы подписок на события: Процедура в общем модуле может быть назначена обработчиком для объекта метаданных ПодпискаНаСобытие. Удаление текста процедуры сделает конфигурацию синтаксически невалидной и заблокирует обновление базы данных.
  3. Ограничения синтаксического контроля при динамических вызовах: Стандартная проверка конфигурации на неиспользуемые процедуры не дает стопроцентной гарантии безопасности. Процедура может вызываться неявно, например, через конструкции Выполнить(), Вычислить() или вызовы по имени из внешних систем через COM/HTTP:
    
    Менеджер = ПолучитьМодульМенеджера(ИмяОбъекта);
    Менеджер.ЭкспортнаяПроцедураЗаглушка();
    
    Если такая процедура будет удалена, синтаксический контроль может промолчать, но в рантайме пользователь получит ошибку вызова несуществующего метода.
  4. Конфликты с механизмами расширений: В архитектуре современных конфигураций на базе БСП пустые методы часто служат штатными точками расширения логики. К ним через директивы &Перед, &После или &Вместо могут подключаться методы из установленных расширений. Удаление базового метода приведет к невозможности применить расширение при старте сеанса.

Алгоритм безопасного анализа и удаления пустых обработчиков

Выясним причину появления метода и разберем по шагам правильный алгоритм работы с пустыми процедурами:

  1. Определяем происхождение метода: Если перед нами сгенерированный платформой шаблон вида ОбработкаПолученияФормы, появившийся случайно при клике разработчика на лупу в свойствах метаданных, его действительно стоит удалить, чтобы разгрузить систему от лишних обращений. Если же перед нами процедура из переопределяемого общего модуля БСП, удалять ее категорически нельзя — это часть программного интерфейса, вызываемая ядром системы.
  2. Корректно отвязываем событие в метаданных: Для удаления процедур-обработчиков открываем свойства соответствующего объекта метаданных или элемента формы, находим строку события (например, Обработка получения формы), нажимаем кнопку очистки (крестик) и только после того, как свойство стало пустым, переходим в модуль и удаляем сам текст процедуры.
  3. Выполняем поиск ссылок на метод: Перед удалением любого экспортного метода запускаем глобальный поиск по всей конфигурации (включая имена подписок на события и регламентные задания). Убеждаемся, что метод не используется в качестве обработчика фоновых задач или подписок.

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

← На главную