Каждый практикующий разработчик и администратор баз данных 1С рано или поздно сталкивается с ситуацией, когда при очередном обновлении конфигурации процесс аварийно завершается. На экране появляется малоинформативное, но пугающее сообщение: «Нарушена целостность структуры конфигурации» или «Ошибка формата потока». При этом база может продолжать функционировать в режиме предприятия, запускаться в конфигураторе и даже позволять вносить мелкие изменения, но любые попытки обновить конфигурацию поставщика приводят к критическому сбою.
В этой статье мы подробно проанализируем причины возникновения этой проблемы, детально рассмотрим практический кейс её решения, а также разберем комплекс дополнительных системных методов восстановления работоспособности базы данных как на уровне файловой системы, так и непосредственно в СУБД Microsoft SQL Server.
Ошибки нарушения целостности структуры и формата потока практически всегда взаимосвязаны и указывают на физическое повреждение или логическую несогласованность бинарных данных (XML-схем, модулей, макетов), хранящихся в служебных таблицах базы данных. Давайте разберем наиболее частые факторы, провоцирующие этот сбой:
Config, ConfigSave и Params могут остаться конфликтующие или незавершенные записи версий метаданных.Проанализируем пошагово методы борьбы с этой проблемой, начиная с самого эффективного практического решения, найденного техническими специалистами, и заканчивая низкоуровневыми SQL-манипуляциями.
Этот метод помог решить проблему в ситуации, когда стандартное снятие с поддержки и повторная загрузка файла cf не приносили результата, так как в базе сохранялись «скрытые» связи и неверные идентификаторы старых объектов.
Рассмотрим этот алгоритм по шагам:
vendor_temp.cf. Таким образом, мы получаем слепок именно той версии конфигурации поставщика, которая в данный момент зарегистрирована в нашей сломанной базе.vendor_temp.cf.F7.Если база работает под управлением СУБД (например, MS SQL Server) и при попытке зайти в конфигуратор или при обновлении конфигурации базы данных вы получаете ошибку формата потока, проблему можно решить прямой очисткой служебных таблиц (для профилактики и диагностики пригодится инструмент анализа физической структуры таблиц СУБД 1С). Перед выполнением любых операций обязательно сделайте резервную копию базы данных средствами СУБД!
Разберем последовательность SQL-запросов, которые помогают устранить последствия некорректных динамических обновлений:
F7. Для этого выполните следующий SQL-запрос:
DELETE FROM dbo.ConfigSave
DELETE FROM dbo.Config WHERE FileName = 'DynamicallyUpdated'
DELETE FROM dbo.Params WHERE FileName = 'DynamicallyUpdated'
1C:Enterprise или удалите папки кэша в каталоге srvinfo).Если таблица конфигурации Config повреждена настолько серьезно, что конфигуратор базы вообще не открывается, мы можем заменить ее структуру чистой таблицей из идентичной рабочей базы (донора). Этот способ применим только в том случае, если состав прикладных таблиц (документов, справочников) в обеих базах совпадает на 100%.
Выполните следующие шаги:
Config из новой чистой базы (донора) в вашу поврежденную базу данных, предварительно очистив целевую таблицу:
USE [Имя_Поврежденной_Базы]
TRUNCATE TABLE dbo.Config
INSERT INTO [Имя_Поврежденной_Базы].[dbo].[Config]
SELECT * FROM [Имя_Базы_Донора].[dbo].[Config]
Config, после чего вы сможете продолжить работу или выполнить обновление.Мало кто знает, но в платформе «1С:Предприятие» предусмотрен специальный встроенный ключ командной строки, предназначенный для автоматического исправления нарушений целостности структуры таблиц конфигурации. Этот параметр заставляет платформу выполнить глубокий анализ системных таблиц метаданных и попытаться восстановить их логическую связность.
Для запуска восстановления выполните в командной строке (cmd) операционной системы следующую команду, адаптировав пути под вашу систему:
"C:\Program Files\1cv8\8.3.17.1851\bin\1cv8.exe" DESIGNER /S "ИмяСервера\ИмяБазы" /N "Администратор" /P "Пароль" /IBRestoreIntegrity /Out "C:\temp\restore_log.txt"
Для файлового варианта базы данных синтаксис команды будет выглядеть так:
"C:\Program Files\1cv8\8.3.17.1851\bin\1cv8.exe" DESIGNER /F "C:\PutKBase" /N "Администратор" /P "Пароль" /IBRestoreIntegrity /Out "C:\temp\restore_log.txt"
После завершения работы утилиты откройте файл restore_log.txt и проанализируйте результаты работы программы восстановления.
Если ошибка формата потока воспроизводится стабильно на одном и том же объекте, мы можем локализовать проблему с помощью Технологического журнала 1С. Это позволит нам понять, какой именно макет, форма или модуль повреждены, чтобы целенаправленно исправить именно их. Для автоматизации разбора логов можно использовать скрипт для парсинга технологического журнала 1С.
Для этого выполните следующие действия:
C:\Program Files\1cv8\conf) создайте файл с именем logcfg.xml следующего содержания:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\v8logs" history="24">
<event>
<eq property="Name" value="EXCP"/>
</event>
<event>
<eq property="Name" value="EXCPCNTX"/>
</event>
<property name="All"/>
</log>
</config>
C:\v8logs.C:\v8logs и найдите последние события перед падением системы. В контексте исключения (событие EXCPCNTX) будет указан конкретный идентификатор метаданных или имя XML-файла потока (например, модуль конкретного документа или макет отчета).Для того чтобы минимизировать риски возникновения ошибок целостности метаданных в будущем, настоятельно рекомендуем придерживаться следующих правил при администрировании систем 1С:
DBCC CHECKDB для серверных баз.