Ошибка формата потока — одна из самых неприятных и «пугающих» проблем, с которой может столкнуться разработчик или администратор 1С. Особенно критично это выглядит в клиент-серверном варианте (MS SQL), когда стандартные утилиты вроде chdbfl.exe оказываются бесполезными. В данной статье мы подробно разберем ситуацию, когда ошибка возникает не при входе, а непосредственно в процессе разработки — при сохранении конфигурации, и выясним, как восстановить работоспособность базы, не потеряв при этом последние изменения.
Для начала проанализируем, что именно происходит под капотом системы. В клиент-серверном варианте вся конфигурация хранится внутри базы данных SQL в виде бинарных данных (потоков) в специальных системных таблицах. Ошибка формата потока означает, что платформа 1С при чтении данных из этих таблиц ожидает увидеть структуру определенного типа, но встречает поврежденные или логически некорректные данные. Рассмотрим основные таблицы, которые отвечают за хранение конфигурации:
Config при выполнении обновления конфигурации базы данных (F7).Если сбой происходит в момент сохранения, скорее всего, «поток» данных в таблице ConfigSave оказался разорван или записан не полностью. В такой ситуации база может перестать пускать пользователей даже в «Конфигуратор».
Прежде чем приступать к «хирургическим» методам, проанализируем состояние самой СУБД. Выясним, нет ли физических повреждений в базе данных SQL. Для этого запустим проверку целостности через SQL Server Management Studio (SSMS):
DBCC CHECKDB ('Имя_Вашей_Базы');
Если команда завершилась успешно (Command(s) completed successfully), значит, на уровне файловой системы SQL всё в порядке, и проблема кроется именно в логическом содержимом таблиц 1С. Это подтверждает, что мы имеем дело с типичным «самострелом» платформы.
Рассмотрим стандартный, но обязательный этап. Иногда платформа кэширует «битый» поток на стороне сервера 1С. Разберем, как правильно почистить кэш в серверном варианте:
1C:Enterprise 8.3 Server Agent (v8srvc).srvinfo (по умолчанию это C:\Program Files\1cv8\srvinfo).snccntx и config. Важно: делайте это только при остановленной службе!%AppData%\1C\1cv8).Если после этих действий ошибка сохраняется, переходим к работе с таблицами базы данных.
Как мы выяснили, ошибка при сохранении конфигурации чаще всего связана с таблицей ConfigSave. Поскольку это таблица для «черновика» конфигурации, её очистка обычно не приводит к фатальным последствиям для данных (вы просто откатитесь к состоянию конфигурации на момент последнего успешного нажатия F7). Рассмотрим алгоритм действий:
Сначала проверим содержимое таблицы. Выполним запрос в SSMS:
SELECT * FROM [dbo].[ConfigSave]
Если запрос возвращает несколько строк (например, от 1 до 20), это подтверждает наличие незавершенных изменений. Проанализируем ситуацию: если именно в этих строках содержится ошибка формата, их нужно удалить. Выполним безопасную очистку:
DELETE FROM [dbo].[ConfigSave]
После выполнения этой команды попробуйте снова зайти в «Конфигуратор». В большинстве случаев проблема будет решена, так как система при отсутствии записей в ConfigSave просто обратится к основной таблице Config.
В редких случаях сбой может затронуть и основную таблицу Config. Одной из причин ошибки формата потока является появление дублирующихся имен файлов внутри конфигурации. Платформа ожидает уникальности в поле FileName. Разберем, как найти такие дубли:
SELECT FileName, COUNT(*)
FROM Config
GROUP BY FileName
HAVING COUNT(*) > 1
Если запрос вернул строки, значит, произошла ошибка транзакции. В этом случае необходимо аккуратно удалить одну из дублирующихся записей, оставив ту, которая соответствует актуальному состоянию. Однако будьте крайне осторожны при ручном редактировании Config — всегда делайте бэкап средствами SQL перед такими операциями!
Выясним еще одну возможную причину. Существует системная настройка vrs-cache, которая хранит кэш описаний Web-сервисов и другие интерфейсные данные. Если этот поток поврежден, 1С также выдаст ошибку формата. Рассмотрим, как его сбросить:
DELETE FROM Params WHERE Name = 'vrs-cache'
Эта запись будет автоматически пересоздана платформой при следующем запуске, поэтому её удаление безопасно и часто помогает «оживить» базу, если чистка ConfigSave не дала результата.
Если ни один из методов выше не помог, нам необходимо выяснить, на каком именно объекте метаданных (форма, модуль, макет) происходит сбой. Для этого настроим Технологический журнал (ТЖ). Создадим файл logcfg.xml в папке conf на сервере со следующим содержимым:
<config xmlns="http://v8.1c.ru/7.4/get/logcfg">
<log location="C:\LOGS\1C" history="24">
<event>
<eq property="Name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
Проанализируем логи после возникновения ошибки. В событии EXCP часто можно найти имя конкретного файла метаданных, например, Reports.Продажи.Form.ФормаОтчета. Это позволит вам понять, какой именно объект поврежден, и попытаться заменить его или удалить через сравнение-объединение с чистой конфигурацией.
Подведем итоги. Ошибка формата потока в 1С на SQL — это почти всегда проблема бинарных данных в системных таблицах. Мы рассмотрели последовательный путь решения: от простой очистки кэша до радикального удаления записей из ConfigSave и Params. Главное правило: всегда делайте бэкап базы средствами MS SQL перед любыми DELETE-запросами к таблицам 1С. И помните, что регулярное использование Хранилища конфигурации значительно снижает риск потери наработок при подобных сбоях, так как вы всегда сможете восстановить структуру метаданных из хранилища в новую пустую базу.