- Konu sahibi
- #1
Barkod okuyucuların büyük bölümü bilgisayara klavye gibi veri gönderir. Bu durumda Delphi’de özel bir sürücü veya barkod kütüphanesi gerekmez; bir
Barkod okuyucuyu Not Defteri gibi basit bir metin alanında deneyin. Barkodu okuttuğunuzda karakterler yazılıyor ve imleç yeni satıra geçiyorsa okuyucu klavye emülasyonu, yani keyboard wedge modunda çalışıyordur. ERP uygulamalarında en pratik yöntem budur.
Okuyucu bilgisayarda sanal COM port oluşturuyor ve veri klavyeye yazılmıyorsa seri haberleşme kullanıyordur. Bu durumda yalnızca
Aşağıdaki örnek klavye emülasyonu modundaki okuyucular içindir. Okuyucunun okuma sonunda
Formunuza
Okuyucu barkodu gönderdiğinde karakterler doğrudan
Barkodları sayısal değişkene çevirmeyin. Örneğin
Bu örnekte barkodun okunması ile ürünün bulunması birbirinden ayrıdır. Okuyucudan metin gelmesi yalnızca cihazın veriyi aktardığını kanıtlar; barkodun ürün tablosunda kayıtlı olduğunu veya ürünün stokta bulunduğunu kanıtlamaz. Sorgu boş dönerse önce barkodun başındaki sıfırları, görünmeyen boşlukları ve veritabanındaki saklama biçimini kontrol edin. Barkod doğru olduğu hâlde kayıt yoksa ürün kartına aynı metin değeriyle kayıt eklenmelidir.
İki bağlantı biçimi arasındaki temel fark, verinin Delphi’ye nereden geldiğidir:
Klavye modunda form başka bir kontrolü odaklarsa barkod karakterleri yanlış alana yazılabilir. Bu nedenle işlem tamamlandıktan sonra tekrar
Önce Not Defteri testinde karakterlerin görünüp görünmediğini kontrol edin. Orada da veri yoksa sorun Delphi kodunda değil, USB bağlantısında, okuyucunun çalışma modunda veya cihaz yapılandırmasındadır. Not Defteri’nde veri görünüyor fakat Delphi’de işlem başlamıyorsa okuyucunun
Barkod alınıyor ancak ürün bulunamıyorsa alınan metni geçici olarak göstererek başta veya sonda boşluk, satır sonu ya da beklenmeyen karakter olup olmadığını inceleyin. Tanılama tamamlandıktan sonra bu geçici gösterimleri kaldırın; özellikle üretim ortamında barkod veya ürün bilgilerini gereksiz yere ekrana ve günlük dosyalarına yazdırmayın.
TEdit bileşenini odakta tutup okuyucunun gönderdiği karakterleri alır, genellikle sonuna eklenen Enter tuşunda barkodu işler ve ardından veritabanında arama yaparsınız. Okuyucu seri port üzerinden çalışıyorsa yöntem farklıdır; bu durumda seri port bileşeniyle gelen metni okumanız gerekir.Önce okuyucunun çalışma biçimini belirleyin
Barkod okuyucuyu Not Defteri gibi basit bir metin alanında deneyin. Barkodu okuttuğunuzda karakterler yazılıyor ve imleç yeni satıra geçiyorsa okuyucu klavye emülasyonu, yani keyboard wedge modunda çalışıyordur. ERP uygulamalarında en pratik yöntem budur.
Okuyucu bilgisayarda sanal COM port oluşturuyor ve veri klavyeye yazılmıyorsa seri haberleşme kullanıyordur. Bu durumda yalnızca
TEdit.OnKeyPress olayını kullanmak veri almaz; okuyucunun baud hızı, veri bitleri, dur bitleri ve kullandığı seri port bilgileriyle uygun bir seri port bileşeni yapılandırılmalıdır.Aşağıdaki örnek klavye emülasyonu modundaki okuyucular içindir. Okuyucunun okuma sonunda
Enter göndermesi gerekir. Bu ayar çoğu cihazın yapılandırma barkodlarıyla veya üretici yazılımıyla değiştirilebilir.TEdit üzerinden barkodu alma
Formunuza
TEdit ekleyin ve adını edtBarcode yapın. Bu alanın başlangıçta odaklanmasını sağlayın. Ardından OnKeyPress olayına aşağıdaki kodu bağlayın:
Kod:
procedure TForm1.edtBarcodeKeyPress(Sender: TObject; var Key: Char);
var
Barkod: string;
begin
if Key = #13 then
begin
Key := #0; // Enter'ın formda başka işlem yapmasını engeller
Barkod := Trim(edtBarcode.Text);
if Barkod = '' then
Exit;
ProcessBarcode(Barkod);
edtBarcode.Clear;
end;
end;
procedure TForm1.ProcessBarcode(const Barkod: string);
begin
// Burada barkoda göre ürün araması yapılabilir.
ShowMessage('Okunan barkod: ' + Barkod);
end;
Okuyucu barkodu gönderdiğinde karakterler doğrudan
edtBarcode.Text içine yazılır. Cihaz sonuna Enter ekliyorsa olay yordamı barkodu ProcessBarcode yordamına gönderir, ardından alanı temizler. Gerçek uygulamada ShowMessage yerine ürün tablosunda sorgu çalıştırabilir veya satış sepetine ürün ekleyebilirsiniz.Barkodları sayısal değişkene çevirmeyin. Örneğin
0012345678905 değeri bir ürün koduysa başındaki sıfırlar anlamlı olabilir. Bu nedenle veritabanındaki alanı metin olarak tutun ve sorguyu parametreyle yapın:
Kod:
procedure TForm1.ProcessBarcode(const Barkod: string);
var
UrunAdi: string;
begin
FDQuery1.Close;
FDQuery1.SQL.Text :=
'select urun_adi from urunler where barkod = :barkod';
FDQuery1.ParamByName('barkod').AsString := Barkod;
FDQuery1.Open;
if FDQuery1.IsEmpty then
ShowMessage('Bu barkoda ait ürün bulunamadı.')
else
begin
UrunAdi := FDQuery1.FieldByName('urun_adi').AsString;
ShowMessage('Ürün: ' + UrunAdi);
end;
end;
Bu örnekte barkodun okunması ile ürünün bulunması birbirinden ayrıdır. Okuyucudan metin gelmesi yalnızca cihazın veriyi aktardığını kanıtlar; barkodun ürün tablosunda kayıtlı olduğunu veya ürünün stokta bulunduğunu kanıtlamaz. Sorgu boş dönerse önce barkodun başındaki sıfırları, görünmeyen boşlukları ve veritabanındaki saklama biçimini kontrol edin. Barkod doğru olduğu hâlde kayıt yoksa ürün kartına aynı metin değeriyle kayıt eklenmelidir.
Klavye ve seri port yöntemini ayırın
İki bağlantı biçimi arasındaki temel fark, verinin Delphi’ye nereden geldiğidir:
| Çalışma biçimi | Delphi’de alınan yer | Gerekli işlem |
|---|---|---|
| Klavye emülasyonu | TEdit, TMemo veya aktif kontrol | Enter son ekini yakalayıp metni işlemek |
| Seri port / COM | Seri port bileşeni | Portu açmak, gelen tamponu okumak ve mesaj sınırını belirlemek |
edtBarcode.SetFocus çağırmak veya formun uygun bir yerinde odağı bu alanda tutmak gerekir. Kullanıcı aynı alana elle yazabiliyorsa, barkod okuyucudan gelen veriyi ayırmak için cihazın gönderme süresi, başlangıç/son ek karakterleri ya da minimum karakter uzunluğu kullanılabilir; ancak en güvenilir ayrım, okuyucunun sona Enter göndermesidir.Okuma gerçekleşmiyorsa neyi kontrol etmelisiniz?
Önce Not Defteri testinde karakterlerin görünüp görünmediğini kontrol edin. Orada da veri yoksa sorun Delphi kodunda değil, USB bağlantısında, okuyucunun çalışma modunda veya cihaz yapılandırmasındadır. Not Defteri’nde veri görünüyor fakat Delphi’de işlem başlamıyorsa okuyucunun
Enter son eki göndermediğini, edtBarcode kontrolünün odakta olmadığını veya olay yordamının doğru kontrole bağlanmadığını kontrol edin.Barkod alınıyor ancak ürün bulunamıyorsa alınan metni geçici olarak göstererek başta veya sonda boşluk, satır sonu ya da beklenmeyen karakter olup olmadığını inceleyin. Tanılama tamamlandıktan sonra bu geçici gösterimleri kaldırın; özellikle üretim ortamında barkod veya ürün bilgilerini gereksiz yere ekrana ve günlük dosyalarına yazdırmayın.