В процессе работы с конфигурацией 1С:Управление торговлей 11 (особенно версий 11.3 и 11.4) пользователи часто сталкиваются с критической проблемой: при попытке открыть форму «Подбора товаров» в документах поступления или реализации программа «намертво» зависает. Опытным путем часто выясняется, что если в форме не указан конкретный склад, поиск работает, но стоит выбрать складское помещение — и работа останавливается.
В данной статье мы подробно разберем причины такого поведения системы, проанализируем внутренние механизмы работы динамических списков и предложим пошаговое решение для восстановления работоспособности базы.
Проанализируем ситуацию с технической стороны. Основным виновником проблемы в большинстве случаев является служебный регистр сведений ДоступностьТоваровДляВнешнихПользователей. Рассмотрим подробнее, почему это происходит:
ДоступностьТоваровДляВнешнихПользователей для фильтрации остатков.Выясним причину замедления, проверив количество записей в «подозрительном» регистре. Для этого мы можем воспользоваться консолью запросов или простым кодом:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ РегистрСведений.ДоступностьТоваровДляВнешнихПользователей";
Результат = Запрос.Выполнить().Выгрузить();
Сообщить("Количество записей: " + Результат[0][0]);
Если число записей превышает несколько сотен тысяч, а вы не используете доступ для внешних клиентов, этот регистр необходимо очистить.
Поскольку стандартное Тестирование и Исправление (ТиИ) на больших объемах в файловом режиме может длиться сутками, эффективнее выполнить очистку регистра программно. Для регулярного проведения технического обслуживания баз без участия пользователя можно применить инструмент для архивации, обновления и тестирования баз 1С. Разберем по шагам, как это сделать правильно:
Создадим внешнюю обработку и пропишем в ней следующий код для удаления всех записей из регистра:
НаборЗаписей = РегистрыСведений.ДоступностьТоваровДляВнешнихПользователей.СоздатьНаборЗаписей();
// Мы не устанавливаем отборы, чтобы очистить весь регистр
НаборЗаписей.Записать();
Сообщить("Регистр успешно очищен.");
Важно: Перед выполнением данной операции обязательно создайте резервную копию информационной базы!
Чтобы проблема не повторилась через несколько месяцев, проанализируем настройки системы. Нам необходимо убедиться, что механизмы, наполняющие этот регистр, отключены:
Иногда зависание при поиске связано не только с регистрами, но и с некорректной работой индексов полнотекстового поиска. Рассмотрим, как привести их в порядок:
Если при поиске система выдает сообщение «Обновление индекса запущено другим пользователем», хотя в базе вы один, это явный признак повреждения файлов индекса. Посмотрим на алгоритм исправления:
1Cv8FTxt из каталога вашей информационной базы. При следующем запуске система пересоздаст индекс с нуля.Разберем еще один нюанс, упомянутый в обсуждении: сортировка. Проанализируем ситуацию: если в динамическом списке установлена сложная сортировка (например, по остатку или цене), это заставляет 1С выполнять тяжелые вычисления для каждой строки.
Попробуйте установить в форме подбора сортировку по наименованию. Это базовое поле индексировано в таблице справочника Номенклатура, и запрос отработает значительно быстрее. Для этого кликните по заголовку колонки «Наименование» так, чтобы появилась стрелка сортировки.
Если вышеописанные действия не привели к мгновенному отклику системы, рассмотрим дополнительные факторы:
Настройки пользователей и прав, включена ли галочка Ограничивать доступ на уровне записей. RLS добавляет к каждому запросу огромные «хвосты» условий, что в сочетании с большим объемом данных гарантированно вешает файловую базу.Подводя итог, можно сказать, что основная «болезнь» подбора в УТ 11 — это избыточное накопление данных в служебных регистрах. Регулярная очистка ДоступностьТоваровДляВнешнихПользователей и контроль регламентных заданий позволят вашим пользователям работать без задержек и нервного ожидания отклика системы.