Как исправить ошибку СУБД «Недопустимое имя объекта» с постфиксом NG при обновлении 1С

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

При обновлении современных конфигураций 1С (таких как Комплексная автоматизация 2.5, ERP 2.5 или Управление торговлей 11.5) специалисты часто сталкиваются с ошибкой СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._AccumRg68950NG". Ошибка сопровождается кодом HRESULT=80040E37 и прерывает процесс обновления базы данных.

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

Выясним причину: что такое таблицы NG и механизм реструктуризации v2

Для начала разберем природу возникновения таблиц с постфиксом NG. Этот постфикс расшифровывается как Next Generation (новое поколение). Начиная с версии платформы 8.3.11, компания 1С представила новый механизм реструктуризации данных, который в профессиональной среде называют v2.

Рассмотрим отличия двух механизмов:

  1. Механизм v1 (Standard): При изменении структуры объекта (например, добавлении реквизита в справочник) создается временная таблица с префиксом Q, в нее копируются все данные из старой таблицы, затем старая таблица удаляется, а новая переименовывается. Это требует двойного объема места в базе данных и значительного времени на выполнение транзакции.
  2. Механизм v2 (Next Generation): Этот режим призван ускорить процесс. Система создает целевую таблицу с постфиксом NG. В некоторых случаях реструктуризация может происходить через ALTER TABLE на уровне СУБД или путем фонового копирования данных частями.

Ошибка Недопустимое имя объекта ... NG возникает в ситуации, когда логика платформы 1С уже «считает», что должна работать с новой структурой (таблицей NG), но на уровне SQL-сервера эта таблица либо не была создана из-за сбоя, либо была удалена в результате незавершенной транзакции. Часто это происходит из-за ошибок в коде самой платформы (например, в версиях 8.3.22 или 8.3.23) или из-за внешних факторов, таких как нехватка прав или места на диске.

Способ 1. Переключение на классический механизм реструктуризации (v1)

Проанализируем самый надежный метод решения проблемы, который помогает в 90% случаев. Если новый механизм v2 дает сбой, мы можем принудительно заставить платформу использовать проверенный временем механизм v1. Для этого необходимо отредактировать файл конфигурации conf.cfg.

Разберем по шагам, как это сделать:

  1. Перейдем в каталог установленной платформы на сервере 1С. Обычно он находится по пути: C:\Program Files\1cv8\conf. Если файла там нет, проверьте папку конкретной версии платформы.
  2. Откроем файл conf.cfg с помощью текстового редактора (от имени администратора).
  3. Добавим в него следующую строку:

UpdateMode=Standard

Или, в зависимости от версии платформы, можно использовать числовое значение:


UpdateMode=0

Важный момент: Параметр Standard (или 0) отключает использование механизма v2. После внесения изменений необходимо перезапустить службу агента сервера 1С:Предприятие. После этого попробуем запустить обновление снова. Система будет использовать старый алгоритм создания временных таблиц, что позволит избежать ошибки с отсутствующими объектами NG.

Способ 2. Проверка свободного места и системной базы TempDB

Рассмотрим ситуацию, когда переключение на v1 не помогло или вы хотите использовать именно v2 для ускорения процесса. Одной из ключевых причин падения реструктуризации является недостаток дискового пространства.

Механизм v2 крайне требователен к свободному месту не только в основной базе данных, но и в системной базе SQL-сервера — tempdb. Проанализируем следующие рекомендации:

Способ 3. Очистка кэша и реструктуризация через «Тестирование и исправление»

Если ошибка сохраняется даже после настройки conf.cfg, возможно, в метаданных базы остались «хвосты» от предыдущих неудачных попыток. Посмотрим, как очистить систему:

  1. Выполним полную очистку серверного кэша базы данных. Для этого нужно остановить службу 1С и удалить содержимое папок snccntx в каталоге описания базы на сервере.
  2. Запустим конфигуратор и перейдем в меню Администрирование — Тестирование и исправление.
  3. Выберем только один пункт: Реструктуризация таблиц информационной базы.

Обратите внимание, что реструктуризация — это длительный процесс. Однако именно она позволяет привести физическую структуру таблиц SQL в полное соответствие с метаданными конфигурации 1С, удаляя при этом все «фантомные» ссылки на таблицы NG.

Способ 4. Использование промежуточных релизов платформы и конфигурации

Проанализируем ситуацию, описанную пользователями: иногда ошибка возникает при попытке «перепрыгнуть» через слишком много релизов (обновление по «синей стрелке» в конфигураторе). Если вы обновляете конфигурацию, например, с версии 2.5.10 сразу на 2.5.15, механизм реструктуризации может не справиться с объемом изменений в схеме данных.

Попробуем применить стратегию поэтапного обновления:

Как узнать, какому объекту 1С соответствует проблемная таблица?

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

Для этого воспользуемся SQL-запросом к базе данных:


SELECT * FROM Params WHERE FileName = 'DBNames'

В поле этого запроса хранится бинарная информация о соответствии имен. Однако проще воспользоваться встроенной функцией 1С. Создадим внешнюю обработку и выполним код:


СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТаблицы Из СтруктураХранения Цикл
    Если Найти(СтрокаТаблицы.ИмяТаблицыХранения, "32576") > 0 Тогда
        Сообщить("Это объект: " + СтрокаТаблицы.ИмяТаблицы);
    КонецЕсли;
КонецЦикла;

Зная проблемный объект, мы сможем более целенаправленно подойти к его лечению: проверить наличие расширений, влияющих на этот объект, или попробовать вручную пересоздать его структуру в конфигураторе.

Подведем итоги

Появление ошибки dbo._AccumRg...NG — это верный признак того, что новый механизм реструктуризации v2 столкнулся с препятствием, которое не смог преодолеть. Самым быстрым и эффективным решением остается принудительный возврат к механизму v1 через файл conf.cfg. Если же это не помогает, следует обратить внимание на свободное место на дисках СУБД и актуальность версии платформы 1С.

← На главную