-- Stoktan Lot Seçimi (Stk.TransferLineLotStock) satır kaydı: yazılan miktar varsa o, yoksa Seç işaretliyse lotun -- eldeki miktarı atanır (ekranda Seç aynı değeri yazar); ikisi de yoksa lot satırdan çıkar. Batch kaydı her satırı ayrı ve -- eşzamanlı istekle gönderir; aynı satırın lotları üst üste yazılmasın diye hareket satırı kilitlenip istekler sırayla işlenir. CREATE OR ALTER PROCEDURE [dbo].[Stk_P_TransferLineLotStockSave] @Id nvarchar(80), @IsSelected bit = NULL, @SelectedQuantity decimal(18, 4) = NULL, @LastModifierId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @LineId uniqueidentifier = TRY_CAST(LEFT(@Id, 36) AS uniqueidentifier), @StockId uniqueidentifier = TRY_CAST(SUBSTRING(@Id, 38, 36) AS uniqueidentifier), @Tenant uniqueidentifier, @Doc uniqueidentifier, @Status nvarchar(16), @Lot nvarchar(64), @OnHand decimal(18, 4), @Qty decimal(18, 4); BEGIN TRAN; SELECT @Tenant = l.TenantId, @Doc = l.TransferId FROM Stk_T_TransferLine l WITH (UPDLOCK, HOLDLOCK) WHERE l.Id = @LineId; SELECT @Status = t.Status, @Lot = s.LotNo, @OnHand = dbo.Stk_F_UomConvert(s.Quantity, s.UomId, l.UomId) FROM Stk_T_TransferLine l INNER JOIN Stk_T_Transfer t ON t.Id = l.TransferId INNER JOIN Stk_T_Stock s ON s.Id = @StockId AND s.LocationId = t.SourceLocationId AND s.ProductId = l.ProductId WHERE l.Id = @LineId; IF @Lot IS NULL THROW 50322, N'Lot, belgenin kaynak konumunda bulunamadı.', 1; IF @Status IN ('Done', 'Cancelled') THROW 50313, N'Tamamlanmış ya da iptal edilmiş belgenin satırı değiştirilemez.', 1; IF ISNULL(@SelectedQuantity, 0) > 0 SET @Qty = @SelectedQuantity; ELSE IF @IsSelected = 1 SET @Qty = @OnHand; ELSE SET @Qty = 0; IF @Qty > @OnHand THROW 50324, N'Seçilen miktar lotun eldeki miktarını aşamaz.', 1; UPDATE Stk_T_TransferLineLot SET IsDeleted = 1, DeletionTime = GETUTCDATE(), DeleterId = @LastModifierId WHERE TransferLineId = @LineId AND LotNo = @Lot AND IsDeleted = 0; IF @Qty > 0 INSERT INTO Stk_T_TransferLineLot (Id, TenantId, TransferLineId, LotNo, Quantity, CreationTime, CreatorId, IsDeleted) VALUES (NEWID(), @Tenant, @LineId, @Lot, @Qty, GETUTCDATE(), @LastModifierId, 0); EXEC Stk_P_TransferRecalc @Doc; COMMIT; END