Barkod Nedir:

İngilizce barcode "çubuklardan oluşan kodlama sistemi" sözcüğünden alıntıdır.

Barkod, çubuk kod ya da çizgiler ile verilerin görsel özellikli makinelerin okuyabilmesi için çeşitli kodlama yöntemleriyle sunulmasıdır.

Orijinal olarak barkod, veriyi paralel çizgilerin genişlikleri ve boşlukları arasında saklardı, ama günümüzde noktasal şekiller, iç içe daireler ve görüntü içinde gizli şekiller gibi farklı türlerde de görülebiliyorlar.

Barkod, barkod okuyucu olarak da adlandırılan optik okuyucular ile okunabilir veya özel yazılımlarla görüntü içinden (kamera vb. ile) taranabilir. Barkod bilgisayara veri girişinin doğruluğunu ve hızını artıran Otomatik Tanıma Veri Toplama (OT/VT) uygulamalarında geniş bir kullanım alanı bulmaktadır.

Barkod, ürünü tespit etmenin yanı sıra ürüne ait bazı bilgilerin de kodlanması ve kolay okutulması için kullanılır.

Örneğin üretim, depolama ve sevkiyat işlemleri için en çok ihtiyaç duyulan ürün barkodu, seri/lot numarası, son kullanma tarihi, üretim tarihi, paletin, paketin veya kolinin içerdiği miktar, parti numarası, üretim yeri, üretim yapılan makine, üretim yapan personel gibi bilgiler kodlanabilmektedir.

Logo WMS Erp uygulamasında tanımlanan ürün barkodlarını kullanmaktadır. Erp uygulamasında tanımlanan ürün barkodu ile ürünü tespit eder.

Eğer barkod karma barkod ise yani ürün barkodu haricinde örnekte verilen bilgilerden en az biri de barkoda eklenmişse bu barkodu çözümlemek için Logo WMS’te iki yöntem kullanılmaktadır.

Bunlardan birincisi; Barkod Miktar Özelliği ikincisi ise Saklı Yordam(Stored Procedure)dır. Varsayılan seçeneği ile barkod çözümleme yapılmayıp doğrudan Erpde tanımlı barkod, ürün kodu, seri/lot, varyant gibi bilgileri içeren barkodlar okutulabilmektedir.

Saklı Yordam(Stored Procedure) Özelliği:

Bu özellik veri tabanında kayıtlı “spWMSParseBarcode” adlı stored procedure ile çalışmaktadır. Bu özellik aktive edildiğinde Logo Wms Uygulama ekranında okutulan barkod (karma yada normal) prosedüre parametre olarak gönderilip prosedür içinde barkodda saklanan bilgiler ayrıştırılıp BARKOD, MIKTAR, TAKIPNO, SKT, ACIKLAMA olarak tekrar uygulamaya geri gönderilir. Uygulama da aldığı bu bilgileri ekrandaki ilgili alanlara yazar.  Prosedürden geri dönen barkod (karma barkoddan ayrıştırılan ürüne ait barkod, kod vb.) ile ürünün tespitini yapar. Ürün seçildikten sonra da karma barkoddan elde edilen diğer bilgileri ekranda ilgili alanlara yazar. Aşağıdaki örnekte 3 farklı uzunluktaki karma barkodu çözen prosedür örneği görmektesiniz.

ALTER PROCEDURE [dbo].[spWMSParseBarcode]

@BARKOD nvarchar(60) output,

@MIKTAR float output,

@TAKIPNO nvarchar(50) output,

@SKT nvarchar(50) output,

@ACIKLAMA nvarchar(50) output


AS


       if LEN(@BARKOD)= 46

       begin


              SET @TAKIPNO = SUBSTRING(@BARKOD,25,8)

              SET @MIKTAR = SUBSTRING(@BARKOD,33,10)

              SET @SKT = '01'+'.'+SUBSTRING(@BARKOD, 43, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 45, 2))

              SET @BARKOD = SUBSTRING(@BARKOD,1,24)

             

       end

       else

       if LEN(@BARKOD)= 27

       begin

              SET @TAKIPNO = SUBSTRING(@BARKOD,8,5)

              SET @MIKTAR = SUBSTRING(@BARKOD,13,4)

              SET @SKT = SUBSTRING(@BARKOD, 22, 2)+'.'+SUBSTRING(@BARKOD, 24, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 26, 2))

              SET @BARKOD = SUBSTRING(@BARKOD,1,7)

             

       end

       else

          if LEN(@BARKOD)= 12

          begin

                       SET @MIKTAR = SUBSTRING(@BARKOD,9,4)

                       SET @BARKOD = SUBSTRING(@BARKOD,1,8)

          end

          else

       begin

                      SET @ACIKLAMA= @BARKOD

                      SET @TAKIPNO = @TAKIPNO

              SET @BARKOD = SUBSTRING(@BARKOD,1,24)

              SET @MIKTAR = @MIKTAR

              SET @SKT = ''

       end

SELECT @BARKOD BARKOD,@MIKTAR MIKTAR,@TAKIPNO TAKIPNO,@SKT SKT, @ACIKLAMA ACIKLAMA

Bu prosedürde aşağıdaki kısımlar değiştirilmemelidir. Yoksa prosedür çalışmaz.

Yazacağımız ayrıştırma bölümü AS ve SELECT (---- yerine) arasına yazılmalıdır. Şimdi iki farklı uzunluktaki karma barkodu analiz edip sonrasında prosedüre gerekli sorguları ekleyip çözümlemesini yapalım. Doğru çalışıp çalışmadığını yine sorguları yazdığımız sql management ekranında test edeceğiz.


ALTER PROCEDURE [dbo].[spWMSParseBarcode]

@BARKOD nvarchar(60) output,

@MIKTAR float output,

@TAKIPNO nvarchar(50) output,

@SKT nvarchar(50) output,

@ACIKLAMA nvarchar(50) output


AS

----

----

SELECT @BARKOD BARKOD,@MIKTAR MIKTAR,@TAKIPNO TAKIPNO,@SKT SKT, @ACIKLAMA ACIKLAMA

Örnek barkodlarımızdan birisi “000000000BRK0010020030040001619400000000101222” ve ikincisi de “5075001987650010lot01141021” bu olsun. Göründüğü gibi farklı uzunluklarda.

Prosedürü yazmadan önce bu barkodların içerdiği bilgilerin hangi kısımları hangi bilgileri içeriyor bilmemiz gerekli. Genellikle bu tür kodlanan barkodların birer dokümanı bulunmaktadır. Doküman incelendiğinde hangi aralıkların hangi bilgileri içerdiği öğrenilebilir. Öncelikle barkodun uzunluğunu tespit ediyoruz. Bu tespiti yaparken gözle saymak yerine sql “len” komutunu kullanmamız daha doğru olacaktır.

Bazı durumlarda barkodun içinde boşluk karakteri gibi ekranda sayılamayan karakterler de bulunabiliyor.

Barkod uzunluğunu doğru bir şekilde tespit ettikten sonra barkodun hangi bölümünün hangi bilgiyi içerdiğini tespit etmemiz gerekiyor ve sonrasında da prosedüre sorgumuzu ekleyeceğiz.

İlk örnek barkodda ilk 24 karakterin ürüne ait barkod tanımı olduğunu tespit ediyoruz. Diğer bilgiler de aşağıdaki gibi kodlanmış.

Barkod                 :1-24 (1. karakterden itibaren 24 hane)

Takip Numarası:25-8 (25. Karakterden itibaren 8 hane)

Miktar                  :33-10 (33. Karakterden itibaren 10 karakter)

Skt                         :43-2 ve 45-2  (43. Karakterden itibaren 2 hane ay bilgisi, 45. Karakterden itibaren 2 hane yılın son iki rakamı)

Açıklama             :Karma barkod içinde açıklama bulunmuyor.


Tespit sonrası prosedürü yazmaya başlayabiliriz.

Karma Barkoda Göre Prosedürün Yazılması:


Prosedürde karma barkod parametresi @BARKOD değişkenine set edilir @BARKOD değişkeni prosedür çağrılırken girdi için kullanılır.

Bu değişken aynı zamanda çıktı için de kullanılır ve ayrıştırma sonrası ürüne ait barkodu set edeceğimiz değişkendir.

İlk karma barkod @BARKOD değişkeninde olduğu için bu değişkeni içindeki tüm bilgileri alana kadar değiştirmeden tutmalıyız.

İlk önce karma barkod uzunluğuna göre aşağıdaki bloku yazıyoruz.

if LEN(@BARKOD)= 46

begin

end

Sonrasında rakip numarasını @BARKOD değişkeninden kopyalayıp @TAKIPNO değişkenine set ediyoruz. Tespitimize göre 25. Haneden itibaren 8 hane (seri/lot) takip no bilgisi yer almaktaydı.

Miktar değerini de prosedüre eklediğimizde aşağıdaki gibi bir sorgu yazmış oluruz.

if LEN(@BARKOD)= 46

begin

       SET @TAKIPNO = SUBSTRING(@BARKOD,25,8)

       SET @MIKTAR = SUBSTRING(@BARKOD,33,10)           

end

SKT (Son Kullanma Tarihi) değeri bu barkodda biraz farklı formatta. Yıl değeri iki hane verilmiş ve bunu bizim 4 hane olarak yazmamız gerekli. Bunun için '20'+ karma barkoddan alınan değer yıl bilgisini oluşturacak.

Bununla birlikte gün değeri de verilmemiş. Bu değeri de ayın istediğimiz herhangi bir günü olarak prosedür içinde belirleyeceğiz.

Yıl için '20'+(SUBSTRING(@BARKOD, 45, 2) sorgusu ile yılın ilk iki hanesini biz ekliyoruz. Gün değerini de “01” olarak belirliyoruz ve sorgumuz aşağıdaki gibi oluşuyor.

SET @SKT = '01'+'.'+SUBSTRING(@BARKOD, 43, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 45, 2))

En son olarak Barkod değerini @BARKOD değişkeninden alıp yine @BARKOD değişkenine set ediyoruz.  Tespitlerimizde ilk 24 hanenin ürün barkodu olduğunu belirlemiştik.

if LEN(@BARKOD)= 46

begin

       SET @TAKIPNO = SUBSTRING(@BARKOD,25,8)

       SET @MIKTAR = SUBSTRING(@BARKOD,33,10)

       SET @SKT = '01'+'.'+SUBSTRING(@BARKOD, 43, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 45, 2))

       SET @BARKOD = SUBSTRING(@BARKOD,1,24)           

end

Bu şekilde 46 karakter uzunluğundaki barkodu çözümlemiş olduk. Şimdi ikinci örneğimize geçelim.

İkinci barkodumuz “5075001987650010lot01141021”. Barkodun uzunluğunu select len('5075001987650010lot01141021') ile tespit ediyoruz ve varsa gizli karakterler dahil 27 buluyoruz.  Barkod içine gömülü verileri tespit ediyoruz.

Barkod                 :1-7 (1. karakterden itibaren 7 hane)

Takip Numarası:8-5 (8. Karakterden itibaren 5 hane)

Miktar                  :13-4 (13. Karakterden itibaren 4 karakter)

Skt                         :22-2 ve 24-2 ve 26-2  (22. Karakterden itibaren 2 hane gün bilgisi, 24. Karakterden itibaren 2 hane ay bilgisi, 26. Karakterden itibaren 2 hane de yılın son iki rakamı bilgisi)

Açıklama             :Karma barkod içinde açıklama bulunmuyor.


Buna göre sorgumuz aşağıdaki gibi oluyor.

if LEN(@BARKOD)= 27

begin

SET @TAKIPNO = SUBSTRING(@BARKOD,8,5)

SET @MIKTAR = SUBSTRING(@BARKOD,13,4)

SET @SKT = SUBSTRING(@BARKOD, 22, 2)+'.'+SUBSTRING(@BARKOD, 24, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 26, 2))

SET @BARKOD = SUBSTRING(@BARKOD,1,7)

end

Her iki barkodu çözümleyen prosedürümüz aşağıdaki gibi olacaktır. Sorgular arasında else kullanmamız gerekecektir. Çünkü iki uygun if bloğundan sadece birine girip sadece onda çözümleme yapılmalı. Her iki barkodu aşağıdaki prosedür ile çözümleyebiliriz.

ALTER PROCEDURE [dbo].[spWMSParseBarcode]

@BARKOD nvarchar(60) output,

@MIKTAR float output,

@TAKIPNO nvarchar(50) output,

@SKT nvarchar(50) output,

@ACIKLAMA nvarchar(50) output

AS

       if LEN(@BARKOD)= 46

       begin

              SET @TAKIPNO = SUBSTRING(@BARKOD,25,8)

              SET @MIKTAR = SUBSTRING(@BARKOD,33,10)

              SET @SKT = '01'+'.'+SUBSTRING(@BARKOD, 43, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 45, 2))

              SET @BARKOD = SUBSTRING(@BARKOD,1,24)

             

       end

       else

       if LEN(@BARKOD)= 27

       begin

              SET @TAKIPNO = SUBSTRING(@BARKOD,8,5)

              SET @MIKTAR = SUBSTRING(@BARKOD,13,4)

              SET @SKT = SUBSTRING(@BARKOD, 22, 2)+'.'+SUBSTRING(@BARKOD, 24, 2)+'.'+'20'+(SUBSTRING(@BARKOD, 26, 2))

              SET @BARKOD = SUBSTRING(@BARKOD,1,7)

             

       end

       else

       begin

SET @ACIKLAMA= @BARKOD

SET @TAKIPNO = @TAKIPNO

SET @BARKOD = SUBSTRING(@BARKOD,1,24)

SET @MIKTAR = @MIKTAR

SET @SKT = ''

       end

SELECT @BARKOD BARKOD,@MIKTAR MIKTAR,@TAKIPNO TAKIPNO,@SKT SKT, @ACIKLAMA ACIKLAMA

GO

Prosedürün son satırındaki if komutu olmayan satır ise yukarıdakilerden hiç birisine uymayan her verinin ortak çözümleme sorgusu olarak eklenmiştir. Doğrudan ürün barkodu, seri/lot ve varyant numarası veya ürün kodu okutulduğunda bu değerin ilk 24 hanesini doğrudan @BARKOD olarak geri döndürür.


       else

       begin

SET @ACIKLAMA= @BARKOD

SET @TAKIPNO = @TAKIPNO

SET @BARKOD = SUBSTRING(@BARKOD,1,24)

SET @MIKTAR = @MIKTAR

SET @SKT = ''

       end


Prosedürü veri tabanına yükledikten sonra aşağıdaki sorgularla test edebilir ve çözümleme sonuçlarını görebiliriz.

exec spWMSParseBarcode '000000000BRK0010020030040001619400000000101222','','','',''           

      

exec spWMSParseBarcode '5075001987650010lot01141021','','','',''     


exec spWMSParseBarcode '112233','','','',''    


Test sonrası kontrol edilecek en önemli nokta BARKOD alanında gelen test sonucunun Erpde üründe tanımlı olmasıdır. Bu değer ürünü bulacak olan kısımdır.

Sonuçların doğru olduğundan emin olduktan sonra prosedürü Logo WMS ile kullanabiliriz.