FC2ブログ

TreeViewコントロールに挑戦

POSレジソフトも開発・使用中ですが、それに連携する商品管理ソフトも作成しています。

かなり完成に近づいてきました。
商品管理

画面左側に商品分類ツリーを設けているところが”ミソ”です。
Access VBAのTreeViewコントロールを使いましたが、だいぶ苦労しました。

商品分類テーブルから分類名を取出し、NodesコレクションのAddメソッドを使って”ノード”を登録していくのですが、
TreeView.Nodes.Add [Relative], [Relationship], [Key], [Text], [Image], [SelectedImage]
の式の中の[Text]が登録するノードの表示名で、[Key]がノードを識別する名前になります。
このKeyをTextと同じ内容にしている例があるのですが、Key値は重複が許されません。
分類ツリーが細分化していくと、どうしても同じ分類名が出てくる(例えば、LANケーブルにも2mがあるし、USBケーブルにも2mがある)可能性があるので、Text値は重複しますが、Key値は一意の値にしないといけないのです。
そこで、同じ親の中には重複する子供の名前は無いので、[親名]&[子名]をKey値としました。
また、分類の親子関係が必要になるので、分類テーブルには親分類のフィールドを設定しています。
分類は5階層まで設定したので、Do~Loopを5重の”入れ子”にし、登録部分のコードが出来上がりました。

このツリー・ビューの目的は、分類名をクリックするだけでフィルタをかける(商品を絞り込む)ことです。
画面右下の[検索]タブでも複合検索はできるのですが、分類だけで絞り込み、価格を比較するということはよくやるので、この機能があると大変便利です。
ノードをクリックしたときのイベントが、TreeViewのNodeClickイベントなのですが、
ここで失敗したのは、このイベント・プロシージャを一から入力して記述してしまい、エラーが出てしまったことです。
この原因を見つけるまでかなり苦労しました。
単語一字一字何度も見直しましたが、構文には間違いはありません。
プロシージャの中に何も記述しなくてもエラーになり、プロシージャ全体をコメントアウトするとエラーがでません。
フォームのTreeViewのプロパティのイベントの中にクリック時が無いので、「そもそもクリック時イベントはAccess2010で非対応になったのかな?」とか思ったり、2010にTreeViewに関するバグがあるような情報を見つけたので、更新をかけたりしましたが解決しませんでした。
そこで、このプロシージャ部分を一旦削除し、VBAウィンドウのオブジェクト欄からTreeViewを選択し、プロシージャ欄からNodeClickを選択して作成しました。
そうしたら、エラーが出なくなりました!
非常に単純で基本的なことなのですが、同様の原因でコードがうまく実行できないことがありました。
プログラミングに慣れてくると陥りやすい”落とし穴”だと思います。

ノードをクリックしたときに得られるプロパティの中に[FullPathプロパティ]があり、そのノードまでのフルパスを返します。
例えば、「インク」を選択すると、「分類¥在庫管理商品¥消耗品¥インク」という文字列が得られます。
この文字列を操作することによって、その分類の親分類名を全て得ることができます。
検索をかけるための条件は整ったので、NodeClickイベントの中身を書いていくわけですが、商品テーブルと分類テーブルを結合して検索する必要があるので、SQL文の”SELECT~JOIN~”を使ったのですが、ここでまたつまずきました。
「JOIN式はサポートされません。」と叱られてしまったのです(;_;)
これも原因が分かるまで苦労しましたが、その原因は”ずぼら”でした。
単純なSELECT文の中では、各フィールド名の記述だけでよいのですが、複数のテーブルを結合する場合は、[テーブル名].[フィールド名]というように記述しないといけないのに、フィールド名が重複していなければよいと思い、テーブル名を省略していたのです。
これも基本的なことなので、面倒でもちゃんと基本に則らないとダメですね。

検索部分も、If~Then~Else構文を入れ子で何重にもし、ついにTreeViewコントロールの完成です!

theme : プログラミング
genre : コンピュータ

POSレジを開発中です

当店のレジは昨年まで既製のPOSレジソフトをレンタルして使っていましたが、問題点がいくつかありました。
・応答が遅い(開発元に改善要求しても聞いてくれなかった)
・返品交換の処理など使いにくい点があった
・経費(レンタル料)が掛かる

ということで、自分で作ることにしました。
私はAccess VBAでの開発経験があるので、今回もそれでつくることにし、他業務もやりながらの合間で、3ヶ月くらいでとりあえず使えるものをつくり、運用開始しています。

バグを取りながら運用していますが、だいぶ安定してきました。
以前の既製ソフト運用時よりもパワーの低いPCでも、応答が格段に速くなりました。

キャッシュドロワが安物で、応答が遅く、既製ソフトではそこで待たされるため、レシートが出るのも遅く、お客さんを待たせていました。
それなら、先にレシートを印刷してからドロワを開ければ良いのでは?と考え、開発元に依頼しましたが、カスタマイズ費用を要求され、改善提案を聞いてくれませんでした。
自分で作る際には、この部分で試行錯誤し、できるだけお客さんを待たせない動きになるように仕上げました。

やはり、自分で商売をしていて実際にレジを使っていることが、開発者の立場としても優位性があると思います。
何よりも自分で作れば、自分の欲しい機能も付けられます。

当店には外国の船員さんが多く来られ、ドルしか持っていない人がいて、近くに両替できるところがないこともあり、当店で両替を受け付けています。(当然手数料はもらいます)
以前はその都度当日のレートをWEBで調べ、計算機で計算して両替をしていましたが、自作のレジには当日のドル円レートを自動で表示させるようにし、ドル交換機能を付加したので、計算機も不要になりました。
レジ精算機能も出来上がったので、ドロワ内の釣銭だけでなく、ドルの残高もチェックできます。

「最新のOSと最新のPCを使えば、プログラムのアルゴリズムに問題があっても、結果的にそこそこ速く動くから」という考えで、アルゴリズムを見直さない開発者もいますが、私は、古い安いハードでも”使い物になる”ソフトを開発したいと思います。


theme : プログラミング
genre : コンピュータ

プロフィール

tasys

Author:tasys
FC2ブログへようこそ!

カレンダー
プルダウン 降順 昇順 年別

03月 | 2021年04月 | 05月
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -


最新記事
最新コメント
カテゴリ
天気予報

-天気予報コム- -FC2-
フリーエリア
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード