[ストレージシステム]ツールは、モデル内のすべてのStorage.Objectのグローバルな設定と機能を提供します。
このツールは、すべてのストレージオブジェクト全体ですべてのスロットを照合することができます。この機能を使用すれば、インバウンド在庫用のストレージで適切な場所を見つけることができます。また、このツールは、すべてのストレージオブジェクト全体ですべてのStorage.Itemを照合することもできます。この機能を使用すれば、アウトバウンド在庫用のストレージからプルする適切なアイテムを見つけることができます。このツールは、このような照合を最適化するように構成できます。
また、このツールを使用すれば、モデルのアドレス方式を1つ以上指定することもできます。ほとんどの倉庫管理システム(WMS)がアドレスを使用してアイテムの場所を記録します。このアドレスは、スロットを一意に識別する数字、英字、およびセパレータの組み合わせです。ストレージシステム上のアドレス方式を使用して、シミュレーションモデルで使用する外部WMSからスロットアドレスを読み取ることができます。
このツールは、ストレージオブジェクトのタイプごとの外観も指定します。オブジェクトの外観は、サーフェスを追加または削除したり、サーフェスごとにテクスチャと色を設定したりすることによってカスタマイズすることができます。また、各スロットに関する情報を視覚的に表示することもできます。たとえば、スロットのラベル値によって色が異なる正方形を表示することができます。
このツールにはイベントも含まれています。アイテムがスロットに入ったとき、スロットから出たとき、またはスロットに割り当てられたときのスロットのイベントをリッスンすることができます。
FlexScriptでは、Storage.system
を使用してこのツールにアクセスできます。
ストレージシステム内のフローアイテムと連動する2つのクラスがあります。そのうちの1つがStorage.Itemです。このクラスは、Storage.Itemコンストラクターで使用できます。
Object item; // a flowitem reference
Storage.Item storageItem = Storage.Item(item);
上のコードは、特定のフローアイテムのStorage.Itemデータをアサートします。Storage.Itemオブジェクトは、フローアイテムのストレージシステムのレコードです。アイテムをスロットに割り当てるには、assignedSlot
プロパティを必要なスロットに設定します。
Slot slot; // a slot reference;
storageItem.assignedSlot = slot;
フローアイテムあたり複数のStorage.Itemが存在することはありません。フローアイテムが破棄または仮想化された場合は、Storage.Itemオブジェクトも破棄されます。
スロットを割り当ててから、そのスロットを含むストレージオブジェクトにフローアイテムを移動すると、フローアイテムが正しいスロットに配置されます。
2つ目のフローアイテムベースのクラスがStorage.Slot.Itemです。このクラスは、特定のスロットからアクセスされます。
Slot slot; // a slot reference
Storage.Slot.Item slotItem = slot.slotItems[1];
Storage.Itemをスロットに割り当てると、そのスロットでStorage.Slot.Itemオブジェクトが作成されます。スロットごとに、そのスロットに割り当てられたまたは現在スロット内に存在するアイテム(slotItems
を介してアクセス)のリストが維持されます。ストレージシステムのメソッドであるfindItem()とqueryItems()は、各スロットのStorage.Slot.Itemオブジェクトのリストを検索します。フローアイテムを仮想化すると、Storage.Slot.Itemオブジェクトが残ります。
スロットにラベルを付けることができます。たとえば、各スロットにSKUラベルを付加して、そのスロットに保存可能なSKUを示すことができます。そうすれば、次のようなコードを作成して、アイテムのSKUラベルに基づいてアイテムのスロットを探すことができます。
Storage.Slot slot = Storage.system.findSlot(
"WHERE SKU = $1.SKU AND slot.hasSpace($1)", 0, item
);
その後で、ifステートメントを使用してクエリが成功したかどうかをチェックすることができます。
if (slot) {
// Assign the item to the slot, so that slot.hasSpace() will
// account for this item in future searches.
storageItem.assignedSlot = slot;
}
このようなケースでは、スロット上のSKUラベルにインデックスを付けることができます。ラベル(SKUラベルなど)にインデックスを付ける場合は、findSlot()
メソッドで実行するクエリでシステム内のすべてのスロットを検索する必要がなく、検索をラベルが一致するスロットに限定できます。インデックスが付けられたスロットラベルを変更すると、インデックスが自動的に更新されます。
ストレージからアイテムを取得したいときに、特定のアイテムを取得するのではなく、特定の属性を持つアイテムを取得する方が望ましい場合があります。たとえば、在庫内のアイテムにSKUラベルが付けられている場合は、そのSKUに基づいてアイテムを検索できます。
Storage.Slot.Item slotItem = Storage.system.findItem(
"WHERE Type = $1", 0, 2
);
その後で、ifステートメントを使用してクエリが成功したかどうかをチェックすることができます。
if (slotItem) {
// Unassign the assignedSlot to make it "outbound".
// Outbound items are excluded by default when using findItem().
slotItem.storageItem.assignedSlot = 0;
}
このようなケースでは、アイテム上のSKUラベルにインデックスを付けることができます。アイテムラベルにインデックスを付ける場合は、findItem()
メソッドで実行するクエリでシステム内のすべてのアイテムを検索する必要がなく、検索をラベルが一致するアイテムに限定できます。
在庫内のフローアイテムの数が多い(10,000アイテム以上)モデルの場合は、メモリ使用率と描画速度の両方が問題になる可能性があります。このような場合は、アイテムの仮想化を選択できます。これは、アイテムがストレージオブジェクトに入ると、そのアイテム自体が破棄されることを意味します。ストレージシステムは、アイテムに関する必須のラベル値とビジュアルプロパティを保持します。この情報は、そのアイテムのStorage.Slot.Itemオブジェクト上で保持されます。仮想アイテムにアクセスしようとすると、すぐにそのアイテムが仮想化解除されます。これは、フローアイテムが保存されているラベル値とビジュアルプロパティで作り直されることを意味します。
最低限の情報しか保持されないため、アイテムの仮想化は大幅なメモリ節約につながる可能性があります。加えて、仮想アイテムの描画速度が大幅に向上する可能性もあります。欠点はフローアイテムが破棄されることで、これにより、一部のモデルの作成が困難になります。
ウェアハウジングでは、アドレスはスロットを一意的に識別するテキストです。一般的な例として、次のアドレスを考えてみましょう。
"3-5-07052", "1-1-05061"
アドレス方式を使用すると、ストレージシステムにこれらの文字列の解釈方法を伝え、正しいスロットを取得できます。この例では、次のコンポーネントを指定します。
アドレス方式を定義したら、getSlot()メソッドを使用してアドレスに基づいてモデル内のスロットを検索できます。
Storage.Slot slot = Storage.system.getSlot("3-5-07052");
特定のスロットのアドレスにアクセスすることもできます。
string addr = slot.address;
複数のアドレス方式を定義できます。ストレージシステムは、入力値と一致する最初の方式を使用してアドレスを解決します。
イベントの詳細については、「イベントリスニング」ページを参照してください。
ストレージシステムオブジェクトには、次のイベントがあります。
このイベントは、アイテムがストレージオブジェクト内のスロットに入ったときに発生します。このイベントが発生すると、スロットエントリ時トリガーが実行されます。ここでは、FlexScriptまたは事前に設定されたピックオプションを使用してカスタムロジックを実行できます。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
スロット | Storage.Slot | フローアイテムが入ったスロット。 |
アイテム | オブジェクト | スロットに入ったフローアイテム。 |
このイベントは、アイテムがストレージオブジェクト内のスロットから出たときに発生します。このイベントが発生すると、スロット終了時トリガーが実行されます。ここでは、FlexScriptまたは事前に設定されたピックオプションを使用してカスタムロジックを実行できます。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
スロット | Storage.Slot | フローアイテムが出たスロット。 |
アイテム | オブジェクト | スロットから出たフローアイテム。 |
このイベントは、アイテムがストレージオブジェクト内のスロットに割り当てられたときに発生します。このイベントが発生すると、スロット終了時トリガーが実行されます。ここでは、FlexScriptまたは事前に設定されたピックオプションを使用してカスタムロジックを実行できます。
次のパラメータがあります。
イベントパラメータ | タイプ | 説明 |
---|---|---|
スロット | Storage.Slot | フローアイテムが割り当てられたスロット。 |
アイテム | オブジェクト | スロットに割り当てられたフローアイテム。 |
[スロットラベル]タブには、次のプロパティがあります。
ラベルを[スロットラベル]リストに追加できます。このリストは、FlexScriptとクエリのどちらかでスロットラベルを読み書きするときに参照されます。
スロットのラベルを読み取ると、スロットはまずそれ自体のタイプラベルをチェックします。タイプラベルが存在する場合は、そのラベルの値を返します。タイプラベルが存在しない場合は、ストレージオブジェクト上の[スロットラベル]リストをチェックします。タイプラベルがそこに含まれていた場合は、そのラベルのデフォルト値が返されます。そうでない場合は、存在しないラベルを読み取ろうとしたことで例外が発生します。これは、クエリを含むスロット上のラベルアクセスに該当します。
スロットラベル値の書き込みは、動的ラベルを使用した他のオブジェクトとほぼ同じ振る舞いをします。ラベルが存在しない場合は、それがスロットに追加されます。その後、ラベルに新しい値が設定されます。ただし、スロットは[スロットラベル]リストをチェックして、ラベルにインデックスが付けられているかどうかも確認します。付けられていた場合は、ストレージシステムがすぐにそのラベルのインデックスを更新します。
ラベルにインデックスを付けるということは、すべてのスロットを検索しなくてもそのラベルを使用してクエリで絞り込むことができることを意味します。この場合は、パフォーマンスが大幅に向上する可能性があります。たとえば、SKUラベルを使用してスロットを絞り込む場合は、そのラベルをリストに追加し、それをインデックス付きとしてマークします。そうすれば、次のクエリのパフォーマンスが向上します。
Storage.system.findSlot("WHERE SKU = $1.SKU", 0, item);
インデックスの恩恵を受けるクエリの詳細については、「SQLクエリ」のトピックを参照してください。
[ラベル]リスト内の各エントリには、次のプロパティがあります。
[ビジュアル化]タブには、次のプロパティがあります。
[ビジュアル化]エリアを使用して、ビジュアル化の名前変更、追加、複製、削除、または並べ替えを行うことができます。今すぐ編集したいビジュアル化を選択することもできます。ビジュアル化は、特定のストレージオブジェクトの描画方法のすべての側面を定義します。ストレージオブジェクトごとに1つずつのビジュアル化を使用すると正しく表示されます。
[描画要素]エリアを使用すれば、特定のビジュアル化で使用される描画要素のそれぞれに関する詳細を編集することができます。次のプロパティがあります。
画像や色を扱う描画要素の場合は、xとyの両方向に関する次のプロパティも存在します。
テキストを扱う描画要素の場合は、次のプロパティも存在します。
ワイヤフレームを扱う描画要素の場合は、次のプロパティも存在します。
他のビジュアル化を参照する描画要素の場合は、次のプロパティも存在します。
[アイテム]タブには、次のプロパティがあります。
このボックスをオンにすると、アイテムを仮想化できます。これは、アイテムがスロット内に配置されている場合は、破棄されることを意味します。ストレージシステムは、空間や色などのそのアイテムに関する最低限の情報を保持します。こうして、アイテムが描画されます。加えて、[アイテムラベル]リストに表示されたラベルも保持されます。後でアイテムにアクセスする必要が生じた(ストレージから取得するためなど)場合は、アクセス直後にアイテムが作り直されます。
このリストを使用すると、アイテムに付けることが可能な主要なラベルを列挙できます。ここでラベルを列挙する理由は2つあります。
Storage.Slot.Item slotItem = Storage.system.findItem(
"WHERE Type = $1", 0, 2
);
このタブを使用して、1つの以上のアドレス方式を定義できます。アドレス方式は、スロット単位の識別子を使用する入力データがある場合に最も有益です。たとえば、各スロット内のアイテムが記述された、倉庫内の在庫のスナップショットを表すテーブルがあるとします。または、ピッカーが注文を履行するために選択したスロットが記述されたテーブルがあるとします。どちらのケースも、通常は、スロットがアドレスによって識別されます。アドレスは、スロットを一意的に識別する数字、英字、およびセパレータの組み合わせです。アドレス方式をセットアップすると、ストレージシステムが、getSlot()メソッドを使用して、アドレスを解釈し、正しいスロットを返すことができます。
アドレスでスロットを検索しようとすると、ストレージシステムが方式のリストから一度に1つずつ方式を選択し、指定されたアドレスがその方式と一致するかどうかを確認します。一致する方式が見つかると、ストレージシステムがその方式の各コンポーネントを構文解析します。まず、ストレージシステムは、アドレスからゾーンIDと通路IDを抽出します。次に、ゾーンIDと通路IDが一致するすべてのストレージオブジェクトを探します。さらに、ストレージシステムは、アドレスからベイID、レベルID、およびスロットIDを抽出し、そのスロットの一致するゾーンと通路でそれぞれのストレージオブジェクトをチェックします。
検索が正しく機能するためには、それぞれのラックオブジェクトを正しく構成する必要があります。アドレス方式にゾーンIDと通路IDが含まれている場合は、それらの値をラックオブジェクトごとに設定する必要があります。各ラックのアドレスマッピングの値が正しく構成されていることを確認する必要もあります。詳細については、「ストレージオブジェクト」のトピックを参照してください。
[アドレス方式]タブには、次のプロパティがあります。
このエリアを使用して、アドレス方式の名前変更、追加、複製、削除、および並べ替えを行うことができます。
タブのこのエリアを使用して、アドレス方式のコンポーネントの追加、削除、および並べ替えを行うことができます。各コンポーネントには、次のプロパティがあります。
[方式コンポーネント]エリアに、方式別のアドレス例を示すフィードが表示されます。この例を実際のアドレスと比較して、パターンが正確に一致することを確認できます。
このタブには、モデル内のすべてのストレージオブジェクトを含むテーブルが表示されます。このテーブルは、整理、絞り込み、および編集を行うことができます。ストレージオブジェクトを個別に編集するための便利な代替手段だと言えます。
[オブジェクト]タブには、次のプロパティがあります。
ストレージシステムでは、次の3つのトリガーを使用できます。