DAOで指定したIDの項目を更新する。美容室向け顧客管理システム 開発日記4日目

2020/02/23

Microsoft Accessでアプリを作成中。まだお客様の管理画面にとどまっていますが、だいぶ作りこみが進んできました。

ご予約と直来店のボタンを作りました。その名の通り、将来の日付を指定する場合と、お客様が予約なく直接来店した場合にすぐに登録できるボタンを分けてみました。

登録用のダイアログが開きます。予約日は手入力できますが、本日や現在時刻のボタンを押すとその数字も入ります。

メモ欄は空欄でも入力しても構いません。予約登録ボタンを押したときに、メモ欄が空欄だった場合は、「ご予約」という文字列が入るようにしました。もちろん後から書き換えられます。ここは環境設定画面で切り替えられるようにしておいてもいいかも。後で考えます。

登録すると画面下の来店履歴に加わります。最初の段階では「ご予約中」のステータスが表示されています。さっき入力したメモ欄はここでも直接編集できます。

美容院での担当っていう概念がいまいちわからなかったので、お客様のマスタに担当者はあるのですが、来店時にその人がいなかったらどうなるの?ってことも考えて、来店履歴ごとにも担当欄をつけています。このデータは「DAT_売上」のテーブルに書き込まれます。

さて、実際にお客様が来店したら、「明細」ボタンを押します。

最初の段階ではカテゴリが入力待ちになっています。実際に行ったメニューに切り替えていきます。

カテゴリを切り替えると、メニューも「MST_メニュー」のテーブルに従って表jいされます。そのテーブルに登録されている単価が自動反映します。複数のメニューを追加すると、売上合計も自動計算されます。

売上合計の部分は以下のようにコントロールソースにSUM関数を組み込むことで簡単に仕込むことができます。

最後に閉じるを押すと、ダイアログは閉じて来履歴一覧の金額欄に反映するべきだんだけれど、ここに苦労しました。「DAT_売上明細」テーブルではメニュー単品が売上IDと関連づいているので、表示だけSUM関数で都度計算させてもいいかな思っていたんだけれど、結局は「DAT_売上」テーブルに「売上合計」という列を作って、DAOのレコードセットをEDITを使って変更するという方法を使ってみました。

Private Sub update_価格()
    'フォームを閉じるときに売上を明細の売上合計で更新
   
    売上ID = Me.txt_売上ID
    '売上テーブルの合計金額を明細閉じる際に更新する。
        
        Dim DB As DAO.Database
        Dim RS As DAO.Recordset
        
        Set DB = CurrentDb
        Set RS = DB.OpenRecordset("DAT_売上", dbOpenDynaset)
        
        RS.FindFirst "ID= " & 売上ID
        
        RS.Edit
        RS!売上合計 = Me.txt_total
        
        RS.Update
        RS.Close: Set RS = Nothing
        DB.Close: Set DB = Nothing
End Sub

これで「ご予約中」のオレンジの表示が消えて、4000円という金額が表示されました。

ステータスを条件付き書式で色分け

色使いとか表示はもうちょっと工夫がいるかもだけれど、同じ予約中でも条件によって色分けさせました。

当日なら日付が緑になって、かつオレンジ色の「ご予約中」表示。未来日ならご予約中は茶色。過去日で結局お客様来店しなかった場合はブルー。

フォームで「書式」のリボンを選択すると、「条件付き書式」というボタンが表示されます。条件によって色を変えたいセルを選択した状態で押します。

日付が当日より大きい値で、かつステータスが「予約中」か、など柔軟に設定できます。ノーショー(現れなかった)場合は背景をグレーにするなどもっとばっさりわかるようにしてもよいかもですね。

ノーショーが多い要注意客をさがせる?

ノーショーは「DAT_売上明細」を登録しなかったものなので、カテゴリが「入力待ち(ID999)」のものをクエリで絞り込めそうです。そういう切り口で分析するのもアリかもしれませんね。