こんにちは、あんこ先生です。
判断ミスや入力ミスなど、ヒューマンエラーを削減したくありませんか?
実は、QRコードを読み込ませるやり方に変えれば実現できます。
QRコードは簡易な情報を埋め込み、スキャナーで読み取ることに適したアイテムです。
例えば、棚卸アプリをユーザーに操作させる場合、商品が多すぎて選択に時間がかかったり、類似番号の選択ミスなどが発生しますよね。
QRコードなら、商品コードを埋め込み、それを読み込ませることで正しい選択が行えます。
従って、選択肢が多ければ多いほど、その恩恵は大きなものになります。
そのため、QRコードを読み込ませるやり方にシフトしてみましょう!
この記事では、バーコードスキャナーコントロールの使い方と主要プロパティを解説します。
さらに、すぐ使える活用事例をコード付きで紹介します。
実際にコードをコピペして、動作を確認してみましょう!
QRコードとは

概要
QRコードは、日本の某自動車部品メーカーが発明したマトリックス型二次元コードです。
Quick Response の頭字語であり、高速読み取りを目的の1つとしています。
専用のリーダーを介することで、高速かつ正確に情報を読み取れます。
バーコードと異なり、読み取り精度が高く、ストレスを感じさせません。
コンパクトなサイズでぱっと見てなんの情報がわからないところがいいですね。
QRコードの作り方はこの記事を参考にしてください。
バーコードスキャナーコントロールについて
バーコードスキャナーコントロールとは│BarcodeScanner
Android または iOS デバイスでQR コードなどをスキャンします。
このコントロールでは、 ブラウザでのスキャンをサポートしていません。
QRコードなどから読み取った値を、戻り値として返します。
つまり、QRコードなどに埋め込まれた情報を読み取ることに特化したコントロールなのです。
バーコードスキャナーコントロールの設置方法
リボンの挿入から下記アイコンを選べばバーコードスキャナーコントロールが追加できます。

主要プロパティの使い方│バーコードスキャナー
バーコードスキャナーコントロールの主要プロパティは、次の3点です。
- バーコードが正常にスキャンされたときに実行するアクションを指定するOnScanプロパティ
- ユーザーがバーコードスキャンをキャンセルしたときに実行するアクションを指定するOnCancelプロパティ
- 選択されたアイテム(戻り値)のValueプロパティ
これらの設定方法は次の通りです。
スキャン成功時
OnScanプロパティ
Set(_reader,BarcodeScannerxx.Value //スキャン結果を変数に落とし込む
- スキャンが成功したときに処理されます。
- 戻り値は変数やコレクションに落とし込まないと、次スキャンで上書きされます。
スキャンキャンセル時
OnCancelプロパティ
Notify(“キャンセルしました。”) //キャンセルをユーザーに通知
- スキャンをキャンセルしたときに処理されます。
- 戻り値は上書きされません。
戻り値
バーコードスキャナーコントロールの戻り値はValueプロパティです。
Labelxx.Textプロパティ
BarcodeScannerxx.Value //読み取った情報をテキスト型で表示
- 戻り値をキーに、Filter関数やLookUp関数でデータソースをコントロールできます。

バーコードスキャナーコントロールは、スキャン結果を表示しません。
ラベルコントロールなどにスキャン結果を表示すると便利です。
その他プロパティの使い方
※色やサイズ変更など他コントロールと共通したプロパティの説明は省いています。
スキャンするバーコードタイプの指定│BarcodeType
- 初期値は自動判定です。
- スキャン時、周辺に別タイプのバーコードがある場合は、誤検出を防ぐため、読み取れるタイプを制限しておきます。
懐中電灯自動オン│FlashlightEnabled
- スキャン時に、ライトが連動して転倒するか設定できます。
- 暗い場所でスキャンするときは、オンにしておきましょう。
スキャナー起動ボタンのテキスト│Text
- 初期値はスキャンです。
- わかりやすく読み取りなどに変えてもよいですね。
活用事例とサンプルコード│バーコードスキャナー
読み取った値でギャラリーをフィルター(絞り込み)する
Galleryxx.Itemsプロパティ
Filter(データソース名,項目名=”戻り値”)
//価格表テーブルの購入価格から戻り値より安価なものを抽出
Filter(M_PriceList,PurchasePrice<Value(BarcodeScanner01.Value))

- 戻り値をFilter関数の条件に使って合致したレコードのみ表示します。
- あんまり用途は思いつきませんね。
読み取った値でフォームのレコードを変更する
Formxx.Itemプロパティ
LookUp(データソース名,項目名=”戻り値”)
//商品テーブルの商品コードと戻り値が一致するレコードを抽出
LookUp(M_ProductList,Code=Value(BarcodeScannerxx.Value))

- 戻り値をLookUp関数の条件に使って合致したレコードを表示します。
- LookUp関数の性質上、合致した一番最初のレコードを持ってくるため、一意な値を抽出する必要があります。
アイコンと組み合わせて見た目をよくする

- 初期ボタンではあまりにも無骨すぎます。
- アイコンのカメラを設置し、その上に透明化したバーコードスキャナーコントロールを被せます。
- 視覚的にもわかりやすくなります。
連続読み取り
BarcodeScannerxx.OnScanプロパティ
Patch(T_棚卸記録,LookUp(T_棚卸記録,FixturesID=Value(BarcodeScanner01.Value)),{Date:Now(),Check:true});
Select(BarcodeScannerxx)
- OnScanプロパティで読み取りに成功する都度、データソースにその結果を書き込んでいきます。
- Select関数で再度スキャナーを起動します。これにより、連続読み取りが実現できます。
- 読み取り中にキャンセルを押せば、ループから抜け出せます。
- 情報化機器や備品などユニークな機材を棚卸するときに便利です。
- 反面、数量の入力を伴う読み取りには向きません。
入退室管理
BarcodeScannerxx.OnScanプロパティ
If(LookUp(T_利用状況,RoomID=Value(BarcodeScanner01.Value),EnterDate<LeaveDate),
Patch(T_利用状況,LookUp(T_利用状況,RoomID=Value(BarcodeScanner01.Value)),{EnterDate:Now(),EnterPerson:User().FullName,LeavePerson:"空"}),
Patch(T_利用状況,LookUp(T_利用状況,RoomID=Value(BarcodeScanner01.Value)),{EnterPerson:"空",LeaveDate:Now(),LeavePerson:User().FullName})
)

- 部屋ごとのIDを埋め込んだQRコードを読み込ませ、入室と退室情報を記録します。
- 部屋が使用中かどうかを把握できます。作りこめばだれがどこにいるのか、部屋の予約などもできます。
- フリーアドレス制の座席や社有車管理にも流用できますね。
失敗例から学ぶ│バーコードスキャナー
戻り値はテキスト型
Filter関数など条件で比較する左辺と右辺の型が一致しないとエラーを吐き出します。
知識や経験の浅いころはこれが理解できず、意図したレコードを抜けませんでした。
数値として扱う場合は、Value関数で囲みます。
日付型として扱う場合は、Date関数で変換するよりも、日付の選択コントロールのDefaultプロパティを経由する方が楽です。
まとめ
バーコードスキャナーコントロールの要点をまとめると次の3点です。
- QRコードなどを読み取り、埋め込まれた値をテキスト型として返す。
- 人の判断、入力を介さないため、ヒューマンエラーを防止できる。
- これまたアイデア次第で応用の幅は無限大!
あなたもバーコードスキャナーコントロールを使いたくなりませんか?
学んだことを活かして、素敵なアプリを作成しましょう!
バーコードスキャナーコントロールを使ったアプリの作成方法を紹介しています。
初心者用です。
読み取った情報をもとにデータソースと照合して、レコードやフィールドを引っ張ってこれるよ。