При переходе на новые релизы платформы 1С:Предприятие 8.3.25 многие администраторы и разработчики столкнулись с критической ошибкой СУБД. Проблема проявляется в процессе обновления информационной базы (динамического или через конфигуратор) и сопровождается сообщением: Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._InfoRgChngR...X1". Давайте подробно разберем, почему это происходит и как реанимировать базу данных.
Для начала выясним природу префикса _InfoRgChngR. В структуре базы данных 1С эти таблицы отвечают за регистрацию изменений регистров сведений. Индекс X1 в конце имени таблицы обычно указывает на временную или вспомогательную таблицу, создаваемую платформой в процессе реструктуризации данных.
Основным виновником проблемы выступает новый механизм — Оптимизированная реструктуризация версии 2 (V2), внедренный в последних версиях платформы 8.3.25. Проанализируем ситуацию: при наличии в базе расширений конфигурации или при использовании определенных методов обновления (например, «Загрузить конфигурацию из файла»), механизм реструктуризации V2 пытается обратиться к таблицам регистрации изменений, добавляя к ним постфикс X1, но фактически эти таблицы в SQL-базе отсутствуют. Платформа ожидает их наличия, не создает их автоматически и прерывает процесс обновления с системной ошибкой.
Если ваша база уже «свалилась» в ошибку и стандартные средства Тестирование и исправление (ТиИ) или реструктуризация через конфигуратор не помогают, мы можем прибегнуть к прямому манипулированию структурой на уровне СУБД. Рассмотрим, как автоматизировать создание пустых таблиц-заглушек, которые требует платформа.
Нам необходимо найти все таблицы регистрации изменений (_InfoRgChngR) и для каждой из них создать пустую таблицу с суффиксом X1, полностью повторяющую структуру оригинала. Разберем по шагам выполнение этого скрипта в SQL Server Management Studio (SSMS):
X1:
USE [Имя_Вашей_Базы]; -- Замените на имя вашей базы данных
DECLARE @table_name NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);
-- Объявляем курсор для поиска таблиц регистрации изменений без индекса X1
DECLARE table_cursor CURSOR FOR
SELECT t1.name
FROM sys.tables t1
WHERE t1.name LIKE '%InfoRgChngR%'
AND t1.name NOT LIKE '%X1';
OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @table_name;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Формируем команду создания новой таблицы на основе существующей без переноса данных
-- (WHERE 1=0 гарантирует создание только структуры)
SET @sql = 'SELECT * INTO ' + @table_name + 'X1 FROM ' + @table_name + ' WHERE 1=0;';
BEGIN TRY
EXEC sp_executesql @sql;
PRINT 'Создана таблица: ' + @table_name + 'X1';
END TRY
BEGIN CATCH
PRINT 'Ошибка при создании ' + @table_name + 'X1: ' + ERROR_MESSAGE();
END CATCH
FETCH NEXT FROM table_cursor INTO @table_name;
END;
CLOSE table_cursor;
DEALLOCATE table_cursor;
После выполнения данного скрипта попробуйте запустить обновление конфигурации базы данных еще раз. Платформа «увидит» нужные ей объекты и успешно завершит процесс реструктуризации.
Посмотрим на ситуацию с другой стороны. Опытным путем было замечено, что ошибка часто провоцируется операцией «Загрузить конфигурацию из файла» (когда файл .cf загружается целиком). Проанализируем альтернативный вектор действий:
Если вы используете хранилище конфигурации, попробуйте выполнить обновление через «Конфигурация — Хранилище конфигурации — Обновить конфигурацию из хранилища». В этом режиме платформа часто использует другие алгоритмы сравнения и объединения, что в некоторых случаях позволяет обойти баг реструктуризации V2 без прямого вмешательства в SQL.
Выясним, как расширения влияют на этот процесс. Постфикс X часто сигнализирует о том, что объект модифицирован или добавлен через расширение. Если предыдущие способы не помогают, выполните следующие действия:
Важное примечание: Данная проблема признана ошибкой платформы в некоторых патчах ветки 8.3.25. Если создание таблиц вручную кажется вам слишком рискованным, рекомендуется проверить наличие исправлений (патчей) от фирмы «1С» для вашего конкретного релиза платформы или обновиться на более стабильную сборку (например, выше 8.3.25.1445), где подобные коллизии механизма V2 постепенно исправляются.
Подведем итог: если вы столкнулись с ошибкой dbo._InfoRgChngR...X1, наиболее эффективным и быстрым способом «лечения» является SQL-скрипт на создание пустых структур. Это позволяет платформе корректно завершить транзакцию обновления, после чего база возвращается в рабочее состояние.