JP2005327136A - 伝票管理システム及び伝票管理用ソフトウェア - Google Patents
伝票管理システム及び伝票管理用ソフトウェア Download PDFInfo
- Publication number
- JP2005327136A JP2005327136A JP2004145647A JP2004145647A JP2005327136A JP 2005327136 A JP2005327136 A JP 2005327136A JP 2004145647 A JP2004145647 A JP 2004145647A JP 2004145647 A JP2004145647 A JP 2004145647A JP 2005327136 A JP2005327136 A JP 2005327136A
- Authority
- JP
- Japan
- Prior art keywords
- slip
- data
- field
- item
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
【課題】 データベース関連の設計/開発の負担を大幅に削減でき、企業ごとの多様な要求にも対応可能な業務処理システムを開発可能な伝票管理システムを提供する。
【解決手段】 伝票入力用インターフェイス提供手段を備えたクライアント装置と、伝票データの新規計上・修正計上・伝票1枚検索・伝票1項目検索をそれぞれ実行する手段を備えたデータサーバ装置と、伝票の種類・伝票に含まれる項目・伝票間のデータの依存関係を自由に定義出来るデータベースと伝票データを格納する伝票データベースと集計を行う伝票の種類・集計表の種類・集計表に含める項目・集計する伝票の項目と集計表の対応関係・集計計算の設定を自由に定義できる集計表定義データベースと集計表データベースとを備えた伝票管理データベースとで、伝票管理システムを構成した。
【選択図】 図1
【解決手段】 伝票入力用インターフェイス提供手段を備えたクライアント装置と、伝票データの新規計上・修正計上・伝票1枚検索・伝票1項目検索をそれぞれ実行する手段を備えたデータサーバ装置と、伝票の種類・伝票に含まれる項目・伝票間のデータの依存関係を自由に定義出来るデータベースと伝票データを格納する伝票データベースと集計を行う伝票の種類・集計表の種類・集計表に含める項目・集計する伝票の項目と集計表の対応関係・集計計算の設定を自由に定義できる集計表定義データベースと集計表データベースとを備えた伝票管理データベースとで、伝票管理システムを構成した。
【選択図】 図1
Description
本発明は、企業内での販売管理や在庫管理、人事情報の管理など、業務処理に必要な様々な情報を利用し管理するために用いる伝票を管理し整理するための伝票管理用ソフトウェア及び伝票管理システムに関する。
ここで、「伝票」というと、通常は受発注管理のための「受注伝票」や売上管理のための「売上伝票」などを想定するが、本明細書で用いる「伝票」の概念は企業内で情報を利用し管理するためにクライアント−サーバ間でやりとりするデータのかたまりの一単位を指し、通常の「伝票」の概念より広く、数量や金額を含まない場合もある。
従来、データベースへのアクセスを伴う企業の業務処理システムの開発は、UML(The Unified Modeling Language オブジェクト指向に基づくソフトウェア開発における、プログラム設計図の統一表記法。)等を利用し、データベースの構造を設計することからはじめていた。このためユーザー毎あるいは受託開発案件毎にデータベースの構造が異なり、ある案件でのデータベースアクセスに係るユーザー固有の部分は再利用できないので、開発案件毎にデータベース関連の設計/開発工程を経なくはならず、データベースへのアクセスを伴う業務処理システムの開発には相当の時間とコストが必要であった。
このような問題を解決するために、例えば既存の販売管理ソフトやグループウェアを利用することも考えられる。しかし、グループウェアで取り扱うのは主として、会議室のスケジュールや社員各人の行き先であり、企業における情報の共有化を通じて効率的な業務を実現し収益の向上に寄与することは出来ても、収益に直接かかわる情報を扱うものではない。一方、既存の販売管理ソフトウェアを利用するためには、個々の企業の要望に沿うためにカスタマイズが必要であったり、カスタマイズにも限界があるという問題がある。また、このようなソフトウェアは用途が限定されていて汎用的な利用を目的としたものでないため、企業内での柔軟な利用は期待できないという問題がある。ここまでに記載した背景技術に関しては、下記の非特許文献1〜3に記載されている。
なお、背景技術に関する特許文献に関しては、本願発明者は直接関連する文献を本願発明時において特に知らなかったので、特許庁のホームページ上で提供されている特許電子図書館の公開特許公報フロントページ検索メニューで、「データ」AND「管理」あるいは「伝票」AND「管理」というキーワードで検索を行った。その結果、450件以上の公報がヒットしたが、直接本願発明の先行技術文献となる公報は見当たらず、多少関連はあると考えられる文献をピックアップして以下に記載した。伝票の入出力や作成方法に関する問題を解決するための技術として、特開平11−53453号、特開平11−143962号、特開2000−148884号、特開2002−74251号、特開2003−331211号が挙げられるが、これらの技術は、企業ごとの多様な要求にも対応可能な業務処理システムを開発できる汎用伝票管理用ソフトウェア及び伝票管理システムを開示するものではない。また、伝票等を管理するデータベースに関連する技術として、特開2002−108665号、特開2002−163134号、特開2002−216250号が挙げられるが、伝票のあらゆる項目の設定について柔軟に対応できるわけではなく、また、伝票の計上するデータの内容そのものの管理を提供するものでもない。
特開平11−53453号
特開平11−143962号
特開2000−148884号
特開2002−74251号
特開2003−331211号
特開2002−108665号
特開2002−163134号
特開2002−216250号
エリック・J・ナイバーグ、ロバート・A・マクシムチャック著、長瀬嘉秀、今野睦監訳「データベース設計のためのUML」翔泳社発行2003年
小笠原泰、小野寺清人、森彪著「情報システム投資の基本がわかる本」日本能率協会発行2003年
土呂須健一著「基幹業務システムの設計理論」日本図書刊行会発行2001年
本発明は上記した従来技術の問題点を解決するためになされたもので、その目的は、データベースへのアクセスを伴う業務処理システムにおいて、開発案件毎に行っていたデータベース関連の設計/開発工程の負担を大幅に削減でき、企業ごとの多様な要求にも対応可能な業務処理システムを開発できる汎用の伝票管理用ソフトウェア及び伝票管理システムを提供することにある。
本発明による伝票管理システムは、クライアント装置と、クライアント装置とネットワークで接続されたデータベースサーバ装置と、データベースサーバ装置と接続された伝票管理データベースと、で構成されている。
クライアント装置は、必要に応じてデータベースサーバ装置を介して伝票管理データベースに格納された伝票データの提供を受けながら伝票データの入力・修正・計上・検索のためのインターフェイスを提供する機能と、入力された伝票データを所定の変換方式に従って変換してデータベースサーバ装置に送信する機能と、を有する、伝票入力用インターフェイス提供手段を備えている。
データベースサーバ装置は、クライアント装置から受信した新規計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの新規計上手段と、クライアント装置から受信した修正計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの修正計上手段と、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データを一件毎に検索しクライアント装置に送信する伝票一枚検索手段と、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データの項目を一項目毎に検索してクライアント装置に送信する伝票一項目検索手段と、を備えている。
伝票管理データベースは、個々の伝票に含まれるデータ中、計上されるデータを修飾するデータであるヘッダーの項目の種類と数を定義するデータを格納する伝票定義データベースと、伝票の種類と伝票間のデータの依存関係を定義するデータを格納する伝票関係定義データベースと、ヘッダーの項目で使用されるデータを格納するヘッダー用データ定義データベースと、個々の伝票に含まれるデータ中、計上の対象となる品目及びその属性を含む本体項目のデータを定義する本体項目用データ定義データベースと、クライアント装置から計上された伝票のデータを所定の方式に従って格納する伝票データベースと、を備えている。
本発明による伝票管理システムは、上述の構成を有することにより、クライアント装置からデータベースサーバ装置を介して計上され伝票管理データベースで管理する伝票の種類と伝票に含まれる項目と伝票間のデータの依存関係の設定とを、自由に設定可能にしたことを特徴とする。
本発明による伝票管理システムにおいて、前記伝票管理データベースに含まれる各データベースは、望ましい形態として、以下に述べる各デーブルを備えるように構成することが出来る。
すなわち、前記伝票定義データベースは、伝票のヘッダー項目を入力するための機能を提供する入力コントロールの種類を識別するコントロールIDとそのデータの型や入力方式を定義する入力コントロール定義テーブルと、伝票の種類別にどの入力コントロールを使用してヘッダー項目を入力するかをコントロールIDと伝票IDに関連づけて定義する伝票別入力コントロール定義テーブルと、を含む。前記伝票関係定義データベースは、伝票の種類を定義する伝票IDテーブルと、伝票管理データベースに対する伝票データの計上の種類を定義する計上IDテーブルと、伝票データの処理の内容を伝票の種類と計上の種類と参照伝票の種類により一意に示す処理IDを計上IDと伝票IDと参照する伝票IDに関連づけて定義する処理IDテーブルと、各処理IDの処理において伝票の各ヘッダー項目の値を入力するための入力コントロールの参照関係を参照伝票IDと被参照伝票IDとデータを得るための参照伝票の入力コントロールと被参照伝票の入力コントロールに関連づけて定義する伝票間参照関係テーブルとを含む。前記ヘッダー用データ定義データベースは、ヘッダー項目に顧客データを入力するために参照する顧客コード・名称・住所を含む顧客テーブルの内容を定義する顧客テーブルと、ヘッダー項目に仕入先データを入力するために参照する仕入先コード・名称・住所を含む仕入先テーブルの内容を定義する仕入先テーブルと、ヘッダー項目に配送業者データを入力するために参照する配送業者コード・名称・住所を含む配送業者テーブルの内容を定義する配送業者テーブルと、ヘッダー項目に自社の担当者データを入力するために参照する社員コード・氏名・部署名を含む社員テーブルの内容を定義する社員テーブルと、ヘッダー項目に入力するデータが他のデータベースを参照して入力する場合にそのデータベースのテーブルの内容が未確定であるときその旨記録する未登録項目テーブルと、ヘッダー項目に入力するデータが論理値でありその値が「Yes」又は「No」しかないときに選択肢の内容を定義するYesNoテーブルと、ヘッダー項目に入力するデータが他のデータベースを参照して入力する場合にそのデータベースのテーブルの内容を定義する下位区分テーブルとを含む。前記本体項目用データ定義データベースは、計上の対象となる品目を識別する品目コードを定義する品目コードテーブルと、品目についての属性を入力するための属性コード・入力するデータのタイプ・単位を含む品目属性の内容を定義する品目属性定義テーブルと、どの品目にどの属性が対応するかを、品目コードと属性コードに関連づけて定義する品目コード品目属性対応テーブルと、本体項目に用いられる単位コードとその内容を定義する単位テーブルと、品目の上位区分の品目区分コードとその内容を定義する品目上位区分テーブルと、品目属性として入力するデータが論理値でありその値が「Yes」又は「No」しかないときに選択肢の内容を定義するYesNoテーブルと、品目について入力するデータが他のデータベースを参照して入力する場合にそのデータベースのテーブルの内容を定義する下位区分テーブルと、どの区分にどの品目が含まれるかを、品目区分コードと品目コードに関連づけて定義する区分品目対応テーブルとを含む。
前記クライアント装置と前記データベースサーバ装置との間の伝票データの送受信や処理については、望ましくは以下に述べるように構成できる。
すなわち、前記クライアント装置の伝票入力用インターフェイス提供手段は、入力されたデータを所定の変換方式に従って変換することによって、データベースサーバ装置に対して処理の内容を指示するデータを伝票番号と処理コードと伝票IDと処理IDと項目番号に関連づけて記録する問合せ用データセクションと、計上する伝票を特定するための基本的なデータを伝票IDと伝票番号とに関連づけて記録する伝票基本データセクションと、ヘッダー項目のデータを伝票番号とコントロールIDに関連づけて項目毎に記録するヘッダー項目データセクションと、ヘッダー用データがデータベース化されていない未登録のヘッダー項目のデータを伝票番号に関連づけて直接項目毎に記録するヘッダー未登録項目データセクションと、本体項目のデータを伝票番号に関連づけて項目毎に記録する本体項目データセクションと、1枚の伝票に含まれる本体項目を同時に修飾するヘッダーのデータを伝票番号と項目番号に関連づけて記録する本体項目備考データセクションと、本体項目の項目毎にデータを得た参照伝票と参照項目のデータを伝票番号と参照伝票IDと参照伝票番号に関連づけて記録する関連伝票データセクションと、本体項目の項目毎に品目の属性データを、伝票番号に関連づけて記録する属性データセクションと、を含む各データセクションに振り分けて記録した伝票データとしてデータベースサーバ装置に送信する。
また、前記クライアント装置から伝票データを受信した前記データベースサーバ装置は、伝票データの処理の内容を、問合せデータセクションに記録された処理IDと処理コードの値から判断し、伝票のデータを計上する処理であれば、伝票データの新規計上手段または伝票データの修正計上手段により伝票基本データセクション・ヘッダー項目データセクション・ヘッダー未登録項目データセクション・本体項目データセクション・本体項目備考データセクション・関連伝票データセクション及び属性データセクションの各データセクションに記録されたデータを、伝票基本データセクションに記録されたデータを格納する伝票基本データテーブルと、ヘッダー項目データセクションに記録されたデータを格納するヘッダー項目データテーブルと、ヘッダー未登録データセクションに記録されたデータを格納するヘッダー未登録項目データテーブルと、本体項目データセクションに記録されたデータを格納する本体項目データテーブルと、本体項目備考データセクションに記録されたデータを格納する本体項目備考データテーブルと、関連伝票データセクションに記録されたデータを格納する関連伝票データテーブルと、属性データセクションに記録されたデータを格納する属性データブルと、で構成される伝票データベースの各テーブルに振り分けて格納し、伝票1枚または伝票1項目の検索を必要とする処理であれば、伝票一枚検索手段または伝票一項目検索手段により、伝票データベースにアクセスして要求されたデータをクライアント装置に送信する。
さらに、前記伝票管理データベースは、各集計表を識別する集計IDとその名称を含む集計表の基本的なデータを定義する集計表名テーブルと、集計表に含める個々のフィールドを識別する集計フィールドIDとその内容を、集計表の基礎となる伝票IDに関連づけて定義する集計要素テーブルと、集計計算を実行するときに各集計表の各フィールドに対してどのような計算を実行するかを識別する集計計算要素IDとその内容を、処理IDと集計IDと集計フィールドIDに関連づけて定義する集計計算要素テーブルと、集計計算の対象となるデータの出所がデータベースである場合にそのデータベースを、集計計算要素IDに関連づけて定義する検索対象定義テーブルと、各集計表に対する処理IDの集計計算のデータ処理の順番・対象・計算の内容を、集計IDと処理IDに関連づけて定義する集計動作定義テーブルと、各集計表を表示させるときの各フィールドの表示の順番・表示の有無・レコードの並び換えを含む表示特性を、集計IDと集計フィールドIDとに関連づけて定義する集計表示要素テーブルと、を含む集計表定義データベースを、さらに備えることによって、集計を行う伝票の種類、集計表の種類、各集計表に含める項目、集計する伝票の項目と集計表の項目の対応関係、及び集計計算を実行するときにどの集計表に対して何を加算し減算するかを自由に設定できるように構成できる。
一方、伝票管理データベースに備えられた集計表定義データベースの各テーブルに設定した値に基づいて、各集計ID毎の集計データを記録するためのデータを抽出して各集計表テーブルを備えた集計表データベースを作成することができ、この集計表データベースをさらに備えることによって、各集計表の計算や管理や表示が可能となる。
次に、前記集計表定義データベースは、この集計表定義データベースに対する処理要求を行うことができる以下の第1〜第4のレコード抽出処理手段を備えることができる。すなわち、前記集計動作定義テーブルから、「処理ID」フィールドの値が指定された値と合致するレコードを抽出して「集計ID」フィールドの値に従って昇順に並び換え、同一の「集計ID」フィールドの値を有するレコードがある場合はさらに規定されたデータ処理の順番に並び換えることによって一連のレコードを取得する第1のレコード抽出処理手段と、前記集計動作定義テーブルから、「処理ID」フィールドの値及び「集計ID」フィールドの値がそれぞれ指定された値と一致するレコードを抽出し、規定されたデータ処理の順番に並び換えることによって一連のレコードを取得する第2のレコード抽出処理手段と、前記集計計算要素テーブルと前記集計要素テーブルとをそれぞれの「集計フィールドID」フィールドの値を基準に内部結合し、当該内部結合の結果得られたテーブルの全てのレコードが含まれるように、当該内部結合の結果得られたテーブルと前記検索対象定義テーブルとをそれぞれの「集計計算要素ID」フィールドの値を基準として外部結合し、当該外部結合によって作成されたレコードによって構成されるテーブルから、前記集計要素テーブルに由来する「集計ID」フィールドの値が指定された値と一致し、さらに前記集計計算要素テーブルに由来する「処理ID」フィールドの値が指定された値と一致する一連のレコードを取得する第3のレコード抽出処理手段と、前記集計表示要素テーブルと前記集計計算要素テーブルとをそれぞれの「集計フィールドID」フィールドの値を基準に内部結合し、当該内部結合の結果得られるテーブルから、前記集計表示要素テーブルに由来する「集計ID」フィールドの値が指定された値に一致するレコードを抽出し、前記集計表示要素テーブルに規定された順番に従って並び換えることによって一連のレコードを取得する第4のレコード抽出処理手段と、をさらに備えることによって、第1のレコード抽出処理手段によって伝票データに含まれる処理ID毎の集計動作を抽出し、第2のレコード抽出処理手段によって伝票データに含まれる処理IDの集計動作中指定した集計IDで特定される集計表に対する動作のみを抽出し、第3のレコード抽出処理手段によって指定した処理IDを有する伝票計上処理においてその伝票データを集計IDで特定される集計表に集計計算するときどのように計算するかを示すレコードセットを取得し、第4のレコード抽出処理手段によって指定した集計IDで特定される集計表を表示するときにその集計表に含まれる各フィールドがどのような表示特性をもっているかを示すレコードセットを取得することが可能となる。
ここで、上で使用された「内部結合」及び「外部結合」の用語について説明する。「内部結合」とは、一方のテーブルのあるフィールドの値と、もう一方のテーブルのあるフィールドの値が同じレコードを結びつける結合を行う場合に、一方のテーブルのフィールドの値と、もう一方のテーブルのフィールドの値が同じレコードだけを結合することをいう。SQL−92(アメリカ標準化機構ANSIによって制定されたSQLの規格)では、INNER JOINキーワードとONキーワードで記述される。この内部結合では、複数のテーブル間で対応するフィールドの値が等しいものだけが結合され、結果として返されるので、どちらかにしか存在しない値を持つレコードは結合されない。
一方、処理の目的によっては、あるテーブルだけは必ず残したい、という場合がある。「外部結合」はこのような場合に用いられる。SQL−92(アメリカ標準化機構ANSIによって制定されたSQLの規格)では、OUTER JOINキーワードとONキーワードで記述される。外部結合は結合の方向により、先に記述した左側のテーブルを優先して左側のテーブルに関してはすべてのレコードを残す左外部結合と、後で指定した右側のテーブルを優先して右側の表に関してはすべてのレコードを残す右外部結合がある。
なお、第1〜第4のレコード抽出手段をすべてクライアント装置側ではなくデータベース側に設けているのは、クライアント装置側の処理の負担を軽減し(クライアント装置ではデータベースサーバ装置側から返されるデータの結果を表示するだけでよい)、また、システム全体のメンテナンスの効率化と負担の軽減を図るためである。
次に、前記集計表定義データベースに含まれるテーブルについて、以下のようなフィールドが設けられた場合に、後述する第1〜第6のSQL文生成手段によって生成されたSQL文が実行された結果のデータ操作手段を集計表データベースに設けることができ、集計表の計算や表示のための操作手段をデータベース側に備えることが可能となる。すなわち、前記集計要素テーブルは、少なくとも、すべての集計表についてそれぞれの集計表の各フィールドの識別コードを記録する「集計フィールドID」フィールドと、各集計表を識別する集計IDを記録する「集計ID」フィールドと、集計フィールドIDで識別される集計表の各フィールドの名称を記録する「フィールド名称」フィールドと、各フィールドのデータ型を記録する「フィールドタイプ」フィールドと、集計表に集計計算をするときに集計表の集計対象のレコードを選ぶ際の抽出条件としてその集計フィールドIDのフィールドを加えるか否かをTRUE又はFALSEを表す値で記録する「抽出条件」フィールドと、その集計フィールドIDのフィールドを抽出条件とするときのパラメータ名を記録する「パラメータ名称」フィールドと、集計計算のときその集計フィールドIDのフィールドに対して伝票データを上書きせずに加減算するか否かをTRUE又はFALSEを表す値で記録する「集計対象」フィールドと、集計表からレコードを削除するか否かをTRUE又はFALSEを表す値で記録する「レコード削除の真偽」フィールドと、集計表を表示するときにその集計フィールドIDのフィールドを表示すべきレコードとして抽出するか否かをTRUE又はFALSEを表す値で記録する「表示用抽出条件」フィールドと、を備え、前記集計計算要素テーブルは、少なくとも、「処理ID」フィールドと、「集計ID」フィールドと、同一の行で定義されている「処理ID」フィールドの値で示す処理が同一の行で定義されている「集計ID」フィールドの値で示す集計表に対して伝票データ中のどのデータを集計するかを一意に識別するコードを記録する「集計計算要素ID」フィールドと、「集計フィールドID」フィールドと、その集計フィールドIDで特定されるフィールドに対して伝票のデータを集計するか否かをTRUE又はFALSEを表す値で記録する「集計計算の有無」フィールドと、を備え、前記集計表示要素テーブルは、少なくとも、「集計ID」フィールドと、「集計フィールドID」フィールドと、集計表に含まれる各レコードを並べるときにそのレコードが指し示すフィールドの値により並び換えるか否かをTRUE又はFALSEを表す値で記録する「DoSort」フィールドと、並び換えを行うときに依存するフィールドが複数ある場合の優先順位を規定する「SortPriority」フィールドと、並び換えが行われるときに依存するフィールドが複数ある場合の優先順位を昇順か降順かを表す値で記録する「ASCorDESC」フィールドと、を備えるように構成できる。一方、前記データベースサーバは、操作の対象とする集計表を表す集計IDを前記第4のレコード抽出処理手段に与えて取得した一連のレコード(以下「第4の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルから集計表を表示するために必要なデータを抽出するためのデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第4の取得レコードの「フィールド名称」フィールドに記録されている値が示すすべてのフィールドのデータを当該集計表テーブルから抽出するにあたり、第4の取得レコードの「表示用抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値とを一致させ、当該条件に合致するレコードを当該集計表テーブルから抽出して、第4の取得レコードの「DoSort」フィールドの値がTRUEのレコードの「SortPriority」フィールドで示される並び換えの条件の優先順位と「ASCorDESC」フィールドで示される昇順あるいは降順の区別に従って並び換えるSQL文を表す文字列を生成し、第1のデータ操作手段として前記集計表データベースに保存するための、第1のSQL文生成手段と、集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを前記第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルから集計計算の対象となるレコードがあるか否かを確認するためのデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値とが一致する当該集計表テーブルのレコードの任意のフィールドを抽出するSQL文を表す文字列を生成し、第2のデータ操作手段として前記集計表データベースに保存するための、第2のSQL文生成手段と、集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルからレコードを削除するデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「レコード削除の真偽」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値のいずれかが0または0以下となる当該集計表テーブルのレコードを削除するSQL文を表す文字列を生成し、第3のデータ操作手段とし前記集計表データベースに保存するための、第3のSQL文生成手段と、集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルに新たにレコードを追加するデータ操作手段を前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「パラメータ名称」フィールドに値が記録されているレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに対してそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値を新たに記録すべき値として当該集計表テーブルにレコードを追加するSQL文を表す文字列を生成し、第4のデータ操作手段として前記集計表データベースに保存するための、第4のSQL文生成手段と、集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルのレコードに計上した伝票のデータを加算又は減算するデータ操作手段を前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値が一致する当該集計表テーブルのレコードに対して加算または減算を行うために、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「集計対象」フィールドの値がTRUEである条件を満たすレコードの「フィールド名称」フィールドに記録されている値によって示されるすべての当該集計表テーブルのフィールドに対してそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値を加算または減算しさらに前記の条件を満たさず第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「集計対象」フィールドの値がFALSEであり「抽出条件」フィールドがTRUEである条件をも満たさないレコードの「フィールド名称」フィールドに記録されている値によって示されるすべての当該集計表テーブルのフィールドに対してそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値を新たな値として与えるSQL文を表す文字列を生成し、第5のデータ操作手段として前記集計表データベースに保存するための、第5のSQL文生成手段と、集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルのレコードに計上した伝票のデータを上書きするデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値とが一致するレコードに対して上書きを行うために、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「パラメータ名称」フィールドに値のあるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべての当該集計表テーブルのフィールドの保持している値をそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値によって置き換えるSQL文を表す文字列を生成し第6のデータ操作手段として前記集計表データベースに保存するための、第6のSQL文生成手段と、をさらに備えることができる。
次に、伝票管理システムにおける集計表の集計計算を実行するためには、前記集計表データベースに、前記第1のSQL文生成手段によって生成された第1のデータ操作手段と、前記第2のSQL文生成手段によって生成された第2のデータ操作手段と、前記第3のSQL文生成手段によって生成された第3のデータ操作手段と、前記第4のSQL文生成手段によって生成された第4のデータ操作手段と、前記第5のSQL文生成手段によって生成された第5のデータ操作手段と、前記第6のSQL文生成手段によって生成された第6のデータ操作手段と、をさらに有した伝票管理システムにおいて、パラメータとして、伝票データと、当該伝票データが新規計上又は参照計上と修正計上とのいずれであるかを示す識別子と、集計計算の対象となる集計表を表す集計IDの値と、当該伝票データが修正計上に係る場合に前記伝票管理データベースから抽出された修正前の伝票データと、を受け取るステップ1と、ステップ1で受け取った伝票データの本体項目について、ステップ3以降の処理が全ての本体項目について終了しているか否か判断し、終了していなければステップ3の処理に進ませ、終了していれば終了処理に進ませるステップ2と、ステップ2でステップ3以降が未処理であると判断した本体項目の処理IDを、修正計上に係るものであれば伝票データの問合せデータセクションから取得し新規計上又は参照計上にかかるものであれば伝票データの本体項目データセクションから取得して、その処理IDを前記集計表を表す集計IDの値によって前記第1のレコード抽出手段又は前記第2のレコード抽出手段に与えて第1のレコードセットを取得するステップ3と、ステップ3で取得した第1のレコードセットのレコードの数を知り、レコードの数の回数だけ以降の処理を繰り返すためすべてのレコードが以降の処理を終了しているか否か判断し、ステップ5以降の処理が未処理であれば処理を行うステップ5に進ませ、ステップ5以降の処理が終了していれば、レコード削除の有無を判断するステップ15に進ませるステップ4と、取得した第1のレコードセットに含まれる集計IDから集計計算の対象となる集計表テーブルを特定し、取得した第1のレコードセットに含まれる集計IDと処理IDを前記第3のレコード抽出手段に与えて第2のレコードセットを取得し、取得した第2のレコードセットに含まれるレコードの「処理対象」フィールドの値に従って処理対象の伝票データが計上された伝票データであるのか修正前の伝票データであるのかを選択するステップ5と、ステップ5で特定された集計表テーブルの親の伝票IDと集計計算の対象となる伝票データの伝票IDとが一致するか否か判断するステップ6と、ステップ6で親の伝票IDと集計計算の対象となる伝票データの伝票IDとが一致すると判断した場合に、第2のデータ操作手段にパラメータを与えて集計計算対象の集計表テーブルにレコードがあるかないか判断するステップ7と、ステップ7で集計計算対象の集計表テーブルにレコードがあると判断した場合に、第1のレコードセットの「データ処理動作」フィールドの記録された値に従って、前記第5のデータ操作手段または前記第6のデータ操作手段にパラメータを与えて、既存のレコードの上書き・加算・減算のいずれかを実行するステップ8と、ステップ7で集計計算対象の集計表テーブルにレコードがないと判断した場合に、第1のレコードセットの「データ処理動作」フィールドに記録された値に従って、前記第4のデータ操作手段にパラメータを与えて、レコードの新規追加を実行するステップ9と、ステップ6で親の伝票IDと集計計算の対象となる伝票データの伝票IDとが一致しないと判断した場合に、現在処理中の本体項目のデータに関連伝票データが含まれているか否か判断し、含まれていなければステップ4に戻らせ、含まれていればステップ11に進ませるステップ10と、ステップ10で現在処理中の本体項目のデータに関連伝票データが含まれていると判断した場合に、ステップ5で特定された集計表テーブルの親の伝票IDと処理中の本体項目が参照している伝票の伝票IDとが一致するか否かを判断し、一致しなければステップ4に戻らせ、一致していればステップ12に進ませるステップ11と、ステップ10で、ステップ5で特定された集計表テーブルの親の伝票IDと処理中の本体項目が参照している伝票の伝票IDとが一致すると判断した場合に、第2のデータ操作手段にパラメータを与えて集計計算対象の集計表テーブルにレコードがあるかないか判断するステップ12と、ステップ12で集計計算対象の集計表テーブルにレコードがあると判断した場合に、第1のレコードセットの「データ処理動作」フィールドの記録された値に従って、前記第5のデータ操作手段または前記第6のデータ操作手段にパラメータを与えて、既存のレコードの上書き・加算・減算のいずれかを実行するステップ13と、ステップ12で集計計算対象の集計表テーブルにレコードがないと判断した場合に、第1のレコードセットの「データ処理動作」フィールドに記録された値に従って、前記第4のデータ操作手段にパラメータを与えて、レコードの新規追加を実行するステップ14と、ステップ4ですべてのレコードが以降の処理を終了していると判断した場合に、第1のレコードセットに含まれるレコードの数からその回数だけ第3のデータ操作手段により、集計表テーブルのレコード中削除条件に合致したものを削除するステップ15と、を実行する。
なお、クライアント装置と、クライアント装置とネットワークで接続されたデータベースサーバ装置と、データベースサーバ装置と接続された伝票管理データベースと、で構成された伝票管理システムにおいて、伝票管理ソフトウェアは、必要に応じてデータベースサーバ装置を介して伝票管理データベースに格納された伝票データの提供を受けながら伝票データの入力・修正・計上・検索のためのインターフェイスを提供するステップと、入力された伝票データを所定の変換方式に従って変換してデータベースサーバ装置に送信するステップとを、クライアント装置に実行させ、クライアント装置から受信した新規計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの新規計上ステップと、クライアント装置から受信した修正計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの修正計上ステップと、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データを一件毎に検索しクライアント装置に送信する伝票一枚検索ステップと、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データの項目を一項目毎に検索してクライアント装置に送信する伝票一項目検索ステップとを、データベースサーバ装置に実行させ、個々の伝票に含まれるデータ中、計上されるデータを修飾するデータであるヘッダーの項目の種類と数を定義するデータを格納する伝票定義データベースと、伝票の種類と伝票間のデータの依存関係を定義するデータを格納する伝票関係定義データベースと、ヘッダーの項目で使用されるデータを格納するヘッダー用データ定義データベースと、個々の伝票に含まれるデータ中、計上の対象となる品目及びその属性を含む本体項目のデータを定義する本体項目用データ定義データベースと、クライアント装置から計上された伝票のデータを所定の方式に従って格納する伝票データベースと、で伝票を管理するデータベースとして伝票管理データベースを機能させるステップを実行させる。
本願発明によれば、管理する伝票の種類と伝票に含まれる項目、伝票間のデータの依存関係、伝票の集計表の種類とそれに含まれる項目、について、設定を変更するだけで自由に決定できるようになっているので、いかなる組織のいかなる伝票も同一の構造のデータベースに記録することができる。すなわち、従来は開発案件毎にデータベースの構造の設計から作業を開始しなければならかったものが、業務システムの主要な部分の開発が不要となり、また、同一構造のデータベースの使用により、システム全体の柔軟性を高めることができコスト削減が可能になる。本発明は、特にデータベースシステムの開発設計を受注するソフトウェアハウスの利用を念頭において開発したものであり、このようなソフトウェアハウスが利用することによって大きな効果を上げるものである。
図1は、本発明による伝票管理システムを実施するための構成全体を示すブロック図である。この伝票管理システムを実施するための主要なハードウェアは、ネットワーク7を介して通信するクライアントコンピュータ2とデータベースサーバ3であり、さらに必要に応じて各種の出力装置及び入力装置が接続される。クライアントコンピュータ2は新規のデータのアップロードあるいはデータの修正やデータ検索の指示を伝票データ5という一つのデータ形式でネットワーク7を介してデータベースサーバ3に送信し、伝票データ5を受信したデータベースサーバ3は、伝票データ5の内容に従って伝票管理データベース4に対するデータの追加・変更やデータの検索や各種出力データ等へのデータの追加・変更を実行する。なお、ユーザーに提供する各種出力データをここでは集計表といい、クライアントコンピュータ2から送信される伝票データ5に基づいてデータベースサーバ3側が行う集計表へのデータ更新処理をここでは集計計算という。また、データベースサーバ3は、必要な集計表をクライアントコンピュータ2側で表示させるための表示データ6をクライアントコンピュータ2に対して送信する。
ネットワーク7は、例えば、LAN、公衆回線網、インターネット等の既存のネットワークである。本実施の形態では、クライアントコンピュータ2とデータベースサーバ3間でTCP/IPとHTTPを使用して通信を行うようにしているので、インターネット経由でデータ通信が可能になっている。
クライアントコンピュータ2には、伝票のデータを入力しデータベースサーバ3へ送信するためのインターフェイスを提供するための伝票入力用インターフェイス提供ソフトウェア21と集計表の表示を提供するための集計表表示用ソフトウェア22が備えられる。
一方、データベースサーバ3には、クライアントコンピュータ2から送信された伝票データ5を伝票管理データベース4に記録する機能に関連する新規計上用ソフトウェア31及び修正計上用ソフトウェア32と、クライアントコンピュータ2からの要求に従って伝票管理データベース4の検索を行い必要なデータを抽出するための伝票1枚検索ソフトウェア33及び伝票1項目検索ソフトウェア34と、集計表を作成するための集計表作成ソフトウェア36とが備えられる。
伝票管理システムとしては、上記に述べたソフトウェアが必須であり、伝票についての基本的な処理である追加・変更・検索・集計を実行することが可能であるが、実際の業務処理ではさらに伝票を印刷するための機能を提供する伝票印刷用ソフトウェア38と、請求書発行ソフトウェア39と、クライアントコンピュータ2側にはサーバのネットワーク上での位置を特定する情報を提供することを主要な機能とするネットワーク環境等の基本的な設定を管理するための基本設定管理ソフトウェア23と、データベースサーバ3側には後述する図2及び図3に示すデータベースの内容を設定するためのユーザーインターフェイスを提供することを主たる機能とする基本設定管理ソフトウェア37とがそれぞれ必要である。
ここで、伝票印刷用ソフトウェア38は、図1ではデータベースサーバ3に備えられているが、伝票印刷はデータベースサーバ3側で行うことも出来るし、別途印刷専用のプリントサーバを設置してもよいし、クライアント2側で印刷することも可能であり、伝票印刷用ソフトウェア38は必要に応じてクライアント2側に備えられてもよい。
一方、請求書発行ソフトウェア39は、特定のコンピュータ1台にインストールされるものである。ここで、例えば、ネットワーク上の任意のコンピュータから任意のログインアカウントで請求書が発行できるとすると、請求書の多重発行が誰にとっても非常に容易になり、これにより何らかの不正を誘発する可能性があり、好ましくない。そこで、本発明によれば、請求書発行機能と伝票入力機能をそれぞれ請求書発行ソフトウェア39と伝票データ入力用インターフェイス提供ソフトウェア21に別々に持たせることにより、請求書発行ソフトウェア39をインストールするコンピュータを1台に限定することを可能とし、さらにそのコンピュータへの物理的なアクセスの制限を推奨することにより、請求書の多重発行を防止するようにしている。
なお、図1には特に図示していないが、本発明によるシステムに、コンピュータシステムを効率よく処理するためにユーザーのプログラムやデータ、ハードウェアなどを管理する基本ソフト(OS:Operating System)や、データベースの管理・運用を行う専用のソフトウェアであるDBMS(Database Management System)が備えられているのが前提である。
次に、伝票管理データベース4に含まれるデータベースの構造について説明する。図2及び図3は、伝票管理データベース4に含まれるデータベースの構成を示す図であり、図4は、本発明により管理される伝票の一例として、受注伝票の例を示した図である。図5は、本発明により管理される伝票の一例として、出荷伝票の例を示した図である。図6は、本発明により管理される伝票の一例として、売上伝票の例を示した図である。図2及び図3の説明にあたって、必要に応じて図4、図5、図6の例を参照する。
図2に示すのは、伝票に関する定義を行うデータベースであり、個々の伝票に含まれるヘッダーの項目の種類と数を定義する伝票定義データベース41、伝票の種類及び伝票間のデータの依存関係を定義する伝票関係定義データベース42、伝票のヘッダー部分で使用するデータを定義するヘッダー用データ定義データベース43、伝票の本体の項目部分で使用するデータを定義する本体項目用データベース44が含まれる。ここで、ヘッダーとは、伝票に含まれるデータのうち、計上されるデータを修飾するデータをいい、例えば図4に示す受注伝票中、矢印J107で示す受注日、矢印J103で示す担当者、矢印J111で示す受注請求先、矢印J104で示す納入先、矢印J108で示す納入日、矢印J215で示す貴発注No.などである。そして、これらヘッダーのデータを入力するための機能を提供するソフトウェアと、そのソフトウェアを識別するコントロールID、名称、タイプ等、後述する図7の入力コントロール定義テーブル41aの各フィールドのデータすべて又は一部とを合わせたものを入力コントロールという。一方、本体項目とは、計上の対象となる品目とその品目に対する属性等のひとかたまりのデータをいう。このデータに含まれるのは、品目の数量、単位、単価、金額、消費税等と備考と関連伝票のデータである。図4の受注伝票の例では、矢印J214やJ213で示す項目等である。
図3に示すのは、伝票データ及び集計表に関するデータベースであり、伝票データを蓄積するための伝票データベース45、集計表に関する定義を行う集計表定義データベース46、各集計表のデータを蓄積する集計表データベース47が含まれる。なお、図3に示すデータベースの詳細については後段で説明する。
以下、図2に示したデータベースの詳細について説明する。
〔伝票定義データベース〕
図2に示すように、伝票定義データベース41は、伝票のヘッダー部分を入力するための入力コントロールを定義する入力コントロール定義テーブル41aとどの伝票にどの入力コントロールを含めるかを定義する伝票別入力コントロール定義テーブル41bとを含む。
〔伝票定義データベース〕
図2に示すように、伝票定義データベース41は、伝票のヘッダー部分を入力するための入力コントロールを定義する入力コントロール定義テーブル41aとどの伝票にどの入力コントロールを含めるかを定義する伝票別入力コントロール定義テーブル41bとを含む。
図7に入力コントロール定義テーブル41aの例を示す。図7に示した入力コントロール定義テーブル41aのフィールド中、「コントロールID」フィールドには各入力コントロールの識別番号を記録する。また、「名称」フィールドには、コントロールIDに対応する入力コントロールの名称を表すデータを記録する。「タイプ」フィールドには、それぞれの入力コントロールが受け入れるデータのタイプを示すコードを記録するものであり、ここでは、1は数値、2は論理値、3は他のデータベースを参照、4は文字列、5は日付、6は時刻、7は1〜7までの任意の個数のデータに何らかの操作を加えて得られる文字または記号で表すことの出来る値、と規定されている。なお、ここで、「タイプ」フィールドにおいて1で定義される数値について補足的な説明をすると、通常コンピュータプログラムで数値を扱うときには、その数値の値のほかに、その数値のもつデータ型(整数型、長整数型、倍精度型等々)を明らかにしないと不都合が起こることが多々あるため、本実施の形態においても、数値のもつデータ型が問題となる。一方、人間の意識では数値の型など問題にしないといってよく、1万分の1のような小さな小数や10桁の大きな整数を同列に扱っている。そのため、本実施の形態では、利用者が数値で何事か表現したいと思ったときには、その数値のデータ型は意識されていないものという観点からシステム及びソフトウェアを構成している(仮に利用者にデータ型を明らかにするように求めても正しい型が指定されるとは限らないからである)。すなわち、利用者は数値のデータ型を意識しないでソフトウェアやシステムを利用することができるが、本実施の形態に係るソフトウェアの内部では、倍精度型が人間の意識に最も近いものであると判断して「数値」のデータは倍精度型で表現するようにしている。
図7に示した入力コントロール定義テーブル41aの各フィールドの説明の続きを行う。「表示」フィールドにはユーザーが入力を行うための入力画面上に表示する入力コントロールの名称データを記録するが、「名称」フィールドと同じ値でなくてもよい。「参照テーブル」フィールドは、「タイプ」フィールドの値が3、すなわち他のデータベースを参照するタイプの場合の参照されるテーブル名を定義する。「インデックス」フィールドには、「参照テ−ブル」フィールドの値、すなわち参照されるテーブルで使用されるインデックス名のデータを記録する。「連携実行コントロール」フィールドには、このテーブルで定義されている入力コントロールの値が変更されたときに実行するコンポーネント名データを記録する。ここで、コンポーネントとは、このソフトウェアから呼び出して実行させることのできるモジュール化したソフトウェアである。
図7に示したテーブル中で、すべてのフィールドに値が入力されているコントロールIDの5を例にとって説明すると、コントロールIDの5は、伝票中の請求先を入力するための入力コントロールであり、他のデータベースを参照してデータは入力され、参照テーブルは顧客テーブル、インデックスは五十音順、請求先として入力される値が変更されたときには入金日の計算を行う「入金計算」のコンポーネントが実行される。
図7のテーブルで定義される入力コントロールを図4の受注伝票を参照して説明すると、例えば、コントロールIDの7は矢印J107で示す受注日を入力するための入力コントロール、コントロールIDの3は矢印J103で示す担当者を入力するための入力コントロール、コントロールIDの4は矢印J104で示す納入先を入力するための入力コントロールである。
図8に、伝票別入力コントロール定義テーブル41bの例を示す。図8に示した伝票別入力コントロール定義テーブル41bのフィールド名中、「伝票ID」フィールドには後述する図9で示す伝票IDテーブル42aで定義されている各伝票を識別するコードを記録するが、図9に示すとおり、1は売上伝票、2は受注伝票、3は出荷伝票を表すコードである。「入力コントロール表示順番」フィールドは、伝票IDで特定されるある種類の伝票中、入力コントロールにより入力を行うそれぞれの項目が全入力項目中、第何番目に該当するかを記録する。また、「入力コントロール識別表示」フィールドは、伝票IDで特定される一つの伝票中に同じタイプ(入力コントロール定義テーブル41aの「タイプ」フィールドの値が同じ)があった場合の識別子データを記録するもので、例えば図8中、コントロールID3〜6及び9は、図7で定義されているとおり全てタイプが3であるため、「入力コントロール識別表示」フィールドにおいて、1〜5の識別子が付与されている。「コントロールID」フィールドは、図7で定義されているコントロールIDのコードが記録されている。「非表示」フィールドには論理値(図8の例では−1がTrue、0がFalseを意味している。)が記録され、値がTrueであれば、その値を含んでいるレコードが表している入力コントロールは、そのレコードが規定している伝票については画面に表示されない。例えば、図8で、伝票IDが1で、コントロールIDが12のレコードの非表示フィールドはー1となっている。これは、売上伝票(伝票ID=1)の画面表示に際して、入力コントロールの「月次」(コントロールID=12)は表示されないことを意味する。
「本体送付」フィールドには、論理値(図8の例では−1がTrue、0がFalsseを意味している。)が入り、値がTrueであれば、その値を含んでいるレコードが表している入力コントロールが保持する値を本体項目備考データセクション56(図21参照)にも保持する。
図8の例では受注伝票(伝票ID=2)の「貴発注No.」を表す入力コントロール(コントロールID=26)しかTrueとなっていないが、これはこのソフトウェアの運用上の必要性からこうなっているのであり、この点については以下のように説明できる。この例では、受注伝票の本体の各項目に対して、発注者側の発注No.が記録される。この状態でこの受注伝票(仮に1000番とする)と別の受注伝票(仮に1001番とする。これも同じように本体の各項目に、発注者の発注No.が記録されているとする)の2枚を参照して出荷伝票を計上しようとしたとき、ヘッダーの項目の、発注者側の発注No.が受注伝票から出荷伝票にコピーされるような設定になっていると、出荷伝票のヘッダーには2枚の受注伝票のうち、いずれか先に参照した受注伝票(仮に1001番の方ととする)のヘッダーがコピーされる。このときに、出荷伝票も受注伝票と同じように、ヘッダーに記録された発注者側の発注No.を本体の各項目に記録するようになっていると、出荷伝票のヘッダーに記録されたNo.1001番の受注伝票のデータが、本体の各項目に記録される。出荷伝票の本体項目の中には1000番の受注伝票を参照したものもあったので、No.1000番の受注伝票に基づく発注者側の発注No.をNo.1001番のデータで上書きすることになる。これは誤りなので、このような事態を避ける為に受注伝票の本体送付フィールドだけをTrueにしているものである。
「位置情報」フィールドには、そのフィールドが含まれているレコードが表している入力コントロールを画面表示時にどの位置に表示するかの情報を記録する。図8に示した例では、「位置情報」という名称のフィールドを1つ提示してあるだけだが、入力コントロールの表示手法によっては1つのフィールドだけでは足りない場合もあるし、位置情報が不要な場合もある。どのような表示手法を選ぶかは、入力インターフェイスの外観に対する好みや使用感に対する好みによるので、「位置情報」フィールドをどのように扱うかを事前に確定的に決定することは出来ない。しかしながら、以下の8つの情報を保持できるようにフィールドを用意しておけばどのような表示手法をとるにしてもおおむね充分であると言って良いと考えられる。なお、図8で示された「位置情報」というフィールドは、これから説明する8つのフィールドを総称的に表しているといえる。すなわち、これら8つのフィールドは、入力コントロール定義テーブル41aの「表示」フィールドの値を表示する際の、表示位置の左端のX座標とY座標の値、表示領域の幅と高さを表す値、そして実際の値を入力する入力領域のX座標とY座標の値、その入力領域の幅と高さを表す値の8つである。
図8から、例えば、伝票IDの1で特定される売上伝票には、コントロールIDの1、2、3、4、5、6、9、26、12及び28で定義される入力コントロールが含まれる。そして、例えば、コントロールIDの9で特定される「貴担当」の項目を入力する機能を提供する入力コントロールは、伝票IDの1で特定される売上伝票中、第7番目の入力項目「貴担当」の入力コントロールであり、売上伝票中他のデータベースを参照して入力する項目の5番目に該当する。
〔伝票関係定義データベース〕
伝票関係定義データベース42は、伝票の種類及び伝票間のデータの依存関係を定義するデータベースで、図2で示すように、取り扱う伝票の種類を定義する伝票IDテーブル42a、データベースに対する伝票データの計上の種類を定義する計上IDテーブル42b、データベースに記録される伝票データがどの伝票を参照した何の伝票であるかを一意に示す処理IDを定義する処理IDテーブル42c、ある処理のときにどの伝票のどの入力コントロールがどの伝票のどの入力コントロールを参照してデータを得るかを定義する伝票間参照関係テーブル42dを含む。
伝票関係定義データベース42は、伝票の種類及び伝票間のデータの依存関係を定義するデータベースで、図2で示すように、取り扱う伝票の種類を定義する伝票IDテーブル42a、データベースに対する伝票データの計上の種類を定義する計上IDテーブル42b、データベースに記録される伝票データがどの伝票を参照した何の伝票であるかを一意に示す処理IDを定義する処理IDテーブル42c、ある処理のときにどの伝票のどの入力コントロールがどの伝票のどの入力コントロールを参照してデータを得るかを定義する伝票間参照関係テーブル42dを含む。
図9に、取り扱う伝票の種類を定義する伝票IDテーブル42aの例を示す。図9に示したテーブルのフィールド中、「伝票ID」フィールドは取り扱う個々の伝票の種類を識別するためのコードを記録する。「名称」フィールドは、伝票IDに対応する伝票の名称データを記録するものであり、「ファイル名」フィールドは、伝票のデータを記録するデータベースファイル名を表すデータを記録する。「表示名」は、画面や印刷時に表示される場合の名称を定義するもので、「名称」フィールドと同一でなくてもよい。「修正動作」フィールドは、修正した伝票を参照している伝票がある場合、修正した値からその伝票を参照している伝票の値を引くか否かを表すデータを記録する。例えば、出荷伝票を参照している売上伝票がある場合、売上伝票の値を修正後の出荷伝票の値から引くか否かを表すもので、この例の場合は引くべきである。受注伝票や発注伝票のように常にシステムとはまったく関係なく数量が決定される伝票を修正した場合は、その伝票を参照している伝票の値は引かない。なぜならば、ユーザーは伝票の修正時には最初の受注数量はいくつで、その後いくつを出荷計上したかといった履歴を考慮せずに変更されてはならない最終的な値を修正時に入力するからである。このフィールドの値が−1ならば引き、0ならば何もしない。
図10にデータベースに対する伝票データの計上の種類を定義する計上IDテーブル42bの例を示す。本発明による伝票管理ソフトウェアにおいて、伝票データの「計上」には4つの態様がある。
コードの1で特定されるのは「新規計上」であり、新規計上とは、計上される伝票データがユーザーのコンソール操作により与えられる場合をいう。
コードの2で特定されるのは「参照計上」であり、参照計上とは、計上される伝票データが他の種類の伝票を参照することにより得られた場合をいい、参照された伝票の数量は参照した側に移動される。すなわち、参照した伝票の方で計上した数量が、参照された側の伝票の数量から引かれることになる。例えば、出荷伝票で数量100を計上してあるときに、その出荷伝票を参照して売上伝票を計上しようとすると、参照の結果、売上伝票にも数量100が入力される。売上伝票に入力されたこの数量に変更が加えられずに計上されると、出荷伝票の数量から100が引かれ、その結果数量は0となる。一方、何らかの理由で、入力された数量が80に変更され計上された場合は、出荷伝票の数量は、100から80が引かれて20となる。次の機会にこの出荷伝票を参照すると、当然ながらその時点での数量が得られる。前記の例の売上伝票の数慮が100であった場合は0が得られるし、80であった場合は、20が得られる。なお、参照した結果得られた数量が0である場合は、何も参照しなかったのと事実上同じと考えられるので、その場合はエラーとして扱うことができる。
コードの3で特定されるのは「修正計上」であり、修正計上とは、計上される伝票データが同一種類の伝票を参照することにより得られる場合(すなわち、同一種類の伝票を参照するのはその伝票を修正することを目的としている場合である)をいう。
コードの4で特定されるのは「複写計上」であり、複写計上とは、計上される伝票データが他の種類の伝票のデータを転記することにより得られた場合で、複写された伝票のデータには何の変更も加えられない場合をいう。なお、通常の伝票管理を行う場合は、「新規計上」「参照計上」「修正計上」の3種類の計上によりデータの追加・変更・管理を行うことが可能であり、本実施の形態でも基本的にはこの3種類の計上を設定しておけば発明の実施が可能である。従って、「複写計上」は常に必須の要素とはいえないが、例えば、ある伝票を起点にして、伝票データの流れが分岐するような場合、具体的には、入庫伝票−仕入伝票とデータが流れるフローと、入庫伝票−出庫伝票−売上伝票とデータが流れるフローに分岐するような場合に、分岐の一方の流れを作り出すためには、入庫伝票を参照して計上する仕入伝票と出荷伝票のうちどちらかを複写計上とし、他方を参照計上とすればよい。このようにすれば、複写計上は、参照された伝票のデータに変更を加えないので、後に参照計上することが可能となり、データの流れが分岐される。このような業務の場合には、前記の3種類の計上に加えて「複写計上」を設定しておくとよい。
図11に、データベースに記録される伝票データがどの伝票を参照した何の伝票であるかを一意に示す処理IDを定義する処理IDテーブル42cの例を示す。 図11に示されたテーブルのフィールド中、「処理ID」フィールドはデータベースに記録される伝票データがどの伝票を参照した何の伝票であるかを一意に示す処理IDを識別するコードであり、処理IDの個数は最大で、伝票の種類×(伝票の種類数−1+3)となる(+3は、新規計上の場合と修正計上の場合と複写計上の場合を追加するからである)。処理IDは、伝票間に参照関係がない場合は存在しない。従って、処理IDの個数は伝票の種類数からは判断できない。
図11に示されたテーブルのフィールド中、「名称」フィールドはコードで識別されるそれぞれの処理IDの名称データを記録し、「計上ID」フィールドは当該処理IDで表される処理が該当する計上IDのコードを記録し、「伝票ID」フィールドは当該処理IDで表される処理を行う伝票IDのコードを記録し、「トップ選択肢」フィールドは当該処理IDで表される処理が同一の伝票内で最も選択される頻度が高いと思われるならばTrueとして「−1」を記録し、そうでなければ「0」を記録する。「参照伝票ID」フィールドは当該処理IDで表される処理のときにデータが参照される側の伝票の伝票IDのコードを記録する。
ここで、図11で示した処理IDテーブル42cの例に従って処理IDの「1」を説明すると、処理ID「1」は、新規売上の処理であり、計上IDとしては「1」すなわち新規計上であり、伝票は伝票ID「1」で定義する売上伝票であり、新規計上処理は売上伝票での処理では選択される頻度は最も高い処理ではなく、また新規売上処理は他の伝票を参照して行われる処理ではない。また、処理ID「3」を説明すると、処理ID「3」は、出荷参照売上の処理であり、計上IDとしては「2」すなわち参照計上であり、伝票は伝票ID「1」で定義する売上伝票であり、出荷参照売上の処理は売上伝票での処理では選択される頻度は最も高く、また、出荷参照売上の処理は伝票IDが「3」である出荷伝票を参照して行われる処理である。
図12に、どの処理のときにどの伝票がどの伝票を参照してデータを得るかを定義する伝票間参照関係テーブル42dの例を示す。図12で示したテーブルのフィールド中、「処理ID」フィールドは図11のテーブルで定義されている処理IDのコードを記録している。「被参照伝票ID」フィールドは参照される側の伝票の伝票IDのコードを記録し、「参照伝票ID」フィールドは被参照伝票において参照する伝票の伝票IDのコードを記録する。
「被参照入力コントロール」フィールドは、参照される側の伝票でヘッダーの項目を入力するための入力コントロールであって、参照伝票の入力コントロールによって参照される入力コントロールを記録し、「参照入力コントロール」フィールドは、参照する伝票中の参照する入力コントロールを記録する。「コピー」フィールドは、伝票間で参照が行われるとき、ヘッダーの項目のデータが参照される伝票から参照する伝票へコピーされるか否かを定義するもので、コピーされるならば−1、そうでなければ0を記録する。
図12で定義されている内容を図4、図5、図6に示す受注伝票、出荷伝票、売上伝票を例にして説明する。例えば、図12の伝票間参照関係テーブルの1行目で定義されているのは、処理IDが2である「受注参照売上」の処理(図11参照)では、売上伝票(伝票IDのコードが1)は、受注伝票(伝票IDのコードが2)を参照する、売上伝票の2番目の入力コントロール(請求先を入力する機能を提供する入力コントロール)は、受注伝票の2番目の入力コントロールを参照し、そのヘッダーの項目がコピーされる、ということになる。また、例えば、図12の伝票間参照関係テーブルの9行目で定義されているのは、処理IDが3の「出荷参照売上」の処理では、売上伝票(伝票IDのコードが1)は、出荷伝票(伝票IDのコードが3)を参照する、売上伝票の8番目の入力コントロール(貴発注Noを入力する機能を提供する入力コントロール)は、出荷伝票の7番目の入力コントロール(貴発注Noを入力する機能を提供する入力コントロール)を参照し、そのヘッダーの項目がコピーされる、ということになる。
〔ヘッダー用データ定義データベース〕
ヘッダー用データ定義データベース43は、伝票のヘッダー部分で使用するデータを定義するデータベースであり、図2に示すように、顧客テーブル43a、仕入先テーブル43b、配送業者テーブル43c、社員テーブル43d、未登録項目テーブル43e、YesNoテーブル43f、下位区分テーブル43g、任意テーブル43hを含む。
ヘッダー用データ定義データベース43は、伝票のヘッダー部分で使用するデータを定義するデータベースであり、図2に示すように、顧客テーブル43a、仕入先テーブル43b、配送業者テーブル43c、社員テーブル43d、未登録項目テーブル43e、YesNoテーブル43f、下位区分テーブル43g、任意テーブル43hを含む。
顧客テーブル43aは、例えば、図7で定義される入力コントロール中、コントロールIDが4の納入先、コントロールIDが5の請求先、コントロールIDが11の受注請求先を入力する場合に参照する顧客テーブルの内容を定義するもので、ここでは特に具体的な例は図示しないが、顧客を特定するコード、名称、名称の振り仮名、郵便番号、住所1、住所2、電話番号、ファクシミリ番号、担当者名、締切日、支払月、支払日、指定伝票の有無、発注番号の有無、当該コードのレコードを削除済みとして扱う為の識別子、業種によって消費税率が変更される場合の識別子、等のフィールドを含み、それぞれのフィールドに対し、データが入力される。
仕入先テーブル43b及び配送業者テーブル43cは、同じ構造のテーブルを使用する。ここでは特に具体的な例は図示しないが、それぞれ仕入先または配送業者を特定するコード、名称、名称の振り仮名、郵便番号、住所1、住所2、電話番号、ファクシミリ番号、担当者名、締切日、支払月、支払日、当該コードのレコードを削除済みとして扱う為の識別子、消費税率が変わる場合の識別子、等のフィールドを含み、それぞれのフィールドに対し、データが入力される。仕入先については図7の例では登場していないが、配送業者については、例えば、図7の例で定義される入力コントロール中、コントロールIDが6の配送を入力する場合参照する配送業者テーブルの内容を定義するものである。
社員テーブル43dは、例えば図7で定義される入力コントロール中、コントロールIDが3の自社の担当者を入力する場合に参照する社員テーブルの内容を定義するものであり、ここでは特に具体的な例は図示しないが、社員を特定するコード、氏名、振り仮名、郵便番号、住所1、住所2、電話番号、部署名、当該コードのレコードを削除済みとして扱う為の識別子、等のフィールドを含み、それぞれのフィールドに対し、データが入力される。
未登録項目テーブル43eは、未登録(あるいはその同義語、例えば諸口、その他、等)という1つのレコードしか含まない。このテーブルは、データタイプが3の場合(他のデータベースを参照する場合)であって、さらに、用意するテーブルの内容が確定出来ない場合(その理由としては、変化が早くてすぐ陳腐化するなど)に記録すべきデータを一括して扱いたいときに使用する。
YesNoテーブル43fは、入力コントロールが受け入れるデータタイプが2の場合(論理値)のときに使用するものであり、選択の余地が2つしかない属性に対する選択肢を提供するテーブルであるが、データタイプが3の場合(他のデータベースを参照する場合)でデータが2つしかない場合と区別する必要がある。そこで、データタイプとして2をもつ入力コントロールは、その値として「はい」か「いいえ」のどちらしかもたないとし、YesNoテーブル43fによってその選ばれるべき選択肢を提供することにした。
下位区分テーブル43gは、データタイプが3の場合(他のデータベースを参照する場合)使用するものである。この「他のデータベース」としてどのようなものが必要とされるかは予め予測できない。そこで、下位区分テーブル43gは、コード、名称、振り仮名、当該レコードを削除済みとして扱う為の識別子、のフィールドを含み、テーブルの構造のみが規定されている。下位区分テーブル43gは、データタイプが3の入力コントロールごとに必要とされるデータベースの内容が異なるので、最大で入力コントロールの数だけ用意されることになる。その場合、それぞれの下位区分テーブル43gを区別するために使用されるのはテーブルの名称である。
任意テーブル43hは、コード、名称、振り仮名、当該レコードを削除済みとして扱う為の識別子、のフィールドを含み、意味と名称を自由に設定出来るテーブルである。この任意テーブル43hは、ソフトウェアの実装時に何らかの理由で想定外のテーブルが必要になったときに、予め構造を規定しているテーブルでその必要性を満たすことが出来るように用意されたものである。
〔本体項目用データベース〕
本体項目用データベース44は、計上の対象となる伝票の本体の項目部分で使用するデータベースを定義するもので、図2に示すとおり、品目コードテーブル44a、品目属性定義テーブル44b、品目コード品目属性対応テーブル44c、単位テーブル44d、品目上位区分テーブル44e、YesNoテーブル44f、下位区分テーブル44g、区分品目対応テーブル44h、任意テーブル44iを含む。
本体項目用データベース44は、計上の対象となる伝票の本体の項目部分で使用するデータベースを定義するもので、図2に示すとおり、品目コードテーブル44a、品目属性定義テーブル44b、品目コード品目属性対応テーブル44c、単位テーブル44d、品目上位区分テーブル44e、YesNoテーブル44f、下位区分テーブル44g、区分品目対応テーブル44h、任意テーブル44iを含む。
図13に、計上の対象となる品目を識別する品目コードを定義する品目コードテーブル44aの例を示す。図13に示すテーブルのフィールド中、「品目コード」フィールドは各品目を識別するために付与されたコードを定義するものであり、「名称」フィールドは品目の名称、「振り仮名」フィールドは品目の読みをそれぞれ表すデータを記録する。「標準単位」フィールドは当該コードで識別される品目を計るときに標準的に使用される単位のデータを記録するもので、具体的には後述する単位テーブル44dで定義されるコードを用いる。「消費税率コード」フィールドは、品目の性質によって消費税率が変更される場合の識別子を記録するためのものである。また、「レコード削除」のフィールドは、当該レコードを削除済みとして扱う為の識別子のためのものであり、このレコードを削除とするならばTrueとして「−1」を記録し、そうでなければ「0」を記録する。
図14に、品目コードで特定される品目の属性を定義する品目属性定義テーブル44bの例を示す。図14に示すテーブルのフィールド中、「属性コード」フィールドは品目についての属性を特定するためのコードを定義する。「名称」フィールドは属性の名称を表すデータを記録するもので、「振り仮名」フィールドは属性名の読みを表すデータを記録するものである。「タイプ」フィールドはこの属性を入力する場合のデータのタイプのコードを記録する。ここでは、1は数値、2は論理値、3は他のデータベースを参照、4は文字列、5は日付、6は時刻、7は1〜7までの任意の個数のデータに何らかの操作を加えて得られる文字または記号で表すことの出来る値、としている。「参照テーブル」フィールドは、「タイプ」フィールドで値が3の場合に参照するテーブル名を定義する。「区切り記号」は、表示時に当該属性と他の属性を区切る区切り記号を定義する。「規定値」フィールドは、「タイプ」フィールドの値が2(論理値)だった場合の規定値を定義する。2(論理値)でない場合は、このフィールドの値は、参照されないのでなんでもよい。「単位」フィールドは、当該属性の単位を定義するもので、後述する図16で示す単位テーブルのコードを利用するのではなく、単位の表示名を直接データとして保持する(従って、どのような単位でも規定可能である。)。「連携実行コントロール」フィールドは、当該属性の値が変更されたときに実行するコンポーネントの名前を定義する。
図15に、どの品目にどの属性が含まれるかを定義する品目コード品目属性対応テーブル44cの例を示す。図15に示すテーブルのフィールド中、「品目コード」フィールドは品目コードテーブル44aで定義される品目コードを記録し、「属性順序」フィールドは同一品目内での属性の順番を定義する。「属性コード」フィールドは、当該品目の当該属性順に該当する属性コード(品目属性定義テーブル44bで定義されている属性コード)を記録する。図15で示されるテーブルの例の1行目から3行目では、品目コードの1で規定された異形棒の第1番目の属性は属性コードの2で規定された直径であり、異形棒の第2番目の属性は属性コードの3で規定された長さであり、異形棒の第3番目の属性は属性コードの41で規定された重量である、ということを表している。
図16に、単位のコードを定義する単位テーブル44dの例を示す。図16に示すテーブルのフィールド中、「単位コード」フィールドはそれぞれの単位を識別するためのコードを定義し、「名称」フィールドは当該単位の名称データを記録し、「振り仮名」フィールドは当該名称の振り仮名を表すデータを記録するものである。「レコード削除」のフィールドは、当該レコードを削除済みとして扱う為の識別子のためのものであり、このレコードを削除とするならばTrueとして「−1」を入力し、そうでなければ「0」を記録する。
図17に、品目の上位区分を定義する品目上位区分テーブル44eの例を示す。図17に示すテーブルのフィールド中、「品目区分コード」フィールドはそれぞれの上位区分を識別するために付与するコードを定義するものであり、「名称」フィールドは当該上位区分の名称を表し、「振り仮名」フィールドは当該名称の振り仮名を表す。「レコード削除」のフィールドは、当該レコードを削除済みとして扱う為の識別子のためのものであり、このレコードを削除とするならばTrueとして「−1」を記録し、そうでなければ「0」を記録する。
YesNoテーブル44fは、図14で示す品目属性定義テーブル44bのフィールド中、品目属性フィールドのデータタイプが2の場合(論理値)のときに使用するものであり、選択の余地が2つしかない属性に対する選択肢を提供するテーブルであるが、データタイプが3の場合(他のデータベースを参照する場合)でデータが2つしかない場合と区別する必要がある。そこで、データタイプとして2をもつ品目は、その値として「はい」か「いいえ」のどちらしかもたないとし、YesNoテーブル44fによってその選ばれるべき選択肢を提供することにした。
下位区分テーブル44gは、品目のデータタイプが3の場合(他のデータベースを参照する場合)使用するものである。この「他のデータベース」としてどのようなものが必要とされるかは予め予測できない。そこで、下位区分テーブル44gは、コード、名称、振り仮名、当該レコードを削除済みとして扱う為の識別子、のフィールドを含み、意味と名称を自由に設定出来るように、テーブルの構造のみが規定されている。下位区分テーブル44gは、データタイプが3の品目ごとに必要とされるデータベースの内容が異なるので、最大で品目の数だけ用意されることになる。その場合、それぞれの下位区分テーブル44gを区別するために使用されるのはテーブルの名称である。図18では、下位区分テーブル44gの例として、図14の品目属性定義テーブルの第2行目参照テーブルで「異形」と規定されている、「異形」テーブルの例として、二つのテーブル「径」、「ね規」の例を示した。
図19に、どの区分にどの品目が含まれるかを定義する区分品目対応テーブル44hの例を示す。図19に示されたテーブルの「品目区分コード」フィールドには図17で示した品目区分テーブル44eで定義された品目区分コードが表され、「品目コード」フィールドには当該品目区分に該当する図13に示した品目コードテーブル44aで定義された品目コードが表される。
なお、任意テーブル44iは、コード、名称、振り仮名、当該レコードを削除済みとして扱う為の識別子、のフィールドを含み、意味と名称を自由に設定出来るテーブルである。この任意テーブル43iは、ソフトウェアの実装時に何らかの理由で想定外のテーブルが必要になったときに、予め構造を規定しているテーブルでその必要性を満たすことが出来るように用意されたものである。
以上で、図2に示した伝票に関する定義を行う各データベースの説明を終了する。伝票管理データベース4(図1参照)には、さらに図3に示した伝票データ及び集計表に関するデータベースが含まれるが、図3についての説明を行う前提として、今度は伝票データ5(図1参照)について説明する。
〔伝票データの構造〕
図20及び図21は、伝票データ5(図1参照)の構造を模式的に示した図である。伝票データ5は、伝票管理データベース4(図1参照)に対するデータの追加・変更やデータの検索を実行するために、クライアントコンピュータ2からデータベースサーバ3に送信される一連のデータのかたまりであり、ユーザーが伝票入力用インターフェイス提供ソフトウェア21を用いてデータの追加・変更あるいはデータの検索のための入力処理を行った後に、入力されたデータは常に図20及び図21に示す一定の形式のデータ構造に変換されて、データベースサーバ3に送信される。
図20及び図21は、伝票データ5(図1参照)の構造を模式的に示した図である。伝票データ5は、伝票管理データベース4(図1参照)に対するデータの追加・変更やデータの検索を実行するために、クライアントコンピュータ2からデータベースサーバ3に送信される一連のデータのかたまりであり、ユーザーが伝票入力用インターフェイス提供ソフトウェア21を用いてデータの追加・変更あるいはデータの検索のための入力処理を行った後に、入力されたデータは常に図20及び図21に示す一定の形式のデータ構造に変換されて、データベースサーバ3に送信される。
図20及び図21に示すとおり、伝票データ5に含まれる種々のデータは、問合せ用データセクション51、伝票基本データセクション52、ヘッダー項目データセクション53、ヘッダー未登録データセクション54、本体項目データセクション55、本体項目備考データセクション56、関連伝票データセクション57、属性データセクション58の各データセクションに分かれて記録される。以下、各データセクションについて説明する。
問合せデータセクション51に含まれるデータは、データベースサーバ3に対して検索の指示を行うために送信されるデータであり、このデータベースサーバ3への問合せは、図10の計上IDテーブル42bで定義される計上IDが2の参照計上または計上IDが3の修正計上をユーザーが選択した場合に実行される。問合せデータセクション51には、検索の対象とするのが1つの伝票単位なのか、あるいは伝票の1項目単位なのかを表すデータベースサーバ3側の処理コードが記録されるエリア51a、エラーコード等データベースサーバ3側からのステータスコードを記録するためのエリア51b、検索の対象となる伝票の伝票ID(図9参照)を記録するためのエリア51c、検索する伝票の伝票番号を記録するためのエリア51d、検索する伝票の項目番号を記録するためのエリア51e(「項目番号」は、当該伝票の本体項目中、何番目の本体項目かを表す)、伝票をファックスするか否かを記録するためのエリア51f(ユーザーのファックス送信の要望がある場合に備えて設けてある)、伝票全体の処理ID(図11参照)を記録するためのエリア51g、サーバー側からのエラーメッセージを記録するためのエリア51h、データベースサーバ3側での処理結果(すなわち、成功したか、エラーとなったか)を真か偽かで記録するためのエリア51i、将来何らかの必要が生じた場合に備えて設けられた予約の記録領域51jが含まれている。
伝票データ基本データセクション52は、計上する伝票の基本的なデータを記録するセクションであり、図9で定義されている伝票IDを記録するためのエリア52a、計上の対象となる伝票の伝票番号を記録するエリア52b(なお、新たに計上される伝票の伝票番号はデータベースサーバ3側の新規計上用ソフトウェア31によって採番されるようになっている)、伝票計上の日付を記録するエリア52c、伝票の印刷回数を記録するエリア52d(印刷回数を記録するのは、不正操作を防止するためである)、伝票の実際の作成日を記録するためのエリア52eが含まれている。伝票データ基本データセクション52は、処理に係る伝票に関して、必ず1つのみに特定されるデータを記録するセクションである。
ヘッダー項目データセクション53は、伝票のヘッダーについてのデータを項目毎に記録するものである。従って、どのような処理を行うか、あるいは伝票の種類によって、伝票データ5に含まれるヘッダー項目データセクション53の個数は、0以上の任意の個数で構成される。ヘッダー項目データセクション53には、伝票番号を記録するエリア53a、図7で定義される入力コントロールIDのコードを記録するためのエリア53b、この項目が伝票内で何番目の項目かを示す項目の順序のデータを記録するエリア53c、入力コントロールによりヘッダー項目データとして実際に入力する項目の実体データを記録するエリア53d、この項目が有効か否かを示すデータを記録するためのエリア53eを含んでいる。
なお、ここで、当該項目が有効か否かを示すデータを記録するためのエリア53eについて、ここに記録されるデータがどのように使用されるかについての説明を補足する。クライアントコンピュータ2の伝票データ入力用インターフェイス提供ソフトウェア21では、入力されたデータ(このデータはユーザーのコンソール操作によるものでも、データベースサーバ3から送られたものでもよい)を保持するために記憶領域をあらかじめ確保するが、その確保のときに、その時点で設定されている入力対象の伝票のヘッダーの構成に合わせて必要な数のヘッダー項目データセクションを確保し、この時点で確定しているデータ(エリア53bに記録される「コントロールID」とエリア53cに記録される「項目の順序」)を設定しさらにエリア53eの値をTrue(有効)とする。つまり、クライアントコンピュータ2側は、現時点で設定されているヘッダー項目の構成に従い記憶領域を確保しており、その構成に従ったデータが入力されると期待している。しかし、以前の伝票を修正しようとして1枚の伝票を検索した場合は、その検索した伝票が計上された時点と現時点ではヘッダー項目の構成が異なる可能性がある。そこで、データベースサーバ3から送られてきた伝票データ5をクライアントコンピュータ2側で取り込むとき、まず確保された記憶領域の53eの値をすべてFalse(無効)とする。次に、データベースサーバ3から送られた最初のヘッダー項目データについてそのコントロールIDと現時点での設定の最初のヘッダー項目データのコントロールIDを比較し、この両者の値が一致し、さらに記憶領域53eが無効である場合には、記憶領域の53d「この項目の実体データ」にデータベースサーバ3から送信されたデータをコピーし、記憶領域53eの値をTrue(有効)とする。両者の値が一致しない場合、または一致するが記憶領域53eの値がTrue(有効)となっている場合は、何もしない。この処理の結果、記憶領域53eがTrue(有効)になっていれば、データベースサーバ3から送信されてきたデータのうち最初のヘッダー項についての処理は終了する。一方、有効でなければ二番目の現時点でのヘッダー項目と比較し、以下すべての現時点でのヘッダー項目との比較が終わるまで、この処理を繰り返す。(ただし、途中で記憶領域53eがTrue(有効)になれば、その時点で処理を終了させる。この処理が終了した時点で、記憶領域53eをFalse(無効)からTrue(有効)へ変更させることがなかったデータベースサーバ3から送信されたヘッダー項目のデータは捨てられることになる。上記の処理はデータベースサーバ3から送られてきた最初のヘッダー項目について説明したものであるが、二番目以降のデータについても同様で、すべてのデータベースサーバ3から送信されたヘッダー項目のデータについて同じ処理を繰り返す。
その結果、以前のヘッダー項目と現時点でのヘッダー項目のうち同一のコントロールIDを持つものだけがコピーされ、以前のヘッダー項目にあり、現時点でのヘッダー項目にない項目のデータはクライアント側にとり込まれず、逆に、以前のヘッダー項目になく、現時点のヘッダー項目にある項目に関しては最初に記憶領域が確保された時の状態のままである。
ヘッダー未登録項目データセクション54は、伝票のヘッダー中、未登録項目についてのデータを項目ごとに記録するものである。従って、ヘッダー項目データセクション53と同様に、伝票データ5に含まれるヘッダー未登録項目データセクション54の個数は、0以上の任意の個数で構成される。ヘッダー未登録項目データセクション54は、データタイプが他のデータベースを参照する場合であって、用意するテーブルの内容が確定できない場合に、直接未登録項目のデータを記録するもので、伝票番号を記録するエリア54a、この未登録項目が伝票の何番目のヘッダーの項目かを示すデータを記録するエリア54b、実際に入力される未登録項目の内容を記録するエリア54cを含んでいる。
本体項目データセクション55は、計上の対象となる伝票の本体の項目のデータを項目毎に記録するものである。従って、どのような処理を行うか、あるいは伝票の種類によって、伝票データ5に含まれる本体項目データセクション55の個数は、0以上の任意の個数で構成される。本体項目データセクション55には、伝票番号を記録するエリア55a、項目番号を記録するエリア55b、画面に表示された伝票の何番目に表示される本体項目であるかを記録するエリア55c、伝票番号1番の1項目目から数えて通算何番目の項目に該当するかを示すシリアル番号を記録するエリア55d、図17で定義される品目区分コードを記録するためのエリア55e、図13で定義される品目コードを記録するためのエリア55f、項目の表示名を属性も含めて記録するためのエリア55g、この項目の数量を示すデータを記録するためのエリア55h、図16で定義されている単位コードを記録するためのエリア55i、この項目の単価を示すデータを記録するためのエリア55j、この項目の金額のデータを記録するためのエリア55k、消費税のデータを記録するためのエリア55l、この項目の処理IDのコードを記録するためのエリア55mが含まれる。なお、数量、単位、単価、金額、消費税のデータを記録するエリア55h、55i、55j、55k、55lは、伝票の性質によっては何もデータが記録されない場合がある。
本体項目備考データセクション56は、1枚の伝票に含まれる全ての本体項目を同時に修飾するヘッダーのデータを各本体項目に関連づけて記録するものである。品目を修飾するという点では、「属性」データを記録する場合と同じだと考えられるが、個々の品目についての補足説明を行う場合の入力欄を設ける場合は属性のデータを記録することによって行うのに対し、本体項目備考データは、ヘッダーの項目のデータを本体項目を修飾するものとして個々の本体項目データに関連付けて記録するものである。
本体項目備考データとして記録することが必要な場合の一例を挙げる。例えば、受注伝票に発注者の発注番号を記録したいとすると、発注番号は、1枚の伝票に含まれる本体項目全てに対して共通なので、品目の属性として記録するよりも、ヘッダーの項目として記録する方がふさわしい。しかし、このように発注番号を記録した受注伝票を2枚以上参照して1枚の売上伝票を計上する場合、売上伝票の本体の1項目目は受注伝票1000番の1項目目のデータで、売上伝票の本体の2項目目は受注伝票1001番の1項目目のデータである、と言うような構成になる。この場合、受注伝票の1000番と1001番では、発注番号が異なるので、売上伝票の本体の1項目目の品目を修飾する発注番号と、2項目目の品目を修飾する発注番号は異なる。このような場合に正確に各項目の発注番号を売上伝票データに記録するために本体項目備考データを記録するセクションを設けたのである。
なお、ヘッダーの項目全てに対して本体項目備考データセクション56にデータが記録されるわけではなく、必要と思われるデータを選択して指定することにより、本体項目備考データセクション56にデータが記録される。従って、伝票の種類あるいは処理の種類により、伝票データ5に含まれる本体項目備考データセクション56の個数は、0以上の任意の個数で構成される。
本体項目備考データセクション56には、伝票番号を記録するエリア56a、本体項目の項目番号を記録するエリア56b、ヘッダー項目データセクション53のコントロールIDを記録するエリア53bに記録される値に基づく入力コントロールテーブル41aから得られる「表示」フィールドの値と同じ値を「備考の名前」として記録するエリア56c、ヘッダー項目データセクション53のコントロールIDを記録するエリア53bに記録された値と同じ値を備考コードとして記録するエリア56d、ヘッダー項目データセクション53のエリア53dに記録された値かあるいはヘッダー未登録データセクション54のエリア54cに記録された値を備考内容データとして記録するエリア56e、本体項目が伝票番号1番の1項目目から数えて通算何番目の項目に該当するかを示すシリアル番号を記録するエリア56fを含んでいる。なお、ヘッダー項目のデータを本体備考データセクション56にも保持するか否かは、伝票別入力コントロール定義テーブル41bの「本体送付」フィールドに論理値を記録ことにより行われる。
関連伝票データセクション57は、本体項目にこの項目がどの伝票の何番目の項目を参照してデータを得ているかを記録するものである。そのため、伝票の種類あるいは処理の種類により、伝票データ5に含まれる関連伝票データセクション57の個数は、0以上の任意の個数で構成される。関連伝票データセクション57には、伝票番号を記録するエリア57a、本体項目の項目番号を記録するエリア57b、本体項目が伝票番号1番の1番目から数えて通算何番目の項目に該当するかを示すシリアル番号を記録するエリア57c、参照されている伝票の項目とこの項目との関係を表す関連コードを記録するエリア57d、参照されている伝票の伝票ID(図9で定義されている)を記録するエリア57e、参照されている伝票の伝票番号を記録するエリア57f、参照されている伝票の項目番号を記録するエリア57g、参照されている項目が伝票番号1番の1番目から数えて通算何番目の項目に該当するかを示すシリアル番号を記録するエリア57hを含んでいる。
なお、本実施例においては関連コードはまだ定義されていない。それはこのコードは現在の実施例では使用されておらず、将来の拡張に備えるために用意されたものであるからである。予定されているコードは例えば以下のようなものになる。関連コードの値が「1」である関連伝票データは、ある伝票データがそれ自身のデータを得る為に参照した伝票を指すデータである(例えば、売上伝票No.1000が出荷伝票No.950を参照して計上されている場合には、売上伝票No.1000は関連伝票データに出荷伝票No.950を指すデータを持つが、そのときの関連コードが1となる)。関連コードの値が「2」である関連伝票データは、関連コードの値が「1」の関連伝票データが指す伝票データが、そのデータを得る為に参照した伝票を指すデータである(例えば、上記の例で、出荷伝票No.950は受注伝票No.800を参照しているとすると、売上伝票No.1000は、関連伝票データに受注伝票No.800を指すデータを持つが、そのときの関連コードは2となる)。関連コードの値が「3」である関連伝票データは、上記の関連コード「2」についての説明文において、関連コードの値の2を3に、1を2に読み替えたものとなり、関連コードの値が「4」以降についても同様の読み替えを順次行うことによって説明されるものである。
また、関連コードの値が「−1」である関連伝票データは、その関連伝票データを含む伝票データを参照してデータを得た伝票データを指す(例えば、上記の例で、受注伝票No.800の伝票データは、関連伝票データに出荷伝票No.950を指すデータを持つが、そのときの関連コードは「−1」となる)。関連コードの値が「−2」である関連伝票データは、関連コードの値が「−1」である関連伝票データが指す伝票データを参照してデータを得た伝票データを指す(例えば、上記の例で、受注伝票No.800の伝票データは、関連伝票データに売上伝票No.1000を指すデータを持つが、その時の関連コードの値は「−2」となる)。関連コードの値が「−3」である関連伝票データは、上記の関連コード「−2」についての説明文において、関連コードの値の「−2」を「−3」に、「−1」を「−2」に読み替えたものとなり、関連コードの値が「−4」以降についても同様の読み替えを順次行うことによって説明されるものである。なお、値がマイナスの関連伝票データは、その関連伝票データを含む伝票データが計上された時点ではなく、その関連伝票データが指す伝票データが計上された時点でなければ、その内容を確定できない。
属性データセクション58は、伝票に含まれる本体項目毎に品目の属性を記録するものであり、伝票の種類あるいは処理の種類により、伝票データ5に含まれる属性データセクション58の個数は、品目ごとに0以上の任意の個数で構成され、さらにその品目が含まれる本体項目の数も0以上の任意の個数で構成される。属性データセクション58は、伝票番号を記録するエリア58a、項目番号を記録するエリア58b、本体項目データセクション55に記録されているこの項目が伝票番号1番の1項目目から数えて通算何番目の項目に該当するかを示すシリアル番号を記録するエリア58c、本体項目データセクション55に記録されている品目コードを記録するエリア58d、この属性はこの項目のなかで何番目であるかを記録するエリア58e、図14で定義されている品目属性コードを記録するエリア58f、属性の値を記録するためのエリア58gを含んでいる。
以上の伝票データ5の構造において、図示は省略したが、各伝票データセクションを区切るためのデータが別途付与されている。また、本体項目備考データセクション56、関連伝票データセクション57及び属性データセクション58は、本体項目データセクション55の下位に従属する構造になっている。図20、図21に示すように、伝票データ5に含まれるデータを、本来の計上する伝票に含まれるデータを記録した伝票基本データセクション52以降のデータセクションのみならず、データベースサーバ3に対する検索の指示を行うためのデータを記録する問合せ用データセクション51を常に含んだ構成にしたのは、そのような構成にすることにより、クライアントコンピュータ2とデータベースサーバ3との間でやりとりするすべてのデータが含まれることになるので、データベースサーバ3は伝票データ5を受領した時点で、送信されたデータが計上する伝票の内容に関わるデータなのかあるいは指示データであるのかを判断するためにデータ構造を解析する必要がなくなるからである。なお、図20及び図21には図示していないが、伝票データ5には、伝票データの先頭と末尾を示す識別子が含まれているので、例えば、問合せ用データセクション51のデータしかデータベースサーバ3に送信しない場合は、問合せ用データセクション51の直後にデータの末尾を示す識別子が付されることにより、存在しない伝票基本データセクション52以降のデータにアクセスが試みられる場合はない。
計上する伝票に含まれるデータを記録した伝票基本データセクション52以降のデータセクションに構造については、それぞれのデータセクションが一枚の伝票につき必ず1つあるか、0個以上の不定の数か、という点を考慮してデータセクションの区切りを定めてある。すなわち、伝票番号、伝票計上の日付、伝票の印刷回数、伝票の実際の作成日のデータは一枚の伝票についてそれぞれ必ず有するデータであるので、伝票基本データセクション52に記録される。一方、ヘッダー項目やヘッダー未登録項目や本体項目は、一枚の伝票についてのデータ数が0個以上の不定の数であり、さらに本体項目の下層に展開される備考、関連伝票、属性のデータについても、一枚の伝票についてのデータ数が0個以上の不定の数である。これらのデータ数が不定なデータについては、それぞれが一枚の同一伝票に含まれるデータという点では共通だが、個々のデータの数については、それぞれ何ら関連性はない。したがって、これらのデータを1つのまとまったデータセクションとして記録するのではなく、ヘッダー項目データセクション53、ヘッダー未登録項目データセクション54、本体項目データセクション55、本体項目データセクション55の下層に展開する本体項目備考データセクション56、関連伝票データセクション57、属性データセクション58、にそれぞれ項目毎に記録するようにした。これらのデータを1つのまとまったデータセクションとして記録すると、場合によってはデータを含まない空白の下層のデータエリアが多量に発生して非効率的であるからである。
なお、本実施の形態においては、伝票データ5をXML形式に変換してデータベースサーバ3に送信するようにした。図22及び図23にそのXML形式のデータの例を示す。図22及び図23において、各タグの右側に記載されている内容のデータをタグとタグに挟まれた間に記述する。なお、構造に特徴があるので、タグの名称については、どのような名称を用いても構わない。図22及び図23に示したタグの名称は単なる例である。
以上で伝票データの構造に関する説明を終了する。次に、データベースサーバ3に送信された伝票データ5に基づいて伝票データを蓄積し管理するための図3に示す伝票データベース45の詳細について説明する。
〔伝票データベース〕
伝票データ5を伝票管理データベース4に記録するには、図20及び図21に示したデータセクション52〜58を、各データセクション毎に図3に示した伝票データベース45の各テーブルに保存する。すなわち、伝票基本データセクション52に記録されたデータは伝票基本データテーブル45aへ、ヘッダー項目データセクション53に記録されたデータはヘッダー項目データテーブル45bへ、ヘッダー未登録項目データセクション54に記録されたデータはヘッダー未登録項目データテーブル45cへ、本体項目データセクション55に記録されたデータは本体項目データテーブル45dへ、本体項目備考データセクション56に記録されたデータは本体項目備考データテーブル45eへ、関連伝票データセクション57に記録されたデータは関連伝票データテーブル45fへ、属性データセクション58に記録されたデータは属性データテーブル45gへ、それぞれ記録される。それぞれのデータセクションの各記録エリアがそれぞれのデータテーブルの各フィールドに割り当てられ、各記録エリアに記録されたデータがそのフィールドの値となる。
伝票データ5を伝票管理データベース4に記録するには、図20及び図21に示したデータセクション52〜58を、各データセクション毎に図3に示した伝票データベース45の各テーブルに保存する。すなわち、伝票基本データセクション52に記録されたデータは伝票基本データテーブル45aへ、ヘッダー項目データセクション53に記録されたデータはヘッダー項目データテーブル45bへ、ヘッダー未登録項目データセクション54に記録されたデータはヘッダー未登録項目データテーブル45cへ、本体項目データセクション55に記録されたデータは本体項目データテーブル45dへ、本体項目備考データセクション56に記録されたデータは本体項目備考データテーブル45eへ、関連伝票データセクション57に記録されたデータは関連伝票データテーブル45fへ、属性データセクション58に記録されたデータは属性データテーブル45gへ、それぞれ記録される。それぞれのデータセクションの各記録エリアがそれぞれのデータテーブルの各フィールドに割り当てられ、各記録エリアに記録されたデータがそのフィールドの値となる。
図24〜図30は、伝票データベース45に属する各テーブルの例を示したものであり、これらの例は、図4に示す伝票IDが2である受注伝票(図9参照)の伝票番号が14(図4中矢印J401参照)の伝票データを含んだ例なので、図4、図20〜21を参照しながらこれらのテーブルの内容について説明する。
図24に例を示す伝票基本データテーブル45aは、伝票ID、伝票番号、計上日、作成日、印刷回数の各フィールドに、伝票データ5の伝票基本データセクション52の伝票IDを記録するエリア52a、伝票番号を記録するエリア52b、伝票計上の日付を記録するエリア52c、伝票の印刷回数を記録するエリア52d、伝票の作成日を記録するエリア52eの各エリアに記録されたデータがそれぞれ記録される。図24に示す伝票基本データテーブル45aの3行目に図4の受注伝票のデータが記録されている。すなわち、伝票IDが2である受注伝票で、伝票番号が14(図4中の矢印J401参照)、計上日及び作成日が2003年4月11日である。
図25に例を示すヘッダー項目データテーブル45bは、伝票番号、コントロールID、項目の順序、項目実体の各フィールドに、伝票データ5のヘッダー項目データセクション53の伝票番号を記録するエリア53a、コントロールIDを記録するエリア53b、項目の順序を記録するエリア53c、項目の実体データを記録するエリア53dの各エリアに記録されたデータがそれぞれ記録される。図25に示した例では、伝票番号14のヘッダー項目の1番目から9番目までの項目のコントロールIDと項目に入力された実際の内容を示しており、例えば、第1行目は図4中矢印J107で示す部分を反映しており、伝票番号14の第1番目のヘッダー項目は、コントロールIDが7である受注日の入力コントロールにより(図7参照)入力を行う項目であり、実際に入力されたデータは2003/04/11である。
図26に例を示すヘッダー未登録項目データテーブル45cは、伝票番号、項目の順序、未登録項目の内容の各フィールドに、伝票データ5のヘッダー未登録項目データセクション54の伝票番号を記録するエリア54a、項目の順序を記録するエリア54b、未登録項目の内容として入力された内容を記録する54cの各エリアに記録されたデータがそれぞれ記録される。図26に示した例では、図25に示した図中、第6行目の項目の順序が6番目の入力コントロールが9で参照テーブルとして未登録項目が指定されており(図7参照)、これが図26の図中第3行目の未登録項目の内容である「室橋」に該当する。図4中、J406の矢印で示す部分である。
図27に例を示す本体項目データテーブル45dは、伝票番号、項目番号、シリアル番号、品目区分コード、品目コード、表示品名、数量、単位コード、金額、消費税、処理IDの各フィールドに、伝票データ5の本体項目データセクション55の伝票番号を記録するエリア55a、項目番号を記録するエリア55b、シリアル番号を記録するエリア55d、品目区分コードを記録するエリア55e、品目コードを記録するエリア55f、項目の表示名を記録するエリア55g、数量を記録するエリア55h、単位コードを記録するエリア55i、単価を記録するエリア55j、金額を記録するエリア55k、消費税を記録するエリア55l、処理IDを記録するエリア55mの各エリアに記録されたデータがそれぞれ記録される。図27に示した例は、図4に示す受注伝票中の、本体項目の1番目の項目(図4中、矢印J214で示す)及び本体項目の二番目の項目(図4中、矢印J214で示す)のデータを示したもので、処理IDが5なので新規受注により(図11参照)計上されたデータである(なお、図27で、数量、金額、消費税が0となっているのは、図4で示した受注伝票No.14を参照して図5の出荷伝票No.1が計上された後の時点のテーブルの状態を示したもので、出荷伝票で計上された数量が受注伝票から引かれるので、受注伝票の数量が0となる)。なお、伝票データ5の本体項目データセクション55中の画面上で表示された順序のデータを記録するエリア55cのデータは本体項目データテーブル45dには記録しない。
図28に例を示す本体項目備考データテーブル45eは、伝票番号、項目番号、シリアル番号、備考の名称、備考コード、備考内容の各フィールドに、伝票データ5の本体項目備考データセクション56の伝票番号を記録するエリア56a、項目番号を記録するエリア56b、備考の名前を記録するエリア56c、備考コードを記録するエリア56d、シリアル番号を記録するエリア56fの各エリアに記録されたデータがそれぞれ記録される。図28に示した図の第3行目では、図4に示した受注伝票中、矢印J215で示す備考「貴発注No.」の内容が記録される。
図29に例を示す関連伝票データテーブル45fは、伝票番号、項目番号、シリアル番号、関連コード、参照ID、参照伝票番号、参照項目番号、参照シリアル番号の各フィールドに、伝票データ5の関連伝票データセクション57の伝票番号を記録するエリア57a、項目番号を記録するエリア57b、シリアル番号を記録するエリア57c、関連コードを記録するエリア57d、参照伝票IDを記録するエリア57e、参照伝票番号を記録するエリア57f、参照項目番号を記録するエリア57g、参照シリアル番号を記録するエリア57hに記録されたデータがそれぞれ記録される。なお、図29は、受注伝票No.14を参照して計上された出荷伝票No.5の関連伝票データを記入した例である。
図30に示す属性データテーブル45gは、伝票番号、項目番号、シリアル番号、品目コード、属性順序、属性コード、属性の値の各フィールドに、伝票データ5の属性データセクション58の伝票番号を記録するエリア58a、項目番号を記録するエリア58b、シリアル番号を記録するエリア58c、品目コードを記録するエリア58d、属性順序を記録するエリア58e、属性コードを記録するエリア58f、属性の値を記録するエリア58gの各エリアに記録されたデータが記録される。図30では、図4に示す受注伝票の項目番号が2である矢印J213で示す項目の属性データを記録しており、品目コード13の属性について、図14及び図15で定義されている属性コード及び属性順序に従って、属性の値を記録している。
以上で伝票データ5の構造及び伝票データベース45についての説明を終了する。次に、伝票データ5の入力及びデータベースサーバ3への計上を行うためのインターフェイスを提供する伝票入力用インターフェイス提供ソフトウェア21(図1参照)の機能について説明する。
[伝票入力用インターフェイス提供ソフトウェア]
図31は伝票入力用インターフェイス提供ソフトウェア21が提供する機能の概要について図示したものであり、図32〜図36は、ユーザーがデータの入力や処理の選択等を行うために、伝票入力用インターフェイス提供ソフトウェア21がコンピュータのディスプレイ上に表示させる各画面の例を示したものである。
[伝票入力用インターフェイス提供ソフトウェア]
図31は伝票入力用インターフェイス提供ソフトウェア21が提供する機能の概要について図示したものであり、図32〜図36は、ユーザーがデータの入力や処理の選択等を行うために、伝票入力用インターフェイス提供ソフトウェア21がコンピュータのディスプレイ上に表示させる各画面の例を示したものである。
伝票入力用インターフェイス提供ソフトウェア21は、例えば、図32(a)に示したメインメニューの「伝票計上」(矢印y1)を選択し、図32(b)に示す「伝票計上」の下層プルダウンメニュー(矢印y2)からユーザーが「○○伝票計上」を選択することでロードされる。ここで、下層ブルダウンメニューで「○○伝票計上」を選択するということは、計上の対象となる伝票の種類を選択する、すなわち、図9で定義している伝票IDを選択することになる。この機能が図31中、計上する伝票の伝票IDの選択機能21aに該当する。
計上する伝票の伝票IDの選択機能21aの提供により、ユーザーが計上する伝票の伝票IDを選択すると、伝票データの入力用画面が表示される。図33は、受注伝票計上を選択した場合の入力用画面の一例を示している。この伝票データの入力用画面表示機能21bによって提供される画面(これを以下「入力待ち画面」という)は、計上IDの選択機能21c、ヘッダー項目入力機能21f、本体項目の処理IDの選択機能21g、本体項目入力機能21k、データベースサーバ4への計上用伝票データの送信機能21nのそれぞれの機能がすべてこの画面を介して提供されることに特徴がある。
図33中、矢印cで示す「伝票No.」のボタンは計上IDの選択機能を提供するものであり(これを以下「伝票ボタン」という)、矢印fで示すウィンドーはヘッダー項目を入力するためのものであり、矢印gで示す各No.を表示するボタンは本体項目の処理IDの選択機能を提供するもの(これを以下「No.X」ボタンという)であり、矢印kで示すウィンドーは本体項目を表示するためのものであり、矢印mで示すのは入力された伝票のデータを計上するためにデータベースサーバ4に送信するためのボタンである。なお、矢印nで示す「終了」ボタンはユーザーがこのメニューを終了させるためのボタンである。次に上記した各機能について、図33〜図36の画面の例を参照しながらより詳細に説明する。
以下の説明は、ユーザーが図33に示す入力待ち画面を表示させて以降の動作を説明するものである。まず、ユーザーが伝票ボタンcを押した場合について説明する。伝票ボタンcが押されると、次に図34に示す処理選択画面1のうち(a)の画面が表示される。図34(a)では、「他の伝票を参照せず新規に受注伝票を計上する」の選択肢がデフォルトとして設定されている。これにOKボタンを押すことは、すなわち図10で定義されている新規計上の計上IDを選択することである。新規計上が選択された場合、すべての項目についてユーザーが独自に入力を行うことになるので、再び図33の入力待ち画面が表示される。一方、処理内容選択画面1において、「以前の受注伝票を修正する」を選択した場合は、修正計上の計上IDを選択したことになり、「見積書を参照して受注伝票を計上する」を選択した場合は、参照計上の計上IDを選択したことになる。なお、図34で示す画面が表示する段階で既に伝票IDは選択されているので、ここで「新規計上」、「修正計上」または「参照計上」を選択するということは、すなわち、図11で定義している処理IDを選択することにもなる(ここで、図34に示す処理選択画面1に表示される選択肢はあくまで例示であって、ここに表示される選択肢は、処理選択画面1が表示される時点ですでに選択されている伝票IDにかかわる処理ID全てになる。従って、図11に示す処理IDテーブル42cの内容が変れば、選択肢の数や内容はそれに応じて変ることになる)。
処理内容選択画面1において、修正計上あるいは参照計上を選択した場合には、すでに伝票管理データベース4に記録されている過去の伝票のデータを呼び出す必要がある。そこで、修正計上あるいは参照計上を選択した場合には、図34(b)の矢印xで示す伝票番号入力欄を表示させ、ユーザーの入力を促す(これは、図31中、伝票番号入力機能21dに該当する)。伝票番号の入力が行われ、OKボタンが押されると、入力されたデータは図20で示す伝票データの構造中、問合せ用データセクション51に変換され、指定された伝票のデータを要求する伝票データ5として、データベースサーバ3に送信される(これは、図31中、データベースサーバへの伝票1枚データ要求機能21eに該当する)。そして、データベースサーバ3から返信された指定の伝票のデータはクライアントコンピュータ2側で表示等するために必要な処理が行われ、図33に示す入力待ち画面中の矢印fやkで示されるウィンドーに表示され、ユーザーの次の段階の入力を促すことになる。
新規計上あるいは修正計上や参照計上であっても、ヘッダー項目の入力は再び図33に示す入力待ち画面に戻って、fで示すウィンドーを用いて行われる。修正計上や参照計上のためにすでに過去の伝票番号を指定してデータベースサーバ3に要求を行った場合は、図33の例で示すように、指定された伝票のデータがfのウィンドーに表示される。fのウィンドーの左側に各ヘッダー項目が表示され、ユーザーは各ヘッダー項目欄の右側にデータを入力していくが、修正計上や参照計上の場合は過去のデータを利用しながら、または、データベースサーバ3からヘッダー用定義データベース43(図2参照)の各テーブルの内容が送信され画面上でスクロールすることによって入力するデータを選択できるようになっている。
次に、本体項目用データの入力に関する機能である本体項目の処理IDの選択機能21g、本体項目入力機能21kについて説明する。本体項目用データについての処理IDの選択は図33中の矢印gで示す各No.を示すボタンを選択することによって実行される。ここでのNo.は、同一伝票番号内に複数の本体項目用データが含まれる場合に、伝票単位でデータをデータベースサーバ3から呼び出した場合には、項目の順にそれぞれのNo.の右側のウィンドーに表示されるし、例えば特定の伝票の項目を指定してデータを呼び出した場合は、その指定に際して選択したNo.を示すボタンの右側のウィンドーに表示される。
ここで、例えば図34(b)に示したように処理内容選択画面1で伝票番号を指定することによってデータベースサーバ3からすでに指定の伝票のデータが送信されている場合には、図33中の矢印kで示すウィンドーに送信された本体項目のデータが表示されている。そのとき、本体項目のデータが表示されたNo.Xボタンを選択すると、図35に示す処理選択画面2のうち(a)に示す画面が表示される。ここでは、「表示されているデータを修正する」の選択肢がデフォルトとして設定されているので、OKボタンを選択すると、図36に示した本体項目入力画面が表示され、例示した(a)または(b)のようにすでに送信されている本体項目のデータが本体項目の入力画面にロードされる。そして、ユーザーはこの画面を利用してデータの修正を行うことができる。
一方、図35に示した処理内容選択画面2において、「他の伝票を参照せずに新規に受注伝票を計上する」を選択した場合には、図33に示した入力待ち画面が再び表示される。また、図35に示した処理内容選択画面2において、(b)に示すように「見積書を参照して受注伝票を計上する」を選択した場合には、矢印xで示す伝票番号入力欄及び矢印yで示す項目番号入力欄を表示させ、ユーザーの入力を促す(図31中、伝票番号と項目番号入力機能21iに該当する)。伝票番号及び項目番号の入力が行われ、OKボタンが押されると、入力されたデータは図20で示す伝票データ5の構造中、問合せ用データセクション51に変換され、指定された伝票のデータを要求する伝票データ5として、データベースサーバ3に送信される(図31中、データベースサーバへの伝票1項目データ要求機能21jに該当する)。そして、データベースサーバ3から返信された指定の伝票のデータは、図33に示す入力待ち画面に表示され、ユーザーの次の段階の入力を促すことになる。
次に、図33に示した入力待ち画面において、ユーザーが直接kのウィンドーを選択した場合について説明する。このとき、kのウィンドーにすでにデータベースサーバ3から送信されたデータが表示されている場合には、このウィンドーを選択することによって、表示されていたデータが図36に示す本体項目入力画面にロードされるので、この画面においてユーザーがデータの修正等を行うことができる。一方、入力待ち画面のkのウィンドーに何も表示がない場合には、これを選択することによって、空白の本体項目入力画面が表示され、ユーザーが新規に入力を行うことが出来る。なお、本体項目入力画面では、データベースサーバ3から本体項目用データベース44(図2参照)の各テーブルの内容が送信されてスクロールすることによって入力するデータを選択できるようになっている。
ユーザーによる伝票の新規計上、参照計上、あるいは伝票の修正のための入力が完了すると、図33で示す入力待ち画面の矢印mで示す計上ボタンを選択することにより、入力されたデータは図20で示す伝票データの構造の伝票基本データセクション52以下すべてのデータとして、データベースサーバ3に送信される。計上ボタンの選択により伝票データ5をデータベースサーバ3に送信する場合、問合せ用データセクション51におけるサーバー側の処理コード51aのエリア及び伝票ID51cのエリアの値が、計上の目的により変化する。すなわち、サーバー側の処理コード51aの値が、新規計上か、参照計上か、以前の伝票の修正か、の区別を表し、伝票ID51cの値により、計上する伝票の伝票IDを表す。伝票を計上する場合には、問合せ用データセクション51においてこれ以外のデータは必要ない。データベースサーバ3側で計上に対してエラーが発生した場合には、サーバー側からのステータスコード51bのエリアにエラーコードが、エラーメッセージ51hのエリアにエラーメッセージが記録された問合せデータセクション51の部分がデータベースサーバ3から送信される。一方、エラーが発生しなかった場合には、サーバー側からのステータスコード51bのエリアに成功を示すコードが、新規計上と参照計上の場合には、伝票番号51dのエリアに伝票番号が記録されてデータベースサーバ3から送信される。
さらに、ここで、参照計上あるいは修正計上のために、処理選択画面1(図34参照)あるいは処理選択画面2(図35参照)で伝票番号または伝票番号と項目番号を指定して、データベースサーバ3に指定の伝票のデータを要求する場合についても説明する。データベースサーバ3に送信される伝票データ5は、図20で示す伝票データ5の構造中、問合せデータセクション51とその直後に付されたデータの末尾を示す識別子のみであり、実際にデータとして含まれるのは、サーバー側の処理コードを記録するエリア51aに記録された検索が伝票1枚かあるいは伝票の1項目のどちらかを示すコード、伝票IDを記録するエリア51cに記録された検索の対象となる伝票のID、伝票番号を記録するエリア51dに記録された検索の対象となる伝票番号、項目番号を記録するエリア51eに記録された検索の対象となる伝票の項目番号、の4つである。なお、処理内容選択画面1を介して検索指示がデータベースサーバ3に送信される場合は、項目番号51dにはデータは与えられない。
この問合せに対して、データベースサーバ3は、エラーが発生しなかった場合には伝票データ5の問合わせデータセクション51及び伝票基本データセクション52以下の必要なデータを送信する。一方、エラーが発生した場合には、サーバー側からのステータスコード51bのエリアにエラーコードが、エラーメッセージ51hのエリアにエラーメッセージが記録された問合せデータセクション51の部分がデータベースサーバ3から送信される。次に、クライアントコンピュータ2からの要求に対してデータベースサーバ3から送信された伝票データ5がクライアントコンピュータ2側でどのように処理されるかについて説明する。
参照計上または修正計上を行うためにデータベースサーバ3に対する問合せが成功した場合、検索された伝票のデータがクライアントコンピュータ2に送信されるが、このデータをクライアントコンピュータ2側でそのまま受け入れてユーザーの処理の対象とすることは出来ない。受信したデータに対しては整形の必要があり、その整形の種類は4種類である。
参照計上を行うために、他の種類の伝票を1枚検索した場合には、ヘッダー項目に関する部分、伝票番号、項目番号、関連伝票に関する部分、の4点についてのデータについて以下のように整形を行う必要がある。図20の伝票データの構造中、ヘッダー項目データセクション53及びヘッダー未登録項目データセクション54のヘッダー項目に関するデータについては、伝票の種類が異なると、ヘッダー部分の構成が異なるのでデータの取捨選択を行う。各データセクションの伝票番号については、データベースサーバ3に計上するために伝票のデータを送信したときにデータベースサーバ3側で決定するので0にクリアする。各データセクションの項目番号については、データベースサーバ3から送信された項目番号のデータが1から始まり連続しているかどうか保証されていないので(参照された伝票のデータはすでに別の機会に1項目の検索を受けており、そのデータがない場合もあるからである)、新たに送信されたデータの最初の本体の項目から1からの連番を割り当てる。なお、本体項目データセクション55の画面上で表示された順序のエリア55cの値は、項目番号に新たに番号を割り当てたので、その値と等しくなる。また、関連伝票に関する部分については、検索された伝票は計上されたときの関連伝票のデータがあればその関連伝票のデータも共に送信されてくるが、今度は検索された伝票が関連伝票として新たな伝票が計上されることになるので、もとの関連伝票に関するデータについては書換あるいは追加が必要となる。
修正計上を行うために以前の伝票を検索した場合には、同じ種類の伝票を検索するのでデータの整形の必要はなさそうであるが、以前の伝票と現在の伝票ではヘッダー項目の部分の構成が変更されている可能性があるので、変更の有無を確認し、必要があればヘッダー項目の部分の整形を行わなければならない。一方、参照計上の場合と異なり、項目番号には変更を加えない。なぜならば、例えば、送信された伝票のデータの本体項目が1つしかなくその項目番号が5番だとすると、この本体項目が最初のデータであるとして項目番号を1番に変更すると、修正計上として再びこの伝票のデータをデータベースサーバ3に送信したときに、クライアントコンピュータ2側では5番目の本体項目が修正されることを意図しているにも拘らず、指定された伝票番号の1番目の項目を修正してしまうことになるからである。但し、クライアントコンピュータ2側では、(例えば画面上で表示位置を決定するときなど)本体項目のデータの並ぶ順番を項目番号として扱いたいときもある。そこで、本体項目データセクション55の画面上で表示された順序のエリア55cに1から連続した順番を割り当てる。
修正計上のために以前の伝票の1項目を検索した場合には、参照計上の場合と同様の理由で、項目番号、本体項目データセクション55の画面上で表示された順序のエリア55cの値、及び関連伝票データセクション57のデータを整形しなくてはならない。但し、項目番号と画面上で表示された順序のエリアに代入する値は、何項目目に検索したデータをコピーするか、というコピー先を示すデータとなる。
なお、複写計上のために伝票を1枚検索した場合は、検索した伝票が計上しようとしている伝票と同じ種類か否かにより処理が異なる。検索した伝票が計上しようとしている伝票と同じ種類の伝票の場合は、以前の伝票と現在の伝票との間でヘッダー項目の部分の変更の有無を確認し、必要があればヘッダー項目の部分の整形を行い、伝票番号を0にクリアした上、送信された伝票のデータの本体項目の最初の項目から項目番号を1から順番に割り当て、関連伝票に関するデータを削除する。また、検索した伝票が計上しようとしている伝票と別の種類の伝票である場合は、ヘッダー項目データセクション53及びヘッダー未登録項目データセクション54のヘッダー項目に関するデータについては、ヘッダー部分の構成が異なるのでデータの取捨選択を行い、各データセクションの伝票番号については0にクリアし、各データセクションの項目番号については、新たに送信されたデータの最初の本体の項目から1からの連番を割り当てる。また、関連伝票に関する部分のデータは削除する。
以上で伝票データ入力用インターフェイス提供ソフトウェア21についての説明を終了する。次にクライアントコンピュータ2から伝票データ5を受信して、伝票データ5に含まれるクライアントコンピュータ2からの指示に従って伝票管理データベース4に対する操作を実行する、データベースサーバ3側に備えられた新規計上用ソフトウェア31、修正計上用ソフトウェア32、伝票1枚検索ソフトウェア33、及び伝票1項目検索ソフトウェア34について説明する。
〔新規計上用ソフトゥエア〕
新規計上用ソフトウェア31は、新たに計上される伝票のデータを伝票管理データベースに対して追加する機能を提供するもので、新規計上、参照計上及び複写計上による場合を含む。その手順は以下のとおりである。
(1)受信した伝票データ5の問合せデータセクション51の伝票IDを記録するエリア51c(図20参照)に記録された伝票IDの値からどの伝票に対する計上かを判断し、伝票管理データベース4に設けられた伝票データベース45を開く。
(2)伝票データ5の伝票基本データセクション52のデータを記録する伝票基本データテーブル45aを排他モードで開き(すでに排他モードで開かれている場合には、排他モードで開けるまで開く動作を繰り返す)、最新の伝票番号を得てそれに1を加え、新たに計上する伝票の番号とする。
(3)その新たに取得した伝票番号を、受信した伝票データ5の各データセクションの伝票番号を記録するエリアにセットする。
(4)伝票データ5の記録されているデータを各データセクション毎に、伝票データベース45の各データテーブル45a〜45gに追加する。
(5)参照計上の場合のみ、計上されたデータを参照伝票から引く。
新規計上用ソフトウェア31は、新たに計上される伝票のデータを伝票管理データベースに対して追加する機能を提供するもので、新規計上、参照計上及び複写計上による場合を含む。その手順は以下のとおりである。
(1)受信した伝票データ5の問合せデータセクション51の伝票IDを記録するエリア51c(図20参照)に記録された伝票IDの値からどの伝票に対する計上かを判断し、伝票管理データベース4に設けられた伝票データベース45を開く。
(2)伝票データ5の伝票基本データセクション52のデータを記録する伝票基本データテーブル45aを排他モードで開き(すでに排他モードで開かれている場合には、排他モードで開けるまで開く動作を繰り返す)、最新の伝票番号を得てそれに1を加え、新たに計上する伝票の番号とする。
(3)その新たに取得した伝票番号を、受信した伝票データ5の各データセクションの伝票番号を記録するエリアにセットする。
(4)伝票データ5の記録されているデータを各データセクション毎に、伝票データベース45の各データテーブル45a〜45gに追加する。
(5)参照計上の場合のみ、計上されたデータを参照伝票から引く。
〔修正計上用ソフトウェア〕
修正計上用ソフトウェア32は、すでに伝票管理データベース4に記録されている伝票のデータを修正する機能を提供するものであり、修正計上によって伝票データ5をデータベースサーバ3にアップロードした場合に実行されるものである。その手順は以下のとおりである。
(1)受信した伝票データ5の問合せデータセクション51の伝票IDを記録するエリア51cに記録された伝票IDの値からどの伝票に対する修正かを判断し、伝票管理データベース4に設けられた伝票データベース45の該当ファイルを開く。
(2)修正前の修正対象伝票を、伝票データ5の問合せ用データセクション51に記録されている伝票番号及び項目番号から検索する。
(3)クライアントコンピュータ2から送信された修正後の各本体項目について以下の処理を実行する。
(4)本体項目データセクション55のこの項目の処理IDを記録するエリア55mに記録されている処理IDに基づいて、処理IDテーブル42c(図11参照)を検索する。
(5)処理IDテーブル42cでその処理IDの計上IDが参照計上に該当すれば、以下の処理を実行する。一方、その処理IDが参照計上以外であれば(9)の処理に飛ぶ。
(6)修正対象伝票が参照している伝票のデータベースを開く。
(7)(2)で検索した修正前のデータを、修正対象伝票が参照している伝票に対して足す(つまり戻すことになる)。
(8)クライアントコンピュータ2から送信された修正後のデータを、修正対象伝票が参照している伝票から引く。
(9)クライアントコンピュータ2から送信された修正後のデータを(1)で開いた修正対象のデータベースに上書きする。
(10)今処理している伝票に対する前方参照があるか否か調べる(ここで、「前方参照」とは、ある伝票を参照して計上されている伝票があるとき、参照されている伝票から見て、他の伝票が自分を参照していることをいう。例えば、受注伝票を参照して売上伝票を計上しているとき、受注伝票からみて売上伝票が自分を参照している場合をいう。)。具体的には、(1)の伝票IDの値を参照伝票IDのフィールドにもつレコードを処理IDテーブル42c(図11参照)から抽出する。レコードがあれば(レコードは1件とは限らない)前方参照はある。なお、この場合の「ある」は「定義上ある」の意味であって、実際に今処理している個別の伝票の前方参照が「ある」ことを意味しているわけではない。)
(11)前方参照がある場合は、以下の処理をする。ない場合は(3)からの処理を繰り返す。
(12)伝票IDテーブル42a(図9参照)で、(1)の伝票IDの値を伝票IDフィールドに持つレコードの修正時動作フィールドの値を調べ、True(−1)ならば、以下の処理を行う。ない場合は、(3)からの処理を繰り返す。
(13)(10)で得られた処理IDテーブル42cのレコードすべてについて以下の処理を行う。
(14)修正対象伝票を参照している伝票のデータベースを開く。
(15)修正対象伝票を参照している伝票(複数枚あるときはそれらの合計)の値を得る。
(16)その値を修正対象伝票から引く。
(17)(3)からの処理をすべての本体の項目について終わるまで繰り返す。
修正計上用ソフトウェア32は、すでに伝票管理データベース4に記録されている伝票のデータを修正する機能を提供するものであり、修正計上によって伝票データ5をデータベースサーバ3にアップロードした場合に実行されるものである。その手順は以下のとおりである。
(1)受信した伝票データ5の問合せデータセクション51の伝票IDを記録するエリア51cに記録された伝票IDの値からどの伝票に対する修正かを判断し、伝票管理データベース4に設けられた伝票データベース45の該当ファイルを開く。
(2)修正前の修正対象伝票を、伝票データ5の問合せ用データセクション51に記録されている伝票番号及び項目番号から検索する。
(3)クライアントコンピュータ2から送信された修正後の各本体項目について以下の処理を実行する。
(4)本体項目データセクション55のこの項目の処理IDを記録するエリア55mに記録されている処理IDに基づいて、処理IDテーブル42c(図11参照)を検索する。
(5)処理IDテーブル42cでその処理IDの計上IDが参照計上に該当すれば、以下の処理を実行する。一方、その処理IDが参照計上以外であれば(9)の処理に飛ぶ。
(6)修正対象伝票が参照している伝票のデータベースを開く。
(7)(2)で検索した修正前のデータを、修正対象伝票が参照している伝票に対して足す(つまり戻すことになる)。
(8)クライアントコンピュータ2から送信された修正後のデータを、修正対象伝票が参照している伝票から引く。
(9)クライアントコンピュータ2から送信された修正後のデータを(1)で開いた修正対象のデータベースに上書きする。
(10)今処理している伝票に対する前方参照があるか否か調べる(ここで、「前方参照」とは、ある伝票を参照して計上されている伝票があるとき、参照されている伝票から見て、他の伝票が自分を参照していることをいう。例えば、受注伝票を参照して売上伝票を計上しているとき、受注伝票からみて売上伝票が自分を参照している場合をいう。)。具体的には、(1)の伝票IDの値を参照伝票IDのフィールドにもつレコードを処理IDテーブル42c(図11参照)から抽出する。レコードがあれば(レコードは1件とは限らない)前方参照はある。なお、この場合の「ある」は「定義上ある」の意味であって、実際に今処理している個別の伝票の前方参照が「ある」ことを意味しているわけではない。)
(11)前方参照がある場合は、以下の処理をする。ない場合は(3)からの処理を繰り返す。
(12)伝票IDテーブル42a(図9参照)で、(1)の伝票IDの値を伝票IDフィールドに持つレコードの修正時動作フィールドの値を調べ、True(−1)ならば、以下の処理を行う。ない場合は、(3)からの処理を繰り返す。
(13)(10)で得られた処理IDテーブル42cのレコードすべてについて以下の処理を行う。
(14)修正対象伝票を参照している伝票のデータベースを開く。
(15)修正対象伝票を参照している伝票(複数枚あるときはそれらの合計)の値を得る。
(16)その値を修正対象伝票から引く。
(17)(3)からの処理をすべての本体の項目について終わるまで繰り返す。
〔伝票1枚検索ソフトウェア〕
伝票1枚検索ソフトウェア33は、クライアントコンピュータ2から問合せのため送信された伝票データ5の問合わせデータセクション51のサーバー側の処理コードを記録するエリア51aの値が、伝票1枚を検索するコードであるときに、検索の対処となる伝票のIDを記録するエリア51dの値及び伝票番号を記録するエリア51cの値に基づいて、伝票データベース45の各データテーブル45a〜45g(図3参照)から検索の対象となる伝票1枚のデータを抽出し、伝票データ5の伝票基本データセクション52以下の各データセクションのデータとして割り当てて、問合わせデータセクション51とともにクライアントコンピュータ2に送信する。
伝票1枚検索ソフトウェア33は、クライアントコンピュータ2から問合せのため送信された伝票データ5の問合わせデータセクション51のサーバー側の処理コードを記録するエリア51aの値が、伝票1枚を検索するコードであるときに、検索の対処となる伝票のIDを記録するエリア51dの値及び伝票番号を記録するエリア51cの値に基づいて、伝票データベース45の各データテーブル45a〜45g(図3参照)から検索の対象となる伝票1枚のデータを抽出し、伝票データ5の伝票基本データセクション52以下の各データセクションのデータとして割り当てて、問合わせデータセクション51とともにクライアントコンピュータ2に送信する。
〔伝票1項目検索ソフトウェア〕
伝票1項目検索ソフトウェア34は、クライアントコンピュータ2から問合せのため送信された伝票データ5の問合わせデータセクション51のサーバー側の処理コードを記録するエリア51aの値が、伝票1項目を検索するコードであるときに、検索の対処となる伝票のIDを記録するエリア51dの値と伝票番号を記録するエリア51dの値と伝票項目番号を記録するエリア51eの値に基づいて、伝票データベース45の各データテーブル45a〜45g(図3参照)から検索の対象となる伝票1項目のデータを抽出し、伝票データ5の伝票基本データセクション52以下の各データセクション中に必要な部分のデータを割り当てて問い合わせデータセクション51とともにクライアントコンピュータ2に送信する。
伝票1項目検索ソフトウェア34は、クライアントコンピュータ2から問合せのため送信された伝票データ5の問合わせデータセクション51のサーバー側の処理コードを記録するエリア51aの値が、伝票1項目を検索するコードであるときに、検索の対処となる伝票のIDを記録するエリア51dの値と伝票番号を記録するエリア51dの値と伝票項目番号を記録するエリア51eの値に基づいて、伝票データベース45の各データテーブル45a〜45g(図3参照)から検索の対象となる伝票1項目のデータを抽出し、伝票データ5の伝票基本データセクション52以下の各データセクション中に必要な部分のデータを割り当てて問い合わせデータセクション51とともにクライアントコンピュータ2に送信する。
以上で、伝票に関するデータの追加・変更や検索という基本的な操作を行うためのソフトウェア及びデータベースについての説明は終了する。次に説明するのは、集計表の作成や表示に必要なソフトウェア及びデータベースについてである。最初に、集計の基礎となる集計表定義データベース46(図3参照)について説明する。
〔集計表定義データベース〕
図3に示すように、集計表定義データベース46は、集計表の最も基本的な定義を行う集計表名テーブル46a、集計表に含める個々のフィールドの定義を行う集計要素テーブル46b、集計計算を行うときに各集計表の各フィールドに対して処理IDごとにどのような計算をするかを定義する集計計算要素テーブル46c、集計計算の対象となるデータの出所がデータベースである場合にデータを抽出するデータベースについての情報を記録する検索対象定義テーブル46d、集計動作について定義する集計動作定義テーブル46e、および集計表の各フィールドが表示時にどのような表示特性を有するかを定義する集計表示要素テーブル46f、集計表定義データベース46に対する処理要求を行うモジュール的プログラムのクエリQ1〜Q4を含んでいる。以下、これらのテーブル及びクエリについて、図37〜図43を参照しながらより詳細に説明する。
〔集計表定義データベース〕
図3に示すように、集計表定義データベース46は、集計表の最も基本的な定義を行う集計表名テーブル46a、集計表に含める個々のフィールドの定義を行う集計要素テーブル46b、集計計算を行うときに各集計表の各フィールドに対して処理IDごとにどのような計算をするかを定義する集計計算要素テーブル46c、集計計算の対象となるデータの出所がデータベースである場合にデータを抽出するデータベースについての情報を記録する検索対象定義テーブル46d、集計動作について定義する集計動作定義テーブル46e、および集計表の各フィールドが表示時にどのような表示特性を有するかを定義する集計表示要素テーブル46f、集計表定義データベース46に対する処理要求を行うモジュール的プログラムのクエリQ1〜Q4を含んでいる。以下、これらのテーブル及びクエリについて、図37〜図43を参照しながらより詳細に説明する。
集計表名テーブル46aは、集計表毎の基本的な定義を行うテーブルであり、図37はその例を示したものである。図37に示した集計表名テーブル46aのフィールド中、「集計ID」フィールドは各集計表を識別するコードを記録し、「集計表名称」フィールドは例示されている「顧客別売上高」、「製品別売上高」等のように各集計表の名称を記録し、「ファイル名」フィールドはこの集計表を記録するデータベースファイル名を記録し、「テーブル名」フィールドはこの集計表を記録するテーブル名を記録し、「実行コンポーネント」フィールドは、この集計表をダブルクリックすることによって他のソフトウェアを実行できる場合に、その実行するコンポーネント名を記録するものである。
「名称Pos」フィールドと「コードPos」フィールドはともに、その集計表に対して集計計算をするときに、その集計表が伝票の情報(それが伝票が持つ情報全てであるか一部であるかを問わず)を何らかの基準で分類しその分類ごとの積算を何らかの順番で並べたものである場合において、その基準となるものが集計表内に含まれているときに、集計表内のフィールドのうちどれにあたるかを、左端のフィールドを0番目として数えはじめて何番目にあるかを記録するものである。「名称Pos」フィールドにはその基準となるものを表す名称が左端のフィールドから数えて何番目になるかの数値が記録され、「コードPos」フィールドにはその基準となるものを表すコードが左端のフィールドから数えて何番目になるかの数値が記録される。基準となるものが集計表内に含まれていない場合には−1を記録する。集計表が伝票の情報(それが、伝票が持つ情報全てであるか一部であるかを問わず)を単に何らかの順番で並べたものである場合は「名称Pos」フィールドと「コードPos」フィールドには−1を記録する。
前者の例としては、売上伝票から作成される顧客別売上高(これは顧客によって分類され積算される。)が挙げられる。顧客別売上高には顧客名が含まれているはずなので顧客名がその顧客別売上高では左端から数えて何番目の欄にあるかを「名称Pos」フィールドに記録する。多くの場合、顧客コードも顧客別売上高にはあるので、そのコードが左端から数えて何番目の欄にあるかを「コードPos」フィールドに記録する。また、後者の例としては、受注伝票から作成される納入予定表が挙げられる。納入予定表の場合は、顧客別や製品別に積算することはないので、「名称Pos」フィールドと「コードPos」フィールドには−1を記録する。
「コードPos」フィールドの値から伝票を集計計算するときにその伝票の情報を何らかの基準で分類したその基準の具体的な値を知ることができる。また、「名称Pos」フィールドの値からはその基準の名称を知ることができる。先の顧客別売上高の例では画面上で選択されている行の顧客コードと顧客名にあたる。前述のダブルクリックしたときに実行するコンポーネントとして伝票検索をするものが選ばれているときに、検索のキーとなることを目的としてこの2つのフィールドから得られた値を渡す。また、別の実行コンポーネントに対してもこれらのデータを渡すことができるが、具体的にどのように利用されるかは実行コンポーネントによる。
また、「表示方法」フィールドはこの集計表の表示方法を定義するもので、その値が1ならばデータすべてを表示することを表し、その値が2ならば月次で抽出されたデータを表示することを表す。「親の伝票ID」フィールドは、どの伝票に基づいてこの集計表が作成されるかを示すためにその伝票ID(図9参照)を記録するものである。
図37で示すテーブルの例で一行目を説明すると、集計IDの1で識別されるのは、「顧客別売上高」という名称の集計表であり、この集計表を記録するデータベースファイル名は「売上顧客別」、この集計表を記録するテーブル名は「顧客別売上」、この集計表がダブルクリックされたときに実行するコンポーネント名は「伝票検索.Ke」である。「名称Pos」フィールドの値が0、「コードPos」の値が1なので、顧客別売上高の集計表の左端にある顧客名フィールドと左端から2番目の顧客コードフィールドの値に基づいて、顧客毎の順番に並べる。また、この集計表は伝票IDが1である「売上伝票」(図9参照)に基づいて作成されるものであり、この集計表の表示方法は、月次で抽出されたデータを表示する。ここまでで、集計表名テーブル46aの説明を終了する。
集計要素テーブル46bは、各集計表に含める個々のフィールドの定義を行うためのものであり、図38はその例を示したものである。図38に示した集計要素テーブル46bのフィールド中、「集計フィールドID」フィールドはすべての集計表のフィールドを対象としたときのそれぞれの集計表の各フィールドの識別コードを記録するものであり、当該識別コードは全集計表を通じて一意である。また、「集計ID」フィールドは図37で示した集計表名テーブル46aで定義されている各集計表を識別するコードを記録し、「フィールド名称」フィールドは集計フィールドIDで識別される集計表の各フィールドの名称を記録し、「フィールドタイプ」フィールドはそのフィールドのデータ型(図7の入力コントロール定義テーブル41aの「タイプ」フィールドで用いたコードと同じ)を記録する。
続いて、「抽出条件」フィールドは、集計表に集計計算をするとき、集計表の集計対象のレコードを選ぶ際の抽出条件としてこの集計フィールドIDのフィールドを加えるか否かを表す値を記録するもので、その値が、Trueであれば抽出条件として加える、Falseであれば抽出条件として加えない、を表す(図38の集計要素テーブル46bでは2がTrue、1がFalseとなっている。)。「パラメータ名称」フィールドは、この集計フィールドIDのフィールドを抽出条件とするときのパラメータ名を記録するものであり、「集計対象」フィールドは、集計表のこのフィールドに対しては、集計計算の時、伝票データを上書きするのではなく、加減算するか否かを表す値を記録するもので、その値がTrueであれば加減算する、Falseであれば加減算しない、を表す。(図38の集計要素テーブル46bでは2がTrue、1がFalseとなっている。)「レコード削除の真偽」フィールドは、集計表からレコードを削除するか否かを表す値を記録するもので、その値が、Trueのときはこの集計フィールドIDのフィールドの値が0になったら集計表からレコードを削除する、Falseのときは削除しない、ことを表す。(図38の集計要素テーブル46bでは−1がTrue、0がFalseとなっている。)「SQL定義フィールドタイプ」フィールドは、SQL定義によりフィールドタイプを表した値を記録するもので、ここに記録される値は、実装時に使用する開発言語やデータベースの操作手法の違いによって同じものを意味する場合でも違う値が入る場合がある。また、このフィールドの値は、「フィールドタイプ」のフィールドの値が意味するものと同じものを意味する値でなくてはならない。「表示用抽出条件」フィールドは、集計表を表示するときに、表示すべきレコードを抽出するが、その抽出条件にこの集計フィールドIDのフィールドを加えるか否かを表す値を記録するもので、その値が、Trueであれば抽出条件として加える、Falseであれば抽出条件として加えない、を表す。(図38の集計要素テーブル46bでは2がTrue、1がFalseとなっている。)
図38は、集計IDが5である出荷済売上高未計上残高(図37参照)の集計表の各フィールドについて定義している例であり、この出荷済売上高未計上残高の集計表の例は図42に示してある。図38の集計要素テーブル46bの例の一行目で定義されているのは、集計IDが5である出荷済売上高未計上残高の集計フィールドIDが34である出荷伝票のフィールドは、「フィールドタイプ」の値が7であり、「抽出条件」の値はTrueであるので集計表に集計計算をするときにこのフィールドは抽出条件とすることができ、抽出条件とするときの「パラメータ名称」はP1であり、「集計対象」の値がFalseであるので集計計算のとき伝票データを加減算の対象としない、「レコード削除の真偽」の値はFalseなのでレコード削除の対象とはなっていない、「SQL定義フィールドタイプ」の値は「double」であり、「表示用抽出条件」の値はFalseであるので集計表を表示するときにこのフィールドは表示用の抽出条件に加えない、ということになる。
図38は、集計IDが5である出荷済売上高未計上残高(図37参照)の集計表の各フィールドについて定義している例であり、この出荷済売上高未計上残高の集計表の例は図42に示してある。図38の集計要素テーブル46bの例の一行目で定義されているのは、集計IDが5である出荷済売上高未計上残高の集計フィールドIDが34である出荷伝票のフィールドは、「フィールドタイプ」の値が7であり、「抽出条件」の値はTrueであるので集計表に集計計算をするときにこのフィールドは抽出条件とすることができ、抽出条件とするときの「パラメータ名称」はP1であり、「集計対象」の値がFalseであるので集計計算のとき伝票データを加減算の対象としない、「レコード削除の真偽」の値はFalseなのでレコード削除の対象とはなっていない、「SQL定義フィールドタイプ」の値は「double」であり、「表示用抽出条件」の値はFalseであるので集計表を表示するときにこのフィールドは表示用の抽出条件に加えない、ということになる。
集計計算要素テーブル46cは、集計計算を行うときに各集計表の各フィールドに対して処理ID毎にどのような計算をするかを定義する。図39は、その集計計算要素テーブル46cの例を示したものである。図39に示すフィールド中、「集計計算要素ID」フィールドは、同一の行で定義されている処理IDの処理が、同一の行で定義されている集計フィールドIDに対して、伝票のなかのどのデータを集計するかを一意に識別するコードを記録するものである。ここで、集計計算要素テーブル46cの「集計フィールドID」について、補足的に説明すると、集計フィールドIDは全集計表について一意であるから、処理IDと集計フィールドIDで特定される組合せはどの集計表のものであるかは集計IDを使用して示さなくてもわかるので、集計計算要素テーブル46cに集計IDを記録するフィールドが含まれているということは、テーブルの構造に冗長性があることになる。しかし、このテーブル中、ある集計表に関するレコード全てを取り出して操作したい時などは(例えばある集計表に関するデータをすべて削除したい時)、もし集計計算要素テーブル46cに集計IDのデータを持たせていないならば、あらかじめ集計要素テーブル46bからどのレコードがどの集計IDにかかわるものかを知らなくてはならない。一方、本実施の形態のように集計IDがテーブル内にあれば、単純な操作で目的のレコードを得ることができる。要するにテーブルから冗長性を排除すればプログラムに煩雑性が生じ、逆にプログラムの煩雑性を除く為にはテーブルの構造に冗長性を出さざるを得なくなる。このソフトウエアの実装にあたっては、プログラムの煩雑性を減じる方が、テーブル構造の冗長性を除くよりも優先順位が高いと判断して集計計算要素テーブル46cに集計IDを加えたものである。
伝票データ中、どのデータであるかは、それより右側に表示されているフィールドで定義する。「集計計算の有無」フィールドの値がFalseであれば、この集計フィールドIDで特定されるフィールドには集計計算をせず、「集計計算の有無」のフィールドの値がTrueであれば右側に表示されたフィールドで指定される伝票のデータを集計フィールドIDのフィールドに対して集計する(図39の集計計算要素テーブル46cでは−1がTrue、0がFalseとなっている。)。
図39に示すフィールド中、「データタイプ」フィールドは、「集計フィールドID」フィールドに対して集計計算をするデータの出所を表す値を記録するもので、その値が1ならば処理対象データの値をコードと解釈して対応するデータベースを検索し、そのデータベースの指定されたフィールド(後述する検索対象定義テーブル46dで定義される)の値を集計対象データとし、その値が2ならば処理対象データの値をそのまま集計対象のデータとする。
「データ名称」フィールドは処理対象データが図20および図21で示す伝票データの構造中、どのデータセクションに属するかを示すためにそのデータセクションの名称を記録するもので、「伝票基本」、「ヘッダー項目」、「ヘッダー未登録項目」、「本体項目」、「本体項目備考」、「関連伝票」、「属性」のいずれかの値が記録される。「項目の順番」フィールドは、「データ名称」フィールドの値が「ヘッダー項目」である場合に何番目のヘッダー項目であるかを記録するものである。なお、図39の例で「項目の順番」フィールドの値がいずれも0であるのは、この例ではデータ名称にヘッダー項目がないからである。「抽出データ」フィールドは、「データ名称」フィールドの値が「伝票基本」、「本体項目」、「関連伝票」の場合は、それぞれのデータセクションに属するどのエリアからデータを取り出すかを記録するものである。「データ名称」フィールドの値が「属性」の場合は、「項目の順番」フィールドで指定された順番の属性データセクションに属するどのエリアからデータを取り出すかを記録するものである。「関連伝票ID」フィールドは、「データ名称」フィールドの値が「関連伝票」の場合に、その関連伝票の伝票IDを記録するものである。
いま、図39で示す集計計算要素テーブル46cの例の1行目を説明すると、集計計算要素IDのコード184で識別される処理は、処理IDが8である「受注参照出荷」(図11参照)の処理が行われるとき、集計IDが5である集計表「出荷済売上高末計上残高」の集計フィールドIDが34である「出荷伝票」欄に対して、伝票データ5のデータ中、本体項目データセクションの伝票番号のエリアに記録されたデータを集計する、ということがわかる。
検索対象定義テーブル46dは、集計計算要素テーブル46cの「データタイプ」フィールドの値が1のときに、検索対象となるデータベースについて定義するものである。図40は、検索対象定義テーブル46dの例を示したものであり、集計計算要素IDのフィールドには、図39に示す集計計算要素テーブル46cで定義されているID中、データタイプのフィールドの値が1である集計計算要素IDが記録され、「検索対象ファイル名」フィールドは検索対象となるデータベースファイル名を記録し、「テーブル名」フィールドは、検索の対象となるテーブル名を記録する。「インデックス名」フィールドは、検索に使用するインデックス名を記録し、インデックスを使用しない場合は空文字列を記録する。また、「フィールド名」フィールドは検索の対象となるテーブルのフィールド中データを取り出すフィールド名を記録するものである。
いま、図40に示す検索対象定義テーブル46dの例を説明すると、集計計算要素IDが188の処理において、検索の対象となるファイル名は「\body」であり、そのテーブル名は「品目コードテーブル」(図13参照)、検索に使用するインデックス名は「code Order 」、品目コードテーブルのフィールド中データを取り出すのは「名称」フィールドからである、となる。
集計動作定義テーブル46eは、「処理ID」のフィールドで特定される処理IDの処理が行われる場合の、「集計ID」フィールドで特定される集計IDの集計表に対する集計計算でのデータの取扱について規定する。図41は、集計動作定義テーブル46eの例を示したものであり、「処理順番」フィールドは「集計ID」フィールドの値と「処理ID」フィールドの値が同じ組合せが複数ある場合の処理の順番を規定するものであり、「処理対象」フィールドは、集計計算を行うときに、クライアントコンピュータ2から送信されたデータを処理対象とするのか、あるいは伝票管理データベース4に記録されていたデータを処理対象とするのか、を示す値を記録するものである。その値が1ならばクライアントコンピュータ2から送信されたデータであり、その値が2ならば伝票管理データベース4に記録されていたデータである。「データ処理動作」フィールドは、処理対象のデータを加算するか、減算するか、上書きするか、を示す値を記録するもので、その値が1ならば加算、その値が−1ならば減算、その値が2ならば上書きである。例えば、図41に図示した集計動作定義テーブル46eの例の1行目は、処理IDが3である「出荷参照売上」の処理を行うときの集計表「出荷済売上高末計上残高」への集計計算は、クライアントコンピュータ2から送信されたデータを処理対象とするもので、処理対象のデータを減算する、ということになる。
図43に示す集計表示要素テーブル46fは、集計表の各フィールドが表示時に、どのような表示特性を有するかを規定する。このテーブルに含めるフィールドは集計表の表示プログラムの構成によって変化するので、テーブルの構造は、「集計ID」フィールド、「集計フィールドID」フィールド、表形式で集計表を表示するときのフィールドを左側から右側へ並べる順番を表す「FieldOrder」フィールド(このフィールドの値は0から始まる)、集計表に含まれる各レコードを並べる時に、そのレコードが指し示すフィールドの値により並べかえるのか否かを表す「DoSort」フィールド(このフィールドの値がTrueならば、そのレコードが指し示すフィールドの値によって並び換える)、並び換えが行われるときに依存するフィールドが複数ある場合の優先順位を示す「SortPriority」フィールド(このフィールドの値は1から始まる)、並べ換えるときに、昇順か降順かを示す「ASCorDESC」フィールド(このフィールの値が0ならば降順、−1ならば昇順)の6つのフィールドが必須であり、その他、表示用プログラムの必要性から他のフィールドを付加することもできる。図43に示した例では、上述した6つのフィールドに加え、表示の有無を規定する「IsThisVisible」フィールドやフォーマットの有無を規定する「DoFormat」等8つのフィールドが付加されている。
以上で、集計の基礎となる集計表定義データベース46に含まれる各テーブルについての説明は終了する。この集計表定義データベース46の各テーブルに定義されたデータに従って、図3に示す集計表データベース47に含まれる集計ID毎の集計データを記録する各集計表のテーブル(図3中、これらの集計表テーブルを代表して、集計表テーブル47xとして表示している)を生成することになる。
次に、集計表定義データベース46(図1参照)には含まれている、集計表定義データベース46に対する処理要求を行うモジュール的プログラム(クエリ)、すなわち、クエリQ1からQ4(図3及び図44参照)について説明する。なお、クエリQ1からQ4は、DBMS(Database Management System データベースを管理するための仕組みを提供するソフトウェア)の持つユーザーインターフェースを介して作成することもできるし(つまり人間がキーボードから打ち込む)、ソフトウェアがDBMSにそのDBMSが定める手法に従って指示を与えることにより作成することもできる。
クエリQ1は、伝票データに含まれる処理IDについて、処理IDごとにどのような集計動作をするか抽出するクエリである。具体的には、集計動作定義テーブル46eの「処理ID」のフィールド中、伝票データ中の処理IDと一致する処理IDのレコードを検索し、集計IDの昇順、処理順番の昇順に並べた結果を得る。すなわち、伝票データで指定された処理IDに従って実行される集計は、どの集計表の集計を行うのか、集計計算を行うときの処理対象とするデータは何か、また処理の順番はどう行うか、のデータを取得する。
クエリQ2は、伝票データに含まれる処理IDに基づいて行われる集計動作のなかで、指定した集計IDで特定される集計表に対する動作のみを抽出するクエリである。具体的には、集計動作定義テーブル46eの「処理ID」及び「集計ID」のフィールド中、伝票データ中の処理ID及び指定した集計IDと一致するレコードを検索し、処理順番の昇順に並べた結果を取得する。
クエリQ3は、指定した処理IDを含む伝票計上処理が、その伝票のデータを、指定した集計IDで特定される集計表に対して集計計算を行うとき、どのように計算するかを示す一連のレコードを得るクエリである。具体的には、集計要素テーブル46bの「集計フィールドID」フィールドと集計計算要素テーブル46cの「集計フィールドID」フィールドに同じ値を持つレコード同士を1つのレコードにまとめる(尚、この作業を後述する作業と区別するため、便宜的に1次結合と呼ぶ。)。集計要素テーブル46bでは複数のレコードがそれぞれの「集計フィールドID」フィールドに同一の値を持つことは、定義により無く、また必ず何らかの値を保持している。一方、集計計算要素テーブル46cでは複数のレコードが「集計フィールドID」フィールドに同一の値を持つことがあり、また、必ず値を保持している上に、その値は必ず集計要素テーブル46bのいずれかのレコードが持つ「集計フィールドID」フィールドの値と一致する。1次結合の結果、集計計算要素テーブル46cに含まれているのと同数のレコードが得られる。
次に、1次結合で得られたレコード各々について、集計計算要素テーブル46cに由来する「集計計算要素ID」フィールドに記録されている値と同じ値を、「集計計算要素ID」フィールドに持つ検索対象定義テーブル46dのレコードを1つにまとめる(この作業を便宜的に2次結合と呼ぶ。)。このとき、検索対象定義テーブル46dには、1次結合の結果得られたレコードに対するレコードが必ずあるわけではない。対応するレコードが無い場合には、値を持たない空白のレコードを作成し、それをまとめる。従って2次結合の結果得られるレコードには、集計要素テーブル46b、集計計算要素テーブル46c、検索対象定義テーブル46dのそれぞれのレコードに含まれるフィールドがすべて含まれることになる(ただし、前述のごとく、それらのフィールドのすべてが必ず値を持っているわけではない。)。
さらに、2次結合で得られたレコードの中から、集計要素テーブル46bに由来する「集計ID」フィールドに指定された値を持ち、且つ集計計算要素テーブル46cに由来する「処理ID」フィールドに指定された値を持つレコードのみを抽出する。以上の作業がクエリQ3の作業である。
クエリQ4は、指定した集計IDで特定される集計表を表示するときに、その集計表に含まれる各フィールドがどのような表示特性をもっているかを示す一連のレコードを得るクエリである。具体的には、集計要素テーブル46bの「集計フィールドID」フィールドと集計表示テーブル46fの「集計フィールドID」フィールドに同じ値を持つレコードを1つにする。集計要素テーブル46bと集計表示テーブル46fにおいては共に「集計フィールドID」に記録される値は一意であるので、この作業の結果得られるレコード数は、集計要素テーブル46bのレコードの数と同じである(この数は、集計表示テーブル46fのレコード数でもある。)。これら複数のレコードから、「集計ID」フィールドに指定された値を持つレコードのみを抽出する(この場合、「集計ID」フィールドは集計要素テーブル46bに由来するものと、集計表示テ−ブル46fに由来するものの2つがあるが、同じ結果が得られるので、どちらを選んでも構わない。)。この作業の結果得られるレコードの数は、指定した集計IDを持つ集計表の表示項目数と同じになる。そしてこの抽出された複数のレコードを「フィールド順番」フィールドに記録されている値に基づき昇順に並べ替える。以上がクエリQ4の作業である。
次に、集計表データベースに保存するクエリQ5〜Q10(図44参照)の説明を行うが、その前提として、クエリQ1〜Q4までと、クエリQ5〜Q10までは性質が違うので、その点を予め説明する。
Q1からQ4までは、集計表定義データベース46(図3参照)の各種テーブルに記録されているデータに対して操作を行うものである。集計表定義データベース46の内容はユーザー(この説明でいうユーザーとはこのソフトの利用者のことで以下同様。)によって異なるから、クエリQ1からQ4のクエリの実行結果も異なる。しかし、クエリQ1からQ4のクエリそのものは、あらかじめ用意されているので、ユーザーごとに異なるわけではなく、同一である。一方、クエリQ5からQ10は、クエリQ1からQ4の結果に基づいて生成される(この生成は基本設定管理ソフトウエア37が行う。)。クエリQ1からQ4の結果はユーザーによって異なるので、この結果に基づいて生成されるクエリQ5からQ10もユーザーによって異なる。しかし、クエリQ5からQ10をどのように生成するかは、ユーザーごとに異なるわけではなく基本設定ソフトウエア37に規定されている。従って、後段では、この生成物であるクエリQ5からQ10の内容についてではなく、その生成法についての規定に関して説明することになる。
なお、繰り返しになるが、生成されたクエリはデータベースにストアドプロシージャとして保存される。クエリQ1からQ4は集計表定義データベース46保存され、クエリQ5からQ10は、Q1からQ4の結果に基づいて生成され集計表データベース47(図3参照)に保存される。
なお、この「クエリQ1からQ4の結果に基づいて」という表現は、必ずしも「クエリQ1からQ4の結果の全てに基づく」というわけでははく、「クエリQ1からQ4の結果の少なくとも1つに基づいて」という意味である。
次に集計表データベース47に保存するクエリQ5からQ10までの生成について説明する。ここでクエリの生成と言ったが、最終的には、そのクエリをストアドプロシージャとして集計表データベース47に保存する。クエリをストアドプロシージャとして保存する方法は、使用するDBMSによって異なるので、ここではクエリであるSQL文の生成とどのようなDBMSでもストアドプロシージャの保存時に要求するであろうパラメータリストの生成とクエリの名称を表す文字列の生成について説明する。
クエリQ5は、クエリQ4の結果に基づいて生成されるクエリであり、その目的は集計表テーブル47x(図3参照)から画面に表示するレコードを抽出することにある。つまりQ5はSQLのSELECT文であり、次のような構成になっている。
「SELECT fieldlist FROM tablename WHERE criteria ORDER BY fieldlist」
前述のごとく、クエリQ5は、クエリQ4の結果(クエリQ5の説明においては、これを便宜的に結果のレコードセットと呼ぶ)に基づき生成されるのであるが、上記の下線を施した部分が、クエリQ4の結果の変化に応じて変化する。上記のSELECT文は4つの部分、すなわち、SELECT句、FROM句、WHERE句、ORDER BY句に分けられるので、これら4つの句とパラメータリストとクエリの名称の生成について以下に説明する。
「SELECT fieldlist FROM tablename WHERE criteria ORDER BY fieldlist」
前述のごとく、クエリQ5は、クエリQ4の結果(クエリQ5の説明においては、これを便宜的に結果のレコードセットと呼ぶ)に基づき生成されるのであるが、上記の下線を施した部分が、クエリQ4の結果の変化に応じて変化する。上記のSELECT文は4つの部分、すなわち、SELECT句、FROM句、WHERE句、ORDER BY句に分けられるので、これら4つの句とパラメータリストとクエリの名称の生成について以下に説明する。
SELECT句の構成は、集計表テーブル47xに記録されているフィールドのうち、画面上に表示するフィールドを選び、文字列データを作成してfieldlistとすることで行われる。その選択は、クエリQ4の結果のレコードセットの「フィールド名称」フィールドに値があれば、その値をfieldlistである文字列データにカンマで区切って追加する。図38の集計要素テーブル46bと図43の集計表テーブル46fの例に基づくと、この作業で生成されるSELECT句は次のようになる。
「SELECT 出荷伝票、出荷項目、受注伝票、受注項目、品名、内容、数量、単位、単価、金額、消費税、合計」
次にFROM句についてであるが、クエリQ5は、元々集計表テーブル47xからデータを抽出するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからその集計IDの値を持つレコードを抽出し、そのレコードの「テーブル名」フィールドの値を得ればよい。図37で示した集計表名テーブル46aの例では、クエリQ4の結果のレコードセットは、集計ID=5の場合のものであるので、図37に示す例の集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたFROM句は次のようになる。
「FROM 出荷済売上」
次にWHERE句の生成について説明する。WHERE句は、クエリQ4の結果のレコードセットのレコードのうち、「表示用抽出条件」フィールドの値がTrueのものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「表示用抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
「SELECT 出荷伝票、出荷項目、受注伝票、受注項目、品名、内容、数量、単位、単価、金額、消費税、合計」
次にFROM句についてであるが、クエリQ5は、元々集計表テーブル47xからデータを抽出するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからその集計IDの値を持つレコードを抽出し、そのレコードの「テーブル名」フィールドの値を得ればよい。図37で示した集計表名テーブル46aの例では、クエリQ4の結果のレコードセットは、集計ID=5の場合のものであるので、図37に示す例の集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたFROM句は次のようになる。
「FROM 出荷済売上」
次にWHERE句の生成について説明する。WHERE句は、クエリQ4の結果のレコードセットのレコードのうち、「表示用抽出条件」フィールドの値がTrueのものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「表示用抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
そのレコードの「フィールド名称」フィールドの値 =
そのレコードの「パラメータ名称」フィールドの値
「表示用抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
そのレコードの「パラメータ名称」フィールドの値
「表示用抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
図38に示した集計要素テーブル46bには「表示用抽出条件」フィールドの値がTrueのものがないので、仮に、集計フィールドIDの値が34と35のレコードがTrueであるとすると以下のようなWHERE句が生成されることになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
図38の例のように「表示用抽出条件」フィールドの値がすべてFalseである場合は、WHERE句は生成されず、従って最終的に生成されるSELECT文にはWHERE句は含まれない。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
図38の例のように「表示用抽出条件」フィールドの値がすべてFalseである場合は、WHERE句は生成されず、従って最終的に生成されるSELECT文にはWHERE句は含まれない。
次にORDER BY句について説明する。
結果のレコードセットから「DoSort」フィールドの値がTrueのレコードだけを抽出し、「SortPriority」フィールドの値に従って昇順に並べた、絞り込んだレコードセットを作成する。このとき、「DoSort」フィールドの値がTrueのレコードがなければ、ORDER BY句は生成されず、最終的に作成されるSELECT文にORDER BY句は含まれない。この絞り込んだレコードセットの各レコードの「ASCorDESC」フィールドの値を調べ、その値が0ならば「DESC」、−1ならば「ASC」という文字列を用意し、そのレコードの「フィールド名称」フィールドの値の後に付加する文字列を作成し、これをfieldlistとする。絞り込んだレコードセットに複数のレコードが含まれる場合は、作成した文字列をカンマでつなぐ。
図38の集計要素テーブル46bの例と図43の集計表示テーブル46fの例に基づくと、次のようなORDER BY句が得られる。
「ORDER BY 出荷伝票 DESC、出荷項目 ASC」
次にパラメータリストについて説明する。パラメータリストは前記WHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。必要とされるパラメータリストの内容はDBMSによって異なるが、パラメータ名とデータ型はいずれのDBMSでも必須と言ってよく、更にデータの方向(そのパラメータはクエリに値を与えるためのものか、クエリの結果としての値を受取るためのものか、の区別)を要求するものもある。本実施の形態においては、クエリQ5からクエリQ10のパラメータはすべてクエリに値を与えるためのものであるから、データの方向を示す必要があるときはその旨を意味する指示をすればよい。
「ORDER BY 出荷伝票 DESC、出荷項目 ASC」
次にパラメータリストについて説明する。パラメータリストは前記WHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。必要とされるパラメータリストの内容はDBMSによって異なるが、パラメータ名とデータ型はいずれのDBMSでも必須と言ってよく、更にデータの方向(そのパラメータはクエリに値を与えるためのものか、クエリの結果としての値を受取るためのものか、の区別)を要求するものもある。本実施の形態においては、クエリQ5からクエリQ10のパラメータはすべてクエリに値を与えるためのものであるから、データの方向を示す必要があるときはその旨を意味する指示をすればよい。
クエリQ5のパラメータリストの作成法は以下のようになる。
クエリQ4の結果のレコードセットの各レコードの「表示用抽出条件」の値を調べ、その値がTrueであれば、「パラメータ名称」フィールドの値をパラメータ名とし、「SQL定義フィールドタイプ」フィールドの値をパラメータの型としてDBMSが要求する形式に整える。例えば、あるDBMSが要求する形式に従い、図38の集計要素テーブル46bの「集計フィールドID」フィールドの値が34及び35のレコードの「表示用抽出条件」フィールドの値がTrueであると仮定するならば、次のようなパラメータリストが作成されることになる。
「PARAMETERS P1 double,P2 double」
次にクエリの名称の生成方法について説明する。クエリQ5の名称は、いまクエリQ5の生成にかかわっている集計IDとは別の集計IDを持つ集計表テーブル47xにかかわるQ5やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDを文字列化し、「5−Q5」といった文字列を生成し、これを名称とすればよい。
「PARAMETERS P1 double,P2 double」
次にクエリの名称の生成方法について説明する。クエリQ5の名称は、いまクエリQ5の生成にかかわっている集計IDとは別の集計IDを持つ集計表テーブル47xにかかわるQ5やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDを文字列化し、「5−Q5」といった文字列を生成し、これを名称とすればよい。
これまでに説明してきた手法で得られたSELECT句、FROM句、WHERE句、ORDER BY句を1つに繋ぎあわせるとSELECT文が得られ、このSELECT文とパラメータリストと名称を、使用するDBMSに対してそれが規定する手法に従って与えるとQ5のクエリがストアドプロシージャとして集計表データベース47に保存される。以上でQ5の作成手法につぃての説明を終える。
次にクエリQ6の生成について説明する。クエリQ6は、集計表テーブル47xに対して集計計算を行うとき、これから集計しようとしているデータを集計表テーブル47xに対して新規に追加すべきか、すでにあるデータに加算または減算すべきかを判断するために、集計表テーブル47xにレコードがあるか否かを確かめるクエリである。クエリQ6の生成に関してまず行うべきことは、クエリQ6の生成が必要であるか否かの判断である。この判断は、クエリQ3に集計表のIDと処理IDをパラメータとして与えて実行した時に、その実行結果としてパラメータとして与えた処理IDと集計IDの組み合わせのときにどのような集計計算を行うかを示す一連のレコードが得られるか否かで行う。この一連のレコードをここでは便宜的に結果のレコードセットと呼ぶ。(クエリQ5の説明においても結果のレコードセットという用語を用いたが、クエリQ5の場合はクエリQ4の実行結果に対してであり、今ここで言う結果のレコードセットはクエリQ3の実行結果に対してであるので、別のものを指していることに注意されたい。)仮に、クエリQ3を実行した結果として1つもレコードが得られなければ、指定した処理IDの値を持つ処理は、指定した集計IDの値を持つ集計表に集計計算を行わないということなので、クエリQ6の生成は不要となる。なお、クエリQ6は単に集計表テーブル47xから後述するcriteriaで特定されるレコードの任意のフィールドを抽出するだけのクエリであるから、どのような集計IDと処理IDの組み合わせであっても同じものになる。したがって、集計IDと処理IDの組み合わせのうち最初に結果のレコードセットが得られた組み合わせについてのみクエリQ6を生成する。以下の説明はクエリQ6の生成が必要となる場合のものである。
前述のごとく、クエリQ6は集計表テーブル47xにすでにデータがあるか否かを判断するためのものであるが、その判断は特定のレコードを集計表テーブル47xから抽出できるか否かで行う。つまり抽出できるのであれば、すでにデータはあるのであり、抽出できなければ、データはない。要するにクエリQ6はSELECT文であり、その構成は以下のようになっている。
「SELECT field FROM table WHERE criteria」
クエリQ6は、クエリQ3を実行した結果のレコードセットに基づき生成されるのであるが、1つしか生成しないので、その結果のレコードセットの最初のレコードに基づき、上記の下線を施した部分を構成する。
「SELECT field FROM table WHERE criteria」
クエリQ6は、クエリQ3を実行した結果のレコードセットに基づき生成されるのであるが、1つしか生成しないので、その結果のレコードセットの最初のレコードに基づき、上記の下線を施した部分を構成する。
以下SELECT句、FROM句、WHERE句、パラメータリスト、クエリの名称の生成手法について順次説明する。
まず、クエリQ6のSELECT句について説明する。クエリQ6の目的は、集計表に特定データがあるか否かを知ることで、その判断のためにレコードを抽出できるか否かという点に注目する。つまり、得られたレコードの値を利用しているわけではない。従ってSELECT句で指定するフィールドは、その集計表が持つフィールドすべてを指定する必要はなく、また、何か特定のフィールドである必要もない。従ってSELECT句に指定するフィールドは結果のレコードセットの最初のレコードの「フィールド名称」フィールドの値とする。図38の集計要素テーブル46bの例に従い、結果のレコードセットの最初のレコードが「集計フィールドID」フィールドの値が34のレコードであるとするならば、次のようなSELECT句が得られることになる。
「SELECT 出荷伝票」
次にFROM句について説明する。クエリQ6は、元々集計表テーブル47xからデータを抽出するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからそのその集計IDの値を持つレコードを抽出し、そのレコードの「デーブル名」フィールドの値を得れば良い。この説明のための例(図37参照)では結果のレコードセットは、集計ID=5の場合のものであるので、集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたFROM句は次のようになる。
「FROM 出荷済売上」
次にWHERE句について説明する。WHERE句は、結果のレコードセットのレコードのうち、「集計計算の有無」フィールドがTrueであるもののなかで「抽出条件」フィールドの値がTrueのものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるものの「抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
「SELECT 出荷伝票」
次にFROM句について説明する。クエリQ6は、元々集計表テーブル47xからデータを抽出するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからそのその集計IDの値を持つレコードを抽出し、そのレコードの「デーブル名」フィールドの値を得れば良い。この説明のための例(図37参照)では結果のレコードセットは、集計ID=5の場合のものであるので、集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたFROM句は次のようになる。
「FROM 出荷済売上」
次にWHERE句について説明する。WHERE句は、結果のレコードセットのレコードのうち、「集計計算の有無」フィールドがTrueであるもののなかで「抽出条件」フィールドの値がTrueのものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるものの「抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
そのレコードの「フィールド名称」フィールドの値=
そのレコードの「パラメータ名称」フィールドの値
「抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
そのレコードの「パラメータ名称」フィールドの値
「抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
図38に示した集計要素テーブル46bには「抽出条件」フィールドの値がTrueのものは、集計フィールドIDが34と35のレコードであるので、以下のようなWHERE句が生成されることになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
次にパラメータリストについて説明する。パラメータリストは前記WHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。パラメータリストの作成法は以下のようになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
次にパラメータリストについて説明する。パラメータリストは前記WHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。パラメータリストの作成法は以下のようになる。
前記の結果のレコードセットの「集計計算の有無」フィールドがTrueであるものの各レコードの「抽出条件」の値を調べ、その値がTrueであれば、「パラメータ名称」フィールドの値をパラメータ名とし「SQL定義フィールドタイプ」フィールドの値をパラメータの型としてDBMSが要求する形式に整える。例えば、あるDBMSが要求する形式に従い、図38の集計要素テーブル46bの例に従うならば、次のようなパラメータリストが作成されることになる。
「PARAMETERS P1 double,P2 double」
次にクエリの名称の生成方法について説明する。クエリQ6の名称は、いまクエリQ6の生成にかかわっている集計IDとは別の集計IDを持つ集計表テーブル47xにかかわるクエリQ6やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDを文字列化し、「5−Q6」といった文字列を生成し、これを名称とすればよい。
「PARAMETERS P1 double,P2 double」
次にクエリの名称の生成方法について説明する。クエリQ6の名称は、いまクエリQ6の生成にかかわっている集計IDとは別の集計IDを持つ集計表テーブル47xにかかわるクエリQ6やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDを文字列化し、「5−Q6」といった文字列を生成し、これを名称とすればよい。
これまでに説明してきた手法で得られたSELECT句、FROM句、WHERE句を1つに繋ぎあわせるとSELECT文が得られ、このSELECT文とパラメータリストと名称を使用するDBMSに対してそれが規定する手法に従って与えるとクエリQ6がストアドプロシージャとして集計表データベース47に保存される。以上でクエリQ6の作成手法についての説明を終える。
次にクエリQ7の生成について説明する。
クエリQ7は、集計表テーブル47xから指定された条件に合致するレコードを削除するクエリである。クエリQ7の生成に関してまず行うべきことは、クエリQ7の生成が必要であるか否かの判断である。この判断は、クエリQ3に集計表のIDと処理IDをパラメータとして与えて実行した時に、その実行結果としてパラメータとして与えた処理IDと集計IDの組み合わせのときにどのような集計計算を行うかを示す一連のレコードが得られるか否かで行う。この一連のレコードをここでは便宜的に結果のレコードセットと呼ぶ。仮に、クエリQ3を実行した結果として1つもレコードが得られなければ、指定した処理IDの値を持つ処理は、指定した集計IDの値を持つ集計表に集計計算を行わないということなので、クエリQ7の生成は不要となる。なお、クエリQ7は単に集計表テーブル47xから後述するcriteriaで特定されるレコードを削除するだけのクエリであるから、どのような集計IDと処理IDの組み合わせであっても同じものになる。したがって、集計IDと処理IDの組合せのうち、最初に結果のレコードセットが得られた組合せについてのみクエリQ7を生成する。以下の説明はクエリQ7の生成が必要となる場合のものである。
前述のごとくクエリQ7はレコードを削除するクエリである。つまりクエリQ7はSQLのDELETE文であり、以下のような構成になっている。
「DELETE FROM tablename WHERE criteria」
Q7のクエリは、クエリQ3を実行した結果求められたレコードセットに基づき生成されるのであるが、1つしか生成しないので、結果のレコードセットの最初のレコードに基づき、上記の下線を施した部分を構成する。
「DELETE FROM tablename WHERE criteria」
Q7のクエリは、クエリQ3を実行した結果求められたレコードセットに基づき生成されるのであるが、1つしか生成しないので、結果のレコードセットの最初のレコードに基づき、上記の下線を施した部分を構成する。
以下、DELETE FROM 句、WHERE句、クエリの名称の生成手法について順次説明する。
まず、クエリQ7のDELETE FROM 句について説明する。クエリQ7は、元々集計表テーブル47xからデータを削除するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからその集計IDの値を持つレコードを抽出し、そのレコードの「デーブル名」フィールドの値を得ればよい。この説明に用いる例では結果のレコードセットは、集計ID=5の場合のものであるので、図37に示した例の集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたDELETE FROM 句は次のようになる。
「DELETE FROM 出荷済売上」
次にWHERE句について説明する。WHERE句は、クエリQ3を実行した結果求めたレコードセットのレコードのうち「集計計算の有無」フィールドがTrueであるレコードのなかで、「レコード削除の真偽」フィールドの値がTrue(図38の例では−1がTrue、0がFalseとなっている)のものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるレコードの「レコード削除の真偽」フィールドの値を調べ、それがTrueであればcreteriaである文字列に以下の要領で生成される文字列を加える。
「DELETE FROM 出荷済売上」
次にWHERE句について説明する。WHERE句は、クエリQ3を実行した結果求めたレコードセットのレコードのうち「集計計算の有無」フィールドがTrueであるレコードのなかで、「レコード削除の真偽」フィールドの値がTrue(図38の例では−1がTrue、0がFalseとなっている)のものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるレコードの「レコード削除の真偽」フィールドの値を調べ、それがTrueであればcreteriaである文字列に以下の要領で生成される文字列を加える。
そのレコードの「フィールド名称」フィールドの値=0
「レコード削除の真偽」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「OR」という文字列でつなぐ。図38に示した集計要素テーブル46bには「レコード削除の真偽」フィールドの値がTrueのものは、集計フィールドIDが40のレコードであるので、以下のようなWHERE句が生成されることになる。
「WHERE 数量=0」
上記の例では「数量=0」として、数量が0のときにレコードが削除されることを指定したが、集計表の持つ意味によっては「数量<=0」として、数量が0以下の場合に削除すべき場合もある。また、本発明の実施形態においては、数値はすべて倍精度型で扱うとしたので2進数による計算の誤差のため、「数量」フィールドの値が0.0にならず、「数量=0」が成立しないときもある。これが予想されるときは0と比較される数値を比較前に丸める等の前処理が必要になる場合もある。
「レコード削除の真偽」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「OR」という文字列でつなぐ。図38に示した集計要素テーブル46bには「レコード削除の真偽」フィールドの値がTrueのものは、集計フィールドIDが40のレコードであるので、以下のようなWHERE句が生成されることになる。
「WHERE 数量=0」
上記の例では「数量=0」として、数量が0のときにレコードが削除されることを指定したが、集計表の持つ意味によっては「数量<=0」として、数量が0以下の場合に削除すべき場合もある。また、本発明の実施形態においては、数値はすべて倍精度型で扱うとしたので2進数による計算の誤差のため、「数量」フィールドの値が0.0にならず、「数量=0」が成立しないときもある。これが予想されるときは0と比較される数値を比較前に丸める等の前処理が必要になる場合もある。
次にパラメータリストについてであるが、クエリQ7においてはパラメータリストは必要ない。これはクエリの性質上パラメータの値は常に0に固定されているからである。
次にクエリの名称の生成方法について説明する。クエリQ7の名称は、いまクエリQ7の生成にかかわっている集計IDとは別の集計IDを持つ集計表テーブル47xにかかわるQ7やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDを文字列化し、「5−Q7」といった文字列を生成し、これを名称とすればよい。
次にクエリの名称の生成方法について説明する。クエリQ7の名称は、いまクエリQ7の生成にかかわっている集計IDとは別の集計IDを持つ集計表テーブル47xにかかわるQ7やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDを文字列化し、「5−Q7」といった文字列を生成し、これを名称とすればよい。
これまでに説明してきた手法で得られたDELETE FROM句、WHERE句を1つに繋ぎあわせるとDELETE文が得られ、このDELETE文と名称を使用するDBMSに対してそれが規定する手法に従って与えるとクエリQ7がストアドプロシージャとして集計表データベース47に保存される。以上でクエリQ7の作成手法についての説明を終える。
次にクエリQ8の生成について説明する。
クエリQ8は、集計表テーブル47xに新たにレコードを追加するクエリである。クエリQ8の生成に関してまず行うべきことは、クエリQ8の生成が必要であるか否かの判断である。この判断は、クエリQ3に集計表のIDと処理IDをパラメータとして与えて実行した時に、その実行結果としてパラメータとして与えた処理IDと集計IDの組み合わせのときにどのような集計計算を行うかを示す一連のレコードが得られるか否かで行う。この一連のレコードをここでは便宜的に結果のレコードセットと呼ぶ。仮に、Q3を実行した結果として1つもレコードが得られなければ、指定した処理IDの値を持つ処理は、指定した集計IDの値を持つ集計表に集計計算を行わないということなので、クエリQ8の生成は不要となる。一方、レコードが得られた場合であるが、集計IDが同一であっても処理IDが異なれば集計計算の対象となる伝票データの構成が異なるので、必ずクエリQ8を生成する。つまり、レコードが得られた集計IDと処理IDの組み合わせごとに、クエリQ8を生成しなくてはならない。以下の説明はクエリQ8の生成が必要となる場合のものである。
前述のごとくクエリQ8はレコードを追加するクエリである。つまりクエリQ8はSQLのINSERT文であり、以下のような構成になっている。
「INSERT INTO tablename (fieldlist) VALUES (values)」
クエリQ8は、結果のレコードセットに基づき生成されるのであるが、上記の下線を施した部分が、結果のレコードセットの変化に応じて変化する。
「INSERT INTO tablename (fieldlist) VALUES (values)」
クエリQ8は、結果のレコードセットに基づき生成されるのであるが、上記の下線を施した部分が、結果のレコードセットの変化に応じて変化する。
以下、INSERT INTO句、VALUES句、パラメータリスト、クエリの名称の生成手法について順次説明する。
まず、INSERT INTO句のtablenameであるが、クエリQ8は、元々集計表テーブル47xにデータを追加するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからそのその集計IDの値を持つレコードを抽出し、そのレコードの「デーブル名」フィールドの値を得ればよい。この説明で用いる例では結果のレコードセットは、集計ID=5の場合のものであるので、図37で示した例の集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。次にfieldlistであるが、これは、結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるもののうち「パラメータ名称」フィールドに値が記録されているレコードの「フィールド名称」フィールドの値をカンマで区切って列記すればよい。従って集計ID=5のときのINSERT INTO 句は次のようになる。
「INSERT INTO 出荷済売上 (出荷伝票,出荷項目,受注伝票,受注項目,品名,内容,数量,単位,単価,金額,消費税)」
次にVALUES句について説明する。valuesには、前記のfieldlistに列記したフィールドに入力する値を列記するのであるが、ここではパラメータを列記する。つまり結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるものの「パラメータ名称」フィールドの値を調べ、値があればその値をカンマで区切って列記すればよい。従って集計ID=5のときのVALUES句は次のようになる。
「VALUES (P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11)」
次にパラメータリストについて説明する。パラメータリストは前記VALUES句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。
「INSERT INTO 出荷済売上 (出荷伝票,出荷項目,受注伝票,受注項目,品名,内容,数量,単位,単価,金額,消費税)」
次にVALUES句について説明する。valuesには、前記のfieldlistに列記したフィールドに入力する値を列記するのであるが、ここではパラメータを列記する。つまり結果のレコードセットに含まれるレコードすべてについて、「集計計算の有無」フィールドがTrueであるものの「パラメータ名称」フィールドの値を調べ、値があればその値をカンマで区切って列記すればよい。従って集計ID=5のときのVALUES句は次のようになる。
「VALUES (P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11)」
次にパラメータリストについて説明する。パラメータリストは前記VALUES句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。
パラメータリストの作成法は以下のようになる。
前記の結果のレコードセットの各レコードの「集計計算の有無」フィールドがTrueであるものの「パラメータ名称」フィールドの値をパラメータ名とし「SQL定義フィールドタイプ」フィールドの値をパラメータの型としてDBMSが要求する形式に整える。例えば、あるDBMSが要求する形式に従い、図38の集計要素テーブル46bの例に従うならば、次のようなパラメータリストが作成されることになる。
「PARAMETERS P1 double,P2 double,P3 double,P4 double, P5 string,P6 string,P7 double,P8 string,P9 double,P10 double,P11 double」
次にクエリの名称の生成方法について説明する。クエリQ8の名称は、いまクエリQ8の生成にかかわっている集計IDと処理IDの組み合わせとは別の組み合わせにかかわるQ8やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDと処理IDを文字列化し、「5−3−Q8」といった文字列を生成し、これを名称とすればよい。
「PARAMETERS P1 double,P2 double,P3 double,P4 double, P5 string,P6 string,P7 double,P8 string,P9 double,P10 double,P11 double」
次にクエリの名称の生成方法について説明する。クエリQ8の名称は、いまクエリQ8の生成にかかわっている集計IDと処理IDの組み合わせとは別の組み合わせにかかわるQ8やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDと処理IDを文字列化し、「5−3−Q8」といった文字列を生成し、これを名称とすればよい。
これまでに説明してきた手法で得られたINSERT INTO句とVALUES句を1つに繋ぎあわせるとINSERT文が得られ、このINSERT文とパラメータリストと名称を使用するDBMSに対してそれが規定する手法に従って与えるとクエリQがストアドプロシージャとして集計表データベース47に保存される。
なお、上記のINSERT文の例で、図38に例示されている集計要素テーブル46bの「集計フィールドID」の値が45のレコードがfieldlist、values、パラメータリストのそれぞれに含まれていない点についてここで説明する。このレコードは、この説明のための架空の設定における集計表の合計欄についてのものである。この合計欄には金額と消費税を加算したものを記録することを意図しているが、この合計のデータは伝票データには無いのでパラメータとして伝票データから受取ることはできない。このため、「集計計算の有無」フィールドの値がFalseとなっており、fieldlist、values、パラメータリストには含まれていないのである。したがって、このクエリによって集計表テーブル47xに追加されたレコードの「合計」フィールドの値は0である。しかし、表示時には、集計表テーブルから表示すべきレコードを抽出するクエリ(本発明の実施形態においてはQ5に相当する)のSELECT句のフィールドリストに加算を行う式を加えるか、表示用のソフトウエアによって加算を行うことによって合計を表示させることができる。(本発明の実施形態においては後者の手法を採っている)。以上でQ8の作成手法につぃての説明を終える。
次にクエリQ9の生成について説明する。
クエリQ9は、集計表テーブル47xの既存のレコードに、計上した伝票のデータを加算または減算するクエリである。クエリQ9の生成に関してまず行うべきことは、クエリQ9の生成が必要であるか否かの判断である。この判断は、クエリQ3に集計表のIDと処理IDをパラメータとして与えて実行した時に、その実行結果としてパラメータとして与えた処理IDと集計IDの組み合わせのときにどのような集計計算を行うかを示す一連のレコードが得られるか否かで行う。この一連のレコードをここでは便宜的に結果のレコードセットと呼ぶ。仮に、クエリQ3を実行した結果として1つもレコードが得られなければ、指定した処理IDの値を持つ処理は、指定した集計IDの値を持つ集計表に集計計算を行わないということなので、クエリQ9の生成は不要となる。一方、レコードが得られた場合であるが、集計IDが同一であっても処理IDが異なれば集計計算の対象となる伝票データの構成が異なるので、必ずクエリQ9を生成する。つまり、レコードが得られた集計IDと処理IDの組み合わせごとに、クエリQ9を生成しなくてはならない。以下の説明はクエリQ9の生成が必要となる場合のものである。
なお、Q9は「加算または減算のクエリ」としたが、これは加算か減算かどちらか一方というわけではない。加算のクエリと減算のクエリの生成方法は、後述のごとく演算子を+にするか−にするかの違いしかないのでこの両者をまとめてクエリQ9とし、あわせて説明するものであり、加算のクエリと減算のクエリを両方生成しなくてはならない。
前述のごとくクエリQ9はレコードに対して加算または減算をするクエリである。つまりクエリQ9はSQLのUPDATE文であり、以下のような構成になっている。
「UPDATE tablename SET newvalue WHERE criteria」
クエリQ9は、クエリQ3を実行した結果のレコードセットに基づき生成されるのであるが、上記の下線を施した部分が、結果のレコードセットの変化に応じて変化する。
「UPDATE tablename SET newvalue WHERE criteria」
クエリQ9は、クエリQ3を実行した結果のレコードセットに基づき生成されるのであるが、上記の下線を施した部分が、結果のレコードセットの変化に応じて変化する。
以下、UPDATE句、SET句、WHERE句、パラメータリスト、クエリの名称の生成手法について順次説明する。
まず、UPDATE句のtablenameであるが、クエリQ9は、元々、集計表テーブル47xにデータを加算または減算するのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからそのその集計IDの値を持つレコードを抽出し、そのレコードの「デーブル名」フィールドの値を得ればよい。この説明のために用いる例では結果のレコードセットは、集計ID=5の場合のものであるので、図37に示した例の集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたUPDATE句は次のようになる。
「UPDATE 出荷済売上」
次にSET句について説明する。SET句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるものの各レコードが以下の3つの場合のいずれに分類されるか判断し、その分類に従って生成される。その3分類とは、「集計対象」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のもの(これを便宜的に第1分類と呼ぶ)、「集計対象」フィールドの値がFalseのものの中で「抽出条件」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のもの(これを第2分類と呼ぶ)、第1分類、第2分類いずれにも属さないもの(これを第3分類と呼ぶ)、の3つである。
「UPDATE 出荷済売上」
次にSET句について説明する。SET句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるものの各レコードが以下の3つの場合のいずれに分類されるか判断し、その分類に従って生成される。その3分類とは、「集計対象」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のもの(これを便宜的に第1分類と呼ぶ)、「集計対象」フィールドの値がFalseのものの中で「抽出条件」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のもの(これを第2分類と呼ぶ)、第1分類、第2分類いずれにも属さないもの(これを第3分類と呼ぶ)、の3つである。
結果のレコードセットのレコードのうち第1分類とされたものについては以下の要領で生成される文字列をnewvalueである文字列にカンマで区切って追加する。
そのレコードの「フィールド名称」フィールドの値=
そのレコードの「フィールド名称」フィールドの値+
そのレコードの「パラメータ名称」フィールドの値
図38に例示された集計要素テーブル46bの「集計フィールドID」フィールドの値が40のレコードの場合は以下のような文字列が得られることになる。
「数量=数量+P7」
第2分類とされたレコードについては、文字列は生成しない。(この理由は後述する。)
第3分類とされたレコードについては以下の要領で生成される文字列をnewvalueである文字列にカンマで区切って追加する。
そのレコードの「フィールド名称」フィールドの値+
そのレコードの「パラメータ名称」フィールドの値
図38に例示された集計要素テーブル46bの「集計フィールドID」フィールドの値が40のレコードの場合は以下のような文字列が得られることになる。
「数量=数量+P7」
第2分類とされたレコードについては、文字列は生成しない。(この理由は後述する。)
第3分類とされたレコードについては以下の要領で生成される文字列をnewvalueである文字列にカンマで区切って追加する。
そのレコードの「フィールド名称」フィールドの値=
そのレコードの「パラメータ名称」フィールドの値
図38に例示された集計要素テーブル46bの「集計フィールドID」フィールドの値が38のレコードの場合は以下のような文字列が得られることになる。
「品名=P5」
これら各分類から得られた文字列を構成して、SET句にするのであるが、図38に例示された集計要素テーブル46bのすべてのレコードについて処理した場合の例を示せば以下のようになる。
「SET 受注伝票=P3,受注項目=P4,品名=P5,内容=P6,数量=数量+P7,単位=P8,単価=P9,金額=金額+P10,消費税=消費税+P11」
ここで、各分類の意味について説明する。第1分類は、そのレコードが表す集計表テーブル47xのフィールドが加減算の対象となることを指定する値が記録されているもので、この指定は他のフィールド(たとえば「抽出条件」フィールド)に記録されているどのような値よりも優先される。第2分類と第3分類は、そのレコードが表す集計表テーブル47xのフィールドが加減算の対象ではない、という点においては同じであるが、第2分類はそのレコードが表す集計表テーブル47xのフィールドが抽出条件として使用される。つまりこのフィールドは集計表テーブル47xのレコードを何らかの基準に従って他と区別するために使われるものであるので「加減算の対象ではない」という点に着目して第3分類と同じ処理をすると、抽出条件の比較の対象となる値を書換えるということになる。もちろん抽出条件に対して使用されるので、書換え前と書換え後で値が異なることは予定されていないが、何らかの予期せぬ理由により書換え前後の値が異なることになると、集計表テーブル47xのデータの一貫性が保てなくなる。このような可能性を極力排除するために第2分類においては何もしないようにした。第3分類は、そのレコードが表す集計表テーブル47xのフィールドが加減算の対象でもなく、抽出条件として使用されることもないものである。このようなフィールドを例示したような「品名=P5」というかたちの式で書き換える必要性は無いように思われるが、第3分類に分類されるレコードが表す集計表テーブル47xのフィールドに対してデータの書換えを容認しなければ、第3分類のフィールドは訂正できないということになり不都合であるので、データの書換えを容認したのである。
そのレコードの「パラメータ名称」フィールドの値
図38に例示された集計要素テーブル46bの「集計フィールドID」フィールドの値が38のレコードの場合は以下のような文字列が得られることになる。
「品名=P5」
これら各分類から得られた文字列を構成して、SET句にするのであるが、図38に例示された集計要素テーブル46bのすべてのレコードについて処理した場合の例を示せば以下のようになる。
「SET 受注伝票=P3,受注項目=P4,品名=P5,内容=P6,数量=数量+P7,単位=P8,単価=P9,金額=金額+P10,消費税=消費税+P11」
ここで、各分類の意味について説明する。第1分類は、そのレコードが表す集計表テーブル47xのフィールドが加減算の対象となることを指定する値が記録されているもので、この指定は他のフィールド(たとえば「抽出条件」フィールド)に記録されているどのような値よりも優先される。第2分類と第3分類は、そのレコードが表す集計表テーブル47xのフィールドが加減算の対象ではない、という点においては同じであるが、第2分類はそのレコードが表す集計表テーブル47xのフィールドが抽出条件として使用される。つまりこのフィールドは集計表テーブル47xのレコードを何らかの基準に従って他と区別するために使われるものであるので「加減算の対象ではない」という点に着目して第3分類と同じ処理をすると、抽出条件の比較の対象となる値を書換えるということになる。もちろん抽出条件に対して使用されるので、書換え前と書換え後で値が異なることは予定されていないが、何らかの予期せぬ理由により書換え前後の値が異なることになると、集計表テーブル47xのデータの一貫性が保てなくなる。このような可能性を極力排除するために第2分類においては何もしないようにした。第3分類は、そのレコードが表す集計表テーブル47xのフィールドが加減算の対象でもなく、抽出条件として使用されることもないものである。このようなフィールドを例示したような「品名=P5」というかたちの式で書き換える必要性は無いように思われるが、第3分類に分類されるレコードが表す集計表テーブル47xのフィールドに対してデータの書換えを容認しなければ、第3分類のフィールドは訂正できないということになり不都合であるので、データの書換えを容認したのである。
なお、上記の例では「数量=数量+P7」というように加算の場合を例示したが、減算の場合のQ9を生成するときは「数量=数量−P7」とすればよい。
次にQ9のWHERE句の生成について説明する。WHERE句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるもののうち、「抽出条件」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
そのレコードの「フィールド名称」フィールドの値=
そのレコードの「パラメータ名称」フィールドの値
「抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
そのレコードの「パラメータ名称」フィールドの値
「抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
図38に示した集計要素テーブル46bでは「抽出条件」フィールドの値がTrueのものは、「集計フィールドID」フィールドの値が34と35のレコードであるので、以下のようなWHERE句が生成されることになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
次にパラメータリストについて説明する。パラメータリストは前記SET句とWHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。パラメータリストの作成法は以下のようになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
次にパラメータリストについて説明する。パラメータリストは前記SET句とWHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。パラメータリストの作成法は以下のようになる。
結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるもののうち、「パラメータ名称」フィールドの値をパラメータ名とし「SQL定義フィールドタイプ」フィールドの値をパラメータの型としてDBMSが要求する形式に整える。例えば、あるDBMSが要求する形式に従い、図38の集計要素テーブル46bの例に従うならば、次のようなパラメータリストが作成されることになる。
「PARAMETERS P1 double,P2 double,P3 double,P4 double,P5 string,P6 string,P7 double,P8 string,P9 double,P10 double,P11 double」
次にクエリの名称の生成方法について説明する。クエリQ9の名称は、いまクエリQ9の生成にかかわっている集計IDと処理IDの組み合わせとは別の組み合わせにかかわるクエリQ9やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDと処理IDを文字列化し、「5−3−Q9」といった文字列を生成し、これを名称とすればよい。
「PARAMETERS P1 double,P2 double,P3 double,P4 double,P5 string,P6 string,P7 double,P8 string,P9 double,P10 double,P11 double」
次にクエリの名称の生成方法について説明する。クエリQ9の名称は、いまクエリQ9の生成にかかわっている集計IDと処理IDの組み合わせとは別の組み合わせにかかわるクエリQ9やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDと処理IDを文字列化し、「5−3−Q9」といった文字列を生成し、これを名称とすればよい。
これまでに説明してきた手法で得られたUPDATE句、SET句、WHER句を1つに繋ぎあわせるとUPDATE文が得られ、このUPDATE文とパラメータリストと名称を使用するDBMSに対してそれが規定する手法に従って与えるとクエリQ9がストアドプロシージャとして集計表データベース47に保存される。
次にクエリQ10の生成について説明する。Q10は、集計表テーブル47xの既存のレコードに、計上した伝票のデータを上書きするクエリである。クエリQ10の生成に関してまず行うべきことは、クエリQ10の生成が必要であるか否かの判断である。この判断は、クエリQ3に集計表のIDと処理IDをパラメータとして与えて実行した時に、その実行結果としてパラメータとして与えた処理IDと集計IDの組み合わせのときにどのような集計計算を行うかを示す一連のレコードが得られるか否かで行う。この一連のレコードをここでは便宜的に結果のレコードセットと呼ぶ。仮に、クエリQ3を実行した結果として1つもレコードが得られなければ、指定した処理IDの値を持つ処理は、指定した集計IDの値を持つ集計表に集計計算を行わないということなので、クエリQ10の生成は不要となる。一方、レコードが得られた場合であるが、集計IDが同一であっても処理IDが異なれば集計計算の対象となる伝票データの構成が異なるので、必ずクエリQ10を生成する。つまり、レコードが得られた集計IDと処理IDの組み合わせごとに、クエリQ10を生成しなくてはならない。以下の説明はクエリQ10の生成が、必要となる場合のものである。
前述のごとくクエリQ10はレコードに対して上書きをするクエリである。つまりクエリQ10はSQLのUPDATE文であり、以下のような構成になっている。
「UPDATE tablename SET newvalue WHERE criteria」
Q10のクエリは、結果のレコードセットに基づき生成されるのであるが、上記の下線を施した部分が、結果のレコードセットの変化に応じて変化する。
「UPDATE tablename SET newvalue WHERE criteria」
Q10のクエリは、結果のレコードセットに基づき生成されるのであるが、上記の下線を施した部分が、結果のレコードセットの変化に応じて変化する。
以下、UPDATE句、SET句、WHERE句、パラメータリスト、クエリの名称の生成手法について順次説明する。
まず、UPDATE句のtablenameであるが、クエリQ10は、元々、集計表テーブル47xの既存のレコードを上書きするのが目的なのであるから、tablenameにあたる文字列には集計表テーブル47xの名称を入れればよく、それは集計表名テーブル46aの「テーブル名」フィールドに記録されている。すでに集計IDは指定されているのであるから集計表名テーブル46aからその集計IDの値を持つレコードを抽出し、そのレコードの「デーブル名」フィールドの値を得ればよい。この説明のために用いる例では結果のレコードセットは、集計ID=5の場合のものであるので、図37に示した例の集計表名テーブル46aの場合では集計ID=5のときのテーブル名は「出荷済売上」となる。従って図37の例に基づいたUPDATE句は次のようになる。
「UPDATE 出荷済売上」
次にSET句について説明する。SET句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるもののうち、「パラメータ名称」フィールドに値があるレコードについて以下の要領で生成される文字列をnewvalueである文字列にカンマで区切って追加することにより作成される。
「UPDATE 出荷済売上」
次にSET句について説明する。SET句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるもののうち、「パラメータ名称」フィールドに値があるレコードについて以下の要領で生成される文字列をnewvalueである文字列にカンマで区切って追加することにより作成される。
そのレコードの「フィールド名称」フィールドの値=
そのレコードの「パラメータ名称」フィールドの値
図38に例示された集計要素テーブル46bの例に従えば次のような文字列が得られることになる。
「SET 出荷伝票=P1,出荷項目=P2,受注伝票=P3,受注項目=P4,品名=P5,内容=P6,数量=P7,単位=P8,単価=P9,金額=P10,消費税=P11」
次にクエリQ10のWHERE句の生成について説明する。WHERE句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるもののうち、「抽出条件」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
そのレコードの「パラメータ名称」フィールドの値
図38に例示された集計要素テーブル46bの例に従えば次のような文字列が得られることになる。
「SET 出荷伝票=P1,出荷項目=P2,受注伝票=P3,受注項目=P4,品名=P5,内容=P6,数量=P7,単位=P8,単価=P9,金額=P10,消費税=P11」
次にクエリQ10のWHERE句の生成について説明する。WHERE句は、結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるもののうち、「抽出条件」フィールドの値がTrue(図38の例では2がTrue、1がFalseとなっている)のものだけを参照して生成される。つまり結果のレコードセットに含まれるレコードすべてについて、「抽出条件」フィールドの値を調べ、それがTrueであればcriteriaである文字列に以下の要領で生成される文字列を加える。
そのレコードの「フィールド名称」フィールドの値=
そのレコードの「パラメータ名称フィールドの値
「抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
そのレコードの「パラメータ名称フィールドの値
「抽出条件」フィールドの値がTrueになるレコードが複数あれば上記の要領で生成された文字列を「AND」という文字列でつなぐ。
図38に示した集計要素テーブル46bでは「抽出条件」フィールドの値がTrueのものは、「集計フィールドID」フィールドの値が34と35のレコードであるので、以下のようなWHERE句が生成されることになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
次にパラメータリストについて説明する。パラメータリストは前記SET句とWHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。パラメータリストの作成法は以下のようになる。
「WHERE 出荷伝票=P1 AND 出荷項目=P2」
次にパラメータリストについて説明する。パラメータリストは前記SET句とWHERE句で使用されるパラメータに具体的な値を与える場合に備えてパラメータの名称、データ型等をDBMSに与えるために作成するものである。パラメータリストの作成法は以下のようになる。
結果のレコードセットに含まれるすべてのレコードについて、「集計計算の有無」フィールドがTrueであるものの「パラメータ名称」フィールドの値をパラメータ名とし「SQL定義フィールドタイプ」フィールドの値をパラメータの型としてDBMSが要求する形式に整える。例えば、あるDBMSが要求する形式に従い、図38の集計要素テーブル46bの例に従うならば、次のようなパラメータリストが作成されることになる。
「PARAMETERS P1 double,P2 double,P3 double,P4 double,P5 string,P6 string,P7 double,P8 string,P9 double,P10 double,P11 double」
次にクエリの名称の生成方法について説明する。クエリQ10の名称は、いまクエリQ10の生成にかかわっている集計IDと処理IDの組み合わせとは別の組み合わせにかかわるクエリQ10やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDと処理IDを文字列化し、「5−3−Q10」といった文字列を生成し、これを名称とすればよい。
「PARAMETERS P1 double,P2 double,P3 double,P4 double,P5 string,P6 string,P7 double,P8 string,P9 double,P10 double,P11 double」
次にクエリの名称の生成方法について説明する。クエリQ10の名称は、いまクエリQ10の生成にかかわっている集計IDと処理IDの組み合わせとは別の組み合わせにかかわるクエリQ10やその他の集計表データベース47に保存されるクエリと区別できるようにするため、一意でなければならない。一意でありさえすれば、どのようなものでもかまわないのであるが、わかりやすくするために例えば、集計IDと処理IDを文字列化し、「5−3−Q10」といった文字列を生成し、これを名称とすればよい。
これまでに説明してきた手法で得られたUPDATE句、SET句、WHER句を1つに繋ぎあわせるとUPDATE文が得られ、このUPDATE文とパラメータリストと名称を使用するDBMSに対してそれが規定する手法に従って与えるとクエリQ10がストアドプロシージャとして集計表データベース47に保存される。以上で、クエリQ1〜Q10についての説明を終了する。
次に、図3に示す集計表データベース47に含まれる集計ID毎の集計データを記録する集計表のテーブルの生成について説明する。
まず、集計要素テーブル46bから生成したい集計表テーブルの集計IDの値を「集計ID」フィールドに持つレコードを抽出する。この抽出された状態を図38に示されている集計要素テーブル46bの例を使って説明する。図38ではたまたま集計IDが5のみのレコードしか表示されておらず、またこの例が仮定している設定における集計ID=5のレコードはすべて含まれているので、指定された集計IDが5の場合の抽出結果を表していることになる。生成される集計表テーブルは、図38で示した例の1番上のレコードが表しているフィールドから1番下のレコードの表すフィールドまで12個のフィールドを持つことになる。そしてその12個のフィールドの各々の名称は、集計要素テーブル46bの「フィールド名称」フィールドに記録されている値(この場合は文字列である)になる。図38の1番上のレコードの場合、その値は「出荷伝票」であり、2番目の場合は「出荷項目」である。また、これら12個のフィールドのデータタイプは、集計要素テーブル46bの「SQL定義フィールドタイプ」フィールドに記録されている値に従う。図38の例では「品名」、「内容」、「単位」の3つのフィールドがstringで、残りのフィールドはすべてdoubleである。
図38に示されたような抽出後のレコードセットから集計表テーブルを生成する場合、上記で説明したフィールドに付与する名称のデータとそのフィールドのデータタイプのデータを使用するDBMSが規定する手法に従って与え、テーブルを生成する。
以上で、集計表定義データベース46と集計表データベース47の作成についての説明を終了し、次に各集計表に対する集計計算の処理の流れについて、図46〜図48を用いて説明する。
次に、集計計算を行う集計表作成ソフトウェア36の説明を行う。この説明においては、まず、集計表作成ソフトウェア36全体の制御構造を図46のフローチャートを参照しながら説明する。続いて、そのフローチャートの各ステップの概略を説明し、その後に、各ステップにおける処理の詳細について説明する。さらに、フローチャートの詳細を説明する際に保留した、クエリの実行に関する共通の手法についての説明を最後に行う。
図46は、集計表作成ソフトウェア36の全体の制御構造を示すフローチャートである。このフローチャートから明らかなように集計表作成ソフトウェア36は、ステップS2の条件を判定基準とするループを構成し、そのループの内部には、さらにステップS4の条件を判定基準とするループを含む2重ループ構造を持っており、すべてのループ処理を終えると、ステップS15の処理を行い終了する。
次に、図46のフローチャートの各ステップについて、その処理の概略を、図50及び図51を参照しながら説明する。
集計表作成ソフトウェア36は、新規計上ソフトウェア31か、修正計上ソフトウェア32のどちらかによって起動されることによって処理を開始する。
ステップS1では集計表作成ソフトウェア36を起動したソフトウェアからパラメータを受け取る。受け取るパラメータの数は4つであり、これらを以下、PR1、PR2、PR3、PR4として説明する。なお、PR1は計上された伝票データである。これらのパラメータについての詳細は後段で説明する。
ステップS2では、受け取った伝票データの本体項目について、すべての本体項目についてステップS3以降の処理を受けているか否かを判断する。未処理の項目があれば、その項目に対してステップS3以降の処理に進み、未処理のものがなければ、つまりすべての本体項目について処理が終わっていれば、集計表作成ソフトウェア36の処理の終了処理(END)に進む。
ステップS3では、処理IDをパラメータとしてクエリQ1に与えて実行する。その結果、その処理IDを持つ処理が、どの集計表に対して集計を行うかを示す一連のレコードが得られる。これを以後、S3のレコードセットと呼び、S3のレコードセットに含まれるレコードをS3のレコードと呼ぶ。
ステップS4では、S3のレコードセットのレコードのすべてについて、ステップS5以降の処理を受けているか否かを判断する。未処理のレコードがあればステップS5に進み、未処理のものがなければ、つまり、すべてのS3のレコードについて処理が終わっていれば、ステップS2へ戻り未処理の本体項目の有無について判断することになる。
ステップS5では、実際に集計計算を行うときに必要なデータを特定するための3つの処理を行う。第1の処理は、集計計算対象の集計表テーブル47xを特定するものである。第2の処理は、クエリQ3にいま処理中のS3のレコードの「集計ID」フィールドの値と「処理ID」フィールドの値をパラメータとして与えて実行することにより一連のレコードセットを得る処理である。この得られた一連のレコードを以後、S5のレコードセットと呼ぶ。第3の処理は、パラメータPR1とPR4のどちらを処理対象とするかを選択する処理である。
ステップS6では、ステップS5で特定された集計表テーブル47xの親の伝票IDと、いま集計計算の対象となっている伝票の伝票IDが一致するか否か判断する。一致する場合は、ステップS7以降の処理に進む。一致しない場合は、ステップS10以降の処理に進む。
ステップS7では、いま処理中のS5のレコードセットに基づいてクエリQ6にパラメータを与え、ステップS5で明らかになった集計計算対象の集計表テーブル47xにレコードがあるか否か判断する。レコードがあればステップS8に進み、なければステップS9に進む。
ステップS8では、集計計算の対象となる集計表テーブル47xにすでにレコードがある場合の処理を行う。処理の終了後は、ステップS4へ戻り、未処理のS3のレコードがないか否かを判断することになる。
ステップS9では、集計計算の対象となる集計表テーブル47xにレコードがない場合の処理を行う。処理の終了後は、ステップS4へ戻り、未処理のS3のレコードがないか否かを判断することになる。
一方、ステップS6で分岐したフローのステップS10では、現在処理中の本体項目のデータに関連伝票データが含まれているか否かを判断する。含まれていなければ、何もせずにステップS4に戻り、未処理のS3のレコードがあるか否か判断する。一方、関連伝票データが含まれていれば、ステップ11以降の処理に進む。
ステップ11では、ステップS5で特定された集計表テーブル47xの親の伝票IDと、現在処理中の本体項目が参照している伝票の伝票IDが一致するか否か判断する。一致する場合は、ステップ12以降の処理に進み、一致しない場合は何もせずステップ4に戻り、未処理のS3のレコードがあるか否か判断する。
ステップ12では、現在処理中のS5のレコードセットからクエリQ6にパラメータを与え、ステップ5で明らかになった集計計算対象の集計表テーブル47xにレコードがあるか否か判断する。レコードがあればステップ13に進み、レコードがなければステップ14に進む。
ステップ13では、集計計算の対象となる集計表テーブル47xにすでにレコードがある場合の処理を行う。処理の終了後は、ステップS4に戻り、未処理のS3のレコードがあるか否かを判断する。
ステップ14では、集計計算の対象となる集計表テーブル47xにレコードがない場合の処理を行う。処理の終了後はステップS4に戻り、未処理のS3のレコードがあるか否か判断する。
ステップS15では、ステップS14までで行われた集計計算の結果、集計表テーブル47xのレコードのなかに削除条件に合致したレコードがないかを調べ、合致したレコードがある場合はそれを削除する処理を行い、ステップS2に戻る。そして、ステップ2において、全ての本体項目についての処理が終了したと判断すると、集計表作成ソフトウェア36の終了処理(END)に進む。
次に図46のフローチャートの各ステップの詳細について図50、図51を参照して説明する。
まず、集計表作成ソフトウェア36の開始(START)について説明する。具体的な開始方法は、集計表作成ソフトウェア36の実装方法の違いにより異なる。例えば、集計表作成ソフトウェア36を呼び出し側のソフトウェアの一部として(つまりサブルーチンとして)実装すれば、サブルーチンの呼び出しというかたちで行われるし、呼び出し側とはまったく別の(他のPC上でも実行可能な)ソフトウェアとして実装すれば(このような実装方法は一部有力企業や企業連合からいくつか提案されている)、その実装方法にあった呼び出し手順が求められる。本発明の実施方法では、後者の手法のなかから1つを採用したが、これは強制されるものではない。本実施の形態においては、新規計上ソフトウェア31か、集計計上ソフトウェア32によって起動される。
次に、ステップS1の詳細について説明する。ステップS1では、集計表作成ソフトウェア36を起動したソフトウェアから4つのパラメータであるPR1、PR2、PR3、PR4を受け取るので、このパラメータについて順番に説明する。
PR1は、計上された伝票データであり図20、図21に示す構造を持っている。PR2は、集計表作成ソフトウェア36が受け取るPR1の伝票データが、新規計上又は参照計上に関わる伝票データであるか、それとも修正計上に関わる伝票データであるか、を示す識別子である。この識別子によって両者が区別できればよいのであるから値は何でもよい。PR3は、集計計算の対象となる集計IDである。通常は、集計表作成ソフトウェア36は規定されているすべての集計表テーブル47xに対して集計計算を行うので、PR3の値は0である。しかし、特定の集計表テーブル47xのみに対して集計計算を行いたいときは、PR3に目的とする集計IDが入る。PR4は、PR2によってPR1が修正計上に関わる伝票データであると規定されている場合に必要となるパラメータであり、修正前の伝票データを伝票管理データベース4(図1参照)から検索してきたもので、図20、図21に示す構造を持っている。したがって、PR1が新規計上または参照計上にかかわる伝票データである場合にはPR4は不要になる。この場合は、PR4に何もデータを入れずに空の状態で受け渡しを行うか、PR1が修正計上に関わる伝票データである場合はパラメータ数を4とし、新規計上または参照計上に関わる伝票データである場合はパラメータ数を3とすることのどちらかで対応する。
次にステップS2の詳細を説明する。ステップS2ではパラメータPR1の伝票データに含まれる本体項目データセクション55(図20参照)の数を知り、その数の示す回数だけステップS3以降の処理が繰り返されるように集計表作成ソフトウェア36の動作を制御する処理を行う。このときそれぞれの繰り返し処理において、個々の本体項目データセクション55が処理対象となるようにする。したがって、毎回の繰り返し処理がステップS2で開始された時点でどの本体項目データセクション55がステップS3以降の処理の対象となるかが決定されることになる。このとき、同じ本体項目データセクション55が重複して処理されることのないようにする。そして、すべての本体項目データセクション55に対する処理が終われば、集計表作成ソフトウェア36を終了する。
ここで、本体項目データセクション55を処理する順番は問わない。また、本体項目データセクション55の数を得るときにPR4でなくPR1の伝票データに基づいたが、これはPR1とPR4は同じ伝票の修正前と修正後の伝票データであるので本体項目セクション55の数に差異はない上に、PR1には必ず伝票データの実体があるが、PR4は空の伝票データである場合もあるからである。
次にステップS3の詳細を説明する。前述のステップS3の概略の説明では、クエリQ1を実行するとしたが、パラメータPR3の値によってはクエリQ2を実行する。クエリQ1を実行するのは、PR3の値が0のときで、このときは規定されているすべての集計表テーブル47xに対して集計計算を行う。通常、パラメータPR3の値は0であり、PR3の値が0以外で集計IDを表すときは例外的な場合であるので、概略説明のときは省略したが、PR3の値が0以外で集計IDを表すときはクエリQ2を実行し、PR3の集計IDが示す集計表テーブル47xに対してのみ集計計算を行う。
ここで、クエリQ1に与えるパラメータについて説明する。クエリQ1に与えるパラメータは処理IDであるが、その処理IDは、パラメータPR2が修正計上を意味するものであれば問い合わせデータセクション51のエリア51g(図20参照)からその値を得るものとし、パラメータPRが新規計上または参照計上を意味するものであればいま処理中の本体項目データセクション55の「この項目の処理ID」を記録するエリア55m(図20参照)からその値を得るものとする(なお、処理IDが3の場合のS3のレコードセットの例を図47に示す。)。
次に、クエリQ2に与えるパラメータについて説明する。クエリQ2に与えるパラメータは2つあり、1つは処理IDであり、もう1つは集計IDである。クエリQ2に与える処理IDは、クエリQ1に与える処理IDと同じものである。集計IDについては、パラメータPR3の値を集計IDとして与えればよい。(なお、処理IDが3で集計IDが5の場合のS3のレコードセットの例を図48に示す。)
クエリQ1またはクエリQ2を実行した結果、レコードが1つも得られない、ということは、集計表定義データベース46の各テーブルの値が正しく設定されていれば起こらない。しかし万一、1つもレコードが得られなかった場合に備えるならば、ステップS2に戻り、次の本体項目についての判断をするようにすれば良い。(この点は、図46のフローチャートには記載されていない。)
次に、ステップS4の詳細を説明する。ステップS4では、S3のレコードセットに含まれるレコードの数を知り、その数が示す回数だけステップS5からステップS14までの処理が行われるように制御する。このときそれぞれの繰り返し処理において、個々のS3のレコードがステップS5以降の処理対象となるようにする。したがって、毎回の繰り返し処理がステップS4で開始された時点でどのS3のレコードがステップS5以降の処理の対象となるかが決定されることになる。このとき、同じS3のレコードが重複して処理されることのないようにする。S3のレコード全てについて処理が終われば、ステップ15の処理を行って、ステップS2に戻り、次の本体項目についての判断を行う。なお、S3のレコードセットに含まれるレコードの順番は、クエリQ1またはクエリQ2に規定されているので、ステップS4では順番を意識する必要はない。
クエリQ1またはクエリQ2を実行した結果、レコードが1つも得られない、ということは、集計表定義データベース46の各テーブルの値が正しく設定されていれば起こらない。しかし万一、1つもレコードが得られなかった場合に備えるならば、ステップS2に戻り、次の本体項目についての判断をするようにすれば良い。(この点は、図46のフローチャートには記載されていない。)
次に、ステップS4の詳細を説明する。ステップS4では、S3のレコードセットに含まれるレコードの数を知り、その数が示す回数だけステップS5からステップS14までの処理が行われるように制御する。このときそれぞれの繰り返し処理において、個々のS3のレコードがステップS5以降の処理対象となるようにする。したがって、毎回の繰り返し処理がステップS4で開始された時点でどのS3のレコードがステップS5以降の処理の対象となるかが決定されることになる。このとき、同じS3のレコードが重複して処理されることのないようにする。S3のレコード全てについて処理が終われば、ステップ15の処理を行って、ステップS2に戻り、次の本体項目についての判断を行う。なお、S3のレコードセットに含まれるレコードの順番は、クエリQ1またはクエリQ2に規定されているので、ステップS4では順番を意識する必要はない。
次にステップS5について詳細な説明を行う。ステップS5では、実際に集計計算を行うときに必要なデータを特定するための3つの処理を行う。
ステップS5で特定する1番目のデータは、集計計算の対象となる集計表テーブル47xに関するデータである。これを特定するために、ステップS5ではいま処理中のS3のレコードの「集計ID」フィールドの値と同じ値を「集計ID」フィールドに持つ集計表名テーブル46aのレコードを抽出する。集計表定義データベース46の各テーブルの値が正しく設定されていれば、この抽出の結果、必ずレコードが得られる。集計表名テーブル46aには、集計表のテーブル名が記録されているので、抽出されたレコードの集計表のテーブル名に基づきそのテーブルを開く。
ステップS5で特定する2番目のデータは、ステップS6以降の処理で実行するクエリのパラメータに与える値を得るために必要となるクエリQ3を実行して得られる一連のレコードである。このため、ステップS5ではいま処理中のS3のレコードの「集計ID」フィールドの値と、「処理ID」フィールドの値をパラメータとしてクエリQ3に与え実行する。前述のごとく、この結果得られた一連のレコードをS5のレコードセットと呼ぶ。
ステップS5で特定する3番目のデータは、集計計算対象の伝票データがPR1とPR4のパラメータのうちいずれであるか、である。このために、いま処理中のS3のレコードの、「処理対象」フィールドの値に従って、PR1とPR4のパラメータのうちいずれかを選ぶ。集計表定義データベース46の各テーブルの値が正しく設定されていれば、パラメータPR2によってPR1が修正計上にかかわるデータであると規定されておらず、従ってPR4が与えられていないにもかかわらず、S3のレコードの「処理対象」フィールドの値がPR4をステップS5以降の処理対象として指定することはない。
次にステップS6の詳細について説明する。ステップS6では伝票IDの照合を行う。照合される伝票IDの一方は、ステップS5で特定された集計表テーブル47x(この特定は、集計表テーブル46aの該当するレコードを抽出することによって行われる)の親の伝票ID(これは集計表テーブル46aの「親の伝票」フィールドに記録されている)である。照合される他方の伝票IDは、いま集計計算の対象となっている伝票の伝票IDである。これらの伝票IDが一致する場合はステップS7に進む。一方、これらの伝票IDが一致しない場合はステップS10以降の処理に進む。
次にステップS7の詳細について説明する。ステップS7は、いま処理中の伝票の本体項目データを、ステップS5で得られた集計表名定義テーブル46aのレコードが示す集計表テーブル47xに対して集計計算するにあたり、そのテーブルにこれから行おうとする集計計算の対象となるレコードがすでに存在するか否かを確かめる処理である。このためにクエリQ6にパラメータを与えて実行し、その結果に基づいて判断するのであるが、クエリQ6の実行は後述の「クエリに与えるパラメータ値を得て実行する手法」による。この手法を実行するには4つのデータを事前に知っておく必要がある。それは、いま処理しているのは伝票データの何番目の本体項目であるかのデータ、いま処理しているS5のレコードセット、処理している伝票のデータ、クエリ名、の4つのデータである。
クエリ名を除く3つのデータは処理がステップS5を終了した時点にまで進んでくる過程で明らかになってきている。しかし、クエリ名については、クエリQ6が集計表データベース47に含まれる複数ある集計表テーブル47xのそれぞれに対して1つ存在するので、不明である。そこでクエリ名を明らかにするために、クエリQ6を生成したときにクエリ名もあわせて生成したが、そのクエリ名を生成した手法と同じ手法を用いて再度クエリ名を生成する。例えば、クエリQ6の生成について説明したときの例では、集計ID(これはいま処理中のS3のレコードの「集計ID」フィールドに記録されている)の値を文字列化し、「5−Q6」と例示した。
このようにして4つのデータが明らかになり、クエリQ6が「クエリに与えるパラメータ値を得て実行する手法」によって実行される。クエリQ6の実行の結果、レコードが得られれば、集計計算対象である集計表テーブル47xにはレコードがあるのでステップS8に進み、レコードが得られなければステップS9に進む。
次にステップS8の詳細について説明する。ステップS8は集計計算の対象の集計表テーブル47xにすでにレコードがある場合の処理を行う。この処理では、いま処理中のS3のレコードの「データ処理動作」フィールドの値にしたがって、次の3つの場合のいずれかの処理を行う。すなわち、既存のレコードに上書きをする場合、既存のレコードに加算する場合、既存のレコードから減算する場合、の3つである。
既存のレコードに上書きする場合はクエリQ10のパラメータに値を与えて実行する。クエリQ10は結果を返さないクエリであり、クエリQ10の実行が正常に終了すれば上書きの処理は成功したことになり、上書きのために必要な処理はすべて実行されたことになる。上書きのためにはクエリQ10にパラメータを与えて実行するのであるが、それは後述の「クエリに与えるパラメータ値を得て実行する手法」による。この手法を実行するには4つのデータを事前に知っておく必要がある。それは、いま処理しているのは伝票データの何番目の本体項目であるかのデータ、いま処理しているS5のレコードセット、処理している伝票のデータ、クエリ名、の4つのデータである。クエリ名を除く3つのデータは処理がステップS5を終了した時点にまで進んでくる過程で明らかになってきている。しかし、クエリ名については、クエリQ10が集計計算対象の集計表テーブル47xに対して有効な集計IDと処理IDの組み合わせ数だけあるので不明である。そこでクエリ名を明らかにするために、クエリQ10を生成したときにクエリ名もあわせて生成したが、そのクエリ名を生成した手法と同じ手法を用いて再度クエリ名を生成する。例えば、クエリQ10の生成について説明したときの例では、集計IDと処理ID(これはいま処理中のS3のレコードの「集計ID」フィールドと「処理ID」フィールドに記録されている)の値を文字列化し、「5−3−Q10」と例示した。
このようにして4つのデータが明らかになり、クエリQ10が「クエリに与えるパラメータ値を得て実行する手法」によって実行される。クエリQ10が正常に終了すれば上書き処理は終わったことになり、上書きを行う場合のステップS7の処理も終わり、ステップS4へ戻り未処理のS3のレコードの有無について判断する。
次に既存のレコードに対して加算または減算する場合について説明する。これらの場合はクエリQ9を使用するが、加算と減算におけるクエリQ9はその演算子が+か−かの違いしかないので両者を同じものとして扱い同時に説明する。
加算または減算の場合はクエリQ9のパラメータに値を与えて実行する。クエリQ9は結果を返さないクエリであり、クエリQ9の実行が正常に終了すれば加算または減算の処理は成功したことになり、加算または減算のために必要な処理はすべて実行されたことになる。加算または減算のためにはクエリQ9にパラメータを与えて実行するのであるが、それは後述の「クエリに与えるパラメータ値を得て実行する手法」による。この手法を実行するには4つのデータを事前に知っておく必要がある。それは、いま処理しているのは伝票データの何番目の本体項目であるかのデータ、いま処理しているS5のレコードセット、処理している伝票のデータ、クエリ名、の4つのデータである。クエリ名を除く3つのデータは処理がステップS5を終了した時点にまで進んでくる過程で明らかになってきている。しかし、クエリ名については、クエリQ9が集計計算対象の集計表テーブル47xに対して有効な集計IDと処理IDの組み合わせ数だけあるので不明である。そこでクエリ名を明らかにするために、クエリQ9を生成したときにクエリ名もあわせて生成したが、そのクエリ名を生成した手法と同じ手法を用いて再度クエリ名を生成する。例えば、クエリQ9の生成について説明したときの例では、集計IDと処理ID(これはいま処理中のS3のレコードの「集計ID」フィールドと「処理ID」フィールドに記録されている)の値を文字列化し、「5−3−Q9」と例示した。
このようにして4つのデータが明らかになり、クエリQ9が「クエリに与えるパラメータ値を得て実行する手法」によって実行される。クエリQ9が正常に終了すれば加算または減算の処理は終わったことになり、加算または減算を行う場合のステップS8の処理も終わり、ステップS4へ戻り未処理のS3のレコードの有無について判断する。
次にステップS9の詳細について説明する。ステップS9は集計計算の対象の集計表テーブル47xにレコードがない場合の処理を行う。この処理では、S3のレコードの「データ処理動作」フィールドの値にしたがって、次の3つの場合のいずれかの処理を行う。すなわち、レコードに上書きをする場合、レコードに加算する場合、レコードから減算する場合、の3つである。S5のレコードの「データ処理動作」フィールドの値に従った場合分けは3通りであるが、実際に行う処理は以下のようになる。
上書きする場合と加算する場合はそれぞれの処理対象となるレコードがないのであるから上書きも加算もできないので、新規にレコードを追加する処理を行う。減算する場合も処理対象となるレコードがないのであるから減算できないので、新規にレコードを追加した後で、S5のレコードの「集計対象」フィールドがTrueであればそのレコードの「集計フィールドID」フィールドが示す欄の値に−1をかけて0から減算した格好にする。つまりステップS9の処理ではいずれの場合もレコードの新規追加の処理を行う。
新規にレコードを追加する場合はクエリQ8のパラメータに値を与えて実行する。クエリQ8は結果を返さないクエリであり、クエリQ8の実行が正常に終了すれば新規追加の処理は成功したことになり、新規追加のために必要な処理はすべて実行されたことになる。新規追加のためにはクエリQ8にパラメータを与えて実行するのであるが、それは後述の「クエリに与えるパラメータ値を得て実行する手法」による。この手法を実行するには4つのデータを事前に知っておく必要がある。それは、いま処理しているのは伝票データの何番目の本体項目であるかのデータ、いま処理しているS5のレコードセット、処理している伝票のデータ、クエリ名、の4つのデータである。クエリ名を除く3つのデータは処理がステップS5を終了した時点にまで進んでくる過程で明らかになってきている。しかし、クエリ名については、クエリQ8が集計計算対象の集計表テーブル47xに対して有効な集計IDと処理IDの組み合わせ数だけあるので不明である。そこでクエリ名を明らかにするために、クエリQ8を生成したときにクエリ名もあわせて生成したが、そのクエリ名を生成した手法と同じ手法を用いて再度クエリ名を生成する。例えば、クエリQ8の生成について説明したときの例では、集計IDと処理ID(これはいま処理中のS3のレコードの「集計ID」フィールドと「処理ID」フィールドに記録されている)の値を文字列化し、「5−3−Q8」と例示した。
このようにして4つのデータが明らかになり、クエリQ8が「クエリに与えるパラメータ値を得て実行する手法」によって実行される。クエリQ8が正常に終了すれば新規追加処理は終わったことになり、ステップS9の処理も終わり、ステップS4へ戻り未処理のS3のレコードの有無について判断する。
次に、ステップS6から分岐したステップ10以降の説明に入る。まず、ステップS10の詳細について説明する。ステップ10では、現在処理中の本体項目のデータに関連伝票データが含まれているか否かを判断する。この判断は、伝票データに含まれている関連伝票データセクション57(図21参照)の数に基づいて行う。関連伝票データセクション57の数が0であれば関連伝票データは含まれていないと判断し、関連伝票データセクション57の数が1以上であれば関連伝票データが含まれていると判断する。関連伝票データが含まれていない場合は、何もせずにステップS4に戻り未処理のS3のレコードがあるか否か判断する。一方、関連伝票データが含まれている場合は、ステップ11以降の処理に進む。
次にステップ11の詳細について説明する。ステップS11では伝票IDの照合を行う。照合される伝票IDの一方は、ステップS5で特定された集計表テーブル47x(この特定は、集計表テーブル46aの該当するレコードを抽出することによって行われる)の親の伝票ID(これは集計表テーブル46aの「親の伝票」フィールドに記録されている)である。照合される他方の伝票IDは、いま集計計算の対象となっている本体項目が参照している伝票の伝票ID(これは関連伝票データセクション57(図21参照)の「参照伝票ID」を記録するエリア57eに記録されている)である。これらの伝票IDが一致する場合はステップS12以降の処理に進む。一方、これらの伝票IDが一致しない場合は何もせずにステップS4に戻り、未処理のS3のレコードがあるか否か判断する。
次に、ステップ12、ステップ13及びステップ14の詳細についての説明に入るわけだが、ステップ12はステップ7と、ステップ13はステップS8と、ステップ14はステップS9と、それぞれ全く同一の処理を行うものなので、ここでは説明を省略する。
次にステップS15の詳細について説明する。ステップS15に制御が移ってくるのは、ステップS4が構成していた2重の繰り返し処理がすべて終わった後である。ステップS15で行われるのは集計表テーブル47xに対する集計計算の結果、削除条件に合致するようになったレコードを削除する処理である。ステップS15では、S3のレコードセットに含まれるレコードの数を知り、その数が示す回数だけクエリQ7が実行されるように制御する。このときそれぞれの繰り返し処理において、個々のS3のレコードの「集計ID」フィールドの値が示す集計表テーブル47xがクエリQ7の処理対象となるようにし、各回の繰り返し処理で、同じS3のレコードから処理対象の集計表テーブル47xを得ないようにする。
クエリQ7にはパラメータがないので、クエリQ6、クエリQ8、クエリQ9、クエリQ10とは異なり、実行に際して後述の「クエリに与えるパラメータ値を得て実行する手法」にはよらない。クエリQ7を実行するにはまず、クエリQ7が集計表データベース47に含まれる複数ある集計表テーブル47xのそれぞれに対して1つ存在するので、クエリ名を明らかにすることで、どのクエリQ7であるかを特定する。クエリ名を明らかにするためには、クエリQ7を生成したときにクエリ名もあわせて生成したが、そのクエリ名を生成した手法と同じ手法を用いて再度クエリ名を生成する。例えば、クエリQ7の生成について説明したときの例では、集計ID(これはいま処理中のS3のレコードの「集計ID」フィールドに記録されている)の値を文字列化し、「5−Q7」と例示した。
このようにして、どのクエリQ7であるかが明らかになり、クエリQ7を実行できるようになった。具体的な実行方法は、使用するDBMSによって異なるのであるが、実行したいクエリ名と、そのクエリを実行するという旨をDBMSが定める手法に従ってDBMSに与えれば実行される。S3のレコード全てについて処理が終われば、必要な処理はすべて終わったことになる。
最後に、ENDについて説明する。ENDの段階で、集計表作成ソフトウェア36の終了にあたって必要な処理を行う。たとえば使用していたメモリを解放するといった作業であるが、具体的に必要な作業は開始時の開始手法によって異なる。
なお、ここで、ステップS11からステップS14までの処理が必要となる理由について補足説明を行う。ステップS12、ステップS13、ステップS14の三つの処理は、ステップS7、ステップS8、ステップS9の三つの処理とまったく同じ操作を行う処理であり、また、その操作の対象となるデータは、ステップS5までの過程で確定されている(つまり、ステップS6で処理のフローが分岐する前に確定されている)ので、両者の処理結果は同じものになる。しかし、特定の場合には、ステップS10とステップS11の判断に従い何らかの処理を行わないと、集計計算に不整合が生じエラーとなる。以下に、それはどのような場合であるかを具体的に伝票名を例示しながら説明するが、最初に不整合が生じない場合として出荷参照売上の例を示し、次に不整合が生じる場合として売上修正の例を示す。
例えば、売上伝票は、受注伝票を参照して計上される場合(受注参照売上)と、出荷伝票を参照して計上される場合(出荷計上売上)と、何も参照せずに計上される場合(新規売上)の3通りの計上方法が設定されているとする。新たに売上を計上する場合、それが出荷参照売上であったときはステップS3において、出荷参照売上に対応する処理ID(例では処理IDは3である)を用いて参照売上の場合はどの集計表に対してどのような集計計算をするかが取得されたレコードセットから明らかになる。この内容は図47のテーブルで示されているが、これは出荷参照売上を行う場合は、4つの集計表に対して集計計算を行うことを意味している。4つの集計表とは、すなわち、集計IDが1の顧客別売上高、集計IDが2の製品別売上高、集計IDが4の入金予定表、集計IDが5の出荷済売上高未計上残高、である。つまり、出荷参照売上の場合はステップS4の構成するループを4回まわることで、これら4つの集計表に対して集計計算をしている(なお、ステップS3はステップS2が構成するループの内側にあるので、伝票の本体項目が複数ありそれぞれの処理IDが異なる場合でも、本体項目の数だけステップS2の構成するループをまわることにより各項目の処理IDに従うことができる)。
ここで、図47のテーブルの1行目と4行目に示された集計表に対する集計計算について考察する(2行目と3行目は後述するステップS6における照合の結果が1行目と同じになるという点で1行目と同一の性質を有しているので説明を省略する)。1行目は、集計IDが1の顧客別売上高に対する集計計算を規定しているが、図37の集計表名テーブル46aによれば顧客別売上高の親の伝票IDは1である。伝票IDの1は図9に示す伝票IDテーブル42aで規定されているとおり売上伝票である。いま計上しているのは処理IDが3である出荷参照売上であるから、当然処理している伝票IDも売上伝票を示す1であり、ステップS6において照合される伝票ID同士は一致し、ステップS7以降の処理に進む。
一方、図47のテーブルの4行目では集計IDが5の出荷済売上高未計上に対する集計計算を規定しているが、図37の集計表名テーブル46aによれば出荷済売上高未計上の親の伝票は3であり、図9で示す伝票IDテーブル42aから出荷伝票であることを示している。いま計上しているのは出荷参照売上であるから、ステップS6において照合される伝票IDは、売上伝票を示す1と出荷伝票を示す3となり、一致しないので、ステップS10以降の処理に進むことになる。ステップS10では、関連伝票のデータの有無を判断することになるが、ここでの例では出荷参照売上を処理しているので当然関連伝票データがあり、ステップS11に進む。ステップS11では、その関連伝票データの伝票ID(これは出荷参照売上を計上しているので、出荷伝票をさす値である3となる)と、親の伝票の伝票ID(図37より3である)とを照合するが、その値は一致するので、ステップS12に進む。この4行目の例では、仮にステップS6の条件判断を行わなくても、ステップS7以降の処理で問題を起すことはないので、ステップS6の条件判断は不要に思われるが、次の場合は不都合を生じる。
売上修正の場合を考察すると、これまでの例に従えば、売上伝票の修正時には次のような集計計算をする必要がある。受注参照売上の場合には、顧客別売上高と製品別売上高を入金予定表に対しては修正前の数量を引き、次に修正後の数量を加え、納入予定表に対しては修正前の数量を加え、次に修正後の数量を引く。出荷参照売上の場合には、顧客別売上高と製品別売上高と入金予定表に対しては修正前の数量を引き、出荷済売上高未計上残高に対しては修正前の数量を加え、次に修正後の数量を引く。新規計上の場合は、顧客別売上高と製品別売上高と入金予定表に対しては修正前の数量を引き、次に修正後の数量を加える。これを図41の集計動作定義テーブル46eから抽出されたS3のレコードセットとして表現すると、図49のようになる。
つまり、この例では、売上修正時には図49のテーブルの各行に従って処理をするためにステップS4の構成するループを10回まわることになる。いま、出荷参照売上の修正が行われるとすると、図49の5行目と6行目の処理を除いて問題なく実行されるが、5行目と6行目の処理に関しては次のようになる。なお、5行目と6行目はここで説明する趣旨からは同一の性質を持っているので5行目についてのみ説明する。
5行目の処理は、集計ID3の集計表(これは納入予定である。図37参照)に対する処理であるが、この集計表の親の伝票の伝票IDは2(受注伝票を意味する。図9参照)である。いま処理しているのは売上伝票なので、ステップS6で照合される伝票IDの値は一致しない。ここで、仮にステップS6からステップS10以降に移行する処理がないものとすれば、処理はステップS7に進む。ステップS7では「クエリに与えるパラメータ値を得て実行する手法」に従ってクエリQ6を実行する。このとき、この手法ではS5のレコードセットを利用するが、このS5のレコードセットはクエリQ3を実行した結果得られたものである。このときクエリQ3にパラメータとして与えた値は集計ID(その値は3)と処理ID(その値は6)である。これは、納入予定表に対しては売上伝票修正時にどのように集計計算をすればよいかを規定したレコードセットであるので、ステップS6以降の処理では納入予定表に対する集計計算を行うことになる。
しかし、いま修正しているのは出荷参照売上の売上伝票であり、この伝票が最初に計上されたときは納入予定表に対する集計計算は行われなかった。したがって、この伝票の修正時に納入予定表に対する集計計算は必要ない。ところが前述のごとくS5のレコードセットは納入予定表に対する集計計算を促すものであり矛盾が生じている。このような矛盾を避けるために、ステップS6での分岐を設けているのである。
ステップS6の分岐で照合する伝票IDが一致しなかった結果として、ステップS10以降の処理をたどると以下のようになる。ステップS10では、関連伝票データの有無を判断するが、この場合は出荷参照売上であるから関連伝票データは存在し、その結果処理はステップS11に進む。ステップS11では、集計表の親の伝票の伝票ID(その値は2である)と関連伝票の伝票ID(その値は3である)を照合し、両者は一致しないのでその結果ステップS12以降の処理は実行されず、結果として何も集計計算は行われない。これは今までの説明で明らかになったように出荷参照売上の売上伝票の修正時に納入予定表に対する集計計算を回避したものであって、望ましい結果である。
以上で、フローチャートについての詳細説明を終了し、次に、前述の図46のフローチャートの詳細説明で後述するとした「クエリに与えるパラメータ値を得て実行する手法」について説明する
この手法では、クエリQ6、クエリQ8、クエリQ9、クエリQ10を使用するにあたり、それぞれのクエリのパラメータに与える値を得て、そのクエリを実行している。この手法を行うには、いま処理しているのは伝票データの何番目の本体項目であるかのデータ(このデータについてはステップS2の詳細説明の時に述べている)、いま処理しているS5のレコードセット、処理している伝票のデータ、クエリ名の4つのデータが必要になる。なお、処理している伝票のデータとは、ステップS5で処理対象データとして選ばれたパラメータPR1かPR4のことである。また、クエリ名は、図46のフローチャートに従い処理が進んでいく過程で、どのクエリを使用するかは明らかになってきているので、クエリ名の特定方法については図46のフローチャートのステップS7以降各部の詳細説明時に説明した。
この手法では、クエリQ6、クエリQ8、クエリQ9、クエリQ10を使用するにあたり、それぞれのクエリのパラメータに与える値を得て、そのクエリを実行している。この手法を行うには、いま処理しているのは伝票データの何番目の本体項目であるかのデータ(このデータについてはステップS2の詳細説明の時に述べている)、いま処理しているS5のレコードセット、処理している伝票のデータ、クエリ名の4つのデータが必要になる。なお、処理している伝票のデータとは、ステップS5で処理対象データとして選ばれたパラメータPR1かPR4のことである。また、クエリ名は、図46のフローチャートに従い処理が進んでいく過程で、どのクエリを使用するかは明らかになってきているので、クエリ名の特定方法については図46のフローチャートのステップS7以降各部の詳細説明時に説明した。
この手法を用いるにはまず、使用したいクエリ(クエリQ6、クエリQ8、クエリQ9、クエリQ10のいずれかである)を生成するときに使用したのと同じレコードをS5のレコードセットから抽出する(S5のレコードセットはクエリQ3の結果であり、上記の各クエリを生成するときに使用したのも同じクエリQ3の結果である。)。つまり、クエリQ6を使用したいときには「集計計算の有無」フィールドがTrueで「抽出条件」フィールドがTrueのものを抽出し、クエリQ8の場合は「集計計算の有無」フィールドがTrueで「パラメータ名称」フィールドに値が記録されているレコードを抽出し、クエリQ9の場合は「集計計算の有無」フィールドがTrueで「抽出条件」フィールドがTrueのものを抽出し、クエリQ10の場合は「集計計算の有無」フィールドがTrueで「抽出条件」フィールドがTrueのものを抽出する。それぞれのクエリの場合において抽出されたレコードは1つとは限らず、複数の場合もある。この抽出されたレコードをS5のレコードと呼ぶ。S5のレコードの全てについて順次「データタイプ」フィールドの値を調べ、それが1であれば、処理対象データの値をコードとして解釈し、対応するデータベースを検索し、パラメータに与える値を得る(この時の詳細については後述する。)。一方、「データタイプ」フィールドの値が2であれば、いま処理中の伝票データからパラメータに与える値を得る(この時の詳細についても後述する。)。
パラメータに与える値として得られたデータは、いま処理中のS5のレコードの「フィールドタイプ」フィールドの値に従って型を整える。つまり、「フィールドタイプ」フィールドの値が1であれば、数値とし(本発明では倍精度型である)、2であれば論理型とし、3であれば、これはコードを表すのであるから、長整数型とし、4であれば文字列とし、5であれば日付とし、6であれば時刻とし、7であれば文字列とする。この整型された値をクエリに与えるのであるが、どのパラメータにいま整型された値を与えるかは、「パラメータ名称」フィールドにその名前が記録されているパラメータであり、このパラメータは生成時にその型を決定するにあたって「SQL定義フィールドタイプ」フィールドの値に従った。この「SQL定義フィールドタイプ」フィールドと同一のレコードの「フィールドタイプ」フィールドの値は、定義により同じ意味を持つようになっているので、いま整型した値の型とクエリのパラメータの型は一致する。そして、各クエリの場合において示したS5のレコードのすべてについて上記の処理が終われば、クエリに必要なパラメータは過不足なく与えられたことになるので、そのクエリを実行することができる。具体的な実行方法は、使用するDBMSによって異なるのであるが、実行したいクエリ名と、そのクエリを実行するという旨をDBMSが定める手法に従ってDBMSに与えれば実行される。
次に前節において後述するとしたパラメータ値を得る具体的な手法について説明する。
まず、いま処理しているS5のレコードの「データタイプ」フィールドの値が2であった場合、つまり伝票データからパラメータに与える値を得るときの詳細について説明する。
この処理においては、まず、S5のレコードの「データの名称」フィールドの値を調べる。このフィールドには、「伝票基本」、「ヘッダー項目」、「ヘッダー未登録項目」、「本体項目」、「本体項目備考」、「関連伝票」、「属性」のいずれかの文字列が記録されている。この7つの文字列はそれぞれ図20と図21に示す52から58までのデータセクションを意味する。仮に、「データ名称」フィールドの値が「ヘッダー項目」であるとするならば、それは、パラメータに与える値は、いま処理している伝票データのヘッダー項目データセクション53から得る、ということを意味している。以下に、上記7者の場合にそれぞれどのようにパラメータに与える値を得るかを説明する(以下この説明については、図20、図21を参照)。
「伝票基本」であった場合:
いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、処理中の伝票の伝票基本データセクションの52aから52eのいずれかの値を得る。
いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、処理中の伝票の伝票基本データセクションの52aから52eのいずれかの値を得る。
「ヘッダー項目」であった場合:
ヘッダー項目データセクション53のデータのうち、「項目の実体データ」53dの値を得るのであるが、ヘッダー項目データセクション53の数は不定であるので、処理中の伝票のどのヘッダー項目データセクションから値を得るかは、「項目の順序」53cの値と、いま処理中のS5のレコードの「項目の順番」フィールドの値が一致するヘッダー項目データセクションからとする。
ヘッダー項目データセクション53のデータのうち、「項目の実体データ」53dの値を得るのであるが、ヘッダー項目データセクション53の数は不定であるので、処理中の伝票のどのヘッダー項目データセクションから値を得るかは、「項目の順序」53cの値と、いま処理中のS5のレコードの「項目の順番」フィールドの値が一致するヘッダー項目データセクションからとする。
「ヘッダー未登録項目」の場合:
ヘッダー未登録データセクション54のデータのうち「未登録項目に記録する内容」54cを得るのであるが、ヘッダー未登録データセクション54の数は不定であるので、処理中の伝票のどのヘッダー未登録データセクション54から値を得るかは、「項目の順序」54bの値と、いま処理中のS5のレコードの「項目の順番」フィールドの値が一致するヘッダー未登録データセクションからとする。
ヘッダー未登録データセクション54のデータのうち「未登録項目に記録する内容」54cを得るのであるが、ヘッダー未登録データセクション54の数は不定であるので、処理中の伝票のどのヘッダー未登録データセクション54から値を得るかは、「項目の順序」54bの値と、いま処理中のS5のレコードの「項目の順番」フィールドの値が一致するヘッダー未登録データセクションからとする。
「本体項目」の場合:
いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、本体項目データセクション55の「伝票番号」55aから「この項目の処理ID」55mのいずれかの値を得る。このとき、本体項目データセクション55の数は不定であるので、どの本体項目データセクションから値を得るかは、項目番号55bの値と、この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータの値が一致する本体項目データセクションからとする。
いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、本体項目データセクション55の「伝票番号」55aから「この項目の処理ID」55mのいずれかの値を得る。このとき、本体項目データセクション55の数は不定であるので、どの本体項目データセクションから値を得るかは、項目番号55bの値と、この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータの値が一致する本体項目データセクションからとする。
「本体項目の備考」の場合
この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータが示す本体項目データセクションに含まれる本体項目備考データセクション56から、いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、「伝票番号」56aから「シリアル番号」56hのいずれかの値を得る。このとき、本体項目備考データセクション56の数は不定であるので、どの本体項目備考データセクション56から値を得るかは、備考コード56dの値と、処理中のS5のレコードの「項目の順番」フィールドの値が一致する本体項目備考データセクション56からとする。
この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータが示す本体項目データセクションに含まれる本体項目備考データセクション56から、いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、「伝票番号」56aから「シリアル番号」56hのいずれかの値を得る。このとき、本体項目備考データセクション56の数は不定であるので、どの本体項目備考データセクション56から値を得るかは、備考コード56dの値と、処理中のS5のレコードの「項目の順番」フィールドの値が一致する本体項目備考データセクション56からとする。
「関連伝票」の場合:
この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータが示す本体項目データセクションに含まれる関連伝票データセクション57から、いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、「伝票番号」57aから「参照シリアル番号」57hのいずれかの値を得る。このとき、関連伝票データセクション57の数は不定であるので、どの関連伝票データセクション57から値を得るかは、関連コード57dの値と、処理中のS5のレコードの「項目の順番」フィールドの値が一致する関連伝票データセクション57からとする。
この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータが示す本体項目データセクションに含まれる関連伝票データセクション57から、いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、「伝票番号」57aから「参照シリアル番号」57hのいずれかの値を得る。このとき、関連伝票データセクション57の数は不定であるので、どの関連伝票データセクション57から値を得るかは、関連コード57dの値と、処理中のS5のレコードの「項目の順番」フィールドの値が一致する関連伝票データセクション57からとする。
「属性」の場合
この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータが示す本体項目データセクションに含まれる属性データセクション58から、いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、「伝票番号」58aから「属性の値」58gのいずれかの値を得る。このとき、属性データセクション58の数は不定であるので、どの属性データセクション58から値を得るかは、属性順序58eの値と、処理中のS5のレコードの「項目の順番」フィールドの値が一致する属性データセクション58からとする。
この手法を開始する前に必要とされた4つのデータのうち、何番目の本体項目を処理しているかを表すデータが示す本体項目データセクションに含まれる属性データセクション58から、いま処理しているS5のレコードの「抽出データ」フィールドの値に従い、「伝票番号」58aから「属性の値」58gのいずれかの値を得る。このとき、属性データセクション58の数は不定であるので、どの属性データセクション58から値を得るかは、属性順序58eの値と、処理中のS5のレコードの「項目の順番」フィールドの値が一致する属性データセクション58からとする。
以上で、いま処理しているS5のレコードの「データタイプ」フィールドの値が2であった時の説明を終える。
次に、いま処理しているS5のレコードの「データタイプ」フィールドの値が1であった場合、つまり、伝票のデータをコードと解釈して他のデータベースからパラメータに与える値を得るときの詳細について説明する。
この処理においては、まず前述のS5のレコードの「データタイプ」フィールドの値が2であった場合の処理を行う。この処理で得られた値が目的とするテーブル(このテーブルの特定方法は後述する)のレコードを特定する為のコードであると解釈される。
次に、このコードを使い、いま処理しているS5のレコードの「検索対象ファイル名」フィールドと、「テーブル名」フィールドの値を使い、検索対象となるテーブルを特定し、必要に応じて「インデックス名」フィールドに示されたインデックスを使い検索する。検索の結果抽出されたレコードのフィールドのなかから、S5のレコードの「フィールド名」フィールドで指定されたフィールドの値を得る。この値をパラメータに対する値としてクエリに与える。
以上で、いま処理しているS5のレコードの「データタイプ」フィールドの値が1であった時の説明を終えるとともに、「クエリに与えるパラメータ値を得て実行する手法」についての説明を終える。
以上で、集計表作成ソフトウェア36の説明を終える。なお、最後に、発明を実施するための最良の形態の記載全体を通してまだ説明していなかった、クライアントコンピュータ2に備える集計表表示用ソフトウェア22(図1参照)について述べる。実際に本願発明による伝票管理システムを使用するときには、この集計表表示用ソフトウェア22はなくてはならないものである。一方、本願発明の特徴は、伝票データを記録し管理するためのシステム及び方法に特徴があり、集計表のデータはここまでに説明してきた手法でそれぞれ指定された構造のデータベースに記録されているが、これらの集計表を表示するのは、「データベースに保存されたデータを表示する」という一般的な問題であり、また、具体的な手法はまったく任意であるので、本願発明を実施する時点で利用可能な任意の表示用ソフトウェアを用いればよいものである。従って、集計表表示用ソフトウェア22の内容については特に説明を行わない。
2 クライアントコンピュータ
3 データベースサーバ
4 伝票管理データベース
5 伝票データ
6 表示データ
7 ネットワーク
21 伝票データ入力用インターフェイス提供ソフトウェア
22 集計表表示用ソフトウェア
23 基本設定管理ソフトウェア
31 新規計上用ソフトウェア
32 修正計上用ソフトウェア
33 伝票1枚検索ソフトウェア
34 伝票1項目検索ソフトウェア
36 集計表作成ソフトウェア
37 基本設定管理ソフトウェア
38 伝票印刷用ソフトウェア
39 請求書発行ソフトウェア
3 データベースサーバ
4 伝票管理データベース
5 伝票データ
6 表示データ
7 ネットワーク
21 伝票データ入力用インターフェイス提供ソフトウェア
22 集計表表示用ソフトウェア
23 基本設定管理ソフトウェア
31 新規計上用ソフトウェア
32 修正計上用ソフトウェア
33 伝票1枚検索ソフトウェア
34 伝票1項目検索ソフトウェア
36 集計表作成ソフトウェア
37 基本設定管理ソフトウェア
38 伝票印刷用ソフトウェア
39 請求書発行ソフトウェア
Claims (9)
- クライアント装置と、クライアント装置とネットワークで接続されたデータベースサーバ装置と、データベースサーバ装置と接続された伝票管理データベースと、で構成された伝票管理システムであって、
クライアント装置は、必要に応じてデータベースサーバ装置を介して伝票管理データベースに格納された伝票データの提供を受けながら伝票データの入力・修正・計上・検索のためのインターフェイスを提供する機能と、入力された伝票データを所定の変換方式に従って変換してデータベースサーバ装置に送信する機能と、を有する、伝票入力用インターフェイス提供手段を備え、
データベースサーバ装置は、クライアント装置から受信した新規計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの新規計上手段と、クライアント装置から受信した修正計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの修正計上手段と、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データを一件毎に検索しクライアント装置に送信する伝票一枚検索手段と、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データの項目を一項目毎に検索してクライアント装置に送信する伝票一項目検索手段と、を備え、
伝票管理データベースは、個々の伝票に含まれるデータ中、計上されるデータを修飾するデータであるヘッダーの項目の種類と数を定義するデータを格納する伝票定義データベースと、伝票の種類と伝票間のデータの依存関係を定義するデータを格納する伝票関係定義データベースと、ヘッダーの項目で使用されるデータを格納するヘッダー用データ定義データベースと、個々の伝票に含まれるデータ中、計上の対象となる品目及びその属性を含む本体項目のデータを定義する本体項目用データ定義データベースと、クライアント装置から計上された伝票のデータを所定の方式に従って格納する伝票データベースと、を備えたことによって、
クライアント装置からデータベースサーバ装置を介して計上され伝票管理データベースで管理する伝票の種類と伝票に含まれる項目と伝票間のデータの依存関係の設定とを、自由に設定可能にしたことを特徴とする、伝票管理システム。 - 前記伝票定義データベースは、伝票のヘッダー項目を入力するための機能を提供する入力コントロールの種類を識別するコントロールIDとそのデータの型や入力方式を定義する入力コントロール定義テーブルと、伝票の種類別にどの入力コントロールを使用してヘッダー項目を入力するかをコントロールIDと伝票IDに関連づけて定義する伝票別入力コントロール定義テーブルと、を含み、
前記伝票関係定義データベースは、伝票の種類を定義する伝票IDテーブルと、伝票管理データベースに対する伝票データの計上の種類を定義する計上IDテーブルと、伝票データの処理の内容を伝票の種類と計上の種類と参照伝票の種類により一意に示す処理IDを計上IDと伝票IDと参照する伝票IDに関連づけて定義する処理IDテーブルと、各処理IDの処理において伝票の各ヘッダー項目の値を入力するための入力コントロールの参照関係を参照伝票IDと被参照伝票IDとデータを得るための参照伝票の入力コントロールと被参照伝票の入力コントロールに関連づけて定義する伝票間参照関係テーブルと、を含み、
前記ヘッダー用データ定義データベースは、ヘッダー項目に顧客データを入力するために参照する顧客コード・名称・住所を含む顧客テーブルの内容を定義する顧客テーブルと、ヘッダー項目に仕入先データを入力するために参照する仕入先コード・名称・住所を含む仕入先テーブルの内容を定義する仕入先テーブルと、ヘッダー項目に配送業者データを入力するために参照する配送業者コード・名称・住所を含む配送業者テーブルの内容を定義する配送業者テーブルと、ヘッダー項目に自社の担当者データを入力するために参照する社員コード・氏名・部署名を含む社員テーブルの内容を定義する社員テーブルと、ヘッダー項目に入力するデータが他のデータベースを参照して入力する場合にそのデータベースのテーブルの内容が未確定であるときその旨記録する未登録項目テーブルと、ヘッダー項目に入力するデータが論理値でありその値が「Yes」又は「No」しかないときに選択肢の内容を定義するYesNoテーブルと、ヘッダー項目に入力するデータが他のデータベースを参照して入力する場合にそのデータベースのテーブルの内容を定義する下位区分テーブルと、を含み
前記本体項目用データ定義データベースは、計上の対象となる品目を識別する品目コードを定義する品目コードテーブルと、品目についての属性を入力するための属性コード・入力するデータのタイプ・単位を含む品目属性の内容を定義する品目属性定義テーブルと、どの品目にどの属性が対応するかを、品目コードと属性コードに関連づけて定義する品目コード品目属性対応テーブルと、本体項目に用いられる単位コードとその内容を定義する単位テーブルと、品目の上位区分の品目区分コードとその内容を定義する品目上位区分テーブルと、品目属性として入力するデータが論理値でありその値が「Yes」又は「No」しかないときに選択肢の内容を定義するYesNoテーブルと、品目について入力するデータが他のデータベースを参照して入力する場合にそのデータベースのテーブルの内容を定義する下位区分テーブルと、どの区分にどの品目が含まれるかを、品目区分コードと品目コードに関連づけて定義する区分品目対応テーブルと、を含む請求項2に記載の伝票管理システム。 - 前記クライアント装置の伝票入力用インターフェイス提供手段は、入力されたデータを所定の変換方式に従って変換することによって、データベースサーバ装置に対して処理の内容を指示するデータを伝票番号と処理コードと伝票IDと処理IDと項目番号に関連づけて記録する問合せ用データセクションと、計上する伝票を特定するための基本的なデータを伝票IDと伝票番号とに関連づけて記録する伝票基本データセクションと、ヘッダー項目のデータを伝票番号とコントロールIDに関連づけて項目毎に記録するヘッダー項目データセクションと、ヘッダー用データがデータベース化されていない未登録のヘッダー項目のデータを伝票番号に関連づけて直接項目毎に記録するヘッダー未登録項目データセクションと、本体項目のデータを伝票番号に関連づけて項目毎に記録する本体項目データセクションと、1枚の伝票に含まれる本体項目を同時に修飾するヘッダーのデータを伝票番号と項目番号に関連づけて記録する本体項目備考データセクションと、本体項目の項目毎にデータを得た参照伝票と参照項目のデータを伝票番号と参照伝票IDと参照伝票番号に関連づけて記録する関連伝票データセクションと、本体項目の項目毎に品目の属性データを、伝票番号に関連づけて記録する属性データセクションと、を含む各データセクションに振り分けて記録した伝票データとしてデータベースサーバ装置に送信し、
前記クライアント装置から伝票データを受信した前記データベースサーバ装置は、伝票データの処理の内容を、問合せデータセクションに記録された処理IDと処理コードの値から判断し、
伝票のデータを計上する処理であれば、伝票データの新規計上手段または伝票データの修正計上手段により伝票基本データセクション・ヘッダー項目データセクション・ヘッダー未登録項目データセクション・本体項目データセクション・本体項目備考データセクション・関連伝票データセクション及び属性データセクションの各データセクションに記録されたデータを、伝票基本データセクションに記録されたデータを格納する伝票基本データテーブルと、ヘッダー項目データセクションに記録されたデータを格納するヘッダー項目データテーブルと、ヘッダー未登録データセクションに記録されたデータを格納するヘッダー未登録項目データテーブルと、本体項目データセクションに記録されたデータを格納する本体項目データテーブルと、本体項目備考データセクションに記録されたデータを格納する本体項目備考データテーブルと、関連伝票データセクションに記録されたデータを格納する関連伝票データテーブルと、属性データセクションに記録されたデータを格納する属性データブルと、で構成される伝票データベースの各テーブルに振り分けて格納し、
伝票1枚または伝票1項目の検索を必要とする処理であれば、伝票一枚検索手段または伝票一項目検索手段により、伝票データベースにアクセスして要求されたデータをクライアント装置に送信する、請求項1に記載の伝票管理システム。 - 前記伝票管理データベースは、各集計表を識別する集計IDとその名称を含む集計表の基本的なデータを定義する集計表名テーブルと、集計表に含める個々のフィールドを識別する集計フィールドIDとその内容を、集計表の基礎となる伝票IDに関連づけて定義する集計要素テーブルと、集計計算を実行するときに各集計表の各フィールドに対してどのような計算を実行するかを識別する集計計算要素IDとその内容を、処理IDと集計IDと集計フィールドIDに関連づけて定義する集計計算要素テーブルと、集計計算の対象となるデータの出所がデータベースである場合にそのデータベースを、集計計算要素IDに関連づけて定義する検索対象定義テーブルと、各集計表に対する処理IDの集計計算のデータ処理の順番・対象・計算の内容を、集計IDと処理IDに関連づけて定義する集計動作定義テーブルと、各集計表を表示させるときの各フィールドの表示の順番・表示の有無・レコードの並び換えを含む表示特性を、集計IDと集計フィールドIDとに関連づけて定義する集計表示要素テーブルと、を含む集計表定義データベースを、さらに備え、
集計を行う伝票の種類、集計表の種類、各集計表に含める項目、集計する伝票の項目と集計表の項目の対応関係、及び集計計算を実行するときにどの集計表に対して何を加算し減算するかを自由に設定できるようにした、請求項3に記載の伝票管理システム。 - 伝票管理データベースに備えられた集計表定義データベースの各テーブルに設定した値に基づいて、各集計ID毎の集計データを記録するためのデータを抽出して作成した各集計表テーブルを備えた集計表データベースをさらに有する、請求項4に記載の伝票管理システム。
- 前記集計表定義データベースは、
前記集計動作定義テーブルから、「処理ID」フィールドの値が指定された値と合致するレコードを抽出して「集計ID」フィールドの値に従って昇順に並び換え、同一の「集計ID」フィールドの値を有するレコードがある場合はさらに規定されたデータ処理の順番に並び換えることによって一連のレコードを取得する第1のレコード抽出処理手段と、
前記集計動作定義テーブルから、「処理ID」フィールドの値及び「集計ID」フィールドの値がそれぞれ指定された値と一致するレコードを抽出し、規定されたデータ処理の順番に並び換えることによって一連のレコードを取得する第2のレコード抽出処理手段と、
前記集計計算要素テーブルと前記集計要素テーブルとをそれぞれの「集計フィールドID」フィールドの値を基準に内部結合し、当該内部結合の結果得られたテーブルの全てのレコードが含まれるように、当該内部結合の結果得られたテーブルと前記検索対象定義テーブルとをそれぞれの「集計計算要素ID」フィールドの値を基準として外部結合し、当該外部結合によって作成されたレコードによって構成されるテーブルから、前記集計要素テーブルに由来する「集計ID」フィールドの値が指定された値と一致し、さらに前記集計計算要素テーブルに由来する「処理ID」フィールドの値が指定された値と一致する一連のレコードを取得する第3のレコード抽出処理手段と、
前記集計表示要素テーブルと前記集計計算要素テーブルとをそれぞれの「集計フィールドID」フィールドの値を基準に内部結合し、当該内部結合の結果得られるテーブルから、前記集計表示要素テーブルに由来する「集計ID」フィールドの値が指定された値に一致するレコードを抽出し、前記集計表示要素テーブルに規定された順番に従って並び換えることによって一連のレコードを取得する第4のレコード抽出処理手段と、
をさらに有し、第1のレコード抽出処理手段によって伝票データに含まれる処理ID毎の集計動作を抽出し、第2のレコード抽出処理手段によって伝票データに含まれる処理IDの集計動作中指定した集計IDで特定される集計表に対する動作のみを抽出し、第3のレコード抽出処理手段によって指定した処理IDを有する伝票計上処理においてその伝票データを集計IDで特定される集計表に集計計算するときどのように計算するかを示すレコードセットを取得し、第4のレコード抽出処理手段によって指定した集計IDで特定される集計表を表示するときにその集計表に含まれる各フィールドがどのような表示特性をもっているかを示すレコードセットを取得する、請求項5に記載の伝票管理システム。 - 前記集計表定義データベースにおいて、
前記集計要素テーブルは、少なくとも、すべての集計表についてそれぞれの集計表の各フィールドの識別コードを記録する「集計フィールドID」フィールドと、各集計表を識別する集計IDを記録する「集計ID」フィールドと、集計フィールドIDで識別される集計表の各フィールドの名称を記録する「フィールド名称」フィールドと、各フィールドのデータ型を記録する「フィールドタイプ」フィールドと、集計表に集計計算をするときに集計表の集計対象のレコードを選ぶ際の抽出条件としてその集計フィールドIDのフィールドを加えるか否かをTRUE又はFALSEを表す値で記録する「抽出条件」フィールドと、その集計フィールドIDのフィールドを抽出条件とするときのパラメータ名を記録する「パラメータ名称」フィールドと、集計計算のときその集計フィールドIDのフィールドに対して伝票データを上書きせずに加減算するか否かをTRUE又はFALSEを表す値で記録する「集計対象」フィールドと、集計表からレコードを削除するか否かをTRUE又はFALSEを表す値で記録する「レコード削除の真偽」フィールドと、集計表を表示するときにその集計フィールドIDのフィールドを表示すべきレコードとして抽出するか否かをTRUE又はFALSEを表す値で記録する「表示用抽出条件」フィールドと、を有し、
前記集計計算要素テーブルは、少なくとも、「処理ID」フィールドと、「集計ID」フィールドと、同一の行で定義されている「処理ID」フィールドの値で示す処理が同一の行で定義されている「集計ID」フィールドの値で示す集計表に対して伝票データ中のどのデータを集計するかを一意に識別するコードを記録する「集計計算要素ID」フィールドと、「集計フィールドID」フィールドと、その集計フィールドIDで特定されるフィールドに対して伝票のデータを集計するか否かをTRUE又はFALSEを表す値で記録する「集計計算の有無」フィールドと、を有し、
前記集計表示要素テーブルは、少なくとも、「集計ID」フィールドと、「集計フィールドID」フィールドと、集計表に含まれる各レコードを並べるときにそのレコードが指し示すフィールドの値により並び換えるか否かをTRUE又はFALSEを表す値で記録する「DoSort」フィールドと、並び換えを行うときに依存するフィールドが複数ある場合の優先順位を規定する「SortPriority」フィールドと、並び換えが行われるときに依存するフィールドが複数ある場合の優先順位を昇順か降順かを表す値で記録する「ASCorDESC」フィールドと、を有し、
前記データベースサーバは、
操作の対象とする集計表を表す集計IDを前記第4のレコード抽出処理手段に与えて取得した一連のレコード(以下「第4の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルから集計表を表示するために必要なデータを抽出するためのデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第4の取得レコードの「フィールド名称」フィールドに記録されている値が示すすべてのフィールドのデータを当該集計表テーブルから抽出するにあたり、第4の取得レコードの「表示用抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値とを一致させ、当該条件に合致するレコードを当該集計表テーブルから抽出して、第4の取得レコードの「DoSort」フィールドの値がTRUEのレコードの「SortPriority」フィールドで示される並び換えの条件の優先順位と「ASCorDESC」フィールドで示される昇順あるいは降順の区別に従って並び換えるSQL文を表す文字列を生成し、第1のデータ操作手段として前記集計表データベースに保存するための、第1のSQL文生成手段と、
集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを前記第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルから集計計算の対象となるレコードがあるか否かを確認するためのデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値とが一致する当該集計表テーブルのレコードの任意のフィールドを抽出するSQL文を表す文字列を生成し、第2のデータ操作手段として前記集計表データベースに保存するための、第2のSQL文生成手段と、
集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルからレコードを削除するデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「レコード削除の真偽」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値のいずれかが0または0以下となる当該集計表テーブルのレコードを削除するSQL文を表す文字列を生成し、第3のデータ操作手段とし前記集計表データベースに保存するための、第3のSQL文生成手段と、
集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルに新たにレコードを追加するデータ操作手段を前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「パラメータ名称」フィールドに値が記録されているレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに対してそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値を新たに記録すべき値として当該集計表テーブルにレコードを追加するSQL文を表す文字列を生成し、第4のデータ操作手段として前記集計表データベースに保存するための、第4のSQL文生成手段と、
集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルのレコードに計上した伝票のデータを加算又は減算するデータ操作手段を前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値が一致する当該集計表テーブルのレコードに対して加算または減算を行うために、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「集計対象」フィールドの値がTRUEである条件を満たすレコードの「フィールド名称」フィールドに記録されている値によって示されるすべての当該集計表テーブルのフィールドに対してそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値を加算または減算しさらに前記の条件を満たさず第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「集計対象」フィールドの値がFALSEであり「抽出条件」フィールドがTRUEである条件をも満たさないレコードの「フィールド名称」フィールドに記録されている値によって示されるすべての当該集計表テーブルのフィールドに対してそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値を新たな値として与えるSQL文を表す文字列を生成し、第5のデータ操作手段として前記集計表データベースに保存するための、第5のSQL文生成手段と、
集計計算の対象とする集計表を表す集計IDと集計表に対する集計計算の契機となった処理を表す処理IDを第3のレコード抽出処理手段に与えて得られた一連のレコード(以下「第3の取得レコード」という)に基づき、当該集計IDが表す集計表のデータを保持する集計表テーブルのレコードに計上した伝票のデータを上書きするデータ操作手段を生成して前記集計表データベースに保存するためのSQL文生成手段であって、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「抽出条件」フィールドの値がTRUEであるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべてのフィールドに記録された値とそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値とが一致するレコードに対して上書きを行うために、第3の取得レコードの中で「集計計算の有無」フィールドの値がTRUEであり「パラメータ名称」フィールドに値のあるレコードの「フィールド名称」フィールドに記録されている値によって示されるすべての当該集計表テーブルのフィールドの保持している値をそれぞれ「パラメータ名称」フィールドに記載されている値をその名称とするパラメータに与えられた値によって置き換えるSQL文を表す文字列を生成し第6のデータ操作手段として前記集計表データベースに保存するための、第6のSQL文生成手段と、をさらに備えた、請求項6に記載の伝票管理システム。 - 前記集計表データベースに、前記第1のSQL文生成手段によって生成された第1のデータ操作手段と、前記第2のSQL文生成手段によって生成された第2のデータ操作手段と、前記第3のSQL文生成手段によって生成された第3のデータ操作手段と、前記第4のSQL文生成手段によって生成された第4のデータ操作手段と、前記第5のSQL文生成手段によって生成された第5のデータ操作手段と、前記第6のSQL文生成手段によって生成された第6のデータ操作手段と、をさらに有した請求項7に記載の伝票管理システムにおいて、
パラメータとして、伝票データと、当該伝票データが新規計上又は参照計上と修正計上とのいずれであるかを示す識別子と、集計計算の対象となる集計表を表す集計IDの値と、当該伝票データが修正計上に係る場合に前記伝票管理データベースから抽出された修正前の伝票データと、を受け取るステップ1と、
ステップ1で受け取った伝票データの本体項目について、ステップ3以降の処理が全ての本体項目について終了しているか否か判断し、終了していなければステップ3の処理に進ませ、終了していれば終了処理に進ませるステップ2と、
ステップ2でステップ3以降が未処理であると判断した本体項目の処理IDを、修正計上に係るものであれば伝票データの問合せデータセクションから取得し新規計上又は参照計上にかかるものであれば伝票データの本体項目データセクションから取得して、その処理IDを前記集計表を表す集計IDの値によって前記第1のレコード抽出手段又は前記第2のレコード抽出手段に与えて第1のレコードセットを取得するステップ3と、
ステップ3で取得した第1のレコードセットのレコードの数を知り、レコードの数の回数だけ以降の処理を繰り返すためすべてのレコードが以降の処理を終了しているか否か判断し、ステップ5以降の処理が未処理であれば処理を行うステップ5に進ませ、ステップ5以降の処理が終了していれば、レコード削除の有無を判断するステップ15に進ませるステップ4と、
取得した第1のレコードセットに含まれる集計IDから集計計算の対象となる集計表テーブルを特定し、取得した第1のレコードセットに含まれる集計IDと処理IDを前記第3のレコード抽出手段に与えて第2のレコードセットを取得し、取得した第2のレコードセットに含まれるレコードの「処理対象」フィールドの値に従って処理対象の伝票データが計上された伝票データであるのか修正前の伝票データであるのかを選択するステップ5と、
ステップ5で特定された集計表テーブルの親の伝票IDと集計計算の対象となる伝票データの伝票IDとが一致するか否か判断するステップ6と、
ステップ6で親の伝票IDと集計計算の対象となる伝票データの伝票IDとが一致すると判断した場合に、第2のデータ操作手段にパラメータを与えて集計計算対象の集計表テーブルにレコードがあるかないか判断するステップ7と、
ステップ7で集計計算対象の集計表テーブルにレコードがあると判断した場合に、第1のレコードセットの「データ処理動作」フィールドの記録された値に従って、前記第5のデータ操作手段または前記第6のデータ操作手段にパラメータを与えて、既存のレコードの上書き・加算・減算のいずれかを実行するステップ8と、
ステップ7で集計計算対象の集計表テーブルにレコードがないと判断した場合に、第1のレコードセットの「データ処理動作」フィールドに記録された値に従って、前記第4のデータ操作手段にパラメータを与えて、レコードの新規追加を実行するステップ9と、
ステップ6で親の伝票IDと集計計算の対象となる伝票データの伝票IDとが一致しないと判断した場合に、現在処理中の本体項目のデータに関連伝票データが含まれているか否か判断し、含まれていなければステップ4に戻らせ、含まれていればステップ11に進ませるステップ10と、
ステップ10で現在処理中の本体項目のデータに関連伝票データが含まれていると判断した場合に、ステップ5で特定された集計表テーブルの親の伝票IDと処理中の本体項目が参照している伝票の伝票IDとが一致するか否かを判断し、一致しなければステップ4に戻らせ、一致していればステップ12に進ませるステップ11と、
ステップ10で、ステップ5で特定された集計表テーブルの親の伝票IDと処理中の本体項目が参照している伝票の伝票IDとが一致すると判断した場合に、第2のデータ操作手段にパラメータを与えて集計計算対象の集計表テーブルにレコードがあるかないか判断するステップ12と、
ステップ12で集計計算対象の集計表テーブルにレコードがあると判断した場合に、第1のレコードセットの「データ処理動作」フィールドの記録された値に従って、前記第5のデータ操作手段または前記第6のデータ操作手段にパラメータを与えて、既存のレコードの上書き・加算・減算のいずれかを実行するステップ13と、
ステップ12で集計計算対象の集計表テーブルにレコードがないと判断した場合に、第1のレコードセットの「データ処理動作」フィールドに記録された値に従って、前記第4のデータ操作手段にパラメータを与えて、レコードの新規追加を実行するステップ14と、
ステップ4ですべてのレコードが以降の処理を終了していると判断した場合に、第1のレコードセットに含まれるレコードの数からその回数だけ第3のデータ操作手段により、集計表テーブルのレコード中削除条件に合致したものを削除するステップ15と、
を有する、伝票管理システムにおける集計表の集計計算方法。 - クライアント装置と、クライアント装置とネットワークで接続されたデータベースサーバ装置と、データベースサーバ装置と接続された伝票管理データベースと、で構成された伝票管理システムにおいて、
必要に応じてデータベースサーバ装置を介して伝票管理データベースに格納された伝票データの提供を受けながら伝票データの入力・修正・計上・検索のためのインターフェイスを提供するステップと、入力された伝票データを所定の変換方式に従って変換してデータベースサーバ装置に送信するステップとを、クライアント装置に実行させ、
クライアント装置から受信した新規計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの新規計上ステップと、クライアント装置から受信した修正計上する伝票データを所定の格納方式に従って伝票管理データベースに格納する伝票データの修正計上ステップと、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データを一件毎に検索しクライアント装置に送信する伝票一枚検索ステップと、クライアント装置からの指示を受けて伝票管理データベースにアクセスして伝票データの項目を一項目毎に検索してクライアント装置に送信する伝票一項目検索ステップとを、データベースサーバ装置に実行させ、
個々の伝票に含まれるデータ中、計上されるデータを修飾するデータであるヘッダーの項目の種類と数を定義するデータを格納する伝票定義データベースと、伝票の種類と伝票間のデータの依存関係を定義するデータを格納する伝票関係定義データベースと、ヘッダーの項目で使用されるデータを格納するヘッダー用データ定義データベースと、個々の伝票に含まれるデータ中、計上の対象となる品目及びその属性を含む本体項目のデータを定義する本体項目用データ定義データベースと、クライアント装置から計上された伝票のデータを所定の方式に従って格納する伝票データベースと、で伝票を管理するデータベースとして伝票管理データベースを機能させるステップを実行させる、伝票管理用ソフトウェア。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004145647A JP2005327136A (ja) | 2004-05-14 | 2004-05-14 | 伝票管理システム及び伝票管理用ソフトウェア |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004145647A JP2005327136A (ja) | 2004-05-14 | 2004-05-14 | 伝票管理システム及び伝票管理用ソフトウェア |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005327136A true JP2005327136A (ja) | 2005-11-24 |
Family
ID=35473446
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004145647A Pending JP2005327136A (ja) | 2004-05-14 | 2004-05-14 | 伝票管理システム及び伝票管理用ソフトウェア |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005327136A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007304809A (ja) * | 2006-05-10 | 2007-11-22 | Fuji Xerox Co Ltd | 表示装置、画像処理装置、表示方法、及びプログラム |
JP2008129844A (ja) * | 2006-11-21 | 2008-06-05 | Nec Informatec Systems Ltd | ストアドプロシージャジェネレート装置、方法、プログラム、及びシステム |
JP2008165525A (ja) * | 2006-12-28 | 2008-07-17 | Sap Ag | コスト管理システム |
US8142866B2 (en) | 2007-08-29 | 2012-03-27 | Denso Corporation | Display panel, method for producing the same and composition of ink used by the method for producing the same |
JP2017102957A (ja) * | 2017-02-01 | 2017-06-08 | 富士通株式会社 | 集計装置および集計プログラム |
-
2004
- 2004-05-14 JP JP2004145647A patent/JP2005327136A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007304809A (ja) * | 2006-05-10 | 2007-11-22 | Fuji Xerox Co Ltd | 表示装置、画像処理装置、表示方法、及びプログラム |
JP2008129844A (ja) * | 2006-11-21 | 2008-06-05 | Nec Informatec Systems Ltd | ストアドプロシージャジェネレート装置、方法、プログラム、及びシステム |
JP2008165525A (ja) * | 2006-12-28 | 2008-07-17 | Sap Ag | コスト管理システム |
JP4695065B2 (ja) * | 2006-12-28 | 2011-06-08 | エスアーペー アーゲー | コスト管理システム |
US8142866B2 (en) | 2007-08-29 | 2012-03-27 | Denso Corporation | Display panel, method for producing the same and composition of ink used by the method for producing the same |
JP2017102957A (ja) * | 2017-02-01 | 2017-06-08 | 富士通株式会社 | 集計装置および集計プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210209157A1 (en) | System and method for non-programmers to dynamically manage multiple sets of xml document data | |
US6742054B1 (en) | Method of executing a data transformation specification | |
US5455945A (en) | System and method for dynamically displaying entering, and updating data from a database | |
US7401094B1 (en) | Automated generation of dynamic data entry user interface for relational database management systems | |
JP4594306B2 (ja) | 自己記述型ビジネスオブジェクト | |
JP5324797B2 (ja) | データ管理システム | |
US20050091276A1 (en) | Dynamic meta data | |
JP2001306373A (ja) | データベース設計システム、データベース設計方法、記録媒体、及び表示方法 | |
KR20010072019A (ko) | 데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스프로덕트 레벨을 선택하는 방법 및 장치 | |
MXPA01008947A (es) | Especificacion para convertidor de codigo abap (programacion avanzada de aplicacion de negocios). | |
JP4945196B2 (ja) | データ管理システム | |
EP1646949A2 (en) | Service management of a service oriented business framework | |
WO2005015440A2 (en) | Extending service-oriented business frameworks | |
EP1646955A2 (en) | Meta model for an enterprise service architecture | |
US20030204503A1 (en) | Connecting entities with general functionality in aspect patterns | |
EP1646958A2 (en) | Side-effect modeling | |
US7890540B2 (en) | Browsing meta data for an enterprise service framework | |
JP2005327136A (ja) | 伝票管理システム及び伝票管理用ソフトウェア | |
EP1143357A2 (en) | Method for defining iteration configuration in a data transformation specification | |
JP2001028005A (ja) | データウェアハウスにおける検索・集計高速化を実現するデータ格納、更新、検索、集計方法 | |
JP2004303117A (ja) | 名寄せデータベース設計支援方法およびシステム | |
EP1143348A2 (en) | Method for defining a data transformation specification | |
JP2000187665A (ja) | データベースシステムにおける情報導出方法及び情報導出システム、並びに記憶媒体 | |
Saaksvuori et al. | Product lifecycle management systems | |
Farzbod | An implementation of inventory system for Lafene Health Center based on dbase III plus |