2016-09-01 3 views
0

Я конвертирую дату в ее номер недели, но получаю сообщение об ошибке. Вы можете мне помочь?Прогресс 4GL - номер недели года

Это мой код

function WeekNumber returns integer (OrderRel.ReqDate as date): 

define var vDay as integer no-undo. 

vDay = OrderRel.ReqDate - date(1, 1, YEAR(OrderRel.ReqDate)) + 1. 

return integer(truncate(vDay/7, 0)) + (if vDay mod 7 <> 0 then 1 else 0). 

end function. 
+1

Пожалуйста отправьте сообщение об ошибке. Кроме того, я замечаю, что вы не используете "." как ваш символ окончания строки. Вы должны использовать "." в конце каждого утверждения. – Austin

ответ

2

Похоже, что вы используете настольный поле ввода в вашей функции? Вы должны изменить его в локальную переменную вместо этого и затем вызвать его с помощью записи:

FUNCTION WeekNumber RETURNS INTEGER (INPUT pdaDate as DATE): 

    DEFINE VAR vDay AS INTEGER NO-UNDO. 

    vDay = pdaDate - DATE(1, 1, YEAR(pdaDate)) + 1 . 

    RETURN INTEGER(TRUNCATE(vDay/7, 0)) + (IF vDay MOD 7 <> 0 THEN 1 ELSE 0) . 

END FUNCTION. 

MESSAGE WeekNumber(OrderRel.ReqDate) VIEW-AS ALERT-BOX. 

Это делает функцию компиляции и запуска!

Другое дело, что в зависимости от того, какие цифры в неделю вы вычисляете, это может быть неправильно.

MESSAGE WeekNumber(DATE("2016-09-02")) VIEW-AS ALERT-BOX. 

enter image description here

Это, пожалуй, правильно в вашей системе, но по крайней мере не в Швеции, которая с использованием нумерации недель по ISO8601 стандарта. По этим стандартам сентября второй +2016 в неделю 35 ...

Week numbering on Wikipedia

ISO week date