При работе с конфигурацией «Зарплата и управление персоналом 3.1» программисты часто сталкиваются с тем, что стандартные операции отладки, такие как замер производительности, выполняются крайне медленно. Ситуация, когда сам расчет документа занимает пару секунд, а таблица замера в Конфигураторе открывается минуту или дольше, является типичной для этой конфигурации. В этой статье мы разберем технические причины такого поведения системы, проанализируем влияние аппаратной части и рассмотрим способы оптимизации процесса отладки.
Разберем ситуацию на примере документа БольничныйЛист. Типичный замер расчета и проведения этого документа генерирует от 20 000 до 35 000 строк исполняемого кода. Скорость отображения этих данных в Конфигураторе зависит от нескольких ключевых факторов:
Проанализируем, что происходит «под капотом» во время замера. При нажатии кнопки «Стоп» в замере производительности Конфигуратор считывает временный файл с данными (обычно это файлы с расширением .prm в папке %TEMP%). Если дисковая подсистема работает медленно (используется HDD или медленный сетевой диск), чтение этого файла станет узким местом.
Кроме того, важную роль играет антивирусное программное обеспечение. Часто антивирусы блокируют или сканируют временные файлы, создаваемые 1С, в режиме реального времени. Поскольку файл замера может быть достаточно объемным, его проверка существенно затягивает открытие таблицы в Конфигураторе.
Выясним, почему именно в ЗУП 3.1 замеры получаются такими «тяжелыми». Документ БольничныйЛист инициирует сложную цепочку вызовов:
Перерасчеты. При проведении система проверяет необходимость корректировки прошлых периодов, что влечет за собой выполнение тяжелых запросов и обработку больших массивов данных в коде.Чтобы сократить время ожидания и сделать работу более комфортной, рассмотрим следующие шаги:
Вместо того чтобы включать замер на всю операцию (открытие формы, расчет, проведение), попробуйте программно ограничивать область замера. Для этого используйте встроенную функцию УстановитьИспользованиеЗамераПроизводительности(). Это позволит отсечь лишний код инициализации формы и сосредоточиться только на проблемном участке.
Пример использования в коде:
// Отключаем общий замер, если он был включен вручную
УстановитьИспользованиеЗамераПроизводительности(Ложь);
// Выполняем подготовительные действия
Объект.ЗаполнитьДанные();
// Включаем замер только для целевой процедуры
УстановитьИспользованиеЗамераПроизводительности(Истина);
ПроведениеСервер.ВыполнитьПроведение(ЭтотОбъект);
УстановитьИспользованиеЗамераПроизводительности(Ложь);
Для эффективной работы разработчика 1С (особенно с тяжелыми конфигурациями вроде ЗУП 3.1 или ERP) требования к «железу» должны быть следующими:
Если вам нужно замерить конкретно процедуру проведения, попробуйте предварительно отключить в настройках расчета зарплаты флаг «Выполнять автоматический пересчет документов при редактировании». Это уменьшит количество «шума» в замере, так как система не будет пытаться пересчитывать все связанные показатели при каждом изменении данных объекта.
Регулярно очищайте папку временных файлов пользователя (%TEMP%) и кэш конфигурации. Накопление старых временных файлов может замедлять создание и чтение новых файлов замера производительности.
Рассмотренные ситуации показывают, что время открытия замера в 30-60 секунд для ЗУП 3.1 при 20-30 тысячах строк кода является условно нормальным для среднего оборудования. Однако, следуя приведенным выше рекомендациям по оптимизации кода и настройке окружения, этот показатель можно значительно улучшить, повысив эффективность разработки и отладки.