При восстановлении базы данных после аварийного завершения работы или сбоя оборудования можно столкнуться с аномальным поведением: физически записи в таблице движений регистра накопления в MS SQL Server присутствуют (включая флаг активности _Active = 0x1), но при выполнении запросов из платформы 1С выборка возвращает только данные за самый последний период или не возвращает их вовсе.
Разберем подробно причины такого поведения системы и рассмотрим пошаговый алгоритм устранения проблемы.
Проанализируем архитектуру взаимодействия платформы 1С с СУБД. При формировании запросов к виртуальным или физическим таблицам регистров платформа не всегда выполняет полное сканирование таблицы (Table Scan). Вместо этого оптимизатор SQL-запросов активно использует индексы (Index Seek), а также служебные таблицы итогов (такие как _AccumRgT и _AccumRgOpt).
Основные причины, почему 1С не видит физически существующие строки:
_RecorderRRef содержится ссылочный идентификатор (GUID) документа, которого больше нет в базе, платформа при фоновых процессах или обновлении итогов может считать такие записи «сиротскими».Прежде чем выполнять операции на стороне 1С, необходимо убедиться в физической целостности страниц данных и перестроить индексы в MS SQL Server.
Рассмотрим порядок действий на сервере баз данных:
DBCC CHECKDB ('ИмяБазыДанных') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Если проверка не выявила критических повреждений страниц с данными, перейдем к полной переиндексации таблицы регистра движений и связанных с ней таблиц итогов.
ALTER INDEX ALL ON _AccumRg1234 REBUILD;
Где _AccumRg1234 — физическое имя таблицы вашего регистра накопления в СУБД (узнать его можно через функцию ПолучитьСтруктуруХраненияБазыДанных() в 1С).
После перестроения индексов на стороне SQL Server необходимо обновить индексные файлы и таблицы итогов средствами самой платформы 1С.
Разберем по шагам порядок выполнения процедуры:
Если переиндексация не помогла восстановить доступ к данным, рассмотрим еще два эффективных способа восстановления:
.dt с последующей загрузкой в чистую базу данных СУБД принудительно пересоздает всю физическую структуру таблиц и индексов на уровне SQL на основе метаданных 1С, полностью устраняя рассинхронизацию.