При обновлении платформы 1С с устаревших версий (например, 8.3.10) на современные релизы 8.3.15 или 8.3.16 в связке конфигураций УНФ + CRM часто возникает специфическая проблема: ошибка формата потока. Ситуация осложняется тем, что стандартное «Тестирование и исправление» (ТиИ) находит неразрешимые ссылки, рапортует об их очистке, но при повторном запуске они появляются снова. Проанализируем причины этого поведения и разберем пошаговый алгоритм восстановления работоспособности базы.
Ошибка формата потока сигнализирует о том, что платформа не может десериализовать (прочитать) бинарные данные из базы или временного хранилища. Разберем основные ситуации, когда это происходит в контексте обновления:
ХранилищеЗначения могут конфликтовать со старыми записями.Простая очистка папок AppData зачастую не помогает, так как часть настроек хранится непосредственно в базе данных. Выясним, как полностью обнулить контекст сеанса:
Во-первых, удалим базу из списка в окне запуска и добавим её заново. Это принудительно очистит локальный кэш конфигурации и идентификаторы сеанса. Во-вторых, необходимо очистить серверный кэш, если используется клиент-серверный вариант.
Рассмотрим порядок действий на сервере 1С:
srvinfo (обычно это C:\Program Files\1cv8\srvinfo).snccntx. Там хранятся данные сеансов, которые часто являются источником ошибки формата потока.*.log в рабочем каталоге базы на сервере.Если под новым пользователем база запускается без ошибок, значит причина кроется в таблице системных настроек (_SystemSettings). Выполним очистку настроек для «проблемного» пользователя программным способом. Для этого можно использовать консоль кода или внешнюю обработку:
Процедура ОчиститьНастройкиПользователя(ВыбранныйПользователь)
// Очистка настроек интерфейса
ХранилищеСистемныхНастроек.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
// Очистка настроек форм
ХранилищеОбщихНастроек.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
// Очистка настроек пользователя в модуле CRM
ХранилищеНастроекДанныхФорм.Удалить(Неопределено, Неопределено, ВыбранныйПользователь);
КонецПроцедуры
Важный момент: В старых версиях CRM от Рарус настройки АРМ могут храниться в специализированных регистрах сведений. Проанализируем структуру конфигурации на наличие регистров, содержащих в названии CRM и Настройки. Записи в таких регистрах, связанные с GUID пользователя, также следует удалить.
Если ТиИ постоянно находит одни и те же битые ссылки, хотя вы выбрали режим «Очищать ссылки», это указывает на повреждение индексов. Платформа видит запись в индексе, но не может корректно обработать её в самой таблице. Посмотрим на алгоритм исправления через инструменты SQL Server Management Studio (SSMS):
DBCC CHECKDB ('Имя_Вашей_Базы') WITH NO_INFOMSGS;
SINGLE_USER и запустим исправление:
ALTER DATABASE [Имя_Вашей_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('Имя_Вашей_Базы', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [Имя_Вашей_Базы] SET MULTI_USER;
В версиях платформы 8.3.15+ произошли значительные изменения в механизме расширений. Проанализируем ситуацию: если у вас подключены расширения, они могут конфликтовать с основной конфигурацией после обновления платформы. Рассмотрим действия:
/IBCheckAndRepair -Reconstruct или простое изменение любого реквизита в метаданных (например, добавление пробела в описание) с последующим обновлением конфигурации базы данных..dt и загрузку обратно. В процессе выгрузки 1С выполняет глубокую проверку структуры потоков данных, и если ошибка произойдет в этот момент, вы получите имя конкретной таблицы, на которой происходит сбой.Для связки УНФ 1.6.15 и CRM 3.0 критически важно соблюдать режим совместимости, установленный разработчиком. Если вы обновили платформу, но не планируете обновлять конфигурацию в ближайшее время, убедитесь, что в свойствах корня конфигурации стоит режим совместимости, соответствующий исходному релизу (например, 8.3.12 или 8.3.14). Посмотрим, как это влияет: при установке режима «Не использовать» новая платформа применяет более строгие правила к XML-сериализации, что и приводит к Ошибка формата потока в старых объектах.
Резюмируем: Основной путь решения при данной ошибке — это переход от общего «исправления базы» к точечной очистке настроек конкретных пользователей в _SystemSettings и восстановление физической целостности индексов на уровне СУБД. В 90% случаев создание нового пользователя (физического объекта в справочнике Пользователи) и перенос в него прав решает проблему для конкретного рабочего места.