I am developing a retail management system with inventory management module, I am facing a logic design problem and I don't really know how to address the problem in an easy way, so I wrote an example which illustrates that problem:

Let's say I have an item (e.g. Cola Can), this item have a Barcode (11...1), this is so good until now and we can sell the item smoothly using the Cola Can barcode(11...1). However, when the warehouse buys cola can they buy with larger package for simplicity 6 cans packages which have different barcode(11...2), after that the 6 packages is braked down into 1-1 cans and sold per item of barcode (11...1).

The problem is that you buy with package and sell per item which will make the reports for the inventory incorrect, and the inventory stock will never match.

How to control this packages problem or should the system deals with the smallest package only (e.g. when I buy 6 cans package, the warehouse should enter 6 items of single can barcode)?

  • 2
    It's worth noting that most packages like this are not meant to be individually sold. In fact, it says specifically on the individual items "Not labeled for individual sale." That said, what you need is a process where you remove the package from inventory, and put six items into inventory under a different part number. If you need to track that, use a "bill of materials" type system that tracks individual components of a complete item. Commented Apr 15, 2014 at 15:57
  • You've got two situations you need to distinguish: breakable packages (a case of 24 tubes of caulk costs the same as 24 tubes of caulk) vs discounted packages (a case of 24 cans of soda costs less per unit than a case of 12 cans of soda which costs less than a case of 6 cans of soda which cost less per unit than a single can of soda)... and if you can 'recombine' 24 loose tubes of caulk back into a 'case'. All that said, I'm quite curious about flushing out the question to one that I can properly answer (spent several years writing point of sales software and know the package/each problem).
    – user40980
    Commented Apr 15, 2014 at 20:28

1 Answer 1


You're going to need to bust the assembly when an item within it is sold. Add the remaining items from the assembly to inventory and subtract the case. This will effectively balance out your inventory.

As per request via comments, I will adjust my answer accordingly.

We can use your 'Cola Can' example to help us visualize. We all know that you can buy 12 can cases of Cola 'Case Upc (11..2)', but lets say we want to sell them individually 'Unit Upc (11..1)'. In addition for clarification, let's say that your physical and logical inventory match in that all Single Cans have been sold. The process would go something along the lines of this.

if (inventory of single cola == 0) and (inventory of case cola > 0) then
    subtract 1 case from inventory of case cola.
    add the number of cola in 1 case of cola to single cola inventory
    subtract 1 single cola from single cola inventory

While the code is a bit rough, the example should show you how to effectively get your result.

  • 1
    I think this would work, but could you provide a little more detail and possibly and example?
    – JeffO
    Commented Apr 15, 2014 at 17:33
  • Thank you for your answer.However, how i can achieve the logic of this design. suppose we have multiple packages for a single item. how can i reference all the packages for a single item taking into consideration that the system can also sell packages as well. Commented Apr 15, 2014 at 20:38
  • If you have say a case of 6 cans, and a case of 12 cans, and a case of 24 cans, you would need to provide a selection, this would start to lean on the operational side of things, and would have to be input by the person adjusting the inventory.
    – B-Rad
    Commented Apr 16, 2014 at 17:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.