以下に、本願の開示する単価設定装置、単価設定方法及び単価設定プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
[販売管理装置の構成]
図1は、実施例1に係る販売管理装置の機能的構成を示すブロック図である。図1に示す販売管理装置10は、商品の受注、出荷、売上、発注、入荷や仕入といった販売管理を行うものである。とりわけ、販売管理装置10は、単価マスタ16に既に定義された適用期間へ新たに単価が指定された適用期間を挿入する更新を実行した上で、単価の適用を受ける基準日が当該更新された適用期間に該当する商品を取引の対象とする伝票に商品の単価を再設定させる単価設定サービスを提供する。
かかる販売管理装置10の一態様としては、上記の単価設定サービスを提供するWebサーバとして実装することとしてもよいし、また、アウトソーシングによって上記の単価設定サービスを提供するクラウドとして実装することもできる。他の一態様としては、パッケージソフトウェアやオンラインソフトウェアとして提供される単価設定プログラムを所望のコンピュータにプリインストール又はインストールさせることによっても実装できる。なお、本実施例では、食品店や青果店等から仕入れた商品をスーパーマーケット等の小売店へ販売する卸売業者が有するサーバ装置上で上記の単価設定プログラムを動作させる場合を想定して以下の説明を行う。
図1に示す販売管理装置10は、所望のネットワークを介して、クライアント端末30と相互に通信可能に接続される。かかるネットワークには、有線または無線を問わず、インターネット(Internet)、LAN(Local Area Network)やVPN(Virtual Private Network)などの任意の種類の通信網を採用できる。
クライアント端末30は、上記の単価設定サービスの提供を受けるコンピュータである。例えば、クライアント端末30は、卸売業に携わる関係者によって使用される。かかるクライアント端末30の一態様としては、パーソナルコンピュータを始めとする固定端末の他、携帯電話機、PHS(Personal Handyphone System)やPDA(Personal Digital Assistants)などの移動体端末も採用できる。
図1に示すように、販売管理装置10は、通信I/F(interface)部11と、記憶部13と、制御部17とを有する。なお、販売管理装置10は、図1に示した機能部以外にも既知のコンピュータが有する各種の機能部、例えば各種の入出力デバイスなどを有することとしてもかまわない。
通信I/F部11は、他の装置、例えばクライアント端末30との間で通信制御を行うインタフェースである。かかる通信I/F部11の一態様としては、LANカードなどのネットワークインタフェースカードを採用できる。例えば、通信I/F部11は、クライアント端末30から各種伝票の閲覧要求や単価マスタの更新要求を受け付けたり、伝票画面や商品の単価設定の結果をクライアント端末30へ通知したりする。
記憶部13は、制御部17で実行されるOS(Operating System)や単価設定プログラムなどの各種プログラムを記憶する記憶デバイスである。記憶部13の一態様としては、フラッシュメモリなどの半導体メモリ素子、ハードディスク、光ディスクなどの記憶装置が挙げられる。また、記憶部13は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
記憶部13は、制御部17で実行されるプログラムに用いられるデータの一例として、更新履歴情報13a、伝票情報13b及びマスタデータ14などを記憶する。なお、上記の更新履歴情報13a、伝票情報13b及びマスタデータ14以外にも、販売管理に関する電子データ、例えば在庫、入出庫や棚卸などに関するデータを併せて記憶することもできる。
このうち、更新履歴情報13aは、単価マスタ16の更新に関する履歴データである。一例として、更新履歴情報13aには、マスタ更新部17bによって単価マスタ16が更新された場合に、当該更新に関する履歴がマスタ更新部17bによって登録される。他の一例として、更新履歴情報13aは、伝票に設定された商品の単価が単価マスタ16の更新前の単価を用いて設定されたものであるのか否かを判別するために、後述の再設定指示受付部17dによって参照される。
かかる更新履歴情報13aの一態様としては、履歴ID(identification)、マスタ種別コード、取引先コード、取引先単価グループ、納入先コード、商品コード、適用期間や単価などの項目が対応付けられたデータを採用できる。ここで言う「履歴ID」は、更新履歴を識別する識別子を指す。また、「マスタ種別コード」は、単価マスタの種別を識別するコードを指し、ここでは、複数の単価マスタのうち更新が実行された単価マスタを意味する。また、「取引先コード」は、販売先または仕入先などの取引先を識別するコードを指す。また、「商品単価グループ」は、一定の共通性を持つ品目の商品をシリーズにまとめた品目のグループを指し、シリーズ品目とも呼ばれる。また、「納入先コード」は、取引先へ納入する納入先を識別するコードを指す。また、「商品コード」は、商品を識別するコードを指す。また、「数量」は、取引の対象とする商品の数量を指し、例えば、販売する商品の数量や仕入する商品の数量を意味する。また、「適用期間」は、単価マスタ16に定義された単価が適用される期間を指し、ここでは、単価マスタ16への挿入が指定された適用期間を意味する。例えば、適用期間は、単価の適用を開始する開始日および単価の適用を終了する終了日によって規定することができる。なお、上記の項目以外にも、単価マスタ16が更新された日時などの他の項目を設けることとしてもよい。また、上記の各種の項目は、全ての項目が必須のものではない。例えば、伝票へ商品の単価設定に1つの単価マスタが使用される場合には、必ずしもマスタ種別コードは必要ない。また、取引先コード、取引先単価グループ、納入先コード及び商品コード等の項目のうちマスタ種別コードに対応する単価マスタ16に存在しない項目には、必ずしも値が登録されているとは限らない。
伝票情報13bは、各種の伝票に関するデータである。かかる伝票の一例としては、見積、受注、出荷や売上などの販売業務に関する伝票の他、発注、入荷や仕入などの購買業務に関する伝票が挙げられる。
上記の伝票情報13bの一態様としては、伝票番号、取引先コード、納入先コード、商品コード、数量、基準日やマスタ種別コードなどの項目が対応付けられたデータを採用できる。ここで言う「伝票番号」は、伝票を識別する番号を指し、例えば、販売業務に含まれる一連のプロセス、すなわち見積、受注、出荷や売上などの間で共通して使用される。また、「基準日」は、会計の基準とする日付を指し、例えば、商品を受注した受注日、商品を出荷する出荷日、商品を納入する納入日や納入した商品が検収される検収日、商品の売上が確定する売上日などの業務日が挙げられる。ここでは、上記の基準日は、単価マスタ16に定義された商品の単価のうちいずれの適用期間に対応付けられた単価の適用を受けるのかを特定するために用いられる。なお、上記の「基準日」は、伝票、商品、取引先、納入先、数量などの違いによって上述した受注日、出荷日、納入日、検収日や売上日などの業務日のうちいずれを採用するかを任意に設定することができ、また、任意の契機で日付を変更したり、業務日の種別を変更したりすることもできる。
マスタデータ14は、卸売業の販売管理で用いられる各種のマスタデータである。例えば、図1に示すように、上記のマスタデータ14には、商品マスタ15a、得意先マスタ15b、仕入先マスタ15c、システムマスタ15dの他、単価マスタ16が含まれる。なお、以下では、伝票に販売単価を設定する場合を例示するが、以降に例示する単価マスタ16に定義されている得意先である取引先を仕入先としたときの値に他の項目の値を変更することによって仕入単価を伝票に設定する場合にも同様に適用できる。
このうち、商品マスタ15aは、商品が定義されたマスタデータである。かかる商品マスタ15aの一態様としては、商品コード、商品単価グループ及び単価設定が対応付けられたデータを採用できる。図2は、商品マスタ15aの構成例を示す図である。図2の例では、商品コード「101010」及び商品コード「101015」の商品は、いずれもお菓子に分類され、単価マスタ16に定義された単価に掛率を乗じることなく、単価がそのまま採用されることを意味する。また、図2に示す商品コード「101020」の商品は、冷食に分類され、単価マスタ16に定義された単価に掛率を乗じることなく、単価がそのまま採用されることを意味する。さらに、図2に示す商品コード「101030」の商品は、その他に分類され、単価マスタ16に定義された単価をそのまま採用せずに、掛率を乗算してから採用することを意味する。
得意先マスタ15bは、卸売業者から販売する商品を購買する取引先、いわゆる得意先が定義されたマスタデータである。かかる得意先マスタ15bの一態様としては、取引先コード、取引先単価グループ及び単価決定情報が対応付けられたデータを採用できる。ここで言う「取引先単価グループ」は、一定の共通性を持つ取引先をまとめたグループを指し、ここでは、得意先のグループを意味する。また、「単価決定情報」は、商品の単価を決定する場合に使用される各種の情報を指す。かかる「単価決定情報」には、単価の決定方法が区分された「単価決定区分」が含まれる。例えば、単価決定区分は、卸売業者の関係者による手入力で単価が取得される区分「1」と、単価マスタ16に対する検索を実行することによって単価が取得される区分「9」とに大別される。また、「単価決定情報」には、得意先の単価に掛率を適用する場合の「単価掛率」が含まれる。さらに、「単価決定情報」には、取引先別に単価が区別された「取引先別単価」、商品別および数量別に単価が区別された「商品別数量別単価」及び前回に商品を納入した時の単価である「前回納入単価」のうちいずれの単価種別に対応する単価マスタ16から検索を開始するかの順序が定められた「単価検索順」などが含まれる。
図3は、得意先マスタ15bの構成例を示す図である。図3の例では、取引先コード「10101」および取引先コード「10201」の得意先は、いずれも取引先単価グループ「スーパー○○」に分類されていることを示す。また、図3の例では、取引先コード「20101」および取引先コード「30101」の得意先は、いずれも取引先単価グループが未設定であることを示す。さらに、図3の例では、取引先コード「10101」、取引先コード「10201」及び取引先コード「30101」の得意先に単価決定区分「9」が適用されることを示す。この場合には、単価マスタ16に対する検索を実行することによって単価が取得される。一方、図3の例では、取引先コード「20101」の得意先に単価決定区分「1」が適用されることを示す。この場合には、単価マスタ16に対する検索を実行せずに、クライアント端末30を使用する関係者によって単価が手入力で設定されることになる。なお、図3に示す単価検索順の説明については、図5に示すシステムマスタ15dに説明をあずける。
仕入先マスタ15cは、卸売業者に商品を販売する取引先、いわゆる仕入先が定義されたマスタデータである。かかる仕入先マスタ15cの一態様としては、取引先コード、取引先単価グループ及び単価決定情報が対応付けられたデータを採用できる。図4は、仕入先マスタ15cの構成例を示す図である。図4の例では、取引先コード「50101」および取引先コード「60201」の仕入先は、いずれも取引先単価グループ「○○食品」に分類されていることを示す。また、図4の例では、取引先コード「70101」および取引先コード「80101」の仕入先は、いずれも取引先単価グループ「○△青果」に分類されていることを示す。さらに、図4の例では、取引先コード「50101」、取引先コード「60201」及び取引先コード「70101」の仕入先に単価決定区分「9」が適用されることを示す。この場合には、単価マスタ16に対する検索を実行することによって単価が取得される。一方、図4の例では、取引先コード「80101」の得意先に単価決定区分「1」が適用されることを示す。この場合には、単価マスタ16に対する検索を実行せずに、クライアント端末30を使用する関係者によって単価が手入力で設定されることになる。なお、図4に示す単価検索順の説明についても、図5に示すシステムマスタ15dに説明をあずける。
システムマスタ15dは、単価設定システムが実行する単価マスタ16の検索によって取得される単価種別が定義されたマスタデータである。かかるシステムマスタ15dの一態様としては、単価種別及び単価優先順位が対応付けられたデータを採用できる。ここで言う「単価種別」は、単価を区別する基準とする項目の種別を指し、例えば、取引先別に単価が区別された「取引先別単価」、商品別および数量別に単価が区別された「商品別数量別単価」、さらには、前回に商品を納入した履歴別に単価が区別された「前回納入単価」などが含まれる。また、「単価優先順位」は、単価検索順序が優先される順位を指す。
図5は、システムマスタ15dの構成例を示す図である。図5に示すように、単価優先順位が「取引先別単価」、「商品別数量別単価」、「前回納入単価」の順に設定されている。これは、単価検索順が「50」である場合には、「取引先別単価」に対応する単価マスタ16から検索が開始され、単価の取得に失敗した場合には「商品別数量別単価」に対応する単価マスタ16への検索が実行され、それでも単価の取得に失敗した場合には「前回納入単価」に対応する単価マスタ16への検索が実行されることを意味する。また、単価検索順が「60」である場合には、「取引先別単価」に対応する単価マスタ16には検索が実行されず、「商品別数量別単価」に対応する単価マスタ16から検索が開始され、単価の取得に失敗した場合には「前回納入単価」に対応する単価マスタ16への検索が実行されることを意味する。さらに、単価検索順が「70」である場合には、「取引先別単価」及び「商品別数量別単価」に対応する単価マスタ16には検索が実行されず、「前回納入単価」に対応する単価マスタ16への検索だけが実行されることを示す。
単価マスタ16は、単価が定義されたマスタデータである。例えば、上記の単価マスタ16には、取引先別に単価が区別された単価種別「取引先別単価」に対応する単価マスタ16として、第1グループの単価マスタ16a〜16cが含まれる。
このうち、単価マスタ16aは、取引先単価グループ別及び商品別に単価が定義されたマスタデータである。かかる単価マスタ16aの一態様としては、取引先単価グループ、商品コード、適用期間、契約単価および契約掛率が対応付けられたデータを採用できる。図6は、取引先単価グループ別及び商品別の単価マスタ16aの構成例を示す図である。図6の例では、伝票に設定された取引先単価グループが「スーパー○○」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/3/1〜2012/3/31」内である場合には、1100円が単価として検索される。一方、伝票に設定された取引先単価グループが「スーパー○○」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/4/1〜9999/99/99」内である場合には、900円が単価として検索される。
単価マスタ16bは、取引先別及び商品別に単価が定義されたマスタデータである。かかる単価マスタ16bの一態様としては、取引先コード、商品コード、適用期間、契約単価および契約掛率が対応付けられたデータを採用できる。図7は、取引先別及び商品別の単価マスタ16bの構成例を示す図である。図7の例では、伝票に設定された取引先コードが「10101」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/3/1〜2012/3/31」内である場合には、1100円が単価として検索される。一方、伝票に設定された取引先コードが「10101」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/4/1〜9999/99/99」内である場合には、1000円が単価として検索される。
単価マスタ16cは、取引先別、納入先別及び商品別に単価が定義されたマスタデータである。かかる単価マスタ16cの一態様としては、取引先コード、納入先コード、商品コード、適用期間、契約単価および契約掛率が対応付けられたデータを採用できる。図8は、取引先別、納入先別及び商品別の単価マスタ16cの構成例を示す図である。図8の例では、伝票に設定された取引先コードが「10101」であり、納入先コードが「A店」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/3/1〜2012/3/31」内である場合には、1100円が単価として検索される。一方、伝票に設定された取引先コードが「10101」であり、納入先コードが「A店」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/4/1〜9999/99/99」内である場合には、900円が単価として検索される。
また、上記の単価マスタ16には、商品別および数量別に単価が区別された単価種別「商品別数量別単価」に対応する単価マスタ16として、第2グループの単価マスタ16d〜16eが含まれる。
このうち、単価マスタ16dは、取引先単価グループ別、商品別及び数量別に単価が定義されたマスタデータである。かかる単価マスタ16dの一態様としては、取引先単価グループ、商品コード、適用期間、数量下限、数量上限、契約単価および契約掛率が対応付けられたデータを採用できる。図9は、取引先単価グループ別、商品別及び数量別の単価マスタ16dの構成例を示す図である。図9の例では、伝票に設定された取引先単価グループが「スーパー○○」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/4/1〜9999/99/99」内である場合には、各々異なる単価が検索される。すなわち、伝票に設定された商品の数量、例えば受注数量、出荷数量、納品数量や検収数量が999個以下であるか、1000個以上4999個以下であるか、あるいは5000個以上9999個以下であるのかによって検索結果が変わる。例えば、伝票に設定された商品の数量が999個以下である場合には、1100円が単価として検索される。また、伝票に設定された商品の数量が1000個以上4999個以下である場合には、1050円が単価として検索される。また、伝票に設定された商品の数量が5000個以上9999個以下である場合には、1000円が単価として検索される。
単価マスタ16eは、取引先別、商品別及び数量別に単価が定義されたマスタデータである。かかる単価マスタ16eの一態様としては、取引先コード、商品コード、適用期間、数量下限、数量上限、契約単価および契約掛率が対応付けられたデータを採用できる。図10は、取引先別、商品別及び数量別の単価マスタ16eの構成例を示す図である。図10の例では、伝票に設定された取引先コードが「10101」であり、商品コードが「101010」であり、かつ基準日が適用期間「2012/4/1〜9999/99/99」内である場合には、各々異なる単価が検索される。すなわち、上記の図9の例と同様に、伝票に設定された商品の数量が999個以下である場合には、1100円が単価として検索される。また、伝票に設定された商品の数量が1000個以上4999個以下である場合には、1050円が単価として検索される。また、伝票に設定された商品の数量が5000個以上9999個以下である場合には、1000円が単価として検索される。
また、上記の単価マスタ16には、前回に商品を納入した履歴別に単価が区別された単価種別「前回納入単価」に対応する単価マスタ16として、第3グループの履歴単価マスタ16fが含まれる。
履歴単価マスタ16fは、商品を納入した時の履歴が採取されたマスタデータである。かかる履歴単価マスタ16fの一態様としては、取引先コード、納入先コード、商品コード、伝票日付、販売単価、仕入単価および発生日時が対応付けられたデータを採用できる。図11は、取引先別、納入先別及び商品別の履歴単価マスタ16fの構成例を示す図である。図11の例では、上から1番目のレコードと上から2番目のレコードとの間で取引先コード、納入先コードおよび商品コードの値が共通する。ここで、上から2番目のレコードの方が上から1番目のレコードよりも伝票日付が新しい。このため、販売単価の場合には1050円が検索される一方で、仕入単価の場合には1000円が検索される。
制御部17は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部17は、図1に示すように、指定受付部17aと、マスタ更新部17bと、伝票処理部17cと、再設定指示受付部17dと、単価設定部17eとを有する。
指定受付部17aは、単価マスタ16の適用期間の範囲内に新たに挿入する適用期間及び単価の指定を受け付ける処理部である。一態様としては、指定受付部17aは、クライアント端末30から単価マスタ16の更新要求を受け付けた場合に、複数の単価マスタ16a〜16fのうち更新対象とする単価マスタ16のマスタ種別コードの指定を受け付ける。その後、指定受付部17aは、更新対象とする単価マスタ16のマスタ種別コードを受け付けると、当該マスタ種別コードに対応する単価マスタ16とともに、適用期間及び単価の指定可能な画面をクライアント端末30に表示させる。例えば、指定受付部17aは、クライアント端末30の表示部上に指定の単価マスタ16をテーブル形式等で表示させるとともに、単価マスタ16の適用期間の範囲内に新たに挿入する適用期間の開始日及び終了日と単価とを入力可能なフォームまたはこれらを選択可能なプルダウンメニュー等を表示させる。このとき、指定受付部17aは、単価マスタ16に含まれるレコードのうちいずれのレコードを更新対象とするのかを一意に特定するために必要な事項を入力可能または選択可能なGUIを併せて表示させる。例えば、図7に示した取引先別及び商品別の単価マスタ16bの場合には、適用期間の他にも、取引先コードや商品コードを併せて受け付ける必要がある。この場合には、指定受付部17aは、取引先コード及び商品コードを入力可能なフォームまたはこれらを選択可能なプルダウンメニュー等をクライアント端末30に表示させる。かかる表示によって、クライアント端末30から適用期間の開始日及び終了日の指定と単価の指定とを受け付ける。
マスタ更新部17bは、単価マスタ16の更新制御を実行する処理部である。一態様としては、マスタ更新部17bは、適用期間を始め、必要事項を検索キーとし、単価マスタ16に定義された適用期間のうち指定を受け付けた適用期間が挿入されるレコードを検索する。そして、マスタ更新部17bは、検索結果として得られたレコードの適用期間に対し、指定を受け付けた適用期間の開始日及び終了日を境界に当該挿入される適用期間を分断する更新を実行する。すなわち、マスタ更新部17bは、指定を受け付けた適用期間の挿入によって分断される適用期間の開始日と、指定を受け付けた適用期間の開始日の前日とによって区切られる期間を適用期間とする新たなレコードを生成する。さらに、マスタ更新部17bは、指定を受け付けた適用期間の終了日の翌日と、指定を受け付けた適用期間の挿入によって分断される適用期間の終了日とによって区切られる期間を適用期間とする新たなレコードを生成する。その上で、マスタ更新部17bは、先の分断によって新たに生成された2つのレコードには分断前に定義されていた単価を対応付けるとともに、指定を受け付けた適用期間に指定を受け付けた単価を対応付けたレコードを生成する。このとき、新たなに生成された3つのレコード間では、適用期間は互いに異なるものの、それ以外の単価を除く項目は元のレコードの値がコピーされる。
図12は、単価マスタ16の更新方法の一例を示す図である。図12の例では、図7に示した単価マスタ16b、すなわち取引先別及び商品別の単価マスタ16bが更新される場合を想定している。例えば、クライアント端末30から取引先コード「20101」、商品コード「101020」、適用期間「2011/4/1〜2012/3/31」、契約単価「1000」を受け付けたこととする。
この場合には、適用期間「2011/4/1〜2012/3/31」を始め、取引先コード「20101」、商品コード「101020」及び契約単価「1000」を検索キーとし、単価マスタ16bを検索する。この結果、図12の上段に示す単価マスタ16bのうち上から3番目のレコードが指定を受け付けた適用期間が挿入されるレコードとして特定される。すると、指定を受け付けた適用期間「2011/4/1〜2012/3/31」の挿入によって分断される適用期間の開始日「1999/1/1」と、指定を受け付けた適用期間の開始日の前日「2011/3/31」とによって区切られる期間を適用期間とする新たなレコード、すなわち図12の下段に示す単価マスタ16bのうち上から3番目のレコード(濃い塗り潰し)が生成される。さらに、指定を受け付けた適用期間の終了日の翌日「2012/4/1」と、指定を受け付けた適用期間の挿入によって分断される適用期間の終了日「9999/99/99」とによって区切られる期間を適用期間とする新たなレコード、すなわち図12の下段に示す単価マスタ16bのうち上から5番目のレコード(濃い塗りつぶし)を生成する。その上で、先の分断によって新たに生成された2つのレコードには分断前に定義されていた単価「900」を対応付けるとともに、指定を受け付けた適用期間に指定を受け付けた単価を対応付けたレコード、すなわち図12の下段に示す単価マスタ16bのうち上から4番目のレコード(薄い塗りつぶし)を生成する。このとき、新たなに生成された3つのレコード間では、適用期間は互いに異なるものの、それ以外の単価を除く取引先コード及び商品コードは元のレコードの値「20101」及び「101020」がコピーされて引き継がれる。これによって、既に適用期間が定義された期間の商品の単価であっても動的に更新することが可能になる。
単価マスタ16bを更新後には、履歴IDが採番され、先に生成された3つのレコードのうち更新要求を受け付けて生成したレコード、すなわち上から4番目のレコード(薄い塗りつぶし)に含まれる適用期間「2011/4/1〜2012/3/31」、取引先コード「20101」、商品コード「101020」及び契約単価「1000」とともに、単価マスタ16bを示すマスタ種別コードを対応付けた更新履歴情報13aが生成された上で記憶部13へ登録される。このように、単価マスタ13bが更新された場合には、更新履歴情報13aに取引先単価グループ、納入先コード、商品単価グループ及び数量などの項目には値が設定されない。
伝票処理部17cは、伝票に関する各種の処理を実行する処理部である。一態様としては、伝票処理部17cは、クライアント端末30から伝票番号を含む伝票の検索要求を受け付けた場合に、伝票情報13bに含まれる伝票のうち検索要求を受け付けた伝票番号と同一の伝票番号を持つ伝票を検索する。そして、伝票処理部17cは、検索結果として得られた伝票を編集可能な伝票画面をクライアント端末30に表示させる。このようにして伝票画面が表示されると、クライアント端末30で表示された伝票画面上で記入事項、例えば取引先コードや納入先コードなどの得意先情報、商品コードや数量などの取引内容情報の他、基準日情報が受け付けられる。かかる基準日情報の一例としては、受注日、出荷日、納品日や検収日などの業務日の他、いずれの業務日を基準日に採用するのかを示す基準日設定などが挙げられる。
図13は、伝票画面の一例を示す図である。図13には、一例として、受注伝票画面200を図示している。かかる受注伝票画面200の上部にレイアウトされたテキストボックス210に伝票番号が入力された状態で照会ボタン220が押下されると、その下部に「得意先情報」及び「基準日情報」を表示する表示領域230が表示される。この表示領域230に表示された「得意先情報」のタブ230Aが選択された状態では、取引先コードや納入先コードを入力可能なフォームが表示される。また、「基準日情報」のタブ230Bが選択された状態では、受注日、出荷予定日、納品予定日や検収予定日などの業務日を入力可能なフォームが表示される他、いずれの業務日を基準日に採用するのかを示すラジオボタン等の選択肢が表示される。さらに、表示領域230の下部には、商品コードや受注数量などを入力可能なテーブルが表示される。また、受注伝票画面200の右上に表示された伝票種別のプルダウンメニュー240から他の伝票、例えば見積伝票、出荷伝票、検収伝票や売上伝票などの他の種別の伝票画面を呼び出すことができる。このような受注伝票画面200上で記入事項、例えば取引先コードや納入先コードなどの得意先情報、商品コードや数量などの取引内容情報の他、基準日情報が受け付けられる。その後、受注伝票画面200に表示された登録ボタン250が押下されると、受注伝票画面200に入力されていた各種の情報が伝票情報13bとして記憶部13へ登録される。
その後、伝票処理部17cは、クライアント端末30に表示された伝票画面上で伝票の登録操作が実行された場合に、基準日が変更されたか否か、例えば伝票画面上で日付の再変更や業務日の再選択が行われたか否かを判定する。このとき、基準日が変更されていない場合には、伝票処理部17cは、当該伝票に単価が未設定であるか否かを判定する。このとき、単価が設定済みである場合には、伝票画面上での入力によって単価が変動しないことが判別できる。この場合には、単価マスタ16の更新によって単価が変動しているか否かを判別するために、伝票処理部17cは、当該伝票に設定されている基準日を始め、取引先コード、納入先コード、商品コード、商品単価グループおよび数量などの伝票情報を再取得指示受付部17dへ出力する。
また、基準日が変更された場合には、単価の適用を受ける適用範囲が変化するのに伴って商品の単価も変動する可能性がある。この場合には、伝票処理部17cは、登録操作がなされた伝票が単価の設定条件を満たすか否かを判定する。一例としては、伝票処理部17cは、基準日が「受注日」に設定されている場合には、受注の業務が完了しているか否かを判定する。他の一例としては、伝票処理部17cは、基準日が「出荷日」に設定されている場合には、出荷の業務が完了しているか否かを判定する。このように、基準日として設定された販売業務のプロセスが完了している場合には、伝票処理部17cは、当該伝票に商品の単価を設定する指示を単価設定部17eへ出力する。
一方、伝票処理部17cは、単価が未設定である場合には、当該伝票の基準日が空欄、すなわちブランクであるか否かを判定する。このとき、伝票処理部17cは、基準日がブランクである場合には、基準日の入力を促す画面表示を行って基準日の設定を受け付ける。このように基準日の設定を受け付けた場合にも、伝票処理部17cは、登録操作がなされた伝票が単価の設定条件を満たすか否かを判定する。このとき、伝票情報が単価の設定条件を満たしている場合には、伝票処理部17cは、当該伝票に商品の単価を設定する指示を単価設定部17eへ出力する。
再設定指示受付部17dは、更新履歴情報13aを用いて、伝票に商品の単価を再設定する再設定指示を受け付ける処理部である。一態様としては、再設定指示受付部17dは、更新履歴情報13aに含まれるレコードのうち、伝票に単価が設定されたマスタ種別コード、すなわち単価設定時に使用された単価マスタ16を表すコードと一致するレコードを抽出する。そして、再設定指示受付部17dは、マスタ種別コードに対応する単価マスタ16が有する項目を対象に、先に抽出した更新履歴情報13aのレコードのうち伝票処理部17cによって出力された伝票情報の各項目との間で値が一致するレコードを抽出する。その上で、再設定指示受付部17dは、伝票処理部17cによって出力された基準日が更新履歴情報13aのレコードに含まれる適用期間の範囲内であるか否かを判定する。このとき、基準日が適用期間の範囲内である場合には、伝票に設定された単価が単価マスタ16の更新前の単価を用いて設定されたものであると判別できる。よって、再設定指示受付部17dは、伝票への単価の再設定を促す通知を行って再設定指示を受け付ける。このとき、再設定指示を受け付けた場合には、再設定指示受付部17dは、伝票に単価を再設定する指示を単価設定部17eへ出力する。なお、ここでは、再設定指示を受け付けることを条件に、単価の再設定を実行させる場合を例示したが、基準日が適用期間の範囲内である場合に、単価の再設定を自動的に実行させることとしてもかまわない。
単価設定部17eは、伝票に単価を設定する処理部である。一態様としては、単価設定部17eは、基準日として設定された販売業務のプロセスが完了している場合には、伝票に単価を設定する。また、単価設定部17eは、伝票処理部17cによって出力された基準日が先に抽出した更新履歴情報13aのレコード情報に含まれる適用期間の範囲内である場合に、伝票に単価を再設定する。なお、単価の設定も単価の再設定も処理が起動される条件が異なるだけで処理の内容は同様である。
かかる単価の設定方法について説明すると、単価設定部17eは、得意先マスタ15bに含まれるレコードのうち、伝票に設定されている取引先コードに対応するレコードを取得する。そして、単価設定部17eは、先に取得した得意先マスタ15bのレコードに含まれる単価決定区分の値が「9」であるか否かを判定する。このとき、単価設定部17eは、単価決定区分の値が「9」でない場合、すなわち単価決定区分の値が「1」である場合には、伝票に単価を手入力で設定させる。
一方、単価設定部17eは、単価決定区分の値が「9」である場合には、先に取得した得意先マスタ15bのレコードに含まれる単価検索順の値が「70」であるか否かを判定する。このとき、単価設定部17eは、単価検索順の値が「70」でない場合には、単価検索順の値が「60」であるか否かをさらに判定する。
ここで、単価設定部17eは、単価検索順の値が「70」及び「60」のいずれでもない場合には、取引先別に単価が区別された単価種別「取引先別単価」に対応する第1グループの単価マスタ16a〜16cの検索を開始する。このとき、単価設定部17eは、取引先別、納入先別及び商品別の単価マスタ16c、取引先別及び商品別の単価マスタ16b、取引先単価グループ別及び商品別の単価マスタ16aの順に単価の検索を実行する。
これを具体的に説明すると、単価設定部17eは、取引先別、納入先別及び商品別の単価マスタ16cから、伝票に設定された取引先コード、納入先コード及び商品コードと値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードを検索する。このとき、単価マスタ16cからのレコードの取得に失敗した場合には、単価設定部17eは、取引先別及び商品別の単価マスタ16bから、伝票に設定された取引先コード及び商品コードと値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードをさらに検索する。そして、単価マスタ16bからのレコードの取得に失敗した場合には、単価設定部17eは、取引先単価グループ別及び商品別の単価マスタ16aから、伝票に設定された取引先単価グループ及び商品コードと値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードをさらに検索する。
ここで、単価マスタ16c、単価マスタ16bまたは単価マスタ16aのいずれかの単価マスタ16からのレコードの取得に成功した場合には、当該単価マスタ16から取得されたレコードに含まれる契約単価が伝票に設定される。例えば、伝票に取引先コード「10101」、取引先単価グループ「スーパー○○」、納入先コード「A店」及び商品コード「101010」及び基準日「2012/4/23」が設定されている場合を想定する。このとき、図8に示した単価マスタ16cを検索した場合には、上から2番目のレコードが取得されるので、伝票には、単価「900円」が設定されることになる。また、図7に示した単価マスタ16bを検索した場合には、上から2番目のレコードが取得されるので、伝票には、単価「1000円」が設定されることになる。また、図6に示した単価マスタ16aを検索した場合には、上から2番目のレコードが取得されるので、伝票には、単価「900円」が設定されることになる。
一方、単価設定部17eは、単価マスタ16c、単価マスタ16b及び単価マスタ16aのいずれの単価マスタ16からもレコードの取得に失敗した場合には、商品別および数量別に単価が区別された単価種別「商品別数量別単価」に対応する第2グループの単価マスタ16d〜16eの検索を開始する。このとき、単価設定部17eは、取引先別、商品別及び数量別の単価マスタ16e、取引先単価グループ別、商品別及び数量別の単価マスタ16dの順に単価の検索を実行する。なお、単価検索順の値が「60」であった場合には、第1グループの単価マスタ16a〜16cへの検索は実行されず、第2グループの単価マスタ16d〜16eの検索から開始される。
これを具体的に説明すると、単価設定部17eは、取引先別、商品別及び数量別の単価マスタ16eから、伝票に設定された取引先コード、商品コード及び数量と値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードを検索する。このとき、単価マスタ16eからのレコードの取得に失敗した場合には、単価設定部17eは、取引先単価グループ別、商品別及び数量別の単価マスタ16dから、伝票に設定された取引先単価グループ、商品コード及び数量と値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードをさらに検索する。
ここで、単価マスタ16eまたは単価マスタ16dのいずれかの単価マスタ16からのレコードの取得に成功した場合には、当該単価マスタ16から取得されたレコードに含まれる契約単価が伝票に設定される。例えば、伝票に取引先コード「10101」、取引先単価グループ「スーパー○○」、納入先コード「A店」及び商品コード「101010」及び基準日「2012/4/23」が設定されている場合を想定する。このとき、図10に示した単価マスタ16eを検索した場合には、上から1番目のレコードが取得されるので、伝票には、単価「1100円」が設定されることになる。また、図9に示した単価マスタ16dを検索した場合には、上から1番目のレコードが取得されるので、伝票には、単価「1100円」が設定されることになる。
一方、単価設定部17eは、単価マスタ16e及び単価マスタ16dのいずれの単価マスタ16からもレコードの取得に失敗した場合には、前回に商品を納入した履歴別に単価が区別された単価種別「前回納入単価」に対応する第3グループの履歴単価マスタ16fの検索を開始する。なお、単価検索順の値が「70」であった場合には、第1グループの単価マスタ16a〜16c及び第2グループの単価マスタ16d〜16eへの検索は実行されず、第3グループの単価マスタ16fの検索から開始される。
これを具体的に説明すると、単価設定部17eは、取引先別、納入先別及び商品別の履歴単価マスタ16fから、伝票に設定された取引先コード、納入先コード及び商品コードと値が同一であり、かつ伝票日付が最新であるレコードを検索する。このとき、単価マスタ16fからのレコードの取得に成功した場合には、当該単価マスタ16から取得されたレコードに含まれる契約単価が伝票に設定される。例えば、伝票に取引先コード「10101」、取引先単価グループ「スーパー○○」、納入先コード「A店」及び商品コード「101010」及び基準日「2012/4/23」が設定されている場合を想定する。このとき、図11に示した単価マスタ16fを検索した場合には、上から2番目のレコードが取得されるので、伝票には、単価「1050円」が設定されることになる。
一方、単価マスタ16fからのレコードの取得に失敗した場合には、単価設定部17eは、全ての単価マスタ16から単価の取得を失敗したことになるので、伝票に単価を手入力で設定させる。
なお、制御部17には、各種の集積回路や電子回路を採用できる。また、制御部17が有する機能部の一部を別の集積回路や電子回路とすることもできる。例えば、集積回路としては、ASIC(Application Specific Integrated Circuit)が挙げられる。また、電子回路としては、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などが挙げられる。
[処理の流れ]
続いて、本実施例に係る販売管理装置の処理の流れについて説明する。なお、ここでは、販売管理装置10によって実行される(1)販売管理処理について説明した後に、(2)単価設定処理について説明することとする。
(1)販売管理処理
図14は、実施例1に係る販売管理処理の手順を示すフローチャートである。この販売管理処理は、販売管理装置10の電源がON状態である限り、繰り返し実行される処理であり、クライアント端末30から伝票番号を含む伝票の検索要求を受け付けた場合に処理が起動される。
図14に示すように、伝票処理部17cは、伝票情報13bに含まれる伝票のうち検索要求を受け付けた伝票番号と同一の伝票番号を持つ伝票を検索した上でその検索結果として得られた伝票を編集可能な伝票画面をクライアント端末30に表示させる(ステップS101)。
そして、伝票処理部17cは、クライアント端末30で表示された伝票画面を介して、伝票の記入事項、例えば取引先コードや納入先コードなどの得意先情報、商品コードや数量などの取引内容情報の他、基準日情報を受け付ける(ステップS102)。
続いて、伝票処理部17cは、伝票画面上で伝票の登録操作がなされると、基準日が変更されたか否か、例えば伝票画面上で日付の再変更や業務日の再選択が行われたか否かを判定する(ステップS103)。
このとき、基準日が変更されていない場合(ステップS103否定)には、伝票処理部17cは、当該伝票に単価が未設定であるか否かを判定する(ステップS104)。そして、単価が未設定である場合(ステップS104肯定)には、伝票処理部17cは、当該伝票の基準日が空欄、すなわちブランクであるか否かを判定する(ステップS105)。
続いて、基準日がブランクである場合(ステップS105肯定)には、伝票処理部17cは、基準日の入力を促す画面表示を行って基準日の設定を受け付ける(ステップS106)。なお、基準日がブランクではない場合(ステップS105否定)には、上記のステップS106の処理をとばしてステップS107の処理へ移行する。
また、基準日が変更された場合(ステップS103肯定)には、単価の適用を受ける適用範囲が変化するのに伴って商品の単価も変動する可能性がある。この場合にも、ステップS104〜ステップS106までの処理をとばし、ステップS107の処理へ移行する。
その後、伝票処理部17cは、登録操作がなされた伝票が単価の設定条件を満たすか否かを判定する(ステップS107)。例えば、伝票処理部17cは、基準日が「受注日」に設定されている場合には、受注の業務が完了しているか否かを判定する。他の一例としては、伝票処理部17cは、基準日が「出荷日」に設定されている場合には、出荷の業務が完了しているか否かを判定する。
そして、伝票が単価の設定条件を満たす場合(ステップS107肯定)には、単価設定部17eは、伝票に単価を設定する「単価設定処理」を実行し(ステップS108)、伝票処理部17cに伝票に設定された伝票情報を記憶部13へ登録させ(ステップS109)、処理を終了する。
一方、伝票が単価の設定条件を満たさない場合(ステップS107否定)には、伝票処理部17cは、ステップS108の処理をとばし、伝票に設定された伝票情報を記憶部13へ登録し(ステップS109)、処理を終了する。
また、単価が設定済みである場合(ステップS104否定)には、再設定指示受付部17dは、更新履歴情報13aに含まれるレコードのうち伝票に単価が設定されたマスタ種別コードと一致するレコードであり、かつマスタ種別コードに対応する単価マスタ16が有する項目を対象に伝票処理部17cによって出力された伝票情報の各項目との間で値が一致するレコードに含まれる適用期間の範囲内に、伝票処理部17cによって出力された基準日が含まれるか否かを判定する(ステップS110)。
このとき、基準日が適用期間の範囲内である場合(ステップS110肯定)には、伝票に設定された単価が単価マスタ16の更新前の単価を用いて設定されたものであると判別できる。よって、再設定指示受付部17dは、伝票への単価の再設定を促す通知を行って再設定指示がなされるのを待機する(ステップS111)。
このとき、再設定指示を受け付けた場合(ステップS111肯定)には、単価設定部17eは、伝票に単価を設定する「単価設定処理」を実行し(ステップS108)、伝票処理部17cに伝票に設定された伝票情報を記憶部13へ登録させ(ステップS109)、処理を終了する。
一方、基準日が適用期間の範囲内でない場合、あるいは再設定指示が受け付けられなかった場合(ステップS110否定またはステップS111否定)には、伝票処理部17cは、伝票に設定された伝票情報を記憶部13へ登録し(ステップS109)、処理を終了する。
(2)単価設定処理
図15及び図16は、実施例1に係る単価設定処理の手順を示すフローチャートである。この単価設定処理は、図14に示したステップS108に対応する処理であり、ステップS107肯定、あるいはステップS111肯定の場合に処理が起動される。
図15に示すように、単価設定部17eは、得意先マスタ15bに含まれるレコードのうち、伝票に設定されている取引先コードに対応するレコードを取得する(ステップS301)。
そして、単価設定部17eは、ステップS301で取得した得意先マスタ15bのレコードに含まれる単価決定区分の値が「9」であるか否かを判定する(ステップS302)。なお、単価決定区分の値が「9」でない場合、すなわち単価決定区分の値が「1」である場合(ステップS302否定)には、単価設定部17eは、伝票に単価を手入力で設定させ(ステップS303)、処理を終了する。
一方、単価設定部17eは、単価決定区分の値が「9」である場合(ステップS302肯定)には、得意先マスタ15bのレコードに含まれる単価検索順の値が「70」であるか否かを判定する(ステップS304)。なお、単価検索順の値が「70」である場合(ステップS304肯定)には、下記のステップS305〜ステップS315までの処理をとばし、ステップS316の処理へ移行する。
このとき、単価検索順の値が「70」でない場合(ステップS304否定)には、単価設定部17eは、単価検索順の値が「60」であるか否かをさらに判定する(ステップS305)。なお、単価検索順の値が「60」である場合(ステップS305肯定)には、下記のステップS306〜ステップS311までの処理をとばし、ステップS312の処理へ移行する。
ここで、単価検索順の値が「60」でもない場合、すなわち単価検索順の値が「50」である場合(ステップS305否定)には、単価設定部17eは、取引先別、納入先別及び商品別の単価マスタ16cから、伝票に設定された取引先コード、納入先コード及び商品コードと値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードを検索する(ステップS306)。
このとき、単価マスタ16cからのレコードの取得に失敗した場合(ステップS307肯定)には、単価設定部17eは、取引先別及び商品別の単価マスタ16bから、伝票に設定された取引先コード及び商品コードと値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードをさらに検索する(ステップS308)。
そして、単価マスタ16bからのレコードの取得に失敗した場合(ステップS309肯定)には、単価設定部17eは、取引先単価グループ別及び商品別の単価マスタ16aから、伝票に設定された取引先単価グループ及び商品コードと値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードをさらに検索する(ステップS310)。
ここで、単価マスタ16c、単価マスタ16bまたは単価マスタ16aのいずれかの単価マスタ16からのレコードの取得に成功した場合(ステップS307否定、ステップS309否定またはステップS311否定)には、単価設定部17eは、当該単価マスタ16から取得されたレコードに含まれる契約単価を伝票に設定し(ステップS318)、処理を終了する。
また、単価マスタ16aからのレコードの取得にも失敗した場合(ステップS311肯定)には、単価設定部17eは、取引先別、商品別及び数量別の単価マスタ16eから、伝票に設定された取引先コード、商品コード及び数量と値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードを検索する(ステップS312)。
このとき、単価マスタ16eからのレコードの取得に失敗した場合(ステップS313肯定)には、単価設定部17eは、取引先単価グループ別、商品別及び数量別の単価マスタ16dから、伝票に設定された取引先単価グループ、商品コード及び数量と値が同一であり、かつ基準日が適用期間の範囲内に含まれるレコードをさらに検索する(ステップS314)。
ここで、単価マスタ16eまたは単価マスタ16dのいずれかの単価マスタ16からのレコードの取得に成功した場合(ステップS313否定またはステップS315否定)には、単価設定部17eは、当該単価マスタ16から取得されたレコードに含まれる契約単価を伝票に設定し(ステップS318)、処理を終了する。
一方、単価マスタ16dからのレコードの取得にも失敗した場合(ステップS315肯定)には、取引先別、納入先別及び商品別の履歴単価マスタ16fから、伝票に設定された取引先コード、納入先コード及び商品コードと値が同一であり、かつ伝票日付が最新であるレコードを検索する(ステップS316)。
このとき、単価マスタ16fからのレコードの取得に成功した場合(ステップS317肯定)には、単価設定部17eは、当該単価マスタ16から取得されたレコードに含まれる契約単価を伝票に設定し(ステップS318)、処理を終了する。
一方、単価マスタ16fからのレコードの取得に失敗した場合(ステップS317否定)には、単価設定部17eは、全ての単価マスタ16から単価の取得を失敗したことになるので、伝票に単価を手入力で設定させ(ステップS303)、処理を終了する。
[実施例1の効果]
上述してきたように、本実施例に係る販売管理装置10は、単価マスタ16の適用期間の範囲内に新たに挿入する適用期間及び単価の指定を受け付け、単価マスタ16に定義された適用期間のうち指定を受け付けた適用期間が挿入される適用期間に対し、指定を受け付けた適用期間の開始日及び終了日を境界に当該挿入される適用期間を分断する更新を実行するとともに、指定を受け付けた適用期間に指定を受け付けた単価を対応付ける更新を実行し、単価の適用を受ける基準日が指定を受け付けた適用期間に該当する商品を取引の対象とする伝票を対象に、伝票に商品の単価を再設定する再設定指示を受け付け、再設定指示を受け付けた場合に、単価マスタ16に定義された商品の単価のうち基準日が含まれる適用期間に対応付けられた商品の単価を伝票に設定する。
このため、本実施例に係る販売管理装置10では、既に適用期間が定義された期間の商品の単価であっても単価マスタを動的に更新できるので、商品の単価が設定された時点から時を経て商品の単価が不適切なものになっても単価を変更できる。さらに、本実施例に係る販売管理装置10では、伝票に設定された単価が単価マスタ16の更新前の単価を用いて設定されたものであれば、伝票に単価を再設定できる。したがって、販売管理装置10によれば、商品に適切な単価を設定することが可能である。