Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Deski
Deski Forum d'entraide Deski (client lourd)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2007, 11h39   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut [BO 5.1 / BO6 / BO XI] Calcul de duree entre deux dates dans un rapport BO

J'utilise BO 5.1 et j'aimerai faire le calcul de dates dans un rapport BO entre:
* la 'date de fin' et la 'date de debut' afin de trouver la duree.
* la date que je rentre dans un "prompt" et la 'date de debut'. au format Date time.
Mais je crois que j'ai un pb avec le type de donnees.
Pouvez vous me donner un coup de pousse?

Merci.
samidodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 11h50   #2
Membre émérite
 
Avatar de bastoonet
 
Inscription : septembre 2006
Messages : 815
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France

Informations forums :
Inscription : septembre 2006
Messages : 815
Points : 843
Points : 843
Il faut que tu convertisses ta date issue de ton invite au format date car une invite a toujours un format "alphanumérique"

donc =Endate(reponseutilisateur("requete","invite"),'jj/mm/aaaa')
__________________
~~ bastoonet ~~

"Team BAB - Spécialistes BO"
bastoonet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 14h45   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Ok merci mais j'ai cette meme erreur de type de donnee. pour touver la duree entre deux date qui proviennent de ma base (date debut et date fin) je cherche la duree.
samidodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h51   #4
Membre émérite
 
Avatar de bastoonet
 
Inscription : septembre 2006
Messages : 815
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France

Informations forums :
Inscription : septembre 2006
Messages : 815
Points : 843
Points : 843
que veux tu afficher comme durée ? des jours ?

=JoursEntre(<Date 1> ,<Date 2>)
__________________
~~ bastoonet ~~

"Team BAB - Spécialistes BO"
bastoonet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h54   #5
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 181
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 181
Points : 2 717
Points : 2 717
Dans ce cas, il faut commencer par vérifier si ces dates sont des données de type Date ou Caractère.

Pour cela il suffit d'aller
dans le Gestionnaire de Données (Menu Données / Commande Visualiser les Données.
puis sur l'onglet Définition
ayant sélectionné un des objet date dans la liste des objets, vérifier lz Type à droite du nom.

Ensuite on avisera ...
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 16h26   #6
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
les donnees sont de types Dates.
Je veux afficher la duree en heure. Merci pour la fonction mais elle renvoie 0 jours, ce qui est normal. Mais comment avoir la duree en heure?
samidodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 17h11   #7
Membre du Club
 
Inscription : octobre 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 64
Points : 52
Points : 52
Tu peux peut etre t'inspirer de ce Post, mais vu que c'est pas la meme version de BO je sais pas si c'est possible.

http://www.developpez.net/forums/sho...d.php?t=445307
dermenji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 18h05   #8
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 181
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 181
Points : 2 717
Points : 2 717
Bonsoir
Mouai...
J'étais pas simple ce jour là !
Voici la version courte pour tansformer la partie time d'une datetime en secondes.
Code :
1
2
3
4
Conversion en secondes
=(EnNombre(FormatDeDate(<DFIN> ,"hh"))* 3600) 
+ (EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmm"),2))* 60) 
+ EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmmssss"),2))
Si on fait la même chose pour la date time de début et que l'on soustrait secondes et secondes on obtient une durée ...écoulée ... dans la journée !!!
Code :
1
2
3
4
5
6
durée écoulée en secondes
 
=(EnNombre(FormatDeDate(<DFIN> ,"HH"))* 3600) + (EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmm"),2))* 60) + EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmmssss"),2)) 
) - (
(EnNombre(FormatDeDate(<DDEB> ,"HH"))* 3600) + (EnNombre(Droite(FormatDeDate(<DDEB> ,"hhmm"),2))* 60) + EnNombre(Droite(FormatDeDate(<DDEB> ,"hhmmss"),2)) 
)
Mais ça ne marche que pour la même journée.

Ensuite il faut tester les jours et les heures pour déterminer le nb de jours ENTIERS se sont écoulés et pour la partie non entière calculer la durée de l'heure de début à minuit (le 1er jour)
et la durée de 0h00 à l'heure de fin (le dernier jour)
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 12h20   #9
Rédacteur
 
Avatar de Bruno2r
 
Bruno ROMAN-RUIZ
Inscription : décembre 2006
Messages : 2 181
Détails du profil
Informations personnelles :
Nom : Bruno ROMAN-RUIZ
Âge : 57

Informations professionnelles :
Secteur : Santé

Informations forums :
Inscription : décembre 2006
Messages : 2 181
Points : 2 717
Points : 2 717
Par défaut Calcul de la Durée entre deux dates dans BO

Calcul de la Durée entre deux dates dans BO
La difficulté réside dans la liste limitée de fonctions Date disponibles.
De plus la fonction JoursEntre(<Date 1> ,<Date 2>) ne renvoie que des jours entiers.
  • La méthode exposée ci dessous se propose de calculer la durée écoulée en secondes entre des date_heures_minutes_secondes (datetime):
    le même jour 13/12/2007 08:30 13/12/2007 12:00
  • de jour différents mais jour et lendemain : 12/12/2007 08:30 13/12/2007 12:00
    espacées de plusieurs jours : 10/12/2007 08:30 13/12/2007 12:00
1) COMPRENDRE LE BESOIN :
Il nous faut d'abord tester si les dates couvrent des jours entiers.
<JOURS_ENTIERS_ENTRE> = Nb de jours entiers séparant les deux dates
Puis calculer les durées suivantes toutes exprimées en secondes.

Pour des Dates différentes
<PREMIER_JOUR> = 86400 secondes d'une journée d 24h - horaire exprimée en secondes
<JOURS_ENTRE> = Nb de jours entiers x 24h x 3600 secondes
<DERNIER_JOUR> = horaire exprimée en secondes
Pour des horaires à la même date :
<DUREE_MEME_JOUR> = horaire de fin - horaire de début exprimés en secondes

2) CREER LES VARIABLES :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<JOURS_ENTIERS_ENTRE> 
= JoursEntre(<DDEB> ,<DFIN>) -1
 
<PREMIER_JOUR>
= 86400 - ((EnNombre(FormatDeDate(<DDEB> ,"HH"))* 3600) 
+ (EnNombre(Droite(FormatDeDate(<DDEB> ,"hhmm") ,2))* 60)
+ EnNombre(Droite(FormatDeDate(<DDEB> ,"hhmmss") ,2)) )  
 
<JOURS_ENTRE>
= Si (<JOURSENTIERSENTRE> > 0)  Alors  (<JOURSENTIERSENTRE> *24 * 3600 ) Sinon  0  
 
<DERNIER_JOUR>
=(EnNombre(FormatDeDate(<DFIN> ,"HH"))* 3600)
+ (EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmm") ,2))* 60) 
+ EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmmss") ,2))
La Durée le même jour
Code :
1
2
3
4
5
6
7
8
9
10
11
<DUREE_MEME_JOUR>
=
(
  (EnNombre(FormatDeDate(<DFIN> ,"hh"))* 3600)
   + (EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmm") ,2))* 60) 
   + EnNombre(Droite(FormatDeDate(<DFIN> ,"hhmmss") ,2)) 
)-(
  (EnNombre(FormatDeDate(<DDEB> ,"hh"))* 3600) 
   + (EnNombre(Droite(FormatDeDate(<DDEB> ,"hhmm") ,2))* 60) 
   + EnNombre(Droite(FormatDeDate(<DDEB> ,"hhmmss") ,2)) 
)
La Durée exprimée en seconde sera donc :
soit cette <DUREE_MEME_JOUR>
soit <PREMIER_JOUR> + <JOURS_ENTRE> + <DERNIER_JOUR>

Code :
1
2
3
4
5
6
<DUREE_EN_SECONDES>
 = Si (<JOURSENTIERSENTRE> = -1)  
Alors 
<DUREEMEMEJOUR>  
Sinon  
<PREMIERJOUR>+<JOURSENTRE>+<DERNIERJOUR>
Cerise de bastoonet sur le gateau de Bruno2r :
Pour écrire une version texte du résultat en Heures Minutes Secondes :
Utiliser la fonction de bastoonet (honorable membre du Team BO)
Code :
1
2
3
=Tronque(Somme(<DUREE_EN_SECONDES>)/3600, 0) & " h "
 & Tronque(Mod(Somme(<DUREE_EN_SECONDES>), 3600)/60, 0) & " m " 
 & Mod(Somme(<DUREE_EN_SECONDES>), 60) & " s"
Et en cadeau la durée en heures dans sa version décimale
Code :
1
2
<DUREE_HEURES_DECIMALES>
=Tronque( Somme(<DUREE_EN_SECONDES>) / 3600 , 0) + (Mod(Somme(<DUREE_EN_SECONDES>) , 3600) / 3600)

3) Tests et Vérifications :

Le SQL suivant nous fournira des exemples Pour tester nos variables.
les DATETIME sont simpliste pour pouvoir vérifier mentalement.
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT to_date('20071210 08:30','yyyymmdd hh24:mi') AS DDEB,
to_date('20071213 12:00','yyyymmdd hh24:mi') AS DFIN
FROM dual 
UNION
SELECT to_date('20071212 08:30','yyyymmdd hh24:mi'), 
to_date('20071213 12:00','yyyymmdd hh24:mi') 
FROM dual
UNION
SELECT to_date('20071213 08:30','yyyymmdd hh24:mi') , 
to_date('20071213 12:00','yyyymmdd hh24:mi') 
FROM dual
Résultats obtenus :
TEST1
DDEB = 10/12/2007 08:30
DFIN = 13/12/2007 12:00
JOURS_ENTIERS_ENTRE = 2
PREMIER_JOUR = 55 800
JOURS_ENTRE = 172 800
DERNIER_JOUR = 43 200
DUREE_MEME_JOUR = 12 600
DUREE_EN_SECONDES = 271 800

TEST2
DDEB 12/12/2007 08:30
DFIN 13/12/2007 12:00
JOURS_ENTIERS_ENTRE 0
PREMIER_JOUR 55 800
JOURS_ENTRE 0
DERNIER_JOUR 43 200
DUREE_MEME_JOUR 12 600
DUREE_EN_SECONDES 99 000

TEST3
DDEB 13/12/2007 08:30
DFIN 13/12/2007 12:00
JOURS_ENTIERS_ENTRE -1
PREMIER_JOUR 55 800
JOURS_ENTRE 0
DERNIER_JOUR 43 200
DUREE_MEME_JOUR 12 600
DUREE_EN_SECONDES 12 600

SOMME DE DUREE_EN_SECONDES = 271 800
DUREE_HEURES_DECIMALES 75,5
Merci de me signaler d'éventuelles étourderies ou inexactitudes.
__________________
Précisez la VERSION ! Règles du forum Business Objects et FAQ BO
"A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"
Bruno2r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 12h31   #10
Inactif
 
Avatar de Aitone
 
Inscription : novembre 2006
Messages : 3 569
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3 569
Points : 3 291
Points : 3 291
Il y a une erreur...

Citation:
Envoyé par Bruno2r Voir le message
Pour des Dates différentes
<PREMIER_JOUR> = 86400 secones d'une journée d 24h - horaire exprimée en secondes
Il manque un "d" à "secondes" (joke inside)

Pour le reste, je pense que samidodo et les autres membres ayant parcourus ce topic se joignent à moi pour ne dire qu'un mot
Citation:
BRAVO !
Bravo pour tout !
  • Résolution du problème
  • Détail point par point
  • Explications



Et longue vie à la team BO-BAB
Aitone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 14h13   #11
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Merci à tous ca marche tres bien
samidodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h29.


 
 
 
 
Partenaires

Hébergement Web