PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Position dans un digramme de Gantt
Position dans un digramme de Gantt
Iniciado por Jeremy ZUCCARELLI, ago., 21 2020 10:04 AM - 3 respostas
Membro registado
3 mensagems
Popularité : +1 (1 vote)
Publicado em agosto, 21 2020 - 10:04 AM
Bonjour,

Je souhaite crée un planning de taches avec des liens entre elles. J'ai créer une table hiérarchique avec une colonne de Gantt. J'ai une liste de tâches à effectuer sur le coté et je voudrai pouvoir faire un glisser déposer sur le diagramme de Gantt pour près remplir la tâches. J'arrive à trouver le numéro de la ligne avec un TableInfoXY(), mais je n'arrive pas à trouver la fonction pour savoir sur quel jour le glisser déposé à été lâché.

Existe t'il une fonction pour trouver ce jour?
Membro registado
384 mensagems
Popularité : +13 (13 votes)
Publicado em agosto, 21 2020 - 8:29 PM
Bonsoir Jérémy,

Il n'existe pas de fonction pour savoir à quel jour/heure se trouve le curseur actuel. Il faut donc le calculer, en partant de la date de début affichée, qui peut être connue avec PlanningPositionDateHeure(CHAMP_GANTT, plnDateDébut).

En pseudo code cela ressemble un peu à ça :

// Soient :
// CHAMP_GANTT : le champ "table hiérarchique avec colonne Gantt"
// COL_RESSOURCE : la première colonne du champ table
// COL_GANTT : la seconde colonne du champ table, qui contient le diagramme de gantt

// On calcule la position "réelle de la souris" par rapport à la partie affichage des dates : on soustrait la largeur des colonnes fixes du tableau (ici juste la colonne COL_RESSOURCE)
nPositionReelleX est un entier = (_DND.SourisPosX) - COL_RESSOURCE..Largeur
// On part de la date d'origine affichée dans le champ
dhDebutTache est une dateheure = PlanningPositionDateHeure(CHAMP_GANTT, plnDateDébut) + "000000"
// On rajoute le nombre de jours correspondant à l'écart entre le début de la colonne gantt divisé par la largeur du jour du champ gantt
dhDebutTache..Jours += (nPositionReelleX / CHAMP_GANTT.COL_GANTT..LargeurJour)


J'ai volontairement dit "pseudo-code" car il peut y avoir un certain nombre d'adaptations à faire :
- Si vous avez défilé le champ gantt à la molette, il faudra prendre en compte la position de l'ascenseur pour avoir une nPositionReelleX correcte.
- Si votre amplitude horaire affichée n'est pas de 24h, il faudra adapter la dernière ligne pour prendre en compte ce fait
- Si vous déposez votre tâche sur une ressource en congé, la date de début de la tâche ne sera pas celle réellement précisée, mais démarrera après le congé.

J'espère que cela vous donnera une première piste, bon courage pour la suite ;)
Membro registado
3 mensagems
Popularité : +1 (1 vote)
Publicado em setembro, 07 2020 - 2:51 PM
Bonjour,

Merci je vais voir pour tester ceci.
Membro registado
3 mensagems
Popularité : +1 (1 vote)
Publicado em setembro, 25 2020 - 11:08 AM
Bonjour,

J'ai enfin réussi à tester votre solution.

J'ai simplifier le code à cause d'un soucie de WINDEV (si je tente de fixer une ou plusieurs colonne par programmation la colonne de Gantt viens se superposer sur les colonne fixe quand j'utilise l'ascenseur horizontal.), J'ai donc deux tableaux lier avec les traitements et j'utilise ce code pour avoir le jour au niveau du pointeur de la souris.

Procedure lpGanttInfoXY(pTable est un Champ) : DateHeure
pX est un entier = SourisPosX(spChamp)

dhDebutTache est une DateHeure = PlanningPositionDateHeure(pTable.COL_Gantt, plnDateDébut) + "000000"
dhDebutTache..Jour += ArrondiInférieur((pX + AscenseurPosition(pTable, ascHorz)) / pTable.COL_Gantt..LargeurJour)

RENVOYER dhDebutTache