В процессе эксплуатации информационных баз 1С:Предприятие специалисты часто сталкиваются со сложными техническими сбоями. Одним из наиболее неприятных является системный сбой: «Ошибка SQL: Таблица не найдена '_AccumRg21395'» (имя таблицы может отличаться числовым индексом). Данная ошибка обычно блокирует проведение критически важных документов, таких как Списание с расчетного счета или Реализация товаров и услуг, парализуя работу пользователей.
Давайте подробно разберем природу этого явления, выясним ключевые причины его возникновения и рассмотрим пошаговые сценарии устранения проблемы как для файловых баз данных (формат .1CD), так и для клиент-серверных вариантов под управлением СУБД (MS SQL, PostgreSQL).
Имя таблицы с префиксом _AccumRg однозначно указывает на то, что платформа пытается обратиться к таблице Регистра накопления. Числовой суффикс (в нашем примере 21395) — это внутренний идентификатор объекта метаданных в СУБД.
Рассмотрим основные причины, почему платформа делает запрос к таблице, которой физически не существует в базе данных:
Config и Params обновляется, но физические таблицы в СУБД не создаются или не переименовываются вовремя. В итоге база данных считает, что объект существует, а СУБД об этом «не знает».DBNames, которая сопоставляет объекты 1С с физическими таблицами файла .1CD.Прежде чем приступать к исправлению, нам необходимо выяснить, какому именно объекту метаданных в конфигурации соответствует «фантомная» таблица _AccumRg21395. Сделать это в работающей базе штатными средствами конфигуратора невозможно, если таблица уже удалена из структуры. Однако мы можем запустить программный анализ структуры хранения. Для этой задачи можно использовать готовую обработку для просмотра структуры хранения базы данных.
Для этого создадим внешнюю обработку и выполним следующий код в модуле управляемой формы на сервере:
&НаСервере
Процедура ОпределитьПроблемныйРегистрНаСервере()
// Получаем полную структуру хранения базы данных в терминах СУБД
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
ИскомаяТаблица = "_AccumRg21395";
НайденныйОбъект = Неопределено;
Для Каждого СтрокаСтруктуры Из ТаблицаСтруктуры Цикл
// Проверяем имя основной таблицы, таблиц итогов или оборотов
Если ВРег(СтрокаСтруктуры.ИмяТаблицыХранения) = ВРег(ИскомаяТаблица) Тогда
НайденныйОбъект = СтрокаСтруктуры.Метаданные;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденныйОбъект <> Неопределено Тогда
Сообщить("Успешно! Искомая таблица принадлежит объекту: " + НайденныйОбъект);
Иначе
Сообщить("В текущей структуре метаданных таблица " + ИскомаяТаблица + " не найдена. Возможно, это хвост удаленного расширения.");
КонецЕсли;
КонецПроцедуры
Если этот код вернул имя объекта (например, РегистрНакопления.РасчетыСПоставщиками), мы локализовали проблему. Если метод ПолучитьСтруктуруХраненияБазыДанных возвращает пустой результат или не находит таблицу в активной структуре, переходим к практическим методам восстановления.
Очень часто платформа обращается к несуществующим таблицам из-за устаревшего кэша метаданных. Выполним полную очистку:
%userprofile%\AppData\Local\1C\1Cv8 и %userprofile%\AppData\Roaming\1C\1Cv8 и удалим все папки с длинными буквенно-цифровыми именами (например, 2c019054-d83a-4f4d-b94d...). После этого добавим базу в список заново.C:\Program Files\1cv8\srvinfo) и удалим содержимое папки snccntx (кэш сеансов). После этого запустим службу заново.Если база данных файловая, стандартное Тестирование и исправление (ТиИ) или утилита chdbfl.exe часто завершаются с той же ошибкой «Таблица не найдена». В этом случае применим специализированный инструмент — утилиту Tool1CD.
Выполним следующие действия по шагам:
1Cv8.1CD перед любыми низкоуровневыми операциями!DBNames. Данная таблица содержит бинарное описание соответствия объектов метаданных физическим таблицам._AccumRg21395._AccumRg21395 из копии и импортировать ее в поврежденную базу как пустую таблицу-заглушку.В случае использования СУБД (например, Microsoft SQL Server) у нас гораздо больше возможностей для прямого исправления структуры.
Создание таблицы-заглушки в СУБД:
Если платформа аварийно завершает работу, требуя таблицу, мы можем вручную создать ее непосредственно в базе данных SQL через среду управления (например, SQL Server Management Studio). Для этого выполним SQL-запрос для генерации пустой таблицы с нужным именем.
Поскольку структура регистров накопления типична, мы можем скопировать структуру любого другого существующего регистра накопления (например, _AccumRg12345), но назвать новую таблицу _AccumRg21395. Примерный SQL-скрипт создания структуры выглядит так:
-- Создаем пустую таблицу-заглушку в вашей базе данных SQL
CREATE TABLE [dbo].[_AccumRg21395] (
[_Period] [datetime] NOT NULL,
[_RecorderTRef] [binary](4) NOT NULL,
[_RecorderRRef] [binary](16) NOT NULL,
[_LineNo] [numeric](9, 0) NOT NULL,
[_Active] [binary](1) NOT NULL,
[_RecordKind] [numeric](1, 0) NOT NULL,
-- Здесь должны быть перечислены измерения и ресурсы вашего регистра
-- Для заглушки достаточно минимального набора системных полей,
-- но лучше скопировать точную структуру рабочего регистра накопления
) ON [PRIMARY];
После создания пустой таблицы в СУБД выполним следующие действия в 1С:
Администрирование -> Тестирование и исправление._AccumRg21395 в SQL, выполнит ее сопоставление со схемой метаданных 1С, пересоздаст необходимые индексы и приведет структуру базы к абсолютно корректному виду.Если база сильно повреждена, конфигуратор не позволяет выполнить выгрузку в файл .dt, а утилиты СУБД не помогают, существует высокоэффективный архитектурный обходной путь — использование механизма выгрузки данных для перехода в облачный сервис.
Этот механизм примечателен тем, что он не копирует физическую структуру таблиц СУБД «как есть», а сериализует только чистые прикладные данные (документы, справочники, константы) в XML-формат, полностью игнорируя поврежденную конфигурацию базы данных.
Проанализируем этот процесс по шагам:
Предприятие.Администрирование -> Перейти в облачный сервис (или воспользуемся встроенной обработкой Выгрузка данных для перехода в сервис).data_dump.zip. Если система выдает предупреждения о планах обмена, согласимся с предложением временно исключить или включить объекты..cf) того же самого релиза, который использовался в исходной базе.Предприятие, перейдем в раздел Администрирование -> Загрузка данных из сервиса.data_dump.zip и выполним загрузку.В результате мы получим чистую базу данных без каких-либо старых системных ошибок, «фантомных» таблиц и следов незавершенных динамических обновлений, но со всеми сохраненными учетными данными.