Операторы и наиболее употребительные функции, используемые в формулах расчёта значений полей, определяемых пользователем
Поля таблицы работ с именами Число1…Число20, Дата1…Дата10,
Начало1…Начало10,Окончание1…Окончание10,Длитель-ность1…Длительность10,Затраты1…Затраты10,Код структуры1…Код структуры10,Текст1…Текст30,Флаг1…Флаг20предназначены для данных,
произвольно вводимых менеджером проекта для его собственных целей либо автоматически вычисляемых согласно заданным формулам или правилам. Ана-логичные поля предусмотрены и в таблице ресурсов. Они часто используются для автоматизации аналитических расчётов на основе плана и данных монито-ринга. В данном приложении приведён список операторов и наиболее употре-бительных функций, используемых в формулах. При назначении формул следу-ет заботиться о том, чтобы тип данных результата соответствовал типу данных выбранного поля.
Операторы
+,–,*,/,^ | — арифметические операторы: | сложение, вычита- | |
\ | ние, умножение, деление, возведение в степень. | ||
— целочисленное деление (остаток отбрасывается). | |||
МОД | — остаток от деления. Например, значение выраже- | ||
& | ния 8 MOD 3 равно 2. | ||
— конкатенация (объединение) | двух текстовых | ||
=,<>,<,>,>=,<= | строк. | ||
— операторы сравнения (результат имеет значения | |||
И,ИЛИ,НЕ | «истина» или «ложь»)1. | ||
— логические операции "и", "или", "не". | |||
Математические функции | |||
sqr(x),log(x),exp(x) | — x, ln(x), ex. | ||
sin(x),cos(x),tan(x),atn(x) — sin(x), cos(x), tg(x), arctg(x). | |||
abs(x) | — |x|. | ||
fix(x) | — округление отбрасыванием дробной части. | ||
sgn(x) | — 1, если x > 0; 0, если x = 0; –1, если x < 0. |
1 Эти операторы могут использоваться для сравнения не только чисел и дат, но и текстовых строк (в лексикографическом порядке). Регистр символов учитывается.
rnd() | — равномерно распределённая случайная величина | |
в интервале [0; 1). Значение обновляется при ка- | ||
ждом пересчёте модели проекта. | ||
Логические функции | ||
isnumeric(x) | — «истина», если аргумент числовой; иначе «ложь». | |
isdate(x) | — «истина», если аргумент — дата; иначе «ложь»1. | |
isnull(x) | — «истина», если аргументу не присвоено никакое | |
iif(x,y,z) | значение; иначе «ложь». | |
— y, если x имеет значение «истина»; в противном | ||
случае — z. | ||
choose(i,x1,x2…) | — возвращает значение xi. | |
switch(c1,x1,c2,x2…) | — аргументы ci содержат логические условия, xi — | |
некоторые значения. Результат — первое слева |
значение xi, для которого соответствующее ci принимает значение «истина».
Функции даты и времени
К календарным значениям можно прибавлять и вычитать вещественные числа, трактуемые в этом случае как число дней (возможно, дробное) согласно астрономическому времени.
В столбцах для представления календарных значений могут отображать- | |||||
ся только даты в интервале с 1 января 1984 г. по 31 декабря 2049 г. | |||||
now() | — текущие дата и время по системным часам ком- | ||||
пьютера (обновляются при каждом пересчёте | |||||
date() | модели проекта). | ||||
— текущая дата по системным часам компьютера. | |||||
cdate(x) | — преобразование текстового значения к типу «да- | ||||
та». | |||||
dateserial(y,mn,d),timeserial(h,m,s) — | формирование календарного значе- | ||||
ния из номеров года y, месяца mn и числа d; но- | |||||
меров часа h, минуты m и секунды s. Например, | |||||
чтобы сформировать календарное значение, со- | |||||
ответствующее моменту h | часов | 15 минут | |||
30 секунд | 17 июня y-го г., | можно | записать | ||
dateserial(y,6,17) | + | time- | |||
serial(h,15,30). |
1 В справочной системе программы Microsoft Project эта функция отнесена к числу функций даты и времени.
dateadd(u,n,d) | — дата, отстоящая от даты d (возможно её задание в | |||
форме текста) на n периодов, специфицирован- | ||||
ных аргументом u. Последняя может принимать | ||||
одно из следующих значений: "h", "d", "m", | ||||
"y", что означает соответственно часы, дни, ме- | ||||
сяцы и годы. Время астрономическое. Например, | ||||
результат | вычисления | функции | ||
dateadd("m",1,"23.05.2006") — 23 ию- | ||||
datediff(u,d1,d2) | ня 2006 г. | |||
— число полных и неполных периодов заданной | ||||
продолжительности между двумя | указанными | |||
датами d1 и d2 (возможно их задание в форме | ||||
текста по образцу "23.05.2006 23:59"). Пе- | ||||
риод задаётся | аргументом u, который может | |||
принимать значения "h", "d", "w", "m" (часы, | ||||
дни, недели, месяцы). Если d1 > d2, результат от- | ||||
datepart(u,d,f) | рицательный. | |||
— в зависимости от значения аргумента u выдаёт: | ||||
"h" — час, "d" — календарное число, "m" — | ||||
номер месяца, "w" — номер дня недели, "y" — | ||||
номер дня в году, соответствующие дате d (дата | ||||
может задаваться как календарным значением, | ||||
так и текстом по образцу "23.05.2006 | ||||
23:59"). Аргумент f используется только при | ||||
u ="w":если он равен0,первым днём недели | ||||
считается понедельник, если 1 — | воскресенье. | |||
В других случаях он игнорируется и может быть | ||||
опущен. |
Замечание . Результат вычислений функций datediff и date-partявляется числом,а не календарным значением(датой).Попытка ото-бражения числового значения в календарных столбцах, определяемых пользователем, вызовет сообщение об ошибке.
year(d) — номер года, соответствующий дате d.
month(d) — равносильно datepart("m",d).
weekday(d,f) — равносильно datepart("w",d,f).
day(d) — равносильно datepart("d",d).
hour(d) — равносильно datepart("h",d).
minute(d)
projdateadd(d,n,c)
projdatesub(d,n,c)projdurvalue(n)
projdatediff(d1,d2,c)
projdurconv(n,f)
— минута, соответствующая дате d (например, для даты "17.06.2006 9:15" результат равен
15).
— дата, отстоящая от даты d на период рабочего
времени n согласно календарю c. Дата задаётся календарным или текстовым (например,
"17.06.2006 9:15") значением. Кален-
дарь — именем. Период может задаваться чис-лом (обозначающим число минут) или текстовой строкой со спецификацией периода: например,
"3m" — | 3 минуты; "4h" — 4 часа; | "5d" — | |||
рабочих | дней; "6w" — 6 рабочих недель; | ||||
"7mon" — | 7 рабочих | месяцев; | "8ed" — | ||
24-часовых | периодов | рабочего | времени; | ||
"9ew" — 9 168-часовых периодов рабочего вре-мени; "10emon" — 10 720-часовых периодов рабочего времени. Продолжительность рабочего дня, рабочей недели и рабочего месяца устанав-ливается параметрами текущего проекта (Сервис
→ Параметры… → Календарь). Если агру-
мент c опущен, используются календари, назна-ченные текущей строке таблицы работ или ре-сурсов, а при отсутствии таковых — календарь проекта.
— функция аналогична projdateadd, но вычисляется дата, предшествующая d на период n.
— вычисляет продолжительность периода n, задан-
ного так же, как в функции projdateadd, — в минутах.
— количество минут рабочего времени между дата-ми d1 и d2 согласно календарю c. Если аргумент c опущен, используются календари, назначенные текущей строке таблицы работ или ресурсов, а при отсутствии таковых — календарь проекта.
— вычисляет продолжительность периода n, задан-
ного так же, как в функции projdateadd, в еди-ницы, заданные флагом f. Флаг должен содер-жать целое значение. Нечётные значения от 3 до 11 обозначают единицы рабочего времени —
минуты, часы, дни, недели, месяцы. Чётные от | |||
4 до 12 — соответствующие единицы | астроно- | ||
мического времени. | |||
Текстовые функции | |||
format(x,f) | — отображение числа или даты x по формату f. | ||
Например: | format(cdate("15.1.04 10:30"), "hh | ч. mm | |
♦ функция |
мин. d mmmm yyyy г.") выдаст текст "10 ч. 30 мин. 15 января 2006 г.";
♦ функция format(cdate("5.1.06 10:30"), "dd mmm yyг. в hh:mm") выдаст текст "05 янв 04г. в 10:30";
♦ функция format(3.14159, "#.###") выдаст текст "3.142";
♦ функция format(0.14159, "#.###") выдаст текст ".142";
♦ функция format(3.14, "000.000") выдаст текст "003.140".