|
Débuté par JUPETON, 10 déc. 2018 00:00 - 9 réponses |
| |
| | | |
|
| |
Membre enregistré 7 messages |
|
Posté le 10 décembre 2018 - 00:00 |
Bonjour à tous, suite à mes recherches sur la gestion des taches parallèles, je me suis exercé sur un projet mais malheureusement j'ai message d'erreur : "Un élément de type 'TâcheParallèle' n'a pas de valeur." je ne sais pas où commencer dans mes recherches. j'ai besoin de votre aide!!!
voici mon code :
gMaTache_qtéSortie,gMaTache_qtéEntrée,gMaTache_qtéUG,gMaTache_qtéAttente, gMaTache_qtéTransf, gMaTache_qtéRegul, gMaTache_qtéDét, gMaTache_qtéCH, gMaTache_qtéReclam, gMaTache_qtéMatPre, gMaTache_qtéRetourDepot sont des TâcheParallèle
dDateDbt, dDateFin est une Date xStkInit, xIDMémo, xStockVente,xStockTransferé, xQteAttente, xStkAchat, xStkDef, xStkRegul,xStkDeconditionnéeDet,xStkDeconditionnéePr, xStkRéclamé,xStkUG,xStkMatPremiere, xStkRetourDepot est un numérique = 0
SI HNbEnr(MémoStock) = 0 ALORS dDateDbt = "10000101" dDateFin = gdDatejournée SINON HExécuteRequête(REQ_MemoStockLast,hRequêteDéfaut) dDateDbt = REQ_MemoStockLast.DateMémoStock dDateDbt..Jour ++ xIDMémo = REQ_MemoStockLast.IDMémoStock dDateFin = gdDatejournée FIN
REQ_StockInitialMémo.art = xIDARTICL REQ_StockInitialMémo.MémoID = xIDMémo HExécuteRequête(REQ_StockInitialMémo,hRequêteDéfaut) SI HNbEnr(REQ_StockInitialMémo) = 0 ALORS xStkInit = 0 SINON xStkInit = REQ_StockInitialMémo.StockArticle FIN
gMaTache_qtéSortie = TâcheParallèleExécute(Calcul_QtéVendue,(xIDARTICL,dDateDbt,dDateFin,xStockVente),tpoCopieComplèteContexteHFSQL) gMaTache_qtéEntrée = TâcheParallèleExécute(Calcul_QtéLivrée,(xIDARTICL,dDateDbt,dDateFin,xStkAchat),tpoCopieComplèteContexteHFSQL) gMaTache_qtéUG = TâcheParallèleExécute(Calcul_QtéUG,(xIDARTICL,dDateDbt,dDateFin,xStkUG),tpoCopieComplèteContexteHFSQL) gMaTache_qtéAttente = TâcheParallèleExécute(Calcul_QtéVenteEnAttente,(xIDARTICL,dDateDbt,dDateFin,xQteAttente),tpoCopieComplèteContexteHFSQL) gMaTache_qtéTransf = TâcheParallèleExécute(Calcul_QtéTransférée,(xIDARTICL,dDateDbt,dDateFin,xStockTransferé),tpoCopieComplèteContexteHFSQL)
gMaTache_qtéRegul = TâcheParallèleExécute(Calcul_QtéCorrigée,(xIDARTICL,dDateDbt,dDateFin,xStkRegul),tpoCopieComplèteContexteHFSQL) gMaTache_qtéDét = TâcheParallèleExécute(Calcul_QtéDéstockageDétail,(xIDARTICL,dDateDbt,dDateFin,xStkDeconditionnéeDet),tpoCopieComplèteContexteHFSQL) gMaTache_qtéCH = TâcheParallèleExécute(Calcul_QtéDéstockagePr,(xIDARTICL,dDateDbt,dDateFin,xStkDeconditionnéePr),tpoCopieComplèteContexteHFSQL) gMaTache_qtéReclam = TâcheParallèleExécute(Calcul_QtéRetournée,(xIDARTICL,dDateDbt,dDateFin,xStkRéclamé),tpoCopieComplèteContexteHFSQL) gMaTache_qtéMatPre = TâcheParallèleExécute(Calcul_QtéMP,(xIDARTICL,dDateDbt,dDateFin,xStkMatPremiere),tpoCopieComplèteContexteHFSQL) gMaTache_qtéRetourDepot = TâcheParallèleExécute(Calcul_QtéRetourDépôt,(xIDARTICL,dDateDbt,dDateFin,xStkRetourDepot),tpoCopieComplèteContexteHFSQL)
TâcheParallèleExécuteAprèsToutes([gMaTache_qtéSortie,gMaTache_qtéEntrée,gMaTache_qtéUG,gMaTache_qtéAttente,gMaTache_qtéTransf,gMaTache_qtéRegul,gMaTache_qtéDét,gMaTache_qtéCH,gMaTache_qtéReclam,gMaTache_qtéMatPre,gMaTache_qtéRetourDepot],... AfficheStock,(xIDARTICL,0,xStkInit,gMaTache_qtéEntrée,gMaTache_qtéSortie,gMaTache_qtéTransf,gMaTache_qtéAttente,gMaTache_qtéRegul,gMaTache_qtéCH,gMaTache_qtéDét,gMaTache_qtéReclam,gMaTache_qtéUG,gMaTache_qtéMatPre,gMaTache_qtéRetourDepot),tpoThreadPrincipal)
voici le code d'une de mes taches parallèles
Procedure Calcul_QtéLivrée(xIDARTICL,dDateDbt,dDateFin,xStkAchat) xStkAchat = 0 SI HExécuteRequête(REQ_HistoriqueQtéEntrée,hRequêteDéfaut,xIDARTICL,dDateDbt,dDateFin) ALORS SI HNbEnr(REQ_HistoriqueQtéEntrée) = 0 ALORS xStkAchat = 0 SINON POUR TOUTE REQ_HistoriqueQtéEntrée xStkAchat += REQ_HistoriqueQtéEntrée.QteAchetée FIN FIN SINON xStkAchat = 0 FIN RENVOYER xStkAchat |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 939 messages Popularité : +66 (68 votes) |
|
Posté le 10 décembre 2018 - 10:13 |
bonjour,
avec le nombre de tâches que vous avez, je pense qu'un petit tableau serait sympa.
_mes_taches est un tableau de TâchesParallèles
Vous faite un petit : ( après chaque TâcheParallèleExécute() )
Ajoute(_mes_taches, nomdematacheparallèle )
Ensuite votre soucis viens je pense du fait que vous envoyé vos tâches parallèles à votre procédure AfficheStock() qui elle je suppose s'attend a avoir plutôt le retour de vos tâches.
Donc çà serait plutôt , ceci en reprenant le tableau de tâches et en utilisant le mot clé ValeurRenvoyéeTâchePrécédente
TâcheParallèleExécuteAprèsToutes(_mes_taches, AfficheStock,(xIDARTICL,0,xStkInit,ValeurRenvoyéeTâchePrécédente),tpoThreadPrincipal)
à tester bon dèv |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 939 messages Popularité : +66 (68 votes) |
|
Posté le 10 décembre 2018 - 10:19 |
A , j'oubliais,
pourquoi dans vos tâches parallèles vous vous servez qu'un paramètre comme retour ?
Procedure Calcul_QtéLivrée(xIDARTICL,dDateDbt,dDateFin) : numerique PRIVÉ _val_retour est un numerique = 0
SI HExécuteRequête(REQ_HistoriqueQtéEntrée,hRequêteDéfaut,xIDARTICL,dDateDbt,dDateFin) ALORS POUR TOUTE REQ_HistoriqueQtéEntrée _val_retour += REQ_HistoriqueQtéEntrée.QteAchetée FIN FIN RENVOYER _val_retour
çà simplifierait le nombre de paramètres de vos tâches...
Peu être également prévoir une requête qui ne vous renvoie qu'une seule ligne avec les quantités cumulées directement, çà éviterait de tout parcourir. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 7 messages |
|
Posté le 11 décembre 2018 - 07:23 |
bonjour Christophe, merci pour le coup de main, voici une copie de l'application de vos conseils :
gMaTache_qtéSortie = TâcheParallèleExécute(Calcul_QtéVendue,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéSortie )
gMaTache_qtéEntrée = TâcheParallèleExécute(Calcul_QtéLivrée,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéEntrée )
gMaTache_qtéUG = TâcheParallèleExécute(Calcul_QtéUG,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéUG )
gMaTache_qtéAttente = TâcheParallèleExécute(Calcul_QtéVenteEnAttente,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéAttente )
gMaTache_qtéTransf = TâcheParallèleExécute(Calcul_QtéTransférée,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéTransf )
gMaTache_qtéRegul = TâcheParallèleExécute(Calcul_QtéCorrigée,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéRegul )
gMaTache_qtéDét = TâcheParallèleExécute(Calcul_QtéDéstockageDétail,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéDét )
gMaTache_qtéCH = TâcheParallèleExécute(Calcul_QtéDéstockagePr,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéCH )
gMaTache_qtéReclam = TâcheParallèleExécute(Calcul_QtéRetournée,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéReclam )
gMaTache_qtéMatPre = TâcheParallèleExécute(Calcul_QtéMP,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéMatPre )
gMaTache_qtéRetourDepot = TâcheParallèleExécute(Calcul_QtéRetourDépôt,(xIDARTICL,dDateDbt,dDateFin),tpoCopieComplèteContexteHFSQL) Ajoute(_mes_taches, gMaTache_qtéRetourDepot )
TâcheParallèleExécuteAprèsToutes(_mes_taches, AfficheStock,(xIDARTICL,0,xStkInit,ValeurRenvoyéeTâchePrécédente),tpoThreadPrincipal)
mais voila une erreur que j'ai à mon niveau. il s'agit de ma procédure afficheStock. Les paramètres d'appel du code 'Procédure locale AfficheStock' sont incorrects : on attendait 14 paramètres et on en a reçu 4.
Procedure AfficheStock(xIDARTICL,xStkDef,xStkInit,xStkAchat,xStockVente,xStockTransferé,xQteAttente,xStkRegul,xStkDeconditionnéePr,xStkDeconditionnéeDet,xStkRéclamé,xStkUG,xStkMatPremiere,xStkRetourDepot)
HLitRecherche(Produits,IDProduits,xIDARTICL,hIdentique) SI HTrouve(Produits) ALORS xStkDef = xStkInit + xStkAchat - xStockVente - xStockTransferé - xQteAttente + xStkRegul - xStkDeconditionnéePr + xStkDeconditionnéeDet - xStkRéclamé + xStkUG - xStkMatPremiere + xStkRetourDepot SAI_STOCK = xStkDef SI Produits.StockArticle <> xStkDef ALORS Produits.StockArticle = xStkDef HModifie(Produits,hNumEnrEnCours,hBlocageNon) FIN FIN
Merci pour votre pour votre aide |
| |
| |
| | | |
|
| | |
| |
Posté le 11 décembre 2018 - 08:21 |
Bonjour JUPETON,
Si tu n'utilise pas tous les paramètres, met les en optionnel dans la déclaration :
Procedure AfficheStock(xIDARTICL,xStkDef,xStkInit,xStkAchat,xStockVente = 0,xStockTransferé = 0,xQteAttente = 0,xStkRegul = 0,xStkDeconditionnéePr = 0,xStkDeconditionnéeDet = 0,xStkRéclamé = 0,xStkUG = 0,xStkMatPremiere = 0,xStkRetourDepot = 0)
HLitRecherche(Produits,IDProduits,xIDARTICL,hIdentique) SI HTrouve(Produits) ALORS xStkDef = xStkInit + xStkAchat - xStockVente - xStockTransferé - xQteAttente + xStkRegul - xStkDeconditionnéePr + xStkDeconditionnéeDet - xStkRéclamé + xStkUG - xStkMatPremiere + xStkRetourDepot SAI_STOCK = xStkDef SI Produits.StockArticle <> xStkDef ALORS Produits.StockArticle = xStkDef HModifie(Produits,hNumEnrEnCours,hBlocageNon) FIN FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 7 messages |
|
Posté le 11 décembre 2018 - 09:35 |
Bonjour Geoffrey je crois que mon problème doit se situer dans l'exploitation des données : ValeurRenvoyéeTâchePrécédente
Comment exploiter les valeurs issues des différentes taches pour effectuer mon calcul dans la procédure AfficheStock?
TâcheParallèleExécuteAprèsToutes(_mes_taches, AfficheStock,(xIDARTICL,0,xStkInit,ValeurRenvoyéeTâchePrécédente),tpoThreadPrincipal) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 939 messages Popularité : +66 (68 votes) |
|
Posté le 11 décembre 2018 - 09:41 |
rebonjour,
vous êtes certain que toutes vos fonctions 'Calcul_XXXXX' font toute un RENVOYER xxxxxxx ? et qu'elle ne plante pas ?
Vous pouvez rajouter : numerique dans l'entête de vos fonctions, çà permettra à windev de vous indiquez celle où il n'y a pas de RENVOYER
par exemple :
Procedure Calcul_QtéRetourDépot(param1,param2,param3) : numerique ... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 28 messages Popularité : +1 (1 vote) |
|
Posté le 11 décembre 2018 - 09:45 |
Pardon, je n'avait pas fait gaffe à la fonction que tu utilisais. Une erreur dans le nom:
Ce n'est pas : ValeurRenvoyéeTâchePrécédente Mais : ValeursRenvoyéesTâchesPrécédentes Tu as oublié les S
-- (\ _ /) (='.'=) (")-(") |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 7 messages |
|
Posté le 11 décembre 2018 - 10:01 |
Bonjour Geoffrey et Christophe comment exploiter ValeursRenvoyéesTâchesPrécédentes dans ma procédure AfficheStock Comment exploiter les valeurs issues des différentes taches pour effectuer mon calcul dans la procédure AfficheStock ?
TâcheParallèleExécuteAprèsToutes(_mes_taches, AfficheStock,(xIDARTICL,0,xStkInit,ValeursRenvoyéesTâchesPrécédentes ),tpoThreadPrincipal) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 28 messages Popularité : +1 (1 vote) |
|
Posté le 11 décembre 2018 - 10:12 |
Aide de windev:
Le mot-clé ValeursRenvoyéesTâchesPrécédentes permet de passer les valeurs de retour des tâches précédentes en paramètre de la procédure de continuation, dans l'ordre des tâches du tableau des tâches précédentes.
Donc tu exploite comme tu le fait d'habitude avec n'importe qu'elle autre fonction. Après j'ai un doute sur cette forme :
(xIDARTICL,0,xStkInit,ValeursRenvoyéesTâchesPrécédentes )
Je pense qu'il faudrait plus un truc comme ça (Pas testé):
TâcheParallèleExécuteAprèsToutes(_mes_taches, AfficheStock,ValeursRenvoyéesTâchesPrécédentes,tpoThreadPrincipal)
Mais dans ce cas, faudrait pouvoir passer les paramètres manquant.
C'est pas propre, mais une tâche parallèle pour chaque xIDARTICL,0,xStkInit? A testé pour voir si c'est ça.
-- (\ _ /) (='.'=) (")-(")Message modifié, 11 décembre 2018 - 10:12 |
| |
| |
| | | |
|
| | | | |
| | |
|