在庫管理

在庫管理システム-入出庫履歴

2022年10月15日

フォーム・F_入出庫履歴

フォームを先に載せておりますが、画面下半分のサブフォームの内容を先に作らないと画面はできません。クエリを先に作成ください。
入出庫履歴を表示するフォームです。全て見えると規模によっては邪魔になりますので、「品目型式」、「履歴の開始日付」、「履歴の終了日付」で検索できるようにしています。

サブフォームの配置の仕方

  • 【デザイン】タブのコントロールのサブフォームをクリックします。このとき、【コントロールウィザードの使用】をONしておきます。
  • 下の図のまま【次へ】をクリックします。
  • 【テーブル/クエリ】から「Q_入出庫履歴」を選び、全ての項目を【選択したフィールド】へ移します。
  • 【完了】でも良いですが、【次へ】をクリックすればサブフォームの名前を付ける画面になります。

サブフォームサイズや、フィールドの幅は各自適宜変えてください。

名前は「Q_入出庫履歴のサブフォーム」のままとしました。気に入らない方は変えてください。

入出庫処理取り消し

当初、取り消し処理のコードを用意していましたが、「削除」フィールドを利用することにしました。

フォーム「入出庫履歴」のフィールド「入出庫」の項目をダブルクリックしますと、入出庫処理取り消しの確認のメッセージボックスが表示されます。そこで「はい(Yes)」を選択すると、該当する入出庫処理のフィールド「削除」にチェックが入ります。このチェックが入った処理は「在庫検索」処理にも反映されません。

クエリ・Q_メイン

  • 【作成】-【クエリデザイン】から「メイン」「品目」「入出庫」「社員」「単位」を選びます。
  • 「メイン」と他の共通するコードを連結します。例えば「品目コード」を結びます。この時、結合線をダブルクリックしてプロパティを開き、

2の「’メイン’の全レコードと’品目’の同じ結合フィールドのレコードだけを含める」とします。他の結合線も同様です。

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

このクエリから「Q_入出庫履歴」と「Q_集計」に転用します。「Q_入出庫履歴」と「Q_集計」はQ_メインを使わずに独自に作っても全然構いません。

SQLビュー

下記の記述を【SQLビュー】からコピペすると早いです。在庫管理システムVer.2.00β版。

SELECT T_入出庫処理.ID, T_入出庫処理.日付, T_入出庫処理.品目コード, T_品目.品目型式, T_品目.[メーカー], T_入出庫処理.数量, T_単位.単位, T_社員.社員, T_品目.[単価]*[数量] AS 金額, T_入出庫.入出庫, T_保管場所.保管場所, T_指図番号.指図番号, T_入出庫処理.削除, T_入出庫処理.削除日付
FROM ((((((T_入出庫処理 LEFT JOIN T_品目 ON T_入出庫処理.品目コード = T_品目.品目コード) LEFT JOIN T_仕入先 ON T_品目.仕入先コード = T_仕入先.仕入先コード) LEFT JOIN T_入出庫 ON T_入出庫処理.入出庫コード = T_入出庫.入出庫コード) LEFT JOIN T_社員 ON T_入出庫処理.社員コード = T_社員.社員コード) LEFT JOIN T_単位 ON T_入出庫処理.単位コード = T_単位.単位コード) LEFT JOIN T_保管場所 ON T_入出庫処理.保管場所コード = T_保管場所.保管場所コード) LEFT JOIN T_指図番号 ON T_入出庫処理.指図番号 = T_指図番号.指図番号
ORDER BY T_入出庫処理.日付 DESC;

Q_入出庫履歴

Q_入出庫履歴には「Q_メイン」を利用します。

【追記(2019/10/27)】最新版ではここのクエリの抽出条件は空です。代わりにVBAにて記述しております。ただ、時々妙な表示をすることがありまして、まだ改変の余地がありそうです。

VBAを使わずにクエリにて抽出条件を記載する場合です。画像ですと抽出条件が見づらいため、表にします。

フィールド日付品目型式[Forms]![F_入出庫履歴]![txt_開始日付][Forms]![F_入出庫履歴]![txt_終了日付]
テーブルQ_メインQ_メイン
並べ替え
表示
抽出条件>[Forms]![F_入出庫履歴]![txt_開始日付] And <[Forms]![F_入出庫履歴]![txt_終了日付]Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*"
または<[Forms]![F_入出庫履歴]![txt_終了日付]Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*"Is Null
>[Forms]![F_入出庫履歴]![txt_開始日付]Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*"Is Null
Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*"Is NullIs Null

SQLビュー

SELECT Q_メイン.日付, Q_メイン.品目コード, Q_メイン.品目型式, Q_メイン.数量, Q_メイン.単位, Q_メイン.[メーカー], Q_メイン.保管場所, Q_メイン.入出庫, Q_メイン.社員, Q_メイン.削除, Q_メイン.ID, Q_メイン.削除日付
FROM Q_メイン
ORDER BY Q_メイン.日付 DESC;

VBAコード

Ver.2.10

フォーム・F_入出庫履歴のVBA

Option Compare Database
Option Explicit

'---------------------------------
Private Sub Form_Load()
On Error GoTo 終了
    '---------------------------------
    'サブルーチンFormInitはM_画面にあります
    '---------------------------------
    Call FormInit(Me.Form)

    If lngDisplayRes >= 1920 Then Me.Width = 25000 Else Me.Width = 20000
    Call Form_Resize
    txt_終了日付.Value = Date + 1 '今日の日付を初期値にする
    Exit Sub
終了:
    Call エラーログ("F_入出庫履歴", "Form_Load")
End Sub

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

'---------------------------------
Private Sub cmd_検索_Click()
On Error GoTo 終了
    
    Dim strFilter As String
    
    strFilter = ""
    If (Not IsNull(Me.cmb_品目型式)) Then
        strFilter = "(SF_入出庫履歴.品目型式 Like '*' & [Forms]![F_入出庫履歴]![cmb_品目型式] & '*')"
        If (Not IsNull(Me.txt_開始日付)) Or (Not IsNull(Me.txt_終了日付)) Then
            strFilter = strFilter & " and "
        End If
    End If
    If (Not IsNull(Me.txt_開始日付)) Then
        strFilter = strFilter & "SF_入出庫履歴.日付 >= [Forms]![F_入出庫履歴]![txt_開始日付]"
        If (Not IsNull(Me.txt_終了日付)) Then
            strFilter = strFilter & " and "
        End If
    End If
    If (Not IsNull(Me.txt_終了日付)) Then
        strFilter = strFilter & "SF_入出庫履歴.日付 <= [Forms]![F_入出庫履歴]![txt_終了日付]"
    End If
    If (Not IsNull(strFilter)) Then
        With Me.SF_入出庫履歴.Form
            .Requery
            .Filter = strFilter
            .FilterOn = True
        End With
    End If
    
    '---------------------------------
    'サブルーチン検索履歴は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 txt_開始日付_Change()
    Call cmd_検索_Click
End Sub

'---------------------------------
Private Sub txt_終了日付_Change()
    Call cmd_検索_Click
End Sub

'---------------------------------
Private Sub cmd_エクスポート_Click()
On Error GoTo 終了
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Q_入出庫履歴", "在庫管理.xls", True, "入出庫履歴"
    MsgBox ("マイドキュメントにエクスポートしました")
    Exit Sub
終了:
    Call エラーログ("F_入出庫履歴", "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

サブフォーム・SF_入出庫履歴のVBA

Option Compare Database
Option Explicit

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

'---------------------------------
Private Sub 入出庫_DblClick(Cancel As Integer)
On Error GoTo 終了
    Dim rs As DAO.Recordset
    
    If Me!削除.Value = True Then Exit Sub
    
    If MsgBox("処理を取り消しますか?", vbYesNo, "処理取消") = vbYes Then
        Set rs = CurrentDb.OpenRecordset("T_入出庫処理")
        With rs
            .FindFirst "ID=" & Me!ID
            .Edit
            .Fields("削除") = True
            .Fields("削除日付") = Date
            .Update
        End With
        Set rs = Nothing
        MsgBox ("処理を取り消しました")
    End If
    Exit Sub
終了:
    Call エラーログ("F_入出庫履歴", "入出庫_DblClick")
End Sub

-在庫管理