Можно ли прерывать пересчет итогов в 1С при тестировании и исправлении базы?

Системный администратор IT и автоматизация бизнеса
← На главную

В процессе административного обслуживания информационных баз 1С системные администраторы и разработчики часто сталкиваются с ситуацией, когда регламентная процедура «Тестирование и исправление» (в частности, пункт «Пересчет итогов») затягивается на долгие часы. Возникает логичный вопрос: можно ли принудительно прервать выполнение этой операции в режиме Конфигуратора, если база работает на СУБД SQL, и к каким последствиям это приведет?

Разберем подробнее, как устроен этот процесс на уровне СУБД, чем грозит его остановка и какие существуют альтернативные способы управления итогами в 1С.

Что происходит на уровне СУБД при пересчете итогов

Проанализируем техническую сторону выполнения операции пересчета итогов в клиент-серверном режиме работы 1С:

  1. Порегистровая транзакционность: Платформа 1С:Предприятие при выполнении пересчета итогов создает не одну глобальную монолитную транзакцию на всю информационную базу, а последовательность отдельных транзакций по каждому регистру накопления, сведений или бухгалтерии.
  2. Откат текущей транзакции: При аварийном завершении Конфигуратора, снятии задачи через диспетчер задач или разрыве соединения СУБД автоматически выполняет команду ROLLBACK для текущей незавершенной транзакции. Это означает, что регистр, обработка которого была прервана на середине, вернется к своему исходному состоянию до начала этой конкретной транзакции.
  3. Сохранение физической целостности: Физическое разрушение структуры таблиц СУБД или метаданных при прерывании этой операции не происходит. Таблицы базы данных останутся работоспособными, и вход в информационную базу будет доступен.

Последствия принудительной остановки пересчета

Если прервать процесс выполнения тестирования и исправления на шаге пересчета итогов, мы получим следующие последствия:

  1. Неактуальность итогов: Регистры, по которым платформа успела полностью завершить транзакцию до момента остановки, будут содержать корректные обновленные итоги. Регистры, до которых очередь не дошла, а также регистр, на котором произошел обрыв, останутся со старыми (расходящимися) итогами.
  2. Логическая рассинхронизация: В пользовательском режиме отчеты могут показывать неверные остатки и обороты, если данные берутся из таблиц итогов, которые не успели пересчитаться. На проведение документов задним числом или формирование оперативных остатков это также может оказать негативное влияние.

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

Альтернативные и безопасные варианты выполнения пересчета итогов

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

1. Предварительное обслуживание СУБД

Одной из главных причин долговременного пересчета итогов является устаревшая статистика СУБД и высокая фрагментация индексов. Перед запуском пересчета итогов в Конфигураторе рекомендуется провести техническое обслуживание на стороне SQL-сервера:

  1. Обновить статистику базы данных SQL.
  2. Выполнить дефрагментацию и перестроение (Rebuild / Reorganize) индексов таблиц итогов.

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

2. Использование ограничений по времени в Конфигураторе

В диалоговом окне «Тестирование и исправление» Конфигуратора можно установить параметр таймера «Прервать выполнение проверки через...». В этом случае платформа 1С корректно завершит текущий шаг по истечении заданного времени, штатно выйдет из монопольного режима и сохранит база данных в корректном состоянии.

3. Точечный пересчет в режиме «1С:Предприятие»

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

4. Программный пересчет конкретных регистров

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

Пересчет итогов по конкретному регистру накопления за указанный период:


РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтогиЗаПериод(НачалоПериода, КонецПериода);

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


// Отключаем использование итогов для очистки таблицы
РегистрыНакопления.ВзаиморасчетыСКонтрагентами.УстановитьИспользованиеИтогов(Ложь);

// Включаем обратно — платформа автоматически заново пересчитает итоги только по этому регистру
РегистрыНакопления.ВзаиморасчетыСКонтрагентами.УстановитьИспользованиеИтогов(Истина);

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

← На главную