Почему вылетает 1С при поиске по табличной части и как это исправить?

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При активной работе пользователей в конфигурациях на платформе 1С:Предприятие 8.3 (например, в «Бухгалтерии предприятия 3.0») нередко возникает критическая ошибка. В момент, когда пользователь пытается выполнить поиск в табличной части документа с помощью сочетаний клавиш Ctrl+F и Ctrl+V, программа аварийно завершает работу. При этом в системном журнале событий Windows (Event Viewer) фиксируется сбой модуля KERNELBASE.dll с кодом исключения 0xe06d7363.

Очистка локального кэша в таких ситуациях помогает лишь временно (от 30 минут до нескольких часов), после чего вылеты возобновляются. Особо остро эта проблема проявляется в терминальных средах (RDP) на базе операционных систем Windows Server. В этой статье мы подробно разберем причины этой неполадки и рассмотрим пошаговые методы ее полного устранения.

Выясняем причины сбоя KERNELBASE.dll с кодом 0xe06d7363

Код исключения 0xe06d7363 представляет собой классическую программную ошибку компилятора Microsoft Visual C++ (так называемое системное исключение SEH). Это означает, что внутри кода платформы 1С произошло необработанное исключение, с которым операционная система не смогла справиться стандартными средствами. Применительно к поиску в табличных частях 1С, основными триггерами сбоя выступают:

  1. Переполнение адресного пространства 32-разрядного клиента 1С при индексации динамических данных на лету.
  2. Конфликт графического ускорения в терминальной сессии при попытке отрисовать модальное окно поиска.
  3. Повреждение глобального или локального индекса полнотекстового поиска.
  4. Блокировка временных файлов платформы со стороны антивирусного ПО.
  5. Некорректная работа обработчиков событий табличной части в коде конфигурации или расширениях.

Рассмотрим подробно каждый метод решения этой проблемы.

Решение 1. Переход на 64-разрядный клиент 1С (x64)

В большинстве случаев вылет происходит из-за использования 32-битной версии тонкого или толстого клиента (1cv8c.exe или 1cv8.exe, расположенных в папке C:\Program Files (x86)\1cv8\). 32-разрядный процесс имеет жесткое ограничение на выделение оперативной памяти (не более 2 ГБ на один процесс). При поиске по большим табличным частям платформа строит временные индексы в оперативной памяти. Если память фрагментирована или исчерпана, происходит мгновенный вылет.

Что необходимо сделать:

  1. Скачайте с портала технологической поддержки 1С дистрибутив «Клиент 1С:Предприятия (64-bit)».
  2. Установите 64-разрядный клиент на терминальный сервер.
  3. Убедитесь, что ярлыки пользователей ссылаются на исполняемый файл из папки C:\Program Files\1cv8\ (без суффикса "x86").

Использование 64-битного приложения позволяет платформе использовать весь объем доступной оперативной памяти сервера, сводя вероятность сбоя из-за нехватки адресного пространства к нулю.

Решение 2. Сброс и обновление индекса полнотекстового поиска

Платформа 1С использует механизмы полнотекстового поиска для быстрой фильтрации данных. Если файлы этого индекса повреждены, то при попытке выполнить поиск (особенно по текстовым полям в табличной части) платформа обращается к битым секторам индекса и завершает работу с ошибкой.

Выполним очистку и перестроение индекса. Для этого перейдите в раздел Администрирование — Общие настройки — Полнотекстовый поиск данных. Нажмите кнопку «Очистить индекс», а затем «Обновить индекс».

Если проблему нужно решить программно или через регламентное задание, мы можем использовать следующий фрагмент кода:


Если ПолнотекстовыйПоиск.ПолучитьРежим() = РежимПолнотекстовогоПоиска.Разрешить Тогда
    Попытка
        ПолнотекстовыйПоиск.ОчиститьИндекс();
        ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
        ЗаписьЖурналаРегистрации("ПолнотекстовыйПоиск", УровеньЖурналаРегистрации.Информация, , , "Индекс успешно перестроен.");
    Исключение
        ЗаписьЖурналаРегистрации("ПолнотекстовыйПоиск", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;

После полной переиндексации временные сбои, связанные со старыми кэшированными данными поиска, будут устранены.

Решение 3. Отключение аппаратного ускорения графики в RDS

На терминальных серверах под управлением Windows Server 2012 R2 и выше часто возникает конфликт между графической подсистемой платформы 1С (интерфейс «Такси») и виртуальными видеодрайверами терминальной сессии. В момент нажатия Ctrl+F вызывается динамическое всплывающее окно поиска, отрисовка которого вызывает крах библиотеки KERNELBASE.dll.

Проанализируем работу платформы без графического ускорения. Для этого добавим специальный ключ запуска в дополнительные параметры командной строки при старте базы:

/NoPlatformHardwareAcceleration

Для того чтобы применить это решение централизованно для всех пользователей терминала через реестр Windows, выполните следующие шаги:

  1. Откройте редактор реестра regedit от имени администратора.
  2. Перейдите в ветку HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client.
  3. Создайте новый параметр типа DWORD (32-bit) с именем NoHardwareExtension и присвойте ему значение 1.
  4. Перезапустите терминальную сессию пользователя.

Решение 4. Проверка обработчиков событий табличной части на клиенте и сервере

Если база данных содержит доработки или активные расширения, велика вероятность, что при интерактивном поиске срабатывают события формы, которые пытаются передать контекст на сервер некорректным образом. Например, вызов процедуры ПриАктивизацииСтроки при каждой смене фокуса (которая происходит во время фильтрации) нагружает систему и приводит к падению клиента.

Рассмотрим пример проблемного кода, который может приводить к вылету при быстром переборе строк во время поиска:


&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    // Опасный код: частые серверные вызовы при поиске и фильтрации вызывают сбой
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        ПолучитьДополнительныеПараметрыНаСервере(ТекущиеДанные.Номенклатура);
    КонецЕсли;
КонецПроцедуры

Для оптимизации и предотвращения сбоев необходимо переписать логику так, чтобы минимизировать контекстные серверные вызовы при поиске, либо использовать задержку (подключение обработчика ожидания):


&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    ОтключитьОбработчикОжидания("Подключаемый_ВыполнитьОбработкуСтроки");
    ПодключитьОбработчикОжидания("Подключаемый_ВыполнитьОбработкуСтроки", 0.3, Истина);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьОбработкуСтроки()
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        // Безопасный вызов сервера с задержкой, чтобы исключить падение при быстром поиске
        ПолучитьДополнительныеПараметрыНаСервере(ТекущиеДанные.Номенклатура);
    КонецЕсли;
КонецПроцедуры

Решение 5. Добавление каталогов 1С в исключения антивируса

Поскольку очистка кэша решает проблему ровно на полчаса, это явный признак того, что фоновые процессы операционной системы блокируют файлы во временных директориях. Антивирусное ПО часто сканирует создаваемые платформой временные файлы поиска и накладывает на них монопольную блокировку (Read/Write Lock). В момент, когда 1С пытается обратиться к своему временному файлу индекса, происходит аварийное завершение работы.

Добавьте следующие каталоги и файлы в список исключений сканирования вашего антивируса на сервере:

Решение 6. Очистка пользовательских настроек внутри информационной базы

Иногда сбой кроется не в физическом кэше файлов на диске компьютера, а в сохраненных настройках конкретного пользователя прямо внутри базы данных (в системных таблицах). Там сохраняются параметры отборов, история поиска, размеры и видимость колонок.

Выполним очистку настроек пользователя внутри базы:

  1. Запустите информационную базу под учетной записью с правами Администратора.
  2. Перейдите в раздел Администрирование — Настройки пользователей и прав.
  3. Выберите пункт «Персональные настройки пользователей», а затем перейдите по ссылке «Очистка настроек».
  4. В открывшемся списке выберите проблемного пользователя, укажите документ, в котором происходит вылет при поиске, и нажмите кнопку «Очистить».

Решение 7. Обновление платформы до стабильного релиза

Если вы используете устаревшие версии платформы (такие как 8.3.10.2699 или 8.3.12.1685), то наиболее надежным решением станет переход на актуальные стабильные релизы веток 8.3.21, 8.3.22 или выше. В старых релизах платформы присутствовали критические ошибки утечки памяти при работе с динамическими списками и поисковыми механизмами в табличных частях. Обновление платформы полностью устраняет системные недоработки кода взаимодействия с библиотеками операционной системы Windows.

← На главную