マイツール便利技

マイツールにおける2000年問題 <問題点の判別と対応方法>


MWM編集局


<2000年で問題があるオ―トプログラム>

西暦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 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

前のページに戻る