Почему зависает подбор номенклатуры в документе Установка цен номенклатуры и как это исправить

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

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

Анализируем причины зависания: основные факторы

Проблема часто локализуется не в самом нажатии кнопки, а в процедурах серверного модуля, которые отвечают за расчет и вывод цен в форму подбора. Рассмотрим основные причины возникновения «тормозов»:

  1. Специфика работы СУБД (PostgreSQL против MS SQL): Как показывает практика, на PostgreSQL запросы могут выполняться в сотни раз медленнее из-за неверного построения плана запроса планировщиком.
  2. Механизм компоновки данных (СКД): Зависание происходит в момент выгрузки результата запроса в таблицу значений на сервере.
  3. Избыточность данных в форме подбора: Попытка системы одновременно рассчитать текущие цены, остатки и учесть характеристики по каждой позиции.
  4. Состояние индексов и полнотекстового поиска: Фрагментация или некорректная работа ППС напрямую влияет на скорость поиска в больших справочниках.

Шаг 1. Очистка кэша и работа с индексами

Прежде чем переходить к сложным настройкам сервера, проанализируем состояние кэша. Локальные временные файлы часто становятся причиной «фантомных» задержек. Очистку следует выполнить как на клиентских машинах, так и на сервере 1С.

Проверим состояние индексов базы данных. Если используется MS SQL Server, рекомендуется выполнить перестроение индексов (Reindex) и обновление статистики. Для этого можно использовать стандартные планы обслуживания SQL. Особое внимание уделим регистру сведений ЦеныНоменклатуры, так как именно к нему обращается документ при подборе.

Шаг 2. Оптимизация PostgreSQL для работы с УТ 11

Если ваша база работает под управлением PostgreSQL, и вы наблюдаете разницу в скорости (например, 4 секунды на MS SQL против 950 секунд на Postgres), проблему стоит искать в настройках postgresql.conf. Выясним причину: планировщик PostgreSQL иногда выбирает крайне неэффективный путь соединения таблиц при работе с временными таблицами 1С.

Проанализируем следующие параметры в конфигурационном файле:

Шаг 3. Анализ серверного кода и работы СКД

Разберем ситуацию, когда зависание происходит в общем модуле УстановкаЦенСервер. Часто «точкой остановки» является метод Вывести() процессора компоновки данных. Рассмотрим примерный фрагмент кода, где это происходит:


// В общем модуле УстановкаЦенСервер
ДанныеОтчета = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеОтчета);

// Именно на этой строке происходит длительное зависание
ДанныеОтчета = ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Проанализируем, почему это происходит. В новых редакциях УТ 11 (начиная с 11.5) запрос в СКД стал значительно сложнее. Он собирает данные из множества регистров, включая остатки, цены и иерархию видов цен. Если в документе выбрано 5 и более видов цен, СКД генерирует тяжелый запрос с множественными левыми соединениями.

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

Шаг 4. Настройка формы подбора и динамических данных

В форме подбора номенклатуры часто включены колонки, которые требуют динамического расчета. Это «Текущие цены» и «Остатки на складах». Рассмотрим, как их отключение влияет на скорость:

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

Шаг 5. Исправление проблем полнотекстового поиска (ППС)

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

  1. Зайдите в раздел «Администрирование» — «Поддержка и обслуживание» — «Управление полнотекстовым поиском».
  2. Нажмите кнопку «Очистить индекс».
  3. После очистки выполните «Полное перестроение».

Иногда файлы индекса в папке Index на сервере приложений 1С разрастаются до огромных размеров, что замедляет любые поисковые операции, включая подбор в документах.

Шаг 6. Проверка очереди пересчета цен

В УТ 11 реализован механизм фонового пересчета цен. Если в регистре сведений ОчередьПересчетаЦен накопилось огромное количество записей (например, после массового изменения цен поставщиков), система может блокировать таблицы при попытке подбора товара. Проанализируем состояние этого регистра. Если очередь исчисляется сотнями тысяч записей, дождитесь завершения работы регламентных заданий или очистите очередь, если данные в ней не актуальны.

Заключение

Мы рассмотрели комплекс мер по устранению зависаний при подборе номенклатуры. В большинстве случаев проблема решается либо оптимизацией настроек PostgreSQL (лимиты планировщика), либо очисткой и перестроением индексов полнотекстового поиска. Если же проблема сохраняется, следует обратить внимание на версию платформы 1С — переход на более свежие сборки (например, ветки 8.3.22 или 8.3.23) часто содержит исправления, оптимизирующие работу ПроцессораВывода в СКД.

← На главную