About custom products

In practice, it often happens that we have a refinement and/or addition of components to an existing item. Such item has increased price and a new bill of materials. Defining the parameters takes place at the very moment, while the customer is still present in our shop, at the cash register. Based on the item type, bought product can be refined immediately or subsequently. Almost every order (item) is unique.

Some software solutions call this option ‘configurator’, while such process is done through the “Custom products” in ERPAG. You can find more information on this link: https://www.erpag.com/news/custom-product-in-manufacturing

In this blog, we will take a jewelry manufacturing example. You can find basic information about using ERPAG in such business on this link: https://www.erpag.com/news/jewelry-manufacturing-software

Initial setup of custom products

First, we will create items from which we can produce the jewelry. In our case it’s a “Gold Bar” according to purity (karats).

raw materials

Next – we will define parameters that define our custom product (weight, purity, custom application text, etc.). To setup parameters, go to admin > custom fields > quotation. More about custom fields setup: https://www.erpag.com/news/custom-fields-upgraded .

custom fields

In our example, we will include the possibility of text engraving on jewelry. Of course, our employee will also need to know which text to engrave. For that purpose, we will create a ‘application text’ custom field, on the line item in quote.

custom field

In case we want to disable changes of the text, we can mark the field as “read only”.

In order to have precise cost, we will also add two work operations, with corresponding cost per hour.

work operations

3. Bill of materials (BOM) setup

BOM setup

Custom fields setup takes place through the Google Blockly script ( https://developers.google.com/blockly ).


First, we will create a condition for “Purity” (which material will be used in production). We are doing that through the “IF” blocks.


To form a BOM (Bill of materials) we are using block “Product SKU” from “ERP-Functions” part. This block adds to BOM an item with a corresponding SKU and quantity. We marked with a red arrow SKU “0001”, which is “Gold bar 18K” in our product & services list. Since the block is inserted in condition that the “Purity” = 18K, the corresponding material will be added to BOM. With blue arrow we marked the amount that’s added (the value of the custom field).

Now, we have to add the corresponding material to each “Purity” type.

To speed-up the process we can use “Duplicate” option (right click > duplicate) and just change the condition and SKU.


With this we defined “inputting” an item in the bill of materials (BOM). Now we have to define “Work Operations” in order to have more precise cost. We are doing this via block “Work Operation”.


Defining work operations

Let’s add a work operation “Hand made operation” (key “01” – marked with a red arrow in our example), which last an hour regardless of the entry parameters.

And another work operation, but only if there’s a request to engrave a custom text on our “Golden ring”.


We achieve this through the “IF” block where we compare whether there is “Application text” (the condition is not an empty text). And that work operation will last for 2 hours.

What can be useful here, is that on a generated item we also include the wanted application text. That way, the person that manufactures the “Golden ring’ also has that information.


We simply inserted a block in the condition (from “Generated item” menu) with which the “Product Application text” is set. That data is actually the custom field item type (that we defined at the beginning).

After we record the item, we can check how the generated BOM item would look like!

generate bom

So, our generated BOM looks like this:

generated bom based product

Price setup

Just as the components may vary based on the entry parameters, the price can vary as well. You can add markup/margin to your estimated cost, or calculate your price through the blockly script.

One of the ways is to do it through the variable. In our example. we will create a new variable “newprice” (through the option “Create variable” in the “Variables” section).

blockly script

We will set up the initial value of the variable. We will set the block at the beginning of the script.

In our example the initial value is “default price” of our custom product. Based on your needs, you can set this up as a fixed value as well. But we recommend this due to eventual price changes (for example, the price of gold varies a lot on the market). Default price is a price per gram. Since the end product is in pieces, we have to multiply it with weight (which is our entry parameter).

blockly script

Right below, in our blockly script we will put the multiplying option with “Gold Weight”. The price depends on “Purity” as well – It’s 10% more expensive for 18K, 20% for 21K, 30% for 22k and 50% for 24K. In “IF” blocks we can add multiplying with coefficients (10% more expensive is multiplying with coefficient 1.1).

Also, we charge additionally if we engrave a text. For example, if there is an application text, we will add $250 to the price.

blockly script

At the end of the script, there should be a block that sets the selling price based on the value of the variable “newprice”.

blockly script

Using in Point of Sale (POS)

point of sale

In POS in ERPAG, when you select Custom Product, you will automatically get a pop-up window to enter the appropriate parameters. After confirmation, item will be placed in cart with a corresponding price.

point of sale

You will also be able to select the parameters in ERPAG Mobile app as well!

erpag mobile app

The Sales Order will be generated after the payment is recorded:

sales order

In case you want to automate the process and generate the Work Order immediately as well – you can do that through a new blockly script.

blockly script

Note: In order to prevent that newly generated items show up in POS, you can turn off the Search Scope for Point Of Sale in the default document settings.

default document settings

Note 2: Since each generated product is unique, over the time the number of items in the product list will increase. We advise that from time to time set those products to inactive.