Attribute set with mandatory type = When Shipping not working


Attribute sets can be used for a wide variety of things. If we're selling clothes, attribute sets can describe colors and sizes. In cases like above it makes sense that the attributes are mandatory on all documents such as purchase order, sales order, material receipt etc.

Another common use for attribute set is serial numbers. If we only want to track what serial numbers we have shipped to customers we want to use Serial No and Mandatory type = When shipping.
This is because the serial number is not interesting to know when purchasing, receiving or when the customer orders. The customer doesn't care what serial number he gets and we don't either, we just want to track it when shipping to the client. We don't need to know what serial numbers we have in the warehouse either.

Products with ASI serial number and mandatory type = When shipping must not have their attribute sets tracked in the warehouse. If they are tracked in the warehouse but only registered when shipped to customer the inventory of that specific serialnumber becomes negative and the shipments can't be completed.

Complete error message is:
Cannot correct Inventory OnHand [60010911] - Negative inventory disallowed in this warehouse




Heng Sin Low
August 15, 2017, 3:40 AM

Generate an inventory move before complete of shipment should work ( move from non-asi to asi with serial ). Can be added to core or implement as extension ( before complete model validator or event handler ).

Carlos Ruiz
August 25, 2017, 9:55 AM

Hi , is there a patch for this? How can I reproduce it?

Heng Sin Low
August 25, 2017, 1:34 PM

No, I don't have a patch for it.

To reproduce:

  • Create product A with ASI = when shipping.

  • Complete MR for 1 unit of A with no ASI

  • Create Order for 1 Unit of A. Generate Shipment With Status = Prepare

  • Goes to the Prepared shipment, create a new ASI for A. Complete the Shipment.

  • You will end up with No ASI On Hand of 1 and With ASI On Hand of -1 which is not desirable.

My idea above is pretty simple - In the before complete event of the shipment, you create an inventory move transaction for A to move 1 unit of No ASI A to the newly created ASI, making it available to fulfill the Shipment Line Transaction.

Carlos Ruiz
August 26, 2017, 3:10 PM

Thanks , I see your point.

Yes, I think it can be done as extension, I think what is missing is that the "when shipping" approach plus negative disallowed requires an extra process for serializing the inventory - which is the process proposed by you as inventory move, but I think it can't be in core as is not a generic case to automate.

The other possible approach is "when shipping" plus allow negative - which requires a further post-process to match the negative and positive inventory - can be done for example with physical inventory.

I think what is described in this ticket is not a bug - is just a way to see one of the processes.


Carlos Ruiz

Carlos Ruiz
August 22, 2020, 4:28 PM

bitbucket link is broken.

As discussed above, this can be solved via an extension plugin. The use case is probably not common, there is a workaround to manage the case in core serializing the items using the Inventory Move window.


Daniel Tamm


Daniel Tamm


Tested By


Time tracking



Affects versions

Due date