No.2 受発注、納品、営業活動に不可避な日付計算をCorticonで実装しよう
2016.07.05 Progress Corticon
本エントリーは株式会社アシスト様が寄稿したエントリー(https://www.ashisuto.co.jp/product/category/brms/progress_corticon/column/detail/brmstech02.html)を転載したものとなります。
|
注文日、発注日、売上計上日、請求日など日々の業務に日付がなくてはならないものと思います。それらの判定は不変なようで、実はカレンダーにはない休業日、法令による国民の休日が変わるなど特異日がありませんか?
過去には2000年問題、和暦の変更などでプログラムの見直しを経験された方は少なくないと思います。一過性なので人力をかけて直してしまえばしのげるものの、そのような日付計算処理が可視化できたら、簡単に修正できるようになればそれにこしたことはないのではないでしょうか。
ここでは、Corticonでの対応例をいくつかあげて説明します。
日付計算の例
閏年をもとめてみよう
閏年を求めるには、おそらく学校で学んだであろう標準的な方法を用いてCorticonでも次のようにルールモデルを実装できます。
語彙には計算というエンティティに年という属性を設定しています。
計算した答えは閏年という属性に求めます。
閏年を求める計算はどういうものでしたでしょうか思い出してください。
・その年が4で割り切れるか
・その年が100で割り切れないか
・その年が400で割りきれるか
このような条件であったはずです。
その条件をCorticonに記述するとつぎのようになります。
|
結果が、正しい(T)か間違っている(F)かで閏年か否かを求めています。
mod(4)やmod(100), mod(400)は割り算した結果のあまりです。年の値を割った結果、余りがなければ正しい(T)、余りがあれば正しくない(F)が戻ります。
この記述をもとに2000年、2010年、2016年、2000年はそれぞれ閏年か否かを求めてみます。
実行した結果はつぎのようになります。
|
その月の最終日は何日かをもとめてみよう
つづいて、前述のルールシートによって決定される年が閏年であるかどうかを考慮してその月の日数を求めます。
1,3,5,7,8,10,12月と4,6,9,11月は変動しないため、それぞれ31日と30日を計算エンティティの日属性に戻します。
2月のみ、その年がうるうどし年か否かの判断が必要なため、計算エンティティの閏年(前述のルール結果)を受けて28日か29日かを戻します。
|
この記述をもとに2020年2月の最終日は何日かを求めてみます。
2020年はオリンピックイヤーなので、2月の最終日は29日ですね。
結果も29日となっています。
|
その月の最終日は何曜日かをもとめてみよう
業務処理日が何曜日なのかが重要なこともあると思います。
週末なのか、週明けなのか。
それで行動が変わるのであれば、業務画面に曜日を出してあげたいところです。
つぎの例は、その曜日を求める方法です。
下の画像の画面では、曜日は1から7までの数値として計算され、それぞれの数値が曜日をあらわす文字として求められています。
|
さきほど求めた2020年2月の最終日29日は何曜日になるでしょう。
|
年と月でその月の最終日が何日で何曜日かをもとめてみよう
ここまで記述したルールを組み合わせて使ってみましょう。
ルールを組み合わせることで、年と月さえわかればその月の最終日と曜日を求めることができます。
Corticonでは、つぎのように記述したルールを実行したい順に結びつければそれぞれに記述したルールが動いて結果を導き出します。
|
つぎのように2000年の2月は閏年で29日まであり29日は火曜日であったことがわかります。
|
最後までご覧いただきありがとうございます。いかがでしょうか。今回の例ではプログラムで書くことも難しいことではないし頻繁に変わるものでもないですが、プログラムで書いてしまうより見やすくなっているのではないでしょうか。
著者紹介
|
情報基盤事業部 製品統括部プログレス推進部 |