-- Lot/Seri Oluştur: stoğa giren satırın lot dağılımı olmayan kısmı için numaratörden lot (Inventory.LotNumber, tek lot) ya da -- seri (Inventory.SerialNumber, birim başına bir seri) numarası üretir. Stoktan çıkan satırda lot stoktan seçilir (Otomatik Ata). CREATE OR ALTER PROCEDURE [dbo].[Inv_P_TransferLineLotGenerate] @Id uniqueidentifier, @UserId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; DECLARE @Tenant uniqueidentifier, @Method nvarchar(16), @Quantity decimal(18, 4), @Remain decimal(18, 4), @SrcInternal bit, @No nvarchar(128); SELECT @Tenant = l.TenantId, @Method = CASE WHEN p.TrackInventory = 1 THEN p.TrackingMethod END, @Quantity = CASE WHEN l.Quantity > 0 THEN l.Quantity ELSE l.DemandQuantity END, @SrcInternal = CASE WHEN src.LocationType = 'Internal' THEN 1 ELSE 0 END FROM Inv_T_TransferLine l INNER JOIN Inv_T_Transfer t ON t.Id = l.TransferId INNER JOIN Inv_T_Product p ON p.Id = l.ProductId LEFT JOIN Inv_T_Location src ON src.Id = t.SourceLocationId WHERE l.Id = @Id; IF ISNULL(@Method, '') NOT IN ('Lot', 'Serial') THROW 50314, N'Ürün lot/seri numarasıyla takip edilmiyor.', 1; IF @SrcInternal = 1 THROW 50315, N'Stoktan çıkan satırda lot oluşturulmaz; Otomatik Ata ile stoktaki lotlar seçilir.', 1; SET @Remain = @Quantity - ISNULL((SELECT SUM(Quantity) FROM Inv_T_TransferLineLot WHERE TransferLineId = @Id AND IsDeleted = 0), 0); IF @Remain <= 0 RETURN; IF @Method = 'Lot' BEGIN EXEC Adm_P_SequenceNext 'Inventory.LotNumber', @Tenant, @No OUTPUT; INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted) VALUES (NEWID(), @Tenant, @Id, LEFT(@No, 64), @Remain, GETUTCDATE(), @UserId, 0); RETURN; END IF @Remain <> FLOOR(@Remain) THROW 50316, N'Seri numaralı üründe miktar tam sayı olmalıdır.', 1; WHILE @Remain > 0 BEGIN EXEC Adm_P_SequenceNext 'Inventory.SerialNumber', @Tenant, @No OUTPUT; INSERT INTO Inv_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted) VALUES (NEWID(), @Tenant, @Id, LEFT(@No, 64), 1, GETUTCDATE(), @UserId, 0); SET @Remain = @Remain - 1; END END