J'ai une procédure stockée qui met à jour les articles de l'inventaire sur plusieurs sites. Ce que j'essaie surtout de faire, c'est de permettre une bonne tenue des registres pour les transferts d'inventaire entre les sites.
Le problème que je rencontre est que certains de ces emplacements n'ont pas d'enregistrements pour la plupart des types d'articles en stock, donc lorsque j'essaie de mettre à jour les quantités (-1 pour l'emplacement initial, +1 pour le nouvel emplacement), il n'y a pas d'enregistrement à mettre à jour.
Voici ma procédure stockée :
CREATE procedure dbo.Inv_Transfer (@p_hStock numeric,
@p_sFProp varchar(20), @p_hTProp numeric,
@p_dQuan numeric, @p_Date datetime,
@p_sUser1 varchar(1000),@p_sUser2 varchar(1000))
as
declare
@v_FInvhMy numeric,
@v_TInvhMy numeric,
@v_sStockCode varchar(10),
@v_hFProp numeric,
@v_ibegin int,
@v_iend int
begin
set @v_ibegin = charindex('(', @p_sFProp )
if @v_ibegin <= 0
begin
raiserror('From property string not readable',16,1, @p_sFProp )
return(0)
end
else
begin
set @v_iend = charindex (')',@p_sFProp)
set @v_hFProp = substring(@p_sFProp,@v_ibegin + 1,@v_iend - @v_ibegin -1)
end
select @v_sStockCode = sCode from mm2stock where hMy = @p_hStock
if @@ERROR<> 0
begin
raiserror('Stock read failed ',16,1)
return(0)
end
select @v_FInvhMy = hMy from mm2inventory where hStock = @p_hStock and hStoreProp = @v_hFprop
if @@ERROR<> 0
begin
raiserror('From inventory read failed ',16,1)
return(0)
end
select @v_TInvhMy = hMy from mm2inventory where hstock = @p_hStock and hStoreProp = @p_hTProp
if @@ERROR<> 0
begin
raiserror('To inventory read failed ',16,1)
return(0)
end
update mm2inventory set iQtyonHand = iQtyonHand - @p_dquan where hmy = @v_FInvhMy
if @@ERROR<> 0
begin
raiserror('Update from inventory failed ',16,1)
return(0)
end
update mm2inventory set iQtyonHand = iQtyonHand + @p_dquan where hmy = @v_TInvhMy
if @@ERROR<> 0
begin
raiserror('Update to inventory failed ',16,1)
return(0)
end
else
begin
INSERT INTO mm2inventory (scode, hstock, hstoreprop, dcosteach, dbillprice, ireorderlevel, ireorderqty, iqtyonorder, iqtyonhand, suser1, suser2, suser3, suser4, snotes)
SELECT (SELECT hmy + 1 where hmy in (select max(hmy) from mm2inventory)),@p_hStock,@p_hTProp,(SELECT dcosteach from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),(SELECT dbillprice from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),(SELECT ireorderlevel from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),(SELECT ireorderqty from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),0,0,'','','','','' FROM mm2inventory
update mm2inventory set iQtyonHand = iQtyonHand + @p_dquan where hmy = @v_TInvhMy
end
insert into mm2InvXfer( sStock,hinvfrom,hinvto,dquant,dtdate,sUser1,sUser2)
values (@v_sStockCode,@v_FinvhMy, @v_TInvhMy, @p_dquan,
isnull(@p_Date,getdate()), @p_sUser1, @p_sUser2)
if @@ERROR<> 0
begin
raiserror('Insert into inventoryxfer table failed ',16,1)
return(0)
end
end
Un extrait sur lequel je travaille :
update mm2inventory set iQtyonHand = iQtyonHand - @p_dquan where hmy = @v_FInvhMy
if @@ERROR<> 0
begin
raiserror('Update from inventory failed ',16,1)
return(0)
end
update mm2inventory set iQtyonHand = iQtyonHand + @p_dquan where hmy = @v_TInvhMy
if @@ERROR<> 0
begin
raiserror('Update to inventory failed ',16,1)
return(0)
end
else
begin
INSERT INTO mm2inventory (scode, hstock, hstoreprop, dcosteach, dbillprice, ireorderlevel, ireorderqty, iqtyonorder, iqtyonhand, suser1, suser2, suser3, suser4, snotes)
SELECT (SELECT hmy + 1 where hmy in (select max(hmy) from mm2inventory)),@p_hStock,@p_hTProp,(SELECT dcosteach from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),(SELECT dbillprice from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),(SELECT ireorderlevel from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),(SELECT ireorderqty from mm2inventory where hstock = @p_hStock and hstoreprop = @v_hFProp),0,0,'','','','','' FROM mm2inventory
update mm2inventory set iQtyonHand = iQtyonHand + @p_dquan where hmy = @v_TInvhMy
end
Donc, comme vous pouvez le voir ci-dessus, j'essaie de mettre à jour (ce qui fonctionne bien si des enregistrements existent pour l'article d'inventaire pour les deux emplacements de stockage), mais s'il y a une erreur, je veux alors insérer ma nouvelle ligne pour cet article d'inventaire particulier et ensuite le mettre à jour avec la nouvelle valeur de quantité, mais je fais quelque chose d'incorrect.
Quelqu'un peut-il me dire ce que je fais mal ? Merci