При переходе на новые релизы 1С:ERP Управление предприятием (например, версию 2.5.22.63 и выше) на платформе ветки 8.3.27 пользователи и системные администраторы всё чаще сталкиваются с критической ошибкой: «Ошибка хранилища двоичных данных - Ошибка блочного хранения двоичных данных». Данная проблема обычно проявляется в момент первого запуска системы после обновления или непосредственно в процессе выполнения обработчиков обновления при обращении к константе СведенияОбОбновленииИБ. Для безопасного перехода без ошибок обновления есть перенос данных для перехода между версиями 1С:ERP и КА.
В этой статье мы подробно разберем природу этого сбоя, проанализируем, почему он возникает именно на платформе 8.3.27, и рассмотрим пошаговые инструкции по его устранению.
Проанализируем техническую составляющую. Начиная с версии 8.3.27, фирма «1С» внедрила обновленный механизм работы с двоичными данными, который теперь использует так называемое блочное хранение. Этот механизм оптимизирует работу с большими объемами данных в базе (файлы, картинки, хранилища значений), однако он крайне чувствителен к целостности структуры данных и версии драйвера хранилища.
Ошибка возникает, когда система пытается прочитать объект (например, константу СведенияОбОбновленииИБ, хранящую структуру с логами обновления), который был записан старым механизмом, но текущая версия платформы интерпретирует его формат как некорректный. В частности, на релизе 8.3.27.1559 данное поведение признано зарегистрированной ошибкой платформы.
Как показывает практика ИТ-сообщества, во многих случаях проблема вызвана несоответствием закэшированных метаданных и реальной структуры таблиц двоичных данных. Рассмотрим процесс правильной очистки кэша для решения данной проблемы:
%AppData%\1C\1cv8\ (папки с именами-идентификаторами баз);%LocalAppData%\1C\1cv8\.snccntx в каталоге данных сервера 1С.После удаления временных файлов платформа будет вынуждена пересчитать логику обращения к блочному хранилищу, что зачастую снимает ошибку при чтении константы СведенияОбОбновленииИБ.
Для конфигураций ERP 2.5.22 и Комплексная автоматизация 2.5.22 выпущен специальный патч (исправление), который добавляет в код конфигурации обходной путь (workaround). Разберем, как правильно его применить, чтобы избежать ошибки при обновлении:
Посмотрим на алгоритм действий, который рекомендуют опытные специалисты:
Важный нюанс: Патч должен присутствовать в системе до момента запуска первого сеанса после обновления, так как именно тогда происходит обращение к «проблемному» блочному хранилищу. Патч перехватывает исключение при чтении двоичных данных и использует альтернативный метод десериализации.
Если очистка кэша и патч не помогли, проанализируем состояние самой базы данных. Иногда физическое представление таблиц в СУБД требует реструктуризации под новые требования платформы.
Именно опция «Сжатие таблиц» принудительно пересобирает индексы и может устранить некорректные указатели в хранилище двоичных данных, которые приводят к ошибке блочного чтения.
Рассмотрим ситуацию, когда константа СведенияОбОбновленииИБ уже повреждена и не дает запустить систему ни под каким предлогом. В этом случае можно прибегнуть к радикальному методу — очистке значения константы (для этого подойдёт универсальный инструмент администрирования и редактирования объектов 1С). Это приведет к потере истории логов текущего процесса обновления, но позволит системе сформировать новую структуру данных в формате 8.3.27.
Воспользуемся внешней обработкой или консолью кода (в этом поможет универсальная консоль кода для выполнения алгоритмов 1С) и выполним следующий фрагмент:
// Очистка константы, вызывающей ошибку блочного хранения
НаборКонстант = Константы.СведенияОбОбновленииИБ.СоздатьНабор();
НаборКонстант.Очистить();
Попытка
НаборКонстант.Записать();
Сообщить("Константа успешно очищена. Попробуйте запустить обновление снова.");
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
После выполнения этого кода система при запуске не обнаружит старых данных в константе и создаст новый объект хранения, который будет полностью совместим с новым механизмом платформы.
Ошибка блочного хранения — это следствие перехода платформы на более строгий контроль двоичных объектов. Чтобы минимизировать риски при обновлении ERP на платформе 8.3.27, мы рекомендуем:
EF_... до начала процесса обновления метаданных.Соблюдение этих правил позволит успешно завершить обновление ERP и избежать критических остановок системы.