Вычисление срока

motogarri

Well-known member
17.02.2010
200
3
#1
Пытаюсь вычислить количество дней включая выходные и праздники. Цикл не срабатывает, дает ошибку "Превышен максимальный размер допустимой памяти"

Код:
i := 0;
CountWorkDays := @BusinessDays(DateBegin; DateBegin; 1:7; Holidays);

@While(CountWorkDays < 14; i := i + 1);

@Prompt([Ok]; ""; "Количество дней всего - " + @Text(i) + @Char(13) +
"Дата окончания - " + @Text(@Adjust(DateBegin; 0; 0; i; 0; 0; 0)));
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
271
#2
крутой цикл :)
может не стоит юзать собаки... да еще с циклами (при таком подходе)
 

motogarri

Well-known member
17.02.2010
200
3
#4
Тогда непонятно чем @BusinessDays заменить на скрипте.

Добавлено:
Что-то мне подсказывает, что этот цикл будет "вечным" (если проггеру не заменить батарейки :) (с))
С батарейками беда. Он, видимо и есть вечный, только не пойму почему.
Нет, это понятно. Делаю так:
i := 0;
CountWorkDays := @BusinessDays(DateBegin; @Adjust(DateBegin ; 0 ; 0 ; i ; 0 ; 0 ; 0); 1:7; Holidays);

@While(CountWorkDays < 14 ; i := i + 1);

Тот же результат.
 

nvyush

Lotus team
22.04.2009
2 317
0
#5
Этот цикл проверяет, что CountWorkDays < 14. Если да, то увеличивает i на 1. Поскольку CountWorkDays в цикле не изменяется, то "эта музыка будет вечной" (с). Поместите в тело цикла оператор изменения CountWorkDays типа так:
Код:
@While(CountWorkDays < 14; @Set("CountWorkDays"; i := i + 1; @BusinessDays(TU_DateDocIn; @Adjust(TU_DateDocIn; 0; 0; i; 0; 0; 0); 1:7; Holidays)));
 

motogarri

Well-known member
17.02.2010
200
3
#7
Спасибо, вот в таком варианте работает как надо.

i := 0;
CountWorkDays := 0;
@While(CountWorkDays < 14; i := i+ 1 ; CountWorkDays := @BusinessDays(DateBegin; @Adjust(DateBegin; 0 ; 0 ; i ; 0 ; 0; 0); 1:7; Holidays));

DateEnd := (@Adjust(DateBegin; 0 ; 0 ; i ; 0 ; 0 ; 0))

Вычисляется конечная дата от назначенного срока (у меня это 14 рабочих дней) с учетом выходных и праздников, если Holidays = список праздничных дат. (это если кому понадобится)

lmike, классная ссылочка, спасибо.