11 返信 最新の回答 日時: May 27, 2014 10:42 PM ユーザー:Shin

    商品コードを入力して商品名を表示させるスクリブト

    glass

      タイトル

      商品コードを入力して商品名を表示させるスクリブト

      フォーラムに投稿

           FM Pro13 Advanced

            

           ファイルメーカーやりはじめて2ケ月ほどです。

           ファイルを分離したやり方で作っています。

            

           売上伝票入力フォームで、商品コードを入力して、商品名を表示させる

           スクリプトをつくりたいのですが、ご教授お願いします。

           例 商品コード は 1000 1001 1002・・・

            

            

           商品マスターテーブル

           商品コード
           商品名
           規格
           単価
           売上額

            

           売上伝票テーブル

           売上日
           顧客コード
           売上金額
           消費税
           金額合計

            

           売上伝票明細テーブル

           商品コード
           商品名
           規格
           数量
           単価
           売上額

            

            

        • 1. Re: 商品コードを入力して商品名を表示させるスクリブト
          sago350@未来Switch

               ルックアップという機能はご存知でしょうか?
               フィールドのオプションの「ルックアップ値」という項目で設定できます。(リレーションの設定は必要です)
               この機能で求めておられる機能は満たすことができます。
               下記のサンプルの見積明細テーブルの「商品名」「単価」フィールドで設定を確認できます。

          サンプル

               もし、あえてスクリプトで実現しようとしているならば、「商品コード」フィールドにスクリプトトリガを設定し、リレーション先から商品名に値を入れるようにすればいいでしょう。下記サンプルのレイアウト「売上明細」が参考になるかと思います。

          サンプル

               もし、リレーションを設定したくないという理由ででスクリプトで実現したいのであれば、上記サンプルのレイアウト「売上明細_リレーション不要」が参考になるはずです。

          • 2. Re: 商品コードを入力して商品名を表示させるスクリブト
            glass

                 お世話なっています。リレーション不要でやりたいと思います。

                  

                 売上明細の方は表示されますが、売上明細_リレーション不要のサンプルは試しましたが、商品名は表示されません。どこか設定が悪いのでしょうか?

            • 3. Re: 商品コードを入力して商品名を表示させるスクリブト
              sago350@未来Switch

                   失礼、$商品名に値をセットする時の指定が間違っていました。修正したので再度ダウンロードして下さい。

                   リレーションを使わない方法としては、ExecuteSQL関数を使う方法もあります。
                   それもサンプルに追加しています。

              • 4. Re: 商品コードを入力して商品名を表示させるスクリブト
                Shin

                     後学のため、リレーショナルデータベースで、あえてリレーションを使わない、という選択をされる理由を教えていただけませんか。

                     コードを一時保存し、検索抽出し、商品名、規格、単価 をインポートする、という30年ほど前によく使っていた方法と同じ事になりますね。SQLを使っても、原理は同じになります。

                • 5. Re: 商品コードを入力して商品名を表示させるスクリブト
                  glass

                       お世話になっています。何度も申し訳ありません。

                       売上明細をポータル(9行)にしているせいかわかりませんが

                       1行目は、商品名はきちんと表示されますが、2行目を入力すると1行目に商品名がはいります。

                       3行目・・・・・9行目まで同じく、1行目にしか商品名がはいりません。

                       今後の勉強のために、お時間のある時で結構ですご教授お願いします。

                       SQLで対応しました。

                        

                        

                  • 6. Re: 商品コードを入力して商品名を表示させるスクリブト
                    glass

                         Shinさん

                          

                         書籍にファイルを分離した方がよいと書いていました。なので単純にこのやり方でしています。

                         1つのファイルだと全テーブルの全レコードを入れ替える必要があると書いていました。

                         分離だとデータ格納するファイルのレコードのみ入れ替えればよいと書いていました。

                          

                          

                         初心者なので普通にリレーションを使い作っていました。

                         簡単に分離できるのかと思ってやり直したのですが、やはり難しすぎっという感じです。

                         あまり意味がないのでしょうか、こんなことはせずに、普通にすれば 良いのでしょうかね。

                          

                          

                    • 7. Re: 商品コードを入力して商品名を表示させるスクリブト
                      sago350@未来Switch

                           ポータルでの動作を考慮してなかったので、修正しました。
                           レイアウト切替てた所を、新しいウインドウを開いて処理させてます。

                           スクリプトデバッガを使って1ステップづつ見ると分かるんですが、他のレイアウトに移動してから戻ってくるとポータルの1行目にカーソルが行ってしまうのです。

                           ExecuteSQL関数を使った場合は後からフィールド名を変更すると関数内のフィールド名は変わってくれないので注意です。(それをも考慮した書き方もあります)
                           しかし、特別な理由がない限りはルックアップ使ったほうが楽だと思いますよ。

                      • 8. Re: 商品コードを入力して商品名を表示させるスクリブト
                        Shin

                             参考までに、読まれた書籍名を教えていただけませんか。また、分離とは、リレーションを張らない、と書いてあったのでしょうか。

                             ちょっと誤解されているような感じですね。

                             FileMaker では、通常の構築方法の応用で、分離モデル、という構築方法があり、分離という言葉が出てくるのですが、これは、データ部分と構造部分を分離させるものです。「データ格納するファイルのレコードのみ入れ替えればよい」でしたら、この意味かと思います。

                             これは、データを保存するテーブルのみを持たせたファイルを作り、別のファイルに、インターフェースの部分を作る構築方法です。少し特殊な方法ですので、最初からこの方法を取られるのはお薦めしません。

                             この方法でも、リレーションは普通に貼っていきます。ただ、リレーションを定義する場所が色々想定可能で、データテーブルの中でリレーションを張っておく、という事もできますし、データテーブル内にはリレーションはなく、インターフェース部の中でリレーションを貼っていく、という方法もあります。

                             構築方法は、データテーブル側に、テーブルを定義していきます。インターフェースファイルの中のデータベースの定義で、データテーブル側のテーブルオカレンスを配置していき、そこにリレーションを貼っていきます。(難しそうに聞こえますが、やってみると簡単です)

                             また、普通に作ったファイルを、分離モデルへ変更するのも難しくはありません。

                             作っているファイルをコピーします。元ファイルから外部データソースで、コピーしたファイルを定義しておきます。データベース定義のリレーションマップの中で、表示されているテーブルを、それぞれ外部のテーブルへ置き換えます。それだけで、分離モデルで作られたファイルへ変更できます。(こちら側のテーブルを削除してみましょう、そのままで動きますよ)

                             あまり難しいことから始めずに、普通の作り方をマスターしてから、応用して行かれるといいのではないかと思います。

                        • 9. Re: 商品コードを入力して商品名を表示させるスクリブト
                          glass

                               sago35さん

                               ポータル版、ありがとうございます。

                               いろいろな方法があるのですね。勉強になりました。

                               一晩考えて、まずはリレーションを使ってやった方が楽かなぁ~と思いました。

                               ちょっと、やり方を考えたいと思います。

                                

                          • 10. Re: 商品コードを入力して商品名を表示させるスクリブト
                            glass

                                 Shinさん

                                 ありがとうございます。

                                 ちょっと勘違いしているのかもしれません。

                                 ①顧客システムと②顧客データのファイルがあります。

                                  

                                 ②は顧客データ、売上伝票データ、売上明細データ 商品マスターなどを格納しています。

                                 リレーショナルはなし

                                 ①は入力するためのフォーム画面などを格納しています。ここですべて入力します。

                                 リレーショナルはしています。でもここでリレーショナルしても意味ない?のでしょうね・・・・・たぶん。

                                  

                                  

                                 こちらのやり方がよいのでしょうか?

                                 ファイルは①と②別々にしといて、②はリレーションあり、①はリレーションなしにする。

                                   

                                 そうすれば、スクリプトトリガなど考えずに、ルックアップなど楽ちんになる。・・・・だふん?

                                 それとも、①と②分けても意味がないのでしょうか。単純にいろいろと悩みます。

                                  

                            • 11. Re: 商品コードを入力して商品名を表示させるスクリブト
                              Shin

                                   ファイルを分ける(上の分離モデルを含めて)、という事と、リレーションを張る、という事は、全く別の事です。

                                   今、顧客管理系と、商品管理系、販売管理系、が有るとしたら、ファイルはこの3個にしていいと思います。

                                   ただ、顧客管理に使う顧客管理番号は、販売管理で入力されますので、その間にはリレーションが張られます。また、販売の際には、商品管理番号で、商品マスターを参照する必要があるでしょうから、そのリレーションを張ります。最低限、この程度は必要でしょうし、更に、1系統の中でテーブル間にリレーションを張ればいいのでは。