Почему зависает 1С:Управление торговлей при подборе товаров и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с конфигурацией 1С:Управление торговлей 11 (особенно версий 11.3 и 11.4) пользователи часто сталкиваются с критической проблемой: при попытке открыть форму «Подбора товаров» в документах поступления или реализации программа «намертво» зависает. Опытным путем часто выясняется, что если в форме не указан конкретный склад, поиск работает, но стоит выбрать складское помещение — и работа останавливается.

В данной статье мы подробно разберем причины такого поведения системы, проанализируем внутренние механизмы работы динамических списков и предложим пошаговое решение для восстановления работоспособности базы.

Разберем причину зависания: Регистр «Доступность товаров для внешних пользователей»

Проанализируем ситуацию с технической стороны. Основным виновником проблемы в большинстве случаев является служебный регистр сведений ДоступностьТоваровДляВнешнихПользователей. Рассмотрим подробнее, почему это происходит:

  1. Назначение регистра: Этот объект предназначен для хранения данных об остатках товаров, которые доступны клиентам через личный кабинет (функционал «Самообслуживание клиентов»).
  2. Механизм заполнения: Даже если в вашей конфигурации отключена опция «Самообслуживание клиентов», система во многих релизах УТ 11 продолжает записывать данные в этот регистр при каждом движении товаров. Со временем количество записей в нем может достигать нескольких миллионов (как в рассматриваемом случае — более 1,7 млн).
  3. Влияние на подбор: Когда вы открываете форму подбора и указываете Склад, система перестраивает запрос динамического списка. В этот запрос программно включается соединение (JOIN) с таблицей регистра ДоступностьТоваровДляВнешнихПользователей для фильтрации остатков.
  4. Проблема файловой базы: Если база работает в файловом режиме, СУБД 1С крайне неэффективно обрабатывает соединения с таблицами такого объема. В результате выполнение запроса занимает десятки минут, что визуально воспринимается как зависание программы.

Шаг 1: Диагностика и проверка объема данных

Выясним причину замедления, проверив количество записей в «подозрительном» регистре. Для этого мы можем воспользоваться консолью запросов или простым кодом:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ РегистрСведений.ДоступностьТоваровДляВнешнихПользователей";
Результат = Запрос.Выполнить().Выгрузить();
Сообщить("Количество записей: " + Результат[0][0]);

Если число записей превышает несколько сотен тысяч, а вы не используете доступ для внешних клиентов, этот регистр необходимо очистить.

Шаг 2: Программная очистка регистра

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

Создадим внешнюю обработку и пропишем в ней следующий код для удаления всех записей из регистра:


НаборЗаписей = РегистрыСведений.ДоступностьТоваровДляВнешнихПользователей.СоздатьНаборЗаписей();
// Мы не устанавливаем отборы, чтобы очистить весь регистр
НаборЗаписей.Записать();
Сообщить("Регистр успешно очищен.");

Важно: Перед выполнением данной операции обязательно создайте резервную копию информационной базы!

Шаг 3: Отключение фоновых заданий и функциональных опций

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

  1. Перейдем в раздел НСИ и администрирование — Настройка ИТ-ресурсов — Общие настройки.
  2. Проверим статус функциональной опции Самообслуживание клиентов. Если она не используется — снимите флаг.
  3. Перейдем в раздел Обслуживание — Регламентные и фоновые задания.
  4. Найдем задание Обновление доступности товаров для внешних пользователей и отключим его (снимите флаг «Включено»).

Шаг 4: Работа с полнотекстовым поиском (ППД)

Иногда зависание при поиске связано не только с регистрами, но и с некорректной работой индексов полнотекстового поиска. Рассмотрим, как привести их в порядок:

Если при поиске система выдает сообщение «Обновление индекса запущено другим пользователем», хотя в базе вы один, это явный признак повреждения файлов индекса. Посмотрим на алгоритм исправления:

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

Шаг 5: Оптимизация динамических списков

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

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

Дополнительные рекомендации

Если вышеописанные действия не привели к мгновенному отклику системы, рассмотрим дополнительные факторы:

Подводя итог, можно сказать, что основная «болезнь» подбора в УТ 11 — это избыточное накопление данных в служебных регистрах. Регулярная очистка ДоступностьТоваровДляВнешнихПользователей и контроль регламентных заданий позволят вашим пользователям работать без задержек и нервного ожидания отклика системы.

← На главную