AnswerHub Upload Issue
Our AnswerHub community currently has a bug that prevents you from attaching your model or other files to your questions. AnswerHub is aware of this issue and they are working on a fix. Until we receive their patch, you can upload your models and other files to FlexSim's file share site. Include the file name in your question so that we know which upload to reference.


Nick V2 avatar image
Nick V2 asked anthony.johnson edited

Warehousing - Racking (Zone ID & Address Schemes)

Hi All,

First thanks a lot for upgrading the warehousing functionalities in FlexSim, works great!

I have a question on how to use process flow to store items in the right zone. I have enclosed the model for further details.


Short explanation:

I am creating three different items and give them different labels (product 1, product 2, product 3)

Based on this product label, I want to transport them them to the right 'Zone IDs' (tab in storage system menu).

How do I make this happen using process flow?

For product 1 this thus means that it can be stored in rack 2A and 3A. Put-away of these items can be anywhere in both racks, and if one of the racks is full it should store in the other rack (part of the same zone).

Thanks in advance for your help!



(One follow-up question with less priority: how can I build in a different loop in process flow covering: "if storage in all zones is full that the item is stored elsewhere")

FlexSim 19.2.1
process flowrackwarehousezone
warehousing.fsm (70.8 KiB)
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

1 Answer

anthony.johnson avatar image
anthony.johnson answered anthony.johnson edited

Use labels on the slots, which you appear to have already started. In your model you painted the label "Type" on to each of the racks with the respective values 1, 2, and 3. Then you use a pick option in the Assign Labels activity (Warehousing > Find a Slot) to find a slot based on the following query:

WHERE Type == $1.product AND slot.hasSpace($1.item)

The default settings of this option are that $1 is the token. Thus, the option will find a slot whose "Type" label matches the token's "product" label, and where the slot has space to store the item.

Once the activity has found the slot, it assigns a rack label corresponding to that slot's rack, and then assigns the item to that slot (a custom code activity that uses the pick option in Control > Warehousing > Assign Slot (Direct)).


· 2
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Hi Anthony,

Thanks for your help, and very clear explanation! Works great.

What do you recommend to solve the error with transporting items to a zone when all racks in the zone are full:

1. adding one rack for every zone with almost unlimited capacity.

2. adding custom code to store items elsewhere when a zone is full.

3. adding custom code to leave them in the queue and try later.

Thanks again!

0 Likes 0 ·

I'd say that's all dependent on how you would do it in the real facility. Do they have a "fallback" area where items are placed when their default locations are full? Do they leave the items where they are until there is enough room?

Note that the find slot pick option allows you to do multiple queries by pressing the + button. These are chained queries, where it will stop on the first query that is successful. For example, you may want to have the following searching strategy:

  1. First, find a slot that's designated for that sku
  2. If it can't find a slot with that sku, then find an empty slot of a different SKU, and reassign the slot to that sku
  3. If it still can't find an empty slot, then find a "mixed" slot, i.e. a slot with several different part types. This would be a slot whose Type label has been assigned to null.
  4. If it still can't find a slot, then find any slot that has space, but try to find a slot with the minimum number of items in it, so has to "mix" the least amount of inventory.

For this, you can implement 3 different queries, each corresponding to the designated rule above:

  1. WHERE Type == $1.product AND slot.hasSpace($1.item)
  2. WHERE slot.slotItems.length == 0
  3. WHERE Type IS NULL AND slot.hasSpace($1.item)
  4. WHERE slot.hasSpace($1.item) ORDER BY slot.slotItems.length ASC

The query will first try the first criterion, then if it can't find an item with that one, it will try the next, and so on.

Note that when using a multi-rule find strategy, you'll need to have some update code right after the find activity, which updates the found slot's Type label value based on what was found. For example, if you found a slot that's empty (rule 2), you should set its Type label to the item's sku, whereas if you found a nonempty, segregated slot (rule 4), you should make it "mixed", i.e. set its Type label to nullvar. We've discussed among the developers how to make such an updating mechanism easier, maybe with a custom code pick option, but we haven't implemented anything yet for that.

On the other hand, if you decide to implement a waiting mechanism, then you can listen to the Storage System's OnSlotExit event to check when items leave slot, making room for new items to be placed there.

0 Likes 0 ·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.