Развалилась файловая база 1С после обновления: как восстановить конфигурацию и перенести данные без потерь

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

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

---

Почему происходит сбой и как устроен механизм сохранения конфигурации

Прежде чем приступать к ремонту, разберем физику процесса. В файловой СУБД 1С структура метаданных (конфигурация) хранится в специальных системных таблицах внутри единого файла 1Cv8.1CD. Основными здесь являются таблицы CONFIG (где записана текущая рабочая конфигурация) и CONFIGSAVE (куда конфигуратор сохраняет промежуточные изменения до нажатия кнопки «Обновить конфигурацию базы данных»).

В процессе реструктуризации и обновления платформой выполняются следующие шаги:

  1. Новые метаданные записываются во временную таблицу CONFIGSAVE.
  2. В таблице CONFIG создаются временные служебные маркеры с именами commit, dynamicCommit и dbStruFinal, которые сигнализируют системе о начале транзакции обновления.
  3. Происходит перестроение физических таблиц данных (справочников, документов, регистров) под новую структуру.
  4. При успешном завершении данные из CONFIGSAVE переносятся в CONFIG, служебные маркеры удаляются, а сама таблица CONFIGSAVE очищается.

Если в процессе реструктуризации (на шагах 2 или 3) происходит аварийное завершение (выключили свет, завис ПК, заблокировал антивирус, исчерпалась оперативная память), база остается в «зависшем» промежуточном состоянии. При попытке входа система видит маркеры незавершенной транзакции и выдает ошибку: «Обнаружена незавершенная операция сохранения конфигурации».

---

Способ 1. Восстановление базы методом подмены таблиц (Практический кейс)

Если утилита chdbfl.exe рапортует об успешном исправлении повреждений в таблицах CONFIG и CONFIGSAVE, но ошибка незавершенной операции сохранения все равно продолжает появляться, это означает, что физическая целостность файла восстановлена, но логическая структура метаданных нарушена. Рассмотрим пошаговый алгоритм решения проблемы, который помог автору темы реанимировать базу:

Шаг 1. Подготовка окружения и очистка кэша

Перед началом любых манипуляций обязательно сделайте копию поврежденного файла 1Cv8.1CD! Каждый раз перед проверкой работоспособности базы полностью удаляйте её из списка баз в стартовом окне 1С и добавляйте заново. В противном случае платформа будет обращаться к старому кэшу базы в локальных папках пользователя, и вы будете постоянно видеть «Ошибку формата потока», даже если сама база уже исправлена.

Шаг 2. Понижение версии формата базы данных

Для прямого редактирования таблиц нам потребуется утилита Tool_1CD. Однако старые и наиболее стабильные версии этой программы (например, 0.3.1 alpha) не умеют корректно работать со структурой файлов современных версий платформ 8.3. Поэтому нам необходимо временно понизить версию формата файла базы данных.

Для этого воспользуемся встроенной в платформу утилитой cnvdbfl.exe (или автоматизируем процесс через «Обновлятор 1С»):

  1. Преобразуем поврежденный файл базы данных в формат версии 8.3.8.
  2. Затем выполняем конвертацию в формат версии 8.2.14.

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

Шаг 3. Подготовка «донорских» таблиц из архивной копии

Поскольку у нас есть архивный бэкап месячной давности, его конфигурация отличается от той, которая была на момент сбоя. Чтобы вернуть базу в работоспособное состояние, нам нужно взять работоспособную конфигурацию из бэкапа и внедрить её в сломанную базу. При этом все документы за последний месяц, которые уже были внесены пользователями, останутся нетронутыми в таблицах документов битой базы.

  1. Обновляем конфигурацию нашей архивной копии до той версии, на которую мы пытались обновиться в сломанной базе (или до версии, которая предшествовала сбою).
  2. Конвертируем файл архивной базы данных аналогичным образом в формат 8.2.14.
  3. Открываем файл архивной базы в утилите Tool_1CD. Находим таблицы CONFIG, CONFIGSAVE и таблицу поврежденного справочника (в случае автора это была _Reference73).
  4. Для каждой из этих таблиц вызываем команду «Экспорт текущей таблицы» и сохраняем их структуру и данные в виде внешних файлов.

Шаг 4. Импорт таблиц в поврежденную базу

  1. Открываем файл поврежденной базы данных (уже сконвертированный в формат 8.2.14) в программе Tool_1CD.
  2. Выбираем таблицы CONFIG, CONFIGSAVE, а также поврежденный справочник _Reference73.
  3. Для каждой таблицы вызываем команду «Импорт текущей таблицы» и загружаем ранее экспортированные файлы из архивного «донора». Таким образом, мы заменяем поврежденные метаданные на заведомо рабочие и очищаем зависшие таблицы изменений.

Шаг 5. Обратная конвертация и запуск

После успешной замены таблиц преобразуем файл базы данных обратно в актуальный формат платформы 8.3 через утилиту cnvdbfl.exe. Добавляем базу в список и запускаем в режиме Конфигуратора. Программа успешно откроется и предложит завершить обновление или выполнить реструктуризацию данных. Выполняем обновление в режиме предприятия. Документы, счета и накладные за последний месяц спасены!

---

Способ 2. Альтернативное быстрое восстановление (без конвертации формата)

Если вы не хотите выполнять трудоемкую операцию по конвертации файлов базы «туда-обратно», существует альтернативный вариант точечного ремонта таблиц. Его можно выполнить непосредственно в файле базы данных с помощью современных HEX-редакторов или утилит, поддерживающих чтение и запись новых форматов 1Cv8.1CD.

Для восстановления логической целостности и сброса зависшей транзакции обновления достаточно выполнить два действия:

  1. Полностью очистить содержимое таблицы CONFIGSAVE (удалить все записи).
  2. В таблице CONFIG найти и удалить строки, в которых в колонке имени файла (FileName) содержатся служебные значения:
    • commit
    • dynamicCommit
    • dbStruFinal

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

---

Устранение ошибки «Ошибка формата потока»

Если база данных не открывается даже в конфигураторе, выдавая ошибку формата потока, применим следующие административные меры:

---

Почему ошибка «Файл базы данных поврежден» возникает на всех базах при тестировании

Бывают ситуации (как у автора темы в сообщении №40), когда при запуске тестирования и исправления (на этапе реструктуризации) абсолютно все базы данных на компьютере — даже архивные бэкапы и базы других конфигураций (например, ЗУП) — начинают аварийно завершаться с ошибкой «Файл базы данных поврежден».

Выясним причины такого аномального поведения системы:

  1. Антивирусная блокировка файлов во временных директориях. При реструктуризации таблиц 1С создает огромное количество временных файлов в каталоге %TEMP%. Антивирусное ПО или встроенный Защитник Windows блокируют эти файлы для сканирования «на лету». Монопольный процесс записи базы прерывается, что СУБД 1С расценивает как повреждение файла. Перед запуском тяжелых процедур тестирования обязательно добавляйте папки с базами и процессы 1С в исключения антивируса либо временно отключайте его.
  2. Ограничение 32-разрядного клиента платформы. Реструктуризация требует больших объемов оперативной памяти. 32-битный клиент 1С (даже на 64-битной Windows) физически не может адресовать более 2-4 ГБ оперативной памяти. Как только лимит превышен, процесс аварийно завершается, разрушая структуру файла. Для проведения реструктуризации крупных файловых баз обязательно используйте 64-битную версию платформы 1С.
  3. Нехватка дискового пространства. Процесс реструктуризации создает временную копию таблиц базы данных. На диске, где расположена база, а также на системном диске C: должно быть свободное место, превышающее размер самой базы минимум в 2–3 раза.
  4. Работа с базой по сети (протокол SMB). Если файлы баз данных лежат на сетевом диске или в общей папке другого компьютера, выполнять реструктуризацию категорически запрещено! Малейшая микросекундная сетевая задержка приведет к потере пакетов и повреждению базы. Перенесите базу на локальный быстрый диск (желательно SSD) и только после этого запускайте тестирование.

---

Правильный перенос данных XML: сохраняем связи между документами

Если повреждения базы оказались слишком серьезными и запустить её не удается, единственным выходом остается перенос документов за упущенный период (например, за последний месяц) из сломанной базы в восстановленную архивную копию с помощью обработки ВыгрузкаЗагрузкаДанныхXML.epf.

Однако при обычном переносе документов «по отдельности» (например, если отдельно выгрузить только счета, а затем только платежки) внутренние связи между ними могут разорваться. В результате платежное поручение больше не будет ссылаться на счет, а реализация — на документ-основание.

Рассмотрим, как правильно настроить выгрузку, чтобы не потерять ссылочную целостность:

Настройка выгрузки связанных объектов

При использовании обработки ВыгрузкаЗагрузкаДанныхXML на этапе экспорта данных в обязательном порядке установите флаг «Выгружать связанные объекты по ссылкам» (или аналогичную настройку субконто в зависимости от версии обработки).

В этом случае при выгрузке документа «Платежное поручение» система автоматически проанализирует все его реквизиты, найдет связанный объект «Счет на оплату» и выгрузит его уникальный идентификатор (GUID). При загрузке в чистую базу 1С не просто создаст документы заново, а сохранит оригинальные GUID, благодаря чему все перекрестные ссылки восстановятся автоматически.

Проанализируем пример кода на встроенном языке 1С, который иллюстрирует, как платформа осуществляет поиск и сопоставление объектов по уникальным идентификаторам (GUID) при XML-обмене:


// Пример программного сопоставления объектов по GUID
УникальныйИдентификатор = Новый УникальныйИдентификатор(СтрокаGUIDИзФайла);
СсылкаНаДокумент = Документы.СчетНаОплатуПокупателю.ПолучитьСсылку(УникальныйИдентификатор);

// Проверяем, существует ли уже такой документ в базе данных
Если СсылкаНаДокумент.ПолучитьОбъект() = Неопределено Тогда
    // Если объект не найден, создаем новый с предопределенным GUID
    НовыйДокумент = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
    НовыйДокумент.УстановитьСсылкуНового(СсылкаНаДокумент);
    НовыйДокумент.Записать();
КонецЕсли;

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

← На главную