在庫管理

在庫管理システム-安全在庫

2022年10月15日

フォームを先に載せておりますが、画面下半分のサブフォームの内容を先に作らないと画面はできません。クエリを先に作成ください。

フォーム・F_安全在庫

空白のフォームから下記のようにコントロールを配置していきます。

品目型式:コンボボックス(名前:cmb_品目型式)
検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)

クエリ・Q_安全在庫

「Q_集計」と似ていますが、数量の合計の抽出条件を下記のようにします。

<[T_品目].[安全在庫]

品目型式の抽出条件はVBAにて記載します。「数量の合計:数量」をVBAに記載する方法がわかりませんでした。このクエリに残っております。

※必要に応じて表示させる項目を追加・削除してください。

SQLビュー

SELECT DISTINCTROW T_品目.品目コード, T_品目.品目型式, Sum(T_入出庫処理.数量) AS 数量の合計, T_品目.安全在庫, T_入出庫処理.削除
FROM T_入出庫処理 LEFT JOIN T_品目 ON T_入出庫処理.品目コード = T_品目.品目コード
GROUP BY T_品目.品目コード, T_品目.品目型式, T_品目.安全在庫, T_入出庫処理.削除
HAVING (((Sum(T_入出庫処理.数量))<[T_品目].[安全在庫]) AND ((T_入出庫処理.削除)=False));

VBAコード

Ver.2.10

Option Compare Database
Option Explicit

'---------------------------------
Private Sub Form_Load()
    '---------------------------------
    'サブルーチンFormInitはM_画面にあります
    '---------------------------------
    Call FormInit(Me.Form)
    Call Form_Resize
End Sub

'---------------------------------
Private Sub Form_Resize()
    '---------------------------------
    'サブルーチンAdjustWidthはM_画面にあります
    '---------------------------------
    Call AdjustWidth(Me, Me.SF_安全在庫, 0)
End Sub

'---------------------------------
Private Sub cmd_検索_Click()
On Error GoTo 終了
    Dim strFilter1 As String
    Dim strFilter2 As String

    strFilter1 = str検索フィルタ
    strFilter2 = "品目コード < " & lng子品目上限 + 1

    With Me.SF_安全在庫.Form
        .Filter = strFilter1 & " And " & strFilter2
        .FilterOn = True
    End With
    
    '---------------------------------
    'サブルーチン検索履歴はM_在庫管理にあります
    '---------------------------------
    If IsNull(cmb_品目型式) = False Then Call 検索履歴(Me.cmb_品目型式) 'コンボボックスの検索ワードをT_検索履歴に追加する
    Me.cmb_品目型式.Requery
    Exit Sub
終了:
    Call エラーログ("F_安全在庫", "cmd_検索_Click")
End Sub

'---------------------------------
Private Sub cmb_品目型式_Change()
    Call cmd_検索_Click
End Sub

'---------------------------------
Private Sub cmd_終了_Click()
   DoCmd.Close
End Sub

'---------------------------------
' マウスドラッグでフォーム移動
'---------------------------------
Private Sub フォームヘッダー_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button And acLeftButton Then
        ReleaseCapture
        Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End If
End Sub

'---------------------------------
Private Sub 詳細_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button And acLeftButton Then
        ReleaseCapture
        Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End If
End Sub

AccessでEメールを送りたい場合

安全在庫設定に引っかかる品目が生じたら、発注担当者などにEメールを飛ばせるようにしたいと考えていました。
AccessではEメールは飛ばせないであろうという先入観から調べてもいませんでしたが、実際にはやろうと思えばできるようです。
AccessデータベースによるEメール送信のサンプルを作ってみました。そのうちにこの在庫管理システムにも実装したいと思います。サンプルは下記を参照ください。

Ver.2.00β以降、テーブル・T_各種設定内にEメール送信のための設定をしております。下記サンプルでは設定がVBAコードに直書きされております。

-在庫管理