4 返信 最新の回答 日時: Jul 19, 2017 2:50 AM ユーザー:calafate40

    Evaluate関数の設定方法について

    calafate40

      Evaluate関数がどうもうまく設定できないので質問致します。

       

       

      現在オーソドックスな売上請求システムを稼働させています。

       

       

      伝票テーブル

      納品明細テーブル

      商品テーブル

      得意先テーブル

      があります

       

       

      納品明細に入力する単価は、同じ商品でも納品先のカテゴリー毎に複数のパターンがあり、それを得意先テーブルからのルックアップで納価区分番号(数字タイプ)として伝票テーブルに持たせています。

      商品テーブルの商品単価は繰り返しフィールドで、その納価区分に応じた価格情報を複数持たせています。

       

       

      納品明細の単価フィールドの設定は

      タイプ:数字

      自動入力(計算):

      Case(

      納価区分=1 ; 商品テーブル::単価 [1]

      納価区分=2 ; 商品テーブル::単価 [2]

      納価区分=3 ; 商品テーブル::単価 [3]

      )

      で商品番号を入力すると納価区分に応じた単価が入ります。

       

       

      ここまではいいのですが、伝票作成後に得意先名を訂正変更して納価区分が切り替わった場合に、単価フィールドの値も連動して切り替えたいのです。単価フィールドタイプを計算にすればいいのですが、別の問題がありまして、フィールドタイプは変更できません。

       

      Evaluate("納品明細テーブル::単価フィールド" ; 伝票テーブル::納価区分フィールド)をどこかに設定すればいいのかと思いましたが、データビューワーでやってみても値が切り替わらず。Evaluate式自体が間違っているのか、その関数を仕込む箇所の問題か理解できていません。

       

       

      何卒お力添えを頂きたく質問させて頂きました。

      よろしくお願いします。

       

       

      Evaluate関数がどうもうまく設定できないので質問致します。

       

       

      現在オーソドックスな売上請求システムを稼働させています。

       

       

      伝票テーブル

      納品明細テーブル

      商品テーブル

      得意先テーブル

      があります

       

       

      納品明細に入力する単価は、同じ商品でも納品先のカテゴリー毎に複数のパターンがあり、それを得意先テーブルからのルックアップで納価区分番号(数字タイプ)として伝票テーブルに持たせています。

      商品テーブルの商品単価は繰り返しフィールドで、その納価区分に応じた価格情報を複数持たせています。

       

       

      納品明細の単価フィールドの設定は

      タイプ:数字

      自動入力(計算):

      Case(

      納価区分=1 ; 商品テーブル::単価 [1]

      納価区分=2 ; 商品テーブル::単価 [2]

      納価区分=3 ; 商品テーブル::単価 [3]

      )

      で商品番号を入力すると納価区分に応じた単価が入ります。

       

       

      ここまではいいのですが、伝票作成後に得意先名を訂正変更して納価区分が切り替わった場合に、単価フィールドの値も切り替えたいのです。単価フィールドタイプを計算にすればいいのですが、別の問題がありまして、フィールドタイプは変更できません。

      Evaluate("納品明細テーブル::単価フィールド" ; 伝票テーブル::納価区分フィールド)をどこかに設定すればいいのかと思いましたが、データビューワーでやってみても値が切り替わらず。Evaluate式自体が間違っているのか、その関数を仕込む箇所の問題か理解できていません。

       

       

      何卒お力添えを頂きたく質問させて頂きました。

      よろしくお願いします。

        • 1. Re: Evaluate関数の設定方法について
          user14047

          FileMaker Pro 16 ヘルプ : Evaluate(関数)

           

          Evaluate 関数のオプションで変更を監視するフィールドを設定できますが、関連テーブルを指定してもうまく動きません。

          OnObjectSave スクリプトトリガを使って「伝票テーブル::納価区分フィールド」フィールドの値が変更されたら

          スクリプトで「納品明細::単価」フィールドを設定するようにしてみてはいかがでしょうか?

           

          ちなみに...

          Case ( A = 1 ; 繰り返し[1] ; ...) のように、[ ] の中の数字と条件が一緒なら、[ ]の中にフィールドを直接指定して、

          商品::単価[伝票::納価区分]

          のように Case 関数を使わなくてもいけますよ。

          FileMaker Pro 16 ヘルプ : 繰り返しフィールドの繰り返しの内容の取得

          • 2. Re: Evaluate関数の設定方法について
            calafate40

            ありがとうございます。

            単価入力の部分、Case関数不要でシンプルにいけるんですね。確かに納価区分の数字が繰り返し位置番号と同じなので数字タイプのフィールドならそうなりますね。頭が固くてそこまで気が回りませんでした。勉強になります。

             

            Evaluate関数は関連テーブルだと動作しないのですね。その可能性もあるのかなと思っていたのですがやっぱり。

            納価区分を納品明細テーブルにもLookUpで持たせないといけませんかね?

             

            で、そのスクリプトトリガは納品明細がポータルに複数行あるので最初の行しか対象になりません。Loop回せば可能ですが・・・。

            • 3. Re: Evaluate関数の設定方法について
              user14047

              伝票テーブルのフィールドにスクリプトトリガを仕込んで、[関連レコードへ移動] で明細のレコードを絞り込んで全置換なり Loop なりのスクリプトで関連レコード分の処理をしてみてください。

              スクリプトトリガで指定するスクリプトは単一ステップしかダメなんてことはありませんから。

              • 4. Re: Evaluate関数の設定方法について
                calafate40

                LOOPでポータル行内を順に処理するようにしました。

                 

                教えて頂いたCaseの代わりの設定で

                フィールド設定(単価フィールド ; 商品テーブル::単価[伝票テーブル::納価区分])

                をポータル内Loopで。

                 

                Evaluateで処理する事にこだわりすぎてました。

                 

                これで行きます。

                 

                ありがとうございました。