Как исправить ошибку нарушения целостности в таблице Files при выгрузке информационной базы 1С?

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

При обслуживании или обновлении баз данных 1С:Предприятия специалисты нередко сталкиваются с ситуацией, когда информационная база успешно функционирует и выгружается в файл .dt под управлением платформы 1С 8.2, но при попытке выгрузить эту же базу в платформе 8.3 возникает критическая ошибка: «Нарушена целостность информационной базы. Ошибка в размере файла ... при выгрузке таблицы Files. Ожидаемое значение 0, значение в таблице ...». Разберем по шагам, что представляют собой эти файлы, почему платформа ведет себя подобным образом и как безопасно решить проблему несколькими проверенными способами.

Что хранится в таблице Files и файлах с расширением .pfl

Для правильного выбора способа восстановления сначала выясним назначение служебной таблицы Files (в СУБД — dbo.Files). В ней хранятся общие двоичные данные, кэш и пользовательские настройки интерфейса:

  1. Файлы вида <GUID>.pfl — это индивидуальные профили пользователей (от английского profile). Значение GUID перед расширением напрямую соответствует идентификатору конкретного пользователя информационной базы из таблицы v8users. Внутри этого файла платформа хранит пользовательские настройки динамических списков, фильтры документов, сохраненные отборы журналов регистрации, а также визуальное расположение, размеры и видимость колонок и окон. Удаление такой записи совершенно безопасно для учетных данных: проводки, регистры, справочники и документы не затрагиваются. При удалении файла пользователь просто вернется к стандартным настройкам отображения интерфейса, а система автоматически создаст новый чистый файл настроек при следующем входе.
  2. Файл fo_version — технический кэш актуальности функциональных опций информационной базы, необходимый платформе для быстрой инициализации интерфейсных механизмов.
  3. Служебные параметры среды разработки — история подключений, режим аутентификации отладчика, параметры последнего сохранения хранилища конфигурации.

Причина возникновения ошибки «Ожидаемое значение 0»

Проанализируем поведение платформы. Начиная с релизов ветки 8.3 (в частности, с версий 8.3.7 и 8.3.8), механизм выгрузки информационной базы в файл выгрузки данных .dt получил строгую проверку соответствия фактического размера потока данных значению в колонке DataSize. Если в платформе 8.2 на расхождение фактического и записанного размера система закрывала глаза, то платформа 8.3 сразу прерывает операцию и выдает сообщение о нарушении целостности.

Важно отметить: стандартная утилита физической проверки chdbfl.exe не находит ошибок в данном случае, поскольку физическая целостность страниц файла 1Cv8.1CD не нарушена — сбой носит исключительно логический характер несоответствия метаданных таблицы.

Способ 1. Очистка настроек штатными средствами 1С:Предприятия

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

  1. Запустим информационную базу в режиме 1С:Предприятие под учетной записью с правами администратора. Запуск можно выполнить как на платформе 8.2, так и на платформе 8.3 (ошибка проявляется только при попытке создать .dt).
  2. Откроем механизм управления пользовательскими настройками (в зависимости от конфигурации: меню Администрирование → Настройки пользователей и прав → Очистка настроек либо через универсальную обработку Управление настройками пользователей).
  3. Выберем пользователя, настройки которого вызывают сбой, и выполним полную очистку его пользовательских настроек и настроек форм.
  4. Штатный механизм платформы при удалении настроек корректно перезапишет или очистит связанную запись в таблице Files, после чего выгрузка в .dt пройдет без ошибок.

Способ 2. Исправление или удаление записи через СУБД

Если база данных развернута в клиент-серверном варианте (или была предварительно загружена в SQL через платформу 8.2), исправление можно выполнить прямым запросом к СУБД. Проанализируем два варианта работы с таблицей dbo.Files.

Первый вариант — корректировка поля размера без удаления самих настроек. Платформа ожидает нулевое значение длины, поэтому выполним команду:


UPDATE [dbo].[Files] 
SET [DataSize] = 0 
WHERE [FileName] = '071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl';

Второй вариант — полное удаление поврежденной строки настроек. Так как файл .pfl хранит лишь пользовательские предпочтения интерфейса, его удаление полностью безопасно:


DELETE FROM [dbo].[Files] 
WHERE [FileName] = '071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl';

После выполнения одной из указанных команд выгрузка базы данных в файл .dt на платформе 8.3 выполняется штатно.

Способ 3. Прямая работа с файловой базой без использования выгрузки в dt

Если информационная база файловая, а возможности подключить ее к SQL нет, разберем альтернативные пути решения:

  1. Прямое открытие файла базы данных. Механизм выгрузки в .dt не является единственным способом миграции на новую платформу. Файл 1Cv8.1CD можно скопировать напрямую. При открытии файловой базы платформой 8.3 таблица Files не подвергается той строгой валидации, которая встроена в алгоритм создания .dt. База успешно сконвертируется и продолжит работу.
  2. Корректировка заголовков таблицы утилитами работы с 1CD. Специализированные редакторы внутреннего формата (например, Tool_1CD) позволяют просмотреть структуру таблицы Files, найти проблемную запись по имени файла и вручную скорректировать значение поля DATASIZE на требуемое системой значение 0.
  3. Перенос учетных данных. В особо сложных случаях переноса конфигураций и данных между платформами можно использовать стандартную универсальную обработку Выгрузка и загрузка данных XML, которая выгружает строго прикладные объекты метаданных и полностью игнорирует поврежденный кэш и служебные файлы платформы.
← На главную