Ajouter la valeur du champ UTCOFFSET à la valeur du champ UTCSTRDATTIM de la table SFTTXN

SOLVED

Bonjour,

j'aurais besoin, dans un programme spécifique, d'afficher la date de début de pointage des collaborateurs. Cette date est stockée dans la table SFTTXN sous la forme d'un champ de type ADATIM : UTCSTRDATTIM qui représente la date/heure de début de pointage au format GMT et d'un offset stocké dans un champ numérique UTCOFFSET de type DCB. J'aimerais additionner la valeur de l'offset à la date UTCSTRDATTIM pour afficher le résultat dans un champ et je n'ai pas trouvé de fonction permettant d'ajouter des heures à un datetime. 

Pouvez-vous m'aider ?

Merci 

  • Bonjour  ,

    Merci d'avoir utilisé Community Hub.

    Nous remarquons qu'il n'y a malheureusement pas eu de réponse à votre question de la part des autres membres de la communauté.

    Nous invitons vivement chacun des membres de la communauté à être actifs et à répondre sur les forums. Les réponses sont l’affaire de tous et permettent  aux forums de grandir, et aux utilisateurs de mieux connaitre et utiliser leur solution.

    Aussi, n’hésitez pas vous-même à répondre aux questions qui pourraient être posées et qui seraient en attente de réponse.

    Nous espérons une réponse prochaine à votre demande.

    Yannick

  • 0
    SUGGESTED

    Il faut une action après modif sur le champ UTCOFFSET

    Subprog AM_UTCOFFSET( VALEUR) 

     [M..]CHAMP = UTCSTRDATTIM + VALEUR ( voir le formatage sur les dates )

    Affzo [M..]CHAMP

  • Bonjour  ,

    Faites nous savoir si la réponse de TWAHIRWA a été utile en la marquant comme vérifiée.

    Pour cela, au niveau de la réponse apportée, cliquer sur l'option "Vérifier la réponse".

    Cela aura pour effet de marquer la réponse en vert et de permettre aux autres membres de la communauté, ou aux personnes qui auraient également le besoin de voir que cela a fonctionné.

    Merci d'avoir utilisé la communauté.

    Floriane

  • 0 in reply to TWAHIRWA

    Bonjour  ,

    je vous remercie pour votre réponse. 

    Si ne me trompe pas, l'instruction UTCSTRDATTIM + VALEUR va permettre d'ajouter un nombre de jours égal à VALEUR à la date UTCSTRDATTIM. Ce que je souhaite c'est ajouter un nombre d'heures. Ci-dessous un exemple de données :

    UTCSTRDATTIM = '03/06/2024 09:03:45'
    OFFSET = 2
    Résultat attendu = '03/06/2024 11:03:45'

  • 0
    SUGGESTED

    Essaye ceci : 

    DateAdd("h",2,UTCSTRDATTIM)

  • 0 in reply to TWAHIRWA

    Bonjour,

    la fonction dateadd fonctionne en SQL mais pas en L4G et je n'ai pas trouvé de fonction équivalente.

  • 0 in reply to TETEFORT Nathalie
    SUGGESTED

    Bonjour,

    Pour une étude plus poussée, nous vous proposons de créer une demande au Support Sage X3.

    Bonne journée.
    Nicolas

  • +1 in reply to TETEFORT Nathalie
    verified answer

    Bonjour, 

    Voici un sous-programme qui ajoute des secondes à un datetime. Vous pouvez facilement le modifier en une fonction qui ajoute des heures...

    #**
    #* Sous-programme DTSADD ajoute des secondes au datetime donné
    #*
    #* @param ZDATTIM (datetime) : datetime
    #* @param ZSADD (dec) : nbr de secondes à ajouter au datetime
    #*!
    Subprog DTSADD(ZDATTIM,ZSADD)
      Variable Datetime ZDATTIM
      Value Decimal ZSADD
      Local Decimal ZTIMEVAL
      Local Date ZDATE
      Local Integer ZTIME
      Local Char ZCHAR_DATETIME(20)
      Local Integer Y,M,D,H,N,S,P1,P2,SJ
      Local Datetime ZD
      #on convertie le datetime en decimal et on ajoute les secondes
      Y=year(ZDATTIM)
      M=month(ZDATTIM)
      D=day(ZDATTIM)
      H=val(mid$(num$(ZDATTIM),instr(1,num$(ZDATTIM),"T")+1,2))
      P1=instr(1,num$(ZDATTIM),":")
      N=val(mid$(num$(ZDATTIM),P1+1,2))
      P2=instr(P1+1,num$(ZDATTIM),":")
      S=val(mid$(num$(ZDATTIM),P2+1,2))
    
      ZDATE=gdat$(D,M,Y)
      #calcul des secondes du jour
      SJ=H*3600+N*60+S
      If SJ+ZSADD>86400
        ZDATE+=1
        ZTIME=(SJ+ZSADD)-86400
      Else
        ZTIME=SJ+ZSADD
      Endif
    
      # datetime au format string
      ZCHAR_DATETIME = format$("D:4Y[-]2M[-]2D[T]",ZDATE)
    &                  + format$("N0:2#",int(ZTIME/3600))
    &                  + ":" + format$("N0:2#",int(mod(ZTIME,3600)/60))
    &                  + ":" + format$("N0:2#",int(mod(ZTIME,60)))+"Z"
    
      # on convertir en datetime
      ZDATTIM=gdatetime$(ZCHAR_DATETIME)
    
    End


    Piotr