locked
Problème séquencement d'exécution silverlight RRS feed

  • Question

  • Salut,
    je développe un module pour supprimer un ordre de fabrication qui est composé d'un certain nombre de produit (entrée en stock)
    pour cela je dois supprimer les produits qui le constitue (supprimer les entrée et les enregistrer en tant que sortie) et enregistrer les mouvement dans la table stock => (dans ce cas je dois recalculer la quantité en stock qteStock=qteStock-qteEntree)
    lorsque j'ai des produits différents la suppression fonctionne correctement. Le problème survient lorsque j'ai le même produit qui existe plusieurs fois dans l'ordre de fabrication, la quantité sera erroné dans le stock.

    foreach (var item in Entrees)
    {
    MonContext ctx = MonContext();
    Sortie sortie = new Sortie();
    sortie.IDArticle = item.IDArticle;
    sortie.DateSortie = System.DateTime.Now;
    sortie.QteUnitePrimaire = item.QteUnitePrimaire;
     
    //enregistrement de la table sortie
    
    ctx.Sorties.Add(sortie);
    ctx.SubmitChanges();
    
    //enregistrement dans la table stock
    
    Stock stock = new Stock();
    stock.idEntreeSortie = sortie.IDSortie;
    stock.DateEntreeSortie = DateTime.Now;
    stock.IsSortie = true;
    stock.IsEntree = false;
    stock.IDArticle =item.IDArticle;
    stock.qteStock= ctx.GetQuantiteInStock(item.IDArticle) - sortie.QteUnitePrimaire ;
    ctx.Stocks.Add(stock);
    ctx.SubmitChanges();
    }

    pour récuppérer la quantité en stock dans le service 
    public double? GetQuantiteInStock(int idArticle)
    {
    double? qteEntree = this.ObjectContext.Entree.Where(p => p.IDArticle == idArticle).Select(e => e.QteUnitePrimaire).Sum();
    double? qteSortie = this.ObjectContext.Sortie.Where(p => p.IDArticle == idArticle).Select(e => e.QteUnitePrimaire).Sum();
    return qteEntree-qteSortie;
    }
    donc mon problème et que lorsque j'execute mon programme et quand je supprime un ordre de fabrication
    qui contient l'article 40, 2 fois avec la quantité dans le premier entrée est 3 et dans le deuxième entrée est 5 sachant que la quantité initial 
    dans le stock est 20. j'aurais après la suppression de l'ordre de fabrication lorsqu'il supprime la première entrée (qteStock = 17)
    et après la suppression du deuxième entrée (qteStock = 15) alors que ça doit être recalculer à partie du 17 donc ça doit être 12
    d'après mon analyse pour l'exécution je constate que le programme n'exécute pas le fonctionnement demandé pour chaque item à part(çàd il exécute l'ajout en sortie, calcul la qteStock et enregistre dans la table Stock pour le premier item avant de passer au deuxième..) 
    Mais il exécute l'ajout dans la table sortie pour tous les item ensuite il continue l'exécution

    c'est principalement un problème de séquencement
    j'ai essayé d'utiliser un backgroundworker pour bloquer l'exécution mais sans succès, toujours le même problème (il saute les étapes)

    quelqu'un peut proposer des idées pour contourner le problème


    mardi 28 avril 2015 09:13