Реальный кейс обхода ошибки «Ошибка формата потока»
|
Денис Булыжный
Архитектор / Тренер по разработке в 1С компании «Синимекс», стаж работы в ИТ по направлению 1С - более 27 лет
Ошибка "Ошибка формата потока" может возникать в том случае, когда один или несколько файлов внутреннего представления объектов метаданных (хранятся в таблице сonfig СУБД) имеют неправильную структуру (повреждены).
|
С ошибкой «Ошибка формата потока» как разработчики, так и пользователи 1С встречаются достаточно регулярно.
При этом, какого-то единого варианта обхода данной ошибки до сих пор не существует, кроме стандартных рекомендаций по использованию штатных механизмов тестирования и исправления ИБ.
Недавно и я столкнулся с данной ошибкой у нашего заказчика - при попытке обновить конфигурацию 1С:Комплексная автоматизация с релиза 2.5.22.124 на релиз 2.5.22.134, после нажатия на кнопку «Ок» в окне сравнения/объединения конфигураций, возникала ошибка «Ошибка формата потока»:
Анализ полного технологического журнала ситуацию не прояснил:
На сервере:
На клиенте:
Также было выяснено, что подобная ошибка возникает и при выгрузке конфигурации в файлы. Это навело на окончательно решение по данному кейсу.
Следующую последовательность действий по обходу указанной выше ошибки можно рассматривать как достаточно универсальное решение.
1. Находясь в конфигураторе ИБ, в которой возникает ошибка «Ошибка формата потока» производим выгрузку конфигурации в файлы:
2. После возникновения ошибки «Ошибка формата потока», в каталоге, указанном в п.1 находим последний сформированный по времени файл (в каталогах типов объектов метаданных) - он как раз и будет файлом проблемного объекта:
В нашем случае - это файл ДрайверМертехРаспознавательMertechAI.xml
3. Открыв это файл в любом текстовом редакторе, мы увидим, что он некорректно заканчивается - нет закрывающих тегов:
Для примера, нормальный файл должен выглядеть так:
4. Таким образом, мы смогли достаточно быстро определить проблемный объект - это общий макет ДрайверМертехРаспознавательMertechAI. Проверить это достаточно просто - при копировании данного объекта в буфер обмена (Ctrl+C) возникает ошибка «Ошибка формата потока»:
Теперь нужно «исправить» проблемный объект. Для этого, достаточно заменить его на корректный объект сравнением/объедением конфигураций.
Для этого открываем окно сравнения/объединения с текущей конфигурацией поставщика (возьмем нормальный объект из нее):
Затем устанавливаем флажок только на одном объекте - на проблемном общем макете ДрайверМертехРаспознавательMertechAI и нажимаем «Выполнить»:
Далее сохраняем основную конфигурацию и обновляем конфигурацию базы данных.
После проделанных манипуляций, обновление на новый релиз конфигурации проходит успешно.
Из вышесказанного можно сделать следующие выводы:
- Ошибка «Ошибка формата потока» может возникать в том случае, когда один или несколько файлов внутреннего представления объектов метаданных (хранятся в таблице сonfig СУБД) имеют неправильную структуру (повреждены).
- Для выявления проблемных (поврежденных) объектов можно воспользоваться предложенной выше методикой.
- Последовательность действий в каждом конкретном случае может отличаться от предложенной, но сама идея исправления при этом останется неизменной - выявление проблемных объектов и их корректировка посредством сравнения/объединения конфигураций.