Оптимизация проведения документов списания партий в УПП 1.3
Почти в каждой конфигурации УПП 1.3 (возможно, и в УТ 10.3) есть медленный запрос, тормозящий проведение документа списания. Данная публикация раскрывает места вызова данного запроса и приводит пример оптимизации.
Пример показывает результаты проведения документа «Реализация товаров и услуг», но метод работает и для других документов списания партий.
- Описание
- Подробнее
Описание
Примерно, в 2019 году я отлаживал некоторую разработку в УТ 10.3.15.9, в ходе которой проводил документ «Реализация товаров и услуг» (РТУ). После многочисленных проведений и я обнаружил, что иногда при проведении происходит длительное зависание (минута-две), когда обычно РТУ проводится в течение 10 секунд. В конфигураторе замер производительности показал топовую строку кода:
УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Ссылка, Движения.СписанныеТовары.Выгрузить(),,,,,,,,,,Отказ);Другие детали конфигуратор скрыл, на тот момент у меня отсутствовал доступ к технологическому журналу (ТЖ), к СУБД тоже отсутствовал (хотя было известно, что это MS SQL Server 2008 R2), и задача была другая, поэтому дальнейшее расследование остановлено.
Прошло время (2018, 2019, 2020), и вот в 2021 году поступила задача: в системе УПП 1.3.162 медленно проводится реализация.
Для начала проверен программный код, и обнаружена следующая конструкция:


Что мы наблюдаем: в модуле РТУ создается COM-соединение с базой MySQL (которая может оказаться достаточно далеко, и связь с которой может оказаться достаточно медленной и с прерываниями), выполняется команда в базе MySQL(которая тоже может быть длительной), и все это выполняется два раза: в процедурах ПередЗаписью, ОбработкаПроведения.
Очевидно, что данный функционал следует перестроить архитектурно, что в первую очередь и сделано:
1) создан регистр сведений «Документы интеграции», в который записывается информация при проведении РТУ;
2) создано регламентное задание, которое соединяется с базой MySQL и выполняет необходимые команды.
Данное изменение перестало мешать и оказалось полезным для разгрузки времени проведения, но не было основной причиной.
На этот раз доступ к ТЖ был, собраны события: CALL, SCALL, DBMSSQL, EXCP.
ТЖ показал:
