#06 直ちに商品コード入力可能な状態にする

今回のパソコンレジ化のカスタマイズでは、まず商品のJANコードをバーコードリーダーで読み取るというのがその基本手順となっています。そのため、「売上伝票入力」画面が開かれるとともに、「商品コード」の入力欄にフォーカスをおき、直ちにそのデータを入力可能な状態にしておく必要があります。

そのためには、1つの手段として、フォーム内に配置されているコントロールの「タブ移動順(タブオーダー)」プロパティを変更するという方法があります。デフォルトのデザインでは、次のようにその順番が設定されています。
  1. 伝票番号
  2. 売上日付
  3. 見積番号
  4. 納品先コード
  5. 納品先名
  6. 納品先敬称
  7. 請求先コード
  8. 請求先名
  9. 請求先敬称
  10. 取引区分
  11. 担当者コード
  12. 摘要
  13. frm売上伝票入力_sub
  14. 各コマンドボタン

このフォームでは、「伝票番号」や「見積番号」のテキストボックスは"使用不可"に、「売上日付」は「タブストップ」プロパティが"いいえ"に設定されています。そのため、フォームを開くと「納品先コード」のテキストボックスに最初にフォーカスが移動し、「顧客コード」をまず入力するという状態になります。そこでここでは、「frm売上伝票入力_sub」サブフォームコントロールのタブオーダーを変更して、それを先頭に持っていけばよいわけです。


しかしながら、本データベースに関してはこのような簡単な処置ではうまく動作しません。それは「frm売上伝票入力」フォームの「cbfInitData」プロシージャという初期化処理において次の伝票の伝票番号が生成されるという、本データベースの処理タイミングに起因するものです。上記のタブオーダーの変更だけを行うと、メインフォーム側の「伝票番号」が設定される前にフォーカスがサブフォームに移動してしまい、メイン/サブフォームのリンクがうまくいきません。つまり、サブフォーム側の「伝票番号」が未設定のままになってしまうのです。従来のタブオーダーであれば、伝票番号生成→メインフォームの入力→サブフォームの入力という流れによって、サブフォームにデータを入力し始める段階ではすでにサブフォーム側の伝票番号が確定し、うまくリンクが行われます。しかし、その順番が変わることによって、サブフォーム側のコントロールソースのリンクフィールドが未入力ということで、データを保存することができなくなってしまいます。この不具合の現象は、タブオーダーを変えたあと、商品データを入力、それを保存しようとしたときに実際に確認できます。


そこで、この問題を回避する手段として、上記のタブオーダーの変更にはいっさい手を付けず(上記の変更を行うと以下の変更が活かされません)、VBAによってフォーカスの移動を処理します。具合的には、「frm売上伝票入力」フォームの「cbfInitData」プロシージャ内に、次に示すフォーカス移動のための2行のコードを追加します。伝票番号の生成処理が完了したあとに記述するのがポイントです。ただし、これはあくまでも本データベース固有の処理形態によるものであるということに注意してください。


   (一部抜粋)

  '削除結果を反映させるために再クエリー
  Me.Requery
  Me!frm売上伝票入力_sub.Requery

  '次の伝票の伝票番号を生成
  Me!伝票番号 = CreateSlipNumber("tbl売上", "伝票番号")

  'サブフォームの商品コードにフォーカスを初期移動
  Me!frm売上伝票入力_sub.SetFocus
  Me!frm売上伝票入力_sub!商品コード.SetFocus

  DoCmd.Echo True

Exit_Here:
  On Error Resume Next
  '編集フラグを初期化
  pblnEditedFlg = False
  Exit Sub

上記変更を行ったら、実際にフォービューを開いてみましょう。少々ややこしい考え方をしなければいけない部分ですが、結果的には2行のコードを追加しただけで、これまでと違い、商品コード欄にはじめからカーソルがあることが確認できるはずです。
商品コード欄にはじめからカーソルがある
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved