Кирилл, разработчик 1С в Neti, во время внедрения «1С-ЭДО» на клиентском проекте выявил недокументированную особенность конфигурации «1С:Документооборот», которая замедляет запуск комплексных бизнес-процессов с большим количеством разделений-слияний на схеме. Программист рассказывает, как нашел и устранил эту проблему.
Проблема
Для работы с большими повторяющимися комплексными бизнес-процессами чаще всего используются шаблоны, в которых прописывается полный маршрут обработки предмета. На этапе создания шаблона и в момент запуска процесса происходит проверка, в результате которой система устанавливает верность схемы. Чем сложнее схема, тем дольше проверка. Но некоторые моменты могут увеличивать длительность проверки до абсолютно неприемлемых в работе значений.
На проекте заказчика я столкнулся с тем, что обработка схемы длилась больше 10 минут. Ранее я предполагал, что проверки, занимающие много времени, вызваны загруженностью рабочего сервера.
Я проанализировал производительность и обнаружил большие затраты времени в функции СхемыКомплексныхПроцессов. ЭлементВходящийВНесколькоСегментовРазделениеСлияние
Больше всего заинтересовало количество вызовов. По описанию эта функция «ищет элемент, входящий в несколько сегментов Разделение-Слияние. В качестве результата возвращает его имя».
Поиск элементов разделений-слияний идет путем полного обхода схемы несколькими вложенными циклами. При увеличении вариаций путей для схемы количество вызовов возрастает на порядок. Благодаря тестированию получилась таблица времени выполнения для разного количества разделений-слияний.
Число разделений-слияний | Время проверки схемы |
3 | 1 сек. |
4 | 10 сек. |
5 | ~3 мин. |
6 | больше 30 мин. |
Решение
Я переработал схему комплексного процесса в сторону максимального отказа от разделений в тех точках, где это возможно. Часть процессов заменил на те, в которых допускается параллельность внутри, например, согласование. На отметке в 3 разделения время обработки схемы снизилось до приемлемых значений.
Так особенность конфигурации «1С:Документооборот» была обработана конкретно в моем случае. Если переход на параллельность внутри процессов ограничен техническим заданием, то для повышения производительности указанную функцию необходимо доработать.