TOP>製品/サービス>カテゴリから探す>ビジネスルール管理(BRMS)>Progress Corticon>【BRMS Tech コラム】

Progress Corticon

【BRMS Tech コラム】

No.2 受発注、納品、営業活動に不可避な日付計算をCorticonで実装しよう

No.2 受発注、納品、営業活動に不可避な日付計算をCorticonで実装しよう

注文日、発注日、売上計上日、請求日など日々の業務に日付がなくてはならないものと思います。それらの判定は不変なようで、実はカレンダーにはない休業日、法令による国民の休日が変わるなど特異日がありませんか?
過去には2000年問題、和暦の変更などでプログラムの見直しを経験された方は少なくないと思います。一過性なので人力をかけて直してしまえばしのげるものの、そのような日付計算処理が可視化できたら、簡単に修正できるようになればそれにこしたことはないのではないでしょうか。
ここでは、Corticonでの対応例をいくつかあげて説明します。

日付計算の例

閏年をもとめてみよう

閏年を求めるには、おそらく学校で学んだであろう標準的な方法を用いてCorticonでも次のようにルールモデルを実装できます。
語彙には計算というエンティティに年という属性を設定しています。
計算した答えは閏年という属性に求めます。

閏年を求める計算はどういうものでしたでしょうか思い出してください。

 ・その年が4で割り切れるか
 ・その年が100で割り切れないか
 ・その年が400で割りきれるか


このような条件であったはずです。
その条件をCorticonに記述するとつぎのようになります。

Progress Corticonで閏年の計算を記述した画面

結果が、正しい(T)か間違っている(F)かで閏年か否かを求めています。
mod(4)やmod(100), mod(400)は割り算した結果のあまりです。年の値を割った結果、余りがなければ正しい(T)、余りがあれば正しくない(F)が戻ります。

この記述をもとに2000年、2010年、2016年、2000年はそれぞれ閏年か否かを求めてみます。
実行した結果はつぎのようになります。

Progress Corticonで閏年の計算をした結果画面

その月の最終日は何日かをもとめてみよう

つづいて、前述のルールシートによって決定される年が閏年であるかどうかを考慮してその月の日数を求めます。

1,3,5,7,8,10,12月と4,6,9,11月は変動しないため、それぞれ31日と30日を計算エンティティの日属性に戻します。

2月のみ、その年がうるうどし年か否かの判断が必要なため、計算エンティティの閏年(前述のルール結果)を受けて28日か29日かを戻します。

Progress Corticonで月の最終日を計算させる記述をした画面

この記述をもとに2020年2月の最終日は何日かを求めてみます。
2020年はオリンピックイヤーなので、2月の最終日は29日ですね。
結果も29日となっています。

Progress Corticonで月の最終日を計算させた結果の画面

その月の最終日は何曜日かをもとめてみよう

業務処理日が何曜日なのかが重要なこともあると思います。
週末なのか、週明けなのか。
それで行動が変わるのであれば、業務画面に曜日を出してあげたいところです。

つぎの例は、その曜日を求める方法です。
下の画像の画面では、曜日は1から7までの数値として計算され、それぞれの数値が曜日をあらわす文字として求められています。

Progress Corticonで曜日を計算させた画面

さきほど求めた2020年2月の最終日29日は何曜日になるでしょう。

Progress Corticonで2020年2月の最終日の曜日を計算させた画面

年と月でその月の最終日が何日で何曜日かをもとめてみよう

ここまで記述したルールを組み合わせて使ってみましょう。
ルールを組み合わせることで、年と月さえわかればその月の最終日と曜日を求めることができます。
Corticonでは、つぎのように記述したルールを実行したい順に結びつければそれぞれに記述したルールが動いて結果を導き出します。

Progress Corticonでルールを並べた画面

つぎのように2000年の2月は閏年で29日まであり29日は火曜日であったことがわかります。

Progress Corticonで閏年の計算と曜日の計算を行った画面

最後までご覧いただきありがとうございます。いかがでしょうか。今回の例ではプログラムで書くことも難しいことではないし頻繁に変わるものでもないですが、プログラムで書いてしまうより見やすくなっているのではないでしょうか。


著者紹介

谷列樹さん

情報基盤事業部 製品統括部プログレス推進部

以前は、Linux系のプログラマ兼SEとして、受託請負開発などに従事していた。
また、IT系雑誌や書籍の記事執筆などにも携わった経験をもつ。
現在は、BRMS Progress Corticonの技術サポート、研修などを行う。

「BRMS Tech コラム」記事一覧





お求めの情報は見つかりましたでしょうか。

資料請求/お問い合わせはこちら(専門の担当者が確認し、ご対応します。)

お客様の状況に合わせて詳しい情報をお届けできます。お気軽にご相談ください。

ページの先頭へ戻る