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

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

При попытке выгрузить информационную базу в файл выгрузки (.dt) через Конфигуратор администраторы и разработчики нередко сталкиваются с аварийным завершением процесса: «Нарушена целостность информационной базы. Ошибка в размере файла ... при выгрузке таблицы FILES». В некоторых случаях система прямо указывает имя поврежденного элемента, например, словаря проверки орфографии userVocabulary_ru.new или внутреннего служебного блока.

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

Причины возникновения рассогласования в таблице FILES

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

Проанализируем механику сбоя. В структуре таблицы для каждого сохраненного объекта отведены поля с числовым размером блока и само двоичное содержимое. Ошибка возникает тогда, когда значение в поле размера не совпадает с реальной длиной бинарных данных. Источниками такого расхождения обычно выступают:

  1. Аварийные завершения сеансов пользователей или внезапное отключение электропитания в момент записи служебных данных.
  2. Блокировка или повреждение временных файлов антивирусным программным обеспечением.
  3. Ошибки, накопленные в результате частого использования механизма «динамического обновления» конфигурации.
  4. Ужесточение контроля целостности: начиная с версии платформы 8.3.7, механизм создания выгрузки .dt выполняет строгую проверку внутренней структуры информационной базы. Если ранние версии (например, 8.3.6) игнорировали мелкие расхождения и успешно формировали архив, то новые релизы принудительно прерывают процесс.

Важное напоминание: выгрузка в файл .dt предназначена разработчиками платформы для смены СУБД или конвертации данных, а не для регулярного резервного копирования. Перед выполнением любых восстановительных операций обязательно создадим физическую копию каталога файловой базы или сделаем средствами СУБД бэкап клиент-серверной базы.

Способ 1. Программная очистка настроек пользователей

Чаще всего сбойные записи в таблице FILES связаны с пользовательскими настройками отображения списков, отчетов и диалогов. Самый простой и безопасный способ избавиться от проблемы, не прибегая к низкоуровневому вмешательству, — очистить сохраненные настройки сеансов.

Рассмотрим по шагам программное решение. Запустим базу в режиме «1С:Предприятие» под учетной записью с административными правами и выполним обработку со следующим кодом:


ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекПользователь Из ВыборкаПользователей Цикл
    ХранилищеОбщихНастроек.Удалить(Неопределено, Неопределено, ТекПользователь.Имя);
    ХранилищеПользовательскихНастроекДинамическихСписков.Удалить(Неопределено, Неопределено, ТекПользователь.Имя);
    ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, ТекПользователь.Имя);
КонецЦикла;

Если требуется применить метод встроенного языка ОчиститьНастройкиПользователя(), его можно вызвать для каждого пользователя информационной базы:


ОчиститьНастройкиПользователя(ПользователиИнформационнойБазы.ТекущийПользователь);

В конфигурациях на обычных формах (например, ЗиУП 2.5) аналогичную очистку можно провести штатным интерфейсным путем: перейдем в меню Сервис — Настройка пользователей и удалим сохраненные настройки отчетов и форм.

Способ 2. Восстановление физической структуры через утилиту chdbfl.exe

Если база работает в файловом варианте, для устранения рассогласования индексов и таблиц применим штатную утилиту тестирования файла БД.

  1. Завершим все сеансы работы с базой данных и закроем Конфигуратор.
  2. Перейдем в каталог установленной платформы (например, C:\Program Files\1cv8\8.3.X.XXXX\bin\) и запустим chdbfl.exe.
  3. Укажем путь к файлу 1Cv8.1CD, установим флаг «Исправлять обнаруженные ошибки» и нажмем «Выполнить».

Обратим внимание на важную особенность: утилита chdbfl.exe из состава платформы 8.3 не всегда фиксирует логические нестыковки старых форматов таблиц. Если проверка не выявила ошибок, а выгрузка по-прежнему падает, подключим утилиту chdbfl.exe от платформы 8.2 (например, релиза 8.2.19.130). Она более жестко сканирует таблицу FILES, journal-таблицы и индексы справочников, устраняя найденные несоответствия.

После физического исправления файла запустим Конфигуратор и выполним стандартную процедуру: меню «Администрирование» — «Тестирование и исправление...» с обязательными пунктами Реиндексация таблиц информационной базы и Проверка логической целостности.

Способ 3. Прямая корректировка данных в СУБД (клиент-серверный вариант)

В клиент-серверных базах (Microsoft SQL Server или PostgreSQL) мы имеем прямой доступ к таблице dbo.Files. Когда 1С сообщает точное имя файла (например, userVocabulary_ru.new) и указывает ожидаемый размер, проблему можно решить прямым запросом к СУБД.

Разберем по шагам порядок действий в Microsoft SQL Server Management Studio (SSMS):

  1. Найдем в базе данных таблицу dbo.Files.
  2. Если поврежден вспомогательный файл (словари проверки орфографии, кэш форм), его можно безопасно удалить — система создаст его заново при старте:
    
    DELETE FROM dbo.Files 
    WHERE FileName = 'userVocabulary_ru.new';
    
  3. Если файл удалять нельзя, выровняем поле размера в соответствии с фактической длиной бинарного содержимого:
    
    UPDATE dbo.Files 
    SET DataSize = DATALENGTH(BinaryData) 
    WHERE FileName = 'ИмяПроблемногоФайла';
    
    В ряде случаев, когда поврежден дескриптор размера, помогает также явная установка требуемого платформой числового значения или сброс в 0.

Для СУБД PostgreSQL аналогичное выравнивание длины двоичного поля выполняется с помощью функции octet_length:


UPDATE files 
SET datasize = octet_length(binarydata) 
WHERE filename = 'ИмяПроблемногоФайла';

Способ 4. Корректировка через специализированные редакторы файла 1CD

Если база файловая, а перевод на SQL-сервер не планируется, для прямого редактирования таблицы FILES применим специализированную утилиту (например, Tool_1CD):

  1. Откроем копию базы данных в утилите.
  2. Перейдем к таблице FILES и найдем строку с поврежденным файлом.
  3. Скорректируем значение в поле размера на то, которое ожидает получить платформа при аварийной остановке выгрузки.
  4. Сохраним изменения и запустим выгрузку базы в Конфигураторе заново.

Способ 5. Временное использование платформы 8.3.6

Если выгрузку базы данных необходимо получить срочно, а времени на детальную диагностику бинарных полей нет, используем различие в алгоритмах проверки платформы:

  1. Установим платформу версии 8.3.6 (например, 8.3.6.2568).
  2. Запустим Конфигуратор требуемой базы именно под этой платформой.
  3. Выполним команду «Администрирование» — «Выгрузить информационную базу...». Поскольку в версии 8.3.6 жесткая валидация структуры таблицы FILES еще не была внедрена, файл .dt сформируется успешно.
  4. Создадим новую пустую базу на актуальной платформе и загрузим полученный файл обратно. В процессе загрузки и последующего первого запуска платформа автоматически пересоздаст служебные таблицы.

Способ 6. Восстановление схемы DBSCHEMA и структуры метаданных

Если при анализе целостности дополнительно возникает ошибка «Отсутствует таблица DBSCHEMA», это свидетельствует о нарушении соответствия между конфигурацией базы данных и таблицами хранения схемы метаданных. В этой ситуации выполним полную перезапись структуры:

  1. Получим файл поставки конфигурации (.cf) в точности того же релиза, который установлен в рабочей базе.
  2. Откроем Конфигуратор и выберем пункт меню «Конфигурация» — «Загрузить конфигурацию из файла...» (важно использовать именно полную загрузку конфигурации, а не объединение).
  3. Согласимся с обновлением конфигурации базы данных. Данная процедура полностью переформирует системную таблицу DBSCHEMA, не затрагивая при этом учетные данные в справочниках и документах.

Способ 7. Точечный перенос данных через XML

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

  1. Для конфигураций, работающих в режиме совместимости с платформой 8.2 (таких как ЗиУП 2.5), используем внешнюю обработку ВыгрузкаЗагрузкаДанныхXML82.epf (версия для 8.3 выдаст ошибку режима совместимости).
  2. Если повреждение мешает сплошной выгрузке через универсальную обработку, применим универсальный обмен в формате XML (обработка V8Exchan82.epf на базе правил обмена).
  3. Развернем рабочий архив базы до сбоя, настроим отбор по периоду и перенесем из аварийной базы только вновь созданные документы, регламентированные отчеты и служебные регистры сведений, содержащие протоколы сдачи отчетности.
← На главную