При активной командной разработке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с крайне неприятной системной ошибкой: «Ошибка хеш-версии файла конфигурации» (или её вариацией — «Ошибка хеш-версии файла расширения»). Данная проблема блокирует любые попытки обновить конфигурацию базы данных, сохранить расширение или выполнить синхронизацию с хранилищем конфигурации. Разработчик оказывается в тупике: стандартные циклы «отключиться от хранилища — подключиться заново» или «восстановить базу из бэкапа» не приносят желаемого результата.
В этой статье мы подробно разберем природу возникновения этого сбоя, проанализируем внутренние механизмы платформы 1С, отвечающие за контроль версий, и рассмотрим пять эффективных практических способов решения проблемы, которые помогут вам вернуть базу данных и хранилище в рабочее состояние.
Для начала выясним причину происходящего на уровне внутренних алгоритмов платформы. 1С:Предприятие использует строгий контроль целостности структуры метаданных. Каждое изменение конфигурации или расширения сопровождается расчетом уникального идентификатора версии — атрибута configVersion. Он представляет собой 40-символьный хеш-код, вычисляемый по алгоритму SHA-1 на основе структуры XML-описания объектов.
Когда мы работаем с хранилищем конфигурации, платформа постоянно сравнивает три контрольные точки:
Config и ConfigSave).Если в процессе передачи данных происходит сетевой сбой, некорректно срабатывает кэширование операционной системы или разработчики используют разные релизы платформы, расчетные хеши расходятся. База данных считает, что у неё установлена одна версия структуры метаданных, а хранилище ожидает другую. Обнаружив рассинхронизацию, платформа аварийно прерывает операцию записи во избежание полной порчи структуры базы данных.
Рассмотрим подробнее пять проверенных методов, которые помогут нам устранить этот сбой.
Стандартная очистка кэша базы данных (через удаление базы из списка запуска или очистку папок в %APPDATA%) часто не помогает, так как платформа хранит отдельный локальный индекс для файлов хранилища. Разберем по шагам, как выполнить глубокую очистку кэша метаданных:
%LOCALAPPDATA%\1C\1Cv8
(Обычно этот путь ведет в каталог вида C:\Users\ИмяПользователя\AppData\Local\1C\1Cv8).Cache, которая отвечает за индексацию хранилища. Чтобы не искать точечно, безопаснее всего полностью удалить все папки с буквенно-цифровыми названиями из каталогов %LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8.Если ошибка зациклилась на конкретном расширении или объекте метаданных, мы можем заставить платформу принудительно рассчитать новую контрольную сумму. Для этого применим обходной путь:
.cfe из другой базы (например, из рабочей копии или из вчерашнего бэкапа, где этой ошибки еще не было).configVersion.Проанализируем ситуацию, связанную с инфраструктурой разработки. Очень часто ошибка хеш-версии возникает, когда над одним проектом работают несколько специалистов с разными релизами технологической платформы. Алгоритмы оптимизации и сериализации XML-схем могут незначительно отличаться от релиза к релизу (особенно часто это проявлялось в ветках платформы 8.3.15, 8.3.16 и 8.3.17).
Если разработчик №1 сохранил расширение в хранилище, используя платформу 8.3.15.1565, а разработчик №2 пытается обновиться на платформе 8.3.15.1830, расчет контрольной суммы одного и того же объекта метаданных может дать разные SHA-1 результаты.
Решение: Введите строгое административное правило — все разработчики, подключающиеся к конкретному хранилищу (включая серверы сценарного тестирования и сборки), должны использовать абсолютно одинаковую версию платформы 1С:Предприятие (вплоть до последнего знака в номере сборки).
Если ваше хранилище конфигурации подключено как файловое (через общий сетевой ресурс по протоколу SMB/Samba), оно чрезвычайно чувствительно к качеству локальной сети. Любой микросбой сетевого адаптера, блокировка файлов антивирусом или задержка при записи сетевого пакета операционной системой во время помещения объектов могут безвозвратно нарушить целостность таблиц хранилища.
Мы настоятельно рекомендуем перевести хранилище на работу через выделенный сервер хранилища 1С. Разберем, как это сделать:
crserver.exe, входящей в комплект поставки платформы.
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\crserver.exe" -d "C:\PathToRepository" -p 1545
C:\PathToRepository — путь к папке с файлами хранилища, а 1545 — порт службы.
tcp://ИмяСервера:1545/ИмяХранилища
Серверный режим работы самостоятельно осуществляет транзакционный контроль над всеми операциями чтения-записи и полностью исключает рассинхронизацию хеш-сумм по вине сетевых протоколов операционной системы.
Если база данных хранилища уже подверглась логическому разрушению и предыдущие методы не помогают, самым надежным и быстрым решением будет пересоздание хранилища. Посмотрим, как выполнить эту процедуру без потери текущих наработок:
.cf/.cfe файлы).Регулярно делайте резервные копии файлов хранилища конфигурации (особенно файлов расширений) и следите за стабильностью сетевого соединения, чтобы избежать подобных ошибок в будущем.