No.62-3 |
支払計算期間を出したい。 |
回答者 高橋 周助 |
1997年10月 189号 P.23 |
◆ No.62(1997年 09月号)の回答-03
請求業務・支払業務の基本中の基本となる課題ですね。私も、アルゴリズムで大失敗をしたことがあります。今回は、MPUの定義表としてまとめてみました。
『当該月締日』の列を追加しています。この列があった方が理解しやすいし計算結果をチェックする時に、大いに助けになります。どうしても桁数が不足して列新設ができない場合は工夫をしてください。しかし、ちょっと手間がかかると思います。
締日が1日でもかまいません。ただ、29〜31日は避けてください。
|
|
--- 定義表の動作確認のためのプログラム ---
<SSS1> 対象データをバッファに出して SSS1 リターン
FILL/C;;A;@から ;Y; ;A;@まで ;Y; ;A;@当該月締日 ;Y; ESC;
MPU/T;M;;支払計算期間/1;Y;
STOP;
<SSS3>
FILL/P;取引;取引;;A;8,T;Y;Y;
MPU/T;取引;;支払計算期間/1;Y;
STOP;
--- 簡素化定義表の動作確認のためのプログラム ---
<TTT1> 対象データをバッファに出して TTT1 リターン
FILL/C;;A;@から ;Y; ;A;@まで ;Y; ;A;@当該月締日 ;Y; ESC;
MPU/T;M;;支払計算期間/4;Y;
STOP;
<TTT3>
FILL/P;取引2;取引2;;A;8,T;Y;Y;
MPU/T;取引2;;支払計算期間/4;Y;
STOP;
|
|
なお、締日の”末日”の記述を、"99" に変更してもらえば、次のように間単になります。また、当該月締日の列を新設しなくても可能です。
『締日過ぎた』の『から』の実行式を
DATE(@まで ,1,1)=@から
とすることも可能ですが、そうすると、@まで に、この時点で何が代入されているかを確認する必要が出てきます。
些細なことですが、後日保守の目的で解読する人のために、
DATE(MDATE(@取引日 ,0,@締日 ),1,1)=@から
としました。
永続的なプログラムを作る場合は、プログラム創造と同等以上の配慮と労力を、保守のために捧げるべきと考えます。それが、保守をする人(自分かもしれません)に対する義務であり、保守作業に要する工数を大幅に削減する道につながると思います。
|
更に、データを『取引先マスタ』バインダと『トランザクション』バインダとに分離した場合、『トランザクション』に、わざわざ締日列を設ける必要はありません。
(定義表中の @締日 を @S締日 に変更)
バインダーを分離することによって、リレーショナル データベースの基本にならって、データを一元化できます。
せっかく、一元化したのですから、わざわざ締日列をコピーしてしまったのでは、何にもなりません。
特別の理由がなければ、保守用のバインダには締日列を新設すべきではないと考えます。 □
|
|
| |