Переключатель тепло-холод |
![]() |
Примеры - Операции |
Обсуждение примера на официальном Форуме
ЗадачаКомпания занимается устройством монолитных конструкций нулевого цикла для промышленных строений различного назначения. Типовые проекты повторяются достаточно часто (серии опор, серии хранилищ и пр.) Необходимо создать универсальную шаблонную модель проекта, автоматически учитывающую сезонность производства определенных работ по проекту для зон умеренного климата. По требованию технолога компании бетонирование начиная с 1 октября и до 1 апреля необходимо обеспечивать устройством тепляка. В период с 1 апреля по 1 октября дополнительных работ производить не нужно. Реализация
Для начала создадим в модели упрощенное описание бетонирования. Когда модель будет готова, проверим, как работает наш алгоритм, если работы по бетонированию попадают на теплое или на холодное время года. Работы будем описывать укрупнено, без детализации. Все Операции будут Типа ДПГ Длительность. Ресурсы в данном упрощенном примере не используются. Для наглядности добавим Операции Подготовка и Сдача длительностью по 5 рабочих дней в начале и в конце всего проекта. Эти две Операции производятся в любое время года и их свойства от времени года не зависят.
![]() На основе этой Недели создадим в таблице Календарей Календарь 5д8ч. Это Календарь для обычных дневных Операций по обычной пятидневной неделе. ![]() Операции типа Бетонирование и Набор прочности относятся к непрерываемым Операциям. В подавляющем большинстве случаев процесс бетонирования на одном фрагменте монолита не прерывается (выходные, праздники, ночь) после начала, а процесс набора прочности нельзя прервать на ночь или выходные, поскольку это определенное время, а не деятельность, которую можно остановить, а потом снова продолжить. Для корректного моделирования подобных задач необходимо, во-первых, сделать Календарь в котором всё время рабочее и не существует никаких перерывов, и во-вторых, установить в свойствах Непрерывность выполнения. ![]() Создадим непрерывный Календарь 7д24ч. Для начала в таблице Недели создадим для этого Неделю 7д24ч. ![]() Теперь на основе этой Недели создадим в таблице Календари Календарь 7д24ч. ![]() ![]() Будьте внимательны – в подобный Календарь не должны попасть Календарные исключения праздников, каникул и т.д. (это может произойти, если вы не создали новый календарь, а скопировали уже имеющийся). Проверьте вкладку Исключения. ![]() Календари готовы. Теперь опишем бетонирование в режиме «тепло». Поскольку никаких дополнительных работ кроме самого бетонирования не предусматривается, опишем его Операцией Бетонирование (тепло) и Операцией Набор прочности. Первая будет для наглядности длительностью 2 дня, вторая по требованиям технолога 9 дней. Соединим эти операции Связью Финиш-Старт. ![]() Операциям Бетонирование и Набор прочности сразу включаем Календарь 7д24ч и Непрерывность исполнения. ![]()
Но мы заранее не можем сказать, на какое время года придётся наше Бетонирование. Все зависит от многих параметров: когда начнется проект, через какой интервал времени внутри проекта начнется конкретно это Бетонирование, как идет исполнение проекта до него (отставания, опережения) и так далее. Таким образом, может сложиться такая ситуация, что Бетонирование попадет на холодное время года, а там требования другие.
![]() Описание двух вариантов работ по Бетонированию готово. Теперь необходимо сделать так, чтобы в зависимости от текущей даты в момент старта работ по Бетонированию выбирался или тот или другой вариант. Подобные «развилки» реализуются при помощи Операций с Типом ДПГ Переключатель. Добавим эту Операцию Переключатель Тепло-Холод перед двумя цепочками операций. ![]() Проведем одну Связь от этой Операции к началу «теплой» цепи работ, вторую – к «холодной». В настройках этих Связей необходимо указать – какая из них происходит по какому состоянию Переключателя. Поставим «теплой» цепи Условие переключателя Да, «холодной» Условие переключателя Нет. ![]() Выбор варианта работ мы сделали. Теперь замкнем окончание обеих цепей работ по Бетонированию на финальную Операцию Сдача. Она завершает любой вариант производства работ. ![]() Проверим действие созданного Переключателя. В поле Состояние переключателя включим Да и произведем Расчет расписания без ограничений на ресурсы. В проекте осталась только «теплая» цепь работ. ![]() Переключим состояние в Нет и снова произведем Расчет расписания без ограничений на ресурсы. В проекте осталась только «холодная» цепь работ. ![]() ![]() Самое важное свойство Переключателя в том, что исключенная из проекта по условию цепь работ полностью игнорируется при расчете длительности проекта, затрат, доходов, расхода материалов, занятости ресурсов. В расчетах участвует только оставшаяся цепь. Выбор варианта производства работ по Бетонированию мы реализовали. Но в условиях задачи указано требование проводить работы по определенному варианту в зависимости от даты. Логика проверки следующая. Мы должны определить, какая дата является текущей в момент принятия решения по производству работ по Бетонированию. Сразу начинать Бетонирование или сначала строить тепляк. Поэтому проверка даты будет производиться для нашей операции Переключатель. Переключатель имеет нулевую длительность, поэтому для проверки можно воспользоваться как его свойством Начало, так и свойством Окончание. Возьмем Начало. Условие будет выглядеть следующим образом:
В самом простом случае (если проект разовый) можно написать Формулу явной проверки условия с точными датами периода, в котором идет проект – например 01.10.2014 и 01.04.2015. Но тогда мы потеряем универсальность нашей модели. В следующем году запуская в работу подобный проект нам нужно будет не забыть, что расчеты состояний работ по Бетонированию производятся по данной формуле и произвести в ней коррекцию лет. Подобный путь может привести к ошибкам. Поэтому сделаем Формулу универсальной, на любые года. Нам необходимо уйти от связи с номером года и оставить в работе только номер месяца, поскольку месяцы в любом году повторяются. Для этого необходимо получить номер месяца из Поля Начало.
![]() Далее в Таблице Формулы напишем Формулу его заполнения: ![]() Не забываем включить у Формулы свойство Автоматически выполнять в Гантте работ после расчета расписания. В противном случае нам придется не забывать вручную запускать исполнение Формулы. ![]() Мы приравняли значения Поля Начало нашему новому Полю Начало (текст). После этого произведем Расчет расписания без ограничений на ресурсы, чтобы сработала Формула. Данные перенеслись. ![]() Нужные нам символы, указывающие на номер месяца – 4 и 5 слева. Создаем еще одно вспомогательное Поле Номер месяца. В свойствах указываем, что Поле числовое. ![]() В Таблице Формулы пишем для него Формулу определения значений. Для выбора нужных символов из текста существует Функция SubString. Данная Функция берет из указанного Поля нужное количество символов с указанной позиции. В нашем случае она будет выглядеть так:
Не забываем поставить этой Формуле свойство Автоматически выполнять в Гантте работ после расчета расписания. ![]() Произведем Расчет расписания без ограничений на ресурсы. Мы получили цифру соответствующую месяцу начала каждой Операции. ![]() Осталось написать Формулу для реакции на данное число нашего Переключателя. В Таблице Формулы опишем логику работы Переключателя:
![]()
Не забываем поставить этой формуле свойство Автоматически выполнять в Гантте работ после расчета расписания.
Формула проверяет значение в Поле Номер месяца. Если оно больше трех, то производится вторая проверка на то, что оно меньше десяти. Если оба условия выполнены, то в Поле Состояние переключателя пишется Да, в противном случае Нет.
![]()
Для чего Расчет расписания необходимо производить дважды.
Переключатель принял значение Да, в проекте осталась только цепочка работ относящаяся к теплому времени года. ![]() Поменяем Текущее время проекта на 1 ноября 2014 года. ДВАЖДЫ произведем Расчет расписания без ограничений на ресурсы. Переключатель принял значение Нет, в проекте осталась цепочка работ относящаяся к холодному времени года. ![]() Теперь проверим универсальность алгоритма по годам. Поменяем Текущее время проекта на 1 июля 2016 года. ДВАЖДЫ произведем Расчет расписания без ограничений на ресурсы. Расписание соответствует теплому времени года независимо от номера года. Задача решена. Для контроля скрытых Переключателем цепочек Операций можете включить в настройках Гантта работ пункт Отображать операции отмененные переключателем. ![]() Примеры![]() |