|
▼まさ7251 さん:
返信、ありがとうございます。
何をどう書いていいかわからず、中途半端な質問になってしまいました。
次のような状態です。
テーブル
顧客マスター 顧客No、顧客名、締日、請求金額
買掛残高 顧客No、締日、残高
売上入金マスター 日付、顧客No、売上金額、入金金額
クエリ
残高更新該当顧客1
SELECT 売上入金マスター.顧客No, Min(顧客マスター.請求金額) AS 請求金額の合計, Sum(売上入金マスター.売上金額) AS 売上金額の合計, Sum(売上入金マスター.入金金額) AS 入金金額の合計, [請求金額の合計]+[売上金額の合計]-[入金金額の合計] AS 当月残高
FROM 売上入金マスター INNER JOIN 顧客マスター ON 売上入金マスター.顧客No = 顧客マスター.顧客No
WHERE (((売上入金マスター.日付)>=[開始日] And (売上入金マスター.日付)<=[終了日]))
GROUP BY 売上入金マスター.顧客No, 顧客マスター.締め日
HAVING (((顧客マスター.締め日)=[締日]));
フォーム
年、月、日(締日)
開始日、終了日
締日該当期間のコマンドボタン
該当顧客のコマンドボタン
フォームの締日を指定して(年、月、日)「締日該当期間」をクリックすると、指定範囲が開始日と終了日に表示されるようになっています。指定範囲が表示された後「該当顧客」のコマンドボタンでクエリ「残高更新該当顧客1」の結果をテーブル「買掛残高」に保存し、それの残高をテーブル「顧客マスター:請求残高」へ更新するということをしたいと思います。できればフォームのコマンドボタン1つで「顧客マスター:請求金額」を更新させたいのですが、難しいため2つに分ければできるのではないかと思い2つに分けたのですが、やはりそれも難しいようで・・・
コードは次の通りです。
Option Compare Database
Option Explicit
Option Base 1
Dim dbs As Database
Dim qdf, qdf2 As QueryDef
Dim rst1, rst2, rst3 As Recordset
Dim 顧客数 As Integer
Private Sub Form_Load()
Set dbs = CurrentDb
Me![年] = Year(Now())
Me![月] = Month(Now())
End Sub
Private Sub 締日該当期間_click()
On Error GoTo Err_締日該当期間
Dim 開始月日, 終了月日 As String
Dim 締日, 開始月, 開始年, 終了月, 終了年 As String
Dim i As Integer
Dim strData, strSumi As String
' [売上日]を[締め日]の期間で絞り込む
締日 = Me![日]
開始年 = Me![年]
開始月 = Me![月]
終了年 = Me![年]
終了月 = Me![月]
If 締日 = "月末" Then ' 締め日が月末
締日 = "1"
Select Case 開始月
Case "12" ' 12月の場合
' 終了年を1年プラスする
終了年 = CStr(Val(終了年) + 1)
終了月 = "1"
Case Else ' 12月以外の場合
' 終了月を1月プラスする
終了月 = CStr(Val(終了月) + 1)
End Select
Else ' 締め日が月末以外
' 締日を1プラスする
締日 = CStr(Val(締日) + 1)
Select Case 開始月
Case "1" ' 1月の場合
' 開始年を1年マイナスする
開始年 = CStr(Val(開始年) - 1)
開始月 = "12"
Case Else ' 1月以外の場合
' 開始月を1月マイナスする
開始月 = CStr(Val(開始月) - 1)
End Select
End If
開始月日 = 開始年 & "/" & 開始月 & "/" & 締日
終了月日 = 終了年 & "/" & 終了月 & "/" & 締日
Me![開始日] = DateValue(開始月日)
Me![終了日] = DateValue(終了月日) - 1
Err_締日該当期間:
If Err = 3021 Then
Beep
MsgBox "この締め日の顧客はありますが、作業はしていません。", 16
Exit Sub
End If
End Sub
Private Sub 該当顧客_click()
On Error GoTo Err_該当顧客_Click
Dim recMax As Long
Dim i As Integer
Set qdf = dbs.QueryDefs("請求書 残高更新該当顧客1")
qdf.Parameters("開始日") = Me![開始日]
qdf.Parameters("終了日") = Me![終了日]
qdf.Parameters("締日") = Me![日]
Set rst1 = qdf.OpenRecordset()
rst1.MoveLast
recMax = rst1.RecordCount
rst1.MoveFirst
'「買掛残高」テーブルをオープンする
Set rst2 = dbs.OpenRecordset("買掛残高")
'買掛残高の数だけ「買掛残高」テーブルにレコードを保存する
For i = 1 To recMax
With rst2
.AddNew
![顧客No] = rst1.[顧客No]
![締日] = rst1.[終了日]
![残高] = rst1.[当月残高]
.Update
End With
Call 当月残高保存(rst1.[顧客No], rst1.[当月残高])
rst1.MoveNext
Next i
rst1.Close
rst2.Close
qdf.Close
Exit_該当顧客_Click:
Exit Sub
Err_該当顧客_Click:
MsgBox Err.Description
Resume Exit_該当顧客_Click
End Sub
Private Sub 当月残高保存(顧客No, 当月残高)
'「請求書 顧客抽出」クエリーをオープンする
Set qdf2 = dbs.QueryDefs("請求書 顧客抽出")
qdf2.Parameters("検査値1") = 顧客No
Set rst3 = qdf.OpenRecordset()
rst3.Edit
rst3.[請求金額] = 残高
rst3.Update
rst3.ciose
qdf2.Close
End Sub
以上です。宜しくお願いします。
|
|