Администрирование · 11 мин
Как ускорить пересчет итогов в 1С
Разбираем, почему пересчет итогов занимает часы, и как ускорить его: режимы итогов, настройка СУБД, планирование операций и типичные ошибки администраторов.
Пересчет итогов — одна из самых тяжелых операций в 1С: платформа пересчитывает остатки по регистрам накопления и бухгалтерии, и на больших базах это занимает от десятков минут до нескольких часов, блокируя работу пользователей. Ускорить процесс можно на нескольких уровнях: настройкой самой конфигурации, параметрами СУБД, грамотным планированием операции и отказом от лишней работы.
Прежде чем что-то менять, важно понять, какой именно пересчет тормозит: штатное обновление итогов при проведении документов, полный пересчет итогов из режима «Управление итогами» или восстановление последовательностей. Причины медленной работы и способы ускорения у них разные, и универсального рецепта нет.
Ниже разобраны практические приёмы для файловых и клиент-серверных баз. Большинство рекомендаций применимы администратором без доработки конфигурации, но часть операций требует монопольного доступа и обязательной резервной копии.
Почему пересчет итогов выполняется долго
Итоги в 1С хранятся в отдельных таблицах: для регистров накопления это остатки на конец каждого месяца, для регистров бухгалтерии — остатки и обороты по счетам и субконто. При пересчете платформа читает все движения за выбранный период и заново агрегирует их. Чем больше документов, измерений и периодов, тем дольше операция.
Типичные причины медленного пересчета: большой объем движений (миллионы записей в таблицах регистров), фрагментированные или устаревшие индексы СУБД, недостаток оперативной памяти на сервере, включенные итоги по измерениям, которые никто не использует в отчетах, и параллельная работа пользователей, создающая блокировки.
В файловом режиме ситуация усугубляется тем, что вся база — один файл, и пересчет итогов фактически переписывает значительную его часть. Если база лежит на сетевом диске, скорость падает в разы по сравнению с локальным диском.
Проверьте число записей в регистрах и список включенных итогов по измерениям
Проверьте активные сеансы и журнал блокировок СУБД
Проверьте фрагментацию индексов, статистику и скорость дисковой подсистемы
Сократите объем пересчитываемых итогов
Самый эффективный способ ускорения — пересчитывать меньше. В режиме «Операции → Управление итогами» (в типовых конфигурациях) можно задать период, по который рассчитываются итоги. Если проблема возникла в текущем квартале, нет смысла пересчитывать итоги за пять лет: ограничьте период датой, начиная с которой данные могли измениться.
Отключите неиспользуемые итоги по измерениям
Для регистров бухгалтерии платформа хранит итоги по каждой комбинации счетов и субконто, для которых включен расчет. Если по какому-то измерению итоги не используются в отчетах и запросах, их хранение — чистые накладные расходы при каждом проведении документа и при пересчете. Ревизию состава итогов стоит проводить вместе с тем, кто знает, какие отчеты реально используются.
Используйте разделение итогов
В клиент-серверном режиме платформа поддерживает разделение итогов регистров накопления: текущие итоги хранятся отдельно от исторических, что ускоряет запись движений и уменьшает блокировки. Режим включается в свойствах регистра в конфигураторе. Это не ускоряет сам полный пересчет, но снижает потребность в нём и ускоряет ежедневную работу.
Настройте СУБД перед пересчетом
На клиент-серверных базах (MS SQL Server, PostgreSQL) значительная часть времени пересчета уходит на работу СУБД. Перед массовым пересчетом полезно выполнить обновление статистики и дефрагментацию (ребилд) индексов по таблицам регистров — после этого планы запросов становятся точнее, а чтение данных быстрее.
Для MS SQL проверьте, что базе выделено достаточно памяти (параметр max server memory), а tempdb размещена на быстром диске — при агрегации больших выборок активно используются временные таблицы. Для PostgreSQL аналогичную роль играют параметры shared_buffers и work_mem, а также регулярный VACUUM ANALYZE.
-- MS SQL: обновление статистики и перестроение индексов по базе
EXEC sp_MSforeachtable 'UPDATE STATISTICS ? WITH FULLSCAN';
EXEC sp_MSforeachtable 'ALTER INDEX ALL ON ? REBUILD';Эти операции сами по себе ресурсоемкие, поэтому выполняйте их в нерабочее время и не запускайте одновременно с пересчетом итогов. На файловых базах аналогом служит тестирование и исправление с включенной реиндексацией, но его следует делать только после резервного копирования.
Планируйте операцию и исключайте блокировки
Полный пересчет итогов требует монопольного доступа к базе или как минимум отсутствия активных транзакций по затрагиваемым регистрам. Попытка пересчитать итоги в разгар рабочего дня приводит к ожиданиям на блокировках: операция либо растягивается, либо завершается ошибкой.
- 1Сделайте полную резервную копию базы и проверьте, что она восстанавливается
- 2Завершите сеансы пользователей и отключите регламентные задания на время операции
- 3Обновите статистику и перестройте индексы по таблицам регистров
- 4Запустите пересчет итогов с ограничением периода — только с даты возможных изменений
- 5После завершения проверьте остатки по контрольным отчетам и верните пользователей в базу
Практический приём для больших баз: пересчитывать итоги помесячно, а не одним диапазоном за несколько лет. Последовательность коротких операций проще контролировать, при сбое не теряется весь прогресс, а пиковая нагрузка на СУБД ниже.
Если база работает в файловом режиме и пересчет регулярно занимает часы, рассмотрите переход на клиент-серверный вариант — это самое радикальное ускорение для крупных баз, хотя и требует затрат на сервер и лицензии СУБД.
Альтернативы полному пересчету
Часто полный пересчет запускают «на всякий случай», хотя задачу можно решить точечно. Если расхождение остатков обнаружено по конкретному регистру и периоду, достаточно пересчитать итоги только по нему. Если проблема в том, что отчет показывает неверные остатки из-за сбойного документа, иногда быстрее перепровести документы за период, чем пересчитывать итоги.
Сравнение вариантов
Гарантированно исправляет все расхождения, но самый долгий; оправдан после сбоев, обменов и массовых загрузок
В разы быстрее; подходит, когда известна дата, начиная с которой данные могли измениться
Исправляет движения и итоги одновременно, но опасно при наличии ручных корректировок и закрытых периодов
Нужно при нарушенном порядке проведения; не заменяет пересчет итогов, но часто выполняется вместе с ним
Для регламентной профилактики вместо частых полных пересчетов полезнее следить за актуальностью итогов: хранить итоги только до нужного периода (сдвигать период рассчитанных итогов вперед после закрытия месяца) и не допускать сбоев, которые эти пересчеты вызывают, — некорректных обменов, прямой записи в регистры и аварийных завершений.
Риски и границы самостоятельной работы
Не меняйте параметры СУБД, если не понимаете их влияния: чрезмерное выделение памяти под SQL Server может «задушить» операционную систему и сервер 1С на той же машине, а агрессивные настройки PostgreSQL без тестирования способны ухудшить общую производительность. Сомнительные изменения проверяйте сначала на копии базы.
Как проверить результат
После пересчета сверьте остатки по ключевым регистрам с эталонными значениями: сальдо по основным счетам, остатки по складам и взаиморасчетам. Контрольные цифры зафиксируйте до начала операции, чтобы было с чем сравнивать.
Как проверить результат
Совпадают со значениями, зафиксированными до пересчета (или расхождения объяснимы)
Остатки изменились без причины или обнулились
Пересчет укладывается в окно технического обслуживания
Операция не завершилась за ночь — нужно сокращать период или заниматься СУБД
Отчеты по остаткам формируются быстро и без ошибок
Ошибки при обращении к итогам, отчеты показывают пустые данные
Что важно запомнить
Главные резервы ускорения — меньший объем пересчета, обслуживание СУБД и выполнение операции без пользователей. Полный пересчет за все годы нужен редко; почти всегда достаточно точечного пересчета с даты возможных изменений. Перед любыми действиями — резервная копия.
Частые вопросы
Как часто нужно делать полный пересчет итогов?
При штатной работе базы полный пересчет не нужен вообще — итоги поддерживаются автоматически при проведении документов. Он требуется после сбоев: аварийного завершения, ошибок обмена, прямой записи в регистры, подозрений на расхождение остатков. Регулярная «профилактика» полным пересчетом — признак того, что где-то есть источник сбоев, который стоит найти и устранить.
Ускорит ли пересчет переход с файловой базы на клиент-серверную?
Да, для крупных баз переход обычно даёт кратное ускорение: СУБД эффективнее работает с большими таблицами, поддерживает параллельные запросы и не переписывает файл целиком. Но выигрыш зависит от настройки сервера — неправильно сконфигурированная СУБД может работать не быстрее файлового режима.
Можно ли прервать пересчет итогов, если он идёт слишком долго?
Штатного «отката» у операции нет. Принудительное завершение сеанса или перезапуск сервера СУБД во время пересчета рискованно: транзакция откатится, но при аварийном прерывании возможны повреждения. Безопаснее дождаться завершения, а на будущее — сокращать период пересчета и выполнять его порциями.
Почему после пересчета итогов отчет стал показывать другие цифры?
Это нормально, если до пересчета итоги были повреждены — отчет теперь показывает корректные значения, рассчитанные по фактическим движениям. Если же изменения неожиданны, сравните остатки с резервной копией: возможно, расхождение было вызвано не сбоем итогов, а ошибкой в самих движениях документов.
Влияет ли сдвиг периода рассчитанных итогов на скорость?
Да. Если итоги рассчитаны начиная с глубокой даты, платформа хранит и обновляет больше данных. После закрытия периода имеет смысл сдвигать границу рассчитанных итогов вперед — это уменьшает объем хранимых итогов и ускоряет операции с регистрами. Делать это следует только после того, как период закрыт и отчетность по нему сдана.
Что делать, если пересчет завершается ошибкой блокировок даже ночью?
Проверьте регламентные и фоновые задания: обмены, расчет себестоимости, обновление индексов полнотекстового поиска могут выполняться ночью и держать блокировки на регистрах. Отключите задания на время пересчета через консоль заданий или настройте расписание так, чтобы тяжелые операции не пересекались.