(57)【特許請求の範囲】
【請求項１】
管理対象に対して在庫管理を行う在庫管理装置において、
各レコードが前記管理対象の属性の種類と、該属性の値のフィールドと、他のレコードとのリンク関係を定義するフィールドを有することにより前記各レコードをノードとするツリー状のデータ構造であって、前記管理対象の前記属性の種類が同一のレコードからなるノードは前記ツリーの同一の階層に位置するよう前記リンク関係が定義されたツリー状のデータ構造を有し、前記各レコードはさらに、該レコードからなるノードのツリー上での位置によって表わされる前記管理対象の分類条件を満たす前記管理対象の在庫数に対応するフィールドを有するツリーデータテーブルと、
前記管理対象の属性の種類とその値の組合せによって記述される引当条件と引当数とが入力されると、該引当条件及び引当数に従って、前記ツリー上の最上位階層のノードに相当するレコードから、中間階層のノードに相当するレコード、及び末端ノードに相当するレコードを順次検索して前記ツリーデータテーブルの各レコードの在庫数を更新する在庫引当を実行する在庫引当装置とを含み、
前記在庫引当装置は引当依頼処理手段と、中間ノード処理手段と、末端ノード処理手段を備え、
前記引当依頼処理手段は、前記引当条件と引当数を入力として前記各ノードに対応するレコードについての引当依頼処理を処理依頼先から依頼されると、該レコードの属性の種類が該引当条件に含まれているか判定し、該レコードの属性の種類が該引当条件に含まれていればさらに該レコードの属性の値が前記引当条件に合っているか判定し、該レコードの属性の値が前記引当条件に合っている場合あるいは該レコードの属性の種類が該引当条件に含まれていない場合には、該レコードが前記ツリーの中間階層のノードに相当するものであれば前記中間ノード処理手段に前記引当条件と引当数を渡して引当処理を依頼し、該レコードが前記ツリーの末端ノードに相当するものであれば前記末端ノード処理手段に前記引当条件と引当数を渡して引当処理を依頼し、前記中間ノード処理手段あるいは末端ノード処理手段から引当処理結果として引当処理が完了していない不足数を受け取って前記処理依頼先に出力し、該レコードの属性の値が前記引当条件に合っていない場合には前記引当数を不足数として前記処理依頼先に出力するものであり、
前記中間ノード処理手段は、前記引当依頼処理手段から前記引当条件と引当数を入力として引当処理を依頼されると、前記レコードに相当するノードの直下位の階層のノードに相当するすべてのレコードについて所定の優先順位により順次選択して前記引当条件と引当数を渡して前記引当依頼処理手段に該レコードについての引当処理依頼を依頼して処理結果として不足数を受け取り、該不足数が前記引当数に等しければ次の優先順位の前記直下位の階層のノードに相当するレコードについての前記引当処理依頼を次の優先順位の前記直下位の階層のノードに相当するレコードが無くなるまで繰り返し、前記不足数が前記引当数に等しくなければ、前記レコードの前記在庫数を前記引当数と前記不足数の差の値で減算することにより更新し、前記不足数を引当数とし、不足数がゼロでなければ次の優先順位の前記直下位の階層のノードに相当するレコードについての前記引当処理依頼を次の優先順位の前記直下位の階層のノードに相当するレコードが無くなるまで繰り返し、不足数がゼロであるか次の優先順位の前記直下位の階層のノードに相当するレコードが無ければ前記不足数を前記引当依頼処理手段に返却するものであり、
前記末端ノード処理手段は、前記引当依頼処理手段から前記引当条件と引当数を受け取り、前記レコードの前記在庫数を前記引当数により更新し、不足数を求め、該不足数を前記引当依頼処理手段に返却するものであり、
前記在庫引当装置は、前記引当条件と引当数とが入力されると、該引当条件と引当数を入力として前記最上位階層のノードに相当するレコードについての引当依頼処理を前記引当依頼処理手段に依頼し、該引当依頼処理手段は前記最上位階層のノードに相当するレコードが前記ツリーの中間階層のノードに相当するものとして前記中間ノード処理手段に前記引当条件と引当数を入力として引当処理を依頼し、前記引当依頼処理手段、前記中間ノード処理手段及び前記末端ノード処理手段による回帰的処理により前記優先順位にしたがって前記ツリーの各ノードに相当するレコードについての前記引当処理を順次行うことを特徴とする自動在庫引当が可能な在庫管理装置。
【請求項２】
請求項１に記載の装置であって、
前記管理対象の属性の種類とその値の組合せによって記述される仕入条件と仕入数とが入力されると、該仕入条件及び仕入数に従って、前記ツリーデータテーブルの前記各レコードを前記ツリー上の最上位階層のノードに相当するレコードから中間階層の中間ノードに相当するレコードを経て最下位階層の末端ノードに相当するレコードに向かって検索しながら、該各レコードの在庫数を更新する在庫仕入を実行する在庫仕入装置を更に含む、
ことを特徴とする自動在庫引当が可能な在庫管理装置。
【請求項３】
請求項２に記載の装置であって、
ユニークなＩＤ番号と前記管理対象の属性の種類と該属性の値と前記管理対象の分類条件を満たす前記管理対象の在庫数に対応するフィールドを含むレコードからなるデータベーステーブルと
前記データベーステーブルからメモリ装置上に前記ツリーデータテーブルを展開するツリーデータオンメモリ構造作成装置を更に含み、
前記データベーステーブルのレコードは、該レコードに相当する前記ツリー上でのノードの直上位の位置関係にあるノードに相当するレコードの前記ＩＤ番号を格納する識別情報フィールドを更に含み、
前記ツリーデータオンメモリ構造作成装置は、該識別情報フィールドの内容に従って、前記データベーステーブルからメモリ装置上に前記ツリーデータテーブルを展開する、
ことを特徴とする自動在庫引当が可能な在庫管理装置。
【請求項４】
請求項３に記載の装置であって、
前記データベーステーブルのレコードは、前記管理対象自体の種別を格納する管理対象種別フィールドを更に含み、
前記ツリーデータオンメモリ構造作成装置は、該管理対象種別フィールドの内容に従って、前記データベーステーブルからメモリ装置上に前記管理対象種別毎の前記ツリーデータテーブルを展開する、
ことを特徴とする自動在庫引当が可能な在庫管理装置。
【請求項５】
請求項３に記載の装置であって、
前記メモリ装置上に展開されたツリーデータテーブルを構成する各レコードは、該各レコードに対応する在庫数が前記在庫引当装置又は前記在庫仕入装置によって更新されたか否かを示すノード更新情報を保持し、
該ノード更新情報に従い、メモリ装置上に展開されたツリーデータテーブルの更新状態を前記データベーステーブルに反映させるデータベース更新装置を更に含む、
ことを特徴とする自動在庫引当が可能な在庫管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、販売物流業務における在庫引当処理に関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
販売物流業務における商品の在庫管理技術として、データベースシステムを用いて行う技術が普及している。
【０００３】
このような在庫管理を目的とするデータベース上のテーブルにおいては、一般に、１つの商品が１つのレコードエントリとして登録され、各レコードは、その商品の色、サイズ等の属性を示す複数の同一のフィールドから構成される。
【０００４】
このようなデータベース上のテーブルに対して、特定の条件を満足する商品を抽出するための在庫引当が行われる場合、従来は、そのテーブル上の属性（フィールド）毎に問合せ条件を指定してデータベース検索が行われていた。
【０００５】
そして、このような従来の在庫引当処理においては、条件が指定されている属性は在庫引当の結果に影響を及ぼすが、特に条件が指定されない属性が在庫引当の結果に影響を及ぼすことはなかった。
【０００６】
従って、従来は、在庫引当の方針は全て、所定の属性に対する条件の指定という形式で具現化する必要があったため、条件の設定にある程度の経験が必要であり、必ずしも柔軟な在庫引当処理ができているとは言い難かった。
【０００７】
具体的には、従来、例えば、Ｌサイズの商品よりもＭサイズの商品が優先して引き当てられるような在庫引当を行うためには、まず、サイズ属性に対してＭサイズという条件を指定して在庫引当を行った後に、サイズ属性に対してＬサイズという条件を指定して在庫引当を行うという複数段階の在庫引当処理が必要であった。従って、従来は、例えば、在庫引当時にサイズ指定がなされなかった場合にＬサイズの商品よりもＭサイズの商品が優先して引き当てられる、というような自動的な在庫引当のための方針をデータベースに対して設定することは困難であった。
【０００８】
本発明の課題は、在庫引当時に条件指定が曖昧であっても、予め決められた方針に沿った自動的な在庫引当を実現することにある。
【０００９】
【課題を解決するための手段】
本発明は、管理対象に対して在庫管理を行う在庫管理装置を前提とする。
そしてまず、管理対象の属性の種類と、その属性の値と、各階層に管理対象の各属性が割り当てられるツリーデータ上での位置によって表わされる分類条件を満たす管理対象の在庫数と、他のノードとのリンク関係とが少なくとも定義され、ツリーデータを構成するノードが割り当てられ、属性の種類とその属性の値と在庫数とリンク関係にそれぞれ対応するフィールドを有するレコードによって構成されるデータベーステーブル（在庫情報ツリーＤＢ）を有する。
【００１０】
次に、管理対象の属性とその値の組合せによって記述される引当条件と引当数とが入力されると、この引当条件及び引当数に従って、データベーステーブルにおけるツリーデータ上の各ノードをツリーデータ上の最上位階層のノードから中間階層の中間ノードを経て最下位階層の末端ノードに向かって検索しながら、その各ノードの在庫数を更新する在庫引当を実行する在庫引当装置（１０４）を有する。
そして、上記在庫引当装置は、各ノードの検索時に、引当条件に指定されている属性が定義されている階層に対しては、引当条件に指定されている属性の値と同じ値が設定されているノードへと進み、一方、引当条件に指定されていない属性が定義されている階層に対しては、その階層内での各ノードの位置関係に対応する所定の優先順位で回帰的にその各ノードへと進む。
【００１１】
上述の発明の構成により、在庫引当時に条件指定が曖昧であっても、ツリーデータの木構造における検索の優先順位に対応する在庫引当戦略方針に沿った自動的な在庫引当が実現される。
【００１２】
上述の発明の構成において、管理対象の属性とその値の組合せによって記述される仕入条件と仕入数とが入力されると、この仕入条件及び仕入数に従って、データベーステーブルにおけるツリーデータ上の各ノードをツリーデータ上の最上位階層のノードから中間階層の中間ノードを経て最下位階層の末端ノードに向かって検索しながら、その各ノードの在庫数を更新する在庫仕入を実行する在庫仕入装置（１０５）を更に含むように構成することができる。
【００１３】
また、上述の発明の構成において、データベーステーブルからメモリ装置上にツリーデータを展開するツリーデータオンメモリ構造作成装置（在庫情報ツリーオンメモリ構造作成装置１０２）を更に含み、前述の在庫引当装置又は在庫仕入装置は、メモリ装置上に展開されたツリーデータに対して在庫引当又は在庫仕入を実行するように構成することができる。
【００１４】
この発明の構成により、ツリーデータへの高速アクセスが可能となる。
また、上述の発明の構成において、データベース上の各レコードは、ツリーデータ上でのノードの位置関係に応じた値を有する識別情報を格納する識別情報フィールドを更に含み、ツリーデータオンメモリ構造作成装置は、その識別情報フィールドの内容に従って、データベーステーブルからメモリ装置上にツリーデータを展開するように構成することができる。
【００１５】
この発明の構成により、データベーステーブルに対する簡単な問合せ文によって、データベーステーブルからメモリ装置上にツリーデータを展開することができる。
【００１６】
また、上述の発明の構成において、データベース上の各レコードは、管理対象自体の種別を格納する管理対象種別フィールドを更に含み、ツリーデータオンメモリ構造作成装置は、その管理対象種別フィールドの内容に従って、データベーステーブルからメモリ装置上に管理対象種別毎のツリーデータを展開するように構成することができる。
【００１７】
この発明の構成でもやはり、データベーステーブルに対する簡単な問合せ文によって、データベーステーブルからメモリ装置上にツリーデータを展開することができる。
【００１８】
更に、上述の発明の構成において、メモリ装置上に展開されたツリーデータを構成する各ノードは、その各ノードに対応する在庫数が在庫引当装置又は在庫仕入装置によって更新されたか否かを示すノード更新情報を保持し、そのノード更新情報に従い、メモリ装置上に展開されたツリーデータの更新状態をデータベーステーブルに反映させるデータベース更新装置（在庫情報ツリーＤＢ更新装置１０６）を更に含むように構成することができる。
【００１９】
この発明の構成により、メモリ装置上のツリーデータとデータベーステーブルとの効率的な整合化を図ることができる。  
【００２０】
【発明の実施の形態】
以下、図面を参照しながら本発明の実施の形態について詳細に説明する。
本発明の実施の形態の構成及び基本原理
図１は、本発明の実施の形態の構成図である。
【００２１】
本発明の実施の形態では、在庫情報がツリー構造を有するデータベースによって管理されることが特徴であり、全ての在庫情報に関するツリー構造は、ハードディスク等の補助記憶装置によって構成される図１に示される在庫情報ツリーデータベース（在庫情報ツリーＤＢ）記憶装置１０１に保持される。
【００２２】
この場合、商品の１つの属性に在庫情報ツリーの１つの階層が割り当てられ、その階層に、その属性が取り得る各値に対応する各ノードが配置される。
在庫情報ツリーＤＢ記憶装置１０１に記憶される在庫情報ツリーＤＢのテーブル上では、図２に示されるように、１つのノードは１つのレコードを構成する。
各レコードは、図２に示されるように、各ノードを識別するためのノードＩＤを格納するフィールド、属性の種類（色、サイズ等）が格納されるフィールド、属性の値（赤、青、Ｍサイズ、Ｌサイズ等）が格納されるフィールド、そのレコードに対応するノードのツリー構造上での位置によって表わされる分類条件を満たす商品の在庫数が格納されるフィールド、及びツリー構造を表現するためにそのレコードに対応するノードにリンクする親ノードのノードＩＤを格納するフィールド（親ＩＤフィールド）等を有する。
【００２３】
図２に示されるデータ構造を有する在庫情報ツリーＤＢにより、商品毎に、図３(a) 及び(b) に示される在庫情報ツリー構造を表現することが可能となる。図３において、矩形で囲まれた各部分がノードに対応し、矩形間の直線が在庫情報ツリーＤＢ上の親ＩＤフィールドに格納される情報で表現されるノード間のリンクを表わしている。また“商品”、“色”、“サイズ”等の別は在庫情報ツリーＤＢ上の属性フィールドに格納される情報に対応し、“商品Ａ”、“商品Ｂ”、“赤”、“青”、“黄”、“Ｍ”、“Ｌ”、“Ｓ”、等の別は在庫情報ツリーＤＢ上の値フィールドに格納される情報に対応し、“８００”、“６００”等の別は在庫情報ツリーＤＢ上の在庫数フィールドに格納される情報に対応する。
【００２４】
本発明の実施の形態では、商品毎の在庫情報ツリーへの高速アクセスを可能とするために、在庫情報ツリーオンメモリ構造作成装置１０２によって、図３(a) 及び(b) 等として示される商品毎の在庫情報ツリーのオンメモリ構造が、補助記憶装置である在庫情報ツリーＤＢ記憶装置１０１から半導体記憶装置である在庫情報ツリーオンメモリ構造記憶装置１０３に展開される。
【００２５】
図４及び図５は、在庫情報ツリーオンメモリ構造記憶装置１０３に展開される在庫情報ツリーオンメモリ構造のデータ構成図である。
在庫情報ツリーオンメモリ構造においては、図４に示されるように、ノード毎に、ノードＩＤ、ノード更新フラグ、属性、値、在庫数、親ノードＩＤ、子ノードへのポインタのリストからなるデータ構造体（或いはオブジェクトインスタンス）が保持される。
【００２６】
また、図５に示されるように、ノードＩＤ毎に、それに対応するノードのデータ構造体のアドレスへのポインタを保持するマップテーブルが保持される。
図４に示されるノード毎のデータ構造体において、ノードＩＤ、属性、値、在庫数、親ノードＩＤは、それぞれ、在庫情報ツリーＤＢ記憶装置１０１に記憶される図２に示される在庫情報ツリーＤＢ上のＩＤフィールド、属性フィールド、値フィールド、在庫数フィールド、及び親ＩＤフィールドに対応する。
【００２７】
ノード更新フラグは、それが含まれるノードの在庫数が図１に示される後述する在庫引当装置１０４及び在庫仕入装置１０５により更新された場合に１にセットされる。図１に示される後述する在庫情報ツリーＤＢ更新装置１０６は、在庫情報ツリーオンメモリ構造において、ノード更新フラグ＝１がセットされているノードについてのみ、在庫情報ツリーＤＢ記憶装置１０１に記憶されている在庫情報ツリーＤＢのテーブル上のそのノードに対応するレコードの在庫数フィールドを更新することにより、在庫情報ツリーＤＢと在庫情報ツリーオンメモリ構造との効率的な整合化を図ることができる。
【００２８】
子ノードへのポインタのリストは、このリストが含まれるノードを親ノードとするノードのデータ構造体のアドレスへのポインタのリストであり、在庫引当装置１０４が、在庫情報ツリーオンメモリ構造上で、上位階層のノードから下位階層のノードへの効率的なナビゲーションを可能とするためのデータである。
【００２９】
また、図５に示されるマップテーブルは、後述する在庫情報ツリーオンメモリ構造作成装置１０２によって作成及び使用される。
図１の在庫引当装置１０４は、在庫情報ツリーオンメモリ構造記憶装置１０３に記憶される図４に示されるデータ構成を有する在庫情報ツリーオンメモリ構造に対して、その在庫情報ツリーにより表現される在庫引当戦略方針に沿った自動的な在庫引当を、図６及び図７に示されるようにして実現することができる。
【００３０】
今、在庫引当装置１０４に対し、“サイズＬの商品Ａを２５０個引き当てる”という引当条件が指定されたとする。
この場合には、在庫情報ツリーオンメモリ構造記憶装置１０３上の図６(a) に示される在庫情報ツリーオンメモリ構造がアクセスされる。
【００３１】
まず、在庫引当装置１０４は、在庫情報ツリーオンメモリ構造上の最上位のノードから最下位階層の末端ノードに向かって、以下に示されるナビゲーションアルゴリズムに従ってナビゲーションを実行する。
（１）引当条件に指定されている属性に対応する下位階層へのナビゲーションの実行時には、引当条件に指定されている属性の値と同じ値が設定されているノードへのナビゲーションが実行される。
（２）引当条件に指定されていない属性に対応する下位階層へのナビゲーションの実行時には、引当条件が満たされるまで、ツリー上の左端から右端に向かってリカーシブにナビゲーションが実行される。
今、“サイズＬの商品Ａを２５０個引き当てる”という引当条件が入力された場合に、図６(a) の例では、まず、引当条件に“色”属性は指定されていないため、“商品Ａ”属性値が設定されている最上位のノードからそれが含まれる最上位の階層の１つ下の階層の左端の“色＝赤”属性値が設定されている中間ノードが検索される。
【００３２】
続いて、更に１つ下の“サイズ”属性に対応する階層の各末端ノードが左端から順次検索される。その結果、引当条件に合致する“サイズ＝Ｌ”属性値が設定されている末端ノードから、それに設定されている在庫数“２００”に等しい数の商品Ａが引き当てられる。この結果、図６(b) に示されるように、その末端ノードの在庫数は“０”になる。
【００３３】
ここで、引当条件は“２５０”であるため、図７(c) に示されるように、上記末端ノードからそれが含まれる階層の１つ上の階層の“色＝赤”属性値が設定されている中間ノードに対して、不足数“５０”が返され、その結果、その中間ノードにおいて、引当条件が“サイズＬの商品Ａを５０個引き当てる”に変更される。
【００３４】
その中間ノードの子ノードには、上記新たな引当条件に合致する未検索の末端ノードは存在しないため、その中間ノードからそれが含まれる階層の１つ上の最上位の階層の“商品Ａ”属性値が設定されている最上位のノードに対して、上記不足数“５０”が返される。
【００３５】
この結果、引当条件に“色”属性は指定されていないため、図７(c) に示されるように、“商品Ａ”属性値が設定されている最上位のノードからそれが含まれる最上位の階層の１つ下の階層の未検索の“色＝青”属性値が設定されている中間ノードが検索される。
【００３６】
続いて、更に１つ下の“サイズ”属性に対応する階層の各末端ノードが左端から順次検索される。その結果、引当条件に合致する“サイズ＝Ｌ”属性値が設定されている末端ノードから、それに設定されている在庫数“１００”に等しい数の商品Ａが引き当てられる。この結果、図７(d) に示されるように、その末端ノードの在庫数は“５０”になる。
【００３７】
そして、図７(c) に示されるように、上記末端ノードからそれが含まれる階層の１つ上の階層の“色＝青”属性値が設定されている中間ノードに対して、不足数“０”が返され、更にその中間ノードからそれが含まれる階層の１つ上の最上位の階層の“商品Ａ”属性値が設定されている最上位のノードに対して、上記不足数“０”が返される。
【００３８】
上記最上位のノードでは、不足数“０”が判定されることにより、在庫引当が完了する。
上述の在庫引当処理は、在庫情報ツリーオンメモリ構造記憶装置１０３上の在庫情報ツリーオンメモリ構造ではなく、在庫情報ツリーＤＢ記憶装置１０１上の在庫情報ツリーＤＢに対して直接行うことも可能であるが、在庫情報ツリーオンメモリ構造を介して実行される方が、高速アクセスが可能となる。
【００３９】
以上のようにして、在庫情報ツリーに対して、前述したナビゲーションアルゴリズムに従って在庫引当処理のナビゲーションが実行が実行されることにより、在庫引当時に条件指定が曖昧であっても、ツリー構造における検索の優先順位に対応する在庫引当戦略方針に沿った自動的な在庫引当が実現される。
在庫情報ツリーオンメモリ構造作成装置１０２の動作の詳細
図８は、在庫情報ツリーオンメモリ構造作成装置１０２の動作を示す動作フローチャートである。
【００４０】
まず、“商品”属性の特定の値（例えば商品Ａ）に対応する在庫情報ツリーオンメモリ構造を作成するために、在庫情報ツリーＤＢ記憶装置１０１に記憶される在庫情報ツリーＤＢ上のテーブルから、上記特定商品値に対応するレコード群を抽出するためのＳＱＬ（構造化問合せ言語）文が実行される（図８のステップ８０１）。
【００４１】
なお、本実施の形態では、在庫情報ツリーＤＢは、ＳＱＬデータベースとして実装されている。
また、本実施の形態では、特定商品値に対応するレコード群を、１つのＳＱＬ文で抽出可能とするために、在庫情報ツリーＤＢのテーブル構造において、図２に示される構成に加えて、図９に示されるように、“商品コード”フィールドが追加されている。
【００４２】
更に本実施の形態では、在庫情報ツリーの上位階層に含まれるノードほど、それに対応するレコードのＩＤフィールドには小さな値のノードＩＤが設定され、また、同一階層内では左側のノードほどそれに対応するレコードのＩＤフィールドには小さな値のノードＩＤが設定される。この結果、小さいな値のノードＩＤを有するノードほど、在庫情報ツリー上での在庫引当処理におけるナビゲーションの優先順位が高くなる。
【００４３】
なお、ＩＤフィールドの値が非連続の飛び番号に設定されることにより、ノードの追加を容易に行うことができる。
図８のステップ８０１で実行されるＳＱＬ文は、例えば下記に示される。
select from テーブル名  where 商品コード＝商品Ａ order by ＩＤ
このようにして抽出されたレコード群は、在庫情報ツリーの構造に対応してノードＩＤの値が小さなノードから順に並ぶ。このようなレコード群に対して、図８のステップ８０２〜８０６のループ処理によって、図１０(a) に示されるように先頭から順次１回だけ走査が行われることにより、図１０(b) に示されるように、在庫情報ツリーの最上位の階層から下位階層に向けて順次、在庫情報ツリーオンメモリ構造を作成することができる。
【００４４】
即ちまず、抽出されたレコード群から、１レコードが取得される（ステップ８０２）。
次に、レコードが取得できたか否かが判定される（ステップ８０３）。
【００４５】
レコードが取得できステップ８０３の判定がＹＥＳの場合には、取得されたレコードのデータを用いてノードが作成される（ステップ８０４）。
具体的には、在庫情報ツリーオンメモリ構造記憶装置１０３上に、図４に示されるデータ構成を有する１つのノードのデータ構造体（或いはオブジェクトインスタンス）が確保され、そのデータ構造体のノードＩＤ、属性、値、在庫数、及び親ノードＩＤの各変数メンバに、在庫情報ツリーＤＢのテーブルから取得された上記レコード上のＩＤフィールド、属性フィールド、値フィールド、在庫数フィールド、及び親ＩＤフィールドに格納されている各値がコピーされる。また、上記データ構造体のノード更新フラグに０がセットされる。
【００４６】
またステップ８０４では、作成されたノードのノードＩＤと、そのノードのデータ構造体へのポインタとが、図５に示されるマップテーブルに登録される。
次に、図５のマップテーブルが検索されることにより、ステップ８０４で作成されたノードのデータ構造体に設定された親ノードＩＤに対応するノードのデータ構造体が検索される（ステップ８０５）。
【００４７】
そして、ステップ８０５で検索されたデータ構造体の子ノードへのポインタのリストに、ステップ８０４で作成されたノードのデータ構造体へのポインタが登録される（ステップ８０６）。なお、このリストは実際には、上記データ構造体とは独立した記憶エリアに確保され、上記データ構造体にはその記憶エリアへのポインタが記憶される。
【００４８】
その後、ステップ８０２の処理に戻り、ステップ８０１で取得されたレコード群から次のレコードが取得され、上記ステップ８０２〜８０６の一連の処理が実行される。
【００４９】
レコードが取得できずステップ８０３の判定がＮＯとなると、１つの商品（例えば商品Ａ）に対応する在庫情報ツリーオンメモリ構造の作成が終了する。
在庫引当装置１０４の動作の詳細
図１１〜図１４は、在庫引当装置１０４の動作を示す動作フローチャートであり、図１１はメイン動作フローチャートである。
【００５０】
まず、最上位のノードに引当依頼がなされる（図１１のステップ１１０１）。
この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００５１】
図１２は、図１１のステップ１１０１からコールされる引当依頼処理を示す動作フローチャートである。
まず、自ノードのデータ構造体（図４）に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図６(a) の例では、最上位の階層のノードのデータ構造体に設定されている属性“商品”は、上記引当条件に含まれているため、ステップ１２０１の判定はＹＥＳとなる。
【００５２】
ステップ１２０１の判定がＹＥＳの場合は、自ノードのデータ構造体に設定されている値が引当条件に合致しているか否かが判定される（図１２のステップ１２０２）。図６(a) の例では、最上位の階層のノードのデータ構造体に設定されている値“商品Ａ”は、上記引当条件に合致するため、ステップ１２０２の判定はＹＥＳとなる。
【００５３】
ステップ１２０２の判定がＹＥＳの場合には、自ノードが末端ノードであるか否かが判定される（ステップ１２０３）。図６(a) の例では、最上位の階層のノードは末端ノードではないため、ステップ１２０３の判定はＮＯとなる。
【００５４】
ステップ１２０３の判定がＮＯの場合は、中間ノードの処理が実行される（図１２のステップ１２０４）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００５５】
図１３は、図１２のステップ１２０４からコールされる中間ノードの処理を示す動作フローチャートである。
まず、子ノードが検索される（図１３のステップ１３０１）。図６(a) の例では、最上位の階層のノードのデータ構造体には子ノードへのポインタのリストの先頭に、“色＝赤”属性値が設定されているノードへのポインタが記憶されているため、ステップ１３０１の判定がＹＥＳとなる。
【００５６】
ステップ１３０１の判定がＹＥＳの場合は、対象子ノードに引当依頼がなされる（図１３のステップ１３０２）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００５７】
図１３のステップ１３０２からコールされる引当依頼処理は、前述した図１２の動作フローチャートによって示される。
まず、自ノードのデータ構造体に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードのデータ構造体に設定されている属性“色”は、上記引当条件に含まれていないため、ステップ１２０１の判定はＮＯとなる。
【００５８】
ステップ１２０１の判定がＮＯの場合は、自ノードが末端ノードであるか否かが判定される（ステップ１２０３）。図６(a) の例では、“色＝赤”属性値が設定されているノードは末端ノードではないため、ステップ１２０３の判定はＮＯとなる。
【００５９】
ステップ１２０３の判定がＮＯの場合は、中間ノードの処理が実行される（図１２のステップ１２０４）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００６０】
この結果、図１２のステップ１２０４から再び図１３の動作フローチャートの中間ノードの処理がコールされる。
まず、子ノードが検索される（図１３のステップ１３０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードのデータ構造体には子ノードへのポインタのリストの先頭に、“サイズ＝Ｍ”属性値が設定されているノードへのポインタが記憶されているため、ステップ１３０１の判定がＹＥＳとなる。
【００６１】
ステップ１３０１の判定がＹＥＳの場合は、前述したように、対象子ノードに引当依頼がなされる（図１３のステップ１３０２）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００６２】
この結果、図１３のステップ１３０２から再び図１２の動作フローチャートで示される引当依頼処理がコールされる。
まず、自ノードのデータ構造体に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードの配下の“サイズ＝Ｍ”属性値が設定されているノードのデータ構造体に設定されている属性“サイズ”は、上記引当条件に含まれているため、ステップ１２０１の判定はＹＥＳとなる。
【００６３】
ステップ１２０１の判定がＹＥＳの場合は、自ノードのデータ構造体に設定されている値が引当条件に合致しているか否かが判定される（図１２のステップ１２０２）。図６(a) の例では、“サイズ＝Ｍ”属性値は、上記引当条件に合致しないため、ステップ１２０２の判定はＮＯとなる。
【００６４】
ステップ１２０２の判定がＮＯの場合は、不足数に引当数がセットされて（ステップ１２０６）、図１３のステップ１３０２の引当依頼処理を終了する。図６(a) の例では、不足数＝２５０である。
【００６５】
図１３において、ステップ１３０２の処理の後、不足数が引当数に等しいか否かが判定される（ステップ１３０３）。図６(a) の例では、色＝赤”属性値が設定されているノードの“サイズ＝Ｍ”属性値が設定されている子ノードに対する引当依頼処理からのリターン時には、上述のように不足数＝２５０＝引当数であるため、ステップ１３０３の判定がＹＥＳとなる。
【００６６】
ステップ１３０３の判定がＹＥＳの場合には、次の子ノードが検索される（図１３のステップ１３０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードのデータ構造体において子ノードへのポインタのリストの２番目に、“サイズ＝Ｌ”属性値が設定されているノードへのポインタが記憶されているため、ステップ１３０１の判定がＹＥＳとなる。
【００６７】
ステップ１３０１の判定がＹＥＳの場合は、前述したように、対象子ノードに引当依頼がなされる（図１３のステップ１３０２）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００６８】
この結果、図１３のステップ１３０２から再び図１２の動作フローチャートで示される引当依頼処理がコールされる。
まず、自ノードのデータ構造体に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されているノードのデータ構造体に設定されている属性“サイズ”は、上記引当条件に含まれているため、ステップ１２０１の判定はＹＥＳとなる。
【００６９】
ステップ１２０１の判定がＹＥＳの場合は、自ノードのデータ構造体に設定されている値が引当条件に合致しているか否かが判定される（図１２のステップ１２０２）。図６(a) の例では、“サイズ＝Ｌ”属性値は、上記引当条件に合致するため、ステップ１２０２の判定はＹＥＳとなる。
【００７０】
ステップ１２０２の判定がＹＥＳの場合には、自ノードが末端ノードであるか否かが判定される（ステップ１２０３）。図６(a) の例では、“色＝赤”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されているノードは末端ノードであるため、ステップ１２０３の判定はＮＯとなる。
【００７１】
ステップ１２０３の判定がＹＥＳの場合には、末端ノードの処理が実行される（図１２のステップ１２０５）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：２５０
である。
【００７２】
図１４は、図１２のステップ１２０５からコールされる末端ノードの処理を示す動作フローチャートである。
まず、その末端ノードのデータ構造体に設定されている在庫数が引当数より多いか否かが判定される（図１４のステップ１４０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されている末端ノードのデータ構造体に設定されている在庫数＝２００は引当数＝２５０より少ないため、ステップ１４０１の判定はＮＯとなる。
【００７３】
ステップ１４０１の判定がＮＯの場合には、引当数から現在の在庫数を減算して得られる値が不足数にセットされ、新たな在庫数が０にされる（図１４のステップ１４０３）。図６(a) →図６(b) →図７(c) の例では、“色＝赤”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されている末端ノードの処理においては、
不足数＝引当数−在庫数＝２５０−２００＝５０
とされ、データ構造体には新たな在庫数として、
在庫数＝０
がセットされる。
【００７４】
その後、上記末端ノードのデータ構造体のノード更新フラグが１にセットされて（図１４のステップ１４０４）、図１２のステップ１２０５の末端ノードの処理を終了し、続いて、図１３のステップ１３０２の引当依頼処理を終了する。
【００７５】
図１３において、ステップ１３０２の処理の後、不足数が引当数に等しいか否かが判定される（ステップ１３０３）。図６(a) の例では、色＝赤”属性値が設定されているノードの“サイズ＝Ｌ”属性値が設定されている子ノードに対する引当依頼処理からのリターン時には、上述のように不足数＝５０≠引当数＝２５０であるため、ステップ１３０３の判定がＮＯとなる。
【００７６】
ステップ１３０３の判定がＮＯの場合には、現在の中間ノードのデータ構造体のノード更新フラグに１がセットされる（図１３のステップ１３０４）。即ち、配下のノードで在庫数が更新され、その親ノードである自ノードの在庫数も次のように更新されるため、ノード更新フラグがセットされることになる。図７(c) の例では、色＝赤”属性値が設定されているノードのデータ構造体のノード更新フラグが１にセットされる。
【００７７】
続いて、引当数から不足数を減算して得られる値を、現在の中間ノードのデータ構造体の在庫数から減算して得られる値が、新たな在庫数としてセットされ、また、不足数が新たな引当数にセットされる（図１３のステップ１３０５）。図６(b) →図７(c) の例では、色＝赤”属性値が設定されているノードのデータ構造体の在庫数について、
0004004619.tif 000002
となり、新たな引当数は、
引当数＝不足数＝５０
となる。
【００７８】
上記処理の後、不足数が０になったか否かが判定される（図１３のステップ１３０６）。上記例では、不足数＝５０≠０であるため、ステップ１３０６の判定はＮＯとなる。
【００７９】
ステップ１３０６の判定がＮＯの場合は、次の子ノードが検索される（図１３のステップ１３０１）。図６(a) の例では、“色＝赤”属性値が設定されているノードのデータ構造体において子ノードへのポインタのリストの３番目に、“サイズ＝Ｓ”属性値が設定されているノードへのポインタが記憶されているため、ステップ１３０１の判定がＹＥＳとなる。
【００８０】
ステップ１３０１の判定がＹＥＳの場合は、前述したように、対象子ノードに引当依頼がなされる（図１３のステップ１３０２）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。図７(c) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：５０
となる。
【００８１】
この結果、図１３のステップ１３０２から再び図１２の動作フローチャートで示される引当依頼処理がコールされる。
まず、自ノードのデータ構造体に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図７(c) の例では、“色＝赤”属性値が設定されているノードの配下の“サイズ＝Ｓ”属性値が設定されているノードのデータ構造体に設定されている属性“サイズ”は、上記引当条件に含まれているため、ステップ１２０１の判定はＹＥＳとなる。
【００８２】
ステップ１２０１の判定がＹＥＳの場合は、自ノードのデータ構造体に設定されている値が引当条件に合致しているか否かが判定される（図１２のステップ１２０２）。図７(c) の例では、“サイズ＝Ｓ”属性値は、上記引当条件に合致しないため、ステップ１２０２の判定はＮＯとなる。
【００８３】
ステップ１２０２の判定がＮＯの場合は、不足数に引当数がセットされて（ステップ１２０６）、図１３のステップ１３０２の引当依頼処理を終了する。図７(c) の例では、不足数＝５０である。
【００８４】
図１３において、ステップ１３０２の処理の後、不足数が引当数に等しいか否かが判定される（ステップ１３０３）。図７(c) の例では、色＝赤”属性値が設定されているノードの“サイズ＝Ｓ”属性値が設定されている子ノードに対する引当依頼処理からのリターン時には、上述のように不足数＝５０＝引当数であるため、ステップ１３０３の判定がＹＥＳとなる。
【００８５】
ステップ１３０３の判定がＹＥＳの場合は、次の子ノードが検索される（図１３のステップ１３０１）。図７(c) の例では、“色＝赤”属性値が設定されているノードのデータ構造体において子ノードへのポインタのリストの３番目以降にはポインタは記憶されていないため、ステップ１３０１の判定がＮＯとなる。
【００８６】
ステップ１３０１の判定がＮＯの場合には、図１２のステップ１２０４の中間ノードの処理を終了し、更に図１３のステップ１３０２の引当依頼処理を終了する。図７(c) の例では、“色＝赤”属性値が設定されている中間ノードに対する引当依頼処理が終了し、制御が、最上の階層のノードについての図１２の動作フローチャートで示される中間ノードの処理のステップ１３０２の直後に戻る。
【００８７】
図１３において、ステップ１３０２の処理の後、不足数が引当数に等しいか否かが判定される（ステップ１３０３）。図７(c) の例では、最上位の階層のノードの“色＝赤”属性値が設定されている子ノードに対する引当依頼処理からのリターン時には、不足数＝５０であり、また、引当数は、図６(a) の状態であるから２５０である。このため、ステップ１３０３の判定がＮＯとなる。
【００８８】
ステップ１３０３の判定がＮＯの場合には、前述したように、現在の中間ノードのデータ構造体のノード更新フラグに１がセットされる（図１３のステップ１３０４）。図７(c) の例では、最上位の階層のノードのデータ構造体のノード更新フラグが１にセットされる。
【００８９】
続いて、引当数から不足数を減算して得られる値を、現在の中間ノードのデータ構造体の在庫数から減算して得られる値が、新たな在庫数としてセットされ、また、不足数が新たな引当数にセットされる（図１３のステップ１３０５）。図６(b) →図７(c) の例では、最上位の階層のノードのデータ構造体の在庫数について、
0004004619.tif 000003
となり、新たな引当数は、
引当数＝不足数＝５０
となる。
【００９０】
上記処理の後、不足数が０になったか否かが判定される（図１３のステップ１３０６）。上記例では、不足数＝５０≠０であるため、ステップ１３０６の判定はＮＯとなる。
【００９１】
ステップ１３０６の判定がＮＯの場合は、次の子ノードが検索される（図１３のステップ１３０１）。図７(c) の例では、最上位の階層のノードのデータ構造体において子ノードへのポインタのリストの２番目に、“色＝青”属性値が設定されているノードへのポインタが記憶されているため、ステップ１３０１の判定がＹＥＳとなる。
【００９２】
ステップ１３０１の判定がＹＥＳの場合は、前述したように、対象子ノードに引当依頼がなされる（図１３のステップ１３０２）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。図７(c) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：５０
となる。
【００９３】
この結果、図１３のステップ１３０２から再び図１２の動作フローチャートで示される引当依頼処理がコールされる。
まず、自ノードのデータ構造体に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図７(c) の例では、“色＝青”属性値が設定されているノードのデータ構造体に設定されている属性“色”は、上記引当条件に含まれていないため、ステップ１２０１の判定はＮＯとなる。
【００９４】
ステップ１２０１の判定がＮＯの場合は、自ノードが末端ノードであるか否かが判定される（ステップ１２０３）。図７(c) の例では、“色＝青”属性値が設定されているノードは末端ノードではないため、ステップ１２０３の判定はＮＯとなる。
【００９５】
ステップ１２０３の判定がＮＯの場合は、中間ノードの処理が実行される（図１２のステップ１２０４）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：５０
である。
【００９６】
この結果、図１２のステップ１２０４から再び図１３の動作フローチャートの中間ノードの処理がコールされる。
まず、子ノードが検索される（図１３のステップ１３０１）。図７(c) の例では、“色＝青”属性値が設定されているノードのデータ構造体には子ノードへのポインタのリストの先頭に、“サイズ＝Ｌ”属性値が設定されているノードへのポインタが記憶されているため、ステップ１３０１の判定がＹＥＳとなる。
【００９７】
ステップ１３０１の判定がＹＥＳの場合は、前述したように、対象子ノードに引当依頼がなされる（図１３のステップ１３０２）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図６(a) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：５０
である。
【００９８】
この結果、図１３のステップ１３０２から再び図１２の動作フローチャートで示される引当依頼処理がコールされる。
まず、自ノードのデータ構造体に設定されている属性が引当条件に含まれているか否かが判定される（図１２のステップ１２０１）。図７(c) の例では、“色＝青”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されているノードのデータ構造体に設定されている属性“サイズ”は、上記引当条件に含まれているため、ステップ１２０１の判定はＹＥＳとなる。
【００９９】
ステップ１２０１の判定がＹＥＳの場合は、自ノードのデータ構造体に設定されている値が引当条件に合致しているか否かが判定される（図１２のステップ１２０２）。図７(c) の例では、“サイズ＝Ｌ”属性値は、上記引当条件に合致するため、ステップ１２０２の判定はＹＥＳとなる。
【０１００】
ステップ１２０２の判定がＹＥＳの場合には、自ノードが末端ノードであるか否かが判定される（ステップ１２０３）。図７(c) の例では、“色＝青”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されているノードは末端ノードであるため、ステップ１２０３の判定はＮＯとなる。
【０１０１】
ステップ１２０３の判定がＹＥＳの場合には、末端ノードの処理が実行される（図１２のステップ１２０５）。この場合の入力は引当条件と引当数であり、返却値は不足数となる。前述した図７(c) の例では、
引当条件：“サイズＬの商品Ａ”
引当数：５０
である。
【０１０２】
末端ノードの処理は、前述した図１４の動作フローチャートで示される。
まず、その末端ノードのデータ構造体に設定されている在庫数が引当数より多いか否かが判定される（図１４のステップ１４０１）。図７(c) の例では、“色＝青”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されている末端ノードのデータ構造体に設定されている在庫数＝１００は引当数＝５０より多いため、ステップ１４０１の判定はＹＥＳとなる。
【０１０３】
ステップ１４０１の判定がＹＥＳの場合には、在庫数から引当数を減算して得られる値が新たな在庫数としてセットされると共に、不足数が０にされる（図１４のステップ１４０２）。図７(c) →図７(d) の例では、“色＝青”属性値が設定されているノードの配下の“サイズ＝Ｌ”属性値が設定されている末端ノードの処理においては、
在庫数＝在庫数−引当数＝１００−５０＝５０
不足数＝０
とされる。
【０１０４】
その後、上記末端ノードのデータ構造体のノード更新フラグが１にセットされて（図１４のステップ１４０４）、図１２のステップ１２０５の末端ノードの処理を終了し、続いて、図１３のステップ１３０２の引当依頼処理を終了する。
【０１０５】
図１３において、ステップ１３０２の処理の後、不足数が引当数に等しいか否かが判定される（ステップ１３０３）。図７(d) の例では、色＝青”属性値が設定されているノードの“サイズ＝Ｌ”属性値が設定されている子ノードに対する引当依頼処理からのリターン時には、上述のように不足数＝０≠引当数＝５０であるため、ステップ１３０３の判定がＮＯとなる。
【０１０６】
ステップ１３０３の判定がＮＯの場合は、現在の中間ノードのデータ構造体のノード更新フラグに１がセットされる（図１３のステップ１３０４）。図７(d) の例では、色＝青”属性値が設定されているノードのデータ構造体のノード更新フラグが１にセットされる。
【０１０７】
続いて、引当数から不足数を減算して得られる値を、現在の中間ノードのデータ構造体の在庫数から減算して得られる値が、新たな在庫数としてセットされ、また、不足数が新たな引当数にセットされる（図１３のステップ１３０５）。図７(c) →図７(d) の例では、色＝青”属性値が設定されているノードのデータ構造体の在庫数について、
0004004619.tif 000004
となり、新たな引当数は、
引当数＝不足数＝０
となる。
【０１０８】
上記処理の後、不足数が０になったか否かが判定される（図１３のステップ１３０６）。上記例では、不足数＝０であるため、ステップ１３０６の判定はＹＥＳとなる。
【０１０９】
ステップ１３０６の判定がＹＥＳの場合は、図１２のステップ１２０４の中間ノードの処理を終了し、更に図１３のステップ１３０２の引当依頼処理を終了する。図７(d) の例では、“色＝青”属性値が設定されている中間ノードに対する引当依頼処理が終了し、制御が、最上の階層のノードについての図１２の動作フローチャートで示される中間ノードの処理のステップ１３０２の直後に戻る。
【０１１０】
図１３において、ステップ１３０２の処理の後、不足数が引当数に等しいか否かが判定される（ステップ１３０３）。図７(d) の例では、最上位の階層のノードの“色＝青”属性値が設定されている子ノードに対する引当依頼処理からのリターン時には、不足数＝０であり、また、引当数は、図７(c) の状態であるから５０である。このため、ステップ１３０３の判定がＹＥＳとなる。
【０１１１】
ステップ１３０３の判定がＮＯの場合には、前述したように、現在の中間ノードのデータ構造体のノード更新フラグに１がセットされる（図１３のステップ１３０４）。図７(d) の例では、最上位の階層のノードのデータ構造体のノード更新フラグが１に再度セットされる。
【０１１２】
続いて、引当数から不足数を減算して得られる値を、現在の中間ノードのデータ構造体の在庫数から減算して得られる値が、新たな在庫数としてセットされ、また、不足数が新たな引当数にセットされる（図１３のステップ１３０５）。図７(c) →図７(d) の例では、最上位の階層のノードのデータ構造体の在庫数について、
0004004619.tif 000005
となり、新たな引当数は、
引当数＝不足数＝０
となる。
【０１１３】
上記処理の後、不足数が０になったか否かが判定される（図１３のステップ１３０６）。上記例では、不足数＝０であるため、ステップ１３０６の判定はＹＥＳとなる。
【０１１４】
ステップ１３０６の判定がＹＥＳの場合には、図１２のステップ１２０４の中間ノードの処理を終了し、更に図１３のステップ１３０２の引当依頼処理を終了する。図７(d) の例では、最上位のノードに対する引当依頼処理が終了し、制御が、図１１の動作フローチャートで示される引当処理のステップ１１０１の直後に戻る。
【０１１５】
図１１において、不足数が０であるか否かが判定される（図１１のステップ１１０２）。図７(d) の例では、不足数＝０であるため、ステップ１１０２の判定はＹＥＳとなる。
【０１１６】
ステップ１１０２の判定がＹＥＳの場合には、引当成功が通知されて、在庫引当装置１０４による在庫引当処理が終了する。
一方、ステップ１１０２の判定がＮＯの場合には、ノード更新が全て破棄され（図１１のステップ１１０３）、在庫情報ツリーオンメモリ構造記憶装置１０３の記憶内容は変化しない。
【０１１７】
そして、引当不能が通知されて、在庫引当装置１０４による在庫引当処理が終了する。
なお、中間ノードのデータ構造体に設定されている属性と値が引当条件に合致している場合であって（図１２のステップ１２０１の判定がＹＥＳ→１２０２の判定がＹＥＳ→１２０３の判定がＮＯ→１２０４）、その中間ノードの処理（図１３）における対象子ノードに対する引当依頼処理（図１３のステップ１３０２、図１２）において、その子ノードが末端ノードである場合には、その末端ノードのデータ構造体に設定されている属性が引当条件に含まれていない場合であっても、末端ノードの処理（図１２のステップ１２０５、図１４）において、在庫引当処理が実行される。
分散化が可能な在庫引当処理
上述の在庫引当処理においては、末端ノードにおいて、在庫数が０になるまでの限度で在庫引当処理が実行される。
【０１１８】
これに対して、中間ノードのデータ構造体に設定されている属性と値が引当条件に合致している場合であって、その中間ノードの処理における対象子ノードである末端ノードに対する引当依頼処理において、その末端ノードのデータ構造体に設定されている属性が引当条件に含まれていない場合には、所定の在庫数下限までの限度で在庫引当処理が実行されるように構成することもできる。
【０１１９】
図１５は、図１２を置き換える引当依頼処理の動作フローチャートである。図１５において、図１２の場合と同じ番号が付されたステップは、図１２の場合と同じ機能を実現する。
【０１２０】
図１２の動作フローチャートと異なる点として、図１５の動作フローチャートでは、中間ノードのデータ構造体に設定されている属性と値が引当条件に合致している場合であって（図１５のステップ１５０１の判定がＹＥＳ→１５０２の判定がＹＥＳ→１５０３の判定がＮＯ→１５０４）、その中間ノードの処理（図１３）における対象子ノードに対する引当依頼処理（図１３のステップ１３０２、図１５）において、子ノードのデータ構造体に設定されている属性が引当条件に含まれておらず（図１５のステップ１２０１の判定がＮＯ）、かつ自ノードが末端ノードである場合（図１５のステップ１５０１）には、ステップ１２０５とは異なる在庫数下限までの限度での末端ノードの処理が実行される（図１５のステップ１５０２）。
【０１２１】
図１６は、図１５のステップ１５０２の末端ノードの処理を示す動作フローチャートである。
まず、その末端ノードのデータ構造体に設定されている在庫数から所定の在庫数下限を減算して得られる数が引当数より多いか否かが判定される（図１６のステップ１６０１）。
【０１２２】
ステップ１６０１の判定がＹＥＳの場合には、図１４のステップ１４０２の場合と同様に、在庫数から引当数を減算して得られる値が新たな在庫数としてセットされると共に、不足数が０にされる（図１６のステップ１６０２）。
【０１２３】
一方、ステップ１６０１の判定がＮＯの場合には、在庫数から在庫数下限を減算して得られる値を、引当数から減算して得られる値が不足数にセットされ、新たな在庫数が在庫数下限にされる（図１６のステップ１６０３）。
【０１２４】
ステップ１６０４の処理は図１４のステップ１４０４の処理と同様である。
以上示したように、在庫数下限までの限度での末端ノードの処理が実行されることにより、特定のノードに偏って在庫引当が行われてしまうという傾向を回避することができ、在庫引当の分散化を図ることができる。
在庫仕入装置１０５の動作の詳細
在庫仕入が発生した場合には、在庫仕入装置１０５が在庫情報ツリーオンメモリ構造記憶装置１０３に記憶されている在庫情報ツリーオンメモリ構造に対して在庫仕入処理を実行する。
【０１２５】
在庫仕入処理においては、仕入条件に合致するノードは、ただ１つの末端ノードと、その末端ノードが含まれる上位の中間ノードである。
図１７〜図１９は、在庫仕入装置１０５の動作を示す動作フローチャートであり、図１７はメイン動作フローチャートである。
【０１２６】
まず、最上位のノードに仕入依頼がなされる（図１７のステップ１７０１）。
この場合の入力は仕入条件と仕入数であり、返却値はＯＫ又はＮＧとなる。
図１８は、図１７のステップ１７０１からコールされる仕入依頼処理を示す動作フローチャートである。
【０１２７】
仕入依頼処理においては、現在処理中のノードのデータ構造体に設定されている属性と値が仕入条件に合っていなければ、即座にＮＧが返答される（図１８のステップ１８０１の判定がＮＯ→１８１１、又はステップ１８０１の判定がＹＥＳ→１８０２の判定がＮＯ→１８１１）。
【０１２８】
逆に、現在処理中のノードのデータ構造体に設定されている属性と値が仕入条件に合っており、かつ自ノードが中間ノードである場合には、中間ノードの処理が実行される（図１８のステップ１８０１の判定がＹＥＳ→１８０２の判定がＹＥＳ→１８０３の判定がＮＯ→１８０４）。この場合の入力は仕入条件と仕入数であり、返却値はＯＫ又はＮＧである。
【０１２９】
図１９は、図１８のステップ１８０４からコールされる中間ノードの処理を示す動作フローチャートである。
中間ノードの処理においては、そのデータ構造体の子ノードへのポインタのリストが検索されながら、対象子ノードに対して仕入依頼処理が実行される（図１９のステップ１９０１の判定がＹＥＳ→１９０２→１９０３→１９０１のループ処理）。
【０１３０】
対象子ノードに対する仕入依頼処理では、図１８の動作フローチャートが再度実行され、子ノードが中間ノードであれば再帰的に中間ノードの処理が実行される（図１８のステップ１８０１の判定がＹＥＳ→１８０２の判定がＹＥＳ→１８０３の判定がＮＯ→１８０４）。
【０１３１】
一方、子ノードが末端ノードであって、かつそのデータ構造体に設定されている属性と値が仕入条件に合っていれば（図１８のステップ１８０の判定がＹＥＳ→１８０２の判定がＹＥＳ→１８０３の判定がＹＥＳ）、その末端ノードのデータ構造体の在庫数に仕入数が加算され（図１８のステップ１８０８）、そのデータ構造体のノード更新フラグに１がセットされ（図１８のステップ１８０９）、親ノードに対してＯＫが返答される（図１８のステップ１８１０）。
【０１３２】
末端ノードからＯＫが返答されると、図１９の中間ノードの処理において、ステップ１９０３の判定がＯＫとなって、その中間ノードのデータ構造体のノード更新フラグに１がセットされ（図１９のステップ１９０４）、そのデータ構造体の在庫数に仕入数が加算され（図１９のステップ１９０５）、ＯＫが返答される（図１９のステップ１９０６）。
【０１３３】
一方、中間ノードの処理において、何れの子ノードからもＯＫが返答されず、ステップ１９０１の判定がＮＯとなった場合には、ＮＧが返答される（図１９のステップ１９０７）。
【０１３４】
中間ノードの処理においてＯＫが返答された場合には、その中間ノードに対して仕入依頼処理を実行させた親ノードに対してＯＫが返答され（図１８のステップ１８０４→１８０５の判定がＯＫ→ステップ１８０６）、逆に、ＮＧが返答された場合には、その中間ノードに対して仕入依頼処理を実行させた親ノードに対してＮＧが返答される（図１８のステップ１８０４→１８０５の判定がＮＧ→ステップ１８０７）。
【０１３５】
以上のようにして、仕入処理の結果が在庫情報ツリーオンメモリ構造の最上位の階層のノードまで戻ってくると、図１７のステップ１７０１の仕入依頼処理が終了し、ＯＫが返されたか否かが判定される（図１７のステップ１７０２）。
【０１３６】
ステップ１７０２でＯＫが返されたと判定された場合には、仕入成功が通知されて、在庫仕入装置１０５による在庫仕入処理が終了する。
一方、ステップ１７０２でＮＧが返されたと判定された場合には、ノード更新が全て破棄され（図１７のステップ１７０３）、在庫情報ツリーオンメモリ構造記憶装置１０３の記憶内容は変化しない。
【０１３７】
そして、引当不能が通知されて、在庫仕入装置１０５による在庫仕入処理が終了する。
在庫情報ツリーＤＢ更新装置１０６の動作の詳細
在庫情報ツリーオンメモリ構造記憶装置１０３に記憶される在庫情報ツリーオンメモリ構造の更新内容は、一定期間毎に在庫情報ツリーＤＢ更新装置１０６によって在庫情報ツリーＤＢ記憶装置１０１に記憶される在庫情報ツリーＤＢに反映させられる。
【０１３８】
前述したように、在庫情報ツリーオンメモリ構造における各ノードに対応するデータ構造体に記憶されるノード更新フラグは、それが含まれるノードの在庫数が在庫引当装置１０４及び在庫仕入装置１０５により更新された場合に１にセットされる。在庫情報ツリーＤＢ更新装置１０６は、在庫情報ツリーオンメモリ構造において、図２４に示されるように、ノード更新フラグ＝１がセットされているノードについてのみ、在庫情報ツリーＤＢ記憶装置１０１に記憶されている在庫情報ツリーＤＢのテーブルに対して、データ更新のためのＳＱＬ文を実行する。これにより、在庫情報ツリーＤＢと在庫情報ツリーオンメモリ構造との効率的な整合化を図ることができる。
【０１３９】
図２０〜図２３は、在庫情報ツリーＤＢ更新装置１０６の動作を示す動作フローチャートであり、図２０はメイン動作フローチャートである。
まず最上位のノードに更新依頼がなされる（図２０のステップ２００１）。
【０１４０】
図２１は、図２０のステップ２００１からコールされる更新依頼処理を示す動作フローチャートである。
更新依頼処理においては、自ノードが中間ノードであれば中間ノードの更新処理が実行され（図２１のステップ２１０１の判定がＮＯ→２１０２）、自ノードが末端ノードであれば末端ノードの更新処理が実行される（ステップ２１０１の判定がＹＥＳ→２１０３）。
【０１４１】
図２２は、図２１のステップ２１０２からコールされる中間ノードの更新処理を示す動作フローチャートである。
中間ノードの更新処理においては、まず、自ノードのデータ構造体に記憶されているノード更新フラグの値が１なら、そのノードに関する以下に示されるＳＱＬ文が発行される（図２２のステップ２２０１の判定がＹＥＳ→２２０２）。
update テーブル名  set 在庫数＝＜在庫数＞  where ＩＤ＝＜ノードＩＤ＞
上記ＳＱＬ文において、＜在庫数＞と＜ノードＩＤ＞は、それぞれデータ構造体に記憶されている在庫数及びノードＩＤである。
【０１４２】
その後、自ノードのデータ構造体に記憶されているノード更新フラグの値が０に戻される（ステップ２２０３）。
続いて、自ノードのデータ構造体の子ノードへのポインタのリストが検索されながら、対象子ノードに対して更新依頼処理が実行される（図２２のステップ２２０４の判定がＹＥＳ→２２０５→２２０４のループ処理）。
【０１４３】
対象子ノードに対する更新依頼処理では、図２１の動作フローチャートが再度実行され、子ノードが中間ノードであれば再帰的に中間ノードの更新処理が実行される（図２１のステップ２１０１の判定がＮＯ→２２０２）。
【０１４４】
一方、更新依頼処理において、自ノードが末端ノードであれば末端ノードの更新処理が実行される（ステップ２１０１の判定がＹＥＳ→２１０３）。
図２３は、図２１のステップ２１０３からコールされる末端ノードの更新処理を示す動作フローチャートである。
【０１４５】
末端ノードの更新処理では、自ノードのデータ構造体に記憶されているノード更新フラグの値が１でなければ何も実行されず、ノード更新フラグの値が１であるなら、そのノードに関して中間ノードの場合と同様の以下に示されるＳＱＬ文が発行される（図２３のステップ２３０１の判定がＹＥＳ→２３０２）。
update テーブル名  set 在庫数＝＜在庫数＞  where ＩＤ＝＜ノードＩＤ＞
その後、自ノードのデータ構造体に記憶されているノード更新フラグの値が０に戻される（ステップ２３０３）。
【０１４６】
以上のようにして、更新処理の再帰処理が終了して最上位の階層のノードに対する更新依頼処理に制御が戻ってくると、図２０のステップ２００１の更新処理が終了し、在庫情報ツリーＤＢ更新装置１０６による更新処理が終了する。
在庫情報ツリーＤＢの他の実施の形態
図２５(a) は、在庫情報ツリーＤＢ記憶装置１０１に記憶される在庫情報ツリーＤＢの他の実施の形態を示す図である。
【０１４７】
図２又は図９に示される在庫情報ツリーＤＢの実施の形態では、在庫情報ツリーの上位階層に含まれるノードほど、それに対応するレコードのＩＤフィールドには小さな値のノードＩＤが設定され、また、同一階層内では左側のノードほどそれに対応するレコードのＩＤフィールドには小さな値のノードＩＤが設定されることにより、小さいな値のノードＩＤを有するノードほど、在庫情報ツリー上での在庫引当処理におけるナビゲーションの優先順位が高くなるように構成される。
【０１４８】
これに対して、図２５(a) に示される他の実施の形態では、異階層間の優先順位は、親ＩＤフィールドでの設定関係によって規定され、また、同一階層内での優先順位は、新たに設けられる前ノードＩＤでの設定関係によって規定されるように、在庫情報ツリーＤＢが構成される。
【０１４９】
この結果、前ノードＩＤフィールドでの設定内容に従って、例えば図２５(b) に示されるようなナビゲーションの優先順位を規定することができる。
また、このような構成により、図２６に示されるように、任意の階層に対して任意の優先順位のノードを簡単に追加等することが可能となる。
本実施の形態を実現するプログラムが記録された記録媒体についての補足
本発明は、コンピュータにより使用されたときに、上述の本発明の実施の形態の各構成によって実現される機能と同様の機能をコンピュータに行わせるためのコンピュータ読出し可能記録媒体として構成することもできる。
【０１５０】
この場合に、図２７に示されるように、例えばフロッピィディスク、ＣＤ−ＲＯＭディスク、光ディスク、リムーバブルハードディスク等の可搬型記録媒体２４０２や、ネットワーク回線２７０３経由で、本発明の実施の形態の各種機能を実現するプログラムが、ＮＭＳサーバ２７０１の本体２７０４内のメモリ（ＲＡＭ又はハードディスク等）２７０５にロードされて、実行される。
【０１５１】
【発明の効果】
本発明によれば、在庫引当時に条件指定が曖昧であっても、ツリーデータの木構造における検索の優先順位に対応する在庫引当戦略方針に沿った自動的な在庫引当を実現することが可能となる。
【０１５２】
また、データベーステーブルからメモリ装置上にツリーデータを展開し、そのツリーデータに対して在庫引当又は在庫仕入を実行することにより、ツリーデータへの高速アクセスが可能となる。
【０１５３】
また、データベース上の各レコード上の識別情報フィールドの内容に従ってデータベーステーブルからメモリ装置上にツリーデータを展開することにより、データベーステーブルに対する簡単な問合せ文によって、データベーステーブルからメモリ装置上にツリーデータを展開することが可能となる。
【０１５４】
また、データベース上の各レコード上の管理対象種別フィールドの内容に従って、データベーステーブルからメモリ装置上に管理対象種別毎のツリーデータを展開することにより、やはり、データベーステーブルに対する簡単な問合せ文によって、データベーステーブルからメモリ装置上にツリーデータを展開することが可能となる。
【０１５５】
更に、ツリーデータを構成する各ノードに、その各ノードに対応する在庫数が更新されたか否かを示すノード更新情報を保持し、そのノード更新情報に従ってメモリ装置上に展開されたツリーデータの更新状態がデータベーステーブルに反映させられることにより、メモリ装置上のツリーデータとデータベーステーブルとの効率的な整合化を図ることが可能となる。
【図面の簡単な説明】
【図１】本発明の実施の形態のシステム構成図である。
【図２】在庫情報ツリーＤＢのデータ構成例（その１）を示す図である。
【図３】在庫情報ツリーの例を示す図である。
【図４】在庫情報ツリーオンメモリ構造のデータ構成図（その１）である。
【図５】在庫情報ツリーオンメモリ構造のデータ構成図（その２）である。
【図６】在庫引当の手順例を示す図（その１）である。
【図７】在庫引当の手順例を示す図（その２）である。
【図８】在庫情報ツリーオンメモリ構造作成装置の動作フローチャートである。
【図９】在庫情報ツリーＤＢのデータ構成例（その２）を示す図である。
【図１０】在庫情報ツリーオンメモリ構造作成処理の説明図である。
【図１１】引当処理のメイン動作フローチャートである。
【図１２】引当依頼処理の動作フローチャートである。
【図１３】引当処理における中間ノードの処理の動作フローチャートである。
【図１４】引当処理における末端ノードの処理の動作フローチャートである。
【図１５】分散化が可能な引当依頼処理の動作フローチャートである。
【図１６】引当処理における在庫数下限がある末端ノードの処理の動作フローチャートである。
【図１７】仕入処理のメイン動作フローチャートである。
【図１８】仕入依頼処理の動作フローチャートである。
【図１９】仕入処理における中間ノードの処理の動作フローチャートである。
【図２０】更新処理のメイン動作フローチャートである。
【図２１】更新依頼処理の動作フローチャートである。
【図２２】更新処理における中間ノードの処理の動作フローチャートである。
【図２３】更新処理における末端ノードの処理の動作フローチャートである。
【図２４】更新処理の動作説明図である。
【図２５】在庫情報ツリーＤＢの他の実施の形態の構成図である。
【図２６】在庫情報ツリーＤＢの他の実施の形態の説明図である。
【図２７】本実施の形態を実現するプログラムが記録された記録媒体の説明図である。
【符号の説明】
１０１      在庫情報ツリーＤＢ記憶装置
１０２      在庫情報ツリーオンメモリ構造作成装置
１０３      在庫情報ツリーオンメモリ構造記憶装置
１０４      在庫引当装置
１０５      在庫仕入装置
１０６      在庫情報ツリーＤＢ更新装置
【図１】
0004004619.tif 000006
【図２】
0004004619.tif 000007
【図３】
0004004619.tif 000008
【図４】
0004004619.tif 000009
【図５】
0004004619.tif 000010
【図６】
0004004619.tif 000011
【図７】
0004004619.tif 000012
【図８】
0004004619.tif 000013
【図９】
0004004619.tif 000014
【図１０】
0004004619.tif 000015
【図１１】
0004004619.tif 000016
【図１２】
0004004619.tif 000017
【図１３】
0004004619.tif 000018
【図１４】
0004004619.tif 000019
【図１５】
0004004619.tif 000020
【図１６】
0004004619.tif 000021
【図１７】
0004004619.tif 000022
【図１８】
0004004619.tif 000023
【図１９】
0004004619.tif 000024
【図２０】
0004004619.tif 000025
【図２１】
0004004619.tif 000026
【図２２】
0004004619.tif 000027
【図２３】
0004004619.tif 000028
【図２４】
0004004619.tif 000029
【図２５】
0004004619.tif 000030
【図２６】
0004004619.tif 000031
【図２７】
0004004619.tif 000032