PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → sélection et mise à jour d'une plage de ligne d'un tableau pour une condition donnée.
sélection et mise à jour d'une plage de ligne d'un tableau pour une condition donnée.
Started by Olivier, Jan., 17 2017 6:02 PM - 5 replies
Posted on January, 17 2017 - 6:02 PM
bonsoir à tous ,

j'ai un soucis avec windev et j’ai besoin d'aide. mon problème est le suivant:
j'ai créé un tableau qui importe les données fichiers excel sur 8 colonnes que voici ( image en PJ)




pour cela,pour la ligne comportant le montant au débit 139.458 je voudrais pourvoir ajouter automatiquement 30jrs a la date déchéance de sa ligne et aux dates des lignes en dessous qui constituent les divers lignes total du crédit dont la somme (somme crédit ) est égale au montant débit .

merci d'avance de votre aide.
Posted on January, 18 2017 - 11:17 AM
le bout de code ci-dessous et l'image sont la pour illustre sus-cité





POUR TOUTE LIGNE DE TABLE_CondReglement
TABLE_CondReglement.COL_DATEECHCONVER=ChaîneVersDate(TABLE_CondReglement.COL_DATE_ECHEANCE)
TABLE_CondReglement.COL_DATEMAJ=DateVersEntier(TABLE_CondReglement.COL_DATEECHCONVER)
// TABLE_CondReglement.COL_DATEECHCONVER=EntierVersDate(TABLE_CondReglement.COL_DATEMAJ)
FIN

TableActiveFiltre(TABLE_CondReglement.COL_COMPTE,filtreContient,"411120008")
POUR TOUT LIGNE DE TABLE_CondReglement
TABLE_CondReglement.COL_DATE_ECHEANCE=DateVersChaîne(EntierVersDate(DateVersEntier(TABLE_CondReglement.COL_DATEECHCONVER)+30))
FIN
TableDésactiveFiltre(TABLE_CondReglement)
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on January, 18 2017 - 12:41 PM
Bonjour,

Etant donné que tu ne cites pas le problème que tu as, je modifierais le code comme ci-après. Cela suppose que les colonnes sont dans le bon format dès le départ:
dDateEcheance est une Date

TableActiveFiltre(TABLE_CondReglement.COL_COMPTE,filtreContient,"411120008")
POUR TOUT LIGNE DE TABLE_CondReglement
dDateEcheance = COL_DATE_ECHEANCE
dDateEcheance..Jour += 30
COL_DATE_ECHEANCE = dDateEcheance
FIN
TableDésactiveFiltre(TABLE_CondReglement)


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posted on January, 19 2017 - 5:40 PM
Bonjour PSB,

merci de l'aide avec ton bout de code que j'ai optimisé en créant une variable qui enregistre le numéro de la pièce puis applique le filtre et met à jour la date et désactive le filtre. code cidessous:
POUR g=1 _A_ TABLE_CondReglement..Occurrence

// Mise à jour pour le client NEPTUNE OIL
SI TABLE_CondReglement.COL_COMPTE[g]="411720114" ALORS
//Info("le compte client",TABLE_CondReglement.COL_COMPTE[g],"NEPTUNE OIL se trouve en position :",g," son numéro de pièces est :",TABLE_CondReglement.COL_PIECES[g])
SAI_Mem=TABLE_CondReglement.COL_PIECES[g]
FIN
TableActiveFiltre(TABLE_CondReglement.COL_PIECES,filtreEgal,SAI_Mem..ValeurAffichée)
POUR TOUT LIGNE DE TABLE_CondReglement
TABLE_CondReglement.COL_DATE_ECHEANCE=DateVersChaîne(EntierVersDate(DateVersEntier(TABLE_CondReglement.COL_DATEECHCONVER)+30))
//TABLE_CondReglement[TABLE_CondReglement]..Couleur=CyanFoncé
FIN
TableDésactiveFiltre(TABLE_CondReglement)
FIN


mon problème actuellement est que, j'ai près d'une 40 tainne de filtre de ce genre a appliquer ce qui fait que mon programme met 5 min a traiter le fichier importé.
Comment pourrais accélérer le traitement?
Merci une fois de plus de l'aide .
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on January, 20 2017 - 11:40 AM
pour moi ton code est complètement incohérent, tu parcours une table, en plein milieu du traitement tu filtres la table, tu desactives le filtre, si ça se trouve, le tri aura changé, donc tu vas loupé des comptes...

Essaye peut -être ça, ça me parait plus juste:
nIndice est un entier
tabATraiter est un tableau de chaînes

POUR TOUTE LIGNE DE TABLE_CondReglement
// Condition pour savoir si le compte est à traiter
SI COL_COMPTE="411720114" ALORS
SI TableauCherche(tabATraiter,tcLinéaire,COL_PIECES) = -1 ALORS TableauAjoute(tabATraiter,COL_PIECES)
FIN
FIN

POUR TOUT sPieces DE tabATraiter
nIndice = 0

nIndice = TableCherche(TABLE_CondReglement.COL_PIECES,sPieces)
TANTQUE nIndice <> -1
TABLE_CondReglement.COL_DATE_ECHEANCE[nIndice]=DateVersChaîne(EntierVersDate(DateVersEntier(TABLE_CondReglement.COL_DATEECHCONVER[nIndice])+30))

nIndice = TableCherche(TABLE_CondReglement.COL_PIECES,sPieces,RechercheDéfaut,nIndice)
FIN
FIN


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posted on January, 23 2017 - 4:24 PM
Même diagnostic que Philippe SB.

Si ta table fait 100 lignes,et qu'il y a 15 lignes avec le code ducompte voulu, la commande 'TABLEACTIVEFILTRE' doit s'exécuter combien de fois 15 fois, ou 100 fois ?

Pour ce genre de debug, tu peux passer par l'outil 'Analyseur de performance' ( au lieu de cliquer sue le bouton Go vert )

A la fin du test , tu auras tout un tas de statistiques sur ce qu'à fait le programme. C'est très utile pour l'amélioration de performance. ( En fait , dans ton cas, le problème n'est pas un problème de performance, mais plutôt un problème d'exactitude des résultats).