На практике часто встречается ситуация, когда внезапное отключение питания, сбой сети или аварийное закрытие программы 1С приводит к серьезным сбоям в работе базы данных. Один из наиболее распространенных симптомов такой проблемы — появление ошибки при попытке открыть списки документов (например, при переходе на вкладку «Покупки» или «Продажи»): «Ошибка при выполнении запроса. Таблица не найдена "РегистрСведений.НаличиеПрисоединенныхФайлов"». Выясним причину этой неисправности и подробно разберем по шагам, как восстановить работоспособность системы.
Проанализируем техническую сторону сбоя. Платформа 1С:Предприятие хранит структуру метаданных в специальных кэш-таблицах конфигурации. При аварийном завершении работы сеанса связи между логическим описанием объектов конфигурации и физическими таблицами в СУБД могут нарушиться. С точки зрения платформы объект метаданных (например, регистр сведений) пропадает, хотя физически в таблицах базы данных (как в файловом варианте, так и в MS SQL / PostgreSQL) данные этого регистра продолжают существовать.
Также подобная ошибка может быть следствием неудачного динамического обновления конфигурации базы данных («обновления на лету») или несоответствия версий при обновлении Библиотеки стандартных подсистем (БСП), в новых версиях которой некоторые регистры переименовываются.
Рассмотрим подробнее проверенные способы решения этой проблемы в зависимости от типа вашей базы данных.
В большинстве случаев физические таблицы базы данных не повреждены, а сбой затрагивает только временные файлы (кэш метаданных) на компьютере пользователя или на сервере.
Выполним очистку кэша по следующей схеме:
%userprofile%\AppData\Local\1C и %userprofile%\AppData\Roaming\1C) и удалим папки с длинными шестнадцатеричными именами (идентификаторы баз).rphost, rmngr), полностью очистить кэш на сервере (включая каталог сессионных данных и временную папку snccntx), после чего заново запустить службу сервера.Если ваша база данных файловая (имеет расширение .1CD), аварийное завершение процесса 1cv8.exe могло нарушить целостность самого файла базы.
Проанализируем состояние базы с помощью штатной утилиты:
1Cv8.1CD в безопасное место).C:\Program Files\1cv8\[Номер_версии_платформы]\bin\).chkdbfl.exe.После завершения проверки утилита выведет отчет об исправленных ошибках структуры. Попробуем запустить базу в обычном режиме.
Что делать, если в Конфигураторе утерянный регистр действительно отсутствует, бэкапов нет, а прямое копирование из аналогичной чистой конфигурации грозит потерей накопленных данных (так как платформа создаст новые пустые таблицы в СУБД)?
Решить эту проблему можно с помощью механизма сравнения и объединения, который свяжет существующие физические SQL-таблицы с метаданными конфигурации:
.cf..cf.РегистрСведений.НаличиеПрисоединенныхФайлов) и установим напротив него флаг.F7). Платформа сопоставит метаданные с физической таблицей, и данные внутри регистра будут сохранены.Иногда полезно заставить платформу принудительно обновить структуру базы данных и очистить старые транзакции динамического обновления:
F7. Это инициирует процесс реструктуризации таблиц и восстановит связи метаданных.Для клиент-серверного варианта базы данных принудительно завершить зависший процесс динамической реструктуризации можно напрямую через СУБД (MS SQL, PostgreSQL). Это позволит вернуть систему в согласованное состояние.
Запустим консоль запросов СУБД и выполним следующие команды для очистки системных таблиц конфигурации от зависших признаков обновления:
DELETE FROM Config WHERE FileName = 'commit';
DELETE FROM Config WHERE FileName = 'dbStruFinal';
После выполнения запросов перезапустим службу сервера 1С и очистим локальный кэш на рабочих станциях пользователей.
Если база недавно обновлялась, причиной ошибки может быть переход конфигурации на новую версию БСП (например, версии 2.4 и выше). В новых релизах библиотек регистр сведений НаличиеПрисоединенныхФайлов был переименован разработчиками 1С в НаличиеФайлов.
Если в вашей базе установлены нетиповые доработки, кастомные расширения или внешние отчеты, запросы которых жестко обращаются к старому имени регистра, система выдаст ошибку «Таблица не найдена». В этом случае необходимо проверить код расширений и внешних обработок, заменив старое имя регистра на новое актуальное имя.