В процессе эксплуатации программных продуктов на платформе «1С:Предприятие 8.3» технические специалисты и администраторы баз данных периодически сталкиваются с внезапными сбоями при запуске системы. Одним из наиболее неприятных и неочевидных является сбой инициализации параметров сеанса, сопровождающийся ошибкой «Несоответствие типов».
В этой статье мы подробно разберем механизм возникновения данной ошибки на примере конфигурации «1С:Бухгалтерия предприятия КОРП 3.0», проанализируем её глубинные технические причины и выработаем пошаговый алгоритм решения проблемы различными методами — от простой очистки кэша до восстановления физической целостности базы данных.
Давайте детально рассмотрим, что происходит в момент запуска информационной базы. Сбой возникает на этапе выполнения общего модуля СтандартныеПодсистемыСервер, а именно в процедурах инициализации параметров сеанса. Код, на котором спотыкается система, выглядит следующим образом:
Если ИменаПараметровСеанса = Неопределено Тогда
ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(Новый Соответствие);
Справочники.ВерсииРасширений.УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры);
// При установке соединения с информационной базой до вызова всех остальных обработчиков.
ПередЗапускомПрограммы();
Возврат УстановленныеПараметры;
КонецЕсли;
Внимательный анализ текста технологического лога и сообщений об ошибках показывает интересную деталь. Несмотря на то, что исполняемая строка пытается присвоить значение параметру ПараметрыКлиентаНаСервере, в системном сообщении фигурирует совсем другой параметр:
«Ошибка при установке значения атрибута контекста (ПараметрыКлиентаНаСервереБИП) ... по причине: Несоответствие типов»
Выясним причину этой взаимосвязи. В платформе «1С:Предприятие 8» инициализация параметров сеанса происходит по так называемому «ленивому» принципу. Когда программный код обращается к любому из параметров сеанса (в данном случае к ПараметрыКлиентаНаСервере), платформа проверяет, выполнена ли общая инициализация. Если параметры еще не инициализированы, неявно вызывается предопределенный обработчик УстановкаПараметровСеанса в Модуле сеанса.
В процессе работы этого обработчика Библиотека стандартных подсистем (БСП) передает управление смежным подсистемам, включая Библиотеку интернет-поддержки (БИП). При попытке инициализировать параметр ПараметрыКлиентаНаСервереБИП типом, отличным от заданного в конфигурации (ожидается ФиксированноеСоответствие), происходит аварийное завершение. Стек вызова при этом указывает на родительскую строку, которая спровоцировала эту инициализацию.
Почему типы данных внезапно перестают соответствовать метаданным? Проанализируем ключевые факторы:
1cv8.exe файлы локального кэша в каталогах пользователя повреждаются. Платформа считывает из кэша искаженную структуру объектов метаданных.УстановкаПараметровСеанса и возвращать некорректные типы данных.*.1CD) из-за системных сбоев могут нарушаться внутренние индексы служебных таблиц (например, таблицы Config или таблицы параметров), из-за чего типы колонок перестают корректно определяться средой исполнения.Теперь, когда мы понимаем природу сбоя, перейдем к рассмотрению практических шагов по его устранению.
Наиболее частой и быстроустраняемой причиной является замусоривание локального кэша метаданных. Обычное удаление и повторное добавление базы в список запуска не всегда решает проблему, так как файлы кэша на диске могут быть заблокированы фоновыми процессами. Выполним глубокую очистку по шагам:
1cv8.exe и 1cv8c.exe отсутствуют в списке активных задач.%userprofile%\AppData\Local\1C\1Cv8 и нажмем Enter. В открывшемся каталоге удалим все папки с длинными буквенно-цифровыми наименованиями (например, 2a6e8f4a-9b8c...).%userprofile%\AppData\Roaming\1C\1Cv8 и также очистим его от временных папок профиля базы данных./ClearCache.Если база данных развернута в клиент-серверном варианте, администратору также рекомендуется перезапустить службу 1C:Enterprise 8.3 Server Agent для сброса серверного кэша метаданных.
Если очистка локального кэша не принесла результатов, это указывает на то, что некорректное состояние зафиксировалось во внутреннем кэше самой базы данных. Мы можем принудительно заставить платформу полностью перекомпилировать схемы типов метаданных. Разберем этот прием:
Этот простой трюк заставляет платформу очистить динамический кэш базы данных и перестроить внутренние связи параметров сеанса, что практически всегда решает проблему несоответствия типов.
В случае работы с файловой базой данных велика вероятность физического повреждения таблиц хранения конфигурации. Для диагностики и лечения выполним проверку утилитой, поставляемой вместе с платформой:
1Cv8.1CD в безопасное место).C:\Program Files\1cv8\8.3.XX.XXXX\bin\ (где 8.3.XX.XXXX — номер вашего текущего релиза платформы).chdbfl.exe.1Cv8.1CD.Утилита произведет низкоуровневый анализ таблиц, исправит поврежденные индексы и восстановит нарушенные логические связи типов данных.
Если утилита chdbfl.exe не выявила критических повреждений структуры, выполним логическое тестирование встроенными средствами Конфигуратора:
Чтобы исключить влияние невидимых или поврежденных расширений, которые могут модифицировать типы параметров сеанса, выполним запуск системы в безопасном режиме. Для этого запустим 1С из командной строки с использованием специального параметра:
"C:\Program Files\1cv8\common\1estart.exe" ENTERPRISE /F "ПутьКВашейБазе" /ResetExtension
Параметр /ResetExtension временно отключает все зарегистрированные в базе расширения при старте сеанса, что позволяет беспрепятственно запустить программу и удалить проблемное расширение через меню «Администрирование — Расширения».
Если ни один из вышеперечисленных методов не помог реанимировать поврежденный файл базы данных, применим радикальный, но гарантированно рабочий метод, который использовал автор темы на форуме:
Этот процесс позволяет полностью отбросить поврежденный системный слой старого файла базы данных, перенеся только чистые данные и конфигурацию в физически новую структуру таблиц, что полностью устраняет любые проявления системных ошибок типов метаданных.