В процессе сопровождения конфигураций на платформе 1С:Предприятие 7.7 программисты иногда сталкиваются с пугающей ошибкой: "Ошибка при анализе изменений в структуре данных". Эта проблема возникает при попытке сравнения или объединения конфигураций, а иногда и при простом сохранении изменений. Самое коварное в этой ситуации то, что сама база данных может оставаться полностью работоспособной, пользователи продолжают вводить документы, но внести любые изменения в программный код или структуру метаданных становится невозможно.
В этой статье мы подробно разберем причины возникновения этой ошибки и рассмотрим пошаговый алгоритм восстановления целостности файла конфигурации 1Cv7.MD, используя как штатные средства, так и специализированный софт, накопленный сообществом за десятилетия работы с "семеркой".
Для начала проанализируем, что именно происходит "под капотом". Файл конфигурации 1Cv7.MD представляет собой так называемый Compound File (составной файл) — бинарное хранилище, внутри которого находятся древовидные структуры (потоки или streams). В этих потоках хранятся описания справочников, документов, их форм, модулей и табличных частей.
Ошибка анализа структуры означает, что внутренняя логическая связь между этими потоками нарушена. Конфигуратор при попытке прочитать дерево метаданных натыкается на "битый" указатель или некорректный заголовок потока и прекращает работу. Обычное Тестирование и исправление (ТИИ) здесь зачастую бессильно, так как оно проверяет целостность данных в таблицах .DBF, но не структуру самого MD-файла.
Если конфигурация достаточно большая, найти проблемный объект вручную сложно. Рассмотрим методику, которая позволяет сузить круг поиска без использования сторонних утилит:
Чаще всего проблема кроется в формах документов. Как показывает практика, если форма конкретного документа не открывается в конфигураторе (при этом 1С не выдает ошибок, а просто ничего не происходит), значит, поврежден именно поток этой формы.
Инструмент GComp — это легендарная утилита для разборки MD-файла на текстовые составляющие и последующей сборки обратно. Это один из самых надежных способов "вылечить" структуру.
Проанализируем процесс работы с GComp:
ЗплТабельУчетаРабочегоВремени) будет представлен отдельной папкой.Если GComp не помогает или не может собрать файл из-за критических ошибок в project.txt, воспользуемся утилитой MD Diagnostic. Проанализируем её возможности:
Эта программа сканирует MD-файл на наличие логических несоответствий в бинарном дереве. Она способна выявить:
После запуска утилиты мы получим детальный лог. Например, строка вида "Error in Stream: Documents\ЗплТабельУчетаРабочегоВремени\Form\Module" четко укажет нам место "пожара".
В самых тяжелых случаях, когда конфигуратор падает, а автоматические утилиты не справляются, нам поможет MD_Edit. Рассмотрим, как провести ручное восстановление:
MD_Edit. Мы увидим структуру, похожую на файловую систему.Объединение конфигураций (выбрав только этот конкретный объект).Иногда ошибка проявляется как сообщение: "При проверке модуля обнаружены синтаксические ошибки!" без открытия окна с описанием ошибок. Проанализируем причину: это случается, когда заголовок модуля в MD-файле указывает на наличие текста, но сам текст физически отсутствует или забит нулевыми байтами.
Для решения этой проблемы попробуем следующий прием:
Эта простая манипуляция заставляет платформу перезаписать поток модуля в MD-файле, что часто исправляет ошибки адресации внутри Compound File.
Рассмотрим еще несколько важных моментов, которые помогут избежать повторения проблемы:
1. Длина идентификаторов. Проверьте, нет ли в вашей конфигурации объектов с именами длиннее 128 символов. 1С 7.7 крайне чувствительна к этому параметру, и при определенных операциях это может разрушить заголовок потока.
2. Релиз платформы. Существует мнение среди опытных разработчиков, что 25-й релиз платформы 7.7 ведет себя более стабильно при исправлении ошибок структуры, чем последний 27-й. Если ошибка не поддается лечению, попробуйте открыть и пересохранить MD на 25-м релизе.
3. Словарь данных. Хотя ошибка в MD напрямую не связана с данными, иногда помогает временное удаление файлов словаря 1Cv7.DD (или 1Cv7.DDS для SQL-версии) и индексных файлов *.CDX. При первом запуске Конфигуратор заново просканирует MD и попытается воссоздать словарь, что может помочь выявить несоответствия.
4. Метод "Чистой базы". Разберем еще один эффективный метод:
1Cv7.MD.Загрузку измененной конфигурации, выбрав MD-файл из старой архивной копии. Если загрузка проходит порциями (сначала справочники, потом документы), мы сможем точно определить, на каком объекте споткнется загрузчик.Почему структура MD-файла ломается? Чаще всего это происходит из-за:
Регулярное использование утилит типа GComp не только для лечения, но и для выгрузки исходников в систему контроля версий (Git/SVN), позволит вам всегда иметь под рукой "текстовый" бэкап, из которого можно собрать чистый MD-файл за считанные минуты.