• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы motogarri
  • Дата начала
M

motogarri

Пытаюсь вычислить количество дней включая выходные и праздники. Цикл не срабатывает, дает ошибку "Превышен максимальный размер допустимой памяти"

Код:
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
7 941
609
BIT
217
крутой цикл :)
может не стоит юзать собаки... да еще с циклами (при таком подходе)
 
M

motogarri

Тогда непонятно чем @BusinessDays заменить на скрипте.

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

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

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

nvyush

@While(CountWorkDays < 14 ; i := i + 1);
Этот цикл проверяет, что 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)));
 
M

motogarri

Спасибо, вот в таком варианте работает как надо.

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, классная ссылочка, спасибо.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!