OdooWiki OCA HUB
Extra Tools License: AGPL-3

This module provides a barcode scanning interface for stock operations: receipts, deliveries, internal transfers, relocations and inventory adjustments.

It is designed for keyboard-wedge scanners (USB/Bluetooth) and works on desktop and mobile browsers, without requiring the Odoo Enterprise barcode application.

Main features:

  • A scan screen for pickings and operation types, in free or guided mode (the screen proposes one pending move at a time and validates what the operator scans).
  • A scan screen for inventory adjustments writing counted quantities on stock quants.
  • Recognition of product, product packaging, lot/serial, package and location barcodes.
  • A product information dialog with the on hand, incoming, outgoing and forecasted quantities and the stock by location, also used to pick the source or destination location among the ones with stock.
  • Barcode option groups: a data-driven configuration of the screen behavior per operation type (fields to scan, required, pre-filled, forced, cleaned after each read, steps, backorder handling, putaway handling, etc.).
  • A Barcodes main menu with configurable, printable barcode actions (scan an action barcode to open it).
  • A base abstract wizard (wiz.stock.barcodes.read) that other modules extend (GS1, batch picking, ...).

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Adds a barcode scanning screen to Odoo stock operations (receipts, deliveries, internal transfers, relocations and inventory counts) for USB/Bluetooth scanners, without needing the Enterprise barcode app.

This module lets warehouse staff work with a keyboard-wedge barcode scanner directly in Odoo. From a transfer, an operation type or an inventory adjustment, a scan screen opens where reading a barcode fills in the product, lot/serial, package, packaging or location.

  • Scan screens are available for pickings (stock.picking) and operation types (stock.picking.type), and a separate screen handles inventory counts on stock.quant.
  • Each operation type can be linked to a barcode option group that controls the behaviour: guided mode (one pending move at a time), manual entry, manual confirmation, showing pending moves, auto lot selection, creating lots or packagings that do not exist yet, allowing negative stock, accumulating repeated readings, and more.
  • A product information dialog shows On Hand, Incoming, Outgoing and Forecasted quantities plus stock by location, and lets the operator pick the source or destination location.
  • Barcode actions (stock.barcodes.action) can be configured with a barcode, shortcut key, icon and target window; they can be printed as Code128 labels.
  • Backorder behaviour can be set per move (barcode_backorder_action), and detailed operation lines get a scan state (pending/done/done forced).
  • Validation from the scan screen can automatically put detailed operations in a package and sends bus notifications to refresh the screen.

Menus it adds

Barcode actionsBarcodesBarcode options
Models and fields (19)
  • stock.move · extends an existing modelbarcode_backorder_action (Backorder action)
  • stock.quant · new model
  • stock.picking · extends an existing model
  • stock.move.line · extends an existing modelbarcode_scan_state (Scan State)
  • stock.picking.type · extends an existing modelbarcode_option_group_id, new_picking_barcode_option_group_id
  • stock.barcodes.action · new modelname, active, barcode, context, sequence, icon_class, key_shortcut, barcode_image (Barcode image), count_elements, action_window_id (Action window), key_char_shortcut
  • stock.barcodes.option · new modelname, step, forced, message, to_scan, required, sequence, field_name, filled_default, option_group_id, clean_after_done
  • wiz.stock.barcodes.read · new modelstep, lot_id, res_id, barcode, message, auto_lot (Get lots automatically), lot_name (Lot/Serial Number Name), owner_id, action_ids, create_lot (Allow create lot), package_id, product_id, show_owner, show_stock, location_id, product_qty, display_menu, manual_entry (Manual), message_step, message_type, packaging_id, res_model_id, guided_lot_id, is_manual_qty, packaging_qty, product_uom_id, show_form_scan, confirmed_moves (Confirmed moves), option_group_id, location_dest_id (Location dest.)
  • wiz.stock.barcodes.new.lot · new modellot_name (Lot name), product_id
  • stock.barcodes.option.group · new modelcode, name, auto_lot (Get lots automatically), create_lot (Create lots if not match), option_ids, show_owner, show_stock, manual_entry (Manual entry), is_manual_qty, show_form_scan, confirmed_moves (Confirmed moves), auto_put_in_pack (Auto put in pack), is_manual_confirm, display_read_quant (Read items on inventory mode), keep_screen_values, show_pending_moves (Show pending moves), barcode_guided_mode (Mode), allow_negative_quant, display_notification (Display Odoo notifications), fill_fields_from_lot, ignore_filled_fields (Ignore filled fields), manual_entry_on_edit (Manual entry on edit), no_increase_qty_done (Replace quantity on each reading), source_pending_moves, ignore_quant_location, location_field_to_sort, accumulate_read_quantity (Accumulate repeated readings), manual_entry_field_focus, show_detailed_operations, show_fixed_location_dest (Show fixed dest. location)
  • stock.backorder.confirmation · extends an existing model
  • wiz.stock.barcodes.read.todo · new modelname, state (Scan State), lot_id, uom_id, res_ids, line_ids, qty_done (Done), package_id, partner_id (Partner), product_id, location_id, picking_code (Type of Operation), res_model_id, is_extra_line, location_name, picking_state, qty_done_rest, position_index, stock_move_ids, wiz_barcode_id, product_uom_qty (Demand), location_dest_id, result_package_id, location_dest_name (Destination Name), show_location_dest, package_product_qty, product_qty_reserved (Reserved), is_stock_move_line_origin
  • barcodes.barcode_events_mixin · extends an existing model
  • wiz.stock.barcodes.product.info · new modelres_id, line_ids, res_model, product_id, incoming_qty (Incoming), outgoing_qty (Outgoing), qty_available (On Hand), location_field, product_uom_id, show_product_info, virtual_available (Forecasted)
  • wiz.stock.barcodes.read.picking · new modelcompany_id, partner_id, picking_id (Picking), picking_ids (Pickings), partner_name, picking_mode, picking_note, todo_line_id, move_line_ids, picking_state, qty_available, todo_line_ids (To Do Lines), forced_todo_key, pending_move_ids, picking_type_code, enable_add_product, keep_screen_values, picking_location_id, picking_product_qty (Picking quantities), todo_line_display_ids, total_product_uom_qty, total_product_qty_done, todo_line_is_extra_line, picking_location_dest_id, selected_pending_move_id, show_detailed_operations
  • wiz.stock.barcodes.new.packaging · new modelname, barcode, product_id
  • wiz.stock.barcodes.read.inventory · new modelproduct_id, display_read_quant (Read items), inventory_quant_ids, inventory_product_qty (Inventory quantities), count_inventory_quants, edit_inventory_quant_id
  • wiz.stock.barcodes.product.info.location · new modelwiz_id, quantity, sequence, location_id, product_uom_id
  • report.stock_barcodes.report_barcode_actions · new model

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 6 confirmed, 3 with no information of 9 versions.

Sources · Odoo 13.0

Confirmed on 2026-11-03 in branch 13.0 of OCA/stock-logistics-barcode.

terminal Installation and usage

OCA documentation · Odoo 18.0

Barcodes on master data

The interface recognizes four kinds of barcodes. Assign them first:

Warehouse locations

  • You need the permission Manage Multiple Stock Locations to see the menu.
  • Go to Inventory > Configuration > Locations.
  • Select the location and fill in the Barcode field.

Product packagings

  • You need the permission Manage Product Packaging to see the menu.
  • Go to Inventory > Configuration > Product Packagings.
  • Create or select a packaging and fill in the Barcode field. Scanning a packaging selects its product and proposes the packaging quantity.

Products

  • Go to Inventory > Products > Products.
  • Fill in the Barcode field of each product.

Lots / serial numbers

The lot name acts as its barcode, so no extra configuration is needed (requires Lots & Serial Numbers enabled).

Packages are matched by their name, so scanning a package label selects the package content (requires Packages enabled).

Barcode option groups

Go to Inventory > Configuration > Barcodes > Barcode Option Groups to define how the scan screen behaves. The first task of an implementation is to analyze with the customer the flow of each operation (what is labelled, what the operator reads and in which order, whether readings are confirmed one by one) and adjust the options below to it. The module ships six example groups: Picking IN, Picking OUT, Picking Internal, Relocation, Inventory and a generic Operation fallback. The Inventory group is always the one used by the inventory scan screen.

Steps to scan

GS1-128 labels (stock_barcodes_gs1) are decoded as a whole: the product, lot and quantity they carry are set regardless of the steps.

The Steps to scan list defines, per field of the screen (location, product, packaging, lot, package, destination, destination package, quantity, owner, ...):

  • Step: order in which the fields are asked. The current step is the step of the first required field still empty, and only the fields to scan of that step are matched against a barcode.
  • To scan: the field can be filled by reading a barcode.
  • Required: a reading is not processed while the field is empty.
  • Filled default: the field is filled from the pending move (guided mode) or from the picking or operation type when the screen opens.
  • Forced (guided mode): a value different from the pending move is rejected (Wrong product, Wrong lot, Wrong location).
  • Clean after done: the field is emptied after each processed reading.

A field that is required but not scannable in its step can only be filled by default, from the stock of a scanned lot or package, or by hand in manual entry.

Screen and confirmation

  • Mode: Guided proposes one pending move at a time; empty means free mode, where barcodes are read in any order.
  • Manual entry: open the screen with editable fields; Manual entry on edit switches to it when a pending move is edited with the pencil; Manual entry field focus is the field focused when switching.
  • Is manual confirm: scans only fill the screen and the operator confirms each reading. Otherwise a reading is processed as soon as the required fields are filled.
  • Is manual qty: the operator always types the quantity; scans do not set it.
  • Ignore filled fields: a barcode skips the required fields that already have a value, e.g. so that a second location barcode sets the destination.
  • Keep screen values: keep the values of the screen until the pending move is completed.
  • Show form scan: keep the scan fields always visible; otherwise they are only shown in manual entry.
  • Show stock and Show owner: show the quantity available in the location and the owner field on the screen.
  • Display Odoo notifications: also notify when a reading is missing a required field.

Pending moves

  • Show pending moves: none, only pending or all (pending and done), built from the operations or the detailed operations (Source pending moves).
  • Group key for todo records: expression grouping the pending moves, e.g. object.picking_id,object.product_id.
  • Location field to sort: sort by source or destination location (X, Y, Z position and name). By default the destination is used for receipts and internal transfers and the source for the rest.
  • Show detailed operations: show the detailed operations already read on the screen.
  • Confirmed moves: also work on moves without reservation.

Quantities

  • Replace quantity on each reading: a confirmed reading replaces the quantity already recorded (done quantity of the detailed operation, counted quantity of the inventory) instead of being added to it. Editing a counted inventory line from the list always replaces it.
  • Accumulate repeated readings: with manual confirmation, reading the same product, lot or packaging again before confirming adds one unit (or packaging) to the quantity to confirm. Combined with the previous option, units can be counted one by one on the screen and the result replaces the counted quantity.
  • Allow not demanded product: accept products outside the picking demand, adding a move for them.
  • Allow negative quant: accept quantities over the stock available in the location, and lots without stock.

Lots, packages and locations

  • Fill fields from lot: reading a lot or product fills product, lot, package, owner and location from its stock (not on receipts).
  • Ignore quant location: when filling from stock, keep the location of the screen.
  • Get lots automatically (pickings): propose the reserved lot, or the first one by removal strategy (not on receipts).
  • Create lots if not match: accept new lot names; the lot is created with the reading in inventories and on validation in transfers.
  • Auto put in pack: on validation of a picking of an operation type using the group, put its lines in a new package if none has one.
  • Use location dest. putaway: when the destination is required and empty, compute it from the putaway strategy.
  • Show fixed dest. location: show on each pending move the destination already planned by a fixed putaway, and make scans reuse that move line (see Usage).

Other

  • Search picking from product: when the screen is opened from an operation type, reading a product opens the first or last ready picking containing it.
  • Read items on inventory mode: open the inventory screen listing the items already counted instead of the pending ones.
  • Code: some codes change the behavior. IN does not take the source location from the stock of a scanned lot or package, OUT does not propose its quantity in stock, and REL accepts quantities over the demand without asking.

Operation types

On each operation type (Inventory > Configuration > Operation Types) you can select:

  • Barcode option group: used when scanning the operation type or its pickings.
  • New picking barcode option group: used when creating an unplanned picking from the barcode interface (New button).

The Barcodes tiles and the scanner button of the Inventory > Overview cards only list operation types with a barcode option group. The Scan barcodes button of a transfer uses the generic Operation group when its operation type has none.

Barcode actions

Inventory > Configuration > Barcodes > Barcode Actions define the tiles shown in the Barcodes main menu. Each action can have its own barcode: scanning it from the main menu opens the action directly.

Select actions and press Print barcodes to generate a PDF with their Code128 barcodes, e.g. for a laminated menu sheet.

System parameters

The system parameter stock_barcodes.limit_product_qty (default

  • rejects absurd quantities caused by scanning a barcode into a

quantity input.

The barcode scan screens recognize, in both free and guided mode:

  • Warehouse locations (barcode field).
  • Product packagings (barcode field).
  • Products (barcode field).
  • Lots / serial numbers (the barcode is the lot name).
  • Packages (matched by name).

A bell sound confirms a successful scan and an error sound signals a rejected one. Status messages under the barcode field explain what the screen is waiting for and why a scan was rejected. The Manual button toggles manual entry to type values without a scanner.

Barcode interface for picking operations

You can open the scan screen from three places:

  • Barcodes main menu (app Barcodes): select an operation tile, then pick one of the ready transfers from the list.
  • An operation type card in Inventory > Overview (scanner button): scan products for any ready picking of that type. With Search picking from product, reading a product opens a ready picking that contains it.
  • A specific transfer (Scan barcodes button in Inventory > Transfers): the picking is locked and every scan applies to it.

Free mode

Scan in any order; the screen reacts to the kind of barcode read:

  • Product: adds 1 unit (or waits for a lot if the product is tracked). The source location is resolved automatically from the pending reserved lines.
  • Packaging: selects the product and adds the packaging quantity.
  • Lot: scan the product first when several lots share the same name. When fill fields from lot is active, scanning a lot fills product, package, owner and location from the available stock.
  • Package: fills all fields from the package content.
  • Location: sets the source (or destination, per configuration) for the following scans.

Quantities beyond the picking demand or beyond available stock are not written silently: the screen asks for confirmation (force done) or rejects the scan, depending on the option group.

Product information and stock by location

Once a product is read, the information button next to it opens a dialog with the on hand, incoming, outgoing and forecasted quantities of the product and its stock in each location. Deliveries and internal transfers list first the locations the removal strategy takes stock from; receptions list them in reverse order. Tapping a location fills the source location, or the destination location on receptions.

The buttons next to the source and destination location fields open the same list without the product quantities, to pick a location quickly: the source one in removal strategy order, the destination one (receptions and internal transfers) in reverse order.

On small screens, where the field labels are replaced by icons, these buttons are hidden and the product and location icons become buttons that open them instead.

Guided mode

The screen shows the next pending move (product, lot, quantities, locations) and guides the operator step by step (e.g. Scan Source, then Scan Product, Lot). Scanning something different from what is expected is rejected with an explicit message (Wrong product, Wrong lot, Wrong location).

In the pending moves list you can:

  • Jump to another line (arrows or tapping a card).
  • Edit a line with the pencil icon.
  • Put the whole remaining quantity with the +N button (e.g. +120). Once defined, this button disappears; use the edit icon to change the quantity.
  • Show the lines already scanned with the eye icon.
  • Decide the backorder behavior per line when quantities are incomplete (create backorder / no backorder / keep pending).

Validation

The Validate button confirms the transfer using the scanned quantities. A wizard is displayed to confirm the action; after validation you return to the ready-pickings list.

If some lines have no quantity, the standard confirmation wizard asks whether to process all quantities.

With Auto put in pack enabled, unpacked lines are packed automatically before validating.

Extra products, new lots and packagings

  • Press the + Product button to add an item not in the demand (when the option group allows non-demanded products). When you select a product, a numeric field is displayed to add the quantity. The trash can icon resets the form values (except the location) without closing it; Clean values resets everything and closes the form; Confirm adds the new item.
  • If a scanned lot does not exist on a receipt, it can be created on the fly (Create lots if not match) or through the new lot dialog.
  • Unknown packagings can be registered from the scan screen with the new packaging dialog: scan the packaging barcode, set the name and confirm.

Barcode interface for inventory adjustments

Open Barcodes > Inventory (or the Scan barcodes button of an inventory adjustment).

The screen uses the Inventory option group. With the location filled by default it opens on the stock location of the first warehouse; make the location scannable to count other locations. Then scan products, lots, packagings or packages:

  • Each product scan adds 1 unit to the counted quantity (or the packaging quantity when a packaging is scanned). With Replace quantity on each reading, a new reading overwrites the counted quantity.
  • With Accumulate repeated readings and manual confirmation, scanning the same product, lot or packaging again before confirming adds one more unit (or packaging) to the quantity to confirm.
  • Serial-tracked products accept exactly one unit per serial; a second read of the same serial is rejected.
  • The eye icon switches between the items already counted by you and the pending ones.
  • Each line in the list can be edited (pencil), incremented/decremented (+/-) or cleared (trash). Confirming an edited line replaces its counted quantity.
  • The Apply button is displayed when there are counted items. It opens the standard inventory adjustment confirmation (with reason), applies your counted quants and returns to the main menu.

Barcode actions

  • Go to Barcodes.
  • Scan an action barcode (see Configuration) to open the corresponding action directly, or tap its tile.

Show the planned destination location on pending moves

By default the pending moves list on the barcode screen shows the source location and lot of each move. When the option group has Show fixed dest. location enabled, the list also shows the destination location already planned on the stock move line, so the operator sees where the goods must be stored as soon as the picking is opened, without scanning anything.

This only reads the destination resolved upstream when the move was prepared (e.g. the putaway strategy applied at reception). It never recomputes the putaway: putaway is a warehouse decision taken when the move is created, not a barcode-screen concern (see Use location dest. putaway for the opposite, recompute-on-scan behaviour).

In addition, with this option enabled, scanning a product reuses the move line already routed by putaway and keeps its destination, instead of creating a new line at the generic picking destination. This way receiving by barcode keeps the goods on their planned putaway location.

To keep the shown value reliable it is displayed only for moves whose destination has no storage category, i.e. a fixed putaway whose location does not depend on the received quantity. For capacity-based putaway (storage categories) the final location may still change on a partial receipt, so it is intentionally not shown.

Enable it in Inventory > Configuration > Barcode Option Groups, on the option group used by the operation type, with the Show fixed dest. location checkbox.

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.