フォーム・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_メイン」を利用します。
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 Null | Is 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