#09 | 次の商品のバーコードの読み取り待ち状態の設定 | ||
一般的なレジ操作を思い浮かべれば分かるとおり、購入された商品は次々に単にバーコードが読み取られていくだけです。購入数量がみな1ケだけであれば、商品ごとに数量を入力したり商品ごとにEnterキーを押したりといった操作はありません。 一方、Accessのフォームの場合、次の商品の商品コードを入力するには、次のレコード、つまり新規レコードへとカレントレコードを進めなければなりません。本データベースの元の仕様であれば、すべてのデータをキーボードから入力したりマウスで選択したりするマニュアル操作が基本ですので、順番に所定のデータを入力していけばおのずと次レコードにフォーカスが移動します。さらに、#8のカスタマイズによって「数量」欄でEnterキーを押すだけで次レコードにフォーカスが移動するようになっています。しかし今回はそのような簡単なキー操作さえもできる限り除外しなければなりません。 そのようなことから、JANコードを次々と読み取るだけで連続した商品データを入力できるようにするためには、『もし数量入力待ちの状態で次の商品のバーコードが読み取られたら、カレントレコードを新規レコードに移動し、そのJANコードを自動入力する』という仕様にカスタマイズする必要性が出てきます。 このような処理を行う場合、まず考えられるのが「数量」テキストボックスの更新前処理イベントを使った次のような方法です。
この処理を行うプログラムは次のようになります。 Private Sub Form_Error(DataErr As Integer, Response As Integer) 'フォームのエラー時 Dim strInputCode As String If Me.ActiveControl.Name = "数量" Then 'アクティブコントロールが数量のとき If DataErr = 2113 Then '入力データ型が不正なとき '入力された値を変数に保存 strInputCode = Me!数量.Text '入力をキャンセル Me!数量.Undo '新規レコードに移動 Me.Recordset.AddNew '保存した値を入力 Me!商品コード = strInputCode '商品コードの更新後処理イベントを実行 商品コード_AfterUpdate 'エラーを無視して継続 Response = acDataErrContinue End If End If End Sub これを実行すると、次のような画面になります。見た目はこれまでと同じですが、とにかくバーコードを次々と読み取るだけの作業を行った結果の画面です。 ただし、このプログラムはまだ基本的な部分だけで、厳密には次のようなことも考慮する必要があります。
なお、全体の操作手順をどのようにするかという考え方に依存するのですが、次のような仕様も考えられます。 『とにかくバーコードを読み取り完了した時点で次々と新規レコードに移動していくようにする』この場合には、「商品コード」テキストボックス以外のすべてのコントロールの「タブストップ」プロパティを"いいえ"にすることでその操作を実現できます。#8のカスタマイズを踏まえれば、「数量」テキストボックスだけその設定変更を行うことで実現できます。ただし「1」以外の数量を入力したい場合もあるでしょうから、それについてはマウスを使うか、本シリーズで後述する矢印キーやファンクションキーによる例外的操作をモジュールに加えることになります。 |
|||
|
Copyright © T'sWare All rights reserved |