基本情報技術者 2017年 秋期 午後 問05
買上げ・入金管理システムを用いた月次集計処理に関する次の記述を読んで、設問1,2に答えよ。
E社は、10年以上の取引実績がある得意先とは、双方が合意した上で、得意先の買上げに対する支払を、1回の入金で行うことも、複数回の入金で行うことも許容した取引を行っている。得意先は、入金を、買上げ前にも、買上げ後にも行うことができる。E社の担当者は、得意先の買上げ及び入金が発生するたびに、買上げ・入金管理システムに記録している。毎月の最終営業日の取引終了後に、買上げ・入金管理システムを用いて月次集計処理を行っている。月次集計処理の概要は次のとおりである。
〔月次集計処理の概要〕
月次集計処理は月間買上げ額確定処理と消込み処理から成り、月間買上げ額確定処理の終了後に消込み処理を行う。
月間買上げ額確定処理は、得意先ごとに当月1か月分の買上げ金額を合計して、当月の買上げの合計額(以下、月間買上げ額という)を確定させる処理である。
消込み処理は、充当が完了していない月間買上げ額に対して、得意先からの入金を充当していく処理である。
E社の得意先との取引では、過去の月間買上げ額に対する充当が完了していない場合や、逆に得意先から入金された金額が、全ては月間買上げ額に充当されずに残っている場合がある。したがって、消込み処理では、充当が完了していない月間買上げ額に対して、買上げ年月の古い順に、まだ金額の全てを充当しきれていない入金を、入金日が古い順に充当していく。
〔買上げ・入金管理システムのデータベース〕
買上げ・入金管理システムでは、関係データベースの表で必要なデータを管理している。関係データベースのE-R図を図1に、各表の説明を表1に、主な表の属性の説明を表2に示す。


設問1:
問題文を見る 図1中のに入れる属性の組みとして適切な答えを、解答群の中から選べ。
aに関する解答群
ア:消込番号、月間買上げ番号
イ:消込番号、入金番号
ウ:得意先ID、消込番号
エ:得意先ID、月間買上げ番号
オ:得意先ID、入金番号
カ:入金番号、月間買上げ番号
模範解答
a:カ
解説
解答の導き方
図1の「消込」は、ある入金から、ある月間買上げに対して、いくら充当したかを記録する表です。つまり、消込の1レコードは「どの入金を、どの月間買上げに充当したか」を表します。
ここで、主キー(表の中でレコードを一つに決めるための項目)を考えます。図1では、入金の主キーは「入金番号」、月間買上げの主キーは「月間買上げ番号」です。これらを消込の外部キー(別の表のレコードを参照する項目)として使えば、消込のレコードがどの入金とどの月間買上げに関するものかを示せます。
入金と月間買上げの間には、どちらの側にも複数の相手があり得ます。本文には「複数回の入金」も許容するとあり、1つの月間買上げに複数の入金を充当できます。また、1つの入金を複数の月間買上げに分けて充当することも、消込み処理の内容から分かります。図1では、この関係を消込の表でつないでいます。
そのため、「入金番号」だけでは、どの月間買上げに充当したのかが分かりません。「月間買上げ番号」だけでも、どの入金から充当したのかが分かりません。両方を組み合わせれば、消込のレコードが示す入金と月間買上げの組合せを特定できます。したがって、選ぶ属性の組みは「入金番号」と「月間買上げ番号」であり、解答群ではカです。
誤りやすいポイント
- 「入金番号」だけ、または「月間買上げ番号」だけで消込のレコードを特定できると思うことがあります。どちらも複数の消込レコードに関係し得るため、片方だけでは組合せが分かりません。
- 「得意先ID」は、入金と月間買上げの両方からたどれます。同じ得意先について複数の入金や月間買上げがあり得るので、消込の対象となる組合せの特定には足りません。
- 「消込充当額」は金額を記録する属性です。どの入金とどの月間買上げの組合せなのかを示す属性とは役割が異なります。
FAQ
Q: なぜ入金と月間買上げの両方の番号が必要なのですか?
A: 消込では、「どの入金を、どの月間買上げに充当したか」を記録するためです。どちらか一方の番号だけでは、相手側を特定できません。
A: 消込では、「どの入金を、どの月間買上げに充当したか」を記録するためです。どちらか一方の番号だけでは、相手側を特定できません。
Q: 「入金」の「充当額」と「消込」の「消込充当額」は何が違いますか?
A: 「入金」の「充当額」は、その入金から月間買上げに充当した金額の合計です。「消込」の「消込充当額」は、特定の入金と特定の月間買上げの組合せに対して充当した金額です。
A: 「入金」の「充当額」は、その入金から月間買上げに充当した金額の合計です。「消込」の「消込充当額」は、特定の入金と特定の月間買上げの組合せに対して充当した金額です。
Q: 「得意先ID」も一緒に記録する必要はありませんか?
A: 図1の関係では、入金と月間買上げのそれぞれに得意先IDがあります。消込に入金番号と月間買上げ番号があれば、それぞれの表を通じて得意先を確認できます。
A: 図1の関係では、入金と月間買上げのそれぞれに得意先IDがあります。消込に入金番号と月間買上げ番号があれば、それぞれの表を通じて得意先を確認できます。
関連キーワード: 主キー、外部キー、複合主キー、関係データベース、1対多
設問2:
問題文を見る 図2は、消込み処理の流れ図である。次の記述及び図2中のに入れる適切な答えを、解答群の中から選べ。
図2中のαの部分では、入金表からbの条件を満たすレコードを、得意先IDの昇順、入金日の昇順に整列して取得する。消込み①の繰返し処理では、取得したレコードを順に処理する。βの部分では、消込み①の繰返しで処理中のレコードの得意先IDと同じ得意先IDをもつ月間買上げ表のレコードのうち、cの条件を満たすレコードを、dに整列して取得する。消込み②の繰返し処理では、取得したレコードを順に処理する。

bに関する解答群
ア:入金額 = 充当額
イ:入金額 > 充当額
ウ:入金額 < 充当額
エ:充当額 = 0
cに関する解答群
ア:月間買上げ額 > 0
イ:月間買上げ額 > 消込額
ウ:消込額 = 0
エ:消込額 > 0
オ:消込額 = 月間買上げ額
カ:消込額 > 月間買上げ額
dに関する解答群
ア:買上げ年月の降順
イ:買上げ年月の昇順
ウ:消込額の降順
エ:月間買上げ額の昇順
オ:得意先IDの昇順
e, fに関する解答群
ア:[月間買上げ].月間買上げ額 + [月間買上げ].消込額
イ:[月間買上げ].月間買上げ額 - [月間買上げ].消込額
ウ:[月間買上げ].消込額 - [月間買上げ].月間買上げ額
エ:[入金].入金額 + [入金].充当額
オ:[入金].入金額 - [入金].充当額
カ:[入金].充当額 - [入金].入金額
模範解答
b:イ、c:イ、d:イ、e:オ、f:イ
解説
解答の導き方
この設問では、まだ使い切っていない入金を、まだ支払われていない月間買上げに充当します。本文には「買上げ年月の古い順に」「入金日が古い順に」充当するとあります。つまり、月間買上げは古い月から、入金は古い日付から処理します。
まず、入金額と月間買上げ額について、まだ充当されていない金額を考えます。
- 入金の未充当額 = 入金額 − 充当額
- 月間買上げの未消込額 = 月間買上げ額 − 消込額
「充当額」は、入金額のうち、すでに月間買上げに使った金額です。「消込額」は、月間買上げ額のうち、すでに入金から充当された金額です。
-
b:入金表から取得するレコードの条件消込みに使えるのは、まだ充当されていない金額がある入金です。したがって、入金額が充当額より大きい必要があります。入金額が充当額と等しい場合は、入金を使い切っています。よって条件は「入金額 > 充当額」で、bはイです。取得した入金は、得意先IDの昇順、入金日の昇順に並びます。これにより、得意先ごとに、日付の古い入金から処理できます。
-
c:月間買上げ表から取得するレコードの条件消込みの対象にできるのは、まだ全額が消し込まれていない月間買上げです。月間買上げ額が消込額より大きければ、未消込額が残っています。したがって、条件は「月間買上げ額 > 消込額」で、cはイです。
-
d:月間買上げの並べ方本文には、月間買上げ額への充当は「買上げ年月の古い順」とあります。そこで、月間買上げ表のレコードは買上げ年月の昇順に並べます。よって、dはイです。
-
e:変数1に入れる金額変数1は、処理中の入金から、これから月間買上げに充当できる金額です。入金額全体ではなく、すでに充当した金額を差し引いた残りを使います。変数1 = 入金額 − 充当額よって、eはオです。
-
f:変数2に入れる金額変数2は、処理中の月間買上げに、これから充当できる残りの金額です。月間買上げ額から、すでに消し込んだ金額を差し引きます。変数2 = 月間買上げ額 − 消込額よって、fはイです。
-
変数1と変数2を比べる理由変数1は入金の残り、変数2は月間買上げの未消込額です。この2つを比べると、入金で月間買上げを全額消し込めるかが分かります。例えば、入金の未充当額が6,000円、月間買上げの未消込額が3,000円なら、変数1のほうが大きいです。この場合は、月間買上げを全額消し込んでも入金が残ります。処理では変数2を充当し、変数1から変数2を引いた残りを使って、次の月間買上げを処理します。反対に、入金の未充当額が3,000円、月間買上げの未消込額が6,000円なら、入金をすべて使っても月間買上げは残ります。この場合は、変数1の金額を月間買上げに充当し、入金を使い切ります。
誤りやすいポイント
-
入金額と、まだ使える入金額を混同しないようにします。
変数1に入るのは入金額全体ではなく、入金額から充当額を引いた残りです。 -
月間買上げ額と、まだ消し込まれていない金額を混同しないようにします。
変数2に入るのは月間買上げ額全体ではなく、月間買上げ額から消込額を引いた残りです。 -
並べる順番を取り違えないようにします。
入金は入金日の昇順、月間買上げは買上げ年月の昇順です。どちらも古いものから処理します。 -
「変数1 > 変数2」の場合に、入金を使い切るわけではありません。
月間買上げを全額消し込んでも入金が残るため、残った入金を次の月間買上げに充当します。 -
変数1と変数2が等しい場合にも注意します。
図2の「Yes」は「変数1 > 変数2」の場合だけです。等しい場合は「No」の処理になりますが、その場合でも入金と月間買上げの両方がちょうど使い切られます。
FAQ
Q: 入金額と充当額が等しい入金は、なぜ取得しないのですか?
A: 入金額と充当額が等しければ、その入金はすでに全額が充当されています。これ以上の消込みには使えないためです。
A: 入金額と充当額が等しければ、その入金はすでに全額が充当されています。これ以上の消込みには使えないためです。
Q: 一つの入金を複数の月間買上げに分けて使うことはありますか?
A: あります。入金の未充当額が、現在の月間買上げの未消込額より大きければ、その月間買上げを全額消し込んだ後、残りを次の月間買上げに充当します。
A: あります。入金の未充当額が、現在の月間買上げの未消込額より大きければ、その月間買上げを全額消し込んだ後、残りを次の月間買上げに充当します。
Q: 一つの月間買上げに複数の入金を充当することはありますか?
A: あります。一つの入金だけでは月間買上げを全額消し込めない場合、入金を使い切り、次の入金を同じ月間買上げに充当できます。
A: あります。一つの入金だけでは月間買上げを全額消し込めない場合、入金を使い切り、次の入金を同じ月間買上げに充当できます。
関連キーワード: 関係データベース、レコード、主キー、昇順ソート、残高管理




