← Detay Sayfası
Nesne Düzenle
|
sp_UpsertMalzemeBarkod
İlgili Uygulama
-- Seçiniz --
SQL Server
Nesne Türü
View
Stored Procedure
Trigger
Job
Nesne Adı
Bu nesne dönem devrinden etkileniyor mu? (Örn: İçinde _01_ gibi sabit dönem kodu var mı?)
Genel Kullanım Amacı ve Notlar
Tam SQL Kodu
CREATE PROCEDURE [dbo].[sp_UpsertMalzemeBarkod] @pUrunKodu NVARCHAR(50), @pFirmaAdi VARCHAR(100) = NULL, @pWriteSonYuklenenler BIT = 1, @pCallLogo BIT = 1, @oUrunAnahtari INT OUTPUT, @oMalzemeBarkodu NVARCHAR(50) OUTPUT AS BEGIN SET NOCOUNT ON; BEGIN TRY BEGIN TRAN; ------------------------------------------------------------ -- 0) Uygulama kilidi (UNI üretimde yarislari engelle) ------------------------------------------------------------ DECLARE @lockResult INT; EXEC @lockResult = sp_getapplock @Resource = N'sp_UpsertMalzemeBarkod_UNI_Gen', @LockMode = N'Exclusive', @LockOwner = N'Transaction'; IF (@lockResult < 0) BEGIN RAISERROR(N'Uygulama kilidi alinamadi: sp_UpsertMalzemeBarkod_UNI_Gen', 16, 1); ROLLBACK TRAN; RETURN; END ------------------------------------------------------------ -- 1) LOGO'da ürün durumu ve barkodunu oku ------------------------------------------------------------ DECLARE @itemsBarcode NVARCHAR(50) = NULL, @itemExists BIT = 0; SELECT @itemsBarcode = li.EXPCTGNO, @itemExists = 1 FROM dbo.LG_011_ITEMS AS li WHERE li.CODE = @pUrunKodu; ------------------------------------------------------------ -- 2) Nihai barkodu belirle (@oMalzemeBarkodu) -- a) LOGO'dan barkod varsa onu kullan -- b) Yoksa UNI-xxxxx üret (MAX+1) ------------------------------------------------------------ IF (@itemsBarcode IS NOT NULL AND LTRIM(RTRIM(@itemsBarcode)) <> '') BEGIN SET @oMalzemeBarkodu = @itemsBarcode; END ELSE BEGIN DECLARE @nextNo INT; SELECT @nextNo = ISNULL(MAX(CAST(SUBSTRING(mb.MalzemeBarkodu, 5, 5) AS INT)), 90000) + 1 FROM dbo.MalzemeBarkodlari AS mb WITH (UPDLOCK, HOLDLOCK) WHERE mb.MalzemeBarkodu LIKE 'UNI-[0-9][0-9][0-9][0-9][0-9]'; SET @oMalzemeBarkodu = 'UNI-' + RIGHT('00000' + CAST(@nextNo AS VARCHAR(5)), 5); END ------------------------------------------------------------ -- 3) LOGO kaydini önce aç (istenirse) ? sonra MalzemeBarkodlari ------------------------------------------------------------ IF (@pCallLogo = 1) BEGIN IF (@itemExists = 0) BEGIN -- Ürün yok: önce LOGO'da ürün + birim aç (EXPCTGNO = @oMalzemeBarkodu) EXEC dbo.sp_AddNewItemAndUnit @pCode = @pUrunKodu, @pBarcode = @oMalzemeBarkodu; -- Yeniden oku (opsiyonel) SELECT @itemsBarcode = li.EXPCTGNO FROM dbo.LG_011_ITEMS AS li WHERE li.CODE = @pUrunKodu; END ELSE BEGIN -- Ürün var ama LOGO barkodu bossa EXPCTGNO'yu ayni barkodla doldur IF (@itemsBarcode IS NULL OR LTRIM(RTRIM(@itemsBarcode)) = '') BEGIN UPDATE dbo.LG_011_ITEMS SET EXPCTGNO = @oMalzemeBarkodu WHERE CODE = @pUrunKodu AND (EXPCTGNO IS NULL OR LTRIM(RTRIM(EXPCTGNO)) = ''); END END END ------------------------------------------------------------ -- 4) MalzemeBarkodlari upsert (LOGO islemlerinden SONRA) ------------------------------------------------------------ DECLARE @exists INT = 0; SELECT @exists = 1 FROM dbo.MalzemeBarkodlari WITH (UPDLOCK, HOLDLOCK) WHERE UrunKodu = @pUrunKodu; IF (@exists = 1) BEGIN -- Mevcut satiri oku SELECT @oUrunAnahtari = UrunAnahtari, @oMalzemeBarkodu = COALESCE(MalzemeBarkodu, @oMalzemeBarkodu) FROM dbo.MalzemeBarkodlari WHERE UrunKodu = @pUrunKodu; -- Barkod bossa koy, doluysa sadece FirmaAdi güncelle IF (@oMalzemeBarkodu IS NULL OR LTRIM(RTRIM(@oMalzemeBarkodu)) = '') BEGIN UPDATE dbo.MalzemeBarkodlari SET MalzemeBarkodu = @oMalzemeBarkodu, FirmaAdi = COALESCE(@pFirmaAdi, FirmaAdi) WHERE UrunKodu = @pUrunKodu; END ELSE IF (@pFirmaAdi IS NOT NULL) BEGIN UPDATE dbo.MalzemeBarkodlari SET FirmaAdi = @pFirmaAdi WHERE UrunKodu = @pUrunKodu; END END ELSE BEGIN INSERT INTO dbo.MalzemeBarkodlari (UrunKodu, MalzemeBarkodu, Durum, FirmaAdi) VALUES (@pUrunKodu, @oMalzemeBarkodu, 1, @pFirmaAdi); SET @oUrunAnahtari = SCOPE_IDENTITY(); END ------------------------------------------------------------ -- 5) SON_YUKLENENLER (opsiyonel) ------------------------------------------------------------ IF (@pWriteSonYuklenenler = 1) BEGIN INSERT INTO dbo.SON_YUKLENENLER (UrunKodu, FirmaAdi, MalzemeBarkodu) VALUES (@pUrunKodu, CONVERT(NVARCHAR(100), @pFirmaAdi), -- tablo NVARCHAR(100) CONVERT(NVARCHAR(100), @oMalzemeBarkodu)); END COMMIT TRAN; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRAN; DECLARE @ErrMsg NVARCHAR(4000) = ERROR_MESSAGE(), @ErrSeverity INT = ERROR_SEVERITY(); IF (@ErrSeverity < 11) SET @ErrSeverity = 16; RAISERROR(@ErrMsg, @ErrSeverity, 1); RETURN; END CATCH END
Oluşturulma: 23.12.2025 07:15
Son Güncelleme: 23.12.2025 17:28
İptal
Nesneyi Sil
Değişiklikleri Kaydet