Как исправить ошибку формата потока в 1С при работе в клиент-серверном варианте?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Ошибка формата потока — одна из самых неприятных и «пугающих» проблем, с которой может столкнуться разработчик или администратор 1С. Особенно критично это выглядит в клиент-серверном варианте (MS SQL), когда стандартные утилиты вроде chdbfl.exe оказываются бесполезными. В данной статье мы подробно разберем ситуацию, когда ошибка возникает не при входе, а непосредственно в процессе разработки — при сохранении конфигурации, и выясним, как восстановить работоспособность базы, не потеряв при этом последние изменения.

Анализируем ситуацию: почему возникает ошибка?

Для начала проанализируем, что именно происходит под капотом системы. В клиент-серверном варианте вся конфигурация хранится внутри базы данных SQL в виде бинарных данных (потоков) в специальных системных таблицах. Ошибка формата потока означает, что платформа 1С при чтении данных из этих таблиц ожидает увидеть структуру определенного типа, но встречает поврежденные или логически некорректные данные. Рассмотрим основные таблицы, которые отвечают за хранение конфигурации:

  1. Config — здесь хранится основная конфигурация базы данных, которая используется в режиме «Предприятие».
  2. ConfigSave — здесь находится промежуточная конфигурация, которую мы редактируем в «Конфигураторе». Именно в эту таблицу записываются изменения при нажатии кнопки «Сохранить» (дискетка), и именно отсюда данные переносятся в Config при выполнении обновления конфигурации базы данных (F7).

Если сбой происходит в момент сохранения, скорее всего, «поток» данных в таблице ConfigSave оказался разорван или записан не полностью. В такой ситуации база может перестать пускать пользователей даже в «Конфигуратор».

Шаг 1. Первичная диагностика и проверка целостности SQL

Прежде чем приступать к «хирургическим» методам, проанализируем состояние самой СУБД. Выясним, нет ли физических повреждений в базе данных SQL. Для этого запустим проверку целостности через SQL Server Management Studio (SSMS):

DBCC CHECKDB ('Имя_Вашей_Базы');

Если команда завершилась успешно (Command(s) completed successfully), значит, на уровне файловой системы SQL всё в порядке, и проблема кроется именно в логическом содержимом таблиц 1С. Это подтверждает, что мы имеем дело с типичным «самострелом» платформы.

Шаг 2. Очистка кэша на сервере и клиенте

Рассмотрим стандартный, но обязательный этап. Иногда платформа кэширует «битый» поток на стороне сервера 1С. Разберем, как правильно почистить кэш в серверном варианте:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent (v8srvc).
  2. Перейдем в каталог srvinfo (по умолчанию это C:\Program Files\1cv8\srvinfo).
  3. Найдем папку с GUID вашей базы данных и удалим внутри неё папки snccntx и config. Важно: делайте это только при остановленной службе!
  4. Удалим локальный кэш пользователя на рабочей станции (папки в %AppData%\1C\1cv8).

Если после этих действий ошибка сохраняется, переходим к работе с таблицами базы данных.

Шаг 3. Работа с таблицей ConfigSave (основное решение)

Как мы выяснили, ошибка при сохранении конфигурации чаще всего связана с таблицей ConfigSave. Поскольку это таблица для «черновика» конфигурации, её очистка обычно не приводит к фатальным последствиям для данных (вы просто откатитесь к состоянию конфигурации на момент последнего успешного нажатия F7). Рассмотрим алгоритм действий:

Сначала проверим содержимое таблицы. Выполним запрос в SSMS:

SELECT * FROM [dbo].[ConfigSave]

Если запрос возвращает несколько строк (например, от 1 до 20), это подтверждает наличие незавершенных изменений. Проанализируем ситуацию: если именно в этих строках содержится ошибка формата, их нужно удалить. Выполним безопасную очистку:

DELETE FROM [dbo].[ConfigSave]

После выполнения этой команды попробуйте снова зайти в «Конфигуратор». В большинстве случаев проблема будет решена, так как система при отсутствии записей в ConfigSave просто обратится к основной таблице Config.

Шаг 4. Поиск дублей в таблице Config

В редких случаях сбой может затронуть и основную таблицу Config. Одной из причин ошибки формата потока является появление дублирующихся имен файлов внутри конфигурации. Платформа ожидает уникальности в поле FileName. Разберем, как найти такие дубли:


SELECT FileName, COUNT(*) 
FROM Config 
GROUP BY FileName 
HAVING COUNT(*) > 1

Если запрос вернул строки, значит, произошла ошибка транзакции. В этом случае необходимо аккуратно удалить одну из дублирующихся записей, оставив ту, которая соответствует актуальному состоянию. Однако будьте крайне осторожны при ручном редактировании Config — всегда делайте бэкап средствами SQL перед такими операциями!

Шаг 5. Очистка системных настроек в таблице Params

Выясним еще одну возможную причину. Существует системная настройка vrs-cache, которая хранит кэш описаний Web-сервисов и другие интерфейсные данные. Если этот поток поврежден, 1С также выдаст ошибку формата. Рассмотрим, как его сбросить:

DELETE FROM Params WHERE Name = 'vrs-cache'

Эта запись будет автоматически пересоздана платформой при следующем запуске, поэтому её удаление безопасно и часто помогает «оживить» базу, если чистка ConfigSave не дала результата.

Шаг 6. Использование Технологического журнала для глубокого анализа

Если ни один из методов выше не помог, нам необходимо выяснить, на каком именно объекте метаданных (форма, модуль, макет) происходит сбой. Для этого настроим Технологический журнал (ТЖ). Создадим файл 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С. И помните, что регулярное использование Хранилища конфигурации значительно снижает риск потери наработок при подобных сбоях, так как вы всегда сможете восстановить структуру метаданных из хранилища в новую пустую базу.

← На главную