В категории "Договоры" регистрируются заключенные договоры. Категории "Плановые платежи" и "Фактические платежи" связаны с ней с помощью ДП "Договор" (типа Lookup).
Задачи в категории "Плановые платежи" создаются в момент заключения договора — в каждой задаче указываются срок и сумма очередного платежа. Задачи в категории "Фактические платежи" создаются в момент поступления очередного платежа по договору. Сроки и суммы фактических платежей не всегда совпадают с плановыми. В момент поступления очередного фактического платежа эту сумму необходимо распределить между плановыми платежами так, чтобы он "закрывались" в порядке возрастания дат (т.е. чтобы сначала закрывались самые ранние платежи).
Распределение очередного фактического платежа между плановыми осуществляется итерационно:
Схема распределения платежей.
В категории "Плановые платежи" есть следующие ДП:
•"Сумма план" — сумма планового платежа;
•"Таблица оплаты" — таблица, в которую записываются фактические платежи, закрывающие его. В таблице есть две колонки: "Сумма оплаты" и "Дата поступления оплаты";
•"Сумма факт" — сумма всех поступивших на текущий момент фактических платежей, закрывающих данных платеж. Этот ДП рассчитывается как итоговая сумма по всем строкам таблицы;
•"Остаток" — рассчитывается как "Сумма план"-"Сумма факт".
Вся автоматизация по распределению поступивших платежей реализуется в категории "Фактические платежи". Список всех пакетов в привязке к событиям:
Список настроенных в категории смартов.
1. Создайте в категории "Фактические платежи" три вспомогательных ДП:
•"Плановый платеж" (lookup) — в этот ДП на каждой итерации цикла распределения записывается ссылка на очередной плановый платеж;
•"Остаток" (число) — в этот ДП на каждой итерации цикла распределения загружается неоплаченный остаток по очередному плановому платежу; по умолчанию (т.е. на момент создания задачи) этот ДП равен 0;
•"Нераспределенный остаток" (число) — в этот ДП на каждой итерации цикла распределения записывается остаток от фактического платежа, еще не распределенный к текущему моменту между плановыми платежами.
2. Подготовка к запуску цикла распределения.
2.1. Подготовьте начальное значение ДП "Нераспределенный остаток". На начало первой итерации цикла распределения он должен быть равен полной сумме поступившего фактического платежа. Настройте пакет из единственного смарт-действия, в котором будет заполняться этот ДП, и привяжите его к событию "После постановки задачи":
Заполнение ДП "Нераспределенный остаток". Кликните мышью для просмотра изображения в полном размере.
2.2. Подготовьте начальные значения ДП "Плановый платеж" и "Остаток". Для этого настройте еще один пакет из двух смарт-действий и также привяжите его к событию "После постановки задачи". В качестве смарт-фильтра используйте выражение, которое определяет, есть ли незакрытые плановые платежи по этому договору:
Смарт-фильтр для определения незакрытого платежа по договору.
Первое действие пакета записывает в ДП "Плановый платеж" ссылку на первый (самый ранний) плановый платеж.
Запись в первый плановый платеж. Кликните мышью для просмотра изображения в полном размере.
Второе действие записывает в ДП "Остаток" сумму из этого планового платежа.
Запись остатка.
3. Итерация цикла распределения заключается в следующем: очередной плановый платеж закрывается исходя из значения текущего нераспределенного остатка, а затем сам нераспределенный остаток уменьшается на списанную сумму. Событием, запускающим очередную итерацию цикла, является очередное изменение ДП "Остаток".
Создайте два пакета, привязанных к событию "После смены ДП" для ДП "Остаток".
3.1. Первый пакет состоит из единственного действия, которое записывает данные о поступивших средствах в новую строку таблицы платежей в текущем плановом платеже (который "закрывается" на данной итерации).
Запись остатка.
3.2. Второй пакет рассчитывает нераспределенный остаток после закрытия текущего планового платежа. Он тоже состоит из единственного действия:
Расчет нераспределенного остатка.
4. Финальные проверки. Изменение ДП "Нераспределенный остаток" инициирует выполнение еще двух пакетов действий, которые привязаны к событию изменения этого ДП. Эти пакеты определяют, является ли эта итерация последней или нет, и в зависимости от этого выполняют переход на следующую итерацию цикла или подведение итогового нераспределенного остатка (на последней итерации).
4.1. Первый пакет срабатывает, если еще остался нераспределенный остаток и остались незакрытые плановые платежи, то есть цикл нужно продолжать. Условие смарт-фильтра выглядит так:
Проверка наличия нераспределенного остатка.
Пакет состоит из двух действий. Первое действие записывает в ДП "Плановый платеж" ссылку на очередной плановый платеж (выражение "План платеж с ближайшим сроком" уже использовалось на шаге 2.2).
Ссылка на очередной платеж.
Второе действие записывает в ДП "Остаток" неоплаченный остаток из этого планового платежа.
Расчет неоплаченного остатка планового платежа.
Изменение ДП "Остаток" снова запускает пакеты, определенные на шаге 3, т.е. начинает очередную итерацию цикла.
4.2. Второй пакет срабатывает, если еще остался нераспределенный остаток, но незакрытых плановых платежей уже не осталось, то есть цикл нужно прекращать. Такая ситуация может возникнуть, если клиент оплатил большую сумму, чем было запланировано. Условие смарт-фильтра выглядит так:
Смарт-фильтр для наличия нераспределеного остатка при отсутствии незакрытых плановых платежей.
Сам пакет состоит из трех действий. Первое действие записывает в ДП "Плановый платеж" ссылку на последний закрытый плановый платеж.
Ссылка на последний закрытый плановый платеж.
Второе действие записывает в этот последний платеж в таблицу поступивших оплат строку с переплатой, равной нераспределенному остатку.
Запись строки с переплатой.
Третье действие обнуляет оставшийся нераспределенный остаток.
Обнуление остатка.