1 2 前へ 次へ 23 返信 最新の回答 日時: Feb 8, 2012 4:58 PM ユーザー:nkk47

    レコードの自動御作成

    nkk47

      タイトル

      レコードの自動御作成

      フォーラムに投稿

      ファイルメーカー初心者です。
      以下のような事をするには、どうしたらよいのかご教示承りたく、宜しくお願い致します。


      |回数|本体料金|付属品料金|合計金額|

      というフィールドがあったとして、1日に50回程度(日によって異なります)のレコードを入力するとします。
      そこで、1レコードを入力して、Tsbキーを押すと、入力したレコードは表示されたまま、そのレコードの下に自動的に次のレコードが作成されて入力が出来るようにしたいのです。
      また、回数フィールドは、1から順に、新しくレコードが作成されるたびに自動的に入力させたい。


      当方の使用環境は下記のとおりです。

      ・Windos Vista HP SP2
      ・FileMaker PRO 11 0v3

        • 1. Re: レコードの自動御作成
          YukioTakaoka

          こんにちは。

          まず、回数フィールドの番号の自動入力については、データベース管理の画面にて、回数フィールドの自動有力オプションに「シリアル番号」の設定をしましょう。

          つぎに、レコードの自動作成ですが...

          簡単に行うとしたら、スクリプトトリガーを使用すれば良いと思います。

          フィールドが...

           回数:自動入力

           本体料金:手入力

           付属品料金:手入力

           合計金額:計算

          という具合になっていて、レイアウト上のタブ順が上のフィールド順と同じになっているようであれば、付属品料金の入力後にTabキーでカーソルがフィールドから出たときにスクリプトが動作するように設定います。

          使用するトリガーイベントは「OnObjectExit」で、そこから起動するスクリプトは、新規レコードを作成するステップを含んだスクリプトを用意すれば良いかと思います。

           

          以上、ご参考になれば幸です。

          • 2. Re: レコードの自動御作成
            nkk47

            Taka さん

            コメントを頂戴しありがとうございます。

            やはりスクリプトですか・・・
            まだまだファイルメーカー(データベース)初心者の私には敷居が高いです。

            少し方法を変え、エクセルのシートのように、はじめから複数行(50行程度)の空のレコード(セル)が表示されており、そこへ入力していくという方法は難しいでしょうか。
            繰り返しフィールドというのをやってみましたが、思ったとおりにはいきませんでした。

            回数フィールドはシリアル番号でレコードが確定されると自動入力されるようにする。
            レコードの「付属品料金」まで入力して Tabキーを押すと、1段下の「本体料金」へカーソルが移動して入力が続けて出来る。

            こういった方法でも、やはりスクリプトを組まないと出来ませんでしょうか?

            引き続きましてご教示の程、宜しくお願い致します。


            • 3. Re: レコードの自動御作成
              YukioTakaoka

              CCremonさん、


              こんばんは。

              タブキーでレコードを移動するためには、やはりスクリプトトリガーをご利用された方が良いかと思います。

              作成するスクリプトは、とても簡単です。

              「付属品料金」フィールドへのスクリプトトリガーの設定と、スクリプトのサンプルを添付してみましたので、ご参考にしてみて下さい。


              以上、ご参考になれば幸です。


              • 4. Re: レコードの自動御作成
                nkk47

                Taka さん

                詳細なご説明を感謝いたします。

                まだ試していませんが、今晩にでもやってみます。
                結果はご報告に上がります。

                取り急ぎお礼まで。

                • 5. Re: レコードの自動御作成
                  Shin

                   ちょっと変わった解決法を。

                  ダミーのフィールド(数字)を作ります。現在あるレコードにも、すべてに1を入力しておきます。

                  そのフィールドで自己リレーションをはり、関連レコードの作製を許可しておきます。そのリレーションでポータルを表示させ(ソートはかけない)、必要なフィールドを並べておきます。(上の入力順でいいでしょう)

                  新規入力を開始するときには、ポータルの最下行へ移動し、入力を開始します。その後は、フィールドへの入力後にタブをたたけば、次のフィールドへ移動し、1レコードが終われば、次の行(つまり新規入力行)の最初のフィールドへ移動しますので、そのまま入力すれば、新規レコードの作製と入力が出来ます。

                  • 6. Re: レコードの自動御作成
                    nkk47

                    Taka さん

                    お世話になっております。

                    ご教示頂きましたように「付属品料金」フィールドへのスクリプトトリガーを設定し、そこで Tabキーを押すと自動的に新規フィールドが作成され、「回数」フィールドには 前回+1 が入るようになりました。

                    ただ、スプリクトトリガーを設定した後、はじめはブラウズモードのフォーム形式で入力(確認)していたもので、レコードが新規作成されているのに気が付かず、ちゃんと動作していないものと思っておりました。
                    表形式にしてレコードが増えている事を確認しホッとしました。(いま考えればツールバーのレコード数で確認出来るのに…)

                    で、はじめの質問に戻るのですが、

                    現在私の環境ではレイアウトを変更し、フォーム形式で見た場合も、表形式で見たのと同じように、フィールドは横一列に並んでおります。
                    そこで、1レコード(「付属品料金」まで)を入力してTsbキーを押すと、入力したレコードは表示されたまま、そのレコードの下に自動的に次のレコードが作成(表示)され、そのレコードの「本体料金」の所にカーソルが来て入力が出来るようにしたいのですが、難しいでしょうか。
                    つまり、表形式と同じように、上記の操作で新規レコードが作成されるたびに、フォーム形式の画面上にも1行ずつレコードが増えていくという感じです。

                    50レコードも入力した場合かなり縦長になってしましますので、最終的には30レコード以上入力した場合は縦スクロールバーが表示されるというように出来ればと考えています。


                    引き続きましてご教示の程、宜しくお願い致します。

                    • 7. Re: レコードの自動御作成
                      nkk47

                      Shin さん

                      コメントありがとうございます。

                      不勉強で「自己フィールド」ひとつとっても分かりませんので、ヘルプで検索しながら読解して試してみます。
                      結果は必ずご報告致します。

                      • 8. Re: レコードの自動御作成
                        YukioTakaoka

                        CCremonさん、

                         

                        フォーム形式の表示のままで、新規レコードが作成されたら、新規レコードが下に表示されれば良いのであれば...

                        レイアウトの表示形式をリスト形式にしてみてはいかがでしょうか?

                         

                        また、新規レコードが作成された時点で、自動入力の番号フィールドを飛ばして、本体料金へカーソルを入れたいのであれば、レイアウトモードのタブ順設定で、番号フィールドのタブ順を削除するか、レイアウトモードで番号フィールドをクリックして選択した状態で、インスペクターを表示し、データタブの動作欄にて、フィールド入力のチェックボックスから「ブラウズモード」をオブにすれば、カーソルが番号フィールドに移動しなくなるので、新規レコードの作成時に本体料金フィールドにカーソルが入る様になると思います。

                         

                        以上、ご参考になれば幸です。

                        • 9. Re: レコードの自動御作成
                          nkk47

                          Taka さん

                          コメントありがとうございます。

                          > レイアウトの表示形式をリスト形式にしてみてはいかがでしょうか?

                          最終的には、幾つかのテーブルをリレーションシップし、ひとつの画面上でタブコントロールツールで「売上」や「商品管理」を切り換えながら入力したいと思っております。そういった画面はフォーム形式でないと表示できないんですよね。(大きな勘違い?)

                          ですので、理想はフォーム形式で表示させている画面で、表形式のように最上部に項目(今回の場合は「回数」「本体料金」「付属品料金」「合計」の4項目)が配置されていて、その下には入力欄のみという状態なんです。

                          ポータルという方法もあるようですが、ヘルプや解説本ではポータルでは元データも書き換え可能という事ですので、それは不具合が起こるので今は考えないでいます。

                          > 新規レコードが作成された時点で、自動入力の番号フィールドを飛ばして、本体料金へカーソルを入れたい

                          この件は、ご教示頂きました方法で、どちらも出来ました。
                          タブ順設定というのは目から鱗でした。


                          引き続きましてご教示の程、宜しくお願い致します。

                          • 10. Re: レコードの自動御作成
                            nkk47

                            Shinさん

                            コメントありがとうございます。


                            > ダミーのフールド(数字)を作ります。

                            下記のような具合で宜しいですか。

                            |回数|本体料金|付属品料金|合計金額|ダミー(フィールドタイプ:数字)|

                            > 現在あるレコードにも、すべてに1を入力しておきます。

                            現時点ではレコードは1つもないので、新規レコード作成を行い、そのレコードの全フィールドに「1」を入力致しました。
                            ただし、「合計金額」の部分は「本体料金」と「付属品料金」が足し算(計算)されて「2」になってしまいます。

                            ※ なぜ、全フィールドに「1」を入力するのかをご教示頂けますでしょうか。


                            > そのフィールドで自己リレーションをはり、

                            自己リレーションを張るというのは、ヘルプにありました「自己連結リレーションシップを作成」するという事で宜しいのでしょうか。

                            いま練習用に使っているファイルは「次へ.fp7」というファイル名で、テーブルは「次へ」という1つだけです。
                            データベースの管理からリレーションシップタブを開き、表示されている「次へ」の照合フィールド(例えれば「回数」)をクリックしてテーブルの外までドラッグして、そのまま同じ照合フィールド上(この場合「回数」)で離すと「次へ 2」というテーブルが作成されした。あとは他の「次へ」と「次へ 2」の全てのフィールドを自己連結リレーションシップ致しました。


                            > 関連レコードの作製を許可しておきます。

                            リレーションシップが出来た後、リレーションシップの編集で「このリレーションシップを使用して、このテーブルのレコードの作成を許可」にチェックを入れました。

                            > そのリレーションでポータルを表示させ(ソートはかけない)、必要なフィールドを並べておきます。

                            レイアウト編集画面で、ポータルツールで適当な大きさの矩形を作成しました。
                            ポータル設定は下記のとおりです。

                            ・関連レコードを表:次へ 2
                            ・垂直スクロールバーを表示以外のチェックボタンは全てクリア
                            ・書式
                             最初の行:1  行数:50

                            「ポータルにフィールドを追加」では、「全て移動」を選択。

                            画面では、ポータル外の最上部にレコード(「回数」~「ダミー」までの5つのフィールド)が表示されており、各フィールドには冒頭で入力してあった「1」(合計金額フィールド以外)が入力されております。

                            ポータル上の最上部にも、上記と同じ内容のフィールドが表示されております。


                            > 新規入力を開始するときには、ポータルの最下行へ移動し、入力を開始します。

                            ここがちょっと理解できなかったのですが、「ポータルの最下行に移動する」というのはどういう操作をするのでしょうか。


                            > その後は、フィールドへの入力後にタブをたたけば、次のフィールドへ移動し、1レコードが終われば、次の行(つまり新規入力行)
                            > の最初のフィールドへ移動しますので、そのまま入力すれば、新規レコードの作製と入力が出来ます。

                            前述のように、ポータル最上部に表示されている「1」を入力した既存のレコードの任意のフィールドにカーソルも持って行く事は可能で、そこからTabキーを押し、「ダミー」までいくとその1行下の「回数」へカーソルが移動するのですが、「回数」はシリアル番号で番号自動入力されるはずですがなにも表示されず、キーボードから何か入力して次のフィールドへ移動しようとTabキーを押すと「このフィールドは変更禁止なので、この操作は実行できません。」というダイアログが表示され入力する事は出来ません。他の「本体料金」や「付属品料金」フィールドでも同様でした。

                            レコードも増えていません。



                            引き続きましてご教示の程、宜しくお願い致します。

                            • 11. Re: レコードの自動御作成
                              nkk47

                              一応画像もアップしておきます。

                              • 12. Re: レコードの自動御作成
                                Shin

                                言葉の解説は面倒ですので、、サンプルをご覧ください。

                                 http://dl.dropbox.com/u/9260632/FileMaker/FMTips/forum/forumsca439754ff.fp7.zip

                                 

                                ダミーフィールドの意味は、本来のデータとはまったく関係なく、リレーションを張るためだけの物です。リレーションで関連つけるために、全てに1を入力しておけば、ポータルの中で全ての1と入力してあるレコードが表示されます。逆に言うと、表示をさせたくないレコードは、ダミーフィールドの中の1を消していけば、ポータルで表示されなくなりますので、過去の書き換えもなくなります。

                                • 13. Re: レコードの自動御作成
                                  nkk47

                                  Shinさん

                                  サンプルデータまで作成いただきありがとうございます。
                                  早速ダウンロードして確認しました。

                                  > ダミーフィールドの意味は、本来のデータとはまったく関係なく、リレーションを張るためだけの物です。

                                  forumsca439754ff.fp7 にあるダミーフィールド(dummy と g_dummy)は、「データベースの管理」のフィールドでもリレーションシップでも確認(表示)出来ますのに、表示形式がどうであれ、画面上には表示されていませんが、どうやったらこのようなフィールドを作成できるのでしょうか。

                                  > リレーションで関連つけるために、全てに1を入力しておけば、ポータルの中で全ての1と入力してあるレコードが表示されます。

                                  上記でおっしゃってる「全てに…」の全てとは、ダミーフィールドだけの事という理解で宜しいのでしょうか。

                                  ダミーフィールドを作成し、リレーションシップを張るのは、ポータルで表示させている元データを変更(編集)をさせないため。
                                  そして、ダミーフィールドの「フィールドオプション」→「入力値の自動化」→「データ」に1を入れておくのは、それが入力されたダミーフィールドがあるレコードだけが表示されるようにするためで、この1を削除すればポータルで表示されなくなるという理解で宜しいのでしょうか。

                                  ただ、上記のようなことかと思い、「データベースの管理」で、ダミーフィールド(dummy と g_dummy)の1を削除してみましたが、レコードは表示されていて、入力も出来ました。

                                  入力するためのレイアウトはボタン(スクリプトを組んであるのですのね)で切り換えられるようになっていましたが、この部分はまだまだ高度すぎてついて行けませんが、私のやりたかったのは、作成いただきました「入力(レイアウト)」のような感じでした。


                                  引き続きましてご教示の程、宜しくお願い致します。

                                  • 14. Re: レコードの自動御作成
                                    Shin

                                     > 画面上には表示されていませんが

                                    その画面レイアウトから削除するだけです。レイアウトモードで行います。

                                     

                                    > ダミーフィールドを作成し、リレーションシップを張るのは、ポータルで表示させている元データを変更(編集)をさせないため。

                                    編集させない機能は、今はつけていませんl。アクセス権の設定で、編集のさせないような設定が出来ると思います。

                                    > そして、ダミーフィールドの「フィールドオプション」→「入力値の自動化」→「データ」に1を入れておくのは、それが入力されたダミーフィールドがあるレコードだけが表示されるようにするためで、この1を削除すればポータルで表示されなくなるという理解で宜しいのでしょうか。

                                    そのとおりですが、g_dummy のデータは通常は触らないようにしましょう。

                                    もし、期限を設定して表示させる範囲を制御したいのでしたた、dummy に日付やシリアル番号を設定するようにして、g_dummy 側に制御用の数値などを入力、リレーション条件を "=" から、"≦" 変更すればいいでしょうね。

                                    1 2 前へ 次へ