IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Deski Discussion :

Affichage erroné d'une durée pourtant calculée correctement


Sujet :

Deski

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Points : 112
    Points
    112
    Par défaut Affichage erroné d'une durée pourtant calculée correctement
    Bonjour à tous,

    je suis sous BO XI R3.1 et j'attaque une base MySQL.
    La formule de l'indicateur qui me pose problème est la suivante:
    sec_to_time(time_to_sec(timediff(tb_journal.date_fin,tb_journal.date_debut)))
    Quand j'exécute la requête, je n'ai aucune erreur dans la fenêtre d'exécution; la durée est correctement calculée et affichée.
    En revanche, dans le rapport, et quelque soit le format appliqué, l'affichage est systématiquement 00:00:00.
    Si vous avez une idée, je vous remercie grandement!
    Bonne fin de journée.

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2011
    Messages : 140
    Points : 181
    Points
    181
    Par défaut
    perso je ferai des tests étape par étape pour voir ce qui ne va pas
    une variable avec :
    tb_journal.date_fin
    une variable avec :
    tb_journal.date_debut
    une variable avec :
    timediff(tb_journal.date_fin,tb_journal.date_debut)
    une variable avec :
    time_to_sec(timediff(tb_journal.date_fin,tb_journal.date_debut))

    Ensuite ça peut aussi venir d'un problème de formatage ou de type de données

  3. #3
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    Citation Envoyé par jfox Voir le message
    Bonjour à tous,

    je suis sous BO XI R3.1 et j'attaque une base MySQL.
    La formule de l'indicateur qui me pose problème est la suivante:

    Quand j'exécute la requête, je n'ai aucune erreur dans la fenêtre d'exécution; la durée est correctement calculée et affichée.
    En revanche, dans le rapport, et quelque soit le format appliqué, l'affichage est systématiquement 00:00:00.
    Si vous avez une idée, je vous remercie grandement!
    Bonne fin de journée.
    La fonction timediff te renvoie une valeur en format HH:MM:SS.xxx.

    Pourquoi calcules-tu par la suite le nombre de SS associé pour ensuite le remettre en HH:MM:SS déjà récupéré dans timediff ?

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    merci pour vos réponses.
    Je ne pense pas que cela provienne d'un problème de formatage ou de type de données car c'est correct dans la fenêtre d'exécution.
    Pour le timediff, il me semblait avoir lu que pour faire un agrégat de somme de durée il fallait passer par sec_to_time et time_to_sec mais j'ai peut-être mal interprété la doc Mysql.
    Quoiqu'il en soit, j'ai créé un nouvel indicateur
    timediff(tb_journal.date_fin,tb_journal.date_debut)
    mais le résultat est le même: correct dans la fenêtre d'exécution et 00/01/1900 (ou 00:00:00 si je choisis le format HH:mm:ss) dans le rapport.
    J'ai aussi essayé de calculer la différence entre les dimensions date_fin et date_debut mais BO m'indique une erreur de type de données.
    J'ai testé les dimensions date_debut et date_fin avec la fonction logique EstDate() et elles sont bien toutes les deux de type date.

    Vos questions et lumières sont toujours les bienvenues!

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Points : 112
    Points
    112
    Par défaut
    J'ai trouvé le pourquoi de sec_to_time(time_to_sec(timediff( etc.
    Timediff renvoie un résultat de type Time qui ne peut être agrégé. Il faut donc transformer la différence en secondes (time_to_sec) puis, si l'on veut un affichage heure-minute-seconde, on applique la fonction sec_to_time.
    Cf. ce post http://www.developpez.net/forums/d25...-sum-timediff/

  6. #6
    Membre expérimenté Avatar de djam21
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2006
    Messages
    843
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2006
    Messages : 843
    Points : 1 307
    Points
    1 307
    Par défaut
    Tu n'as aucune fonction d’agrégation dans ton indicateur...

    Si tu modifies ton indicateur en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =sum(time_to_sec(timediff(tb_journal.date_fin,tb_journal.date_debut)))
    Après tu pourras effectuer le passage en HH:mm:ss directement dans ton rapport...

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 144
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    merci djam21. J'ai essayé et si cela me donne bien une durée en secondes, la conversion en HH:mm:ss ne fonctionne pas.
    J'ai aussi essayé de créer une vue dans MySQL qui assure le calcul mais le résultat est identique: ok dans la fenêtre d'exécution et ko dans le rapport. Peut-être cela a-t-il un rapport avec le typage des données: dans designer, il n'y a qu'un type date et rien pour time.
    Je continue de chercher.

Discussions similaires

  1. affichage erroné d'une chaîne de caractères sous FF
    Par laurentSc dans le forum Langage
    Réponses: 4
    Dernier message: 27/02/2011, 22h45
  2. Réponses: 4
    Dernier message: 08/06/2010, 13h06
  3. Affichage dynamique d'une valeur calculée
    Par harley dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/06/2006, 09h20
  4. CALCUL D UNE DUREE ENTRE 2 DATES SANS LES DIMANCHES
    Par sarahsonia dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/04/2006, 17h12
  5. Calculer une duree entre 2 dates
    Par d.w.d dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo