図1は、文書を管理するシステムの構成の例を示すブロック図である。図1の例のシステムは、クライアント端末10a,10b,…(以下、「クライアント端末10」と総称する)とサーバ30とがネットワーク40で接続された構成を備える。
クライアント端末10は、文書に関する処理を行う端末装置である。各クライアント端末10は、有線または無線により読取装置20に接続される。クライアント端末10のユーザは、例えば紙文書500を用いて何らかの作業を行う場合、紙文書500の文書ID502を読取装置20で読み取りさせる。クライアント端末10は、例えば、読取装置20で読み取りされた文書ID502をサーバ30に登録させる処理を行う。クライアント端末10の詳細については後述する。
読取装置20は、紙文書500に付された文書ID502を読み取ってクライアント端末10に渡す装置である。文書ID502は、紙文書500の識別情報であり、機械読取可能な態様で紙文書500に付される。例えば、バーコードや、QRコード(登録商標)などの2次元コードのような機械読取可能な符号に符号化した文書ID502が紙文書500に印刷される。また例えば、OCRに適したフォントで、文書ID502を表す文字列(文字、数字、および記号のうち少なくとも1種類以上を含む)を紙文書500に印刷してもよい。あるいは、例えば、文書ID502を記録したICタグを紙文書500に貼付してもよい。読取装置20は、紙文書500に付された文書ID502の態様に応じた読取機能を備えるものとする。例えば、文書ID502がバーコードまたは2次元コードで紙文書500に印刷されている場合、読取装置20として、バーコードリーダまたは2次元コードリーダを用いる。文書ID502を表す文字列が紙文書500に印刷されている場合、光学文字読取装置を読取装置20として用いる。また、文書ID502を記録したICタグが紙文書500に貼付されている場合、ICタグリーダを読取装置20として用いればよい。
サーバ30は、本システムで利用される文書を管理するサーバ装置である。サーバ30は、文書管理部32および文書情報DB(データベース)34を備える。文書管理部32は、文書の管理に関する処理を行う。例えば、文書管理部32は、各クライアント端末10から、当該クライアント端末10に接続された読取装置20により読み取りされた文書IDを取得し、文書情報DB34に登録する。このとき、文書管理部32は、文書IDに関連付けて、当該文書IDの読み取りの履歴を表す履歴情報を文書情報DB34に登録してもよい。この履歴情報は、例えば、当該文書IDの取得元のクライアント端末10の識別情報、当該文書IDの読取操作を行ったユーザの識別情報、および当該文書IDの読み取りが行われた時間を表す情報などを含むものであってよい。また、文書管理部32は、文書IDの読み取りの履歴だけでなく、クライアント端末10で文書に対して行われた操作の履歴情報を、操作対象の文書の文書IDと共にクライアント端末10から取得して文書情報DB34に登録してもよい。文書に対する操作の例として、電子文書の閲覧、編集、複製、および印刷や、紙文書のスキャンおよび複製などが挙げられる。文書管理部32は、さらに、文書のアクセス権の管理を行ってもよい。
文書情報DB34は、サーバ30の管理対象の文書に関する情報を記憶するデータベースである。文書情報DB34は、例えば、文書IDごとに、当該文書IDの文書に関する情報を記憶する。上述の文書IDの読み取りの履歴情報および文書に対する操作の履歴情報は、文書情報DB34に記憶される、文書に関する情報の例である。文書情報DB34は、各文書の履歴情報だけでなく、文書の属性情報(例えば、文書の名称、種類、保存場所、作成者、作成日時など)および文書のアクセス権の情報などを各文書の文書IDに関連付けて記憶しておいてもよい。
ネットワーク40は、装置間の通信を可能とする通信手段であり、例えば、インターネットやLAN(Local Area Network)などのネットワークであってよい。
図1では図示を省略するが、読取装置20に接続されていないクライアント端末10がネットワーク40に接続されていてもよい。このようなクライアント端末10は、例えば、サーバ30の管理対象の電子文書に対する操作を行うと、この操作の履歴を当該電子文書の文書IDと共にサーバ30に通知する。
図2を参照し、クライアント端末10の内部構成の例を説明する。なお、以下の説明では、文書IDを単に「ID」とも呼ぶ。クライアント端末10は、ID受付部100、読取モード記憶部110、モード設定部120、ID登録部130、ID記憶部140、探索処理部150、ID一時記憶部160、出力処理部170、およびID送信部180を備える。
ID受付部100は、紙文書から読取装置20が読み取ったIDを受け付ける。言い換えると、ID受付部100は、読取装置20で読み取りされたIDを読取装置20から取得する。ID受付部100は、読取モード記憶部110に記憶された読取モードに応じて、受け付けたIDをID登録部130または探索処理部150に渡す。
読取モード記憶部110は、現在の読取モードを記憶する記憶手段である。本実施形態の例では、「通常モード」、「スキップモード」、および「シーケンシャルモード」の3種類のうちの1つを表す情報が読取モード記憶部110に記憶される。ID受付部100は、読取モード記憶部110に記憶された読取モードが通常モードであれば、受け付けたIDをID登録部130に渡し、スキップモードまたはシーケンシャルモードであれば、受け付けたIDを探索処理部150に渡す。通常モードは、読み取りされたIDを、読み取りの順番にID記憶部140に登録する処理モードである。スキップモードおよびシーケンシャルモードは、通常モードで複数のIDを受け付けてID記憶部140に受付の順(つまり、読取の順)に登録させた後、特定の順番で配置された複数の紙文書のうち、ID記憶部140に未登録のIDの紙文書を探索するための処理モードである。スキップモードでは、上述の複数の紙文書の順番を飛ばして(スキップして)IDをユーザに読み取りさせ、読み取りされたIDをID記憶部140に登録済みのIDと比較することで、未登録のIDの紙文書が存在する範囲を特定する処理が行われる。シーケンシャルモードでは、スキップモードの処理によって特定された範囲の紙文書のIDを1つずつ順番にユーザに読み取りさせ、読み取りされたIDをID記憶部140に登録済みのIDと比較して、未登録のIDを特定する処理が行われる。このように特定されたIDの紙文書は、上述の複数の紙文書のIDをユーザが通常モードで読み取りさせた際に、IDの入力漏れが生じていた紙文書である。スキップモードおよびシーケンシャルモードの処理により、IDの入力漏れが発生した紙文書が特定される。
モード設定部120は、読取モードを設定する処理を行う。モード設定部120は、例えば、キーボードやマウスなどの入力装置(図示しない)を介して、ユーザによる読取モードの指定を受け付けて、指定された読取モードを表す情報を読取モード記憶部110に書き込む。また、モード設定部120は、予め設定された条件が満たされた場合に、ユーザの入力によらず自動的に読取モードの切替を行うこともある。例えば、通常モードでのIDの読み取りの後、IDの入力漏れが発生した紙文書を探索する処理の開始をユーザが入力装置を用いて指示した場合に、モード設定部120は、読取モードを通常モードからスキップモードに切り替える。また例えば、スキップモードの処理により、特定の順番に配置された複数の紙文書において入力漏れが発生した紙文書の存在する範囲が特定された場合に、スキップモードからシーケンシャルモードに切り替えることもある。また、シーケンシャルモードの処理により、スキップモードの処理で特定された範囲において入力漏れが発生した紙文書が特定された場合に、シーケンシャルモードからスキップモードに切り替えることもある。シーケンシャルモードからスキップモードに切り替えられた場合、スキップモードの処理により、さらに他の範囲でのIDの入力漏れの有無が確認される。本実施形態の例において、読取モードの切替は、読取モード記憶部110において現在の読取モードを表す情報を書き換えることで行われる。
ID登録部130は、ID受付部100から受け取ったIDをID記憶部140に登録すると共に、当該IDの登録の順番を表す情報をID記憶部140に登録する。ID登録部130がID受付部100から受け取るIDは、通常モードで読み取りされて受け付けられたIDである。また、ID記憶部140へのIDの登録の順番は、通常モードにおいて読取装置20でIDが読み取りされてID受付部100で受け付けられた順番であると言える。
ID記憶部140は、通常モードで読み取りされたIDを、その登録の順に記憶する記憶手段である。図3に、ID記憶部140のデータ内容の例を示す。図3の例の表では、各IDと当該IDの登録の順番とが互いに関連付けられている。図3は、ID1,ID2,…,ID20のIDがそれぞれ付され、IDの番号の昇順に配置された20部の紙文書について、ユーザが通常モードでIDの読み取りを行う場合の例である。本例において、ユーザは、紙文書の配置の順番に1部ずつ、通常モードで読取装置20を用いてIDを読み取りさせ、このとき、ID9,ID11,ID20の紙文書について、IDの読み取りを飛ばしてしまったとする。つまり、ID9,ID11,ID20の紙文書について、IDの入力漏れが発生したとする。図3を参照し、最初に入力漏れが発生したID9の直前のID8までは、順番「1」〜「8」にそれぞれ対応する番号のIDが登録されている。順番「9」には、ID9を飛ばしてID10が関連付けられている。さらに、次の順番「10」には、ID11を飛ばしてID12が関連付けられている。また、順番「11」〜「17」には、それぞれ、ID13〜ID19が関連付けられている。なお、最後に入力漏れが発生したID20は、図3の例の表に登録されていない。
図2の説明に戻り、探索処理部150は、特定の順番で配置された複数の紙文書のIDのうち、通常モードの処理においてIDの入力漏れが発生した紙文書を探索するための処理を行う。例えば図3を参照する上述の例の場合、IDを入力すべき20部の紙文書のうち、IDの入力漏れが発生した、ID9,ID11,ID20の紙文書を探索するための処理を行う。探索処理部150は、スキップモード処理部152およびシーケンシャルモード処理部154を備える。
スキップモード処理部152は、読取モードがスキップモードに設定されている場合に処理を行う。読取モードは、例えば、探索処理部150が探索処理の開始を指示するユーザの入力を受け付けた場合に、スキップモードに設定される。スキップモード処理部152は、出力処理部170に依頼して複数の紙文書の順番をスキップして読み取りされたIDを、ID受付部100を介して取得し、取得したIDとID記憶部140に登録済みのIDとを比較することで、IDの入力漏れが発生した紙文書の存在する範囲を特定する。図3を参照する上述の例の場合に、スキップモードにおいて、例えば、20部の紙文書を先頭の文書(ID1)から予め設定された部数(本例では10部)だけスキップした文書(11部目,ID11)のIDをユーザが読み取りさせて、ID受付部100がID11を受け付けたとする。スキップモード処理部152は、このように受け付けられたID11とID記憶部140に記憶された順番「11」のID13とを比較し、両者が異なることから、ID1の文書とID11の文書との間に、入力漏れが発生した紙文書が存在することを特定する。スキップモード処理部152の処理の詳細は後述する。
シーケンシャルモード処理部154は、読取モードがシーケンシャルモードに設定されている場合に処理を行う。読取モードは、例えば、スキップモード処理部152において入力漏れが発生した紙文書の存在する範囲が特定された場合に、シーケンシャルモードに設定される。シーケンシャルモード処理部154は、スキップモード処理部152が特定した範囲の紙文書について1部ずつ順に読み取りされたIDを、ID受付部100を介して取得し、取得したIDとID記憶部140に登録済みのIDとを比較することで、IDの入力漏れが発生した紙文書を特定する。シーケンシャルモード処理部154は、特定した紙文書のIDをID一時記憶部160に登録する。例えば、図3を参照する上述の例において、スキップモード処理部152によってID1の文書からID11の文書までの間で入力漏れが発生していると特定された場合に、シーケンシャルモード処理部154は、ID11の文書から順に遡って1部ずつ読み取りされたIDがID記憶部140に登録済であるか否かを確認する。例えば、ID11は、ID記憶部140に登録済でないことが確認され、ID11の文書から1部遡って読み取りされるID10は、ID記憶部140に登録済であることが確認される。このため、ID記憶部140に登録済でないID11がID一時記憶部160に登録される。シーケンシャルモード処理部154の処理の詳細は後述する。
ID一時記憶部160は、シーケンシャルモード処理部154によって特定された、入力漏れが発生した紙文書のIDを一時的に記憶しておく記憶手段である。探索処理部150は、特定の順番で配置された複数の紙文書のうち、IDの入力漏れが発生した紙文書がすべて特定されて一時記憶部160に登録されると、ID一時記憶部160に記憶されたIDをID記憶部140に移す(つまり、ID記憶部140に登録する)処理を行う。なお、IDの入力漏れが発生した紙文書が「すべて」特定されたか否かを判定する条件および手順については後述する。
出力処理部170は、クライアント端末10における処理の経過や結果を表す情報を出力する。出力処理部170は、また、クライアント端末10における処理においてユーザに対して何らかの操作を促す必要がある場合に、その旨を表す情報を出力することもある。例えば、上述のスキップモードの処理において、文書の順番をスキップしてIDの読み取りを行うことをユーザに促す情報を出力したり、上述のシーケンシャルモードの処理において、1部ずつ順番に文書のIDの読み取りを行うことをユーザに促す情報を出力したりする。出力処理部170による出力は、例えば、出力の対象の情報を、図示しない表示装置に表示させることであってよい。
ID送信部180は、ID記憶部140に記憶されたIDをサーバ30へ送信する。ID送信部180は、例えば、ID記憶部140に新たなIDが登録されるたびに、当該IDをサーバ30に対して送信すればよい。あるいは、例えば、通常モードの処理により複数のIDがID記憶部140に登録され、さらに、探索処理部150による処理が行われて、ID一時記憶部160に記憶されたIDがID記憶部140に登録された後、ID記憶部140に記憶された複数のIDを纏めてサーバ30へ送信してもよい。ID送信部180は、IDだけでなく、各IDのID記憶部140への登録の順番を表す情報をさらにサーバ30へ送信してもよい。また、各IDの読み取りを指示したユーザ(つまり、クライアント端末10の操作者)の識別情報、クライアント端末10の識別情報、および各IDが読み取りされた時間などを含む履歴情報を各IDと共にサーバ30に送信してもよい。
以下、クライアント端末10で行われる処理の例を説明する。以下の説明において、クライアント端末10のユーザは、特定の順番に配置された複数の紙文書それぞれのIDを読み取りさせ、これらの複数の紙文書の複数のIDをサーバ30へ登録させるよう、クライアント端末10に対して指示するものとする。本例において、ユーザは、まず、入力装置を介して、クライアント端末10に対し、通常モードによるIDの読み取りの開始を指示する。この指示に応じて、モード設定部120は、通常モードを表す情報を読取モード記憶部110に書き込むことで、読取モードを通常モードに設定する。さらに、ユーザは、読取装置20を用いて、複数の紙文書それぞれのIDを、紙文書が配置された順番で1つずつ読み取りさせる。
図4は、読取モードが通常モードに設定されている場合にクライアント端末10が実行する処理の手順の例を示すフローチャートである。クライアント端末10は、例えば、通常モードによるIDの読み取りの開始を指示するユーザの入力に応じて、モード設定部120により読取モードを通常モードに設定した後、図4の例の手順の処理を開始する。
図4を参照し、クライアント端末10のID受付部100は、読取装置20が紙文書から読み取ったIDを読取装置20から渡されるのを待ち受ける(ステップS10でNO判定、かつステップS22でNO判定のループ)。IDの読取を待ち受けている間に、図示しない入力装置を介してユーザがID読み取りの終了を指示する入力を行うと(ステップS22でYES)、出力処理部170は、現時点でID記憶部140に登録済のIDの数を図示しない表示装置に表示させ(ステップS24)、図4の例の手順の処理は終了する。
ユーザが読取装置20を用いて紙文書のIDを読み取りさせ、読み取りされたIDをID受付部100が受け付けると(ステップS10でYES)、ID受付部100は、受け付けたIDをID登録部130に渡し、ID登録部130は、受け取ったIDと、当該IDのID記憶部140への登録の順番を表す情報と、を関連付けてID記憶部140に登録する(ステップS12)。例えば、ID記憶部140を参照して、今回受け取ったIDの登録の前にすでにID記憶部140に登録済のIDの個数を特定し、この個数に1だけ加えた数を、受け取ったIDの登録の順番とすればよい。一具体例として、ID記憶部140に図3の例のデータ内容が記憶されている場合に、新たにIDを受け付けたとすると、登録済のIDのうち最も大きい値の順番「17」の次の順番「18」に関連付けて、受け付けたIDをID記憶部140に登録すればよい。
ステップS12の後、クライアント端末10は、現在、IDの入力漏れが発生した紙文書の探索処理を実行中であるか否かを判定する(ステップS14)。探索処理中であれば(ステップS14でYES)、ステップS16に進む。ステップS16,S18,S20の処理については、探索処理の手順の例と併せて後述する。探索処理中でなければ(ステップS14でNO)、ステップS10に戻って、さらなるIDの受け付けを待ち受ける。
複数の紙文書について順番に1部ずつ、通常モードで読取装置20を用いてユーザがIDの読み取りを行うと、探索処理中でなければ、ステップS10でYES判定されてステップS12でID記憶部140へのIDの登録が行われ、ステップS14でNO判定されてステップS10に戻るループ処理により、複数のIDが順番にID記憶部140に登録される。このループ処理により、上述の図3の例のようなデータ内容がID記憶部140に登録される。
図3に例示するデータ内容がID記憶部140に登録されていて、ID受付部100がIDの受付を待ち受けている間(図4のステップS10でNOかつステップS22でNOのループ)に、ユーザが、IDの読み取りの終了を指示する入力を行ったとする。この場合、ステップS22でYES判定され、クライアント端末10の出力処理部170は、ステップS24で、ID記憶部140に登録済のIDの数を図示しない表示装置に表示させる。図3を参照する本例では、最後に登録されたID19の順番「17」を登録済のIDの個数として表示させる。ステップS24では、登録済のIDの個数だけでなく、登録済のIDとその登録の順番とを表示させてもよい。つまり、図3の例の表自体を表示させてもよい。ステップS24の表示を確認したユーザは、IDを入力すべき紙文書の合計部数(本例では20部)を知っていれば、ID記憶部140に17個のIDしか登録されていないことから、3部の紙文書についてIDの入力漏れが発生していることを把握する。そこで、ユーザは、入力漏れの発生した紙文書を探索する探索処理の実行をクライアント端末10に対して指示する。この指示に応じて、クライアント端末10の探索処理部150は探索処理を実行する。図5〜図8は、探索処理の手順の例を示すフローチャートである。また、上述の図4の例の手順におけるステップS10〜S20の処理も、探索処理の一部として実行され得る。
探索処理部150は、探索処理の実行をユーザから指示されると、まず、図5の例の手順の処理を開始する。
探索処理部150は、IDを入力すべき紙文書の全体においてIDの入力漏れが発生している紙文書の数を表す全体入力漏れ文書数Anの値を設定する(ステップS30)。ステップS30では、例えば、ユーザが把握している全体入力漏れ文書数Anの値の入力を受け付けて設定すればよい。図3を参照する上述の例では、3部の紙文書についてIDの入力漏れが発生していることをユーザが把握しているため、ステップS30で、ユーザにより「3」が入力され、全体入力漏れ文書数Anの値は「3」に設定される。ユーザが全体入力漏れ文書数Anの値を把握していない場合、探索処理部150は、その旨を表すユーザの入力を受け付けて、Anの値を「不明」に設定しておけばよい。
次に、探索処理部150は、探索文書インデックスIsに初期値「1」を設定する(ステップS32)。探索文書インデックスIsは、ユーザの手元にある複数の紙文書のうち、何番目の紙文書を処理中であるかを表すインデックスである。ステップS32は、探索文書インデックスIsの初期化処理である。
さらに、探索処理部150は、モード設定部120に依頼して、読取モードをスキップモードに設定させる(ステップS34)。モード設定部120は、スキップモードを表す情報を読取モード記憶部110に書き込むことで、読取モードをスキップモードに設定する。
ステップS34の後の処理は、読取モードがスキップモードの他のモードに変更されるまでは、探索処理部150のスキップモード処理部152が実行する。
スキップモード処理部152は、ID記憶部140に登録済のIDの数が探索文書インデックスIsと一致するか否かを判定する(ステップS36)。一致すれば(ステップS36でYES)、ステップS38に進み、一致しなければ(ステップS36でNO)、ステップS42に進む。ここでは、ステップS42以降の処理を先に説明する。例えば、探索文書インデックスIsが初期値「1」であり、図3の例のデータ内容がID記憶部140に登録されている場合、登録済のIDの数は「17」であり、探索文書インデックスIs「1」と異なるので、ステップS36でNO判定されてステップS42に進む。
ステップS42で、スキップモード処理部152は、出力処理部170に依頼して、文書をN部だけスキップしてIDの読み取りを行うようユーザに促す情報を表示装置に表示させる。Nの値としては、予め設定された数を用いればよい。例えば、N部の紙文書の大半について後述のシーケンシャルモードにおいて1部ずつ紙文書のIDをユーザが読取装置20を用いて読み取りさせる作業を行ったとしても、ユーザの負担感が比較的少ないと予想される数にNの値を予め設定しておけばよい。以下の説明では、Nは「10」に予め設定されているとする。なお、本実施形態の例では、ID記憶部140に登録済のIDの個数から探索文書インデックスIsの値を減算した結果が、Nの値として予め設定された数よりも小さい場合、予め設定された数ではなく当該減算した結果をNとして用いる。この場合、探索文書インデックスIsが表す現在処理中の紙文書の後に配置された紙文書の部数が前述の予め設定された数より小さい(つまり、予め設定された数の部数だけスキップできない)と考えられるためである。探索文書インデックスIsの値が「1」であり、ID記憶部140に登録済のIDの数が「17」である上述の例の場合、「17」から「1」を減算した結果「16」は、予め設定された数「10」よりも大きいので、Nの値として「10」を用いる。
ステップS42の後、スキップモード処理部152は、探索文書インデックスIsの値をNだけ増加させ(ステップS44)、ID受付部100によるIDの受付を待ち受ける(ステップS46でNO判定のループ)。
ステップS42の表示を確認したユーザが、紙文書の順番をN部だけスキップして読取装置20でIDの読み取りを行うと、ID受付部100により当該IDが受け付けられてスキップモード処理部152に渡される。
ID受付部100がIDを受け付けてスキップモード処理部152に渡すと(ステップS46でYES)、スキップモード処理部152は、受け取ったIDと、ID記憶部140において探索文書インデックスIsが表す順番で登録されたIDと、が一致するか否かを判定する(ステップS48)。一致すれば(ステップS48でYES)、処理はステップS36に戻り、一致しなければ(ステップS48でNO)、処理はステップS50に進む。
図3を参照する上述の例において、探索文書インデックスIsが初期値「1」である場合を例にとり、ステップS42,S44,S46,S48の具体例を説明する。本具体例において、ステップS42,S44のNは「10」であり、ステップS46で受け付けられるIDは、紙文書の先頭から10部スキップした、11部目の紙文書のID11である。また、このときの探索文書インデックスIsの値は、ステップS44で11(=1+10)に設定されている。よって、ステップS48では、スキップモード処理部152は、ID記憶部140において順番「11」に関連付けられたID13と、ステップS46で受け付けられたID11と、を比較し、両者が一致しないことからNO判定する。両者が一致しないということは、N部だけスキップした先の紙文書とスキップの起点の紙文書との間に、入力漏れが発生している紙文書が存在すると言える。したがって、ステップS48でNO判定すると、スキップモード処理部152は、ステップS44における更新前の探索文書インデックスIsが示す紙文書から更新後の探索文書インデックスIsまでの範囲を、入力漏れが発生している紙文書の範囲として特定する。本具体例では、ID1の紙文書からID11の紙文書までの範囲が入力漏れの発生の範囲として特定される。
ステップS48でNO判定した後、スキップモード処理部152は、モード設定部120に依頼して、読取モードをシーケンシャルモードに設定させる(ステップS50)。モード設定部120は、シーケンシャルモードを表す情報を読取モード記憶部110に登録する。ステップS50の後、読取モードがシーケンシャルモードの他のモードに設定されるまでの処理は、探索処理部150のシーケンシャルモード処理部154によって実行される。
ステップS50の後、処理は図6のステップS52に進む。ステップS52で、シーケンシャルモード処理部154は、スキップモード処理部152が特定した範囲においてIDの入力漏れが発生している紙文書の数を表す範囲内入力漏れ文書数Rnを「不明」に設定する。
次に、シーケンシャルモード処理部154は、図5のステップS46で受け付けたIDがID記憶部140に登録済であるか否かを判定する(ステップS54)。ステップS54の判定は、受け付けたIDとID記憶部140に登録済の各IDとを比較することで行えばよい。ID記憶部140に登録済のIDのうち受け付けたIDに一致するものがある場合、登録済と判定して(ステップS54でYES)、ステップS56に進む。ID記憶部140に登録済のIDのうち受け付けたIDに一致するものがない場合、登録済でないと判定して(ステップS54でNO)、図7のステップS70に進む。図7の例の手順は後述する。
ステップS54でYES判定された後、範囲内入力漏れ文書数Rnが不明であれば(ステップS56でYES)、探索文書インデックスIsの値から、ステップS54で登録済と判定されたIDのID記憶部140への登録の順番を減算した値を、範囲内入力漏れ文書数Rnに設定する(ステップS60)。探索文書インデックスIsの値は、ステップS54でID記憶部140に登録済と判定されたIDが付与された紙文書が、ユーザの手元にある複数の紙文書において何番目に配置された文書であるかを表す。よって、探索文書インデックスIsの値と、当該登録済と判定されたIDのID記憶部140への登録の順番との差が、現在の処理対象の範囲内でIDの入力漏れが発生している紙文書の部数を表すRnの値となる。
ステップS60の後、または、範囲内入力漏れ文書数Rnが不明でない場合(ステップS56でNO)、シーケンシャルモード処理部154は、範囲内入力漏れ文書数Rnが0であるか否かを判定する(ステップS62)。0であれば(ステップS62でYES)、処理は図8のステップS82に進み、0でなければ(ステップS62でNO)、処理はステップS64に進む。
ステップS64で、シーケンシャルモード処理部154は、探索文書インデックスIsの値を1だけ減少させる。
その後、シーケンシャルモード処理部154は、出力処理部170に依頼して、前回IDの読み取りを行った紙文書よりも1部だけ前の文書のIDを読み取ることをユーザに促す情報を表示装置に表示させ(ステップS66)、ID受付部100によるIDの受け付けを待ち受ける(ステップS68でNO判定のループ)。ID受付部100がIDを受け付けてシーケンシャルモード処理部154に渡すと(ステップS68でYES)、処理はステップS54に戻り、ステップS68で受け付けたIDがID記憶部140に登録済であるか否かを判定する。
上述のステップS54〜ステップS68を含むループ処理によって、シーケンシャルモード処理部154は、スキップモード処理部152が特定した範囲で最後に配置された紙文書から1部ずつ遡って読み取りされるIDのうち、ID記憶部140に登録済でないものを検索する。ID記憶部140に登録済でないIDが発見されると、ステップS54でNO判定され、図7のステップS70の処理により、発見されたIDのID一時記憶部160への登録が行われる。
以下、図7の例の手順の処理を説明する。図7のステップS70で、シーケンシャルモード処理部154は、図6のステップS54でID記憶部140に登録済でないと判定されたID(図5のステップS46または図6のステップS68で受け付けたIDである)を、現在の探索文書インデックスIsの値に関連付けて、ID一時記憶部160に登録する。
ステップS70の後、シーケンシャルモード処理部154は、全体入力漏れ文書数Anを1だけ減少させる(ステップS72)。入力漏れが発生している紙文書のIDを1つ特定してステップS70でID一時記憶部160に登録したことから、入力漏れが発生している紙文書の部数が1だけ減るためである。
ステップS72で減少させた結果のAnが0であれば(ステップS74でYES)、図8のステップS82に進み、0でなければ(ステップS74でNO)、ステップS76に進む。
ステップS76では、範囲内入力漏れ文書数Rnが不明であるか否かを判定する。不明であれば(ステップS76でYES)、図6のステップS64に進む。
範囲内入力漏れ文書数Rnが不明でなければ(ステップS76でNO)、Rnを1だけ減少させる(ステップS78)。入力漏れが発生していた紙文書のIDを1つ特定してステップS70でID一時記憶部160に登録したことから、現在の処理対象の範囲内において入力漏れが発生している紙文書の部数が1だけ減るためである。
ステップS78で減少させた結果のRnの値が0であれば(ステップS80でYES)、処理は図8のステップS82に進み、0でなければ(ステップS80でNO)、図6のステップS64に進む。
ステップS76でYES判定された後、または、ステップS80でNO判定された後に、図6のステップS64に進むと、シーケンシャルモード処理部154は、現在処理中の紙文書(探索文書インデックスIsが示す紙文書)から1部だけ遡って読み取りされたIDの受付を待ち受け(ステップS64,S66,S68)、受け付けられたIDについて上述のステップS54以下の処理を繰り返す。
以上で説明した図6および図7の例の手順の処理の具体例として、図3の例のデータ内容がID記憶部140に登録されており、ID1からID11までの範囲がスキップモード処理部152により特定された場合を考える。図6のステップS52で範囲内入力漏れ文書数Rnが「不明」に設定された後、特定された範囲の最後のID11(図5のステップS46で受け付けられたID)がID記憶部140に登録済でないことから、ステップS54でNO判定されて図7のステップS70に進む。ステップS70では、このID11と現時点での探索文書インデックスIsの値「11」とが関連付けられてID一時記憶部160に登録される。図9Aに、この時点でのID一時記憶部160のデータ内容の例を示す。
ステップS70の後、ステップS72で、全体入力漏れ文書数Anを1だけ減少させる。本例では、図5のステップS30を参照して説明したとおり、Anは「3」に設定されているとする。よって、ステップS72で減少させた結果のAnの値は「2」であり、0でないため、ステップS74でNO判定されてステップS76に進む。この時点で、範囲内入力漏れ文書数Rnの値は「不明」であるため、ステップS76でYES判定され、図6のステップS64に進む。ステップS64で探索文書インデックスIsの値が「11」から「10」に減少させられ、現在処理中の紙文書から1部だけ遡ってIDの読み取りを行うことをユーザに促す(ステップS66)。ID11の紙文書から1部だけ遡って読み取りされたID10が受け付けられると(ステップS68でYES)、ステップS54で、ID記憶部140に登録済であるか否かが判定される。
図3を参照し、ID10は、順番「9」に関連付けてID記憶部140に登録されているため、ステップS54でYES判定されてステップS56に進む。ここで、範囲内入力漏れ文書数Rnは、未だ「不明」であるため、ステップS56でYES判定されてステップS60に進む。ステップS60では、現在の探索文書インデックスIsの値「10」から、ID記憶部140に登録済であるとステップS54で判定されたID10のID記憶部140への登録の順番「9」を減算した値「1」を、範囲内入力漏れ文書数Rnの値として設定する。ステップS60で設定されたRnの値「1」は、0でないため、ステップS62でNO判定されてステップS64に進む。すでに説明したのと同様のステップS64〜S68の処理により、探索文書インデックスIsが1だけ減少されて「10」から「9」に変更され、ID10の紙文書から1部だけ遡った紙文書のID9が読み取りされて受け付けられる。ID9は、ID記憶部140に登録済でないため、ステップS54でNO判定されて図7のステップS70に進み、現在の探索文書インデックスIsの値「9」とID9とが関連付けられてID一時記憶部160に登録される。この時点でのID一時記憶部160のデータ内容の例を図9Bに示す。図9Bを参照し、すでにID一時記憶部160に登録されたID11と探索文書インデックスIs「11」との組に加えて、ID9と探索文書インデックスIs「9」との組が登録されている。
ID9のID一時記憶部160への登録の後、図7のステップS72で、全体入力漏れ文書数Anの値が現在の「2」から「1」に変更される。Anは0でないので、ステップS74でNO判定されてステップS76に進む。この時点で、範囲内入力漏れ文書数Rnの値は「1」に設定されており、「不明」ではないため、ステップS76でNO判定されて、ステップS78で、Rnの値は「1」から1だけ減少させられて「0」に変更される。これにより、スキップモード処理部152で特定された範囲においてIDの入力漏れが発生している紙文書の数は0となる。Rnが0なので、ステップS80ではYES判定され、処理は図8のステップS82に進む。
以上、図6および図7を参照して説明した例のシーケンシャルモード処理部154の処理により、スキップモード処理部152が特定した範囲で最後に配置された紙文書から1部ずつ遡ってIDの読み取りが行われ、ID記憶部140に登録済でないIDがID一時記憶部160に登録される。また、全体入力漏れ文書数Anまたは範囲内入力漏れ文書数Rnが0になった時点で、図6および図7の例の手順におけるループ処理から外れて、処理は図8のステップS82に進む。
図8は、ID一時記憶部160に登録されたIDをID記憶部140に移す処理の手順の例を示す。図8の例の手順の処理は、IDを入力すべき複数の紙文書の全体において、あるいは、スキップモード処理で特定された範囲において、入力漏れが発生している紙文書のIDのすべてが特定されてID一時記憶部160に登録された場合に行われる処理である。図8の例の手順の処理は、引き続きシーケンシャルモード処理部154によって行われる。
図8を参照し、シーケンシャルモード処理部154は、まず、ID一時記憶部160中にIDが登録されているか否かを判定する(ステップS82)。登録されていれば(ステップS82でYES)、ID一時記憶部160において最後に登録されたIDと探索文書インデックスIsの値との組をID一時記憶部160から取得する(ステップS84)。例えば、図9Bの例のデータ内容がID一時記憶部160に登録されている場合、最後に登録されたID9と探索文書インデックスIsの値「9」との組を取得する。
その後、シーケンシャルモード処理部154は、ステップS84で取得したIDと探索文書インデックスIsの値との組を、ID一時記憶部160から削除する(ステップS86)。ID9とIsの値「9」との組をステップS84で取得する上述の例の場合、ステップS86の処理の結果、ID一時記憶部160のデータ内容は、図9Aの例のとおりになる。
次に、シーケンシャルモード処理部154は、ステップS84で取得したIDを、ID記憶部140において、ステップS84で取得した探索文書インデックスIsの値が表す順番の位置に挿入して登録する(ステップS88)。例えば、ID記憶部140において、ステップS84で取得した探索文書インデックスIsの値が表す順番以降の順番に関連付けて登録されている各IDについて、1つずつ順番を後にずらした順番に関連付けて登録し直す。そして、ステップS84で取得した探索文書インデックスIsの値が表す順番に関連付けて、ステップS84で取得したIDをID記憶部140に登録する。図3の例のデータ内容がID記憶部140に登録されており、ステップS84でID9とIs「9」との組が取得される例の場合、探索処理部150は、図3の例の表で順番「9」以降のID10,ID12,ID13,…,ID19の順番を1つずつ後にずらすと共に、順番「9」に関連付けてID9をID記憶部140に登録する。この結果のID記憶部140のデータ内容の例を図10Aに示す。図10Aの例の表では、順番「9」に関連付けてID9が登録されており、順番「10」,「11」,「12」,…,「18」に関連付けてID10,ID12,ID13,…,ID19が登録されている。
ステップS88の後、処理はステップS82に戻り、さらにID一時記憶部160中に登録されたIDの有無を判定する。ID9とIs「9」との組が削除された結果の図9Aの例のデータ内容がID一時記憶部160に登録されている上述の例では、再度、ステップS82でYES判定されて、ステップS84で、ID11とIs「11」との組がID一時記憶部160から取得される。そして、ステップS86で、ID11とIs「11」との組がID一時記憶部160から削除されてID一時記憶部160のデータ内容は空(なし)となる。ステップS88では、ID9に関して上述したのと同様に、Is「11」以降の順番に関連付けてID記憶部140に登録された各IDの順番が1つずつ後にずらされて、順番「11」に関連付けてID11がID記憶部140に登録される。これにより、ID記憶部140のデータ内容は、図10Aの例の表から図10Bに例示する内容に変化する。
ステップS82,S84,S86,S88を含む上述の例のループ処理により、ID一時記憶部160に記憶されたIDは、ID一時記憶部160から削除され、ID記憶部140において、該当する順番の位置に登録される。このループ処理においては、ID一時記憶部160において最後に登録されたIDとIsの値との組から順に処理する(ステップS84参照)。図6および図7を参照して上記で説明したシーケンシャルモードの処理では、スキップモードで特定された範囲の最後の紙文書から順に一部ずつ遡って入力漏れのIDを特定してID一時記憶部160に登録するため、ID一時記憶部160に最後に登録されたIDは、最も早い順番の紙文書のIDである。ID一時記憶部160に登録されたIDのうち最も早い順番の紙文書のIDに対して、ステップS88でID記憶部140の該当する順番の位置に当該IDを挿入して登録する処理を行うと、当該順番よりも前のIDについては、ID記憶部140中で順番のずれが生じていない状態となる。したがって、ステップS84では、ID一時記憶部160において最後に登録されたIDとIsの値との組をステップS86,S88の処理対象として取得する。
ステップS82,S84,S86,S88を含む上述の例のループ処理により、ID一時記憶部160に登録されたすべてのIDについてID記憶部140への登録が完了すると、ID一時記憶部160のデータ内容は空となる。この場合、ID一時記憶部160に登録されたIDの有無を判定するステップS82でNO判定され、処理はステップS90に進む。ステップS90で、シーケンシャルモード処理部154は、全体入力漏れ文書数Anが0であるか否かを判定する。全体入力漏れ文書数Anが0であれば(ステップS90でYES)、探索処理を終了し、0でなければ(ステップS90でNO)、図5のステプS34に進む。
ID1〜ID20がそれぞれ付された20部の紙文書のIDの読み取りを行う本例において、上述の図8のステップS82〜S88の例のループ処理により図10Bに例示するデータ内容がID記憶部140に登録された時点では、全体入力漏れ文書数Anは「1」である。このため、本例では、図8のステップS82から図5のステップS34に進む。図5のステップS34では、探索処理部150は、モード設定部120に依頼して、読取モードをシーケンシャルモードからスキップモードに設定させる。次に、ステップS36で、探索処理部150は、ID記憶部140に登録済のIDの数と現在の探索文書インデックスIsの値とが一致するか否かを判定する。本例では、ID記憶部140に登録済のIDの数は「19」である(図10B参照)。また、現在の探索文書インデックスIsの値は、図6および図7を参照して上述した例のシーケンシャルモードの処理において最後にID一時記憶部160に登録されたID9に対応するIsの値「9」である。よって、ここでは、登録済のIDの数と現在のIsの値とが異なることから、ステップS36でNO判定され、ステップS42に進む。ステップS42では、上記で説明したとおり、文書をN部だけスキップしてIDの読み取りを行うようユーザに促す情報を表示装置に表示させる。Nの値としては、予め設定された数「10」を用いる。これは、ID記憶部140に登録済のIDの数「19」から現在の探索文書インデックスIsの値「9」を減算した結果が「10」であり、予め設定された数「10」部以上の紙文書がIs「9」に対応する紙文書の後に配置されている(10部だけスキップできる)と考えられるためである。その後、ステップS44で探索文書インデックスIsの値「9」をN=10だけ増加させて「19」に設定し、Is「9」に対応するID9の紙文書から10部だけスキップした紙文書のID19が受け付けられると(ステップS46でYES)、受け付けたID19と探索文書インデックスIs「19」の順番に関連付けてID記憶部140に登録されたID19とが一致するため、ステップS48でYES判定されてステップS36に戻る。今回は、ID記憶部140に登録済のIDの数「19」と探索文書インデックスIsの値「19」とが等しいことから、ステップS36でYES判定されて処理はステップS38に進む。
ステップS38で、探索処理部150は、モード設定部120に依頼して、読取モードを通常モードに設定させる。次に、出力処理部170に依頼して、残りの紙文書があればそのIDを読み取るようユーザに促す情報を、図示しない表示装置に表示させる(ステップS40)。ステップS40の後、処理は図4のステップS10に進み、IDの受付を待ち受ける。20部の紙文書のIDの読み取りを行う本例において、ユーザが最初に通常モードでIDの読み取りを行った際にID20の紙文書について入力漏れが生じていたため、図5のステップS40から図4のステップS10に進んだ時点で、ユーザの手元には、ID19の紙文書の後に、20部目の紙文書(ID20)が未処理の紙文書として残ることになる。そこで、ユーザは、残りの紙文書である20部目の紙文書のID20を読取装置20により読み取りさせる。すると、ID20が受け付けられてステップS10からステップS12に進み、ID記憶部140において、ID20が、その登録の順番「20」に関連付けられて登録される。この結果のID記憶部140のデータ内容の例を図10Cに示す。図10Cを参照し、20部の各紙文書の各ID1〜ID20が、IDの番号の昇順に各順番「1」〜「20」に関連付けて登録されている。
ステップS12の後、ステップS14において、現在、探索処理中であるか否かが判定される。ステップS14の判定は、例えば、全体入力漏れ文書数Anに1以上の値が設定されているか否かによって行えばよい。Anに1以上の値が設定されていれば探索処理中であると判定し、1以上の値が設定されていなければ(つまり、Anの値が0または不明であれば)探索処理中でないと判定する。あるいは、例えば、ステップS10でIDを受け付けた時点で、図示しない表示装置において図5のステップS40による表示が行われていれば探索処理中であると判定し、当該表示が行われていなければ探索処理中でないと判定してもよい。
図4のステップS12でID20をID記憶部140に登録する本例では、探索処理中であることから、ステップS14でYES判定されて、ステップS16に進む。なお、本例において、現在の全体入力漏れ文書数Anは「1」である(図7のステップS70でID9をID一時記憶部160に登録した後のステップS72の上記の説明を参照)。
ステップS16では、探索処理部150により、全体入力漏れ文書数Anを1だけ減少させる。その結果のAnの値が0であれば(ステップS18でYES)、探索処理を終了させ(ステップS20)、IDの読取終了の指示またはIDの受け付けを待ち受ける(ステップS22,S10)。Anの値が0でなければ(ステップS18でNO)、ステップS10の判定に戻る。Anの値が「1」である本例では、ステップS16でAnの値が「0」となり、ステップS20で探索処理が終了される。
以上で説明した実施形態の例では、通常モードで複数の紙文書についてIDの入力を行う場合であってIDの入力漏れが発生した場合に、IDの入力の対象である複数の紙文書の部数よりも少ない数の紙文書のIDを読み取りさせることで、入力漏れが発生している紙文書が特定される。例えば、20部の紙文書(ID1〜ID20)のIDの入力を行う上述の例では、通常モードでIDの入力を行ってID記憶部140に図3の例のデータ内容が登録された後、探索処理において、ID11,ID10,ID9,ID19,ID20の5個のIDの読み取りを行うだけで、入力漏れが発生した紙文書(ID11,ID9,ID20)が特定され、入力漏れが解消される。
以上で説明した実施形態の例は、本発明の実施の形態を限定するものではなく、上述の実施形態の例の他にも各種の変形例があってよい。例えば、上述の実施形態の例では、シーケンシャルモードの処理によりID一時記憶部160に登録されたIDをID記憶部140に移して登録した後で、スキップモードの処理に戻る場合(図8のステップS90から図5のステップS54に戻る場合)、その時点での探索文書インデックスIsの値に対応する紙文書を起点にN部だけスキップした紙文書のIDを受け付ける(図5のステップS36,S42〜S46)。変形例では、スキップモードの処理に戻った時点での探索文書インデックスIsに対応する紙文書ではなく、前回のスキップモードの処理において最後に受け付けられたIDに対応する紙文書を起点にN部だけスキップした紙文書のIDを受け付けてもよい。例えば、上述の実施形態の例の説明において参照した具体例では、最初のスキップモードの処理でID11を受け付けた後、シーケンシャルモードの処理でID11の紙文書から1部ずつ遡ってID10,ID9を受け付け、ID一時記憶部160に登録したID11,ID9をID記憶部140に移した後、ID9の紙文書を起点としてN部(10部)だけスキップした紙文書のID19を受け付ける。本変形例の場合、ID9ではなく、スキップモードで最後に処理したID11の紙文書を起点にN部だけスキップした紙文書のIDを受け付ける。本変形例では、例えば、スキップモードの処理からシーケンシャルモードの処理に移る時点(図5のステップS48でNO)での探索文書インデックスIsの値を記録しておき、図8のステップS90でNO判定された後、図5のステップS34またはステップS36の実行の前に、現在の探索文書インデックスIsを、前述のように記録しておいた探索文書インデックスIsの値に変更する。
また、上述の実施形態の例では、シーケンシャルモードの処理において、スキップモードで最後に受け付けられたIDの紙文書から1部ずつ遡ってIDを受け付ける。変形例では、シーケンシャルモードの処理において、その直前のスキップモードで特定された範囲の最初の紙文書に戻って、1部ずつIDの読み取りを行うことをユーザに促してもよい。例えば、上述の実施形態の例の説明において参照した具体例では、入力漏れが発生している紙文書の存在する範囲としてID1の紙文書からID11の紙文書までの範囲がスキップモードの処理で特定され、シーケンシャルモードの処理で、ID11の紙文書から1部ずつ遡ってID10,ID9が受け付けられる。本変形例の場合、シーケンシャルモードの処理において、ID11の紙文書から1部ずつ遡る代わりに、特定された範囲の最初の紙文書から順に、ID1,ID2,…を受け付けて、ID記憶部140に登録済であるか否かを確認していく。このとき、探索文書インデックスIsの値は、特定された範囲の最初の紙文書の順番を表す値「1」から順に、IDの読み取りのたびに1ずつ増加させていけばよい。登録済でないIDが発見されると、当該IDをID一時記憶部160に登録することなく、ID記憶部140の該当する順番(つまり、現在の探索文書インデックスIsの値)に関連付けて登録する。例えば、図3を参照する上述の具体例の場合、ID1から順にIDの読み取りを行って最初に発見される、登録済でないIDは、ID9であり、ID9が受け付けられた時点での探索文書インデックスIsの値は「9」である。このID9とIsの値「9」との組に対し、図8の例のステップS88と同様の処理により、ID記憶部140において、順番「9」以降の登録済のIDの順番を1ずつ後にずらした上で、順番「9」に関連付けてID9を登録する。さらに、ID9の紙文書の次の紙文書のID10を読み取りさせてID記憶部140に登録済であることを確認し、その次の紙文書のID11(特定された範囲の最後の紙文書)を読み取りさせてID記憶部140に登録済でないことから、ID記憶部140において、ID11に対応する順番「11」の位置に挿入してID11を登録する。その後、シーケンシャルモードの処理からスキップモードの処理に戻り、入力漏れが発生している範囲のさらなる検索を行う。本変形例では、スキップモードの処理において特定された範囲の最初の紙文書から順にIDがID記憶部140に登録済であるか否かを確認するため、登録済でないIDが発見された時点で、当該IDの紙文書よりも前の順番の紙文書については、ID記憶部140においてIDと順番との組合せのずれが生じていないことになる。このため、本変形例では、ID一時記憶部160への登録を省略して、登録済でないIDの発見の時点でID記憶部140への登録を行ってよい。
以上で説明したクライアント端末10は、典型的には、汎用のコンピュータにて上述のクライアント端末10の各部の機能または処理内容を記述したプログラムを実行することにより実現される。コンピュータは、例えば、ハードウエアとして、図7に示すように、CPU(中央演算装置)80、メモリ(一次記憶)82、各種I/O(入出力)インタフェース84等がバス86を介して接続された回路構成を有する。また、そのバス86に対し、例えばI/Oインタフェース84経由で、HDD(ハードディスクドライブ)88やCDやDVD、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体を読み取るためのディスクドライブ90が接続される。このようなドライブ88または90は、メモリに対する外部記憶装置として機能する。実施形態の処理内容が記述されたプログラムがCDやDVD等の記録媒体を経由して、またはネットワーク経由で、HDD88等の固定記憶装置に保存され、コンピュータにインストールされる。固定記憶装置に記憶されたプログラムがメモリに読み出されCPUにより実行されることにより、実施形態の処理が実現される。サーバ30についても同様である。