Ошибка с кодом «Недопустимое имя объекта "#tt1"» (или аналогичными именами вроде #tt60, #tt2) является одной из самых коварных при работе связки 1С:Предприятие и MS SQL Server. Она свидетельствует о разрыве логической связи между сеансом 1С и временным объектом в системной базе tempdb. Проанализируем ситуацию: платформа 1С сформировала запрос, создала временную таблицу, но при попытке обратиться к ней СУБД сообщает, что такой таблицы больше не существует. Чтобы вовремя обнаружить подобные сбои, рекомендуется регулярно проводить замер производительности контура 1С и поиск узких мест.
Рассмотрим подробнее причины этого явления и разберем по шагам методы решения, от простых манипуляций с кэшем до глубокой настройки SQL-сервера.
Прежде чем переходить к действиям, нам важно понять механику процесса. Временные таблицы, начинающиеся с символа решетки (#), создаются в базе tempdb и видны только в рамках того соединения (SPID), в котором они были созданы. Как только соединение разрывается или контекст транзакции очищается некорректно, SQL Server немедленно удаляет эти таблицы.
Основные факторы, приводящие к потере таблицы:
Microsoft OLE DB Driver for SQL Server может повторно использовать старое соединение, в котором менеджер объектов СУБД уже произвел очистку.Первым делом проанализируем версию используемого программного обеспечения. В сообщениях пользователей четко прослеживается зависимость: на определенных сборках платформы ошибка проявляется массово. Выясним, какие версии наиболее стабильны.
Практика показывает, что переход на версию платформы 8.3.27.1559 и выше часто полностью устраняет проблему. Если вы используете ветку 8.3.24, рекомендуется обновиться до последних минорных релизов этой ветки или перейти на 8.3.25/8.3.26.
Также обратим внимание на драйвер. Если в строке ошибки фигурирует Microsoft OLE DB Driver for SQL Server, попробуйте обновить его до версии 19.x или, наоборот, откатиться на стабильную 18.x, предварительно проверив совместимость с вашей версией SQL Server.
Разберем ситуацию, когда SQL-сервер не может корректно обработать временную таблицу из-за физических ограничений. Проверим состояние системной базы tempdb. Для этого полезно будет проанализировать SQL сервер глазами 1С-ника при помощи специализированных инструментов, которые показывают нагрузку и текущие ожидания.
Выполним следующие действия:
tempdb.mdf и templog.ldf, достаточно пространства. Если диск переполнен, SQL Server не сможет расширить временную таблицу, что приведет к ошибке Invalid object name. Для понимания соответствия физических таблиц объектам метаданных вам поможет обработка, описывающая структуру хранения базы данных.tempdb на несколько файлов данных равного размера (обычно по количеству ядер процессора, но не более 8). В этом поможет детальная инструкция по настройке регламентных операций MS SQL SERVER под 1С.Проанализируем специфику конфигураций ERP 2.5, Розница 3.0 и УНФ. В этих решениях часто используется механизм «Обновление доступа на уровне записей». Если в настройках программы включен производительный режим работы профилей групп доступа, 1С генерирует сложные запросы с использованием множества временных таблиц.
Если ошибка возникает во время выполнения регламентных заданий по обновлению доступа, попробуем изменить настройки:
НСИ и администрирование — Настройка пользователей и прав.Это снизит нагрузку на tempdb и может устранить ошибку, так как алгоритмы построения запросов изменятся на более простые.
Рассмотрим метод «разделяй и властвуй». Иногда рабочие процессы 1С (rphost) начинают некорректно кэшировать метаданные конкретной базы. Чтобы локализовать проблему, создадим для проблемной базы отдельную среду исполнения.
Пошаговый план действий:
Количество сеансов на рабочий процесс равным 1. Это гарантирует, что сбой в одном сеансе не затронет другие и не приведет к порче кэша всего процесса.Выясним, не виновата ли сеть. Современные сетевые карты имеют функции «разгрузки» процессора, которые могут конфликтовать с высоконагруженными транзакциями SQL Server.
Попробуем отключить следующие параметры в настройках сетевого адаптера на стороне сервера SQL и сервера приложений 1С:
Это сделает сетевой поток более стабильным и предотвратит внезапные обрывы соединений, уничтожающие временные таблицы.
Также проанализируем возможность использования флага трассировки SQL Server T2453. Этот флаг заставляет оптимизатор запросов пересчитывать план выполнения при изменении количества строк во временной таблице. Для включения флага выполните в SSMS:
DBCC TRACEON (2453, -1);
-- Для постоянного действия добавьте -T2453 в параметры запуска службы SQL Server
Если ошибка сохраняется, выполним комплексное обслуживание, которое поможет «сбросить» застрявшие планы запросов:
USE [Имя_Вашей_Базы];
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
DBCC FREEPROCCACHE;
GO
Важно: Выполнение DBCC FREEPROCCACHE на рабочей базе может вызвать кратковременное снижение производительности, так как все планы запросов будут строиться заново.
Проанализировав все вышеперечисленные методы, мы видим, что проблема чаще всего решается либо обновлением платформы, либо увеличением ресурсов tempdb. Начните с самых простых шагов и постепенно переходите к сложным настройкам сервера.