Ürün kataloğu

WooCommerce barkod okuyucu "ürün bulunamadı" diyorsa

Okuyucu bip sesi çıkarıyor ama sepete hiçbir şey düşmüyor. Sorun neredeyse hep bozuk bir cihaz değil, bir alan uyuşmazlığıdır: kod bir yerde saklanır, başka bir yerde aranır. Kodun durabileceği üç alanı, doğru çözümleme sırasını ve okutmanın neden boş döndüğünü anlatıyoruz.

Okuyucu bip sesi çıkarıyor. Sepete hiçbir şey düşmüyor. Daha yavaş bir kez daha okutuyorsunuz, yine bip sesi geliyor, yine hiçbir şey olmuyor. Tetikle ekran arasında bir yerde gayet sağlam bir kod çöpe atılıyor ve ürün bulunamadı mesajı size bunun nedenini neredeyse hiç anlatmıyor.

Bizimki de dahil olmak üzere satış noktası eklentilerinin destek başlıklarında en sık karşılaşılan şikâyetlerden biri budur ve nadiren bozuk bir okuyucudan ya da bozuk bir eklentiden kaynaklanır. Çoğu zaman bir alan uyuşmazlığıdır: kod bir yerde saklanır, başka bir yerde aranır. Aşağıda bir kodun barınabileceği yerleri, bir aramanın bunları hangi sırayla denemesi gerektiğini ve ürün apaçık ortadayken okutmanın neden boş döndüğünü bulacaksınız.

Bip sesi sandığınız anlama gelmiyor#

El okuyucusunun bip sesi çıkarması tek bir anlama gelir: kod çözücü bir sembolü tanıdı ve onu karakterlere çevirdi. Standart bir HID okuyucu bu karakterleri odakta hangi alan varsa oraya yazar, genellikle de sonuna bir satır başı karakteri ekler. Bip sesi optikle ilgilidir, veritabanınızla değil.

Dolayısıyla başarısız bir okutma şu sırayla iki soru doğurur: okuyucu ne yazdı ve yazılım onu nerede aradı. Aşağıdakilerin tamamı bu ikisinden biridir; ister WooCommerce içinde bir kasa çalıştırın, ister aynı katalog üzerinde başka bir yazılım.

WooCommerce’te bir kodun durabileceği birden fazla yer var#

Beş mağaza sahibine barkodun nereye yazıldığını sorun, üç ayrı yanıt alırsınız ve üçü de doğrudur. Birbirinden farklı üç yer var:

  • SKU (_sku). Serbest metin; her ürün veya varyasyon için bir tane, katalog genelinde benzersiz. En baştan beri oradadır ve her araç onu okur.
  • GTIN, UPC, EAN veya ISBN alanı (_global_unique_id). WooCommerce çekirdeği bunu 9.2 sürümünde, 2024 yılında ekledi. Ürün verisi → Envanter sekmesinde doğrudan SKU’nun altında yer alır; basit ürünlerde olduğu gibi varyasyonlarda da bulunur. Üreticinin ticari ürün numarası, yani ambalajın üzerindeki rakamlar için tasarlanmıştır.
  • Bir eklentinin kendi barkod alanı. Çekirdekte GTIN alanı bulunmadığı yıllar boyunca POS, etiket ve stok sayımı eklentileri kendi alanlarını uydurdu. _barcode bunların yaygın olanıdır; bu anahtarı kullanan bir eklentiyle doldurulmuş bir katalogda kodlar SKU’da değil orada durur.

Bu yüzden “barkod alanı” tek bir şey değildir ve üçünden yalnızca birine bakan bir arama, bir diğeri üzerinden doldurulmuş bir katalogda başarısız olur. Arıza budur; gerisi ayrıntıdır.

Mağazalar SKU ile barkodu neden bilerek ayrı tutar#

Forumlarda bulacağınız tavsiye, barkodu SKU’ya kopyalayıp işi bitirmenizdir. İşe yarar ve sessiz sedasız bilgi yok eder.

SKU, ürün için sizin kimliğinizdir: onu siz seçtiniz, bir anlamı vardır (TSH-BLU-M bir insana ürünün ne olduğunu söyler) ve satın alma siparişlerinizde, raf etiketlerinizde görünür. GTIN ise malı üreten kimse ona aittir: bir tedarikçi ürün grubunu yeniden çıkardığında değişebilir, kendi markanızın ürünlerinde ise hiç bulunmayabilir. Sıkıcı düzen doğru olanıdır: SKU’nuzu SKU olarak bırakın, perakende barkodunu GTIN alanına koyun ve ikisini birden okuyan bir kasa kullanın.

Gerçekten işe yarayan çözümleme sırası#

Eklentimiz Retail POS for WooCommerce, okutulan bir kodu sırayla dört şeyi deneyerek ve satılabilir ilk eşleşmede durarak çözümler:

  1. Başka bir eklentiyle hâlihazırda doldurulmuş kataloglar için, barkoda ayrılmış meta alanı (_barcode).
  2. WooCommerce çekirdeğinin GTIN alanı (_global_unique_id).
  3. SKU (_sku).
  4. Son çare olarak WooCommerce’in kendi SKU dizini.

Bu aramanın, sıranın kendisinden daha önemli üç özelliği var. Eşleşme tamdır: kodun baştaki ve sondaki boşlukları kırpılır, ardından kayıtlı değerle kısmen değil bütünüyle eşleşmesi gerekir, çünkü tahmin yürüten bir kasa yanlış ürünü satan bir kasadır. (Karşılaştırma veritabanında yapılır, dolayısıyla veritabanınızın harmanlama ayarına uyar; bu da normalde büyük-küçük harf ayrımını ortadan kaldırır.) Bu üç meta alanı üzerinde yalnızca yayımlanmış ürünler ve varyasyonlar dikkate alınır. Bilmeye değer tek bir boşluk var: son çare olan WooCommerce’in kendi SKU dizini yalnızca çöpe atılmış ürünleri eler, dolayısıyla kodu SKU’sunda duran taslak ya da özel bir ürün yine de çözümlenebilir. Bir de varyasyon, üst ürününe üstün gelir; ikisinin paylaştığı bir kod alt kaydı kasaya yazar, çünkü fiyatı taşıyan kayıt odur. Stok üst üründe değil varyasyon başına yönetiliyorsa, stok adedini taşıyan kayıt da odur.

WordPress yönetim paneli içindeki satış noktasının satış ekranı: sol sütunda imlecin içinde durduğu bir tarama kutusu, bir ürün arama alanı ve sonuç kartlarından oluşan bir ızgara bulunur; sağdaki ödeme sütununda ise sepet yer alır, sepetteki her taranmış satırda ürün adı, varyasyon, birim fiyat ve ürünün kodu görünür, bunların altında müşteri alanları, indirim kutusu, bir sıra hâlinde ödeme yöntemi düğmeleri ile ara toplam, indirim ve toplam bulunur
Her sepet satırı, ürünün kodunu fiyatın yanına yazar: barkod, GTIN ve SKU alanlarından değer taşıyan ilki, ki bu okutmanın eşleştiği alan olmak zorunda değildir.

Aynı çözümleme Etiketler ekranında ve iade terminalinde de çalışır; orijinal fişi olmayan bir iade böyle fiyatlandırılır.

“Bulunamadı” hatasının nedeni olmayan bir şey var: stokta kalmamış olmak. Stoku sıfır olan bir ürün yine de çözümlenir ve bir uyarıyla birlikte sepete düşer, çünkü müşteri ürünü elinde tutmuş orada duruyordur. Sepetin bunun yerine yaptığı şey uyarmak ve stok takibi yapılan bir satırı eldeki stokun üzerine çıkarmayı reddetmektir. İlk adet her zaman girer, dolayısıyla stoku sıfır olan bir ürün yine de kasadan geçirilebilir; satış da stok adedinin eksiye düştüğü uyarısıyla tamamlanır.

Varyasyonlar: kod varyasyonda durur, aramaların çoğu ise yalnızca üst ürüne bakar#

Perakende barkodları beden ve renk başınadır: orta beden mavi bir gömlek ile büyük beden olanı farklı EAN taşır, çünkü bunlar farklı ticari ürünlerdir. WooCommerce bunu doğru modeller; bir varyasyonun kendi SKU ve GTIN alanları vardır. Aramalar yine de yanlış yapar, çünkü ürünleri sorgular ve varyasyonun kendi metasına sahip ayrı bir kayıt olduğunu unuturlar.

Belirti apaçıktır: okuyucu üst ürünü bulur ama hangi beden olduğunu söyleyemez ya da kod varyasyonda dururken hiçbir şey bulamaz. Bizim okutmamız ürünleri ve varyasyonları birlikte sorgular ve varyasyonu tercih eder; bu da stokun doğru bedenden düşmesi demektir — yanlış varyasyon, elle girilen bir satışın ters gitme yollarından biridir. Arama kutusu, varyasyon isabetini üst ürününe geri toplar; dolayısıyla bir varyasyonun kodunu yazdığınızda üst ürün “varyant seçin” kartı olarak görünür. Kartı açtığınızda her varyasyon fiyatı, kalan stoku ve koduyla listelenir.

Dürüstçe söylenmesi gereken bir uç durum: varyasyonlu bir üst ürün satılabilir bir şey değildir, dolayısıyla varyasyonlu bir ürünün üst kaydında saklanan bir kod hiçbir şeyi kasaya yazmaz. Arama kutusuna yazdığınızda üst ürünün varyant seçicisi gelir; işaret budur. Kodu varyasyonlara taşıyın, her beden için bir tane.

Diğer dört neden#

Her kodun sonundaki başıboş karakter#

Okuyucuların çoğu, sona bir satır başı karakteri ekleyecek şekilde ayarlanmış olarak gelir; sıradan bir form alanında çalışmalarını sağlayan da budur. Bazıları sona Tab ekler ve bu, odağı okutma kutusundan çıkarır; bazıları ayrıca başa da bir karakter koyar. Kodun görünüp kaybolduğunu ya da imlecin başka yere sıçradığını görüyorsanız nedeniniz budur. Bizim okutma kutumuz bu işin sonek yarısını karşılar: boşlukları kırpar, Enter ile tetiklenir ve dört ya da daha fazla karakter geldikten sonra akış durunca kendiliğinden de tetiklenir; böylece sonek göndermeyen ya da Tab gönderen bir okuyucu da çalışır. Önek karakteri ayıklanmaz, dolayısıyla başa karakter ekleyecek şekilde ayarlanmış bir el okuyucusunun ayarı cihazın kendisinden değiştirilmelidir.

Baştaki sıfırların yolda bir yerde yenmesi#

Bunun nedeni neredeyse her zaman bir e-tablodur. Kataloğunuzun CSV dosyasını açın, uygulamanın barkod sütununu sayı olarak yorumlamasına izin verin; 012345678905 bir anda 12345678905 olur. Bunu içe aktarırsanız ürünün her okutması tam olarak bir karakter farkla ıskalar. İçe aktarmadan önce sütunu metin olarak biçimlendirin ve bir ürünün kayıtlı kodunu ambalajın üzerindeki rakamlarla karşılaştırın.

EAN-13’ün UPC-A olarak okunması ya da tersi#

12 haneli bir UPC-A ile başında sıfır bulunan 13 haneli bir EAN-13, aynı ticari ürün numarasının iki ayrı yazılışıdır ve okuyucular her iki biçimi de gönderecek şekilde ayarlanabilir. Kataloğunuzda 13 haneli sürüm duruyorsa ve el okuyucusu 12 hane gönderiyorsa, tam eşleşme her üründe başarısız olur. Kataloğunuzun hangi biçimi sakladığına karar verin, sonra ya okuyucuyu yeniden ayarlayın — ayarın adı genellikle “transmit UPC-A as EAN-13” gibi bir şeydir — ya da baştaki sıfırı geri getirin. Aynı tuzak ITF-14 koli kodlarının arkasında da durur: kolinin barkodu, ürünün barkodundan farklı bir numaradır.

Ürün yayımlanmamış#

Taslak, onay bekleyen ve özel ürünler üç barkod alanı aramasının dışında bilerek bırakılır: bir kasa, mağazanın kurulumunu tamamlamadığı bir şeyi satmamalıdır. Bu yüzden bir içe aktarma ürünleri taslak durumunda bıraktıysa, barkod veya GTIN alanında tutulan bir kod okutulduğunda bulunamadı yanıtını alır. SKU’da tutulan bir kod istisnadır: WooCommerce’in kendi SKU dizini duruma göre süzmez, dolayısıyla o kod yine de dönebilir.

SKU ile barkodu hiçbir şeyi yeniden yazmadan eşitlemek#

Kodlarınız SKU’da duruyorsa ve kurulumunuzdaki bir şey onları _barcode içinde istiyorsa, Ayarlar’da bir anahtar var: Ürün kaydedilirken barkodu SKU ile eşitle. Varsayılan olarak açıktır ve bir ürün ya da varyasyon, ürün düzenleyicisinden kaydedildiğinde SKU’yu barkod metasına kopyalar. SKU boşsa hiçbir şey yapmaz ve barkod metasında ne varsa ona dokunmaz.

Kasa eklentisinin stok ve barkod seçeneklerini gösteren ayarlar sayfası; ürün kaydedildiğinde ürünün barkodunu SKU'suyla eşit tutan anahtar, fişteki mağaza adı ve adres alanlarının ve düzenlenebilir ödeme yöntemleri listesinin üzerinde yer alıyor.
Eşitleme anahtarı stok seçeneklerinin yanında durur; ürün kaydedildiğinde çalışır, bu yüzden bir ürün bir sonraki kez kaydedilene kadar hiçbir şeyi değiştirmez.

İnsanları yanıltmış iki sınır var. Eşitleme tek yönlüdür: SKU kazanır ve barkod metasının üzerine yazar, tersi asla olmaz. Bir de yalnızca ürün, ürün düzenleyicisinden kaydedildiğinde çalışır; yani anahtarı açmak mevcut bir kataloğu geriye dönük doldurmaz. Kodlar, siz her ürünü açıp Güncelle’ye bastıkça ürün ürün belirir. Hızlı Düzenle, Toplu Düzenle ve CSV içe aktarıcı, eşitlemenin dinlediği kancayı tetiklemez; dolayısıyla kataloğun tamamını tek tıkla dolduracak bir yol yoktur.

İki alanı bilerek farklı tutuyorsanız bu önemlidir: barkod alanında perakende EAN’ı, SKU’da dahili bir kodu olan bir mağaza anahtarı kapatmalıdır, yoksa bir sonraki kayıt EAN’ın yerine dahili kodu yazar. GTIN alanına eşitleme hiç dokunmaz; perakende kodlarını orada tutmanın bir nedeni de budur. Hangi ayarın hangi alanı etkilediğini belgeler listeler.

Okuduğunuz kodu basın#

“Bulunamadı” sorununun büyük bir kısmı, okutulabilir hiçbir etiketi olmayan ürünlerdir: kendi markanızın malları, dökme ürünler, mağazada yeniden paketlenen her şey. Etiketler ekranı bu kısmı çözer: ürünleri okutarak ya da arayarak bir kuyruğa alın, her birinden kaç kopya basılacağını belirleyin ve yazdırın. Oluşturma sırasında EAN-13 ve EAN-8 otomatik olarak algılanır, algılanmazsa Code 128’e düşülür; etiketin milimetre cinsinden boyutu ve içeriği — mağaza adı, ürün adı, varyant, fiyat, çubuklar, rakamlar — Ayarlar’dan belirlenir. Net basılmış bir etiket, telefon kameranızın bir türlü okuyamadığı bir kod için en ucuz çözümdür.

Sol sütununu bir tarama kutusu, bir arama alanı ve ürün sonuç kartlarının doldurduğu, sağında ise her ürünün bir kopya sayacı taşıdığı bir etiket kuyruğu bulunan barkod etiketi ekranı; kuyruğun altındaki baskı önizlemesinde ürün adını, varyantı, fiyatı, basılı çubukları ve çubukların altındaki kod rakamlarını taşıyan küçük dikdörtgen etiketler görünüyor
Önizleme, kuyruktaki her ürün için yapılandırıldığı düzende birer örnek etiket gösterir; milimetre cinsinden boyut da etiketteki her satır da birer ayardır.

Dürüst sınır şu: eklenti hâlihazırda var olan kodları basar. Onları uydurmaz. SKU’su ve barkodu olmayan bir ürünü kuyruğa alın, kuyruk satırı bunu size söyler — “Barkod yok — ürün ekranından bir tane oluşturun” — ve etiket, adı ve fiyatıyla ama çubuksuz çıkar, çünkü kodlanacak bir şey yoktur. Bu mesaj, ürüne kodu kendinizin vermesi gerektiğini hatırlatır; bu eklenti asla kod üretmez. Yazdırma, tarayıcınızın sıradan yazdırma penceresinden geçer — sürücü yok, ESC/POS entegrasyonu yok — dolayısıyla tarayıcının erişebildiği herhangi bir yazıcı iş görür.

Beş dakikalık bir teşhis: tek ürün, tek okutma, üç alan#

Başarısız olan tek bir ürün seçin. Bu çözülmeden genellemeye gitmeyin.

  1. Düz bir metin alanına okutun — satış ekranındaki arama kutusuna ya da herhangi bir metin düzenleyiciye. Gelene bakın: uzunluk, baştaki sıfırlar, iki uçtaki başıboş karakterler. Bu, okuyucu sorununu veri sorunundan ayırır.
  2. Tam olarak o dizgeyi ürün arama kutusuna yazın. Arama; SKU, barkod metası ve GTIN alanı üzerinde kısmi eşleşme yapar, okutma ise tam eşleşme arar. Arama ürünü buluyor ama okutma bulamıyorsa kod kayıtlıdır ama bütünüyle eşleşmiyordur: boşluk, baştaki bir sıfır ya da varyasyonlarında değil varyasyonlu üst üründe duran bir kod. Arama da hiçbir şey bulamıyorsa kod bu üç alanın hiçbirinde değildir ya da ürün yayımlanmamıştır, ki bu onu aramadan da gizler.
  3. Ürünü açın ve Envanter sekmesine bakın. Varyasyonlu bir üründe yalnızca üst ürünü değil, varyasyonu açın. Kodu ait olduğu alana yapıştırın — üreticinin numarası için GTIN, kendi kodunuz için SKU — kaydedin ve satış ekranından yeniden okutun.

Her adım, sorunsuz geçtiğinde bile size bir şey söyler; sırayla yapmaya değmesinin nedeni budur. Alan adlarının tam listesi eklenti belgelerinde yer alır.

Sipariş numarasını ve toplamları bir Print Receipt düğmesiyle birlikte gösteren Sale completed penceresi; altında ürün başına bir kart içeren kalan stok paneli ve her varyasyon için bu satıştan sonra kaç adet kaldığını gösteren küçük bir etiket.
Doğru çözümlenmiş bir okutmanın sonu: doğru varyant satıldı ve kasiyer oradan ayrılmadan önce o ürünün her bedeni için kalan stok gösterildi.

Bunun çözmediği şeyler#

Birkaç şey, bir alan düzeltmesinin erişebileceği yerin dışında kalır.

  • Kod hiçbir zaman üretilmez ve bulanık eşleşme yoktur. Bir okutma ya tam eşleşir ya da hiç eşleşmez: bu, kasada bir güvenlik özelliğidir, bir eksiklik değil.
  • Ürün düzenleyicisine kendimize ait bir barkod alanı eklemiyoruz. Kodlar WooCommerce’in kendi SKU ve GTIN alanlarına girer; eklenti ayrıca diğer eklentilerin kullandığı _barcode anahtarını okur — eşitleme anahtarı açıkken yazar da — ama önünüze bir düzenleme kutusu koymaz.
  • Kamera, el okuyucusu değildir. Kodlar çözümleniyor ama telefon kamerası solmuş bir etiketle boğuşuyorsa, bu bir cihaz sorunudur.
  • Buradaki hiçbir şey çevrimdışı çalışmaz. Her okutma, kendi sitenize giden bir istektir. Bağlantı koparsa aramalar durur; ücretsiz sürümde de Pro’da da.

WooCommerce içinde bir kasa çalıştırıp çalıştırmayacağınıza hâlâ karar veremediyseniz, çekirdeğin kendi POS kipinin neleri kapsadığını anlatan genel bakış yazısı başlanacak yerdir.

Sıkça sorulan sorular#

WooCommerce’teki GTIN, UPC, EAN veya ISBN alanı nedir ve ne zaman eklendi?#

Bir ürünün küresel ticari ürün numarası için çekirdeğin ayırdığı alandır; WooCommerce 9.2 ile 2024 yılında eklendi ve _global_unique_id olarak saklanır. Ürün verisi → Envanter sekmesinde doğrudan SKU’nun altında, varyasyonlarda da yer alır. Gerçek bir ticari numara için tasarlanmıştır ve WooCommerce içine ne konabileceğini denetler: ayarlayıcı yalnızca rakamları, tireleri ve sondaki bir X’i (ISBN-10 kontrol hanesi) tutar, geri kalan her şeyi sessizce atar, bozuk bir değeri reddeder ve sonucun benzersiz olduğunu kontrol eder. Kendinize ait dahili alfanümerik bir kod SKU’ya aittir; kendi uydurduğunuz dahili alfanümerik bir kod da en doğal olarak SKU’da durur.

Okuyucum neden üst ürünü buluyor da varyasyonu bulamıyor?#

Çünkü kod bir kayıtta saklanıyor, arama ise diğerini sorguluyor. Varyasyonların kendi SKU ve GTIN alanları vardır ve yalnızca ürünler için yazılmış bir arama onları hiçbir zaman görmez. Kodun varyasyonun kendisinde olduğunu doğrulayın; üst ürünle alt ürün aynı kodu taşıdığında bizimki varyasyonu tercih eder.

WooCommerce varsayılan olarak GTIN alanında arama yapar mı?#

Her yerde değil. Mağaza vitrininizin ürün araması bu alana bakmaz ve alan var olmadan önce yazılmış hiçbir araç ondan haberdar değildir. GTIN’lerle özenle doldurulmuş bir kataloğun yine de bulunamadı yanıtı vermesinin nedeni budur. Bizim okutmamız bu alanı ikinci sırada, barkoda ayrılmış metadan sonra denetler.

Okuyucum her kodun sonuna başıboş bir karakter ekliyor — bu nedir?#

Bir sonektir ve WordPress’te değil, okuyucunun kendisinde bir ayardır. El okuyucularının çoğu satır başı karakteri gönderir, bu da alanı gönderir; bazıları Tab gönderir, bu ise onun yerine odağı taşır ve tıpatıp bir arıza gibi görünür. Okuyucunun kılavuzunda, bunu değiştirmek için okutacağınız bir yapılandırma barkodu bulunur. Yine de bizim okutma kutumuz buna bağımlı değildir: boşlukları kırpar, Enter ile tetiklenir ve dört ya da daha fazla karakter geldikten sonra akış durunca kendiliğinden tetiklenir.

SKU’su olmayan bir ürün için barkod oluşturabilir miyim?#

Gerçek bir barkod oluşturamazsınız ve hiçbir eklenti dürüstçe aksini iddia edemez: GTIN’ler GS1 üzerinden verilir ve uydurma, on üç haneli bir numara başkasının ürünüyle çakışma riski taşır. Ürüne SKU’sunda dahili bir kod verin ve bunu Code 128 etiketi olarak basın.

Doğru satır sepete güvenilir biçimde düşmeye başladıktan sonra doğru yapılmaya değer bir sonraki şey, ardından stok adedine ne olduğudur — elle girilen WooCommerce siparişleri rafla ekranı neden anlaşmazlığa düşürür yazısının konusu budur. Satmak için değil saymak için okutuyorsanız, stok sayımı için telefonla barkod okutma üzerine önceki yazımız bu işi kapsar; kasada telefonla okutma ise diğerini. Çözümleme sırasını uygulamada görmek isterseniz, Retail POS WordPress.org üzerinde ücretsizdir ve okuduğu her alanı belgeler tek tek sayar.

Okumaya devam

İlgili yazılar