SELECT
Year(DateAdd("m",-3, C1_入出庫台帳.入出庫日) As 年度,
C1_入出庫台帳.品名ID,
Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計],
Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY
Year(DateAdd("m",-3, C1_入出庫台帳.入出庫日),
C1_入出庫台帳.品名ID;
SELECT
[年度を入力] As 年度,
C1_入出庫台帳.品名ID,
Sum(C1_入出庫台帳.入庫数量) - Sum(C1_入出庫台帳.出庫数量) AS [期末在庫数]
FROM C1_入出庫台帳
WHERE
C1_入出庫台帳.入出庫日 BetWeen DateSerial([年度を入力],4,1) AND DateSerial([年度を入力]+1,3,31)
GROUP BY
C1_入出庫台帳.品名ID;
SELECT DISTINCTROW C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID, Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計], Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID;
Private Sub Btn 自社コードで検索する_Click()
If Nz(Me.自社コード検索, "") = "" Then
MsgBox "自社コード入力欄 に値が入力されていません。自社コードを入力してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
Exit Sub
End If
With Forms![C15_入出庫履歴_メイン].Recordset
.FindFirst "自社コード=" & Me.自社コード検索
If .NoMatch Then
DoCmd.Close acForm, Me.Name
Else
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
Me.自社コード検索.SetFocus
End If
End With
End Sub
If Me.自社コード検索 = Forms![C15_入出庫履歴_メイン]!自社コード Then
DoCmd.Close acForm, Me.Name
Else
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
End If
御世話になります。
上司に途中経過として見ていただいたところ、この毎月集計でも期末在庫数と同じように月末での在庫数を表示できないかといわれました。月初毎に入出庫台帳に書き加えると入荷数量が大幅に増えてしまうので頭を抱えています。何かいい方法はありますでしょうか?
ありがとうございます。
パラメーターの入力ボックスが表示されてしまいます。
Me.Filter = "月 like #" & Me.検索月 & "#" 'も不要ですね
Me.Filter = "月 like'#" & 検索月 & "#'"
Me.Filter = "月 like'#" & me.検索月 & "#'" では?
御世話になります。

1、メインメニュー に 年度繰越処理 というボタン を設置して
前年度期末在庫数 を 今年度の4/1に期首在庫数として C1_入出庫台帳に一括入力させた方がいいのでしょうか?
※ 前年度期末在庫数 があるモノはその数量、ないものは 0 というように・・・。
2,期毎の 入庫合計数量 と 出庫合計数量 のクエリと 期末在庫数量が表示されるクエリ を別に作成していますが
一つにまとめた方が見やすいのでしょうか?
現在、前者のフォームをつくったのですが・・・。
フォーム詳細欄に非連結テキストボックス 表示年度 を作り メインフォームの 年度 を抽出していて
テキストボックス 表示年度 の更新後処理に
Private Sub 表示年度_AfterUpdate()
Me.Filter = "年度 like'" & 表示年度 & "'"
Me.FilterOn = True
End Sub
と 記述しています。
ありがとうございます。表示できるようになりました。使いやすくなるように工夫してみたいと思います。
下記のような演算フィールドを作成して、それでグループ化すればいいでしょう。
年度: Year(DateAdd("m",-3, [入出庫日])
これで、入出庫日 2019/4/1 ~ 2020/3/31 のレコードの年度は 2019 になります。
SQLなら、
棚卸しはするのでょうか。
前回の質問の画像には
「入出庫備考」フィールドに「棚卸在庫数」というのがあったので、
期末(3月末日)に棚卸をするのかな。
もし、そうなら、
それがそのまま 期末在庫数 ということになりますね。
また、それが、次期の期首在庫数(繰越) ということですね。
[入出庫備考]を 棚卸在庫数 として、[入庫数量] に 棚卸結果を入力すればいいですね。
入出庫日 は期首の日付(4/1)にしておくと後々処理が楽です。
そうすれば、
帳簿上の在庫は、下記のSQLで取得できます。
これと、棚卸在庫数 を比較すれば,実数と帳簿数の過不足数も取得できます。
ありがとうございます。
テーブル C1_入出庫台帳 フィールド 入出庫ID、入出庫日、品名ID、入庫数量、出庫数量、入出庫備考、従業員ID
を元に C1_入出庫台帳期毎クエリ をつくりました。SQLが下記になります。
SELECT DISTINCTROW C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID, Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計], Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY C1_入出庫台帳.入出庫日, C1_入出庫台帳.品名ID;
1、4/1~3/31の1期の中での製品ID毎の入庫数量、出庫数量の合計数をリスト形式で表示する。
2、期首在庫数量、期末在庫数量を表示する。
3、繰越処理をできるようにする。
4、年度選択によって選択年度の入庫数量、出庫数量の合計数の表示ができるようにしたいのですが
○1 クエリでの4/1から3/31の設定の仕方
○2 期末在庫数の記録の仕方
○3 期末在庫数の繰越処理の仕方
がわかりません。 自分にはハードルが高いことは承知しておりますが、なんとか作り上げたいと思っておりますのでご教授いただければと思います。よろしくお願いいたします。
他に テーブル B1_在庫品マスター フィールド 品名ID、品名、メーカー名 ・・・があります。
期は、4/1~3/31 でしょうか。1/1~12/31でしょうか。
どのようなことがしたくて、どこまでやった、どこがわからないのでしょうか。
もう少し具体的かつ詳細に説明してもらえますか。
いろいろ複雑なこともあると思いますので、よろしかったら、現状のフォームを右のファイル送信フォームから送ってもらえれば、内容を見て、具体的にアドバイスができると思います。
ありがとうございます。
今日は何もできなかったのでまた来週検証してみます。
ありがとうございます。本当に数量に必要なものだけにすると1レコードで表示されました。
GROUP BY から C1_入出庫台帳.入出庫備考 を外してみたらどうでしょうか。
入出庫備考 も表示する場合は、同じく、
Max(C1_入出庫台帳.入出庫備考) As 入出庫備考
で。
ありがとうございます。よく見ればわかることですね。お手数をおかけしました。
参考までにお尋ねしたいのですが、現在は
年月 商品ID 入庫数合計 出庫数合計
2019年4月 1 50
2019年4月 1 25
と表示されますが
年月 商品ID 入庫数合計 出庫数合計
2019年4月 1 50 25
というように1つのレコードして表示することは可能なのでしょうか?
ファイル更新しました。
パスワードは
ah10020616 です。
お世話になります。
そうですね。閉じるボタンを消すほどのこだわりはいらないですね。
おっしゃるとおりに修正しました。
コードを見る限りは問題なさそうです。
実物をみないと原因の特定は難しそうです。
DoCmd.FindRecord はフォーカス移動させる必要があったり扱いが面倒なので、
別案を提案しておきます。
自社コード フィールドのデータ型が数値型の場合です。
テキスト型の場合は、下記のように ' で囲んでください。
GROUP BY に 入出庫ID があるので、入出庫ID が異なれば別グループになりますので、入出庫ID 6 と 12 は集計されませんね。
GROUP BY から 入出庫ID を削除してください。
もし、入出庫ID を表示させてたいのなら、
Min(C1_入出庫台帳.入出庫ID) As 入出庫ID
というフィールドを追加してください。
(小さいほうの入出庫IDが表示されます。)
なるほど、勉強になります。
ありがとうございます。
ありがとうございます。
JANコード 以外にも 自社コード での商品検索がありますので参考にして下記のように記述したところ
メインフォームでのレコードの移動はできているのですが
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。" が表示されてしまいます。
どこが間違っているのでしょうか?
Private Sub Btn 自社コードで検索する_Click()
If Nz(Me.自社コード検索, "") = "" Then
MsgBox "自社コード入力欄 に値が入力されていません。自社コードを入力してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
Exit Sub
End If
Forms![C15_入出庫履歴_メイン].SetFocus
Forms![C15_入出庫履歴_メイン]!自社コード.SetFocus
DoCmd.FindRecord Me.自社コード検索, acEntire
If Me.自社コード検索 = Forms![C15_入出庫履歴_メイン]!自社コード Then
DoCmd.Close acForm, Me.Name
Else
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
End If
End Sub
ありがとうございます。
SELECT DISTINCTROW C1_入出庫台帳.入出庫ID, Format$([C1_入出庫台帳].[入出庫日],'mmmm yyyy') AS [入出庫日 を月でグループ化], C1_入出庫台帳.品名ID, C1_入出庫台帳.入出庫備考, Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計], Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY C1_入出庫台帳.入出庫ID, Format$([C1_入出庫台帳].[入出庫日],'mmmm yyyy'), C1_入出庫台帳.品名ID, C1_入出庫台帳.入出庫備考, Year([C1_入出庫台帳].[入出庫日])*12+DatePart('m',[C1_入出庫台帳].[入出庫日])-1;
入出庫ID 6 と 12 は 品名ID 1 で同じ2019年4月 に出荷されているので集計されて出庫数量の合計欄が 15 にならないといけないと思うのですが?私の間違いでしょうか?
画像が見づらいので、詳細が分かりません。
クエリをSQLビューにして表示されるSQL文をコピーして貼り付けてもらえますか。
また、どのようにうまく集計できないのか、言葉で説明してもらえますか。
Windowsの普通のアプリには閉じるボタン(×)がついているものです。それをあえて消すのは、あまりよい設計とはいえないと思います。
フォーム上の閉じるボタンでも、ウィンドウの閉じるボタンでも同じ動作になるように設計すればいいだけのことです。
閉じる時に必要な処理は、メインメニューの「閉じる時」に記述すればいいでしょう。処理の最後に、
DoCmd.Quit でAccessを終了します。
フォーム上の閉じるボタンは、単純に
Docmd.Close
だけでいいでしょう。
txt氏名ID のコントロールソースには何も設定しません。
既定値には、実際に存在する 氏名ID を設定しておいてください。
その個人のデータが開いた直後に表示されます。
あるいは、下記の式を設定しておいてもいいでしょう。
=DLookup("氏名ID","個人マスター")
テーブルの先頭の個人のデータが表示されます。
テキスト型でいいと思います。数値型だと桁数オーバーになったり、先頭の0が消えたりしますので。
フィールドの「IME入力モード」は「オフ」にしておくといいでしょう。
非連結テキストボックスの場合、通常は IsNull でいいと思います。
通常のユーザーによる入力では "" になることはないので。
ただし、VBAで "" を代入したりすると、""(空文字列)なることもあるので、Nzの方がより安全かとは思います。
連結なら、フィールドの方で、「空文字列の許可」を「いいえ」にすれば、"" になることはないので、IsNullで問題ないです。
逆に、「空文字列の許可」を「はい」、「値要求」を「はい」にすると、Nullになることはなく、
Me.JANコード検索 = "" でOKということになります。
本来、バーコードのデータ型は数値型とデータ型のどちらを使うべきなのでしょうか?
何もわからないので 住所入力支援のカスタマバーコードがテキスト型なのでテキスト型にしていますが・・・?
テーブル B1_在庫品マスター の フィールド JANコード のデータ型がテキスト型だからではないでしょうか?
テキストボックスってIsNullでいいんでしたっけ?
いつもこんな感じでやってますが
クリック時のプロシージャの冒頭に下記のコードを挿入してください。
ありがとうございます。
予定フィールドの氏名IDは数値型でサブフォームにはコンボボックスで作成しています。
>txt氏名ID に氏名IDを入力しておく必要があります。規定値にも氏名IDを設定しておいて試してみてください。
txt氏名IDのコントロールソースと規定値に[氏名ID]にすると、
実行時エラー'2424'
指定した式にMicrosoftAccessが見つけることができないフィールド、コントロール、プロパティ名が含まれています。
になります。
txt氏名IDのコントロールソースと規定値に=[F_calendarSF].[Form]![氏名ID]を設定しましたが同じく3075の実行時エラーが出ます。
サブフォームの氏名IDの規定値に数字を入れていくと、メインフォームサブフォームとも規定値のIDのスケジュールだけが表示されました。
出来れば入力フォームを開くときにIDを聞かれてそれを表示するという形にしたいです。
御世話になります。
上記に加えて、
テキストボックス JANコード検索 が 空 のままで間違って JANコードで検索するボタン を押してしまった場合
JANコード検索 に値が入力されていません。JANコードを入力してください。と表示させたい時はどうのようにしたらよいのでしょうか?
すみません。私の勘違いでした。
クエリーなどの修正をするときは、Accessウィンドウには右上に×ボタンが表示されていますね。
Accessの閉じるボタンを消したことによって、クエリーなど修正したときに 閉じることができなくなりますが
そこは Alt+F4 で閉じるようにしたいと思っています。
もうひとつ実行してみました。
メインメニュー起動時にAccessの閉じるボタンが右上に表示されますが、ここはメインメニューの閉じるボタンのみで
閉じてもらいたいので、そのようにしてみました。
多少、起動までに重たくなった気がするのですが 何か関係があるのでしょうか。
ファイル更新します。
提供版.zip2 です。
よろしくお願いいたします。
ひとつ気になった点がありました。
DBを起動するとメニューフォームが画面の左上に表示されてしまうことです。
ネットで調べて なんとかメニューフォームが立ち上がる時に画面の中央に来るようにしてみました。
いかがでしょうか?
ファイル更新します。
ご返信ありがとうございます。
ファイルのコードに無駄な記述があるのですね。
その都度、必要なことを調べながら記述していったので無駄が生じていったのかもしれません。
社員マスタのデータの入れ替えを行い、動作を確認しました。
まだ、ひとつひとつのコードの確認を行っていませんので 週末にじっくりと確認し学習したいと思います。
txt氏名ID に氏名IDを入力しておく必要があります。規定値にも氏名IDを設定しておいて試してみてください。
あと、下記の点にも教えてください。
予定フィールドの 氏名ID フィールドは数値型ですか、テキスト型ですか。
ありがとうございます。入院していましたのでお返事できませんでした。よく見て勉強させていただきます。
ありがとうございます。
会社からはhatenaさんのhatena chipsがブロックされてしまってスマホからメモ帳に打ち直していました。(^^;)
教えてもらったように実行したところ、
実行時エラー'3075'
クエリ式'日付>#2019/04/27# AND 日付 <=#2019/06/08# And 氏名ID='の構文エラー:演算子がありません。
と出ました。
色々調べてはみて空白を入れてみたり消してみたり、引用符を消してみたり変えてみたり、氏名IDのテキストボックスの書式を数値にしてみたりしましたが解決しませんでした。
フォーム上の設定ミスでしょうか?