Проблемы с производительностью в 1С:Управление торговлей (УТ 11) — одна из самых частых и сложных тем для обсуждения. Часто система начинает вести себя нестабильно: документы проводятся долго, а пользователи постоянно сталкиваются с ошибками вида «Превышено максимальное время ожидания предоставления блокировки». В этой статье мы подробно разберем причины таких тормозов, проанализируем технические логи и найдем эффективные способы решения проблемы, основываясь на практическом опыте специалистов.
Для начала разберем ситуацию, когда при проведении документа РеализацияТоваровУслуг или ПриобретениеТоваровУслуг возникает ошибка блокировки. Проанализируем стек вызова, который обычно выдает система. Чаще всего проблема локализуется в следующих объектах:
ГрафикПлатежей.РасчетыСКлиентами.АналитикаУчетаПоПартнерам.ЗапасыСервер).Когда мы видим в тексте ошибки обращение к РегистрСведений.ГрафикПлатежей.МодульМенеджера и метод Блокировка.Заблокировать(), это сигнализирует о том, что система пытается рассчитать график оплат в реальном времени. Если в транзакции участвует несколько пользователей, пытающихся провести документы по одному и тому же партнеру или заказу, возникает очередь, перерастающая в таймаут.
Одним из самых эффективных и быстрых способов решения «зависших» блокировок в УТ 11 является манипуляция с настройками казначейства. Выясним причину: при использовании режима «Онлайн» система создает множество фоновых заданий и записей во внутренних таблицах для актуализации расчетов.
Рассмотрим алгоритм действий по «сбросу» этого механизма:
Этот простой метод часто помогает очистить «очередь» расчетов, которая могла накопиться из-за некорректно завершенных транзакций или программных сбоев.
Проанализируем ситуацию, описанную в технологическом журнале (ТЖ). Ошибка часто возникает в методе ЗапасыСервер.ЗаполнитьВидыЗапасовПоТоварамОрганизаций. В УТ 11 механизм видов запасов отвечает за подбор конкретных партий (ГТД, поставщиков) при отгрузке. Если складские остатки «раздуты» или имеют отрицательные значения в разрезе ключей аналитики, запрос на подбор видов запасов начинает работать крайне медленно.
Что мы можем сделать:
АналитикаУчетаНоменклатуры.Для глубокой диагностики нам необходимо понимать, кто именно является «виновником» блокировки. Рассмотрим пример записи из технологического журнала, предоставленный автором темы:
Context='Форма.Записать : Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента
...
ОбщийМодуль.ЗапасыСервер.Модуль : 5514 : Блокировка.Заблокировать();'
Если в журнале регистрации (ЖР) мы видим серые записи (незавершенные транзакции) других пользователей, проанализируем их действия. Часто бывает, что один пользователь открыл форму документа, система начала проведение, но из-за модального окна или долгого ожидания на сервере транзакция «повисла».
Рекомендуем обратить внимание на:
Если база данных работает на MS SQL Server, проблема может крыться в настройках параллелизма. Проанализируем параметры MAXDOP (Max Degree of Parallelism). Для баз 1С рекомендуется устанавливать это значение в 1. Если SQL-сервер пытается распараллелить выполнение запроса к маленькой таблице (например, к ГрафикПлатежей), это может привести к блокировке всей таблицы целиком вместо конкретных строк.
Также важно регулярно выполнять обслуживание базы данных. Разберем основные шаги:
Разберем конкретный пример кода, который часто вызывает проблемы. В модуле менеджера регистра ГрафикПлатежей вызывается установка блокировок. Если в таблице ТаблицаОбъектовОплаты передается пустой или слишком широкий набор данных, блокировка накладывается на избыточный диапазон.
Посмотрим на пример правильной установки управляемой блокировки, который следует проверить в коде (если база нетиповая):
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ГрафикПлатежей");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = ТаблицаОбъектовОплаты;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ОбъектОплаты", "СсылкаНаДокумент");
Блокировка.Заблокировать();
Важно убедиться, что ТаблицаОбъектовОплаты содержит только необходимые ссылки. Если туда попадает Неопределено или пустая ссылка, система может заблокировать гораздо больше данных, чем требуется.
Тормоза УТ 11 — это всегда комплексная проблема. Начните с переключения режима взаиморасчетов (это помогает в 80% случаев), затем проверьте настройки параллелизма на SQL и убедитесь, что в системе не висят незавершенные транзакции. Помните, что использование SSD не отменяет необходимости грамотной настройки индексов и регулярного обслуживания базы данных.