8 返信 最新の回答 日時: Jul 23, 2014 4:14 PM ユーザー:coyayac

    計算フィールドのデカルト積[X]リレーションでの使用について

    coyayac

      タイトル

      計算フィールドのデカルト積[X]リレーションでの使用について

      フォーラムに投稿

           デカルト積[X]リレーションでリレーションしたトランザクションの金額フィールドをsumして、任意の日付の範囲での金額合計を算出しようと思っていますが値が取得できず(合計が0になる)に困っています。

           日付のfrom,to値の入っているglobalフィールド[g納入予定日from,to]と、その明細テーブルの日付フィールド[cal納入予定日]をリレーションしているのですが、その納入予定日フィールドが計算フィールドになっている為に取得できないと思われます。

           (cal納入予定日フィールドの「索引」は非保存。それしか選択できない)

           フォーラムの過去ログを参照すると、

      計算フィールドはリレーションのキーに出来ないのでしょうか?

      投稿済み 2010212

           のなかで同様の遣り取りをされているのですが、そのなかで

      ※ただし、デカルト積[X]リレーションでは非保存の照合()キーであっても出来ます。

      のようなこともあるようなので、私の環境での納入予定日が計算フィールド非保存が問題では無いようにも思われます。

           なにか他に条件のようなものがありますでしょうか。

      aaa.png

        • 1. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
          Shin

               リレーション先のキーは、索引が作られる事が前提です。デカルト積のリレーションは、キーを無視したリレーションですので、例外。

               計算フィールドだから索引が作られない、というのは間違いで、その計算フィールドが参照しているフィールドに、索引の作られていないフィールドが含まれるか、関連フィールドが含まれると、索引が作られません。

               何とか、それらのフィールドを上の条件から外してやるといいでしょう。例えば、ルックアップとか、計算値自働入力等。

          • 2. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
            coyayac

                 shinさん

                 いつもありがとうございます。

                 参照先フィールドを確認したのですが、通常の日付を入力するフィールドになっていて、索引も「全て」となっていました。

                 試しに参照先を一時的に計算フィールドではない別の日付が入っているフィールドに差し替えてみたら正しく集計されたのでリレーションそのものには問題は無いようです。

                 私が他になにか見落としていると思うのでもう少し色々確認して見ようかと思います。

            • 3. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
              Shin

                   参照先のフィールドは、同じテーブルに有る物ですか。

                   また、その計算フィールドは、索引を作成、になっていますか。

              • 4. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
                coyayac

                     参照先のフィールドは、別のテーブルにあるものです。

                     伝票データがヘッダーファイルと明細ファイルに分かれていて伝票No.でリレーションしているのですが、その伝票ヘッダーのみにある日付を明細ファイルに計算フィールドで取得しています。

                     明細ファイルの日付を取得している計算フィールドの索引は"なし"になっています。"あり"に変更しようとすると、エラーとなり変更できない状況です。

                     →索引オプションの指定画面で、計算結果を保存せずに必要時に再計算するにチェックが入っていて、ありと選択できない状態です。このチェックを外すと添付画面のようなメッセージがでてきてチェックが外せません。

                     リレーションシップ先のフィールドは、、と記載があるので、そのせいかと思います。

                • 5. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
                  Shin

                       リレーション先のフィールドも、索引が作られない用件の一つです。

                       そのフィールドを、ルックアップする日付フィールドに変更してみては如何でしょうか。

                  • 6. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
                    coyayac

                         shinさん

                          

                         ありがとうございます。

                    さっそく「ルックアップする日付フィールドに変更」して試してみようと思い設定したのですが値がセットされません、、

                         管理№でリレーションしている[発注トラン_HDR]の納入予定日から、[発注トラン_DTL]の@納入予定日にセットしたい場合はこんな感じでよいと思うのですが、もし他に注意点などがあればご指摘頂けると助かります。

                         新規の伝票登録、既存の伝票の納入予定日変更、どちらも日付がlookupされませんでした。

                    • 7. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
                      Shin

                           全体の構造が分かりませんので、設定に付いては何とも言えませんが。

                           リレーションのキーフィールドで再ルックアップしてみると、値がセットされるはずです。

                      • 8. Re: 計算フィールドのデカルト積[X]リレーションでの使用について
                        coyayac

                             shinさん

                             アドバイスありがとうございます。

                             頂いた内容どおり更新してみたのですが、なぜかルックアップ値を再取得してくれませんでした。

                             私の環境が、.fmp12をデータベース用とプログラム用に分けているせいのように思います。

                             なので納入予定日などのデカルト積リレーションで使いたいフィールドは、画面更新時のスクリプトでのフィールド設定で値セットして更新することにしました。

                             結果、デカルト積を使った集計で欲しい結果を取得することができました。

                             色々アドバイスを通じて背中を押して頂いたお陰で挫けずに何とかなりました。

                             ありがとうございます!