気づいたらバーコードスキャナーがバーコードリーダーに変わっていました。
結構仕様が変わってるので記事を書き直しています。
こんにちは、あんこ先生です。
判断ミスや入力ミスなど、ヒューマンエラーを削減したくありませんか?
実は、QRコードを読み込ませるやり方に変えれば実現できます。
QRコードは簡易な情報を埋め込み、スキャナーで読み取ることに適したアイテムです。
例えば、棚卸アプリをユーザーに操作させる場合、商品が多すぎて選択に時間がかかったり、類似番号の選択ミスなどが発生しますよね。
QRコードなら、商品コードを埋め込み、それを読み込ませることで正しい選択が行えます。
従って、選択肢が多ければ多いほど、その恩恵は大きなものになります。
そのため、QRコードを読み込ませるやり方にシフトしてみましょう!
この記事では、バーコードスキャナーコントロールの使い方と主要プロパティを解説します。
さらに、すぐ使える活用事例をコード付きで紹介します。
実際にコードをコピペして、動作を確認してみましょう!
Contents
QRコードとは
概要
QRコードは、日本の某自動車部品メーカーが発明したマトリックス型二次元コードです。
Quick Response の頭字語であり、高速読み取りを目的の1つとしています。
専用のリーダーを介することで、高速かつ正確に情報を読み取れます。
バーコードと異なり、読み取り精度が高く、ストレスを感じさせません。
コンパクトなサイズでぱっと見てなんの情報がわからないところがいいですね。
QRコードの作り方はこの記事を参考にしてください。
バーコードリーダーコントロールについて
バーコードリーダーコントロールとは│BarcodeReader
Android または iOS デバイスでQR コードなどをスキャンします。
旧版のバーコードスキャナーと同じで ブラウザでのスキャンをサポートしていません。
QRコードなどから読み取った値を、戻り値として返します。
つまり、QRコードなどに埋め込まれた情報を読み取ることに特化したコントロールなのです。
読み取った情報をもとにデータソースと照合して、レコードやフィールドを引っ張ってこれるよ。
バーコードリーダーコントロールの設置方法
リボンの挿入から下記アイコンを選べばバーコードリーダーコントロールが追加できます。
主要プロパティの使い方│バーコードリーダー
バーコードリーダーコントロールの主要プロパティは、次の3点です。
- バーコードが正常にスキャンされたときに実行するアクションを指定するOnScanプロパティ
- ユーザーがバーコードスキャンをキャンセルしたときに実行するアクションを指定するOnCancelプロパティ
- 選択されたアイテム(戻り値)のBarcodesプロパティ
これらの設定方法は次の通りです。
スキャン成功時
OnScanプロパティ
Set(glbScan,BarcodeReader1.Barcodes) //スキャン結果を変数に落とし込む
- スキャンが成功したときに処理されます。
- 戻り値は変数やコレクションに落とし込まないと、次スキャンで上書きされます。
- またテーブル型で返ってくるため、1件のみスキャンでもFirst関数などと組み合わせる必要があります。
スキャンキャンセル時
OnCancelプロパティ
Notify(“キャンセルしました。”) //キャンセルをユーザーに通知
- スキャンをキャンセルしたときに処理されます。
- 戻り値は上書きされません。前回分が残ります。
戻り値
バーコードリーダーコントロールの戻り値はBarcodesプロパティです。
スキャンした件数に関係なくテーブル型なので扱いに注意しましょう。
Labelxx.Textプロパティ
First(BarcodeReader1.Barcodes).Value //情報をテキスト型で表示
First(BarcodeReader1.Barcodes).Type //バーコードの種類をテキスト型で表示
- 戻り値のBarcodes.Valueをキーに、Filter関数やLookUp関数でデータソースをコントロールできます。
バーコードリーダーコントロールは、スキャン結果を表示しません。
ひとまず変数などに格納し、ラベルコントロールにスキャン結果を表示すると便利です。
その他プロパティの使い方
※色やサイズ変更など他コントロールと共通したプロパティの説明は省いています。
スキャンするバーコードタイプの指定│BarcodeType
- 初期値は自動判定です。
- スキャン時、周辺に別タイプのバーコードがある場合は、誤検出を防ぐため、読み取れるタイプを制限しておきます。
懐中電灯自動オン│FlashlightEnabled
- スキャン時に、ライトが連動して点灯するか設定できます。
- 暗い場所でスキャンするときは、オンにしておきましょう。
スキャナー起動ボタンのテキスト│Text
- 初期値はスキャンです。
- わかりやすく読み取りなどに変えてもよいですね。
活用事例とサンプルコード│バーコードリーダー
読み取った値でギャラリーをフィルター(絞り込み)する
Galleryxx.Itemsプロパティ
Filter(データソース名,項目名=”戻り値”)
//商品テーブルからスキャンした商品コードで絞り込む
Filter(商品テーブル,商品番号=First(BarcodeReader1.Barcodes).Value)
- 戻り値をFilter関数の条件に使って合致したレコードのみ表示します。
- 商品の情報を取得したり、在庫情報を確認したりできますね。
読み取った値でフォームのレコードを変更する
Formxx.Itemプロパティ
LookUp(データソース名,項目名=”戻り値”)
//商品テーブルの商品コードと戻り値が一致するレコードを抽出
LookUp(商品テーブル,商品主キー=First(BarcodeReader1.Barcodes).Value)
- 戻り値をLookUp関数の条件に使って合致したレコードを表示します。
- LookUp関数の性質上、合致した一番最初のレコードを持ってくるため、一意な値を抽出する必要があります。
アイコンと組み合わせて見た目をよくする
- 初期ボタンではあまりにも無骨すぎます。
- アイコンのカメラを設置し、その上に透明化したバーコードリーダーコントロールを被せます。
- 視覚的にもわかりやすくなります。
連続読み取り
BarcodeReader1.OnScanプロパティ
ForAll(BarcodeReader1.Barcodes,
Collect(colScan,{Type:ThisRecord.Type,Value:ThisRecord.Value})
)
- ScanningModeプロパティをScanMultipleに切り替えて連続読取りモードに変更しておきます。
- OnScanプロパティでまとめてスキャンした結果をコレクションに書き込んでいきます。
- 情報化機器や備品などユニークな機材を棚卸するときに便利です。
- 複数ある場合でもその数だけスキャンすればよいので便利ですね。
- 数量が多い読み取りには向きません。あとから数量を入力させるようにしましょう。
入退室管理
BarcodeReader1.Scanプロパティ
With({rec:LookUp(T_利用状況,RoomID=First(BarcodeReader1.Barcodes).Value)},
If(rec.EnterDate<LeaveDate,
Patch(T_利用状況,rec,{EnterDate:Now(),EnterPerson:User().FullName,LeavePerson:"空"}),
Patch(T_利用状況,rec,{EnterPerson:"空",LeaveDate:Now(),LeavePerson:User().FullName})
)
)
- 部屋ごとのIDを埋め込んだQRコードを読み込ませ、入室と退室情報を記録します。
- 部屋が使用中かどうかを把握できます。作りこめばだれがどこにいるのか、部屋の予約などもできます。
- フリーアドレス制の座席や社有車管理にも流用できますね。
失敗例から学ぶ│バーコードリーダー
戻り値はテーブル型
Filter関数など条件で比較する左辺と右辺の型が一致しないとエラーを吐き出します。
知識や経験の浅いころはこれが理解できず、意図したレコードを抜けませんでした。
まずLookUp関数などでテーブル型をレコード型にしてからスキャンした値の型を変換してみましょう!
まとめ
バーコードリーダーコントロールの要点をまとめると次の3点です。
- QRコードなどを読み取り、埋め込まれた値をテキスト型として返す。
- 人の判断、入力を介さないため、ヒューマンエラーを防止できる。
- これまたアイデア次第で応用の幅は無限大!
あなたもバーコードリーダーコントロールを使いたくなりませんか?
学んだことを活かして、素敵なアプリを作成しましょう!
バーコードリーダーコントロールを使ったアプリの作成方法を紹介しています。
初心者用です。
BarcodeScannerに関してご質問です。
バージョンアップによってBarcodeReaderではOnSelectプロパティをサポートしていないため連続起動ができなくなりました。どうにかしてBarcodeReaderを連続で起動させる方法はありませんでしょうか?
ご質問ありがとうございます。
コントロールそのものが変わってるので記事書き直さないといけませんね💦
連続で読み取るにはScanningModeをScanMultipleにします。
これでバーコード等を読み取っても継続するので思う存分スキャンしてください。
あとはOnScanで戻り値のBarcodeReader1.Barcodesをデータソースに書き込んでください。
Barcodesはテーブル型なのでForAllがオススメです。
初回検知したバーコードを連続で読み取って行きたいのですが、単発だとAutomatically scanで実現できると思います。連続で読み取りたい場合にScanMultipleにすると初回検知した物が自動で取り込めなくなります。
ScanMultipleで検知した物と取り込むようなものを作れないでしょうか?
こんにちは!
複数読み込んで取り込めば、バーコードリーダー.Barcodesで利用できますよ
テーブル型なのでギャラリーに展開すると使いやすいです