При работе в конфигурации 1С:Управление торговлей 11 пользователи часто сталкиваются с проблемой: при попытке подобрать товары в документ Установка цен номенклатуры система «замирает» на длительное время (от 10 до 15 минут). Ситуация осложняется тем, что конфигурация может быть полностью типовой, а замеры производительности не всегда показывают явные ошибки в коде. В этой статье мы подробно разберем, почему это происходит и как оптимизировать работу системы.
Проблема часто локализуется не в самом нажатии кнопки, а в процедурах серверного модуля, которые отвечают за расчет и вывод цен в форму подбора. Рассмотрим основные причины возникновения «тормозов»:
Прежде чем переходить к сложным настройкам сервера, проанализируем состояние кэша. Локальные временные файлы часто становятся причиной «фантомных» задержек. Очистку следует выполнить как на клиентских машинах, так и на сервере 1С.
Проверим состояние индексов базы данных. Если используется MS SQL Server, рекомендуется выполнить перестроение индексов (Reindex) и обновление статистики. Для этого можно использовать стандартные планы обслуживания SQL. Особое внимание уделим регистру сведений ЦеныНоменклатуры, так как именно к нему обращается документ при подборе.
Если ваша база работает под управлением PostgreSQL, и вы наблюдаете разницу в скорости (например, 4 секунды на MS SQL против 950 секунд на Postgres), проблему стоит искать в настройках postgresql.conf. Выясним причину: планировщик PostgreSQL иногда выбирает крайне неэффективный путь соединения таблиц при работе с временными таблицами 1С.
Проанализируем следующие параметры в конфигурационном файле:
on.Разберем ситуацию, когда зависание происходит в общем модуле УстановкаЦенСервер. Часто «точкой остановки» является метод Вывести() процессора компоновки данных. Рассмотрим примерный фрагмент кода, где это происходит:
// В общем модуле УстановкаЦенСервер
ДанныеОтчета = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеОтчета);
// Именно на этой строке происходит длительное зависание
ДанныеОтчета = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Проанализируем, почему это происходит. В новых редакциях УТ 11 (начиная с 11.5) запрос в СКД стал значительно сложнее. Он собирает данные из множества регистров, включая остатки, цены и иерархию видов цен. Если в документе выбрано 5 и более видов цен, СКД генерирует тяжелый запрос с множественными левыми соединениями.
Рекомендация: Если вы столкнулись с этой проблемой, попробуйте временно уменьшить количество одновременно выбираемых видов цен в документе, чтобы проверить, сократится ли время подбора.
В форме подбора номенклатуры часто включены колонки, которые требуют динамического расчета. Это «Текущие цены» и «Остатки на складах». Рассмотрим, как их отключение влияет на скорость:
Попробуйте зайти в настройки формы подбора и отключить видимость колонок с ценами и остатками. Если после этого зависание исчезнет, значит, проблема в производительности запросов к регистру ЦеныНоменклатуры.
Даже если у вас настроено регламентное задание на обновление индекса каждую минуту, сам индекс может быть поврежден или сильно фрагментирован. Выясним, как это исправить:
Иногда файлы индекса в папке Index на сервере приложений 1С разрастаются до огромных размеров, что замедляет любые поисковые операции, включая подбор в документах.
В УТ 11 реализован механизм фонового пересчета цен. Если в регистре сведений ОчередьПересчетаЦен накопилось огромное количество записей (например, после массового изменения цен поставщиков), система может блокировать таблицы при попытке подбора товара. Проанализируем состояние этого регистра. Если очередь исчисляется сотнями тысяч записей, дождитесь завершения работы регламентных заданий или очистите очередь, если данные в ней не актуальны.
Мы рассмотрели комплекс мер по устранению зависаний при подборе номенклатуры. В большинстве случаев проблема решается либо оптимизацией настроек PostgreSQL (лимиты планировщика), либо очисткой и перестроением индексов полнотекстового поиска. Если же проблема сохраняется, следует обратить внимание на версию платформы 1С — переход на более свежие сборки (например, ветки 8.3.22 или 8.3.23) часто содержит исправления, оптимизирующие работу ПроцессораВывода в СКД.