Многие специалисты столкнулись с серьезной проблемой после обновления платформы до версии 8.3.20: при попытке сохранить элемент справочника (например, «Контрагенты» в конфигурации «Альфа-Авто» или любой другой на обычных формах) программа аварийно завершает работу. Вылет происходит без внятных объяснений со стороны пользовательского интерфейса, а в журналах операционной системы фиксируется лишь падение процесса rphost или 1cv8.exe. Давайте вместе разберем эту ситуацию, проанализируем причины и найдем способы решения.
Первым делом проанализируем, что именно происходит в момент падения. Если включить технологический журнал (ТЖ) с отбором по событию EXCP, мы увидим специфические строки, указывающие на внутренние модули платформы. Рассмотрим пример такой записи:
src\rserver\src\SrvrInfoBaseImpl.cpp(12370): Файл не обнаружен 'v8srvr:////Files/SprScndInfo'
Эта ошибка говорит нам о следующем:
SrvrInfoBaseImpl.cpp), а не в коде самой конфигурации.SprScndInfo (Secondary Information справочника), который используется для индексации или хранения временных данных объекта.v8srvr:// оказывается недоступен или файл не был создан вовремя.Важный момент: чаще всего эта проблема проявляется в информационных базах, работающих в клиент-серверном варианте (SQL) и использующих Обычные формы. На управляемых формах ошибка встречается значительно реже из-за иного механизма кэширования объектов на сервере.
Как показывает практика и обсуждения экспертов, катализатором ошибки выступают Планы обмена. В платформе 8.3.20 был изменен внутренний механизм регистрации изменений. Если объект (справочник или документ) включен в состав хотя бы одного плана обмена, при его записи система инициирует процедуру фиксации изменений.
Проанализируем цепочку событий:
Платформа начинает транзакцию записи -> Обращается к вспомогательным таблицам справочника -> Пытается записать вторичную информацию (SprScndInfo) -> Возникает программный сбой доступа к виртуальному файлу -> Рабочий процесс rphost аварийно завершается.
Проверить эту гипотезу можно простым экспериментом в коде: если временно отключить регистрацию изменений для объекта, вылет прекращается. Однако это лишь диагностический прием, а не полноценное решение.
// Пример диагностического кода для проверки гипотезы
Объект = Справочники.Контрагенты.СоздатьЭлемент();
// ... заполнение реквизитов ...
Объект.ОбменДанными.Получатели.АвтоОтметитьУдаление = Ложь;
Объект.ОбменДанными.Загрузка = Истина; // Отключает стандартные механизмы регистрации
Объект.Записать();
Поскольку проблема признана официальным багом платформы (номер ошибки 10235334), у нас есть несколько путей решения, в зависимости от того, насколько оперативно вы можете изменять системное окружение.
Самый надежный способ — перейти на исправленный релиз. Фирма «1С» устранила данную ошибку в последующих сборках. Рекомендуется установить версию 8.3.20.1674 или более позднюю. Также стабильно работают ветки 8.3.21 и выше. Если ваша инфраструктура позволяет, обновление платформы полностью закроет вопрос с обращением к SprScndInfo.
Если вы не готовы переходить на более высокие релизы из-за требований совместимости или иных причин, можно выполнить даунгрейд до версии 8.3.19.1417 или 8.3.18. В ветке 8.3.19 этот специфический баг отсутствует, так как механизмы работы с временными файлами сервера там реализованы по старой, стабильной схеме.
В некоторых случаях (если ошибка проявляется не системно, а на конкретных объектах) может помочь «гигиена» информационной базы. Рассмотрим шаги, которые стоит предпринять:
snccntx и временные файлы внутри reg_XXXX).Существует зависимость между вылетами при записи и работой индекса полнотекстового поиска (ПП). Если ПП пытается проиндексировать объект в момент его записи, это может спровоцировать конфликт доступа к SprScndInfo. Попробуйте временно отключить полнотекстовый поиск в управлении регламентными заданиями и проверьте, сохраняется ли проблема.
Мы выяснили, что вылет платформы 8.3.20 — это не проблема кода вашей конфигурации («Альфа-Авто» или любой другой), а фундаментальная ошибка ядра 1С, связанная с планами обмена в клиент-серверном режиме.
Краткий алгоритм действий:
SprScndInfo — это баг платформы.