|
Iniciado por JUPETON, dez., 10 2018 12:00 AM - 9 respostas |
| |
| | | |
|
| |
Membro registado 7 mensagems |
|
Publicado em dezembro, 10 2018 - 12:00 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 940 mensagems Popularité : +66 (68 votes) |
|
Publicado em dezembro, 10 2018 - 10:13 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 940 mensagems Popularité : +66 (68 votes) |
|
Publicado em dezembro, 10 2018 - 10:19 AM |
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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 7 mensagems |
|
Publicado em dezembro, 11 2018 - 7:23 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Publicado em dezembro, 11 2018 - 8:21 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 7 mensagems |
|
Publicado em dezembro, 11 2018 - 9:35 AM |
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) |
| |
| |
| | | |
|
| | |
| |
Membro registado 940 mensagems Popularité : +66 (68 votes) |
|
Publicado em dezembro, 11 2018 - 9:41 AM |
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 ... |
| |
| |
| | | |
|
| | |
| |
Membro registado 28 mensagems Popularité : +1 (1 vote) |
|
Publicado em dezembro, 11 2018 - 9:45 AM |
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
-- (\ _ /) (='.'=) (")-(") |
| |
| |
| | | |
|
| | |
| |
Membro registado 7 mensagems |
|
Publicado em dezembro, 11 2018 - 10:01 AM |
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) |
| |
| |
| | | |
|
| | |
| |
Membro registado 28 mensagems Popularité : +1 (1 vote) |
|
Publicado em dezembro, 11 2018 - 10:12 AM |
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.
-- (\ _ /) (='.'=) (")-(")Mensagem modificada, dezembro, 11 2018 - 10:12 AM |
| |
| |
| | | |
|
| | | | |
| | |
|