Динамическое обновление (в среде разработчиков часто называемое «демоническим») — это удобный инструмент, позволяющий вносить изменения в конфигурацию без выгона пользователей. Однако цена этого удобства иногда бывает слишком высокой. Одной из самых неприятных проблем является «Ошибка формата потока», которая возникает при попытке открыть конфигурацию сразу после такого обновления. При этом сама программа «1С:Предприятие» может продолжать работать, но внести любые правки становится невозможно.
В данной статье мы подробно разберем причины возникновения этой ситуации и рассмотрим пошаговые алгоритмы восстановления работоспособности конфигуратора, начиная от простых команд и заканчивая прямым манипулированием таблицами на SQL-сервере.
Прежде чем приступать к «лечению», проанализируем ситуацию. Ошибка формата потока чаще всего свидетельствует о нарушении логической целостности внутренних структур данных конфигурации. В момент динамического обновления платформа создает временные записи в таблице ConfigSave, которые затем должны быть перенесены в основную таблицу Config. Если в этот момент происходит сетевой сбой, нехватка памяти или ошибка кэширования на сервере 1С, записи в BLOB-полях SQL-таблиц могут оказаться поврежденными или незавершенными.
В платформе 8.3.14 (и ряде других релизов) подобные сбои часто связаны с некорректной работой рабочих процессов rphost с кэшем метаданных. Конфигуратор видит, что есть незавершенное обновление, пытается его прочитать, натыкается на «битый» поток данных и выдает ошибку.
Первым делом попробуем самый безопасный метод — откат к конфигурации базы данных. Поскольку конфигуратор дает зайти в базу, но не дает открыть саму конфигурацию, мы можем воспользоваться специальным ключом запуска 1С.
Рассмотрим порядок действий:
"C:\Program Files\1cv8\8.3.14.1779\bin\1cv8.exe" DESIGNER /S "ИмяСервера\ИмяБазы" /N "Логин" /P "Пароль" /RollbackCfg
Параметр /RollbackCfg инициирует возврат основной конфигурации к состоянию конфигурации базы данных, фактически отменяя все изменения, которые привели к ошибке формата потока. Это самый мягкий способ решения проблемы.
Если штатный откат не помог, значит, проблема зафиксировалась в таблице ConfigSave. Даже если визуально через SELECT она кажется пустой, в ней могут оставаться скрытые транзакционные записи или индексы, мешающие работе. Проанализируем ситуацию и выполним очистку этой таблицы.
Разберем выполнение скрипта в среде SQL Server Management Studio (SSMS):
USE [ИМЯ_ВАШЕЙ_БАЗЫ]
TRUNCATE TABLE ConfigSave
Команда TRUNCATE полностью очищает таблицу и сбрасывает счетчики. Часто именно после этой операции конфигуратор «приходит в чувство» и позволяет открыть основную конфигурацию, так как он перестает видеть попытку незавершенного обновления.
Если предыдущие методы не принесли успеха, ситуация серьезнее: повреждена основная таблица Config. В этом случае нам потребуется актуальный бэкап этой же базы (в котором конфигурация открывается исправно).
Рассмотрим по шагам процесс переноса здоровой конфигурации в поврежденную базу:
Work_Backup).Corrupted_Base) выполните очистку и перенос данных из бэкапа:
-- Очищаем текущую конфигурацию
DELETE FROM [Corrupted_Base].[dbo].[Config]
-- Загружаем здоровую конфигурацию из бэкапа
INSERT INTO [Corrupted_Base].[dbo].[Config]
SELECT * FROM [Work_Backup].[dbo].[Config]
-- Аналогично поступаем с таблицей параметров (там хранятся настройки метаданных)
DELETE FROM [Corrupted_Base].[dbo].[Params]
INSERT INTO [Corrupted_Base].[dbo].[Params]
SELECT * FROM [Work_Backup].[dbo].[Params]
Важный момент: таблицы Config и Params должны быть полностью идентичны по структуре, поэтому базы должны быть одного релиза платформы. Этот метод позволяет восстановить работоспособность без потери данных, введенных пользователями в режиме «Предприятие» за время сбоя.
Иногда ошибка формата потока — это фантом, живущий в памяти сервера 1С. Даже если вы исправили данные в SQL, rphost может продолжать отдавать «битую» версию из своего кэша. Посмотрим, как правильно выполнить полную очистку.
Проанализируем алгоритм действий на сервере:
C:\Program Files\1cv8\srvinfo).snccntx (сеансовые данные) и reg_1cv8 внутри папки базы.Local\1C\1cv8 и Roaming\1C\1cv8).В редких случаях динамическое обновление приводит к появлению записей-дублей. Платформа ожидает, что для каждого файла конфигурации существует только одна запись, но из-за сбоя их может стать две. Разберем, как их найти.
Используйте следующий SQL-запрос для поиска подозрительных записей:
SELECT FileName, COUNT(*)
FROM Config
GROUP BY FileName
HAVING COUNT(*) > 1
Если запрос вернул строки, это явная причина ошибки формата потока. Потребуется аккуратно удалить более старые версии записей, оставив только актуальные для каждого FileName.
Проанализировав проблему, мы можем составить список правил, которые минимизируют риск повторения ситуации в будущем:
1. Отказ от динамического обновления в крупных базах. Для ERP-систем рекомендуется проводить обновления только в монопольном режиме.
2. Перезагрузка рабочих процессов. Если динамическое обновление неизбежно, перед ним стоит перезапустить процессы rphost или настроить их автоматический перезапуск по достижению определенного объема памяти.
3. Использование хранилища конфигурации. При разработке в команде всегда используйте хранилище — это позволит быстро восстановить .cf файл даже при полном крахе таблицы Config.
Подводя итог, можно сказать, что «Ошибка формата потока» — это не приговор для базы данных. В большинстве случаев она лечится очисткой таблицы ConfigSave или откатом через командную строку. Главное — всегда иметь под рукой свежий бэкап и не забывать про очистку кэша не только на стороне клиента, но и на стороне сервера 1С.