Обсуждение примера на официальном Форуме

Иногда компания-подрядчик хочет в своей модели учесть поступающие оплаты произведенных работ от заказчика. Но заказчик поставил условие: оплата производится только для полностью выполненных работ и только с 20 по 22 число каждого месяца. Если к указанной дате плановый объем работы не выполнен (или не принят заказчиком), то оплата будет перенесена на 20-22 число следующего месяца.
Учесть в модели специфику оплаты заказчиком завершенных работ:
— Если объем работ завершен и принят Заказчиком, то оплата производится в ближайшее 20-22 число.
— Если объем не завершен или не принят заказчиком до 20-го числа текущего месяца, то оплата переносится на 20-22 число следующего месяца.
— Если 20 или 21 число попадает на выходной день, то оплата производится в ближайший за ним рабочий день.
Для того, чтобы наглядно увидеть, как происходят оплаты в проекте, создадим три идущих одновременно
Операции, после каждой из которых подразумевается оплата. Когда модель будет готова — изменим длительность
Операций и посмотрим, что произойдет с оплатами.
Операции производства работ будем моделировать исключительно по сроку (без ресурсов), соответственно их
Тип ДПГ будет
Длительность. Начнем наш проект 1-го августа 2014 года и поставим
Операциям длительность 10, 20 и 30 рабочих дней. Получаем в нашем
Гантте работ операции Работы 1, Работы 2 и Работы 3.
В нашем примере каждая оплата имеет определенную дату и сумму. Оплаты не повторяющиеся, уникальные, поэтому для каждой из них создадим
Операцию с
Типом ДПГ Контрольное событие. В нашем графике появляется три
Контрольных события оплат: Оплата 1, Оплата 2 и Оплата 3. Каждую
Операцию Работа свяжем с соответствующей
Операцией Оплата
Связью Финиш-Старт. Здесь возможно применение и
Связи Финиш-Финиш, поскольку у
Операции Оплата нулевая длительность.
Можете каждую оплату поставить следом за соответствующей работой. Также можно все работы собрать в одну группу, а оплаты в другую. Все зависит от того, как вам необходимо отслеживать данные
Операции. Если подобных оплат в проекте много, то их можно для удобства сгруппировать в отдельную Фазу.
Если при работе с моделью необходимы оба представления, то можно для каждого случая создать соответствующую
Структуру. Необходимые
Операции мы реализовали. По факту завершения каждой из Работ произойдет соответствующая Оплата. Теперь необходимо сделать так, чтобы оплата происходила только 20 числа каждого месяца, а если данное число попадает на субботу или воскресенье, то в ближайший рабочий день. Для этого воспользуемся
Календарными исключениями. Но сначала для подобных оплат необходимо создать их собственный
Календарь оплат. Как всегда создание
Календаря начинается с создания его
Недели. Пусть это будет
Неделя оплат. Переходим в таблицу
Недели и создаем там
Неделю оплат. Оплата будет происходить в рабочее время, например с 9.00 до 17.00 по всем дням недели кроме субботы и воскресенья.
После этого переходим в таблицу
Календари и на основе
Недели оплат создаем
Календарь оплат. Если наш заказчик с оплатами работает в обычном офисном режиме, то можно в этот
Календарь добавить уже имеющиеся в системе
Календарные исключения праздничных дней.
Теперь создадим
Календарное исключение, оставляющее рабочими дни 20, 21 и 22 каждого месяца. Логика следующая: если день оплаты (20 число) попадает на рабочий день, то оплата производится сразу, если 20 попадает на субботу, то оплата будет произведена 22, а если 20 попадет на воскресенье, то 21 соответственно.

При моделировании подобных циклических исключений необходимо создать их так, чтобы они заведомо происходили во время всего проекта (если нет условий на определенное время начала или завершения). Работы у нас начинаются в августе 2014. Создадим
Календарное исключение в январе-феврале 2014. Далее оно автоматически будет повторяться весь проект.
Внимание! При моделировании Календарных исключений не используйте последний день февраля или последние дни месяцев, в которых 31 день. Это нестандартные дни, имеющие собственный график повторяемости, что может внести искажения в желаемый результат.
Календарное исключение в данном случае явно меньше месяца, превышения интервала
Календарного исключения над интервалом повторяемости не происходит, поэтому данное
Календарное исключение будет следующим: с 00:00 23.01.2014 по 00:00 20.02.2014 с периодом повторяемости Каждый 1 месяц.
Добавим в наш
Календарь оплат
Календарное исключение оплат.
Мы наложили на наш
Календарь оплат ограничение, оставляющее только три рабочих дня в месяце.
Теперь необходимо сформировать денежный поток. Для этого в таблице
Стоимостные составляющие создадим
Стоимостную составляющую Оплаты Заказчика. В реальном проекте данные оплаты могут проходить по другой
Стоимостной составляющей — все зависит от того, как вы считаете затраты и доходы в модели.
Перейдем в
Гантт работ и в свойствах наших
Операций Оплата 1, 2 и 3 в закладке
Стоимостные составляющие назначим
Фиксированную стоимость работ в соответствии с нашим договором. Допустим это 1000, 2000 и 3000 рублей.
После этого
Операциям Оплата включим
Календарь оплат. И произведем
Расчет расписания без ограничения на ресурсы и
Расчет затрат.
Мы получили следующую картину: у
Операции Работы 1 оплата произойдет 20 августа, а у
Операций Работы 2 и 3 уже в следующем месяце, поскольку они закончатся позже 20 августа. На
Гантте работ выведены даты окончания
Операций и
Диаграмма сумм по нашей
Стоимостной составляющей. Но в сентябре оплаты произойдут 22 числа. Проверим работоспособность нашего
Календарного исключения. При высокой детализации видно, что 20 число попало на субботу и оплата будет произведена в ближайший понедельник.
Алгоритм сработал правильно. Проверим теперь его работу на других исходных данных. Пусть по каким-то причинам операция Работы 3 затянулась, например, до 24 сентября, т.е. стала длительностью 39 рабочих дней.
Произведем
Расчет расписания без ограничения на ресурсы и
Расчет затрат после изменения исходных данных.
Оплата Работы 3 теперь произойдет уже 20 октября. Условия задачи выполнены.
Примеры
Пример модели в Spider Project