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