要件定義 / 基本設計 / 詳細設計
基本:共通仕様 / 機能一覧 / テーブル一覧 / 画面一覧 / 画面遷移
詳細:テーブル定義書 / 画面定義書 / イベント仕様書(受注管理)
対象イベント:EV-ORD-101 〜 EV-ORD-504
- 各イベントは「イベント概要/トリガー条件/事前条件/入力/出力/処理内容/検証内容/エラーハンドリング/依存関係」の 9 項目で記述する。
- 事前条件・検証内容・エラーハンドリングは共通仕様の
PRE-*/VAL-*/ERR-*を参照し、個別の内容のみを追記する。 - 「処理内容」の DB アクセスは、対象テーブルと抽出・更新条件まで記述する。
- 参照する業務ルール(
ORD-T*/OD-T*/PRD-T*)はテーブル定義書を参照。 - 画面項目 ID・ボタン ID は画面定義書の定義による。
以下は複数のイベントから参照される共通処理。各イベントでは名称で参照する。
| 名称 | 処理 |
|---|---|
| 受注検索クエリ | Orders を主表とし、Customers(CustomerID)・Employees(EmployeeID)・Shippers(ShipVia)を外部結合する。合計金額は Order Details を OrderID で集計した Σ(UnitPrice × (1 - Discount) × Quantity) に Orders.Freight を加えて求める。抽出条件は各イベントで定義する |
| 状況の判定 | ShippedDate が NULL かつ RequiredDate が当日より前 → 「納期遅延」。ShippedDate が NULL かつそれ以外 → 「未出荷」。ShippedDate が NULL でなく ShippedDate > RequiredDate → 「納期遅延」。それ以外 → 「出荷済」。RequiredDate が NULL のときは遅延と判定しない(ORD-T7) |
| 金額の再計算 | 明細ごとに 価格 = 単価 × (1 - 割引率)、明細金額 = 価格 × 数量(小数第 3 位を四捨五入)を求め、小計 = Σ 明細金額、合計 = 小計 + 送料 を算出して画面に反映する。DB アクセスを伴わない |
| 選択肢の構築 | 顧客は Customers を CompanyName 昇順、担当者は Employees を LastName・FirstName 昇順、配送業者は Shippers を CompanyName 昇順、商品は Products のうち Discontinued が偽のものを ProductName 昇順で取得する |
| 一覧状態の保持 | 検索条件・現在ページ・並べ替え列・並べ替え方向を画面遷移をまたいで保持し、一覧への復帰時に復元する(画面遷移 F-2) |
- イベント概要:受注一覧画面を初期表示し、検索条件の選択肢を構築したうえで既定条件の一覧を表示する。
- トリガー条件:
SC-ORD-01が表示されたとき。メニューからの遷移、および他画面からの復帰を含む。 - 事前条件:
PRE-DB - 入力
- 遷移パラメータ:なし
- 保持された一覧状態(他画面からの復帰時のみ):検索条件・ページ・並べ替え
- 出力:
SC-ORD-01-I01〜SC-ORD-01-I08 - 処理内容
- 「選択肢の構築」により、顧客(
SC-ORD-01-I01)と担当者(SC-ORD-01-I02)の選択肢を取得する。いずれも先頭に空白の選択肢(=すべて)を置く。 - 出荷状況(
SC-ORD-01-I05)の選択肢を固定値「すべて」「未出荷」「出荷済」「納期遅延」で構築し、「すべて」を選択する。 - 保持された一覧状態がある場合はそれを画面へ復元する。ない場合は検索条件を未指定、並べ替えを「受注日の降順、同日は受注 ID の降順」、ページを 1 とする。
- 「受注検索クエリ」を現在の条件で実行し、総件数と当該ページの 20 件を取得する。
- 各行の「状況」を「状況の判定」で求め、
SC-ORD-01-I06に設定する。納期遅延の行は強調表示する。 - 総件数(
SC-ORD-01-I07)とページ情報(SC-ORD-01-I08)を表示する。 - 検索結果が 0 件の場合は、一覧を空にして「該当するデータがありません。」を表示する(エラーとしない)。
- 「選択肢の構築」により、顧客(
- 検証内容:なし
- エラーハンドリング:
ERR-DB - 依存関係:
FN-ORD-01/Orders,Order Details,Customers,Employees,Shippers
- イベント概要:入力された検索条件で受注を絞り込み、1 ページ目を表示する。
- トリガー条件:
SC-ORD-01-B01(検索)が選択されたとき。 - 事前条件:
PRE-DB,PRE-LOADED - 入力:
SC-ORD-01-I01(顧客)、SC-ORD-01-I02(担当者)、SC-ORD-01-I03(受注日開始)、SC-ORD-01-I04(受注日終了)、SC-ORD-01-I05(出荷状況) - 出力:
SC-ORD-01-I06,SC-ORD-01-I07,SC-ORD-01-I08 - 処理内容
- 入力値を検証する(検証内容の節)。エラーがある場合は処理を中断する。
- 「受注検索クエリ」の抽出条件を次のとおり組み立てる。未指定の条件は抽出条件に加えない。
- 顧客:
Orders.CustomerID= 選択された顧客 ID - 担当者:
Orders.EmployeeID= 選択された担当者 ID - 受注日開始:
Orders.OrderDate >= 開始日(当該日を含む) - 受注日終了:
Orders.OrderDate <= 終了日(当該日を含む) - 出荷状況「未出荷」:
Orders.ShippedDateが NULL - 出荷状況「出荷済」:
Orders.ShippedDateが NULL でない - 出荷状況「納期遅延」:
Orders.RequiredDateが NULL でなく、かつ(ShippedDateが NULL かつRequiredDate < 当日)または(ShippedDateが NULL でなくShippedDate > RequiredDate)
- 顧客:
- 並べ替えは現在の指定を維持する。ページは 1 に戻す。
- 総件数と当該ページの 20 件を取得し、
EV-ORD-101の手順 5〜7 と同様に表示する。 - 検索条件・ページ・並べ替えを「一覧状態の保持」として保持する。
- 検証内容
VAL-DATE:受注日開始・終了が日付として解釈できること。両方が指定された場合は開始 <= 終了であること(違反時「受注日の開始は終了以前を指定してください。」)。
- エラーハンドリング:
ERR-VALIDATION,ERR-DB - 依存関係:
FN-ORD-01/EV-ORD-101(選択肢が構築済みであること)
- イベント概要:検索条件を初期状態へ戻し、絞り込みなしで再検索する。
- トリガー条件:
SC-ORD-01-B02(条件クリア)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:なし
- 出力:
SC-ORD-01-I01〜SC-ORD-01-I08 - 処理内容
SC-ORD-01-I01〜SC-ORD-01-I04を未指定に、SC-ORD-01-I05を「すべて」に戻す。- 並べ替えを既定(受注日の降順、同日は受注 ID の降順)に戻し、ページを 1 に戻す。
EV-ORD-102の手順 2 以降を、条件なしの状態で実行する。
- 検証内容:なし
- エラーハンドリング:
ERR-DB - 依存関係:
FN-ORD-01/EV-ORD-102
- イベント概要:検索条件と並び順を保ったまま、指定されたページを表示する。
- トリガー条件:
SC-ORD-01-B05(先頭・前・次・末尾またはページ番号)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:選択されたページ番号(または移動方向)、保持された検索条件・並べ替え
- 出力:
SC-ORD-01-I06,SC-ORD-01-I08 - 処理内容
- 移動先のページ番号を求める。1 未満または総ページ数を超える場合は処理を行わない(ボタンは非活性のため通常は発生しない)。
- 保持された検索条件・並べ替えで「受注検索クエリ」を実行し、当該ページの 20 件を取得する。
- 一覧とページ情報を更新する。総件数は再取得した値で更新する。
- 保持している一覧状態のページ番号を更新する。
- 検証内容:なし
- エラーハンドリング:
ERR-DB - 依存関係:
FN-ORD-01/EV-ORD-102
- イベント概要:指定された列で一覧の並び順を切り替える。
- トリガー条件:
SC-ORD-01-I06の並べ替え可能な列見出しが選択されたとき。 - 事前条件:
PRE-LOADED - 入力:選択された列、保持された検索条件
- 出力:
SC-ORD-01-I06,SC-ORD-01-I08 - 処理内容
- 選択された列が現在の並べ替え列と同じ場合は方向を反転し、異なる場合は当該列の昇順とする。
- 「合計金額」「状況」「操作」の列は並べ替えの対象外であり、選択されても処理を行わない。
- ページを 1 に戻す。
- 保持された検索条件と新しい並べ替えで「受注検索クエリ」を実行し、当該ページの 20 件を取得して一覧を更新する。
- 並べ替え列・方向を「一覧状態の保持」に反映する。
- 検証内容:なし
- エラーハンドリング:
ERR-DB - 依存関係:
FN-ORD-01/EV-ORD-102
- イベント概要:選択された受注の詳細画面(照会)へ遷移する。
- トリガー条件:
SC-ORD-01-I06の受注 ID 列が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:選択された行の
Orders.OrderID - 出力:
SC-ORD-02への遷移(遷移パラメータ:受注 ID) - 処理内容
- 現在の検索条件・ページ・並べ替えを「一覧状態の保持」として保持する。
- 受注 ID を遷移パラメータとして
SC-ORD-02へ遷移する。
- 検証内容:なし
- エラーハンドリング:遷移先の
EV-ORD-201でERR-NOTFOUNDを扱う - 依存関係:
FN-ORD-02/EV-ORD-201
- イベント概要:受注詳細画面を登録モードで開く。
- トリガー条件:
SC-ORD-01-B03(新規登録)が選択されたとき。 - 事前条件:なし
- 入力:なし
- 出力:
SC-ORD-03への遷移(遷移パラメータ:モード=登録) - 処理内容
- 現在の一覧状態を保持する。
- モード=登録として
SC-ORD-03へ遷移する。受注 ID は引き渡さない。
- 検証内容:なし
- エラーハンドリング:なし
- 依存関係:
FN-ORD-03/EV-ORD-301
- イベント概要:一覧の行から出荷ステータス更新ダイアログを開く。
- トリガー条件:
SC-ORD-01-B04(出荷更新)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:選択された行の
Orders.OrderID - 出力:
SC-ORD-04の表示(呼び出し元=SC-ORD-01) - 処理内容
- 受注 ID と呼び出し元を引き渡して
SC-ORD-04を表示し、EV-ORD-401を実行する。 - ダイアログが閉じられた後、
EV-ORD-102と同じ条件で一覧を再検索して表示を更新する(画面遷移 F-5)。
- 受注 ID と呼び出し元を引き渡して
- 検証内容:なし
- エラーハンドリング:
EV-ORD-401に委ねる - 依存関係:
FN-ORD-06/EV-ORD-401,EV-ORD-102
- イベント概要:指定された受注の受注情報・出荷先情報・明細・金額を取得して表示する。
- トリガー条件:
SC-ORD-02が表示されたとき。一覧からの遷移、保存後の遷移、ダイアログを閉じた後の再読み込みを含む。 - 事前条件:
PRE-DB,PRE-PARAM(受注 ID) - 入力:遷移パラメータ:受注 ID
- 出力:
SC-ORD-02-I01〜SC-ORD-02-I20 - 処理内容
OrdersからOrderID= 受注 ID の 1 件を取得する。0 件の場合はERR-NOTFOUNDとする。Customers(CustomerID)・Employees(EmployeeID)・Shippers(ShipVia)を外部結合し、顧客名・電話番号・住所、担当者名、配送業者名を取得する。いずれも NULL の場合は空を表示する。Order DetailsをOrderIDで抽出し、ProductsをProductIDで内部結合して商品名・在庫数・廃番区分を取得する。並び順は商品名の昇順。- 明細ごとに
価格・明細金額を算出し、小計・合計を求める(「金額の再計算」)。 - 「状況の判定」により
SC-ORD-02-I02を設定する。 - 廃番商品(
Products.Discontinuedが真)の行は商品名に「(廃番)」を付記する。 Orders.RowVersionを画面に保持する(表示はしない)。Orders.ShippedDateが NULL でない場合、SC-ORD-02-B01(編集)を非活性にする(ORD-T4)。
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-NOTFOUND - 依存関係:
FN-ORD-02/Orders,Order Details,Products,Customers,Employees,Shippers
- イベント概要:当該受注を編集モードで開く。
- トリガー条件:
SC-ORD-02-B01(編集)が選択されたとき。 - 事前条件:
PRE-LOADED,PRE-EXIST - 入力:
SC-ORD-02-I01(受注 ID) - 出力:
SC-ORD-03への遷移(遷移パラメータ:受注 ID、モード=編集) - 処理内容
Orders.ShippedDateが NULL でない場合は遷移せず、「出荷済の受注は編集できません。出荷を取り消してから編集してください。」を表示する(ORD-T4、ERR-BIZ)。ボタンが非活性のため通常は発生しないが、画面表示後に他利用者が出荷を確定した場合に起こり得る。- 受注 ID とモード=編集を引き渡して
SC-ORD-03へ遷移する。
- 検証内容:なし
- エラーハンドリング:
ERR-BIZ - 依存関係:
FN-ORD-04/EV-ORD-301
- イベント概要:確認のうえ、明細とあわせて受注を削除する。
- トリガー条件:
SC-ORD-02-B02(削除)が選択されたとき。 - 事前条件:
PRE-DB,PRE-LOADED,PRE-EXIST - 入力:
SC-ORD-02-I01(受注 ID)、画面に保持されたOrders.RowVersion - 出力:
SC-ORD-01への遷移、完了メッセージ - 処理内容
- 確認ダイアログ「受注 ID nnn を削除します。よろしいですか?」を表示する。取り消された場合は何もしない。
- トランザクションを開始する。
Order DetailsからOrderID= 受注 ID の行をすべて削除する。OrdersからOrderID= 受注 ID かつRowVersion= 保持していた値の行を削除する。削除件数が 0 件の場合はロールバックし、Ordersに当該OrderIDが存在するかで分岐する。存在すればERR-CONFLICT、存在しなければERR-NOTFOUNDとする。- コミットする。
- 「受注 ID nnn を削除しました。」を表示し、保持された一覧状態で
SC-ORD-01へ遷移する。削除により総件数が減るため一覧は再検索する。
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-CONFLICT,ERR-NOTFOUND - 依存関係:
FN-ORD-05/Orders,Order Details/ ORD-T8
- イベント概要:納品書または請求書のプレビュー画面へ遷移する。
- トリガー条件:
SC-ORD-02-B04(納品書)またはSC-ORD-02-B05(請求書)が選択されたとき。 - 事前条件:
PRE-LOADED,PRE-EXIST - 入力:
SC-ORD-02-I01(受注 ID)、選択されたボタンに対応する帳票種別 - 出力:
SC-ORD-05への遷移(遷移パラメータ:受注 ID、帳票種別) - 処理内容
SC-ORD-02-B04なら帳票種別=納品書、SC-ORD-02-B05なら帳票種別=請求書とする。- 受注 ID と帳票種別を引き渡して
SC-ORD-05へ遷移する。
- 検証内容:なし
- エラーハンドリング:遷移先の
EV-ORD-501でERR-NOTFOUNDを扱う - 依存関係:
FN-ORD-07/EV-ORD-501
- イベント概要:詳細画面から出荷ステータス更新ダイアログを開く。
- トリガー条件:
SC-ORD-02-B03(出荷更新)が選択されたとき。 - 事前条件:
PRE-LOADED,PRE-EXIST - 入力:
SC-ORD-02-I01(受注 ID) - 出力:
SC-ORD-04の表示(呼び出し元=SC-ORD-02) - 処理内容
- 受注 ID と呼び出し元を引き渡して
SC-ORD-04を表示し、EV-ORD-401を実行する。 - ダイアログが閉じられた後、
EV-ORD-201を実行して詳細表示を最新化する(保持していたRowVersionも更新される)。
- 受注 ID と呼び出し元を引き渡して
- 検証内容:なし
- エラーハンドリング:
EV-ORD-401に委ねる - 依存関係:
FN-ORD-06/EV-ORD-401,EV-ORD-201
- イベント概要:直前の検索条件・ページ・並び順を保ったまま受注一覧へ戻る。
- トリガー条件:
SC-ORD-02-B06(一覧へ戻る)が選択されたとき。 - 事前条件:なし
- 入力:保持された一覧状態
- 出力:
SC-ORD-01への遷移 - 処理内容
- 保持された一覧状態を引き渡して
SC-ORD-01へ遷移する。 EV-ORD-101が保持された状態を復元して一覧を再検索する。
- 保持された一覧状態を引き渡して
- 検証内容:なし
- エラーハンドリング:
ERR-DB - 依存関係:
FN-ORD-01/EV-ORD-101
- イベント概要:モードに応じて、登録用の初期値または既存受注の内容を表示する。
- トリガー条件:
SC-ORD-03が表示されたとき。 - 事前条件:
PRE-DB,PRE-PARAM(モード、および編集モードでは受注 ID) - 入力:遷移パラメータ:モード(登録/編集)、受注 ID(編集モードのみ)
- 出力:
SC-ORD-03-I01〜SC-ORD-03-I18 - 処理内容
- 「選択肢の構築」により、顧客・担当者・配送業者・商品の選択肢を取得する。商品は
Discontinuedが偽のもののみ(OD-T3)。 - 登録モードの場合
SC-ORD-03-I01に「(登録時に採番)」を表示する。SC-ORD-03-I06(受注日)に当日を、SC-ORD-03-I09(送料)に 0 を設定する。その他の入力項目は未入力とする。SC-ORD-03-I16(明細入力表)に空行を 1 行表示する。
- 編集モードの場合
OrdersからOrderID= 受注 ID の 1 件を取得する。0 件の場合はERR-NOTFOUNDとする。ShippedDateが NULL でない場合は編集させず、ERR-BIZ(「出荷済の受注は編集できません。」)としてSC-ORD-02へ戻す(ORD-T4)。- 取得した値を各入力項目に設定する。
Orders.RowVersionを画面に保持する。 Order DetailsをOrderIDで抽出し、Productsを内部結合して明細入力表に設定する。並び順は商品名の昇順。各行のRowVersionも保持する。- 明細行の商品が廃番の場合、その行の選択肢にのみ当該商品を追加して選択状態を保つ(OD-T3)。
- 顧客が選択されている場合、
SC-ORD-03-I03(顧客電話番号)・SC-ORD-03-I04(顧客住所)を表示する。 - 「金額の再計算」により
SC-ORD-03-I17(小計)・SC-ORD-03-I18(合計)を表示する。
- 「選択肢の構築」により、顧客・担当者・配送業者・商品の選択肢を取得する。商品は
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-NOTFOUND,ERR-BIZ - 依存関係:
FN-ORD-03,FN-ORD-04/Orders,Order Details,Products,Customers,Employees,Shippers
- イベント概要:選択された顧客の情報を表示し、登録モードでは出荷先の既定値を設定する。
- トリガー条件:
SC-ORD-03-I02(顧客)の選択が変更されたとき。 - 事前条件:
PRE-DB,PRE-LOADED,PRE-MODE - 入力:
SC-ORD-03-I02(選択された顧客 ID)、現在のモード - 出力:
SC-ORD-03-I03,SC-ORD-03-I04,SC-ORD-03-I10〜SC-ORD-03-I15 - 処理内容
- 選択が空になった場合は
SC-ORD-03-I03・SC-ORD-03-I04を空にして終了する。出荷先情報は変更しない。 CustomersからCustomerID= 選択された顧客 ID の 1 件を取得する。0 件の場合はERR-NOTFOUNDとする(他利用者による削除)。SC-ORD-03-I03にPhone、SC-ORD-03-I04にAddress+City+Region+PostalCode+Countryを連結して表示する。- 登録モードの場合、出荷先情報に既定値を設定する(ORD-T6)。
SC-ORD-03-I10←CompanyName、SC-ORD-03-I11←Address、SC-ORD-03-I12←City、SC-ORD-03-I13←Region、SC-ORD-03-I14←PostalCode、SC-ORD-03-I15←Country- 利用者が既に出荷先情報を手入力している場合は、確認のうえ上書きする。取り消された場合は上書きしない。
- 編集モードの場合、出荷先情報は変更しない(受注時点の値を保持するため)。
- 選択が空になった場合は
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-NOTFOUND - 依存関係:
FN-ORD-03,FN-ORD-04/Customers/ ORD-T6
- イベント概要:送料の変更に応じて合計を再計算する。
- トリガー条件:
SC-ORD-03-I09(送料)の入力が確定したとき。 - 事前条件:
PRE-LOADED - 入力:
SC-ORD-03-I09,SC-ORD-03-I17(小計) - 出力:
SC-ORD-03-I18(合計) - 処理内容
- 送料が数値として解釈できない、または負の場合は当該項目にエラーを表示し、合計の再計算を行わない。
- 「金額の再計算」により合計を求めて表示する。DB アクセスは行わない。
- 検証内容:
VAL-NUMERIC(送料は 0 以上) - エラーハンドリング:
ERR-VALIDATION - 依存関係:
FN-ORD-03,FN-ORD-04
- イベント概要:明細入力表に空行を 1 行追加する。
- トリガー条件:
SC-ORD-03-B01(明細行追加)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:なし
- 出力:
SC-ORD-03-I16 - 処理内容
- 明細入力表の末尾に空行を 1 行追加する。既定値は割引率 0、数量 1、商品・単価は未設定とする。
- 既存行の入力値は保持する。
- 行数が 2 行以上になったため、各行の
SC-ORD-03-B02(行削除)を活性にする。 - DB アクセスは行わない。
- 検証内容:なし
- エラーハンドリング:なし
- 依存関係:
FN-ORD-03,FN-ORD-04
- イベント概要:明細入力表から指定された行を除き、金額を再計算する。
- トリガー条件:
SC-ORD-03-B02(行削除)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:選択された行
- 出力:
SC-ORD-03-I16,SC-ORD-03-I17,SC-ORD-03-I18 - 処理内容
- 明細が 1 行しかない場合は削除せず、「明細は 1 行以上必要です。」を表示する(ORD-T5、
ERR-BIZ)。ボタンは非活性のため通常は発生しない。 - 該当行を明細入力表から取り除く。編集モードで既存の明細行を取り除いた場合、当該行は保存時に削除対象として扱う(
EV-ORD-308)。この時点では DB を更新しない。 - 「金額の再計算」により小計・合計を更新する。
- 残り 1 行になった場合、
SC-ORD-03-B02を非活性にする。
- 明細が 1 行しかない場合は削除せず、「明細は 1 行以上必要です。」を表示する(ORD-T5、
- 検証内容:なし
- エラーハンドリング:
ERR-BIZ - 依存関係:
FN-ORD-03,FN-ORD-04/EV-ORD-308
- イベント概要:選択された商品の単価・在庫を明細行へ反映し、重複を検査したうえで金額を再計算する。
- トリガー条件:
SC-ORD-03-I16の商品列の選択が変更されたとき。 - 事前条件:
PRE-DB,PRE-LOADED - 入力:変更された行、選択された
Products.ProductID - 出力:当該行の単価・在庫・価格・明細金額、
SC-ORD-03-I17,SC-ORD-03-I18 - 処理内容
- 選択が空になった場合は当該行の単価・在庫・価格・明細金額を空にし、手順 5 へ進む。
- 同一の商品が明細入力表の他の行に既に存在する場合、選択を変更前の値へ戻し、「この商品は既に明細に存在します。数量を変更してください。」を表示して終了する(OD-T1、
ERR-BIZ)。 ProductsからProductID= 選択された商品 ID の 1 件を取得する。0 件の場合はERR-NOTFOUNDとする。- 当該行の単価に
Products.UnitPriceを、在庫にProducts.UnitsInStockを設定する(OD-T2)。単価は利用者が変更できる。 - 「金額の再計算」により当該行の価格・明細金額と、小計・合計を更新する。
- 当該行の数量が在庫を超える場合は「在庫数を超えています。」の警告を表示する。入力は妨げない(在庫の引き落としは出荷確定時のため)。
- 検証内容:
VAL-EXISTS(選択された商品がProductsに存在すること) - エラーハンドリング:
ERR-DB,ERR-NOTFOUND,ERR-BIZ - 依存関係:
FN-ORD-03,FN-ORD-04/Products/ OD-T1, OD-T2
- イベント概要:明細行の単価・割引率・数量の変更に応じて、当該行と小計・合計を再計算する。
- トリガー条件:
SC-ORD-03-I16の単価・割引率・数量のいずれかの入力が確定したとき。 - 事前条件:
PRE-LOADED - 入力:変更された行と項目、入力値
- 出力:当該行の価格・明細金額、
SC-ORD-03-I17,SC-ORD-03-I18 - 処理内容
- 入力値を検証する。違反がある場合は当該項目にエラーを表示し、再計算を行わない。
- 「金額の再計算」により当該行の価格・明細金額と、小計・合計を更新する。
- 数量が当該行の在庫を超える場合は「在庫数を超えています。」の警告を表示する。入力は妨げない。
- DB アクセスは行わない。
- 検証内容
VAL-NUMERIC:単価は 0 以上、割引率は 0 以上 1 以下、数量は 1 以上の整数(違反時のメッセージは各項目の制約に対応させる)。
- エラーハンドリング:
ERR-VALIDATION - 依存関係:
FN-ORD-03,FN-ORD-04/ OD-T4
- イベント概要:入力内容を検証し、受注と明細を登録または更新する。
- トリガー条件:
SC-ORD-03-B03(保存)が選択されたとき。 - 事前条件:
PRE-DB,PRE-LOADED,PRE-MODE - 入力:
SC-ORD-03-I02〜SC-ORD-03-I16の入力値、現在のモード、編集モードでは受注 ID と保持されたRowVersion、および削除対象として印を付けた既存明細行 - 出力:
SC-ORD-02への遷移(遷移パラメータ:受注 ID)、完了メッセージ - 処理内容
- 全項目の検証をまとめて実施する(検証内容の節)。1 件でも違反がある場合は更新を行わず、全エラーを表示して入力値を保持したまま画面に留まる。
- トランザクションを開始する。
- 登録モードの場合
Ordersへ 1 行挿入する。設定する列はCustomerID,EmployeeID,OrderDate,RequiredDate,ShipVia,Freight,ShipName,ShipAddress,ShipCity,ShipRegion,ShipPostalCode,ShipCountry。ShippedDateは NULL とする(出荷はSC-ORD-04で行う)。OrderIDはIDENTITYにより採番される。- 採番された
OrderIDを取得する。 - 明細入力表の各行を
Order Detailsへ挿入する。設定する列はOrderID,ProductID,UnitPrice,Quantity,Discount。
- 編集モードの場合
OrdersをOrderID= 受注 ID かつRowVersion= 保持していた値の条件で更新する。更新する列は手順 3-1 と同じ(ShippedDateは更新しない)。あわせてSET句でRowVersion = RowVersion + 1とする(共通仕様 9.1 の定型文)。- 更新件数が 0 件の場合はロールバックし、
Ordersに当該OrderIDが存在するかで分岐する。存在すればERR-CONFLICT、存在しなければERR-NOTFOUNDとする。 - 明細を行ごとに適用する(全削除・再登録は行わない。OD-T6)。
- 削除対象として印を付けた行:
Order DetailsからOrderIDとProductIDの一致で削除する。 - 読み込み時に存在し、値が変更された行:
OrderIDとProductIDの一致でUnitPrice,Quantity,Discountを更新する。あわせてSET句でRowVersion = RowVersion + 1とする。 - 読み込み時に存在しなかった行:
Order Detailsへ挿入する(RowVersionは列に含めない。DEFAULTにより 1 で初期化される)。 - 商品が変更された既存行:変更前の
ProductIDの行を削除し、変更後のProductIDで挿入する(ProductIDは主キーの一部のため更新しない)。
- 削除対象として印を付けた行:
- コミットする。
- 「受注 ID nnn を保存しました。」を表示し、当該受注 ID を引き渡して
SC-ORD-02へ遷移する。
- 検証内容
VAL-REQUIRED:顧客・担当者・受注日が入力されていること(ORD-T1)。明細の各行で商品・単価・割引率・数量が入力されていること。VAL-DATE:受注日・要求納期が日付として解釈できること。要求納期が指定されている場合は受注日 <= 要求納期であること(ORD-T3)。VAL-NUMERIC:送料は 0 以上、明細の単価は 0 以上、割引率は 0 以上 1 以下、数量は 1 以上の整数。VAL-LENGTH:出荷先情報の各項目がテーブル定義書の桁数以内であること。VAL-EXISTS:選択された顧客・担当者・配送業者・商品がそれぞれのマスタに存在すること。VAL-DUP:明細入力表に同一商品の行が 2 行以上ないこと(OD-T1、「同一商品の明細が重複しています。」)。- 個別:明細が 1 行以上あること(ORD-T5、
ERR-BIZ「明細を 1 行以上入力してください。」)。 - 個別:明細の商品に廃番商品が含まれないこと。ただし編集モードで読み込み時から存在する行は対象外とする(OD-T3、
ERR-BIZ「廃番商品は指定できません。」)。
- エラーハンドリング:
ERR-VALIDATION,ERR-DB,ERR-CONFLICT,ERR-NOTFOUND,ERR-BIZ - 依存関係:
FN-ORD-03,FN-ORD-04/Orders,Order Details,Products/EV-ORD-201(遷移先) / ORD-T1, ORD-T3, ORD-T5, OD-T1, OD-T3, OD-T6
- イベント概要:入力内容を保存せずに遷移元へ戻る。
- トリガー条件:
SC-ORD-03-B04(キャンセル)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:現在のモード、受注 ID(編集モードのみ)、変更の有無
- 出力:
SC-ORD-02またはSC-ORD-01への遷移 - 処理内容
- 未保存の変更がある場合、確認ダイアログ「入力内容は保存されません。よろしいですか?」を表示する(画面遷移 F-3)。取り消された場合は何もしない。
- 編集モードの場合は受注 ID を引き渡して
SC-ORD-02へ遷移する。登録モードの場合は保持された一覧状態でSC-ORD-01へ遷移する。 - DB は一切更新しない。
- 検証内容:なし
- エラーハンドリング:なし
- 依存関係:
EV-ORD-201,EV-ORD-101
- イベント概要:対象受注の現在の出荷情報と在庫引落の内訳を表示する。
- トリガー条件:
SC-ORD-04が表示されたとき(EV-ORD-108、EV-ORD-205、および配送管理の出荷追跡画面から)。 - 事前条件:
PRE-DB,PRE-PARAM(受注 ID、呼び出し元) - 入力:遷移パラメータ:受注 ID、呼び出し元画面 ID
- 出力:
SC-ORD-04-I01〜SC-ORD-04-I08、ボタンの活性状態 - 処理内容
OrdersからOrderID= 受注 ID の 1 件を取得する。0 件の場合はERR-NOTFOUNDとする。Customersを外部結合して顧客名を取得し、SC-ORD-04-I02に表示する。SC-ORD-04-I01(受注 ID)、SC-ORD-04-I04(要求納期)を表示し、「状況の判定」によりSC-ORD-04-I03を設定する。- 「選択肢の構築」により配送業者(
SC-ORD-04-I06)の選択肢を取得する。 - 未出荷(
ShippedDateが NULL)の場合SC-ORD-04-I05(出荷日)に当日を設定する。SC-ORD-04-I06はOrders.ShipViaが設定されていればそれを、なければ未選択とする。SC-ORD-04-I07(送料)にOrders.Freightを設定する。Order DetailsをOrderIDで抽出しProductsを内部結合して、商品名・数量・現在庫数をSC-ORD-04-I08(在庫引落の内訳)に表示する。Quantity > UnitsInStockの行を強調表示する。SC-ORD-04-B01を「出荷確定」として活性、SC-ORD-04-B02を非活性にする。
- 出荷済(
ShippedDateが NULL でない)の場合SC-ORD-04-I05にShippedDate、SC-ORD-04-I06にShipVia、SC-ORD-04-I07にFreightを設定する。SC-ORD-04-I08は表示しない(在庫は引落済のため)。SC-ORD-04-B01を「出荷情報を更新」として活性、SC-ORD-04-B02(出荷取消)を活性にする。
Orders.RowVersionをダイアログに保持する。
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-NOTFOUND - 依存関係:
FN-ORD-06/Orders,Order Details,Products,Customers,Shippers
- イベント概要:出荷日・配送業者・送料を更新する。未出荷から確定する場合は在庫を引き落とす。
- トリガー条件:
SC-ORD-04-B01が選択されたとき。 - 事前条件:
PRE-DB,PRE-LOADED,PRE-EXIST - 入力:
SC-ORD-04-I05(出荷日)、SC-ORD-04-I06(配送業者)、SC-ORD-04-I07(送料)、受注 ID、保持されたRowVersion、表示時点の出荷済/未出荷の別 - 出力:呼び出し元画面への復帰、完了メッセージ
- 処理内容
- 入力値を検証する。違反がある場合は更新を行わず、全エラーを表示してダイアログに留まる。
- トランザクションを開始する。
OrdersからOrderID= 受注 ID かつRowVersion= 保持していた値の行を、更新用に取得する。0 件の場合はロールバックし、Ordersに当該OrderIDが存在すればERR-CONFLICT、存在しなければERR-NOTFOUNDとする。- 表示時点が未出荷だった場合(出荷確定)、在庫を引き落とす(OD-T5、PRD-T5)。
Order DetailsをOrderIDで抽出し、ProductsをProductIDで内部結合して、明細ごとのQuantityとUnitsInStockを取得する。- いずれかの行で
Quantity > UnitsInStockの場合はロールバックし、ERR-BIZ(「在庫が不足しています:〈商品名〉」。複数ある場合は全商品名を列挙)とする。 - 明細ごとに
Products.UnitsInStockをUnitsInStock - Quantityへ更新する(ProductIDの一致で更新)。
- 表示時点が出荷済だった場合(出荷情報の更新)、在庫は変更しない。
OrdersのShippedDate,ShipVia,Freightを入力値で更新する(OrderIDとRowVersionの一致を条件とし、SET句でRowVersion = RowVersion + 1とする)。更新件数が 0 件の場合はロールバックし、手順 3 と同じ分岐で扱う。- コミットする。
- 「受注 ID nnn の出荷情報を更新しました。」を表示し、ダイアログを閉じる。
- 呼び出し元画面を再読み込みする(
SC-ORD-01ならEV-ORD-102、SC-ORD-02ならEV-ORD-201)。
- 検証内容
VAL-REQUIRED:出荷日・配送業者が入力されていること。VAL-DATE:出荷日が日付として解釈でき、Orders.OrderDate <= 出荷日であること(ORD-T3、「出荷日は受注日以降を指定してください。」)。VAL-NUMERIC:送料が 0 以上であること。VAL-EXISTS:選択された配送業者がShippersに存在すること。
- エラーハンドリング:
ERR-VALIDATION,ERR-DB,ERR-CONFLICT,ERR-NOTFOUND,ERR-BIZ - 依存関係:
FN-ORD-06/Orders,Order Details,Products,Shippers/ OD-T5, PRD-T5, ORD-T3
- イベント概要:出荷日を未設定に戻し、引き落とした在庫を戻す。
- トリガー条件:
SC-ORD-04-B02(出荷取消)が選択されたとき。 - 事前条件:
PRE-DB,PRE-LOADED,PRE-EXIST - 入力:受注 ID、保持された
RowVersion - 出力:呼び出し元画面への復帰、完了メッセージ
- 処理内容
- 確認ダイアログ「出荷を取り消し、在庫を戻します。よろしいですか?」を表示する。取り消された場合は何もしない。
- トランザクションを開始する。
OrdersからOrderID= 受注 ID かつRowVersion= 保持していた値の行を取得する。0 件の場合はロールバックし、Ordersに当該OrderIDが存在すればERR-CONFLICT、存在しなければERR-NOTFOUNDとする。- 取得した行の
ShippedDateが NULL の場合はロールバックし、ERR-BIZ(「この受注は出荷されていません。」)とする。 Order DetailsをOrderIDで抽出し、明細ごとにProducts.UnitsInStockをUnitsInStock + Quantityへ更新する(OD-T5)。OrdersのShippedDateを NULL へ更新する(OrderIDとRowVersionの一致を条件とし、SET句でRowVersion = RowVersion + 1とする)。ShipViaとFreightは変更しない。更新件数が 0 件の場合は手順 3 と同じ分岐で扱う。- コミットする。
- 「受注 ID nnn の出荷を取り消しました。」を表示し、ダイアログを閉じる。
- 呼び出し元画面を再読み込みする。
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-CONFLICT,ERR-NOTFOUND,ERR-BIZ - 依存関係:
FN-ORD-06/Orders,Order Details,Products/ OD-T5
- イベント概要:更新せずにダイアログを閉じる。
- トリガー条件:
SC-ORD-04-B03(閉じる)が選択されたとき。 - 事前条件:なし
- 入力:呼び出し元画面 ID
- 出力:呼び出し元画面への復帰
- 処理内容
- 入力内容を破棄してダイアログを閉じる。DB は更新しない。
- 呼び出し元画面を再読み込みする(画面遷移 F-5)。他利用者による更新を反映するため、変更がなくても再読み込みする。
- 検証内容:なし
- エラーハンドリング:
ERR-DB(再読み込み時) - 依存関係:
EV-ORD-102,EV-ORD-201
- イベント概要:指定された帳票種別で、受注内容を印刷用の体裁で表示する。
- トリガー条件:
SC-ORD-05が表示されたとき。 - 事前条件:
PRE-DB,PRE-PARAM(受注 ID、帳票種別) - 入力:遷移パラメータ:受注 ID、帳票種別(納品書/請求書)
- 出力:
SC-ORD-05-I01〜SC-ORD-05-I14 - 処理内容
OrdersからOrderID= 受注 ID の 1 件を取得する。0 件の場合はERR-NOTFOUNDとする。Employees(EmployeeID)・Shippers(ShipVia)を外部結合し、担当者名・配送業者名を取得する。Order DetailsをOrderIDで抽出し、Productsを内部結合して商品名を取得する。並び順は商品名の昇順。- 明細ごとに
価格・明細金額を算出し、小計・合計を求める(「金額の再計算」)。 SC-ORD-05-I01(帳票種別)に遷移パラメータの値を選択し、SC-ORD-05-I02(帳票タイトル)とSC-ORD-05-I03(発行日=当日)を設定する。SC-ORD-05-I05(宛先)は出荷先情報(ShipName,ShipAddress,ShipCity,ShipRegion,ShipPostalCode,ShipCountry)を連結して表示する。顧客マスタの住所は用いない。- 帳票種別に応じて表示を切り替える。
- 納品書:
SC-ORD-05-I07(出荷日)・SC-ORD-05-I08(配送業者)を表示し、SC-ORD-05-I14(支払期限)を表示しない。 - 請求書:
SC-ORD-05-I14に発行日の翌月末日を表示し、SC-ORD-05-I07・SC-ORD-05-I08を表示しない。
- 納品書:
- 帳票はその場で表示するのみとし、DB への保存・ファイル出力・非同期処理は行わない。
- 検証内容:なし
- エラーハンドリング:
ERR-DB,ERR-NOTFOUND - 依存関係:
FN-ORD-07/Orders,Order Details,Products,Employees,Shippers
- イベント概要:納品書と請求書の表示を切り替える。
- トリガー条件:
SC-ORD-05-I01(帳票種別)の選択が変更されたとき。 - 事前条件:
PRE-LOADED - 入力:
SC-ORD-05-I01 - 出力:
SC-ORD-05-I02,SC-ORD-05-I07,SC-ORD-05-I08,SC-ORD-05-I14 - 処理内容
- 帳票タイトルを選択された種別の名称へ変更する。
EV-ORD-501の手順 7 と同じ規則で、種別に応じた項目の表示・非表示を切り替える。- 受注データは再取得しない(DB アクセスを行わない)。
- 検証内容:なし
- エラーハンドリング:なし
- 依存関係:
EV-ORD-501
- イベント概要:操作用の要素を除いた状態で帳票を印刷する。
- トリガー条件:
SC-ORD-05-B01(印刷)が選択されたとき。 - 事前条件:
PRE-LOADED - 入力:現在の表示内容
- 出力:印刷(ブラウザの印刷機能)
- 処理内容
SC-ORD-05-I01(帳票種別)、SC-ORD-05-B01、SC-ORD-05-B02および画面共通のヘッダ・メニューを印刷対象から除く。- ブラウザの印刷機能を呼び出す。
- サーバ側での帳票生成・保存・非同期処理は行わない。
- 検証内容:なし
- エラーハンドリング:なし
- 依存関係:
FN-ORD-07
- イベント概要:受注詳細画面(照会)へ戻る。
- トリガー条件:
SC-ORD-05-B02(戻る)が選択されたとき。 - 事前条件:なし
- 入力:
SC-ORD-05-I04(受注 ID) - 出力:
SC-ORD-02への遷移 - 処理内容
- 受注 ID を引き渡して
SC-ORD-02へ遷移する。
- 受注 ID を引き渡して
- 検証内容:なし
- エラーハンドリング:遷移先の
EV-ORD-201で扱う - 依存関係:
EV-ORD-201