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

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

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

You are not logged in.

Announcement

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


#1 2017-01-02 04:26:41

Jak
Guest

現在の年月と、指定した年月の差が2以上の場合0、1以下の場合0を返したい

お世話になります。
FileMakerPro14を使用しています。
年をまたぐ際の処理に難渋しておりまして、ご指導頂けますと幸いです。

毎月の課金の管理をFileMakerを使って行いたいと考えております。

現在の月に、前月の月の分の課金請求を行います。
※表現が拙くて申し訳ないのですが、例えば2016年11月度に課金請求を行うのは、2016年10月度利用分、ということです。

すなわち、2016年10月中に顧客が解約を希望した場合でも、2016年10月度分は顧客に請求をかけないといけないのです。
※月内の何日に解約したかは関係なく、解約を行った月の請求は行います。

お客様からの解約を受けた際に別システムから払い出されたものをインポートした、
・解約日が記載されたテキストフィールド( 様式=yyyy/mm/dd )
があります。

ここで、例えば
現在が2016年11月である場合、
解約月が2016年10月以降であれば値として1(=課金対象)を、
解約月が2016年9月以前であれば値として0(=課金対象外)を返したいです。

下記のようにして処理を試みたのですが、
年をまたぐ際の処理がうまくできませんでした。
(※すなわち、現在が2017年1月で、解約日が2016年12月のとき、1を返したいのに、0が返ってしまいます。)

If (
    Left (
        Substitute (
            Date ( Month ( Get ( 日付 ) ) ; 1 ; Year ( Get ( 日付 ) ) ) ;
                "/";
                ""
            ) ;
        6
    )
    -
    Left (
        Substitute (
            Date ( Month ( 解約日 ) ; 1 ; Year ( 解約日 ) ) ;
            "/";
            ""
            ) ;
        6
    )
    <
    2 ;
    1 ;
    0
)

日付のまま処理することも考え、
※Left関数で左から7文字だけ取得して現在を2017/01、解約日を2016/10 等として、
そのまま差し引きで2未満として処理しようとしましたが、内部的に日付が格納されているせいか、うまくいきませんでした。

年をまたぐ際の処理について、よくある手法など、
ご教授頂けますと幸いです、よろしくお願いいたします。

#2 2017-01-02 08:26:46

ぽんかん
Guest

Re: 現在の年月と、指定した年月の差が2以上の場合0、1以下の場合0を返したい

年*12+月で計算するのが普通。

#3 2017-01-02 08:27:03

シャチ
Member

Re: 現在の年月と、指定した年月の差が2以上の場合0、1以下の場合0を返したい

年*100+月 つまり 2017・1・1なら 201701 となりますが、
この方式での差で計算できないでしょうか?
日付のフィールドの値を使って
計算フィールドに 上記の計算をするのです。

希望することがはっきり理解できてないので ごめんなさい
私、酔ってるかも

Offline

#4 2017-01-02 11:26:55

Hiro
Member

Re: 現在の年月と、指定した年月の差が2以上の場合0、1以下の場合0を返したい


(Year(Get(日付))-Year(解約日))*12 + (Month(Get(日付))-Month(解約日)) <= 1

・計算結果は、非保存を指定します。(日付の日替わり自動更新のため)
・この式(論理式)だけで、結果が、真は「1」、偽は「0」を返します。
・また、論理結果を文字列「課金対象/課金対象外」と表示したければ、
   数字の論理書式指定で表示できます。(1→課金対象、0→課金対象外)

Last edited by Hiro (2017-01-02 11:51:12)

Offline

#5 2017-01-02 16:22:50

Shin
Member

Re: 現在の年月と、指定した年月の差が2以上の場合0、1以下の場合0を返したい

解約日 > Date ( Month ( Get ( 日付 ) - 1 ; 0 ; Year ( Get ( 日付 ) )
でも良いかも。
汎用性が高いのは、
Year ( Get( 日付) ) * 12 + Month ( Get ( 日付 ) - ( Year ( 解約日 ) * 12 + Month ( 解約日 ) )
でしょうね。

Offline

#6 2017-01-04 00:55:01

Jak
Guest

Re: 現在の年月と、指定した年月の差が2以上の場合0、1以下の場合0を返したい

早急にご返信いただきましてありがとうございました。
ぽんかん様、シャチ様、Hiro様、Shin様、お教えいただきましてありがとうございます。

ぽんかん様とHiro様に書いていただいている方法で無事に実装できました。
また、Hiro様に指摘いただいている、論理式だけで結果が返ってくることも知りませんでした、ありがとうございます。

Shin様のご提案いただいているものについても、思いついていませんでしたので、他で何か出てきましたら参考にさせていたダダ来ます。
この度はありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 513.41 KiB (Peak: 517.95 KiB) ]