Как исправить ошибку «Использование итогов выключено» при запуске и обновлении 1С:Предприятие?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Выясняем причину: почему отключаются итоги и зависает система?

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

Когда в информационную базу выполняется массовая загрузка данных (например, через распределенные информационные базы (РИБ), универсальный обмен данными XML, загрузку из облачных сервисов или распределенные базы данных), запись миллионов строк может занять долгие часы. Чтобы ускорить этот процесс, разработчики 1С на уровне платформы отключают пересчет итогов с помощью вызова метода УстановитьИспользованиеИтогов(Ложь). Это позволяет СУБД не тратить ресурсы на пересчет остатков при проведении каждого документа во время импорта.

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

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


Способ 1. Восстановление итогов через «Тестирование и исправление» (Самый надежный способ)

Если база данных не запускается в режиме «1С:Предприятие» и вылетает при обновлении, этот метод является приоритетным. Нам не потребуется вносить изменения в конфигурацию или снимать ее с поддержки.

Рассмотрим пошагово, как выполнить эту процедуру:

  1. Запустите базу данных 1С в режиме Конфигуратор.
  2. Перед началом любых манипуляций обязательно создайте резервную копию базы данных. Для этого перейдите в меню Администрирование -> Выгрузить информационную базу... и сохраните файл .dt в безопасное место.
  3. Перейдите в главное меню и выберите пункт Администрирование -> Тестирование и исправление....
  4. В открывшемся диалоговом окне параметров тестирования снимите флажки со всех пунктов, кроме одного: «Пересчет итогов». Нам не нужно тратить время на проверку ссылочной целостности или реиндексацию таблиц.
  5. В блоке «При наличии ошибок» установите переключатели в положение «Не изменять» (или оставьте значения по умолчанию).
  6. Нажмите кнопку «Выполнить».

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


Способ 2. Программное включение итогов при начале работы системы

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

Давайте проанализируем, как реализовать данный подход. Нам потребуется временно внедрить код в модуль управляемого приложения (или в обработчик события ПриНачалеРаботыСистемы).

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


Процедура ВключитьИтогиПринудительно() Экспорт

    // Обработка регистров накопления
    Для Каждого Рег Из РегистрыНакопления Цикл
        Попытка
            Если Не Рег.ПолучитьИспользованиеИтогов() Тогда
                Рег.УстановитьИспользованиеИтогов(Истина);
                ЗаписьЖурналаРегистрации("ВключениеИтогов", УровеньЖурналаРегистрации.Информация, , , 
                    "Включено использование итогов для регистра накопления: " + Рег);
            КонецЕсли;
        Исключение
            ЗаписьЖурналаРегистрации("ВключениеИтогов", УровеньЖурналаРегистрации.Ошибка, , , 
                "Не удалось включить итоги для регистра накопления: " + Рег + ". Ошибка: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;

    // Обработка регистров бухгалтерии
    Для Каждого Рег Из РегистрыБухгалтерии Цикл
        Попытка
            Если Не Рег.ПолучитьИспользованиеИтогов() Тогда
                Рег.УстановитьИспользованиеИтогов(Истина);
                ЗаписьЖурналаРегистрации("ВключениеИтогов", УровеньЖурналаРегистрации.Информация, , , 
                    "Включено использование итогов для регистра бухгалтерии: " + Рег);
            КонецЕсли;
        Исключение
            ЗаписьЖурналаРегистрации("ВключениеИтогов", УровеньЖурналаРегистрации.Ошибка, , , 
                "Не удалось включить итоги для регистра бухгалтерии: " + Рег + ". Ошибка: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;

КонецПроцедуры

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


Способ 3. Использование внешнего COM-соединения (Для администраторов)

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

Для реализации этого метода мы можем запустить другую (соседнюю) рабочую базу 1С и выполнить в ней обработку со следующим кодом подключения к проблемной базе:


Процедура ПодключитьсяИВключитьИтоги()

    ПараметрыПодключения = "Srvr=""ИмяСервера"";Ref=""ИмяБазы"";Usr=""Администратор"";Pwd=""Пароль"";";
    
    Попытка
        Connector = Новый COMОбъект("V83.COMConnector");
        Соединение = Connector.Connect(ПараметрыПодключения);
        
        // Включаем итоги для регистров накопления через COM
        Для Каждого Рег Из Соединение.РегистрыНакопления Цикл
            Если Не Рег.ПолучитьИспользованиеИтогов() Тогда
                Рег.УстановитьИспользованиеИтогов(Истина);
            КонецЕсли;
        КонецЦикла;
        
        // Включаем итоги для регистров бухгалтерии через COM
        Для Каждого Рег Из Соединение.РегистрыБухгалтерии Цикл
            If Не Рег.ПолучитьИспользованиеИтогов() Тогда
                Рег.УстановитьИспользованиеИтогов(Истина);
            КонецЕсли;
        КонецЦикла;
        
        Предупреждение("Итоги успешно включены через COM-соединение!");
    Исключение
        Предупреждение("Ошибка подключения: " + ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

Этот скрипт мгновенно включает флаги использования итогов на уровне базы данных СУБД, после чего вы сможете запустить штатное обновление в режиме «1С:Предприятие» без каких-либо ошибок.


Способ 4. Стандартная обработка «Управление итогами»

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

Выполним следующие шаги:

  1. Откройте главное меню программы и перейдите в раздел «Функции для технического специалиста» (в старых версиях платформы данный пункт назывался «Все функции»). Если этот пункт меню недоступен, включите его отображение через Настройки -> Параметры -> флажок «Режим технического специалиста».
  2. Разверните ветку «Стандартные» и выберите обработку «Управление итогами».
  3. В открывшейся таблице вы увидите список всех регистров накопления и бухгалтерии вашей базы данных. Обратите внимание на колонку состояния итогов.
  4. Выделите строки с отключенными итогами и нажмите на верхней панели кнопку «Включить использование итогов».
  5. Дополнительно рекомендуется нажать кнопку «Установить период рассчитанных итогов» и задать актуальную дату (обычно это конец текущего или следующего месяца), чтобы СУБД оптимизировала таблицы остатков.

Способ 5. Сброс флагов через обработку «Выгрузка и загрузка данных XML»

Если у вас под рукой есть стандартная сервисная обработка от фирмы 1С ВыгрузкаЗагрузкаДанныхXML.epf (её можно скачать с портала ИТС), в ней заложен скрытый, но очень полезный функционал:

  1. Запустите обработку в любой аналогичной рабочей базе данных.
  2. Перейдите на вкладку «Загрузка».
  3. Обратите внимание на сервисную кнопку «Включить итоги», расположенную в нижней части формы.
  4. Данная кнопка принудительно посылает команду СУБД на включение использования итогов для всех существующих в конфигурации регистров. При этом выполнять саму выгрузку или загрузку файлов XML не требуется.

Резюме и рекомендации

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

Чтобы минимизировать риски возникновения таких ситуаций в будущем, рекомендуем придерживаться простых правил:

← На главную