RPG

339. UDATE が変わらない?!

UDATEは RPGの中でも今日の日付を設定するのに頻繁に使用されているし
馴染みも多い。
御社のプログラム資産の中でもUDATEを使用しているプログラムは
多いはずである。
印刷帳票には出力日付としてほとんど必ずと言ってよいほど
UDATE が印刷出力されている。

しかしUDATEの使用には少し注意がある。
それは UDATEとはジョブが投入された日であることだ。
つまりジョブが挙がりっぱなし、つまり表示端末ジョブを点けっぱなしである
場合は UADTEとあくる日になっても全く変わらないということである。

例えば 2020年1月30日に5250エミュレータを接続してON にして
休日明けの2020年2月3日に出勤してこの人が同じ端末で仕事をしたとする。
そのジョブのUDATEは 1月30日のままで変わっていない。

UDATE を使った印刷を行うと 1月30日のままで出力される。
PCをオンにしたままで帰る人はいなかったとしても
現在、多くの企業で IBM iは毎朝IPLするのではなく
ほとんど年間を通じてオンににしたままという企業もめずらしくはない。
このとき社内でバッチJOBが待機しているようであれば
そのバッチJOBのUDATEは変わらないままである。

HTTPサーバーやFTPサーバーもオンになったままであれば
CGI出力のUDATEが変わらないということもある。
( 弊社のHTTPサーバー: ALSKAはこの問題は考慮されているので
UDATEを使っている場合も正しく更新される)

[ UDATEの問題を避ける方法 ]

0028.00 D*( プログラム状況データ構造 )     
0029.00 D INFDS_THIS     SDS               
0030.00 D  PROC_NAM         *PROC          
0031.00 D  ROUTINE          *ROUTINE       
0032.00 D                              512A
0033.00 D  PGMINFO                1    512 
0034.00 D  LINE_NUM              21     28 
0035.00 D  CPFID                 40     46 
0036.00 D  CPFDTA                91    170 
0037.00 D  ERRMSGID              46     51 
0038.00 D  JOBDAT               191    198 
0039.00 D  JOB                  244    253 
0040.00 D  EXEDAT               276    281 
0041.00 D  CURUSR               358    367 

[解説]

RPG のプログラム構造の中でも

0040.00 D  EXEDAT               276    281

はつねに更新されているので点けっぱなしのJOBであっても
正しい日付を取得することができる。