Проблема медленной работы отчета «Книга продаж» в конфигурации «Управление производственным предприятием» (УПП) редакции 1.3 — одна из самых частых жалоб бухгалтеров и системных администраторов, особенно в периоды сдачи отчетности по НДС. Когда объем данных в базе растет, типовые механизмы сбора данных могут перестать справляться с нагрузкой. Разберем ситуацию, когда отчет на 50 000 строк формируется около 40 минут, и выясним, как можно сократить это время до приемлемых показателей.
Для начала проанализируем имеющиеся данные. Если в вашей информационной базе книга продаж на 2 500 строк формируется менее чем за минуту, а при увеличении объема до 50 000 строк время возрастает до 40 минут и более — это явный признак нелинейной деградации производительности. В норме, даже при больших объемах данных, хорошо оптимизированная система должна выдавать результат по такому количеству строк в пределах 10–15 минут. Время ожидания в 40 минут говорит о наличии «узких мест» в коде запроса или проблемах на уровне SQL-сервера.
Прежде чем что-то исправлять, нам необходимо точно определить, где именно «застревает» система. Для этого воспользуемся встроенным инструментом 1С:Предприятие. Проанализируем алгоритм действий:
В результате мы получим таблицу с указанием строк кода, выполнение которых заняло больше всего времени. В случае с книгой продаж в УПП 1.3 основной «виновник» почти всегда находится в ОбщемМодуле или в модуле объекта самого отчета, где происходит выполнение сложного запроса к регистру накопления НДСПродажи. Рассмотрим подробнее, на что именно стоит обратить внимание в результатах замера.
Типовой запрос книги продаж в УПП 1.3 содержит множество соединений и вложенных условий, которые учитывают особенности законодательства (авансы, восстановление НДС, корректировки). Проанализируем основные причины замедления на уровне кода:
Использование виртуальных таблиц: Часто система обращается к виртуальным таблицам остатков и оборотов внутри циклов или в сложных соединениях. Если запрос выполняется долго, попробуем заменить обращение к виртуальным таблицам на предварительную выгрузку данных во временные таблицы с обязательным индексированием по ключевым полям (например, по полю Организация или СчетФактура).
Пример оптимизации структуры запроса может выглядеть так:
// Вместо обращения к виртуальной таблице в основном запросе
// Создаем временную таблицу с фильтрами
Запрос.Текст = "ВЫБРАТЬ
| НДСПродажиОбороты.СчетФактура,
| НДСПродажиОбороты.СуммаБезНДСОб canОборот,
| НДСПродажиОбороты.НДСОбcanОборот
|ПОМЕСТИТЬ ВТ_ДанныеПродаж
|ИЗ
| РегистрНакопления.НДСПродажи.Обороты(&НачалоПериода, &КонецПериода, , Организация = &Организация) КАК НДСПродажиОбороты
|ИНДЕКСИРОВАТЬ ПО
| СчетФактура";
Проблема TempDB: При формировании отчета на 50 000 строк 1С создает огромные временные таблицы на стороне SQL-сервера. Если дисковая подсистема, где расположена база tempdb, медленная, это станет критическим фактором. Проверим настройки SQL-сервера и убедимся, что временная база данных вынесена на быстрые SSD-диски.
Если код не менялся, но отчет стал работать медленнее, выясним причину на уровне базы данных. В процессе работы (удаление, перепроведение документов) индексы в регистрах НДС становятся фрагментированными, а статистика распределения данных — неактуальной. В этом случае оптимизатор SQL-запросов выбирает неверный план выполнения, что приводит к колоссальным задержкам.
Рекомендуемые действия для системного администратора:
НДСПродажи, НДСПокупки и их итогов.DBCC FREEPROCCACHE), чтобы SQL-сервер заново построил планы запросов на основе свежей статистики.Посмотрим на ситуацию со стороны прав доступа. Если отчет запускает пользователь с ограниченными правами (например, только по определенным организациям), включается механизм RLS. Это добавляет к каждому запросу в отчете дополнительные подзапросы для проверки прав доступа. На больших объемах данных это может замедлить формирование отчета в 2–5 раз.
Чтобы проверить, является ли RLS причиной торможения, попробуем сформировать отчет под пользователем с полными правами. Если время сократится до нескольких минут — значит, необходимо оптимизировать настройки доступа или использовать механизм ПривилегированныйРежим при сборе данных для отчета.
Подводя итог, разберем по шагам, что нужно сделать, чтобы ускорить книгу продаж в УПП 1.3:
Помните, что в УПП 1.3 механизмы НДС достаточно тяжеловесные, и регулярное техническое обслуживание базы данных — залог стабильной работы таких сложных отчетов, как Книга продаж.