Лучший отвечающий
Как прибавить дни к полю даты?

Вопрос
-
Здравствуйте, возник такой вопрос:
Есть несколько полей с датами (означают срок завершения этапа продаж), также есть поле prioritycode с приоритетом Возможной сделки.
Можно ли сделать следующим образом:
<Дата1>-выставляется правилом
<Дата2>-в зависимости от приоритета ВС = <Дата1>+2дн.(высокий приоритет), <Дата1>+5дн.(средний приоритет)...
<Дата3>-в зависимости от приоритета ВС = <Дата2>+2дн.(высокий приоритет), <Дата2>+5дн.(средний приоритет)...
и так далее.
При этом если в ручную поменять дату, скажем <Дата3>, то следующие даты должны пересчитаться от новой даты.
Пробовал навешивать workflow на изменение каждого поля с датой, получается при изменении сроков на раннем этапе, меняются значения всех полей с датами и соответственно запускаются все workflow (а полей 10!).
Вижу спасение в js, но не могу реализовать. Подскажите, пожалуйста.
Мой код, на OnChange каджого поля:
if (crmForm.all.prioritycode.DataValue='1')
{
crmForm.all.new_2.DataValue = crmForm.all.new_1.DataValue+2;
}
if (crmForm.all.prioritycode.DataValue='2')
{
crmForm.all.new_2.DataValue = crmForm.all.new_1.DataValue+5;
}
if (crmForm.all.prioritycode.DataValue='3')
{
crmForm.all.new_2.DataValue = crmForm.all.new_1.DataValue+10;
}2 июня 2009 г. 4:11
Ответы
-
ловите :)
var d = new Date();
d = crmForm.all.requestdeliveryby.DataValue;
d.setDate(d.getDate()+1);
crmForm.all.requestdeliveryby.DataValue = d;- Предложено в качестве ответа sl_k83 2 июня 2009 г. 4:40
- Помечено в качестве ответа Лапин Андрей 2 июня 2009 г. 5:15
2 июня 2009 г. 4:39 -
попробуйте примерно так
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+1);if (crmForm.all.new_3.DataValue == d) {
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+1);
crmForm.all.new_3.DataValue = d;
} else {}
- Изменено sl_k83 4 июня 2009 г. 5:28
- Помечено в качестве ответа Лапин Андрей 4 июня 2009 г. 6:04
4 июня 2009 г. 5:27
Все ответы
-
Ну, есть у Вас этот код? что не работает то?
2 июня 2009 г. 4:27 -
Следующую дату не выставляет (у меня поле <new_2>), пишет "Объект не поддерживает это свойство или метод"2 июня 2009 г. 4:30
-
ловите :)
var d = new Date();
d = crmForm.all.requestdeliveryby.DataValue;
d.setDate(d.getDate()+1);
crmForm.all.requestdeliveryby.DataValue = d;- Предложено в качестве ответа sl_k83 2 июня 2009 г. 4:40
- Помечено в качестве ответа Лапин Андрей 2 июня 2009 г. 5:15
2 июня 2009 г. 4:39 -
А вообще вот http://technet.microsoft.com/en-us/library/cc189806.aspx :)
2 июня 2009 г. 4:48 -
Спасибо, sl_k83. Дату выставляет.
Только с if, не выходит, не меняет на нужное количество дней ))2 июня 2009 г. 4:50 -
приведите нынешний Ваш код!
2 июня 2009 г. 4:51 -
if (crmForm.all.prioritycode.DataValue='1')
{
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+1);
crmForm.all.new_3.DataValue = d;
}
if (crmForm.all.prioritycode.DataValue='2')
{
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+3);
crmForm.all.new_3.DataValue = d;
}
if (crmForm.all.prioritycode.DataValue='3')
{
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+10);
crmForm.all.new_3.DataValue = d;
}2 июня 2009 г. 4:52 -
А когда должно происходить изменение? на какие события вы повесели этот код? и что вообще сечас у Вас происходит?
2 июня 2009 г. 4:56 -
Этот код на изменении поля <new_2>, которое выставляется Бизнес-правилом (сейчас вручную).
Сейчас при изменении <new_2>, в поле prioritycode постоянно возвращается "низкий" и дату в <new_3> ставит с последнейчасти кода:
if (crmForm.all.prioritycode.DataValue='3')
{
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+10);
crmForm.all.new_3.DataValue = d;
}2 июня 2009 г. 5:02 -
А Ваш статус "низкий" не равен 3 ?
2 июня 2009 г. 5:05 -
Да.
Код не выбирает из вариантов, а ставит по последнему условию.2 июня 2009 г. 5:07 -
А все понял :)
вместо = в if поставьте == :) :) :)- Предложено в качестве ответа sl_k83 2 июня 2009 г. 5:12
2 июня 2009 г. 5:08 -
Всё работает, супер!!!
Спасибо.2 июня 2009 г. 5:12 -
Здравствуйте.
Хотелось бы продолжить начатую тему :)
Даты проставляются автоматически на событии OnSave и если какую-нибудь дату изменить в ручную, то при следующем сохранении система всё вернёт обратно как было, пересчитает. Теперь нужно добавить проверку если выставляемая дата не равна <предыдущая дата>+1, то это поле не изменять и отсчет производить от этого поля (и такие условия на каждом поле). Звучит вроде нормально, пробовал разные варианты не помогает, самое на мой взгляд правильное следующее:
if (crmForm.all.new_3.DataValue == (crmForm.all.new_2.DataValue.setDate(d.getDate()+1); )
{
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+1);
crmForm.all.new_3.DataValue = d;
}
else
{
}
if ... и т.д.
Не работает. Посоветуйте лучший способ, пожалуйста.
P.S. (для sl_k83) Это же делал с помощью workflow по теме http://social.technet.microsoft.com/Forums/ru-RU/dynamicsru/thread/8c347b8d-a209-47e2-a97e-02367549e75b, но вижу скриптом это быстрее и красивее выходит.4 июня 2009 г. 5:13 -
Под не работает что подразумевается?
4 июня 2009 г. 5:19 -
При просмотре пишет "Ошибка на странице" и никакой код не обрабатывает.
if (crmForm.all.new_3.DataValue == (crmForm.all.new_2.DataValue.setDate(d.getDate()+1); )
Нужно как-то по-другому написать часть после ==, но как....4 июня 2009 г. 5:23 -
попробуйте примерно так
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+1);if (crmForm.all.new_3.DataValue == d) {
var d = new Date();
d = crmForm.all.new_2.DataValue;
d.setDate(d.getDate()+1);
crmForm.all.new_3.DataValue = d;
} else {}
- Изменено sl_k83 4 июня 2009 г. 5:28
- Помечено в качестве ответа Лапин Андрей 4 июня 2009 г. 6:04
4 июня 2009 г. 5:27 -
Спасибо, sl_k83 ! В очередной раз ))))
(всё гениальное просто)4 июня 2009 г. 6:03