Задача: При открытии некоторых списков документов в 1С наблюдается постоянная загрузка процессора на уровне 8–10 % даже в режиме простоя и без активных действий в форме. Производительность сервера снижается, система становилась менее отзывчивой.
В ходе анализа было установлено:
Нагрузка проявляется только у пользователей с ролью «Менеджер»;
Неисправность наблюдается в трех формах документов;
У пользователей других ролей формы работают штатно.
Проблема вызвана реализацией процедуры в модуле формы, в которой отсутствует защита от повторных вызовов. Эта процедура отвечает за фильтрацию данных формы по доступным контрагентам для менеджеров. Процедура вызывалась повторно при каждом изменении отбора и обновлении списка. Поскольку в теле процедуры происходит модификация отбора, форма снова вызывала реализацию процедуры, что приводило к бесконечному циклу и постоянной нагрузке на процессор.
Для устранения рекуррентного обновления добавлен логический флаг, контролирующий однократное применение фильтра.
Теперь при первом открытии формы фильтр по контрагентам применяется только один раз, после чего устанавливается флаг, после чего повторные вызовы игнорируются. При ручном изменении контрагента флаг сбрасывается, фильтр обновляется корректно без зацикливания.
Результаты:
● Загрузка ЦП при открытии форм списка снизилась с 8–10 % до < 1 %. ● Обновление форм больше не выполняется циклически. ● Поведение фильтра соответствует изначальной логике.
На схеме отображены изменения, после устранения причины повышения нагрузки на ПК. Изменения протестированы на пользовательских ролях «Менеджер» и «Администратор». Работа форм нормализована, производительность восстановлена.