При совместной командной разработке в среде 1С:Предприятие 8.3 с использованием хранилища основной конфигурации и хранилища расширений нередко возникают специфические проблемы версионирования. Одна из наиболее неприятных неполадок — сообщение «Ошибка хеш версии файла конфигурации». Проблема обычно проявляется в момент нажатия кнопки «Обновить конфигурацию базы данных» (клавиша F7) после подключения новой базы к хранилищу расширения или получения свежих изменений. При этом разработчики, которые не отключались от хранилища, могут продолжать работу без каких-либо сбоев.
Разберем природу этого сбоя, выясним причины его возникновения и рассмотрим пошаговые методы восстановления корректной работы хранилища расширения конфигурации.
Проанализируем внутренние механизмы платформы. Каждая конфигурация и расширение внутри базы данных 1С представляют собой совокупность сериализованных потоков данных. В служебных таблицах СУБД CONFIG, CONFIGSAVE, а также в служебном файле configinfo хранятся контрольные хеш-суммы каждого блока метаданных. Несоответствие этих хешей провоцируется следующими факторами:
Рассмотрим проверенный практический алгоритм, позволяющий быстро восстановить согласованность версий в хранилище без потери наработок. Для выполнения этой процедуры нам понадобятся две базы: база разработчика, у которого расширение открывается и обновляется без ошибок, и проблемная база.
Разберем процесс по шагам:
Конфигурация -> Расширения конфигурации, выбираем нужное расширение и нажимаем Действия -> Сохранить конфигурацию в файл.... Сохраняем расширение в файл с расширением .cfe.Хранилище -> Отключиться от хранилища).Действия -> Загрузить конфигурацию из файла...) и выбираем наш .cfe.F7. На этом этапе ошибка хеша не возникает, так как структура загружена напрямую из корректного бинарного файла в обход сбойного кэша хранилища.Конфигурация -> Конфигурация базы данных -> Вернуться к конфигурации БД. Это действие приводит структуру редактируемой конфигурации в строгое соответствие с работающей базой данных и пересчитывает служебные хеши.После выполнения этих действий контрольные хеши в хранилище обновляются, и ошибка перестает воспроизводиться на всех остальных клиентских базах.
Если описанный выше способ по каким-либо причинам применить не удается, разберем альтернативные варианты решения проблемы.
В ряде случаев ошибка вызвана локальным повреждением файлов на машине конкретного разработчика. Выполним полную очистку кэша хранилища:
%APPDATA%\1C\1Cv8\. Внутри каталогов с уникальными идентификаторами информационных баз переходим в папку cfgrepo\cache и полностью удаляем ее содержимое.%LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8.Если сбой вызван изменением объектов в основной конфигурации, проанализируем дерево объектов расширения:
В клиент-серверных базах (MS SQL Server, PostgreSQL) незафиксированные изменения сеанса конфигуратора блокируются во временной таблице. Если штатный откат в Конфигураторе завершается аварией, на предварительно созданной резервной копии базы данных средствами СУБД можно выполнить очистку таблицы CONFIGSAVE, после чего заново открыть Конфигуратор и повторить получение версии.
Если хранилище расположено в общей сетевой папке (файловый вариант), файл 1cv8ddb.1cd мог получить повреждения на уровне файловой системы из-за сетевого сбоя. В таком случае завершаем все сеансы работы с хранилищем и запускаем штатную утилиту тестирования chdbfl.exe (находится в папке bin установленной платформы 1С) для файла хранилища.
Чтобы минимизировать риски возникновения ошибок хеш-сумм в будущем, придерживаемся следующих правил командной разработки:
1cv8ddb.1cd), а также сохраняем эталонные версии конфигураций в файлы .cf и .cfe перед масштабными слияниями веток разработки.