Типичная ситуация для администратора или программиста 1С: после очередного автоматического обновления патчей (оперативных исправлений) база данных перестает запускаться. При попытке входа в режиме «Предприятие» возникает «Ошибка формата потока», а Конфигуратор либо закрывается без объяснения причин, либо выдает сообщение «Файл базы данных поврежден» при любой попытке зайти в список расширений. Стандартные средства восстановления, такие как chdbfl.exe или «Тестирование и исправление», в этом случае часто оказываются бессильны, так как они не всегда корректно обрабатывают логические ошибки в системных таблицах расширений.
В данной статье мы подробно разберем, почему возникают такие ситуации, и изучим эффективные методы «хирургического» вмешательства в базу данных для удаления проблемных патчей.
Разберем ситуацию глубже. Патчи в 1С — это, по сути, те же расширения конфигурации, которые платформа скачивает и устанавливает автоматически. Ошибка часто происходит из-за сбоя сети в момент загрузки или конфликта версий платформы. В результате информация о расширении записывается в системные таблицы, но само «тело» расширения оказывается поврежденным. Когда конфигуратор пытается прочитать список расширений, он натыкается на битую ссылку в таблице и завершает работу с ошибкой потока.
Ключевая информация о расширениях хранится в нескольких таблицах базы данных:
_Extensions — здесь находятся двоичные данные самих расширений._ExtensionsInfo — содержит метаданные: версии, имена и признаки активности._ConfigAndExtensionsContents — отвечает за связь основной конфигурации с установленными исправлениями.Если стандартное удаление через интерфейс невозможно, нам придется очистить эти таблицы вручную.
Проанализируем самый сложный случай, когда база файловая, а Конфигуратор вылетает. Если утилита Tool1CD не позволяет редактировать вашу базу напрямую (что часто бывает с новыми версиями формата .1CD), мы можем прибегнуть к хитрости с понижением версии формата базы. Рассмотрим пошаговый алгоритм:
1Cv8.1CD. Очистите кэш базы и временные папки пользователя (папка Temp).chdbfl.exe. Даже если она не исправит ошибку потока, она может устранить физические повреждения страниц файла перед конвертацией.CNVDBFL.EXE. Это позволит открыть базу старыми инструментами редактирования таблиц. Выполним команду в командной строке:
CNVDBFL.EXE -с -f 8.2.14 "C:\MyBase\1Cv8.1CD"
Tool1CD (версией, поддерживающей редактирование). Нам необходимо найти таблицу _ExtensionsInfo и полностью удалить из нее все записи. Именно там хранятся ссылки на те самые «зависшие» патчи.
CNVDBFL.EXE -с -f 8.3.8 -p 16k "C:\MyBase\1Cv8.1CD"
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "C:\MyBase" /DeleteCfg -AllExtensions
Если ваша база работает на MS SQL Server или PostgreSQL, процесс значительно упрощается, так как нам не нужны сторонние утилиты для доступа к данным. Мы можем выполнить прямой SQL-запрос к базе данных. Проанализируем последовательность действий:
Зайдем в консоль управления сервером БД (например, SQL Server Management Studio) и выполним следующий скрипт (замените [ИмяБазы] на ваше название):
USE [ИмяБазы];
GO
-- Очищаем информацию о расширениях
DELETE FROM [_ExtensionsInfo];
DELETE FROM [_Extensions];
-- Очищаем связанные таблицы содержимого конфигурации
DELETE FROM [_ConfigAndExtensionsContents];
GO
Важный момент: после выполнения этих запросов в SQL необходимо обязательно перезапустить службу «Агент сервера 1С:Предприятие» (или как минимум удалить сеансы к этой базе), так как сервер 1С активно кэширует структуру расширений в своей оперативной памяти. После этого запустите базу в режиме Конфигуратора и выполните полное «Тестирование и исправление».
Выясним причину, почему патчи иногда «возвращаются» после удаления. Платформа 1С хранит загруженные исправления в локальных папках сервера или пользователя. Если база файловая, проверьте путь:
%LocalAppData%\1C\1cv8\<Уникальный_ID_базы>\ExtSrvcTs
Если в этой папке остались файлы, платформа будет пытаться подтянуть их при старте. Полностью удалите содержимое этой папки. Также полезно проверить каталог ConfigSave в папке профиля сервера 1С, если проблема наблюдается в клиент-серверном варианте.
Рассмотрим несколько нюансов, которые помогут избежать подобных проблем в будущем или решить их быстрее:
.dt и загрузить ее в пустую новую базу. В процессе загрузки платформа пересоздает системные индексы и таблицы, что иногда позволяет «отцепить» битые объекты.Подведем итог: наиболее надежным методом решения проблемы «неудаляемых» патчей является прямая очистка системной таблицы _ExtensionsInfo. Несмотря на то, что это считается вмешательством в структуру данных, в случаях с «Ошибкой формата потока» это зачастую единственный способ вернуть базу к жизни без потери данных основной конфигурации.