Ситуация, когда база 1С продолжает работать, позволяет обновлять конфигурацию и проводить документы, но наотрез отказывается выгружать информационную базу в файл .dt, — типичный признак логического или физического повреждения структуры файла .1CD. Чаще всего ошибка звучит как «Таблица не найдена» (например, _InfoRg10398). Это означает, что в системных таблицах базы (таких как DBSchema) запись о существовании объекта есть, а физическое местоположение данных или заголовок таблицы повреждены.
В данной статье мы подробно разберем, как восстановить работоспособность базы, используя как штатные средства конфигуратора, так и специализированные низкоуровневые утилиты. Проанализируем причины возникновения проблемы и выясним, почему простое копирование таблицы из пустой базы часто не помогает.
Этот способ считается «хирургическим» и требует понимания внутренней структуры 1С. Основная сложность заключается в том, что в разных информационных базах одной и той же конфигурации имена таблиц хранения (например, InfoRg8568 и InfoRg10398) могут отличаться, так как их номера присваиваются платформой последовательно при создании объектов.
Разберем по шагам алгоритм восстановления:
ПолучитьСтруктуруХраненияБазыДанных(). Это позволит нам понять, что, например, InfoRg10398 — это регистр сведений ОтветыНаЗапросыВыпискиИзЕГРЮЛ_ЕГРИП.InfoRg8568).descr.00h (нулевой байт), который критически важен для структуры 1С.*).00h.Fld8569 на Fld10399) приведены в соответствие с битой базой, воспользуемся кнопкой «Импорт и создание таблиц» в утилите Tool_1CD для загрузки исправленной структуры в поврежденную базу.Если данные в поврежденной таблице не представляют критической ценности (как в случае с регистром ответов на запросы ЕГРЮЛ), самым надежным и простым способом будет полное пересоздание объекта метаданных. Однако обычное удаление может привести к «вылету» конфигуратора. Рассмотрим правильную последовательность действий:
.cf (меню «Конфигурация» — «Поддержка» — «Настройка поддержки» — «Сохранить в файл»).РегистрСведений.ОтветыНаЗапросыВыпискиИзЕГРЮЛ_ЕГРИП) и удаляем его из дерева метаданных.DBSchema..cf. При вопросе о постановке на поддержку отвечаем утвердительно..1CD с правильными индексами и полями.Рассмотрим ситуацию, когда стандартное Тестирование и исправление (ТиИ) или утилита chdbfl.exe не справляются, выдавая критическую ошибку. В некоторых случаях помогает механизм создания Распределенной Информационной Базы (РИБ).
Посмотрим на этот процесс подробнее: при создании начального образа подчиненного узла РИБ платформа 1С выполняет глубокое чтение всех объектов и их перенос в новую базу. Если повреждение таблицы носит физический характер (битые сектора внутри файла), механизм выгрузки может «пропустить» поврежденные записи или создать чистую таблицу в новой базе. После успешного создания подчиненной базы ее можно «отвязать» от главного узла, выполнив в коде команду:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Полученная таким образом база будет иметь абсолютно новую и чистую структуру внутренних таблиц, что позволит без проблем выгружать .dt файлы.
Проанализируем причины, по которым база становится «битой». В 90% случаев это происходит из-за динамического обновления («обновление демона»). Когда пользователи находятся в базе, а администратор нажимает «Принять изменения», структура DBSchema обновляется, но старые кэшированные описания таблиц могут остаться в памяти. В какой-то момент это приводит к рассинхронизации идентификаторов.
Важные рекомендации по обслуживанию:
.1CD лимит на размер одной таблицы составляет 4 Гб, и приближение к этому порогу часто вызывает ошибки СУБД..dt, но и путем прямого копирования файла .1CD. Как мы выяснили, поврежденная база может не дать сделать .dt, и вы останетесь без актуального бэкапа.cnvdbfl.exe, которая входит в комплект поставки платформы.Подводя итог, можно сказать, что восстановление «битой» таблицы — это процесс восстановления соответствия между описанием объекта в метаданных и физическим наличием таблицы в структуре 1CD. Используя Tool_1CD для импорта структуры или метод удаления/восстановления объекта, вы сможете вернуть базе работоспособность и успешно выполнить долгожданную выгрузку данных.