Здравствуйте! Помогите советом или направьте где поискать. Ситуация такая - работает человек определенный период. Носит человек униформу, со своим сроком носки. В данный период человех ходит в 1/2/3 декрета. Во время декрета срок носки предмета приостанавливается. Так вот задача - Получил человек при устройстве форму и срок носки пошел (допустим 36 месяцев), по истечении 36 месяцев ему дают новый предмет с таким же сроком. А уйдя в декрет к сроку предмета (36 месяцев) прибавляется срок декрета в месяцах. Нужна формула прибавляющая срок носки предмета и проверяющая на выпадающий декрет и прибавление срока декрета.
Здравствуйте! Помогите советом или направьте где поискать. Ситуация такая - работает человек определенный период. Носит человек униформу, со своим сроком носки. В данный период человех ходит в 1/2/3 декрета. Во время декрета срок носки предмета приостанавливается. Так вот задача - Получил человек при устройстве форму и срок носки пошел (допустим 36 месяцев), по истечении 36 месяцев ему дают новый предмет с таким же сроком. А уйдя в декрет к сроку предмета (36 месяцев) прибавляется срок декрета в месяцах. Нужна формула прибавляющая срок носки предмета и проверяющая на выпадающий декрет и прибавление срока декрета.AllaxHaTrevelax
Что-то попытался соорудить в полу-экспериментальном виде. Потуги см. под голубым заголовком, начиная с ячейки J13.
Для того, чтобы первый декрет автоматически возник "где-то внутри" трудовой жизни сотрудницы, я добавил начальный бездекретный период, считая что она начала работу с 09.09.2006 года.
В общем, может, поможет чем-то моя мастырка.
Что-то попытался соорудить в полу-экспериментальном виде. Потуги см. под голубым заголовком, начиная с ячейки J13.
Для того, чтобы первый декрет автоматически возник "где-то внутри" трудовой жизни сотрудницы, я добавил начальный бездекретный период, считая что она начала работу с 09.09.2006 года.
В общем, может, поможет чем-то моя мастырка.Gustav
Проблему вижу. Похоже, нужен несколько иной подход к вопросу. Прямо сейчас, сходу, решения нет. Подумаю над этим некоторое время (возможно, несколько дней) ...
[p.s.]Желающие могут присоединиться к обсуждению и предложить свои варианты видения и решения проблемы. Я совсем не претендую на монополию, я лишь предложил первый, оказавшийся не совсем удачным, черновой вариант решения.
Проблему вижу. Похоже, нужен несколько иной подход к вопросу. Прямо сейчас, сходу, решения нет. Подумаю над этим некоторое время (возможно, несколько дней) ...
[p.s.]Желающие могут присоединиться к обсуждению и предложить свои варианты видения и решения проблемы. Я совсем не претендую на монополию, я лишь предложил первый, оказавшийся не совсем удачным, черновой вариант решения.Gustav
Декреты между собой хоть пересекаться не могут? Т.е. не может быть такого, чтобы первый декрет еще не закончился, а второй уже начался? Хорошо бы, чтобы не могло такого быть - уже полегче будет.
А больше трёх декретов тоже не бывает? Хорошо бы, чтобы не было (с точки зрения задачи, конечно).
Декреты между собой хоть пересекаться не могут? Т.е. не может быть такого, чтобы первый декрет еще не закончился, а второй уже начался? Хорошо бы, чтобы не могло такого быть - уже полегче будет.
А больше трёх декретов тоже не бывает? Хорошо бы, чтобы не было (с точки зрения задачи, конечно).Gustav
Ну, что-то в очередной раз получилось. Держите решательную таблицу по декретам!
Общий принцип такой. Берем интервал дат по сроку использования одежды и по очереди сравниваем его на пересечение с интервалами дат декретов. Декреты должны быть отсортированы по возрастанию дат (что сейчас и так выполняется).
Если первый декрет пересекается со сроком одежды (хоть по одному дню), то добавляем все месяцы декрета ко всем месяцам исходного срока (срок 0) и получаем новый срок (срок 1). Если же первый декрет не пересекается со сроком 0, то принимаем срок 1 = сроку 0 и переходим к следующему декрету.
Второй декрет сравниваем на пересечение уже со сроком 1 и аналогично получаем срок 2. Если пересечение есть, то срок 2 = срок 1 + декрет 2, иначе срок 2 = срок 1. И так далее, пока не переберем все декреты.
Окончательно реальный срок использования одежды будет равен сроку N (в нашем случае N = 3). Если не будет пересечения ни с одним декретом, то срок 0 просто перепишется в срок N без изменений.
Предполагается, что декреты не должны пересекаться между собой по датам (что сейчас выполняется). Учёт пересечения декретов в принципе возможен, но для этого придется вычитать длину пересечения двух декретов из общего срока, что ощутимо усложнит алгоритм.
Ну, что-то в очередной раз получилось. Держите решательную таблицу по декретам!
Общий принцип такой. Берем интервал дат по сроку использования одежды и по очереди сравниваем его на пересечение с интервалами дат декретов. Декреты должны быть отсортированы по возрастанию дат (что сейчас и так выполняется).
Если первый декрет пересекается со сроком одежды (хоть по одному дню), то добавляем все месяцы декрета ко всем месяцам исходного срока (срок 0) и получаем новый срок (срок 1). Если же первый декрет не пересекается со сроком 0, то принимаем срок 1 = сроку 0 и переходим к следующему декрету.
Второй декрет сравниваем на пересечение уже со сроком 1 и аналогично получаем срок 2. Если пересечение есть, то срок 2 = срок 1 + декрет 2, иначе срок 2 = срок 1. И так далее, пока не переберем все декреты.
Окончательно реальный срок использования одежды будет равен сроку N (в нашем случае N = 3). Если не будет пересечения ни с одним декретом, то срок 0 просто перепишется в срок N без изменений.
Предполагается, что декреты не должны пересекаться между собой по датам (что сейчас выполняется). Учёт пересечения декретов в принципе возможен, но для этого придется вычитать длину пересечения двух декретов из общего срока, что ощутимо усложнит алгоритм.Gustav
Gustav, Спасибо большое за уделенное время и работу потраченную на мою просьбу! На первый взгляд все считает как надо - завтра попробую потестировать)
Gustav, Спасибо большое за уделенное время и работу потраченную на мою просьбу! На первый взгляд все считает как надо - завтра попробую потестировать) AllaxHaTrevelax