В практической работе администраторов и разработчиков систем на платформе 1С:Предприятие 8.3 нередко возникает крайне неприятная ситуация. Пользователи начинают жаловаться, что при попытке выбрать контрагента в любом документе (например, при вводе первых букв названия в поле ввода) программа намертво зависает. Пытаясь разобраться в ситуации, администратор пытается открыть форму «Администрирование — Общие настройки» или стандартную обработку «Управление полнотекстовым поиском» через меню «Все функции» (или «Функции для технического специалиста»), но база данных зависает и на этом этапе.
В данной статье мы подробно разберем, почему возникает эта проблема, как связаны между собой ввод контрагента и общие настройки системы, а также рассмотрим по шагам эффективные методы решения этой технической неполадки.
Для начала проанализируем внутренние механизмы платформы 1С. В современных конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0, для быстрого подбора данных при вводе текста в полях документов (механизм «ввод по строке») активно используется Полнотекстовый поиск данных (ППД). Это позволяет мгновенно находить контрагентов, номенклатуру или договоры по части наименования, ИНН или другим реквизитам.
Когда пользователь вводит текст в поле «Контрагент», платформа отправляет фоновый запрос к файлам полнотекстового индекса. Если файлы индекса повреждены, заблокированы операционной системой или СУБД, этот запрос уходит в бесконечный цикл ожидания. Для пользователя это выглядит как полное зависание интерфейса программы.
Аналогичный процесс происходит и при попытке открыть разделы настроек. При входе в Общие настройки или форму Управление полнотекстовым поиском, система опрашивает файлы индекса на сервере, чтобы рассчитать их текущий размер, определить дату последнего обновления и актуальность данных. Если индекс поврежден, этот опрос вызывает взаимоблокировку (deadlock) рабочего процесса сервера приложений rphost, и интерфейс администратора точно так же зависает.
Дополнительным фактором часто выступает официально зарегистрированная ошибка платформы 1С с кодом 10212437: «При обращении к устаревшему индексу полнотекстового поиска может происходить зависание программы». Данная проблема особенно часто проявляется на релизах платформы линеек 8.3.16, 8.3.24, 8.3.25 и некоторых других версиях.
---
Если зависание происходит не сразу или вам удалось войти в систему в монопольном режиме в период низкой нагрузки, попробуйте решить проблему штатными средствами встроенного языка или интерфейса. Для завершения сеансов и получения монопольного доступа можно воспользоваться обработкой для блокировки подключений и отключения пользователей.
Рассмотрим вариант аварийного программного отключения ППД с помощью внешней обработки. Нам понадобится написать простой код, который принудительно отключит использование полнотекстового поиска в обход графического интерфейса настроек. Это позволит вернуть работоспособность поиску по строке и зайти в меню администрирования.
Создадим внешнюю обработку и пропишем в модуле следующую процедуру:
Процедура ОтключитьПолнотекстовыйПоискНаСервере() Экспорт
УстановитьПривилегированныйРежим(Истина);
Если ПолнотекстовыйПоиск.ПолучитьИспользование() Тогда
ПолнотекстовыйПоиск.УстановитьИспользование(Ложь);
ЗаписьЖурналаРегистрации("ППД", УровеньЖурналаРегистрации.Информация, , , "Полнотекстовый поиск успешно отключен программно.");
Сообщить("Использование полнотекстового поиска отключено. Теперь вы можете зайти в настройки.");
Иначе
Сообщить("Полнотекстовый поиск уже был отключен.");
КонецЕсли;
КонецПроцедуры
После выполнения этого кода платформа перестанет обращаться к поврежденным индексным файлам. Вы сможете беспрепятственно зайти в форму Управление полнотекстовым поиском. Чтобы восстановить работоспособность механизма, выполните следующие действия:
Истина в метод УстановитьИспользование()).---
В случаях, когда база данных зависает намертво при любых попытках открыть настройки, а выполнение программного кода блокируется рабочими процессами, лучшим решением является физическое удаление файлов полнотекстового поиска на сервере приложений 1С.
Разберем этот процесс по шагам для серверного варианта базы данных:
services.msc) или используйте командную строку и остановите службу «Агент сервера 1С:Предприятия 8.3» (1C:Enterprise 8.3 Server Agent).C:\Program Files\1cv8\srvinfo\ (или C:\Program Files (x86)\1cv8\srvinfo\).reg_1541), а затем найдите каталог с уникальным идентификатором (GUID) вашей информационной базы. Вы можете узнать этот GUID в свойствах базы в консоли администрирования 1С.1Cv8FTxt. Именно здесь физически хранятся все файлы полнотекстового индекса.1Cv8FTxt или переместите её содержимое в архив в качестве резервной копии.После запуска службы и входа первого пользователя система обнаружит отсутствие файлов индекса и автоматически создаст чистую пустую папку 1Cv8FTxt. Опрашивать при входе в настройки будет нечего, поэтому формы Общие настройки и Управление полнотекстовым поиском откроются мгновенно. После этого вам останется лишь запустить полное обновление индекса в интерфейсе программы.
---
Иногда повреждение индекса ППД является лишь следствием сбоя в работе фоновых процессов сервера 1С или СУБД. Выясним, какие еще сопутствующие действия необходимо выполнить для предотвращения повторных зависаний:
snccg...) из профиля пользователя, от имени которого запущена служба 1С (например, USR1CV8).ОбновлениеИндексаППД и СлияниеИндексаППД. Проанализируйте расписание их работы. Обновление должно выполняться часто (например, каждые 5-10 минут), а тяжелое слияние индексов — предпочтительно один раз в сутки в ночное время. Если эти задания выполняются одновременно или сбоят, это приводит к блокировкам базы..ldf) не переполнены и на диске сервера достаточно свободного места для записи изменений индекса. При необходимости выполните операцию сжатия (Shrink) лога.Применяя описанные методы в комплексе, мы сможем оперативно диагностировать и полностью устранить зависания базы данных 1С:Бухгалтерия 3.0, обеспечив быструю и комфортную работу пользователей с поиском документов и справочников.