К статье
Практический материал

Администрирование · 11 мин

Как ускорить пересчет итогов в 1С

Разбираем, почему пересчет итогов занимает часы, и как ускорить его: режимы итогов, настройка СУБД, планирование операций и типичные ошибки администраторов.

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

Прежде чем что-то менять, важно понять, какой именно пересчет тормозит: штатное обновление итогов при проведении документов, полный пересчет итогов из режима «Управление итогами» или восстановление последовательностей. Причины медленной работы и способы ускорения у них разные, и универсального рецепта нет.

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

Почему пересчет итогов выполняется долго

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

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

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

Пересчет идёт часамиБольшой объем движений или лишние итоги

Проверьте число записей в регистрах и список включенных итогов по измерениям

Тормозит только в рабочее времяБлокировки от пользователей

Проверьте активные сеансы и журнал блокировок СУБД

Медленно даже ночьюПроблемы СУБД или дисков

Проверьте фрагментацию индексов, статистику и скорость дисковой подсистемы

Сократите объем пересчитываемых итогов

Самый эффективный способ ускорения — пересчитывать меньше. В режиме «Операции → Управление итогами» (в типовых конфигурациях) можно задать период, по который рассчитываются итоги. Если проблема возникла в текущем квартале, нет смысла пересчитывать итоги за пять лет: ограничьте период датой, начиная с которой данные могли измениться.

Отключите неиспользуемые итоги по измерениям

Для регистров бухгалтерии платформа хранит итоги по каждой комбинации счетов и субконто, для которых включен расчет. Если по какому-то измерению итоги не используются в отчетах и запросах, их хранение — чистые накладные расходы при каждом проведении документа и при пересчете. Ревизию состава итогов стоит проводить вместе с тем, кто знает, какие отчеты реально используются.

Используйте разделение итогов

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

Настройте СУБД перед пересчетом

На клиент-серверных базах (MS SQL Server, PostgreSQL) значительная часть времени пересчета уходит на работу СУБД. Перед массовым пересчетом полезно выполнить обновление статистики и дефрагментацию (ребилд) индексов по таблицам регистров — после этого планы запросов становятся точнее, а чтение данных быстрее.

Для MS SQL проверьте, что базе выделено достаточно памяти (параметр max server memory), а tempdb размещена на быстром диске — при агрегации больших выборок активно используются временные таблицы. Для PostgreSQL аналогичную роль играют параметры shared_buffers и work_mem, а также регулярный VACUUM ANALYZE.

sql
-- MS SQL: обновление статистики и перестроение индексов по базе
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN';
EXEC sp_MSforeachtable 'ALTER INDEX ALL ON ? REBUILD';

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

Планируйте операцию и исключайте блокировки

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

Порядок действий
  1. 1
    Сделайте полную резервную копию базы и проверьте, что она восстанавливается
  2. 2
    Завершите сеансы пользователей и отключите регламентные задания на время операции
  3. 3
    Обновите статистику и перестройте индексы по таблицам регистров
  4. 4
    Запустите пересчет итогов с ограничением периода — только с даты возможных изменений
  5. 5
    После завершения проверьте остатки по контрольным отчетам и верните пользователей в базу

Практический приём для больших баз: пересчитывать итоги помесячно, а не одним диапазоном за несколько лет. Последовательность коротких операций проще контролировать, при сбое не теряется весь прогресс, а пиковая нагрузка на СУБД ниже.

Если база работает в файловом режиме и пересчет регулярно занимает часы, рассмотрите переход на клиент-серверный вариант — это самое радикальное ускорение для крупных баз, хотя и требует затрат на сервер и лицензии СУБД.

Альтернативы полному пересчету

Часто полный пересчет запускают «на всякий случай», хотя задачу можно решить точечно. Если расхождение остатков обнаружено по конкретному регистру и периоду, достаточно пересчитать итоги только по нему. Если проблема в том, что отчет показывает неверные остатки из-за сбойного документа, иногда быстрее перепровести документы за период, чем пересчитывать итоги.

Сравнение вариантов

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

Гарантированно исправляет все расхождения, но самый долгий; оправдан после сбоев, обменов и массовых загрузок

Пересчет за ограниченный период

В разы быстрее; подходит, когда известна дата, начиная с которой данные могли измениться

Перепроведение документов

Исправляет движения и итоги одновременно, но опасно при наличии ручных корректировок и закрытых периодов

Восстановление последовательностей

Нужно при нарушенном порядке проведения; не заменяет пересчет итогов, но часто выполняется вместе с ним

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

Риски и границы самостоятельной работы

Не меняйте параметры СУБД, если не понимаете их влияния: чрезмерное выделение памяти под SQL Server может «задушить» операционную систему и сервер 1С на той же машине, а агрессивные настройки PostgreSQL без тестирования способны ухудшить общую производительность. Сомнительные изменения проверяйте сначала на копии базы.

Типичные ошибки
01
Пересчет итогов «за всё время существования базы» — операция длится часами, хотя проблема была в последнем месяце
02
Запуск пересчета при работающих пользователях — взаимные блокировки, ошибки и откат транзакций
03
Перепроведение документов вместо пересчета итогов в закрытом периоде — изменяются данные прошлых отчетов
04
Пренебрежение обслуживанием СУБД — статистика устарела, индексы фрагментированы, и любой пересчет идёт медленно
05
Хранение итогов по всем измерениям «про запас» — замедляется каждое проведение документа, а не только пересчет

Как проверить результат

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

Контрольные точки

Как проверить результат

Остатки по контрольным отчетам
Норма

Совпадают со значениями, зафиксированными до пересчета (или расхождения объяснимы)

Тревожный признак

Остатки изменились без причины или обнулились

Время операции
Норма

Пересчет укладывается в окно технического обслуживания

Тревожный признак

Операция не завершилась за ночь — нужно сокращать период или заниматься СУБД

Работа пользователей после пересчета
Норма

Отчеты по остаткам формируются быстро и без ошибок

Тревожный признак

Ошибки при обращении к итогам, отчеты показывают пустые данные

Итог

Что важно запомнить

Главные резервы ускорения — меньший объем пересчета, обслуживание СУБД и выполнение операции без пользователей. Полный пересчет за все годы нужен редко; почти всегда достаточно точечного пересчета с даты возможных изменений. Перед любыми действиями — резервная копия.

Частые вопросы

Как часто нужно делать полный пересчет итогов?

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

Ускорит ли пересчет переход с файловой базы на клиент-серверную?

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

Можно ли прервать пересчет итогов, если он идёт слишком долго?

Штатного «отката» у операции нет. Принудительное завершение сеанса или перезапуск сервера СУБД во время пересчета рискованно: транзакция откатится, но при аварийном прерывании возможны повреждения. Безопаснее дождаться завершения, а на будущее — сокращать период пересчета и выполнять его порциями.

Почему после пересчета итогов отчет стал показывать другие цифры?

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

Влияет ли сдвиг периода рассчитанных итогов на скорость?

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

Что делать, если пересчет завершается ошибкой блокировок даже ночью?

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