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

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

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

You are not logged in.

Announcement

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


#1 2020-08-24 15:16:19

名無し
Guest

検収月処理スクリプト 解説依頼

FileMakerpro15
既存の検収月を計算するスクリプトが複雑なのでわかりやすく書き直したいです。

初心者でどのような処理をしているのかわからないため解説お願いします。
おそらく20日締めの処理です。

If(3 / 21 <= Right(GetAsNumber(フィールド1) ; 4) <= 3 / 31;Left(GetAsNumber(フィールド1) ; 2) & "3.31";If(GetAsNumber(フィールド1) > "20";Left(GetAsText(フィールド1 + 9); 7);Left(GetAsText(フィールド1 ); 7)))

シンプルな20日締めの処理ならば
If (
  Day ( フィールド1 ) > 20 ;
  Date ( Month ( フィールド1 )+1 ; 20 ; Year ( フィールド1 ) ) ;
  Date ( Month ( フィールド1 ) ; 20 ; Year ( フィールド1 ) )
)
に書き直したいのですが処理結果は変わってくるでしょうか。

#2 2020-08-24 15:17:44

名無し
Guest

Re: 検収月処理スクリプト 解説依頼

フィールド1には日付が入力されています。
例:2019.08.21

#3 2020-08-24 16:41:33

Shin
Member

Re: 検収月処理スクリプト 解説依頼

その2個の計算式を抜き出して、別のファイルで検証してみればいいのでは。
元の式は、文法的に誤っていますが、動いているのですか。MM/DD のテキストで、9ヶ月後の20を求めとしているのかもしれませんが。

最もシンプルなn日締め(末日は0)の日を求める式は、
Date ( Month ( 日付 - n ) + 1 ; n ; Year ( 日付 - n ) )

Last edited by Shin (2020-08-24 17:05:31)

Offline

#4 2020-08-24 17:22:44

名無し
Guest

Re: 検収月処理スクリプト 解説依頼

>元の式は、文法的に誤っていますが、動いているのですか。MM/DD のテキストで、9ヶ月後の20を求めとしているのかもしれませんが。

回答ありがとうございます。
動いてはいますが、
20日締めなので21日や22日を入力すると次月になるはずなのに当月になってしまうバグがあります。
例えば2019.1.22と入力すると、2019.2と表示されるはずなのに
2019.1と表示されます。
2019.1.23だと2019.2になります。

#5 2020-08-24 18:18:09

Shin
Member

Re: 検収月処理スクリプト 解説依頼

ちょっと違うか。

3 / 21 <= Right(GetAsNumber(フィールド1) ; 4) <= 3 / 31 は、常に0を返します。
GetAsNumber(フィールド1) > "20" は、常に1を返します。
ということは、Left(GetAsText(フィールド1 + 9); 7) という式だけが常に評価されている、つまり、入力した日付の9日後の年月が表示される、という式です。

作った人は、通常は締め日が20日、3月が期末なのでしょうか、期越えはせずに、期末日が締め、という意図だったのでは。でしたら、
Min ( Date ( Month ( 日付 - 20 ) + 1 ; 20 ; Year ( 日付 - 20 ) ) ; Date ( 3 ; 31 ; Year ( 日付 + 275 ) ) )
が一番短い式になるかな。

Last edited by Shin (2020-08-24 18:34:44)

Offline

#6 2020-08-24 18:43:00

名無し
Guest

Re: 検収月処理スクリプト 解説依頼

>3 / 21 <= Right(GetAsNumber(フィールド1) ; 4) <= 3 / 31 は、常に0を返します。
>GetAsNumber(フィールド1) > "20" は、常に1を返します。
>ということは、Left(GetAsText(フィールド1 + 9); 7) という式だけが常に評価されている、つまり、入力した日付の9日後の年月が表示される、という式です。

>作った人は、通常は締め日が20日、3月が期末なのでしょうか、期越えはせずに、期末日が締め、という意図だったのでは。でしたら、
>Min ( Date ( Month ( 日付 - 20 ) + 1 ; 20 ; Year ( 日付 - 20 ) ) ; Date ( 3 ; 31 ; Year ( 日付 + 275 ) ) )
>が一番短い式になるかな。

納得できました!
スクリプトの解説だけではなく、業務視点での分析ありがとうございます。
助かりました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 511.44 KiB (Peak: 518.59 KiB) ]