あるお客様の案件でPower Automateを使って締め処理的なものを開発する場面がありましたので、どのような実装を行ったのかを備忘録的に残しておきます。
締め日計算の考え方
締め処理を行うためには、ある特定の日付(例えば売上計上日)から正しい締め日を求める必要があります。締め日は以下の式で求めることができます。
締め日=(計上日-締め日)の月末日 + 締め日
例:25日締めの場合
- 7/15 – 25日=6/20
- 6/20の属する月の月末=6/30
- 6/30 + 25日=7/25
Power Automateでの実装例
今回はPower Appsのモデル駆動アプリを例に説明していきます。例として以下のような簡単なテーブル構造を考えてみたいと思います。
概要設計
Power Automateで実装する処理を以下のようにざっくり設計します。
ステップ | 処理内容 |
---|---|
トリガー | 売上伝票レコードが作成されたとき or 売上計上日が更新されたとき |
処理1 | 得意先マスタ(取引先企業)を参照し、締め日(整数)を取得する |
条件 | 締め日(整数)が28以下 or 29以上で条件分岐 |
処理2 | 締め日(整数)が29以上の場合: 末締めとみなして締め日計算を行う。売上計上日の月末を売上伝票テーブルの締め日(日付)に格納する。 |
処理3 | 締め日(整数)が28以下の場合: 通常通り締め日計算を行う。売上計上日から締め日を引いた日付の属する月の月初に締め日を足した値を売上伝票テーブルの締め日(日付)に格納する。 |
締め日が29以上の場合
今回は締め日が29日以上の場合は末締めとみなして処理を行っていきます。一般的に”30日締め”みたいな企業はないと思うので、この場合は単純に計上日から当月末を取得すればOKです。
例:末締めの場合、8月1日に計上された売上は8月31日締めの請求書に載る
Power Automateには月末日を求める機能(EOMONTH的な関数)がないので、月末日を求めるには以下のような計算をする必要があります。
実装例
①当月の月初を求める
以下は売上計上日がUTCで、かつ日時(DateTime型)で管理されている場合の例です。この場合、日本時間に合わせる必要があるため、計上日に9時間を足しています。また、月初を求める場合は日付表現(yyyy-MM-dd)を指定するところで無理やりddを01にしてあげる必要があります。
②上記①に1か月を加算する
③上記②から1日引く
締め日が28日以下の場合
次に、締め日が28日以下の場合について考えます。この場合、「計上日から締め日を引いた日付の属する月の月末」に「締め日分の日数」を足すことで、当該売上明細に対する締め日を求めることができます。
例:25日締めの得意先に対し8月5日に売上を計上した場合:
①8/1から25日を引くと7/11
②7/11の属する月の月末は7/31
③7/31に締め日25日を足すと8/25
末締めの場合と同じく、Power Automateでは月末日を計算する関数がないため以下のアプローチをとります。
実装例
①売上計上日から締め日分の日数を引く
②上記①の日の属する月の月初を求める
③上記②に1か月を加算する
④上記③から1日引く
⑤上記④に締め日を加算する
まとめ
ということで、多少面倒な実装が必要になりますが、上記のように締め日さえ正しく計算できれば、あとはこれを集計して請求書を作ったり、作業報告書を起こしたりそこからメール配信したりSharepointに格納したり、という感じで業務の自動化につなげて行くことができます。
業務系の仕組みを構築するためには必須の機能なので、汎用的な部品としてつくっておいて使い回せるようにしておきたいところ。
請求書の電子化が一般的になれば、締め請求という概念自体が不要になるような気もするのですが、、ハンコすらなくせない企業も多いなかでそのような日が来るのはまだまだ先になるのかもしれません。インボイス制度が始まれば請求書単位税率単位で消費税を表記する必要があり端数調整がますます面倒になるため、できれば締め請求自体をやめてしまいたいものです。