Archive for the ‘Manufacturing’ Category

Calculating a product cost with OpenERP

Last week I had the opportunity to try a very useful module that, IMHO, should be included in OpenERP core. This module is product_extended and can be found in the extras repository, you can download it with the following command:

#  bzr branch lp:openobject-addons/extra-6.0

This module does many things, among them shows the product last order for a supplier and its date. But what is really interesting is that it calculates a product cost based on its Bill of Materiales. In order to do that, first you need to check the “Compute Standard Price” check box in the product form,

Then, you can either click on the “Compute Standard Price” button or check it in the product bill of materials (a product can have more than one bill of materials). In the latter, you can find the product information on the Bill of Materials form.

You can calculate the standard price by clicking on the “Compute Standard Price” wizard on the right of the BoM form. How is this cost calculated? This is the interesting part, it takes into account the product cost of each product, plus the hours and cycle costs of every workcenter that is involved in its routing. A very useful module.

It needs a minor change in order to make it work with OpenERP 6.1 but you should try it, I highly recommend it


ABC Analysis in OpenERP

December 26, 2011 Leave a comment

ABC analysis is very well covered in this Wikipedia article. So no point of talking about it again here. Thing is, how do you implement it in OpenERP.

Polish OpenERP screenshot

Image via Wikipedia

Truth is, it is not a great deal. You only need to pull the sale order lines for the past six months (for example, could be a year as well or the period under analysis), then by product summarize its sales (not taking into account any discounts) and then divide the sales number by the total sales amount, in order to figure out the product ABC Category. If you are an experienced programmer or data analyst, you can do this in minutes. If not, does not take long to figure out how to query the OpenERP database.

Thing is, this information is not integrated into OpenERP yet (and it makes sense, since you do not need this information for the MRP application. It’s nice to have it, but it is not critical). So I created a module that regularly categorizes OpenERP products according to its sales. I have not finished it yet and I need to upload it to LaunchPad, but I think I will do it this week.

What does this module do? Allows you to create ABC categories (you can have as many as you want) where you define the category and its range. Then regularly (as an scheduler action) categorizes the products taking into account their sales lines. Then updates the product abc_category field (created previously by the module installer).

I still need to polish the module and add a couple of files, such as a XML file with initial information (specially for the scheduler and categories). As soon as I get it done, I will upload it to LaunchPad and publish it.


Checking lead-times in OpenERP

December 23, 2011 Leave a comment

In case you need to check your suppliers’ lead-times in OpenERP, it is quite easy. You need to go to Warehouse > Reporting >  Movement Analysis. You will be able to see a view where you can filter by partner, product, location and other attributes the planned lead-time and execution lead-time. This is a great report for checking the accuracy of lead-times.

Movement Analysis View in OpenERP

Movement Analysis View

Data integrity issues in MRP implementations

December 22, 2011 Leave a comment

A good description of the data integrity issues found in MRP implementations can be found in the article on MRP in Wikipedia. In a nutshell, if the

English: MRP

Image via Wikipedia

information in your manufacturing system is bad, don’t expect its planning to be any better (or GIGO). While you are implementing the MRP module in OpenERP, you should pay attention to the following information items in your systems:

  • Lead-times: critical for the timing phase of your planning. If production or supplier lead-times are not accurate, don’t be surprised to find planning dates that are not realistic.
  • Stock levels: very critical, since all the procurements are created when the stock levels drop down below its reorder point or when a customer makes an order (depending on how you have your system set-up)
  • Bills of Materials: your system will procure either raw material, work in process inventory or end-items. Which items it will procure depends on the accuracy of Bill of Materials. Your BoM needs to reflect how your product is assembled. I found some places where the BoM only reflects the cost structure of the end-item, and that is wrong. The cost of the end-item is a different problem that needs to be addressed in a different module than the manufacturing module.
  • Products: your system needs to have all the products you procure (either by purchasing or manufacturing) and sell. And its description needs to be complete.
  • MPS, or production schedule: needs to be available in order to make the plan. In all the manufacturing plants there is a production schedule. People might not be aware there is one, but actually you can find it in the daily or weekly manufacturing plans.
  • Reorder points: you need reorder points (minimum and maximum stock levels) in some products in order to not disrupt your quality of service. We will not get into the calculation of these items (by now)

    We will get into more detail on these items and how to address them in further posts


Safety Stock and reorder points in OpenERP

Curves of the cycle service level & fill rate ...

Image via Wikipedia

Safety Stock is the level of stock maintained to mitigate the risk of stockouts. Do you have safety stock in OpenERP? It depends. If you are running a manufacturing operation, and you manufacture to stock or build to order while keeping raw material inventory on-hand, you are actually using safety stocks. Chances are, if you don’t have safety stock you will run risks of stockouts and customer service deterioration.

Do you have a module or something like that in OpenERP? Actually no. And there might be a reason for that. But we will not go into that, we will show how to manage safety stocks and reorder points in OpenERP.

What you do have in OpenERP is the possibility of defining Minimum Stock Rules in your products. You need to do so if you are planning on using the MRP module. Actually it is mandatory to have minimum stock rules for all the raw material that you need in order to manufacture products. And you need to have minimum stock rules for your work-in-progress components in place when you build to stock work-in-progress components, or products.

The Minimum Stock Rules form allows you to define two quantities for your product. First the minimum quantity. This is a number that when it is reached by the virtual inventory, OpenERP creates a procurement in order to increase the stock of the product up to the Maximum Quantity amount (which is the second quantity in the Minimum Stock Rule).

And if you think about it, since all you need is to calculate your minimum and maximum quantities for your product, you don’t need to calculate your safety stock since it is already taken care of by the minimum quantity.

Now, how do you calculate your minimum quantity? You can do it with the following formula in LibreOffice:

Minimum Quantity = NORMINV(Service Level, Average Demand During Lead Time, Standard Deviation of Demand During Lead Time)

It’s a simple formula that can be used in LibreOffice or PostgreSQL (you need to install pgnumerics though, not a big deal)

Service level is the % of orders that you are planning to fulfill. If you are planning on satisfying average demand, you need to set it to 50%. If you are planning on satisfying 95% of your orders, you need to set it at 95%.

Average and Standard Deviation of Demand during lead time are quite straight-forward parameters. In order to calculate them you need to take all your orders you took during a period of time, and then calculate its average and standard deviation.

The minimum quantity  is composed of two components, the safety inventory piece and the lead-time demand piece. Lead-time demand can be calculated as the average demand you have for that product, and the safety stock can  be calculated as

Safety Stock = Minimum Quantity – Lead Time Demand

At this moment we are developing a module that calculates Minimum Quantity, Safety Stock and Lead Time Demand. We will keep you posted on this.