LibreOfficeのBaseで団体の名簿と会計を管理する(中編) – 浅野直樹の学習日記では残高確認(現金出納帳など)までやりました。あとは「会費納入」テーブルをもとにして「会員名簿」の最終会費納入のデータを更新することと、「会員名簿」テーブルから発送用の宛名ラベルを作成することの2つをやります。
1.会費納入データの更新
SQLでデータを更新するためにはUPDATE文を用います。詳しくはOracle SQL (データの更新 :UPDATE文の基礎)をご覧ください。
このリンク先を熟読して、最終的には以下のようなSQL文を作りました。これをBaseのテーブルやクエリーを選ぶ画面で「ツール」→「SQL」で実行してください。
UPDATE 会員名簿
SET 最終会費納入 = (
NVL(
(
SELECT MAX(終了) FROM 会費納入
WHERE 会費納入.会員名 = 会員名簿.名前
GROUP BY 会費納入.会員名
),
会員名簿.最終会費納入
)
);
最も外側は、「会員名簿」テーブルの最終会費納入という項目を更新するというものです。どの値に更新するのかというと、「会費納入」テーブルを会員名でグループ化して、その中で終了という項目の最大値です。ただ、その最大値がない場合にNULLになるのを防ぐために、NULLになりそうな場合は元の値と同じ値に更新するというように、NVL関数を用いています。
上の更新SQLは名前の一致に頼っているので、名前が違っているとうまく働きません。そのようなことがないかどうかを確かめるために、以下のクエリーを実行しておくとよいでしょう。
SELECT 名前, 終了, 最終会費納入 FROM 会費納入 LEFT JOIN 会員名簿
ON 会費納入.会員名 = 会員名簿.名前
LEFT JOINによりON以下の条件に合わないものも表示されるので、変な空白があれば何かがおかしいと気づきます。
2.宛名ラベルの作成
(1)送付先全体のクエリーを作成する
会報や総会の案内を会員やその他の送付先に送るときには宛名ラベルが活躍します。そのために別のソフトを用いてもよいのですが、どうせなら間違いをなくすためにもデータをBaseで一元的に管理して、そこから印刷してしまいましょう。
「会員名簿」とは別に「会員以外送付先」テーブルを作りましょう。「会員名簿」テーブルの項目で必要のないものを減らす感じで作ればよいです。
そして「会員名簿」と「会員以外送付先」の2つのテーブルから、在籍している人(種別が0ではない人)を選んで、会員を五十音順に並べてから会員以外を五十音順に並べます。これがそのためのSQL文です。
SELECT 0 テーブルの順番, 名前, フリガナ, 郵便番号, 住所1, 住所2 FROM 会員名簿 WHERE ( 種別 != 0)
UNION ALL
SELECT 1 テーブルの順番, 名前, フリガナ, 郵便番号, 住所1, 住所2 FROM 会員以外送付先 WHERE ( 種別 != 0)
ORDER BY テーブルの順番, フリガナ
テーブルの順番に並べるために、「会員名簿」テーブルには0、「会員以外送付先」には1という数字を割り振っています。このクエリーを「送付先全体」とでも名前をつけて保存しておきましょう。
(2)ラベルの差し込み印刷をする
Baseにはラベルを作成する機能が備わっているので、比較的簡単にできます。
テーブルやクエリーを選ぶBaseの初期画面から、「ファイル」→「新規作成」→「ラベル」を選びます。今使っているデータベースを選び、先ほどの「送付先全体」というクエリーを選んで、郵便番号、住所1、住所2、名前の必要項目を1つずつ左側の画面に追加していきます。
「書式」タブを選んで、お手元のラベル用紙の通りに幅や余白などを設定します。「オプション」タブでページ全体というところを選んで、「新規ドキュメント」を押すと、ラベル用の差し込み印刷ができているはずです。
後は大きさや配置を好みに調整するだけですが、ここでコピーアンドペーストを使うと差し込み印刷が崩れるので注意が必要です。
このBaseのテーブルやクエリーからの差し込み印刷を活用すれば、会費をいつまで納入しているかのお知らせなども自動で作ることができます。
3回に渡る長い記事になりましたが、これで効率的かつ間違いが少なく団体の名簿や会計を管理できるようになりました。