販売管理などでは請求書を作成するときに翌月末払いを表示するということはよくあることだと思います。今回は月末の計算方法について解説します。
初心者の方が陥りやすい罠
FileMaker(ファイルメーカー)は誰にでも簡単に自前のアプリや業務ソフトが作成できる便利なものですが、とはいってもプログラミング的な要素があり、そういった思考が要求されます。この月末を計算するという作業はもしかしたら最初に当たる難敵かもしれません。
ファイルメーカーにたどり着いた方のほとんどは、会社の業務を自動化したり、ペーパーレス化したいという課題があり、ファイルメーカーなら自分でできそうだということで購入しているケースでしょう。そういったなかで販売管理のソリューションを作成される方も多くいると思います。
日本の会社の多くは、月末締め、翌月末払いという支払いスキームを採用していることと思います(もちろん他もたくさんいらっしゃるでしょう)。しかし、この月末という日付を入力するのではなく、自動で計算できたらありがたいですよね! ここではその計算について解説します。
月末はバラバラだからややこしい
1月は31日、2月は28日(29日なんてことも)……とその月によってバラバラ。2月以外は毎年同じ日が月末となるので……ということに行き着くかもしれません。
case( month ( 売上::日付 ) = 1 ; 31 ; …省略… )
こんな計算してませんか? 確かに、1、3、5、7、8、10、12が31日までで、4、6、9、11月が30日で……とやっていけばcase関数で計算できないこともありませんが、これでは後で見た時や他の人が見た時に「なんだったけ」 となってしまいますよね。
逆転の発想
ファイルメーカー(FileMaker Pro)に限らず、プログラミング的思考というのはこういった場面ではよく求められます。押してダメなら引いてみろ、という言葉があるように正面からぶつかっては解決しないこともよくあります。そういったときには逆転の発想で乗り切りましょう。
その月の月末を計算してはいけない
例えば「3月20日」に販売した商品があるとします。この販売商品は「3月31日」に締められ、「4月30日」を支払いの期限として請求書を発行します。このとき「3月20日」はすでに入力されているので、この日付から「3月31日」とい「4月30日」を自動的に計算をするわけです。
このときに「3月」というデータに注目して、そこから月末にたどり着こうとしても非常に難しくなります。ここで、逆転の発想が必要です。
月末の次の日は必ず「1日」
「4月30日」も「3月31日」も必ず、次の日が「1日」になる点に注目しましょう。つまり月初の前の日が月末になるわけです。まず「3月31日」を求める場合は、「3月20日」の次の月の月初を計算してみましょう。ここでは「売上::日付」というフィールドに「2017/3/20」というデータが入っているとします。
Date ( month(売上::日付) + 1 ; 1 ; year(売上::日付) )
上記式のようにすると、「2017/4/1」を返します。日付関数「Date」を使い、月+1し、1日の日付を返します。
Date ( Month(売上::日付) + 1 ; 0 ; Year(売上::日付) )
今度は、日の引数の部分に「0」にしてみます。先ほどの「1」から-1(前の日)した「0」にしてみると「2017/3/31」を返します。