Genel Bilgiler
SQL Server
Stored Procedure
✅ Etkilenmez
23.12.2025 07:15
23.12.2025 16:10
İstatistikler
0
Kod Analizi
158
Satır
4
Kullandığı
0
Kullanan
→ Kullandığı Nesneler (4)
← Kullanan Nesneler (0)
Bu nesneyi kullanan yok
→ Bağımlılık Ağacı
- BARKODREFERENCES
- sp_AddNewItemAndUnitCALLS_SP
- BARKODREFERENCES
- MalzemeBarkodlariREFERENCES
- SON_YUKLENENLERREFERENCES
← Etki Ağacı
Bu nesneyi kullanan yok
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