初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2021-06-23 13:03:15

やまちゃ
Guest

計算式を教えていただきたいです。

windows10にてFM18Proを使用しています。
自分でいろいろ調べてみたのですがわからないのでまた質問させていただきます。


例)”株式会社あいうえお”という業者の〇〇の商品が¥10,000/月とします。

データ入力時に
その月の初めにその商品を入力は単価フィールドに\10,000と入り
その月の2回目以降は¥0と自動的に入るような計算式はありますでしょうか?

よろしくお願いします。

#2 2021-06-23 13:13:15

Shin
Member

Re: 計算式を教えていただきたいです。

レコードの集約?集計?
のスレッドで、同じような処理を行っています。サンプルを参照してみてください。

Offline

#3 2021-06-23 13:18:23

チポ
Member

Re: 計算式を教えていただきたいです。

業者
and
商品
and
年月
で自己リレーションし、
日付の昇順でソート指定します。

このリレーションの1番目の関連レコードがその月の最初のレコードですね。

Offline

#4 2021-06-23 15:45:07

やまちゃ
Guest

Re: 計算式を教えていただきたいです。

返信ありがとうございます。
こちらの質問の仕方がよくなかったので補足します。



テーブルA 入力フォーム
フィールド(日付、業者名、品物名、数量、単位、単価)

テーブルB 見積
フィールド(業者名、品物名、数量、単位、単価)


があるとします。
テーブルAとBのリレーションを組み
テーブルBの見積をポータルで表示させスクリプト(変数設定してます)を組んだボタンで
テーブルAにそれぞれのフィールド値を自動で挿入できるようにしています。
(入力ミスがないようにです)


例) ”株式会社あいうえお” みかんの仕入単価は1月¥10,000-と決まっているとします。

テーブルBの見積には下記のものがはいっていて
株式会社あいうえお みかん ㎏ ¥10,000/月
これをテーブルAに挿入すると毎回¥10,000が入っていしまいます。

それを下記のように月の最初の仕入日にだけ¥10,000と挿入し
その後同月の2回目以降の仕入単価が¥0と自動的に入るようにしたいです。

テーブルA
6/1 ”株式会社あいうえお” みかん 数量〇㎏ 単価¥10,000/月
6/2 ”株式会社あいうえお” みかん 数量〇㎏ 単価¥0/月
6/5 ”株式会社あいうえお” みかん 数量〇㎏ 単価¥0/月



6/30 ”株式会社あいうえお” みかん 数量〇㎏ 単価¥0/月



毎日入力者が違うのでその日が最初に仕入れているとか
今月2回目の仕入とかわからないので
2回目以降は計算式を使って自動で¥0が入ってほしいです。


よろしくお願いします。

#5 2021-06-23 16:41:13

Shin
Member

Re: 計算式を教えていただきたいです。

どちらも、その通りの答えですが。
それとも、回答の内容が理解できないですか。

Offline

#6 2021-06-23 17:10:42

やまちゃ
Guest

Re: 計算式を教えていただきたいです。

Shin wrote:

どちらも、その通りの答えですが。
それとも、回答の内容が理解できないですか。



返信ありがとうございます。

こちらの勉強不足でわかりかねます。


集約や集計したいわけではありません。

日々の入力時での単価の計算式でお聞きしているのですが
その計算式が載っているということでしょうか?

#7 2021-06-23 17:48:59

Shin
Member

Re: 計算式を教えていただきたいです。

参考にしてください、というスレッドを紹介しているのに、内容を読まずにタイトルだけで判断したのですか。
単純な計算式では無理ですよ。

紹介したスレッドに、チポさんの書いているリレーション条件を実装したサンプルがあります。その中の一つのフィールドが、貴方の求めている計算のずばりのヒントになるはずです。

Offline

#8 2021-06-23 18:16:43

qb_dp
Member

Re: 計算式を教えていただきたいです。

汎用的な式は無いですよ。
リレーションを組むとか、SQLを使うとか、検索するとかして、まず関連レコードが同一月にあるかどうかを出さないと...
同一月にあるかどうかを出せば、2回目以降 処理を分岐させて 0 を入力とか可能になります。
計算式というか処理的にスクリプトになるような。

※単価なら2回目以降のレコードにも入っていたほうが扱いやすいと思いますが...私が思っている単価では無いのかな。

Offline

#9 2021-06-23 18:34:13

やまちゃ
Guest

Re: 計算式を教えていただきたいです。

Shin wrote:

参考にしてください、というスレッドを紹介しているのに、内容を読まずにタイトルだけで判断したのですか。
単純な計算式では無理ですよ。

紹介したスレッドに、チポさんの書いているリレーション条件を実装したサンプルがあります。その中の一つのフィールドが、貴方の求めている計算のずばりのヒントになるはずです。


何度も回答ありがとうございます。

私の頭では、サンプルのフィールドみても
集約と集計以外のなんの計算があるのか理解できず

Shinさんがおっしゃってくださっている
ヒントになるフィールドが見つけられれば
下記のようになるのでしょうか?涙

日付     取引先      品名      売上金額 
2021/6/1  渋谷フルーツ   りんご      1200円 ←1回目入力時
2021/6/1  新宿フルーツ   りんご       300円     
2021/6/3  渋谷フルーツ   りんご           0円 ←2回目以降の入力時は自動で”0”
2021/6/4  渋谷フルーツ   りんご           0円 ←2回目以降の入力時は自動で”0”

#10 2021-06-23 20:53:18

Re: 計算式を教えていただきたいです。

やまちゃさんの現在の構成でも出来ないことはないんですよ。
(「年月」フィールドはどのみち作成した方がいいですね。)


ただ、その場合は
「テーブルB 見積」から「テーブルA 入力フォーム」にデータを反映させて「テーブルA 入力フォーム」にレコードを追加作成
↑現状ここまで(ここでの単価10000円の設定は外します。)


その続きに、「テーブルA 入力フォーム」内のレコード全部から 日付(年月)、業者名、品物名 が一致するレコードを検索して
「対象レコード数が1件だった場合」の条件(要は今作ったレコードしか該当レコードが無かった場合だけ)
で単価フィールドに¥10,000/月をここで設定すればいいです。


あとはレコードが検索によって絞り込まれてますので、表示したいようにレコードを表示しなおせばよいかと。
ここまでの動作を組むので、当然スクリプトは長くなりますし、検索をかけるのでレコード数や構造によっては時間がかかります。


でも、自己リレーションを組んでおけば、最初から 年月、業者名、品物名 が一致するレコードが参照できます。

↓テスト環境でやってね。

試しにリレーションシップの画面で「テーブルA」を追加して(テーブルA 2が出来ると思います。)
「テーブルA」と「テーブルA 2」を年月・業者名・品物名でつなげて下さい。

テーブルA 入力フォームレイアウトで「テーブルB 見積」を作ったときと同じように
ポータルを追加して「テーブルA 2」を選択します。

そうすれば、テーブルAで選択しているレコードと条件が一致するテーブルA 2(自分自身)レコードがポータルで表示されます。


これなら今月どれだけその業者名、品物名で入力がされているかが簡単にわかるようになります。
(レイアウトのスペース的に狭いとかなら、ボタンを配置してあげて、別ウインドウに表示してあげるとかも出来るわけです。)

夢は広がります。レッツトライ!


テーブルAにフィールド
当月登録数 計算 非保存 If ( IsEmpty ( Count (年月 ) ) ; 0 ; Count ( 年月 ))
を追加してあげて下さい。

レコードを追加する今あるスクリプトに
If(Count ( テーブル 2::当月登録数 ) =0)
フィールド設定 単価フィールド \10,000
で出来るんじゃないかな。

細かい検証はしてないので、おかしいところがあったら後は自助努力で。

この辺も参考に↓
https://support.claris.com/s/article/%E … anguage=ja

Offline

#11 2021-06-23 21:10:03

Shin
Member

Re: 計算式を教えていただきたいです。

masterRecord (主キー = テーブル 2::主キー)というフラグになっているフィールドがありますね。
そのフィールドが同じカテゴリーの中の最初のレコードを1で、それ以外を0で表現しています。
その計算式を、
( 主キー = テーブル 2::主キー ) * 単価
にすれば、いいですよ。

Last edited by Shin (2021-06-24 16:34:27)

Offline

#12 2021-06-24 09:40:26

Re: 計算式を教えていただきたいです。

当月登録数 計算 非保存 If ( IsEmpty ( Count (テーブルA2::年月 ) ) ; 0 ; Count ( テーブルA2::年月 ))
じゃないと名前どおりの数字としてはおかしいかも。


あと、私の方法ですと、あくまでレコード作成時に数字を設定するだけです。
レコードを削除することは想定してません。


単価が入力されたレコードを削除した(してしまった)場合、
新No.1になった旧No.2のレコードに勝手に10000は入ってくれません。


Shinさんの方法なら、計算式なのでレコードを削除しても新No.1になった旧No.2のレコードに
勝手に10000は入ってくれます。ネ申。


これまでの登録方法で同じように「単価」もテーブルB→テーブルAに移しますが、
テーブルAのレイアウトに表示するのは「単価」じゃなくて、
( 主キー = テーブル 2::主キー ) * 単価 を設定した「masterRecord」を表示すればいいってことですね。


構造的・運用的に比較するまでもなくShinさんの方が絶対です。


私のことは忘れてください。
(´・ω・`).;:…(´・ω...:.;::..(´・;::: .:.;: サラサラ..

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.010 seconds, 9 queries executed - Memory usage: 594.67 KiB (Peak: 611.58 KiB) ]