Ускорение процесса восстановления последовательности взаиморасчетов в БП КОРП

Краткое содержание:

Методика кардинального ускорения процесса восстановления последовательности взаиморасчетов в БП КОРП

Общая информация о проекте

Проект

CTS-201-001

Клиент

УК ПС Групп, ООО

Партнер

Лоза Внедренческий Центр, ООО

1С:Эксперт

Любушкин Сергей Александрович

Условия

Основная проблема

В систему регулярно поступают документы задним числом, что приводит к сбросу границы последовательности взаиморасчетов и потере актуальности расчетов. Для восстановления последовательности необходимо за ограниченное время перепровести все документы, начиная с даты этого документа и до сегодняшнего дня. При вводе документа месячной давности (что случается в системе практически ежедневно) необходимо будет перепровести около 100 000 документов за ночь.

По состоянию на начало проекта документы перепроводятся в среднем со скоростью 4.32сек. Таким образом, для перепроведения всех документов понадобится 120 часов (5суток), что совершенно неприемлемо с точки зрения бизнес-процессов предприятия.

Для того, чтобы ускорить систему до необходимого уровня (100 000 документов за 8часов) необходимо, чтобы один документ в среднем проводился 0.288 сек. Достигнуть такой производительности за разумный срок не представляется возможным.

Предложенное решение

Общая идея

Основная идея: разбить документы на независимые группы и перепроводить эти группы в несколько потоков, увеличивая таким образом скорость обработки данных за счет параллельности, а не ускорения проведения документа.

Для реализации такой схемы необходимо разделить документы на независимые группы, которые удовлетворяют следующим требованиям:

Был проведен анализ бизнес-процессов данного предприятия и прдложено следующее решение: группировать документы по договору контрагента.

Анализ деталей реализации

Для физической реализации этой группировки было решено добавить в последовательность взаиморасчетов новое измерение: договор контрагента. В рамках проекта ЦКТП были проведены консультации с разработчиками типовой Бухгалтерии КОРП, которые подтвердили корректность такого решения. Из логики бизнес-процессов системы было очевидно, что документы, относящиеся к разным договорам являются независимыми. Были так же проведены эксперименты, которые показали, что при параллельном восстановлении последовательности по разным договорам контрагента не возникает обращений к общим ресурсам, то есть разные потоки не блокируются. Таким образом, предложенная группировка соответствует предъявляемым требованиям.

Были проведены эксперименты для вычисления оптимального количества параллельных потоков при восстановлении последовательности. Необходимо было выбрать такое количество потоков, которое обеспечивало бы максимальную загруженность оборудования и, соответственно, максимальную общую скорость восстановления последовательности. Это число потоков оказалось равным десяти. Таким образом, была найдена возможность ускорения процесса восстановления последовательности в 10 раз. Если раньше один документ проводился в среднем за 4.32 секунды, то теперь за это же время будет проводиться 10 документов, однако этого будет все еще недостаточно для достижения целевой производительности, поскольку 100 000 документов перепроведутся за 12 часов (вместо 8 требуемых).

Однако, выделение независимых групп документов за счет добавления нового измерения в последовательность позволяет так же сократить общее количество документов, которые необходимо перепровести. Раньше последовательность имела одну общую границу, и любое проведение задним числом влияло на все документы. Для восстановления такой последовательности(то есть, для перемещения границы на актуальную дату) необходимо было перепровести все документы. При добавлении в последовательность нового измерения ситуация кардинально изменилась. Теперь проведение документа задним числом влияет только на документы, имеющие такой же договор контрагента. Следовательно, теперь нужно перепроводить только документы с этим договором. Все остальные документы никак не затрагиваются и не должны перепероводится. Иначе говоря, у последовательности появилось множество разных границ (каждая граница - по своему договору контрагента), которые можно и нужно перемещать независимо друг от друга.

Анализ данных рабочей системы показал, что максимальное количество документов, которые необходимо будет перепровести с учетом этого нового фактора составляет около 30%от общего числа. То есть, вместо 100 000 документов необходимо перепровести всего около 33 000. Таким образом появилась реальная возможность уложиться в требования клиента по производительности и даже превысить их - восстановить последовательность всего за 4 часа.

Более углубленный анализ данных системы позволил выявить документы, которые нарушали построенную схему, так как мог относиться к нескольким договорам одновременно - это документы "Корректировка долга" и "Авансовый отчет". Документы этих типов присутствовали в системе, однако их количество было относительно невелико. В качестве решения проблемы был предложен следующий подход. Если в восстанавливаемом периоде времени присутствует документ содержащий более одного договора, то процесс восстановления выполняется следующим образом:

То есть, документы "Корректировка долга" и "Авансовый отчет" как бы разделяют весь временной отрезок перепроведения документов на меньшие подотрезки, внутри которых документы по-прежнему можно перепроводить параллельно. Это должно в целом несколько замедлить процесс восстановления последовательности, однако, с учетом имеющегося запаса (4 часа при требовании 8 часов) времени должно хватить.

Реализация механизма параллельного перепроведения

Реализованный механизм включает в себя обработку, которая позволяет пользователю настроить и запустить процесс восстановления последовательности. При запуске процесса обработка создает управляющее фоновое задание (см. ниже) и включает обработчик ожидания. При каждом срабатывании обработчика, обработка отображает ход восстановления последовательности и контролирует окончание процесса восстановления.

Управляющее фоновое задание анализирует текущее состояние последовательности и выделяет группы документов (по отдельным договорам), которые необходимо перепровести. При необходимости (если в заданном периоде присутствуют документы "Корректировка долга") группы по отдельным договорам дополнительно делятся на подгруппы по периодам между документами "Корректировка долга".

После этого управляющее фоновое задание запускает до 10 исполнительных фоновых заданий, каждому из которых выдается своя группа документов. Список исполнительных фоновых заданий контролируется с определенной периодичностью. После завершения фонового задания (что происходит после того, как группа обработана), запускается новое фоновое задание и ему выдается новая группа.

Исполнительное фоновое задание получает на входе номер группы документов (из списка, составленного управляющим фоновым заданием), которые необходимо перепровести. После завершения перепроведения всех документов группы, исполнительное фоновое задание помечает группу, как обработанную, и завершается.

Результат

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