Многие пользователи и администраторы систем 1С сталкиваются с неприятной ситуацией: при попытке найти контрагента по наименованию или ИНН программа внезапно «замирает», перестает отвечать на запросы и требует принудительного завершения работы через диспетчер задач. Это особенно критично для 1С:Бухгалтерия 3.0, где справочник Контрагенты является одним из самых востребованных объектов.
В этой статье мы подробно разберем, почему это происходит, и проанализируем пошаговые методы устранения данной проблемы — от простых настроек интерфейса до оптимизации кода и обслуживания серверной части.
Наиболее распространенной причиной зависаний является механизм полнотекстового поиска данных (ППД). Когда вы начинаете вводить символы в строку поиска, система обращается к индексу ППД. Если индекс поврежден или сильно фрагментирован, SQL-сервер (в случае клиент-серверного варианта) или сама платформа не могут быстро обработать запрос, что приводит к бесконечному ожиданию.
Рассмотрим алгоритм восстановления индекса ППД:
Проанализируем ситуацию: если после этих действий поиск заработал, значит, проблема была в повреждении файлов индекса. Если же зависания продолжаются, перейдем к следующим шагам.
По умолчанию 1С начинает поиск сразу, как только пользователь вводит первый или второй символ. Если в базе десятки тысяч контрагентов, поиск по строке «77» или «Ива» заставляет систему выбирать огромный объем данных, что парализует работу. Мы можем оптимизировать этот процесс, запретив поиск при вводе коротких строк.
Разберем реализацию программного ограничения:
Для этого нам потребуется внести изменения в МодульМенеджера справочника Контрагенты. Мы будем использовать предопределенную процедуру ОбработкаПолученияДанныхВыбора.
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
// Очищаем строку поиска от лишних пробелов
СтрПоиска = СокрЛП(Параметры.СтрокаПоиска);
// Устанавливаем ограничение: поиск начнется только с 3-го символа
Если СтрДлина(СтрПоиска) < 3 Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
КонецПроцедуры
Этот код позволяет существенно снизить количество «тяжелых» запросов к базе данных, так как поиск по 1-2 символам в большинстве случаев не имеет практической ценности для пользователя, но создает критическую нагрузку на сервер.
Проанализируем техническую сторону работы сервера приложений 1С. В некоторых релизах платформы (особенно замечено в ветках 8.3.21 и 8.3.22) механизм ППД может формировать неоптимальные планы запросов к СУБД. Выясним причину через регламентные задания.
Проверьте расписание задания Обновление индекса полнотекстового поиска. Если оно запускается каждую минуту, это может блокировать таблицы в момент, когда пользователь пытается выполнить интерактивный поиск. Оптимальный интервал для часто меняющихся баз — раз в 5-15 минут.
Также попробуем выполнить Тестирование и исправление (ТИИ) информационной базы. В параметрах ТИИ обязательно выберите пункты:
Часто зависание происходит не в самой базе, а при отрисовке формы списка. Если в справочнике Контрагенты настроено сложное условное оформление (например, раскрашивание строк в зависимости от наличия договора или суммы задолженности), то каждый введенный символ в строке поиска заставляет систему заново пересчитывать оформление для всех найденных строк.
Посмотрим на решение этой проблемы:
Попробуйте временно отключить настройку «Искать при вводе» в свойствах динамического списка формы. В этом случае поиск будет инициироваться только после нажатия клавиши Enter. Это позволит пользователю спокойно ввести длинный ИНН или название, не вызывая промежуточных зависаний системы.
Если вышеописанные методы не помогают, проблема может скрываться в статистике SQL-сервера. Устаревшая статистика заставляет оптимизатор SQL выбирать неверный план выполнения запроса. Рассмотрим действия системного администратора:
UPDATE STATISTICS для всех таблиц базы данных 1С.REBUILD индексов основных таблиц справочника.Также стоит обратить внимание на работу антивирусного ПО. Убедитесь, что папка с индексами полнотекстового поиска (обычно это каталог index внутри рабочего каталога сервера 1С) добавлена в исключения. Блокировка индексного файла антивирусом в момент чтения — частая причина «мертвого» зависания сеанса пользователя.
Если ваша компания не использует глобальный поиск по всей базе, а ищет данные только в конкретных списках, рассмотрите вариант полного отключения полнотекстового поиска. В окне управления ППД просто снимите галочку Полнотекстовый поиск данных разрешен. После этого поиск в справочниках перейдет в режим прямого обращения к таблицам БД (через LIKE), что в ряде случаев работает стабильнее и быстрее, хотя и лишает возможности искать данные по «размытым» критериям.
Мы проанализировали основные причины зависания поиска в справочнике контрагентов и предложили комплекс мер по их устранению. Рекомендуется начинать с обслуживания индексов ППД и только при отсутствии результата переходить к модификации кода или глубокой настройке SQL-сервера. Помните, что регулярное регламентное обслуживание базы данных предотвращает большинство подобных проблем до их появления.