Access実践入門 TOPへ
 ■ マイクロソフトアクセス、請求一覧表、商品集計
残計算

次のような一覧表の指定画面が出ます。


ホーム全体のプロパティの[開く時]に
hick = DLookup("登録締切日付", "ta会社情報", "ID =1")とあります。
開始ボタンの[フォーカス取得時]のチェックで使うためです。

If DateValue([始め]) <= hick Then
 MsgBox ("締切日以前のデータは指定できません...")
 DoCmd.CancelEvent
 DoCmd.GoToControl "始め"
 Exit Sub
End If

それでは、残計算の手順です。
開始ボタンの[クリック時]は次のようになっています。

 Call nzan(Me!日付始め, Me!日付終わり, Me!得意始め, Me!得意終わり, 得意締日)
 DoCmd.OpenForm "fo請求一覧", , , , acFormReadOnly

nzan()のモジュールに処理をうつしています。
5項目の引数を括弧の中で指定します。

答えが、「to残計算」に作られ、次のような結果になります。



この答えを使った「qu請求一覧」をレコードソースにした、「fo請求一覧」が表示されます。



請求書と元帳

左端の明細ボタンで、元帳と請求書の処理ができます。

手順を説明します。

「明細ボタン」の[クリック時]で明細用の作業テーブルを作っています

Private Sub 明細_Click()

 1 DoCmd.OpenQuery "quto削除請求元帳"
 2 DoCmd.OpenQuery "qu請求元帳追加伝票"
 3 DoCmd.OpenQuery "qu請求元帳追加入金"
 4 DoCmd.OpenQuery "qu請求元帳追加調整"

 5 Dim dbs As Database
 6 Dim rst_1 As Recordset
 7 Dim i As Integer
 8 Dim zan As Long

 9 Set dbs = CurrentDb
10 Set rst_1 = dbs.OpenRecordset("qu請求元帳", dbOpenDynaset)

11 If rst_1.RecordCount = 0 Then
12  MsgBox ("明細がありません...")
13  rst_1.Close
14  Exit Sub
15 End If

16 zan = Form_fo請求一覧!繰越残高
17 rst_1.MoveFirst

18 Do Until rst_1.EOF
19  rst_1.Edit

20  If rst_1!伝票区分 = "2" Or rst_1!伝票区分 = "3" Then
21   zan = zan - rst_1!税込金額
22  Else
23   zan = zan + rst_1!税込金額
24  End If

25  rst_1!明細残高 = zan
26  rst_1.Update

27  rst_1.MoveNext
28 Loop

29 rst_1.Close

30 DoCmd.OpenForm "fo請求一覧明細", acNormal, , , acFormReadOnly

End Sub

明細データは、「ta請求明細」にあります。
ただ、これには、入金データは含まれていませんし、その行毎の残高もありません。
答えの作業テーブル「to請求元帳」を作ります。

1行目で、「to請求元帳」の前レコードを削除する削除クエリーを実行します。
2行目で、伝票の明細を追加する追加クエリーを実行します。
3行目で、入金から、入金金額を追加する追加クエリーを実行します。
4行目で、入金から、調整額を追加する追加クエリーを実行します。
元帳は、金額欄は1つなので、入金額と調整額を横に並べて表示しないので、2つに分けて追加しています。

ここまでで、「qu請求元帳」を使えば、日付、伝票区分、行番号の順番で、明細が表示できますが、右端にそれぞれの残高を表示したいので、残計算をしておきます。


5〜8行目は、変数の宣言です。
9〜10行目は、いつものレコードセットのオープンです。
画面表示するクエリーを使います。
(同じ順序のクエリーでないと残計算が違ってきます)

16行目で、変数のzanに該当得意先の繰越残を代入します。
17行目で、1レコード目に移動。
18〜28行目で、全レコードを順番に開きます。
20行目の伝票区分2,3は入金ですので、残高はマイナスです。それ以外はプラスです。
各行にその行の残高を上書きします。

最後に、明細画面を表示しています。



「請求書印刷」と「元帳印刷」のボタンがあります。


・請求書印刷
ここでは、自社名の欄をサブレポートにして、納品書と共通で使っています。
また、見栄えをよくするために、四角形の中にコントロールを貼っています。
こうすることで、右詰の数値が、罫線とかさならないように印字できます。

明細の摘要欄で、[重複データ非表示]を「はい」にしています。
これは、入金データで摘要を入力している場合に、入金と調整で同じものが上下に印刷されるのを防ぐためです、全く同じデータだった場合には、次の行には印刷されません。
「qu請求元帳追加調整」で、入金摘要の列を削除しておいてもいいと思いますが・・・

請求書は、入力行のみの印刷となりますので、指定期間に、1行しかなければ1行だけの請求書になってしまいます。
請求書の場合、指定期間に数十行ある場合もあるでしょうから、何ページにも印刷する場合もあるでしょうし、一定の空白行を挿入して見栄えよく、印刷する場合は、複雑な処理が必要になるでしょう。


・元帳印刷
請求書と同じようなデザインです。
明細の摘要も同じ処理をしています。


請求書、元帳とも、ここでは、得意先一件毎に、印刷することになりますが、
実務上は、得意先の範囲を指定して、一括で出す方が便利でしょう。
その場合は、「to請求元帳」にたくさんの得意先が入りますので、モジュールの中で、右端の残計算をする場合も、違うものにしなければいけないでしょう。

商品集計

商品の集計は残計算が無いので簡単です。



ここでは、初めに日付と、締切日付とのチェックもしていません。
もし、指定されても、データが無いので出ないだけです。



選択クエリーだけで、すべて処理できます。