Работа с крупными базами данных (от 100 ГБ и выше) в 1С:Предприятие 8.3 накладывает определенные ограничения на стандартные процедуры обслуживания. Одной из самых неприятных ситуаций является расхождение данных в отчете Оборотно-сальдовая ведомость (ОСВ). При этом часто наблюдается странный эффект: при разворачивании копии базы данных на другом сервере или локально отчет строится верно, а в рабочей базе — с ошибками. Разберем детально, как решить эту проблему, не прибегая к многочасовому (или даже многодневному) полному циклу «Тестирования и исправления».
Прежде чем переходить к действиям, проанализируем ситуацию. В 1С данные хранятся в двух видах таблиц: таблицы движений (записи регистра бухгалтерии) и таблицы итогов (предварительно рассчитанные остатки и обороты по месяцам). Отчеты типа ОСВ для ускорения работы обращаются именно к таблицам итогов. Если в процессе работы произошел сбой (некорректное завершение транзакции, ошибка SQL-сервера или программный сбой платформы), записи в таблицах движений могут не совпасть с записями в итогах.
Тот факт, что в копии базы все отображается корректно, чаще всего указывает на одну из двух причин: либо при создании копии произошел естественный пересчет индексов и кэша, либо проблема кроется в серверном кэше или статистике SQL-оптимизатора в рабочей среде.
Многие технические специалисты опасаются запускать «Тестирование и исправление» (ТиИ) на базах объемом 100+ ГБ, так как полная проверка логической и ссылочной целостности может занять слишком много времени. Однако, как правильно заметили участники обсуждения, нам не обязательно запускать все проверки сразу.
Рассмотрим пошагово, как выполнить только нужную операцию:
Почему это помогает? Данная операция полностью очищает таблицы итогов и заново заполняет их на основании физических записей регистра бухгалтерии Хозрасчетный. Это гарантированный способ вернуть актуальность отчету ОСВ.
Если мы не хотим заходить в конфигуратор или монопольный режим затруднителен, рассмотрим возможность использования стандартной обработки «Управление итогами». Она доступна в режиме «1С:Предприятие».
Выполним следующие действия:
Регистр бухгалтерии (Хозрасчетный).Выясним причину, почему в копии данные верны, а в рабочей — нет. Очень часто виноват кэш сервера 1С. Рассмотрим алгоритм его очистки для сервера на базе Windows:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo\reg_1541.snaccfg и workdir..lst трогать не нужно).После этой процедуры при первом формировании ОСВ система может «задуматься» чуть дольше обычного, так как будет формировать новый кэш метаданных, но данные в отчете с большой вероятностью станут корректными.
Если база данных находится на SQL-сервере, проблема может быть связана с деградацией индексов или устаревшей статистикой. Проанализируем ситуацию: SQL-сервер строит план запроса на основе статистики. Если она «врет», сервер может пропустить часть записей при выборке для ОСВ.
Рекомендуем выполнить следующий скрипт в SQL Server Management Studio для конкретной базы:
-- Обновление статистики для всей базы
EXEC sp_updatestats;
-- Перестройка индексов для таблиц итогов регистра бухгалтерии
-- Замените _AccTotals... на реальное имя таблицы из вашей структуры
DBCC DBREINDEX ('_AccTotals123');
Важно помнить, что имена таблиц в SQL (например, _AccTotals63) уникальны для каждой конфигурации. Найти их можно через запрос к таблице Params или используя обработку «Структура хранения данных».
Существует «радикальный» способ, который часто оказывается быстрее ТиИ на огромных объемах данных. Мы можем принудительно отключить использование итогов и включить его обратно. При включении система будет обязана пересчитать их с нуля.
Для этого можно создать внешнюю обработку и выполнить следующий код:
Процедура ПересчитатьИтогиПрограммно()
// Отключаем использование итогов для регистра бухгалтерии
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Ложь);
// Сразу включаем обратно - это инициирует фоновый или явный пересчет
РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Истина);
Сообщить("Процесс пересчета итогов запущен.");
КонецПроцедуры
Важный нюанс: на платформе 8.3 включение итогов может происходить в фоновом режиме. Нужно дождаться завершения фонового задания, прежде чем проверять результат в ОСВ.
Для базы объемом 100 ГБ самым правильным и безопасным алгоритмом действий будет:
_AccTotals.Помните, что некорректные обороты в ОСВ — это критическая ошибка для бухгалтерского учета, поэтому затягивать с ее решением не стоит, даже если ТиИ требует значительного времени.