Forguncy(フォーガンシー)で見積管理システムを作ってみました!(3)
Excel関数もグラフも使えて画面も変更できる、ノンプログラミングWebシステム開発ツール「Forguncy(フォーガンシー)」。
前回に引き続き、見積管理システムを作ります。
↓↓ 前回の記事はこちら ↓↓
Forguncyを用いた簡単な見積管理システムでは、前回までに以下の機能を作成しました。
- 見積書作成機能
- 作成した見積書の修正機能
- 作成した見積書の閲覧機能
- 明細が複数ページに渡る見積書のPDF出力機能
見積書作成では、コンボボックスで費目を選択し、単価はテーブルから自動入力するのみでした。
今回は、値引きなどマスタテーブルにない費目や単価を手入力できるようにしたいと思います。
そのために追加、変更する項目は以下の通りです。
- 単価を表示/入力するためのテキストボックスを追加
- 費目のコンボボックスは未選択項目を追加し、直接入力を可能にする
- 費目のコンボボックスにコマンドを設定
- 見積詳細テーブルに単価フィールドを追加(費目に設定していたデータの関連付けを削除)
- 追加ボタンに単価データの追加と入力値のチェック機能を追加
では1の単価を表示/入力するためのテキストボックスを追加します。
見積入力画面に「単価」の入力テキストボックスを追加しました。セルの表示形式は通貨にしています。これで数値以外は入力できなくなります。
そして、2の費目のコンボボックスは未選択項目を追加し、直接入力を可能にします。
費目のコンボボックスを選択し、右ペインのセル型から次のように設定を変更しました。
- リスト項目はこれまでどおり、商品マスタテーブルからデータを取得する設定のまま、「未選択項目の追加」にチェックを入れる。
- その他にある「選択による入力のみ可」のチェックを外す。
さて、3の費目のコンボボックスに設定するコマンドは、選択した費目によって単価を自動入力させるコマンドです。
単価は商品マスタテーブルに入っています。商品マスタテーブルを選択した費目を条件にしてクエリーをかけることで、単価を抽出できます。
抽出した単価を単価の入力テキストボックスに入れるには、対象の単価をどこかに表示させる必要があります。データ連結したセルを用意する方法もありますが、今回は、非表示エリアに商品マスタテーブルと連結したリストビューを用意しました。
費目のコンボボックス型セルのコマンドは以下の通りです。
条件分岐コマンドを使用して、費目セルが空欄の時は単価セルも空欄にしました。
費目が設定された場合、
- 設定値により商品マスタテーブルにクエリーをかける。
- リストビューから抽出した単価を単価セルに入れる。
以上の2つのコマンドで実現するはずですが、実際に実行してみると、コンボボックスのリストから選択した値を手入力で書き換えた場合に、クエリーの動作が不安定であることがわかりました。
メッセージコマンドなどを追加することで回避できたので、今回はフォーカス設定コマンドを使用して、単価セルを設定した後にフォーカスを単価セルに置くことで回避しました。
ここまでで、以下の動作を確認できます。
- 費目の選択により単価が自動入力される
- 費目の手入力(マスタテーブル値以外)により単価がクリア
次に4の見積詳細テーブルに単価フィールドを追加します。
これまでは必ず商品テーブルから単価を抽出できましたが、手入力により自由な価格設定が可能になったので、見積詳細テーブルの費目に設定していたデータの関連付けを削除し、単価フィールドを追加しました。
見積入力画面に表示していた費目リストにある単価のデータ連結先も変更します。
最後に5の追加ボタンに単価データの追加と入力値のチェック機能を追加します。
これまで追加ボタンのコマンドで「費目」「数量」「見積書No」をリストビューに追加していましたが、そこに「単価」を加えました。
さらに、データの手入力が可能になったことで単価の入力忘れが考えられます。(これまでも数量の入力忘れの可能性がありましたが)
そこで、条件分岐コマンドとメッセージコマンド、さらに処理を中断するために「JavaScriptコードの実行」コマンドを使用して入力値のチェック機能を追加しました。
「費目」「単価」「数量」いずれかが空欄であった場合は、空欄である項目の入力を促すメッセージを表示します。 JavaScriptコードは、処理を抜けるコード「exit();」です。
WEB上で数量を空欄にして登録ボタンをクリックした時の動作は次の通りです。
以上で、費目、単価をマスタテーブルからの選択に加え、手入力での設定が可能になりました。
WEB上でマスタテーブルにない費目を入力した結果はこちらです。
マイナスの値は▲で表示させました。この辺りはエクセルと同じで、セルの書式設定により設定可能です。
クエリーを用いてデータを抽出する場合、カレントレコードがどこにあるかを意識する必要があるので、リストビューを再表示させて確認しながらデバッグをすると良いかと思います。
いかがでしょうか。
今回は、少しだけコードを利用してみましたが、条件分岐やクエリーなどのコマンドを組み合わせることで処理の幅が広がりました。
Forguncyのコマンドはまだまだ種類がありますので、工夫次第で様々な機能を追加することができますね。
次回もお楽しみに!