Ситуация, когда информационная база 1С перестает запускаться в пользовательском режиме с критической ошибкой формата потока, является одной из самых неприятных в практике администратора или программиста. Часто стандартные методы, такие как очистка клиентского кэша или тестирование и исправление (ТиИ), не приносят результата. Проблема может крыться глубоко в структурах данных расширений, которые система пытается инициализировать при старте. Если штатное удаление расширений через Конфигуратор невозможно из-за той же ошибки, нам приходится прибегать к низкоуровневой работе с СУБД.
В этой статье мы подробно разберем, как принудительно очистить данные о расширениях непосредственно в SQL-базе, рассмотрим структуру системных таблиц 1С и изучим сопутствующие методы реанимации системы.
Прежде чем переходить к радикальным мерам, проанализируем ситуацию. Ошибка формата потока означает, что платформа 1С ожидает получить данные в определенном формате, но встречает некорректную последовательность байтов. Когда это происходит на этапе загрузки системы, виновником часто становятся расширения конфигурации (включая автоматические патчи от фирмы 1С, которые по сути являются расширениями с префиксом EF_). Если данные в таблицах, хранящих бинарный состав расширений или информацию об их регистрации, повреждены, запуск «Предприятия» становится невозможным.
Первым делом рассмотрим наиболее эффективный способ, который помог пользователям в обсуждении. Таблица _ExtensionsInfo содержит список всех расширений, подключенных к информационной базе. Если мы очистим эту таблицу, система «забудет» о наличии расширений и попытается запуститься без них.
Рассмотрим порядок действий для MS SQL Server. Выполним следующий SQL-запрос, предварительно выбрав нужную базу данных:
USE [Имя_Вашей_Базы]
GO
DELETE FROM [dbo].[_ExtensionsInfo]
GO
Важно: этот метод фактически отключает регистрацию расширений. Сами двоичные данные расширений могут остаться в других таблицах, но система перестанет обращаться к ним при запуске, что позволит войти в базу и провести дальнейшую диагностику.
Если предыдущий шаг не помог, проанализируем состояние системных таблиц ConfigCAS и ConfigCASSave. Эти таблицы (Configuration Alternative Storage) предназначены специально для хранения бинарных данных конфигураций расширений. Ошибка формата потока может возникать именно при чтении этих данных.
Для полной очистки следов расширений используем оператор TRUNCATE, который быстрее и эффективнее удаляет все записи из таблиц:
USE [Имя_Вашей_Базы]
GO
TRUNCATE TABLE ConfigCAS
TRUNCATE TABLE ConfigCASSave
GO
После выполнения этих команд база данных будет полностью очищена от программного кода всех расширений. Это гарантированно уберет влияние битых патчей или некорректно загруженных доработок.
Если ваша база работает под управлением PostgreSQL, необходимо учитывать специфику синтаксиса этой СУБД. Имена таблиц в PostgreSQL, созданные платформой 1С, чувствительны к регистру, поэтому их нужно заключать в двойные кавычки. Рассмотрим пример запроса для PostgreSQL:
-- Очистка основной таблицы информации
DELETE FROM "public"."_ExtensionsInfo";
-- Полная очистка бинарных данных расширений
TRUNCATE TABLE "public"."ConfigCAS";
TRUNCATE TABLE "public"."ConfigCASSave";
После удаления записей в PostgreSQL рекомендуется выполнить команду VACUUM FULL для соответствующей таблицы или всей базы, чтобы физически высвободить место и перестроить индексы, так как 1С крайне чувствительна к целостности индексных файлов в этой среде.
Выясним еще одну важную деталь: очистка таблиц в SQL может не помочь, если поврежденный скомпилированный код расширения застрял в кэше сервера 1С:Предприятие. Сервер хранит временные данные расширений в своей служебной директории (обычно это srvinfo).
Выполним следующие шаги по шагам:
C:\Program Files\1cv8\srvinfo на Windows или /home/usr1cv8/.1cv8/1C/1cv8/ на Linux).snacc и extsnc. Именно в них сервер кэширует данные расширений.После этих манипуляций сервер будет вынужден заново инициализировать структуру расширений, обращаясь к очищенным (или пустым) таблицам SQL, что устранит конфликт форматов.
Проанализируем ситуацию: что делать, если мы не хотим сразу удалять данные из SQL, а хотим просто проверить, в расширениях ли дело? Для этого в платформе предусмотрен специальный ключ запуска. Мы можем добавить его в дополнительные параметры в окне запуска 1С или прописать в строке подключения.
Используем ключ: /DisableStartupExtensions
При использовании этого параметра система проигнорирует все расширения при запуске. Если база откроется успешно, значит, проблема точно в одном из расширений. После этого можно попытаться зайти в раздел Администрирование — Обслуживание — Исправление ошибок (Патчи) или в Управление расширениями в Конфигураторе и удалить проблемный объект штатно.
Как было замечено в обсуждении, даже в «1С:Бухгалтерия Базовая» могут присутствовать расширения — чаще всего это автоматические исправления (патчи). Если такая база была перенесена в клиент-серверный вариант (например, для целей восстановления или доработки), механизм работы с таблицами SQL остается идентичным. Помните, что перед любыми операциями с таблицами через DELETE или TRUNCATE обязательно создание резервной копии средствами СУБД (создание .bak файла или дампа).
Рассмотрим краткий итог наших действий. Для восстановления работоспособности при «Ошибке формата потока» мы последовательно проверяем запуск без расширений (параметр /DisableStartupExtensions), затем очищаем регистрационную таблицу _ExtensionsInfo, и в самом крайнем случае — обнуляем бинарные хранилища ConfigCAS. Сочетание этих действий с очисткой серверных папок snacc и extsnc позволяет восстановить доступ к базе в 99% случаев повреждения метаданных расширений.