Arif

WFN Üye
Konular
706
Mesajlar
706
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Bilecik
Web Sitesi
Var
Alanı
SEO Uzmanı
1/1
Konu sahibi
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 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çimiDelphi’de alınan yerGerekli işlem
Klavye emülasyonuTEdit, TMemo veya aktif kontrolEnter son ekini yakalayıp metni işlemek
Seri port / COMSeri port bileşeniPortu açmak, gelen tamponu okumak ve mesaj sınırını belirlemek
Klavye modunda form başka bir kontrolü odaklarsa barkod karakterleri yanlış alana yazılabilir. Bu nedenle işlem tamamlandıktan sonra tekrar 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.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic