Picture a small distributor receiving a pallet of forty different products. One person reads each label aloud, another types the code into the system, and every so often a digit goes wrong. Nobody notices until a customer receives the wrong item, or until the monthly count shows stock that does not exist.
The scanner is not the interesting part of fixing this. The interesting part is deciding what exactly gets scanned, what the system does with it, and what happens to the items that have no code at all. Those decisions are what separate a stock system that people trust from one they quietly work around.
Barcode, QR code, 1D, 2D: the plain version
A 1D barcode is the familiar pattern of vertical lines. GS1, the organisation behind most product barcodes, describes 1D codes as linear codes commonly found on products for identification. A 2D code, such as a QR code, is a grid of squares that can store more than letters and numbers.
For a stock system the practical difference is how much the code can say. A simple product barcode carries a product number. A 2D code in the GS1 format can carry the product number plus things like the batch or lot number, the expiry date and a serial number. GS1 notes that QR codes are readable by ordinary smartphones, while some other 2D formats, such as Data Matrix, are not read by every phone without a separate app. GS1 also points out that retail checkouts may not read 2D codes yet, so products sold at a store can still need a 1D barcode for now.
So the honest answer to "barcode or QR?" is: it depends on what you need the code to carry. If you only need to know which product it is, a plain barcode is enough. If you need batch, expiry or serial number at the moment of scanning, you want a code that can hold them.
What the number actually means
The number printed under a product barcode is called a GTIN. GS1 describes it as the number you see under the barcode of a product, and it identifies the product, not a particular box on your shelf. GS1 also says a new GTIN should be assigned for each product and each variation of the product. A red shirt and a blue shirt get different numbers.
Two consequences matter to you. First, the number tells your system which product it is, but not which delivery it came from. If two deliveries of the same product have different expiry dates, a plain product barcode cannot tell them apart. Second, the number belongs to the company that licensed it. GS1 states that only the company that holds a prefix is authorised to use it, and says never to alter the numbers below a barcode or add or delete digits. In practice: never invent product numbers that look like real ones.
Scanners: choose by where the work happens
Scanners come in a few families: a handheld scanner connected to a computer, a rugged handheld that is itself a small computer, and the camera of a phone.
At a counter, a simple handheld is usually enough. In a warehouse where people walk the aisles, the scanner needs to work away from a desk, and the system needs to answer quickly. If the code is a 2D code, check that the scanner can read it; do not assume that a scanner that reads product barcodes also reads every 2D format. Test with your own labels, on your own shelves, in your real lighting, before you buy twenty of them.
Items that have no barcode
Every business has them: things you make, repack or buy loose. If you leave them out of the scanning process, they become the exception where errors creep back in.
The usual answer is that you create your own label. The system generates an internal code for the item, prints a label, and from then on that item is scanned like any other. Two rules help. Make internal codes clearly different from supplier barcodes, so the two can never be confused. And let the system hold the link between the two: your internal code, the supplier's barcode if there is one, and the product it refers to. The same product can arrive with different supplier barcodes over the years, and your own code is the one that stays stable.
The labelling process is the real project
Scanning projects often disappoint because of labels, not scanners. Decide who prints them, when (on receiving, before putting away), on what material, and what happens when a label is damaged or missing. A good system makes the second print easy, and records which label belongs to which item so that a reprint does not create a duplicate.
Scanning at receiving should add stock. Scanning at dispatch should remove it. Scanning the wrong item should produce a clear message, not a silent mistake. This is where a custom system earns its keep: the scan flow can follow the way your team actually works, instead of the way a generic product assumes.
A practical first step
Take twenty of your real products and sort them: which have a barcode, which have a damaged or unreadable one, which have none, and which differ by batch or expiry. That one page tells you whether a basic barcode setup is enough or whether you need codes that carry more. Then walk one product from the supplier's door to the customer's, and mark every point where someone types a code by hand. Those are the places to scan first.