-- Belgenin ağırlığını (ürün ağırlığı × miktar, ürün biriminde) ve yazdırılan satır özetini yeniler; satırın takip yöntemini -- (Lot/Serial, envanter takibi kapalıysa boş) üründen, lotun stoktan seçilip seçilmeyeceğini (kaynak iç konum) belgeden yazar — -- satırın Lot/Seri butonları ve açılan lot ekranı bu iki kolona göre belirlenir. Lot/seri takipli satırda lot girilmişse yapılan -- miktar lot toplamıdır (lot seçmek o kadar teslim etmektir) ve seçilen lotlar satırın LotNumbers kolonunda listelenir. -- Özet satırı: [Referans] Ürün: talep / yapılan birim · lot (miktar), ... CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferRecalc] @Id uniqueidentifier AS BEGIN SET NOCOUNT ON; UPDATE l SET TrackingMethod = CASE WHEN p.TrackInventory = 1 AND p.TrackingMethod IN ('Lot', 'Serial') THEN p.TrackingMethod END, LotFromStock = CASE WHEN src.LocationType = 'Internal' THEN 1 ELSE 0 END FROM Stk_T_TransferLine l INNER JOIN Stk_T_Product p ON p.Id = l.ProductId INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId LEFT JOIN Stk_T_Location src ON src.Id = t.SourceLocationId WHERE l.TransferId = @Id AND l.IsDeleted = 0; UPDATE l SET Quantity = CASE WHEN t.Status IN ('Done', 'Cancelled') OR z.Quantity IS NULL THEN l.Quantity ELSE z.Quantity END, LotNumbers = CASE WHEN l.TrackingMethod = 'Serial' THEN z.Serials ELSE z.Lots END FROM Stk_T_TransferLine l INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId OUTER APPLY (SELECT SUM(lt.Quantity) AS Quantity, STRING_AGG(lt.LotNo, ', ') WITHIN GROUP (ORDER BY lt.LotNo) AS Serials, STRING_AGG(CONCAT(lt.LotNo, ' (', FORMAT(lt.Quantity, '0.####'), ')'), ', ') WITHIN GROUP (ORDER BY lt.LotNo) AS Lots FROM Stk_T_TransferLineLot lt WHERE lt.TransferLineId = l.Id AND lt.IsDeleted = 0) z WHERE l.TransferId = @Id AND l.IsDeleted = 0 AND l.TrackingMethod IN ('Lot', 'Serial'); UPDATE t SET Weight = ISNULL((SELECT SUM(dbo.Stk_F_UomConvert(CASE WHEN l.Quantity > 0 THEN l.Quantity ELSE l.DemandQuantity END, l.UomId, p.UomId) * ISNULL(p.Weight, 0)) FROM Stk_T_TransferLine l INNER JOIN Stk_T_Product p ON p.Id = l.ProductId WHERE l.TransferId = @Id AND l.IsDeleted = 0), 0), LineSummary = (SELECT STRING_AGG(x.Txt, CHAR(10)) WITHIN GROUP (ORDER BY x.CreationTime, x.Id) FROM (SELECT l.Id, l.CreationTime, CONCAT(CASE WHEN ISNULL(p.InternalReference, '') = '' THEN '' ELSE CONCAT('[', p.InternalReference, '] ') END, p.Name, ': ', FORMAT(l.DemandQuantity, '0.####'), ' / ', FORMAT(l.Quantity, '0.####'), ' ', l.UomId, CASE WHEN z.Txt IS NULL THEN '' ELSE CONCAT(N' · ', z.Txt) END) AS Txt FROM Stk_T_TransferLine l INNER JOIN Stk_T_Product p ON p.Id = l.ProductId OUTER APPLY (SELECT STRING_AGG(CONCAT(lt.LotNo, ' (', FORMAT(lt.Quantity, '0.####'), ')'), ', ') AS Txt FROM Stk_T_TransferLineLot lt WHERE lt.TransferLineId = l.Id AND lt.IsDeleted = 0) z WHERE l.TransferId = @Id AND l.IsDeleted = 0) x) FROM Stk_T_Transfer t WHERE t.Id = @Id; -- Satır eklenince, silinince ya da belge tamamlanınca talep kaleminin planlanmış payı değişir. EXEC Prc_P_MaterialRequestItemSync @Id; END