マイツール便利技 | |
マイツールにおける2000年問題 <問題点の判別と対応方法> | |
MWM編集局 |
西暦2000年以降、問題が発生する恐れのあるオ―トプログラムは,下記のものに多く見られます。
*請求書を西暦下2桁の年号を使い20日締めで発行している場合。
*その他の業務として西暦下2桁の年号を使って月をまたいで処理をしている「仕入れ」、「支払い」、「工事台帳」、「運転日報」、「検索」、「集計」など。
西暦2000年以降も、引き続きオートプログラムをお使いになる場合は、次の判別方法に該当する部分がないか、ご確認ください。
該当する場合は、対処方法をご参考ください。
問題発生の可能性があるプログラムの判別方法のポイントは、デ―タペ―ジに日付や期間などで、西暦を2桁で記入する列があるかどうかです。
使用例としては、次のようなものがあります。
例:1)日付範囲を西暦下2桁で指定するようにしている
ACCP:日付範囲は?(例;991021-991120):?:V1=V0:
SH:1-100:C2#V1:::
*年月日6桁をハイフンでつないで日付範囲を入力するようにメッセージが表示される。
例:2)開始年月日・終了年月日を西暦下2桁で入力するようにしている
ACCPNUM:開始年月日は?(例;991021):::?:Z1=Z0:
ACCPNUM:終了年月日は?(例;991120):::?:Z2=Z0:
SH:1-100:C2#Z1-Z2:::
ACCPNUM:開始年月日は?(例;991021):::?:Z1=Z0:
ACCPNUM:終了年月日は?(例;991120):::?:Z2=Z0:
SH:1-100:C2>=Z1:C2<=Z2:::
*日付を年月日6桁で入力するようにメッセージが表示される。
例:3)並べ替えのキー列に西暦下2桁で入力された列を指定している
S:1-100:2:1:::
*キー列に指定した列が、西暦下2桁で入力されている。
例:4)西暦下2桁の年月日を使って日付計算を行っている
YMD[991224]+10:
*結果が「1000103」になる。
西暦99年12月24日の10日後を求めているため、西暦100年1月3日となってしまう。
例:5)変数に代入された年数を使って日付変換を行っている
Z1-1900:
*西暦4桁から2桁へ変換しようとしたが、 3桁の「100」になる。
「2000 ‐ 1900 = 100」の計算となっているため。
Z1+1900:
*西暦2桁から4桁へ変換して「2000」にしようとしたが、「1900」になる。
「00 + 1900 = 1900」の計算となっているため。
Z1+88:
*和暦から西暦2桁へ変換しようとしたが、 3桁の「100」になる。
「12 + 88 = 100」の計算となっているため。
Z1-88:
*西暦2桁から和暦へ変換しようとしたが、結果が「-88」になる。
「00 - 88 = -88」の計算となっているため)
例:6)STRCPY命令で年数のデータを取り出している
ACCP締めの年月は?(例;9905):?:Z2=Z0:
STRCPY:Z2::1::2::Z25=V0:STRCPY:Z2::3::::Z26=V0:
*STRCOPY命令で、Z25に年、Z26に月を代入しているが、「 0001」と入力するとエラ―で止まってしまう。
「0001」を入力するとZ25に「0」、Z26に「1」が代入されるので、 Z2をV2等の文字型変数にする。
ACCP:締めの年月は?(例9905):?:V2=V0:
STRCPY:V2::1::2::Z25=V0:STRCPY:V2::3::::Z26=V0:
例:7)CNC命令の条件ペ―ジで西暦下2桁の日付を条件式に指定している
C2>=980401
*西暦2000年1月1日を「000101」と入力すると、正しく判定できない。
例:8)EFデザインペ―ジの条件指定部(*C)で西暦下2桁の日付を指定している
*C
C2>=950101:
C2#950101-991231
*条件指定部分に特定の年数の指定や範囲指定等がある場合、2000年以降の日付入力ができない。
例:9)DATE命令で日付を入力している
M3.04以前のマイツールで作成したオートプログラムの場合は、要注意
DATE::
*パソコンの日付が「2000.01.02」となっている場合、
バージョン | Z35 | V0 |
M2 | 0 | 00.01.02 |
M3.00〜M3.04 | 2000 | 2000.01.02 |
M3.05以降 | 2000 | 2000.01.02 |
M3.00〜M3.04までの場合、マイツール起動時の日付表示は「100年1月2日」となります。
DATE:?:
*「日付を入れてください」のメッセージで「00.01.02」 と入力した場合
バージョン | Z35 | V0 |
M2 | エラ― | エラ― |
M3.00〜M3.04 | 1900 | 1900.01.02 |
M3.05以降 | 2000 | 2000.01.02 |
例:10)IF文で日付入力範囲をチェックしている
IF Z1 < 95 THEN:GOTO *ERROR:ENDIF:
*95年以下の年号が入力された場合、エラーと判定するように している。
2000年を「00」で入力すると、エラーと判定されてしまう。
例:11)他のアプリケーションのデ―タをSGET命令で読み込んでいる
SGET: ”A.CSV”:5:F=6,5,10・・・
*2000年対応が行われている他のアプリケーション(PCA2000年対応版など)で作成したCSVデ―タを、SGET命令でマイツールデータに変換する場合、年月日のデータを取り込む部分のF文の指定が、6桁のままになっていると、データが2桁ずれて集計の数字が異常な値をになる。
この場合、「F=6,5,10,・・・」を、「F=8,5,10,・・・」に変更する必要がある。
*2000年対応が行われていない他のアプリケーション(PCAなど)で作成したCSVデ―タを、SGET命令でマイツールデータに変換した場合、マイツ―ルで明細の集計を、
S::2:1:4:3::;
のように、2列目の得意先を文字正順に、4列目の日付を数字正順に並べると、デ―タの日付が西暦下2桁で処理されていると、1月の明細の下に、12月の明細が表示されてしまう。
例:12)オートプログラムは修正したが、手順書や入力表の対応が不十分
*オートプログラムは修正されていても、操作や処理手順を文書として作成している場合、日付の入力や範囲を西暦下2桁で行うように指示されたままだと、処理中に問題が発生する恐れがあります。
データ入力を行う表のフォーマットの変更、手順書の修正が必要です。
*CMD命令・FKS命令で登録したセミオートが、西暦下2桁で処理するままになっている場合も、問題が発生する恐れがあります。
判別方法にあげた項目に該当するオートプログラムの場合、2000年以降使用するにあたっては、次のような対処方法があげられます。
工数は (1)< (2) < (3)の順にかかります。
業務処理上支障がない場合は、(1)の方法をお勧めします。
(1)運用で対応する
1999年と2000年とで、データを別々に処理するようにします。
例えば、請求書を12月分と1月分に分けて発行します。
デ―タもプログラムも変更の必要がありませんが、月単位での処理しかできません。
(2)和暦に変換する
デ―タの変更だけですむケースがほとんどです。
1999年11月請求の締めの後から、和暦入力にすればデ―タの修正も最小で済みます。
(3)西暦4桁に変換する
すべてのデ―タとプログラムを変更する必要があります。
修正やチェックに時間を要しますが、1900年代と2000年代のデータを取りまとめて扱うことができます。
*ここであげた方法は、対処の一例です。業務の内容や処理によっては、当てはまらない場合もあります。
|
MUG Web Magazine |