В процессе работы с базами 1С администраторы и специалисты нередко сталкиваются с ситуацией, когда форма списка справочника «Номенклатура» начинает сильно задерживать отклик: переключение сортировки с наименования на код занимает 3–4 секунды, а поиск по строке вызывает длительное подвисание интерфейса. При этом у остальных сотрудников, работающих в той же информационной базе и в аналогичной сетевой среде (будь то RDP или RemoteApp), список открывается и сортируется мгновенно.
Проанализируем причины такого поведения системы, выясним, почему проблема затрагивает только конкретную учетную запись, и разберем по шагам алгоритм диагностики и решения данной неполадки.
Когда проблема проявляется локально у одного пользователя и не воспроизводится под другими учетными записями 1С на том же сервере, дело практически никогда не заключается в сбоях RemoteApp, проблемах сети или ошибках исходного кода конфигурации. Платформа 1С для динамических списков генерирует SQL-запросы «на лету» с учетом всех текущих пользовательских настроек, отборов, группировок и состава видимых колонок.
Основная причина локального замедления — установленный специфичный пользовательский отбор в форме списка. Если пользователь установил условие фильтрации по реквизиту, для которого на уровне СУБД отсутствует индекс, или применил неэффективный оператор сравнения, СУБД вынуждена выполнять полное сканирование таблицы при каждой попытке смены сортировки или поиска.
Рассмотрим первый и самый быстрый способ восстановления нормальной скорости работы формы — анализ и очистку настроек динамического списка.
Еще > Настроить список... и перейдем на закладку Отбор. Проанализируем, какие реквизиты используются в условиях.Содержит, Не равно, Не в списке или условий по реквизитам соединенных таблиц (например, остатки, цены, штрихкоды). Такие фильтры делают невозможным использование индексов СУБД.Еще > Установить стандартные настройки. Если торможения прекратились, значит причиной действительно был неоптимальный отбор.Администрирование > Настройки пользователей и прав > Персональные настройки пользователей > Очистка настроек и удалим сохраненные настройки формы списка номенклатуры для данного пользователя.Разберем подробнее, что происходит на уровне системы при наложении пользовательских отборов в динамическом списке:
Индексировать (или Индексировать с доп. упорядочиванием), оптимизатор SQL-сервера выбирает план выполнения Table Scan или Index Scan вместо точечного поиска Index Seek.LIKE '%строка%' блокирует применение стандартных индексов B-Tree, что приводит к перебору всех записей таблицы номенклатуры при любом изменении порядка сортировки.Чтобы избежать подобных ситуаций в будущем и обеспечить стабильную скорость работы списка номенклатуры для всех пользователей, выполним следующие профилактические мероприятия:
Артикул, Код, Наименование, ВидНоменклатуры), установим свойство Индексировать или Индексировать с доп. упорядочиванием.УстановитьОграниченияИспользованияВОтборе() запретим наложение отборов по вычисляемым, соединенным или сложным реквизитам.Динамическое считывание данных. При его включении платформа запрашивает данные с сервера порциями по 45 записей, что ускоряет первичную отрисовку формы при больших объемах данных.UPDATE STATISTICS), а также реиндексация и дефрагментация таблиц базы данных.