Bonjour,

Je souhaite mettre à jour le prix d'inventaire des articles à partir de la dernière livraison avant la fin de l'exercice et de la ligne de commande d'achat correspondante.

Pour cela je rapproche la table des lignes de livraison de la table des lignes de commandes d'achat dans une vue.
Puis je transforme le montant de la ligne de commande d'achat en unité de stock.
Ensuite j'effectue la mise à jour de mon article.
Problème: je n'arrive pas à faire la mise à jour (après plus d'une heure d'attente, la mise à jour n'est pas réalisée).

Voici mes scripts SQL:

Le script de la vue pour rapprocher les livraisons des lignes de commandes d'achat et des commandes d'achat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
select al.id_article,al.id_achat_ligne, al.mnt_total_ht, al.nb_lot_cmde, al.qte_cmde, al.lg_cmde, al.tot_cmde, al.id_unite_cmde, al.id_unite_tot_cmde, tmp.date_livre, ach.num_achat
from toperp.t_achat_ligne al
inner join 
(
SELECT  a.id_article
      ,max(a.date_livre) AS date_livre
      ,max(a.id_achat_ligne) keep (dense_rank first order by date_livre DESC) AS id_achat_ligne
 FROM t_achat_bl_ligne a    
WHERE a.date_livre < TO_DATE('30/09/2011','DD/MM/YYYY')
GROUP BY a.id_article
) tmp
on tmp. id_achat_ligne  = al.id_achat_ligne
inner join toperp.t_achat ach
on al.id_achat = ach.id_achat
 where al.mnt_total_ht > 0
Mon script de calcul de coût que je n'arrive pas à faire passer:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
UPDATE T_ARTICLE ART 
          SET PU=(SELECT tmp.cout_unit 
                         FROM  ( select a.id_article, 
                                              b.MNT_TOTAL_HT / (b.NB_LOT_CMDE  *                                            b.qte_cmde *  b.lg_cmde )  as cout_unit
                                    from t_article a, V_RAPPRO_BL_ACHAT b
                                    where a.id_article      = b.id_article  
                                       and  a.id_unite_stock = id_unite_cmde                          
    and  b.id_unite_cmde  <> b.id_unite_tot_cmde
    and  a.id_groupe_article in (1,3)) tmp 
         WHERE ART.id_article=tmp.id_article)
Merci d'avance.
Julien.