Remplir automatiquement tableau répéteur - Javascript

Fermé
anthorange Messages postés 2 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 11 mars 2022 - 9 mars 2022 à 10:24
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 11 mars 2022 à 10:05
Bonjour,

Je suis médecin dans une petite structure, et j'ai la charmante tâche de gérer la gestion documentaire de notre établissement.

Notre logiciel de gestion documentaire s'ouvre sur des pages web et utilise donc le même "langage".

Je suis en train de tenter d'apprendre à manier le javascript, mais je rencontre un problème donc je n'arrive pas à me sortir...

Pour faire simple, j'ai créé un formulaire qui permettra aux utilisateurs d'entrer une date de début et une date de fin (de réalisation de la tâche).

Pour ce faire, j'ai utilisé deux composants proposé par l'éditeur du formulaire qui s'appellent :
- Datedebut (en pratique, l'utilisateur en cliquant voit s'ouvrir un calendrier et il doit choisir la date du début de la "mission")
- datefin (idem ci-dessus, l'utilisateur doit choisir la date de fin de la "mission")

J'ai un troisième objet qui est un tableau (en réalité, mon formulaire appelle ce type de tableau un tableau "répéteur") à trois colonnes (Colonne 1 = année ; Colonne 2 = mois ; Colonne 3 = jours), qui s'appelle Tableau1.

Je souhaiterais que le tableau se modifie en fonction de la date de début et de la date de fin de telle sorte que je connaisse le nombre de jours de chaque mois de cette mission.

A titre d'exemple, et pour mieux vous faire comprendre, pour une mission qui démarrerait le 29/10/2021 et se finirait le 02/01/2022, l'utilisateur sélectionnerait sur le formulaire la date de début (29/10/2021) puis la date de fin (02/01/2022).

Je souhaiterais que le tableau présente les 3 colonnes (Année, Mois et Jour(s)), et 5 lignes pour notre exemple:

Entre le 29/10/2021 (date du début de la mission) et le 31/10/2021 il y a 3 jours.
Entre le 01/11/2021 et le 30/11/2021 il y a 30 jours.
Entre le 01/12/2021 et le 31/12/2021 il y a 31 jours.
Entre le 01/01/2022 et le 02/01/2022 il y a 2 jours.



Au fil des semaines, j'ai réussi à avancer un petit peu pour le code.

Un nouvel exemple pour illustrer ce que j'ai réussi à faire avec le code... Lorsqu'une personne sélectionne une date de début (Datedebut) et une date de fin (datefin), si Datedebut = 01/03/2022 et datefin = 05/05/2022.
- le tableau à trois colonnes voit son nombre de lignes évoluer pour que chaque mois entre les deux dates s'affiche (dans notre exemple, il apparait trois lignes)
- la première ligne se remplit toute seule (année, mois en lettres, nombre de jours dans le mois)
- la dernière ligne se remplit toute seule

Voici un visuel de ce à quoi correspond le tableau.



Cependant,
- les lignes intermédiaires ne se remplissent pas
- mon code ne fonctionne pas lorsque le tableau a seulement deux lignes, à ce moment là seule la première ligne se remplit.

Je ne sais pas du tout comment attribuer des valeurs aux lignes intermédiaires.

Dans l'exemple plus haut je voudrais que cela affiche cela :



Pouvez-vous m'aider et me dire ce qui ne fonctionne pas ? Je vous remercie par avance.

Anthony

Le code est le suivant :

Code :

//afficher le nombre de ligne nécessaire au tableau répétiteur
 
 
var nbmois = LimitDate('', '', '2', 'DatedebutLING', '', '', '', 'datefinLING', '', '', '', '1', '1');
while(NbRowTabRep('Tableau1_1')< nbmois+2){
 
InsertRow('Tableau1_1', '1');
 
}
 
//remplir le tableau répéteur
 
// nombre total de jour d'arrêt 
var nbjourarret = LimitDate('', '', '1', 'DatedebutLING', '', '', '', 'datefinLING', '', '', '', '1', '1');
 
// nombre de jour du mois de départ de l'arrêt de travail
var nbjourmoisdebut = NbDayMonth('', 'DatedebutLING', '', '', '', '1');
 
// numéro du jour de début de l'arrêt
var numerojourdebut = CutDate('', '2', 'DatedebutLING', '', '', '', '1');
 
// nom du mois de debut de l'arrêt
var moisdebut = CutDate('', '11', 'DatedebutLING', '', '', '', '1');
 
// année de debut de l'arrêt
var anneedebut = CutDate('', '4', 'DatedebutLING', '', '', '', '1');
 
// annee de fin arrêt 
var anneefinarret = CutDate('', '4', 'datefinLING', '', '', '', '1');
 
// nombre de jour restant dans le mois du début de l'arret 
var nbjourrestantmois = nbjourmoisdebut-numerojourdebut
 
// numero de jour de fin de l'arret
var numerojourfinarret = CutDate('', '2', 'datefinLING', '', '', '', '1');
 
// difference entre annee fin et annee debut arret
var anneedifference = anneefinarret - anneedebut
 
//mois suivant le mois debut
var moissuivant = moisdebut+1
 
//afficher le nombre de jour d'arrêt, le nom du premier mois de l'arrêt et l'année de l'arrêt sur la première ligne
if(nbjourrestantmois<nbjourarret){
AssignValue('Tableau1@||@2@||@'+1, nbjourrestantmois+1, '1', '2');
AssignValue('Tableau1@||@1@||@'+1, moisdebut, '1', '2');
AssignValue('Tableau1@||@0@||@'+1, anneedebut, '1', '2');
}
else{
AssignValue('Tableau1@||@2@||@'+1, nbjourarret+1, '1', '2');
AssignValue('Tableau1@||@1@||@'+1, moisdebut, '1', '2');
AssignValue('Tableau1@||@0@||@'+1, anneedebut, '1', '2');
}
 
// numéro de ligne où insérer les éléments du dernier mois de l'arrêt
var z = nbmois+1 ;
 
// mois de fin de l'arrêt
var moisfinarret = CutDate('', '11', 'datefinLING', '', '', '', '1');
 
// nb de jour du dernier mois de l'arrêt
var jourfinarret = CutDate('', '2', 'datefinLING', '', '', '', '1');
 
// remplir la dernière ligne du tableau
if(nbmois > 1){
AssignValue('Tableau1@||@0@||@'+z, anneefinarret, '1', '2');
AssignValue('Tableau1@||@1@||@'+z, moisfinarret, '1', '2');
AssignValue('Tableau1@||@2@||@'+z, jourfinarret, '1', '2');
 
 
}












Configuration: Macintosh / Firefox 97.0
A voir également:

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
9 mars 2022 à 19:31
Bonjour,

Visiblement, dans ta boucle ..
while(NbRowTabRep('Tableau1_1')< nbmois+2){
 
InsertRow('Tableau1_1', '1');
 
}
 

tu fais bien un insertRow pour ajouter des lignes .. mais tu ne les remplis pas...
Il faudrait donc, DANS LA BOUCLE, faire le remplissage de chaque nouvelle ligne que tu créés..
0
anthorange Messages postés 2 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 11 mars 2022
11 mars 2022 à 08:57
Bonjour et merci pour ton retour.

Je t'avoue ne pas savoir comment faire pour remplir les différentes colonnes... Mes connaissances en termes de "vocabulaire" javascript ne sont pas très développées.

Je ne sais pas comment "coder l'ordre" suivant :
Affiche pour toutes les lignes après la première ligne dans la colonne 1 l'année des mois intermédiaires entre la Datedebut et datefin, dans la colonne 2 les mois intermédiaires (en lettre) entre Datedebut et datefin, et dans la colonne 3 le nombre de jours de chaque mois intermédiaire.

Sans forcément me donner la solution exacte, peux-tu déjà me guider un peu plus ?

Merci par avance

Anthony
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 mars 2022 à 10:05
À mon avis, tu peux utiliser parmi le code que tu as déjà, la partie où il est indiqué en commentaire remplissage de la dernière ligne.
Dans la boucle tu fais l'insertion d'une ligne et le remplissage directement...
0