みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
試行で点検管理システムをFm19で作ってみようと試みています。
顧客ごとに点検のレコードが増えていく中で、次回の作業実施時期の目安として、前回の作業年月日から「何カ月経過したか」を自動で取得し、点検入力用レイアウトの中に「前回の点検から〇〇か月経過しています」の様に表示したいのですが、良い方法はないでしょうか?
※特に分からないところ
・その顧客における前回の点検レコードを取得する方法
・作業年月日から計算をして「月のみ」にして文章と合わせて表示する方法
素人ですみませんが、よろしくお願いいたします。
ファイルの構造がわからないとコメントは難しいですが。
普通の構造ですと、顧客テーブルと点検テーブルがあり、顧客IDなどでリレーションが張ってあると思います。
リレーションで、点検側でを点検日で降べきにソートしておけば、顧客側から点検日を参照すればいいです。
あと何月は、その日を引けば日数が出ますので、それを30で割れば、大体の月ができます。厳格に出すのでしたら、年月を考えて引き算すればいいでしょう。
Offline
顧客だけの照合で、作業日の降順ソート指定では、
最新の自身を参照してしまいますね。
リレーションは
顧客 = 顧客
and
作業日 > 作業日
日付の降順ソート指定
これで直前のレコードを参照できます。
日付から月を求めるには
Month関数
があります。
Offline
shin様チポ様ありがとうございます。
説明不足で済みません。
リレーションはアンカーブイでと演習で習いましたので、テーブル構成は次のようにしました。
顧客マスタT フィールド:顧客情報etc
点検入力T フィールド:作業日、その他点検項目etc
リレーション
【点検入力T(入力用レイアウトあり)顧客マスタ外部キー】>ー【顧客マスタT 主キー】
ここで顧客=顧客は設定しているのですが、作業日は点検入力Tの中にしかありませんので、and作業日 > 作業日 日付の降順ソート指定ができません。
点検入力T同士を作業日でを自己リレーションすればよいということでしょうか?
またフィールドの計算式は
month(点検入力T::作業日 - 点検入力T2::作業日)ということでしょうか?
とりあえず上記の様に理解して自分でやってみましたが、入力した日付がそのまま返ってくるのみでだめでした。
Offline
点検入力T
の自己リレーションですよ。
ここでは顧客マスタTの出番はありません。
Offline
現時点での直近の点検日からの経過日数が欲しい、ということですよね。
https://www.dropbox.com/s/ioro3dj1akizw … 2.zip?dl=0
点検を受けた時点で前回の点検日をみるのですか。
Last edited by Shin (2023-07-15 17:01:37)
Offline
チポ様
了解いたしました。
リレーション
【点検入力T(入力用レイアウトあり)顧客マスタ外部キー】>ー【顧客マスタT 外部キー】【and作業日 > 作業日】
と設定したところ引き算はできるようになりました。(月のみの表示はshin様の計算式で表示されるようになりました)
shin様
お忙しいところ、わざわざモデルファイルを作成して下さりありがとうございます。
質問の答えですが、点検入力Tで今回点検レコードを作成した時点で、今回点検日と前回の点検日の差を見ております。
リレーションは分かってきたのですが、月のみの表示の仕方が分からなかったので点検経過フィールドのlet関数を見せていただき大変勉強になっています。
計算の中で分からない部分があります
Let (
[
D0 = Year ( 点検テーブル::点検日 ) * 12 + Month ( 点検テーブル::点検日 ) + Year ( 点検テーブル::点検日 ) / 100 ;
D1 = Year ( Get ( 日付 ) ) * 12 + Month ( Get ( 日付 ) ) + Year ( Get ( 日付 ) ) / 100
] ;
Int ( D1 - D0 )
)
のD0、D1において月数を算出しようとしているのはわかるのですが、それぞれの最後にYear ( 日付) / 100を足す操作をして、最後にint関数で小数点以下を切捨てているのはどんな操作をしているのでしょうか?
実際にいろんな日付を当てはめて計算したのですが、答えを自分で導き出せずにいます。
何度もすみませんがよろしくお願いいたします。
Offline
ごめんなさい、間違いました。
Let (
[
D0 = Year ( 点検テーブル::点検日 ) * 12 + Month ( 点検テーブル::点検日 ) + Day ( 点検テーブル::点検日 ) / 100 ;
D1 = Year ( Get ( 日付 ) ) * 12 + Month ( Get ( 日付 ) ) + Day ( Get ( 日付 ) ) / 100
] ;
Int ( D1 - D0 )
)
です。
Offline
shin様
とんでもございません。感謝しっぱなしです。
Dayにしてみてやっと理解できてきました。
「月のみ」で表示したいというオーダーなので、日は切り捨てるために/100としているのですね。
うまく表示できるようになりました。
ありがとうございました。
Offline
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 566.59 KiB (Peak: 581.38 KiB) ]