2016-09-01 2 views
0

Je convertis une date en son numéro de semaine, mais j'obtiens une erreur. Pouvez-vous m'aider?Progression 4GL - numéro de semaine de l'année

C'est mon code

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

S'il vous plaît publier le message d'erreur. De plus, je remarque que vous n'utilisez pas "." comme votre caractère de fin de ligne. Tu devrais utiliser "." à la fin de chaque déclaration. – Austin

Répondre

2

Il semble que vous utilisez une table-champ en entrée à votre fonction? Vous devez changer dans une variable locale au lieu et ensuite appeler à l'aide du disque:

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. 

Cela rend la compilation de fonction et exécuter!

Une autre chose est que selon le type de numéro de semaine que vous calculez, cela pourrait être faux.

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

enter image description here

Ceci est peut-être correct dans votre système, mais au moins pas en Suède qui est en utilisant la numérotation de la semaine par la norme ISO8601. Par ces normes Septembre 2016 le 2ème est la semaine 35 ...

Week numbering on Wikipedia

ISO week date