Кирилл, разработчик 1С в Neti, во время внедрения «1С-ЭДО» на клиентском проекте выявил недокументированную особенность конфигурации «1С:Документооборот», которая замедляет запуск комплексных бизнес-процессов с большим количеством разделений-слияний на схеме. Программист рассказывает, как нашел и устранил эту проблему.

 

Проблема

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

На проекте заказчика я столкнулся с тем, что обработка схемы длилась больше 10 минут. Ранее я предполагал, что проверки, занимающие много времени, вызваны загруженностью рабочего сервера.

Я проанализировал производительность и обнаружил большие затраты времени в функции СхемыКомплексныхПроцессов. ЭлементВходящийВНесколькоСегментовРазделениеСлияние

Больше всего заинтересовало количество вызовов. По описанию эта функция «ищет элемент, входящий в несколько сегментов Разделение-Слияние. В качестве результата возвращает его имя».

Поиск элементов разделений-слияний идет путем полного обхода схемы несколькими вложенными циклами. При увеличении вариаций путей для схемы количество вызовов возрастает на порядок. Благодаря тестированию получилась таблица времени выполнения для разного количества разделений-слияний.

 

Решение

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

Так особенность конфигурации «1С:Документооборот» была обработана конкретно в моем случае. Если переход на параллельность внутри процессов ограничен техническим заданием, то для повышения производительности указанную функцию необходимо доработать.