横から失礼。
はじめまして、スナフキンと申します。
少し気になって、期首在庫は必要ないのでしょうか?
それによってはすべてアウトになりそうで^^;;
一応、標準モジュールに
Public Function F_出庫数(int製品ID As Integer, str年月 As String, Optional bln集計区分 As Integer = 0) As Double
Dim strQuery As String
If bln集計区分 = 0 Then
strQuery = "SELECT SUM(S.出庫数量) AS 出庫数量 FROM 出庫詳細 S LEFT JOIN 出庫 SH ON S.出庫ID=SH.出庫ID WHERE S.製品ID=" & int製品ID & " AND Format(SH.出庫日,'YYYYMM')='" & str年月 & "'"
Else
strQuery = "SELECT SUM(S.出庫数量) AS 出庫数量 FROM 出庫詳細 S LEFT JOIN 出庫 SH ON S.出庫ID=SH.出庫ID WHERE S.製品ID=" & int製品ID & " AND Format(SH.出庫日,'YYYYMM')<'" & str年月 & "'"
End If
Dim cn As New ADODB.Connection
Dim rec As New ADODB.Recordset
Set cn = CurrentProject.Connection
Set rec = cn.Execute(strQuery)
If rec.EOF = False Then
F_出庫数 = Nz(rec.Fields("出庫数量"), 0)
Else
F_出庫数 = 0
End If
rec.Close: Set rec = Nothing
cn.Close: Set cn = Nothing
End Function
Public Function F_入庫数(int製品ID As Integer, str年月 As String, Optional bln集計区分 As Integer = 0) As Double
(出庫と同じなので省略)
End Function
上記参照設定でADOにチェックです^^/
を用意したとして
製品IDを1
2020年1月の場合
前月在庫数=F_入庫数(1,"202001",1)-F_出庫数(1,"202001",1)
当月入庫数=F_入庫数(1,"202001")、当月出庫数=F_出庫数(1,"202001")
当月在庫数=F_入庫数(1,"202001",1)-F_出庫数(1,"202001",1)+F_入庫数(1,"202001")-F_出庫数(1,"202001")
上記でどうでしょうか?
クエリーでも使用できると思いますし、少し工夫すれば、期首在庫にも対応できるはず^^;;
かな??
フック船長さんのテーブル構成だと、棚卸をおこなった時点で
のどちらかで実現可能でしょうし、
テーブル設計が きちんと出来ていることから
フック船長さんは こういった業務知識や手法を身につけている可能性が高いのではないか
というのが、私の見解です。
N + 1 問題
に該当しています、とだけ。