Обратились с вопросом о необходимости ускорить загрузку банковских выписок, т.к. на тот момент обработка одного файла (>=2000 операций) в среднем занимала два с половиной часа.
Конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.133.27), обработка КлиентБанк полностью типовая.
Анализируя типовой код, дошел до функции ЗагрузкаВыпискиПоБанковскомуСчету.РаспознатьВыписки и обратил внимание, что в цикле для каждой операции выполняется вызов ЗагрузкаВыпискиПоБанковскомуСчету.ХозяйственнаяОперация.
На тестовой среде, время вызова для каждого документа было в районе 3 секунд, т.е. 100 минут для выписки с 2000 операций. Всё, что касается типового кода ДО функции РаспознатьВыписки и ПОСЛЕ неё, отрабатывало быстро и вопросов не возникало.
На первый взгляд типовой механизм определения хозяйственной операции показался сложным и желания с ним разобраться не возникло.
Появилась идея оптимизировать определение хозяйственной операции, разбив на несколько потоков.
Для этого я использовал механизм БСП, ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков.
Для начала использования необходимо:
- Подключить расширение
- Установить значение константы Использовать параллельную обработку выписок в значение Истина
- Установить значение константы Размер порции параллельной обработки выписок предполагаемый размер порции для одного потока (например 400 и тогда файл с 2 000 операций будет обрабатываться в 5 потоков).
- Установить значение константы Количество потоков длительных операций (если ранее не использовалась) в зависимости от возможностей вашего сервера.
Некоторые особенности:
- Отключить данный механизм очень просто, достаточно установить значение константы Использовать параллельную обработку выписок в значение Ложь.
- Если количество операций в выписке <= значению константы Размер порции параллельной обработки выписок, будет работать типовой механизм.
- Количество потоков определяется в зависимости от количества операций в выписке и константы Размер порции параллельной обработки выписок. При этом нужно понимать, что количество одновременно работающих потоков не может быть больше значения константы Количество потоков длительных операций. Оставшиеся потоки будут добрасываться по мере завершения предыдущих.
- Решение не является чем-то на 100% правильным и универсальным, однако в моём случае результат получился положительным.
В результате применения расширения, время загрузки банковской выписки сократилось со 150 минут до 40-45 минут.
Надеюсь, это решение окажется для кого-то полезным.
Буду рад конструктивной критике и предложениям.
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.149.18