İş yeri yazılımı için fikirlerinize ihtiyacım var

Arkadaşlar merhaba.

Bir iş yeri yazılımı yapıyorum. Yazılım amacı: Kasadan, webcam tutarak ürünün barkodunu okutmak ve satış işlemini gerçekleştirmek. Ürün ekleme özellikleri vs.'de var.

Takıldığım bir nokta var. Şimdi şöyle: Mesela diyelim ki bir kitap ürünü satacağız. Bu kitap kasaya geldiğinde webcam okuyacak ve program üzerinden satıldı olarak gözükecek. Ama burada bir sorun var. Bildiğiniz üzere ürünlerin üzerindeki barkodlar farklı oluyor. Mesela aynı kitabın barkodu 0000001, bir başka aynı kitabın barkodu 0000002 olabiliyor. Yani aynı ürünlerde farklı barkodlar oluyor.

Takıldığım nokta ise: Satıcı, ürün eklerken sadece 1 ürünün barkodunu okutacak ve diğer aynı fakat barkodu farklı ürünler sistemde gözükmeyecek. Ben, barkodu okutunca, o barkodlu ürüne satıldı işareti koyduracağım, yani o barkodlu ürün artık satılacaklarda gözükmeyecek. Ama mesela aynı kitap 2. kez satılınca, 2. aynı ürünün barkodu sistemde olmadığı için hata verecek.

Umarım demek istediğimi anlamışsınızdır. Alternatif çözüm önerileriniz var mı?

Benim aklıma: Büyük bir textBox eklemek ve tüm barkodları oraya girmek geldi. Ayrıca, kullanacağım modül (opencv), barkodu 2-3 kere okuyup, yazabilir ve 1 barkod sisteme 2-3 kere geçebilir. Bunu engellemek için de, textBox içerisindeki tüm satırları okuyup, daha önce kayıt olan barkodları, kaydedilmek istenilen barkodlarla karşılaştırmak ve aynıysa kaydetmemesini yapabilirim.

Daha iyi fikir önerileriniz var mı?

Kullanacağım GUI frameworku: PyQT5
Barkod okumak için kullanacağım framework: opencv
DB: Sqlite3

İki seçeneğin var, barkod yazıcı ile tüm kitapları kendin barkodlayabilirsin,

barkod printer - Google Alışveriş

İkinci seçeneği, fiyat ve ürün tanımlamalarını farklı barkodları bağlayarak her ikisini veya üçünü aynı ürün başlığı altında toplayabilirsin.

Yani birden fazla barkod, tek ürünü tanımlarsa stokta da sorun çıkmaz.

Örnek çalışan bir sistem.

Multiple Barcode for One Item | SAP Business One Indonesia Tips | STEM SAP Gold Partner (sap-business-one-tips.com)

Programlama sayfası değil, ürün sayfası buradan fikir alabilirsin diye linkini koydum.

1 Beğeni

Hocam peki tablodaki görünümü hakkında fikriniz var mı? Bir tablo olacak ve bu tabloda barkod da gözükecek. Bununla ilgili bir tavsiyeniz var mı? Sonuçta birçok barkod olacak.

Soruyu doğru anladığımdan emin değilim yanlış anlamışsam düzeltirsiniz.

Sonuçta konu veri tabanı sorgusu, hangi veri tabanı kullandığınız farketmez, sql, mysql yada access bile olabilir.

Öncekle biz barkod okutuyoruz, barkod girdimiz.

Bir veri tabanı kullanıyoruz, ve bu barkodu bir ürün ile eşleştiriyoruz. Burada ürün için bir listeniz olmalı ve ürüne göre index leme yaparız.

Yani barkod okuttuğumuzda o ürünle eşleşen barkod sayesinde ürüne bağlı stoğu listeletiriz. Bu ürün stoğundan düşeriz. Hangi barkodun o indexe getirdiğinin pek önemi olmaz.

Tabloda nasıl görünür derken, aynı tablo üzerinde mi tutulmalı iki ayrı tablo çapraz mı bağlanmalı siz karar vermelisiniz.

Aynı tablo üzerinde, aynı ürün iki kere yazılır, karşısına her bir barkod ve stok miktarı yazılır.

Sorgularken ürün üzerinden, sorgulama yapılır stoklar toplanır.

Bu bir yöntem.

Hatta burada ayrı ayrı stoktan düşülerek, aynı üründen olmasına rağmen farklı barkoddan kaçar tane kaldığı da sorgulanabilir.

Bu söylediklerim, veri tabanı tasarımı konuları. Lafla peynir gemisi yürüttüm.

Bir veri tabanı programı seçerseniz, örnekleyebiliriz.

Soruyu yanlış anladığımı varsayıp, ikinci seçenek, hangi barkod listelenecek okutursa diye sorduğunuzu düşünelim, bu durumda tabloda, okuttuğunuz barkod listelencek.

Yani her durumda, bakmanız gereken, konu, veri tabanı tasarımı, indeksleme ve bağlı listeler.

Bir veritabanı seçerseniz, ona özel referans doküman linki verebilirim. Aksi halde biraz afaki kalacak gibi.

Yani bir veri tabanı kitabı okumanızda fayda var. Tembel bir programcıyım kolay kolay kod yazmıyorum, işin tasarımını konuşuyorum genelde burada. Örneklerim bu nedenle havada kalırsa kusura bakmayın.

3 Beğeni

Hocam aklıma bir fikir geldi. Bunu sorgulama için yapıyorum. Şimdi kasa ve satış bölümünde, kişiden barkodu okutmasını isteyeceğim; ona göre satılacaklar tablosuna girecek ve alışverişi tamamlaya basınca, tablodakiler silinecek, ayrıca tabloya eklenen ürünlerden stok düşülecek.

Benim sorum ise, barkodu eşleştirmekti. Şimdi benim aklıma şöyle bir fikir geldi: Kişi ilk başta, satışa başlamadan önce ürün yönetimi kısmından ürünü ekleyecek. Sonra ise büyük bir textBox olacak ve bu textBox’a tüm barkodları, alt alta girecek. Yani veri okurken satır satır okuyacağız. Kasa ve satış bölümünde ise, kişi barkod tarattığı zaman, tüm ürünlerdeki barkodları satır satır okuyacak ve eşleşen ürünü getirecek.

Mesela bir gofret satıyoruz. 10 tane gofret stokta var diyelim. Bu gofretlerin barkodu sırasıyla:

  • 00001
  • 00002
  • 00003
  • 00004
  • 00005
  • 00006
  • 00007
  • 00008
  • 00009
  • 00010

Şeklinde… Kasiyer, barkodu okuttuğu zaman tüm ürünler arasında, büyük textBox’a girilen satır satır barkodlar okunacak ve eşleşen ürün çekilecek. Benim aklıma böyle bir yöntem geldi. Ama bu yöntemi programı yavaşlatacağı ve gereksiz şekilde fazladan kod yazılacağını düşünüyorum. Bu sistem için farklı önerileriniz var mı?

Yazıyı yazarken aklıma bir fikir daha geldi: Her eklenen ürüne bir ID atanacak (örn: 01, 02 vs. vs…). Mesela:

01 = ayniurunbarkod
01 = ayniurunbarkod
01 = ayniurunbarkod

Böylece filtreleme açısını daraltacağız. Nasıl olacak derseniz, öncelikle girilen barkodlar için ayrı bir tablo oluşturacağız ve bu tabloya 2 tane veri ekleyeceğiz. Bu veriler: Urunun NO’su ve barkodu. Mesela 10 tane gofret varsa, 10 tane aynı urun NO verisi olacak ama barkodlar farklı olacak. Sorgulama kısmında ise urunun NO’suyla, kasiyerin okuttuğu barkod karşılaştırılacak. Yani aynı ürünler arasından, kasiyerin okuttuğu ürün aratılacak. Böylece tüm ürünlerden aramaya gerek kalmayacak.

Kafa patlattıysam özür dilerim.

1 Beğeni

Yine çok anladığımı sanmıyorum ama anlatmaya çalışayım.

Öncelikle bir veri tabanı programı kullanmalısın. Bu veri tabanında kilitli tabir edilen bir metodla veri tabanına hem yeni stoktan/depodan malzeme girmek hem de aynı anda satış esnasında stok kontrolünü sağlamalısın.

Arayüz tasarımına çok takılıyorsun Textbox, table, grid, listbox ne istersen kullanbilirsin. Asıl mesele veri tabanı programlamayı kavraman gerekiyor.

Zaten onu kavrarsan, arayüze bu kadar takılmazsın, sorgrular, sonuçlar döndürür ve bunları arayüze yazdırırsın.

Burada özellikle üzerine basa basa, çapraz bağlı listeler, indexler ve benzerlerini telaffuz ettim. Konuya zaman ayırıranz kolayca kavrarsanız.

Aynı şekilde, filtreleme ve karşılaştırma zamanları da programlamanın konusunun dışına çıkacak ve veri tabanının problemi haline gelcektir ki veri tabanı yazılımları zaten bunun üstesinden gelebilecek şekilde tasarlanmıştır.

Bir veri tabanı seçip, o konuda çalışırsanız, şu an kafanıza takılanlar için boşa endişelendiğinizi anlayacaksınız.

Fikir vermesi açısından önüme gelen bir kaç linki veriyorum:

Introduction to sql (wordpress.com)

SQL (Structured Query Language) (hacettepe.edu.tr)

Bunlar veri tabanları hakkında fikir vermesi açısından.

Yani, şu ana kadar sormadım hangi dil diye, hangi dil olursa olsun, seçtiğin veritabanına uygun bir interface yada kütüphanesi vardır, onunla bağlanıp veri tabanına sorgu komutları göndererek rahatlıkla sorunlarını çözersin.

Bu şekilde, hem ağda dağıtık çalışır, hemde veri tabanına bir den fazla kasa birden fazla stok girişi yaptığında oluşacak karmaşanın koordinesine kafa yormak zorunda kalmazsın.

Bunların hepsini veri tabanı kendi çözecek seçenekler içerir.

Filtreleme, indeksleme, sıralama, araya ekleme, aradan çıkarma her şeyi veri tabanı kendi yapar.

Aksi halde kendini, sıralama algorirmaları, dosya yazma, dosya açma kapama bir çok karar ve konrol döngüsü içide kaybolurken bulursun.

Nacizane, bir veri tabanı yazılımı kitabı temin edip okursan fikir sahibi olmak çok kolay olacaktır.

3 Beğeni

Hayir?

Sistemin geri kalaninin bu yanlis uzerine kurulu oldugunu varsayarak devamini okumuyorum.

1 Beğeni