Microsoft Access 掲示板

入出庫手数料・保管手数料の一覧表を作成したい / 3

20 コメント
views
4 フォロー
3
hiroton 2024/01/10 (水) 15:51:28 429d8@f966d

適当に「2024年3月に400個出庫」のデータを加えたサンプル
画像1

hirotonは「簡単な手法」が思い浮かばなかったので覚悟してください
複雑な要件なので問題を分解します

1.「保管」の累計個数をどう計算するか
2.「No」の連番をどう取得するか
3.「存在しない月のデータ」をどう補完するか

回答としては一緒くたにやっていますが、どの問題を解決するためのものなのか考えながら見てください

レポートのレコードソースのクエリ

SELECT
    T_入出庫一覧.区分,
    [移動日] - Day([移動日]) + 1 AS 移動月,
    Sum(IIf(
            [区分ID] = 1,
            [合計]
        )) AS 入庫数,
    Sum(IIf(
            [区分ID] = 2,
            [合計]
        )) AS 出庫数,
    T_区分マスター.手数料単価,
    Sum([手数料単価] * [合計]) AS 手数料
    T_区分マスター.区分ID,
FROM
    T_入出庫一覧
    INNER JOIN
        T_区分マスター
    ON  T_入出庫一覧.区分 = T_区分マスター.区分
GROUP BY
    T_入出庫一覧.区分,
    [移動日] - Day([移動日]) + 1,
    T_区分マスター.手数料単価,
    T_区分マスター.区分ID
ORDER BY
    [移動日] - Day([移動日]) + 1,
    T_区分マスター.区分ID
;

上記クエリによるレポート出力用の基礎データ例
画像1

レポートのモジュール

Option Compare Database
Option Explicit

Dim No As Long
Dim 保管月 As Date
Dim 保管個数 As Long

Private Sub Report_Load()
    保管月 = DateAdd("M", -1, Me!移動月)
End Sub

Private Sub 移動月フッター_Format(Cancel As Integer, FormatCount As Integer)
    No出力 Me!No_保管
    
    '//補完用データ確保
    保管月 = Me!移動月
    保管個数 = Me!保管個数表示
End Sub

Private Sub 移動月ヘッダー_Format(Cancel As Integer, FormatCount As Integer)
    If Me!移動月 = DateAdd("M", 1, 保管月) Then
        Cancel = True
        Exit Sub
    End If
    
    '//前のレコードが2月以上前なのでデータ補完
    No出力 Me!No_補完
    
    保管月 = DateAdd("M", 1, 保管月)
    Me!移動月補完 = 保管月
    Me!保管個数表示補完 = 保管個数
    
    Me.NextRecord = False
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    No出力 Me!No_入出庫
End Sub

Private Sub No出力(ctl As TextBox)
    No = No + 1
    ctl = No
End Sub

レポートのデザイン
画像1画像1

通報 ...