今回はDynamics 365 Business Centralの支払期日計算の計算式について解説します。
発端は以下のForum投稿です。
(99+) Payment due dates – Dynamics 365 Business Central Forum Community Forum
“Customers will purchase throughout the year with all invoices becoming due on October 27th.”
日本語に訳すと「顧客は年間を通じて購入し、すべての請求書の支払期限を10月27日にしています」です。
これだけだと境界値条件が不明確で、例えば9/30に購入した場合と10/26に購入した場合と10/28に購入した場合の支払日が同じかどうか?という疑問が残るので、「9月末で締めて10/27払いにする。」と仮定します。(つまり、10/1の購入は翌年の10/27払とする)
Sales Orderで関係する項目は”Posting Date”と”Due Date”、”Payment Term Code”の3つです。
Payment Term CodeはCronusだと既定で以下のものが用意されています。Test1というコードを追加してDue Date Calculationに”M10+26D”と指定します。
このコードをSales Orderにセットします。
そしてPosting Dateを色々と打ち変えて、Due Dateがどのように変化するかを確認します。例えばPosting Dateを2022/09/30にするとDue Dateは2022/10/27になります。
Posting Dateを2022/10/01にするとDue Dateは2023/10/27になります。 9/30と10/1が境界の日付になっていることがわかります。
Forumへの回答としてはこれだけなのですが、このDue Date Calculationは1年に1回くらい質問されて都度調べているので、忘れないように書き残したいと思います。
いろいろと試すためのPayment Termを以下のように追加します。
1. 一般的に使用される決済条件
a. 月末締翌月末払:CM+1M+CM
Due Date Calculationの計算式はCM+1M+CMを指定します。するとPosting DateとDue Dateの関係は以下のようになります。いい感じに月末締翌月末払いになっているのがわかると思います。
※式の作り方は後で説明します。
PostingDate | DueDate |
2022/01/01 | 2022/02/28 |
2022/01/31 | 2022/02/28 |
2022/02/01 | 2022/03/31 |
2022/02/28 | 2022/03/31 |
b. 月末締翌月20日払:CM+20D
Due Date Calculationの計算式はCM+20Dを指定します。するとPosting DateとDue Dateの関係は以下のようになります。月末締翌月20日払いになっているのがわかると思います。式の解説はあとでやりますが、CMが月末締めに対応し、20日払が20Dに対応しているのが何となくわかると思います。
PostingDate | DueDate |
2022/01/01 | 2022/02/20 |
2022/01/31 | 2022/02/20 |
2022/02/01 | 2022/03/20 |
2022/02/28 | 2022/03/20 |
c. 20日締翌月末払い:D21+1M+CM
もう一つ。今度は締め日のほうを月末でなくしてみます。すると以下のような対応関係になります。式の解説はあとで行いますが、a. 月末締翌月末払いとの比較で、20日締めが「D21」になっているのだろうと推測できるかと思います。
PostingDate | DueDate |
2022/01/20 | 2022/02/28 |
2022/01/21 | 2022/03/31 |
2022/02/20 | 2022/03/31 |
2022/02/21 | 2022/04/30 |
2. 計算式の要素を分解して解説
(1) 20D
Due Date Calculateの式を”20D”に設定してPosting Dateをいろいろと変更してDue Dateがどうなるか試した結果です。ここで”D20″ではないことに注意してくださいす。 20Dが「20日後」を求める式であることがわかります。15Dだと「15日後」になります。
PostingDate | DueDate |
2022/01/01 | 2022/01/21 |
2022/01/10 | 2022/01/30 |
2022/01/20 | 2022/02/09 |
2022/01/31 | 2022/02/20 |
(2) 2M
Due Date Calculateの式を”2M”に設定して試してみます。「2か月後」になっていることがわかります。2か月後の同じ日付ですが存在しない場合は2か月後先の月の月末になります。(ex.12/31→2/28)
PostingDate | DueDate |
2022/01/01 | 2022/03/01 |
2022/01/10 | 2022/03/10 |
2022/01/20 | 2022/03/20 |
2022/01/31 | 2022/03/31 |
2022/02/28 | 2022/04/28 |
2022/12/31 | 2023/02/28 |
(3) CM
Due Date Calculateの式を”CM”に設定して試してみます。 これは「当月末」を求める計算式であることがわかります。 日数の多い月か少ない月かに関係なく月末の日付を求めてくれます。
PostingDate | DueDate |
2022/01/01 | 2022/01/31 |
2022/01/31 | 2022/01/31 |
2022/02/01 | 2022/02/28 |
2022/02/28 | 2022/02/28 |
2022/03/01 | 2022/03/31 |
(4) CY
あまり使うことはないのですが、CYという計算式もあります。「年末」を求める式であることがわかります。
PostingDate | DueDate |
2021/12/31 | 2021/12/31 |
2022/01/01 | 2022/12/31 |
2022/12/31 | 2022/12/31 |
2023/01/01 | 2023/12/31 |
(5) D20
Due Date Calculateの式を”D20″に設定して試してみます。”20D” ではないことに注意が必要です。D20は「次の20日」を返す計算式です。例えば1/19の次の20日は1/20です。1/20の次の20日は2/20です。「20日締」として使おうとすると1日ずれてしまいます。
PostingDate | DueDate |
2022/01/19 | 2022/01/20 |
2022/01/20 | 2022/02/20 |
2022/01/21 | 2022/02/20 |
2022/02/19 | 2022/02/20 |
2022/02/20 | 2022/03/20 |
2022/02/21 | 2022/03/20 |
(6) D21
「20日締」にするには計算式を”D21″にします。1/19と1/20の「次の21日」は両方とも2/21になり、1/21~2/20の任意の日の「次の21日」は3/20になります。
PostingDate | DueDate |
2022/01/19 | 2022/01/21 |
2022/01/20 | 2022/01/21 |
2022/01/21 | 2022/02/21 |
2022/02/19 | 2022/02/21 |
2022/02/20 | 2022/02/21 |
2022/02/21 | 2022/03/21 |
(7) M10
“D21″があるなら”M10″があっても良さそうです。実際に指定することができ「次の10月」を返します。正確には「次の10月の初日」を返します。冒頭に紹介したフォーラムの質問の回答ではこれを使っています。
PostingDate | DueDate |
2022/09/01 | 2022/10/01 |
2022/09/30 | 2022/10/01 |
2022/10/01 | 2023/10/01 |
2022/10/31 | 2023/10/01 |
2023/09/30 | 2023/10/01 |
2023/10/01 | 2024/10/01 |
3. 支払期日の計算式の組み方
「n日後に支払う」という場合であれば2.-(1)で紹介した”20D”のように”nD”を計算式に指定すればよいです。
ですが多くの場合は(少なくとも日本では)「25日締翌月末日払い」のように「n日締」であることが求められます。そうすると”nD”は入力日付と出力日付が1:1対応するので「n日締」に対応できません。そこで2.-(3)で紹介した “CM” や 2.-(6)で紹介した”D21″を使うことになります。「CM:今月末」や「D21:次の21日」を使用することで1か月間の任意の日付を一つの日付に集約することができます。その結果「n日締」に対応することができます。いろいろと小難しいことを考えなくても「末締めはCM」「n日締めはDnにする」と覚えておけば大丈夫です。
「〇日締」が出来たら後は「翌〇〇日払い」を考えるだけです。例えば「翌月15日」は「当月末日の15日後」に置き換えることができますので「CM+15D」とします。「翌月末日」は「1か月後の月末」なので「1M+CM」とします。
ここまでくれば 1. 一般的に使用される決済条件 で紹介した式の意味が理解できると思います。
・月末締翌月20日払:CM+20D
・20日締翌月末払い:D21+1M+CM
・月末締翌月末払:CM+1M+CM
月末締翌月末払は「CM+1M」でも良いと思うかもしれませんが、例えばPostingDateが4月(ex.4/10)の場合にDueDateが5/30になってしまうので、最後に+CMをつけて払い日が末日になるようにする必要があります。
基本を一度理解してしまえば何ということはないのですが、たまにしか質問されないので聞かれるとすぐに答えられないことが多かったりします。その時にこの記事を見に来てもらえればと思います。