В процессе администрирования систем на базе «1С:Предприятие» технические специалисты нередко сталкиваются с необходимостью отката версии платформы на более старый, но стабильный релиз. Например, при переходе на новые ветки (такие как 8.3.18 и выше) могут обнаружиться критические баги отображения интерфейса, зависания сеансов или некорректная работа кастомных доработок. Однако попытка просто запустить базу данных на предыдущей версии платформы (например, 8.3.10 или 8.3.17) часто оборачивается аварийным завершением работы с сообщением «Ошибка формата потока». При этом база может отказываться даже регистрироваться в консоли кластера серверов 1С.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы платформы, приводящие к сбою, и рассмотрим пошаговые безопасные методы восстановления работоспособности базы данных как для клиент-серверного (SQL), так и для файлового вариантов работы.
Многие системные администраторы ошибочно полагают, что дело исключительно в локальном кэше или несовместимости режима совместимости конфигурации. На самом деле корень проблемы лежит гораздо глубже. Начиная с конца 2022 года фирма «1С» существенно ужесточила механизмы контроля лицензирования и защиты от несанкционированного использования программных продуктов. При запуске базы данных на новых релизах платформ активируется фоновый процесс проверки легальности. Если система обнаруживает следы эмуляторов или некорректно установленных лицензий, она выполняет скрытую модификацию системных таблиц базы данных.
В частности, в служебную таблицу Config записывается специальный маркер — файл под именем versions. Этот маркер содержит информацию о прохождении проверки и блокирует возможность работы на устаревших платформах, в которых эти защитные механизмы еще не были реализованы. Когда старая версия платформы (например, 8.3.10) обращается к СУБД, она пытается прочитать конфигурационные таблицы, натыкается на новые метаданные и неизвестные структуры, которые она не в состоянии интерпретировать. Итогом становится стандартное защитное исключение ядра — «Ошибка формата потока».
Также к ошибке могут приводить изменения структуры системных индексов и таблиц соответствия (например, DBSchema и Params), которые новые платформы перестраивают под свои нужды без возможности автоматического обратного преобразования.
Ниже мы рассмотрим практические варианты решения этой проблемы, начиная с самых безопасных и заканчивая радикальными методами.
Самый безопасный способ вернуть базу к жизни на старой платформе — это удалить исключительно те записи в СУБД, которые мешают чтению конфигурации старым ядром. Этот метод, в отличие от полной перезаписи таблиц из бэкапа, исключает потерю изменений в метаданных, внесенных за последнее время.
Выполним процедуру по шагам:
rphost.
-- Удаляем маркер защиты, не позволяющий старым платформам читать Config
DELETE FROM config WHERE filename = 'versions';
-- Очищаем системные файлы параметров, которые могут вызывать конфликт версий
DELETE FROM Files WHERE FileName = 'ib.pfl' OR FileName = '071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl';
-- Сбрасываем региональные настройки и параметры локали для предотвращения ошибок инициализации сеанса
DELETE FROM Params WHERE FileName = 'locale.inf';
После успешного выполнения запроса необходимо обязательно произвести очистку серверного кэша. Для этого перейдем в каталог служебных файлов сервера 1С (по умолчанию для Windows это C:\Program Files\1cv8\srvinfo) и удалим содержимое папки reg_1541 (за исключением конфигурационных файлов самого кластера), уделив особое внимание удалению папок с кэшем сеансов (директории вида snccntry и временные файлы внутри папки с UID вашей базы данных).
Теперь запустим службу сервера 1С:Предприятие и попробуем запустить базу в режиме Конфигуратора на старой платформе. База должна открыться штатно.
В обсуждении на форуме (сообщение №23) был предложен метод полной очистки таблиц конфигурации с их последующим импортом из копии базы данных, которая еще не запускалась на новой платформе. Рассмотрим этот метод подробнее, но сразу предупредим о рисках.
Важное предостережение: данный метод можно использовать только в том случае, если с момента перехода на новую платформу и до момента принятия решения об откате в конфигурацию рабочей базы не вносилось никаких изменений (не добавлялись новые реквизиты, документы, справочники). Если структура метаданных изменилась, а вы накатите таблицы Config и DBSchema из старого бэкапа, СУБД потеряет соответствие между физическими таблицами данных (где хранятся проводки и документы) и их описанием. Это приведет к полной и необратимой потере целостности базы данных!
Если вы уверены, что структура конфигурации не менялась, выполним следующие действия в SQL-редакторе:
-- Очищаем таблицы конфигурации и схемы данных в проблемной базе
TRUNCATE TABLE [dbo].[Config];
TRUNCATE TABLE [dbo].[ConfigSave];
TRUNCATE TABLE [dbo].[DBSchema];
TRUNCATE TABLE [dbo].[Params];
-- Заполняем их "чистыми" данными из предварительно развернутого бэкапа
INSERT INTO [dbo].[Config] SELECT * FROM [Имя_Базы_Бэкапа].[dbo].[Config];
INSERT INTO [dbo].[DBSchema] SELECT * FROM [Имя_Базы_Бэкапа].[dbo].[DBSchema];
INSERT INTO [dbo].[Params] SELECT * FROM [Имя_Базы_Бэкапа].[dbo].[Params];
-- Очищаем таблицы зарегистрированных изменений конфигурации для распределенных баз (РИБ)
DELETE FROM dbo._ConfigChngR;
DELETE FROM dbo._ConfigChngR_ExtProps;
F7.Если ваша база данных развернута в файловом варианте, вы не можете выполнить прямой SQL-запрос к таблицам. Однако исправить проблему тоже возможно. Для этого мы применим утилиту конвертации баз данных и низкоуровневый редактор таблиц файловой СУБД 1С.
Разберем алгоритм действий по шагам:
1Cv8.1CD в безопасное место, создав резервную копию.cnvdbfl.exe, которая находится в каталоге установки платформы (папка bin). Запустим командную строку от имени администратора и выполним команду:
"C:\Program Files\1cv8\8.3.18.1208\bin\cnvdbfl.exe" -c -f 8.2.14 "D:\Put_K_Baze\1Cv8.1CD"
0.3.0.0).Config и откроем её содержимое.FileName, найдем строковую запись со значением versions. Выделим эту строку и полностью удалим её из таблицы.
"C:\Program Files\1cv8\8.3.18.1208\bin\cnvdbfl.exe" -c -f 8.3.8 "D:\Put_K_Baze\1Cv8.1CD"
%userprofile%\AppData\Local\1C\1cv8%userprofile%\AppData\Roaming\1C\1cv8После проделанных манипуляций файловая база данных без проблем откроется на старых релизах платформы (например, 8.3.17 или 8.3.12) без выдачи «Ошибки формата потока».
Если в процессе недельной работы на новой платформе 8.3.18 пользователи активно вводили документы, а разработчики успели обновить конфигурацию, прямое редактирование таблиц SQL или очистка конфигурации могут привести к краху системы. В такой ситуации лучшим решением будет чистый перенос данных.
Проанализируем этот процесс:
8.3.18 в режиме Конфигуратора. Выгрузим конфигурацию в файл формата .cf (меню Конфигурация -> Сохранить конфигурацию в файл...).8.3.17)..cf (меню Конфигурация -> Загрузить конфигурацию из файла...). Применим изменения (клавиша F7). Таким образом, мы получили идентичную по структуре базу, но созданную средствами старой платформы, которая гарантированно не содержит «ядовитых» маркеров защиты в таблице Config.8.3.18 в XML-файл, а затем загрузим полученный файл в созданную пустую базу на платформе 8.3.17.Этот метод требует больше времени на выполнение выгрузки/загрузки, но гарантирует стопроцентную чистоту структуры данных и отсутствие скрытых ошибок формата потока в будущем.
Причиной возникновения ошибки формата потока при переходе на более старые платформы также могут выступать установленные в базе расширения конфигурации или автоматически скачанные платформой патчи (исправления). Старые релизы платформы часто не умеют работать с новыми типами объектов в расширениях.
Если база данных не открывается даже в режиме Конфигуратора, мы можем принудительно удалить все расширения через командную строку. Для этого выполним следующую команду:
"C:\Program Files\1cv8\8.3.17.1823\bin\1cv8.exe" DESIGNER /S "ИмяСервера\ИмяБазы" /N "ИмяАдминистратора" /P "Пароль" /DeleteCfg -AllExtension
После удаления расширений повторите попытку входа. Как только база запустится, расширения можно будет адаптировать под старую платформу и установить заново.
Используя предложенные методики, мы можем гарантированно обойти ограничения платформы 1С и безопасно вернуть информационные системы к работе на стабильных версиях программного обеспечения.