Ситуация, когда после успешного переноса рабочей информационной базы на новый сервер СУБД пользователи замечают расхождения между списком документов (например, расходных накладных) и итоговыми сводными отчетами, встречается достаточно часто. Документы проведены и присутствуют в журналах, но в аналитических отчетах суммы либо задваиваются, либо отображаются не полностью.
Разберем природу этой проблемы. При переносе базы через резервную копию средствами MS SQL Server (операции Backup / Restore или Detach / Attach) платформа «1С:Предприятие» не производит внутреннюю инициализацию служебных структур, которую она обычно выполняет при развертывании файла выгрузки .dt. В результате база запускается в новом окружении, но таблицы итогов, агрегаты регистров, серверный кэш или механизмы разграничения прав могут работать с ошибками. Проанализируем по шагам, как локализовать и устранить эти расхождения.
Первое, на что необходимо обратить внимание при несовпадении данных у пользователей, — работа механизма ограничения доступа на уровне записей (RLS — Record-Level Security). Если отчет строит пользователь с ограниченными правами, платформа на лету добавляет в SQL-запрос условия фильтрации (по организациям, подразделениям, контрагентам или складам). При этом журнал документов может отображать доступные строки иначе, чем сводный отчет, обращающийся к виртуальным таблицам регистра.
Проверим эту гипотезу следующим образом:
ПолныеПрава или АдминистраторСистемы), где RLS полностью отключен.Если под полными правами расхождение исчезает, причина заключается в настройках групп доступа пользователей или повреждении кэша прав после миграции.
Сводные аналитические отчеты в 1С практически никогда не обращаются напрямую к физическим таблицам документов или движений — они считывают данные из вспомогательных таблиц итогов регистров накопления и бухгалтерии. Если таблицы итогов рассинхронизированы с фактическими движениями, возникает существенная разница в суммах.
Для синхронизации выполним процедуру Тестирования и исправления информационной базы:
— Реиндексация таблиц информационной базы;
— Пересчет итогов;
— Проверка логической целостности информационной базы.
В процессе пересчета итогов платформа полностью перестроит записи в таблицах остатков и оборотов, приведя их в соответствие с фактическими движениями документов-регистраторов.
В конфигурациях («Управление торговлей», «ERP», «Комплексная автоматизация») для высоконагруженных регистров продаж применяются агрегаты. Если для регистра включено использование агрегатов, сводные отчеты получают предопределенные сгруппированные данные именно из них. Если после переноса регламентное задание по обновлению агрегатов не выполнялось, данные отчетов за последние периоды будут существенно расходиться с накладными.
Выполним ручную актуализацию агрегатов:
ВыручкаИСебестоимостьПродаж или Продажи).ОбновлениеАгрегатов и ПерестроениеАгрегатов.При переносе базы на новый физический сервер кластер 1С может сохранять в оперативной памяти и во временных каталогах старые метаданные и структуры планов выполнения запросов.
Для исключения влияния устаревшего кэша произведем его очистку:
1C:Enterprise 8.3 Server Agent через консоль управления службами Windows.C:\Program Files\1cv8\srvinfo\).reg_1541) найдем каталоги сеансов и временных файлов snccntx*. Очистим их содержимое.1CV8Clst.lst, 1cv8wsrv.lst), чтобы не потерять список зарегистрированных баз.После развертывания базы на новом экземпляре SQL Server статистика распределения данных часто оказывается пустой или неактуальной, что заставляет оптимизатор СУБД строить неоптимальные планы и некорректно обрабатывать соединения больших таблиц. Также важно убедиться, что параметры сопоставления (Collation) нового сервера совпадают с оригинальными (стандартно для 1С: Cyrillic_General_CI_AS).
Выполним первичное обслуживание через SQL Server Management Studio (SSMS). Запустим процедуру полного обновления статистических данных для всех таблиц:
USE [ИмяВашейБазыДанных];
GO
EXEC sp_updatestats;
GO
Для комплексного решения проблем с индексами запустим операцию перестроения индексов для таблиц регистров, по которым наблюдается расхождение:
ALTER INDEX ALL ON [dbo].[_AccumRgT_ИмяТаблицы] REBUILD;
GO
Если после пересчета итогов и очистки кэша разница сохраняется, применим метод точечной сверки:
Комплексное выполнение описанных шагов — проверка RLS, пересчет итогов и обслуживание таблиц на стороне MS SQL Server — позволяет полностью устранить любые расхождения между регистраторами и аналитическими отчетами после миграции базы.