Оставить заявку

Полный пересчет итогов регистров накопления

Вопрос: почему отчеты формируются долго?

Одной из причин долгого выполнения запросов и формирования отчетов может быть такое состояние регистров накопления, при котором нужно выполнить полный пересчет их итогов. Это обязательное действие зачастую остается вне поля зрения администраторов 1С и баз данных, как следствие, скорость выборки данных может снизиться на порядок.

Как определить, какие регистры требуют пересчета? Чем полный пересчет отличается от типового регламентного задания «Установка периода рассчитанных итогов»? Почему после пересчета скорость работы не вырастет автоматически? Давайте проанализируем все ключевые аспекты этой в действительности непростой задачи.

Зачем нужен полный пересчет итогов?

Регистр накопления хранит движения – детальные записи о фактах хозяйственной жизни с указанием количества, суммы и основных реквизитов события, например, организации, склада, номенклатуры. При этом было бы очень нерационально суммировать все движения с начала времен при построении отчетов, поэтому платформа поддерживает служебные таблицы итогов. В них хранятся заранее просуммированные значения, которые и предоставляются отчетам в готовом виде.

Но есть проблема.

Платформа добавляет запись в таблицу итогов при появлении движения по новой комбинации измерений (организации, складу, номенклатуре), но не удаляет их, когда значения по всем ресурсам (количеству, сумме) становятся равными нулю. Например, организация оприходовала 10 ед. товара и отгрузила его покупателю в полном объеме. Остатка нет, но запись в таблице итогов останется.

Со временем количество лишних записей может превысить количество значимых в 10 раз, соответственно, скорость чтения данных может снизиться на порядок. Отчет, который ранее формировался 5 минут, теперь будет формироваться час.

Полный пересчет итогов – это способ удалить из таблицы итогов лишние записи и вернуть регистр в исходное состояние. В результате мы получим не только быстрое формирование отчетов, но и ускорение проведения с контролем отрицательных остатков, а также снижение количества блокировок.

Как определить, какие регистры требуют пересчета?

В теории определить, какие регистры требуют пересчета, легко. Нужно лишь подсчитать количество лишних и значимых записей в таблице итогов каждого из них и сравнить эти значения между собой. Если лишних хотя бы в полтора раза больше, пора пересчитать, ведь ускорение чтения данных в полтора раза – хороший результат.

А вот на практике сделать это непросто, поскольку в базах большого объема провести такой подсчет средствами 1С попросту не получится.

Необходима разработка скрипта для СУБД, который решит поставленную задачу.

А чем тогда занимается регламентное задание «Установка периода рассчитанных итогов»?

Важно не путать полный пересчет с установкой периода рассчитанных итогов, выполняемой в типовых конфигурациях УТ, КА, ERP и других.

Как мы выяснили, полный пересчет итогов – это операция, при которой платформа заново формирует таблицу итогов на основе движений регистра.

Установка периода рассчитанных итогов – это изменение границы, до которой платформа считает итоги актуальными и готовыми к быстрому использованию. При этом в таблицу итогов будут лишь добавлены записи за очередной истекший месяц.

Почему после пересчета скорость работы не вырастет автоматически?

На первый взгляд кажется, что после пересчета итогов регистр избавится от мусорных записей и начнет выдавать данные с заметно большей скоростью. Но в реальности наблюдается ровно обратная картина: пересчет итогов делает только хуже, отчеты формируются еще дольше, а график скорости чтения с диска начинает напоминать сошедшую с ума кардиограмму.

Почему так?

Потому что есть момент, о котором часто забывают. Полный пересчет итогов сам по себе фрагментирует индексы и сбрасывает статистику, по этой причине СУБД начинает строить неоптимальные планы запросов, что и приводит к замедлению работы.

После пересчета итогов необходимо выполнить обслуживание базы данных в СУБД.

Как автоматизировать решение этой проблемы?

Нашими экспертами разработано готовое решение, которое позволяет полностью автоматизировать выполнение всех необходимых действий:
  • СУБД определит список регистров, требующих пересчета (порог процента лишних записей задается), и поставит 1С задачу на пересчет;
  • 1С выполнит эту задачу (расписание задается) и вернет информацию о завершении пересчета определенных регистров;
  • СУБД выполнит обслуживание таблиц для восстановления производительности.

После этого будет наблюдаться заметное повышение скорости работы системы.

К списку статей