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