Ошибка формата потока данных — это одна из самых «неприятных» и неинформативных проблем в экосистеме 1С. Она может возникнуть внезапно: при запуске системы, в процессе обновления конфигурации или при выгрузке базы данных. В данной статье мы подробно разберем, как бороться с этой напастью, основываясь на практическом опыте специалистов и глубоком анализе механизмов платформы.
Прежде всего, нам необходимо понять, что Ошибка формата потока означает повреждение структуры данных, которые платформа пытается прочитать из файла или таблицы базы данных. Это не логическая ошибка в коде, а физическое или структурное несоответствие. Рассмотрим ситуацию, когда ошибка возникает при «прыжке» через несколько релизов (например, с версии 3.0.75 сразу на актуальную). Платформа выполняет реструктуризацию множества таблиц, и если на каком-то этапе данные оказываются «битыми», процесс прерывается.
Прежде чем переходить к радикальным мерам, выполним базовый набор действий, который помогает в 70% случаев. Проанализируем состояние информационной базы:
%AppData%\Local\1C\1cv8 и %AppData%\Roaming\1C\1cv8.bin установленной платформы.Если эти шаги не помогли, значит, проблема лежит глубже — в самих метаданных конфигурации.
Рассмотрим ситуацию, когда основная конфигурация в порядке, но повреждена конфигурация поставщика. Это часто случается при некорректных обновлениях в прошлом. Чтобы выяснить это, попробуем следующий алгоритм:
Создадим пустую базу той же версии, что и наша текущая (до обновления). Выгрузим из нее конфигурацию поставщика в файл .cf. Затем в нашей рабочей базе выполним «Конфигурация — Сравнить, объединить с конфигурацией из файла». Если при сравнении возникнет та же ошибка, значит, проблема в объектах основной конфигурации.
Если же ошибка возникает на конкретном объекте (например, на драйвере в общих макетах), попробуем выгрузить конфигурацию в файлы. Этот метод позволяет точечно найти «битый» двоичный объект:
В конфигураторе выберем пункт «Конфигурация — Выгрузить конфигурацию в файлы...». Посмотрим, на каком именно объекте процесс прервется. Если это макет или картинка, их можно просто удалить и заменить аналогичными из чистой типовой конфигурации.
Проанализируем влияние расширений. В современных версиях 1С расширения могут конфликтовать с основной конфигурацией в момент реструктуризации. Рекомендуем полностью удалить все расширения перед выполнением сложного обновления. Также стоит исключить последствия так называемого «демона» — динамического обновления.
При динамическом обновлении в таблице Config могут накопиться несоответствия. Для «лечения» в клиент-серверном варианте можно попробовать очистить таблицу ConfigSave:
-- Внимание! Выполнять только на копии базы!
DELETE FROM ConfigSave
Это удалит все непринятые изменения конфигурации, которые могли блокировать корректное обновление.
Автор исходной проблемы столкнулся с ошибкой при загрузке данных через XML. Это часто связано с тем, что в новых релизах БП 3.0 изменились механизмы работы с предопределенными элементами. Разберем, как это обойти:
В свойствах корневого объекта конфигурации найдем параметр Обновление предопределенных данных. Установим его в значение «Не обновлять автоматически». После успешного обновления конфигурации базы данных это значение можно будет вернуть назад и запустить обновление программно.
Если ошибка формата потока не дает даже войти в базу, выясним причину с помощью Технологического журнала (ТЖ). Создадим файл logcfg.xml в папке настроек платформы и добавим в него настройки для отслеживания ошибок EXCP. Рассмотрим пример минимального конфига:
<config xmlns="http://v8.1c.ru/7.4/config/logcfg">
<log location="C:\LOGS\1C" history="2">
<event>
<eq property="Name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
После воспроизведения ошибки проанализируем файлы логов. В них часто указывается конкретная таблица базы данных (например, _InfoRg... или _Document...), при обращении к которой происходит сбой. Это позволит нам понять, какой объект метаданных поврежден.
Когда штатный chdbfl.exe бессилен, на помощь приходят сторонние инструменты, такие как Tool_1CD. С ее помощью можно открыть файл .1CD и проверить, открываются ли таблицы напрямую. Часто бывает, что повреждена таблица Params или системные таблицы настроек пользователей. Удаление проблемных записей в этих таблицах (с последующим тестированием и исправлением) часто «оживляет» базу.
Подводя итог, можно составить следующий чек-лист действий:
Помните, что любые манипуляции с SQL-таблицами или утилитами низкоуровневого редактирования должны проводиться только при наличии актуальной резервной копии. Ошибка формата потока данных — это сигнал о том, что структура базы данных нестабильна, и наша главная задача — вернуть ее в типовое состояние перед тем, как вносить новые изменения.