ACMS Lite Neo同梱版AnyTranにおける閏年の取り扱いに関する重要なお知らせ|ACMS Lite Neo|EDIクライアント

JX手順に対応、導入と運用も容易な中小規模環境向けEDIクライアント クライアントOS対応版 | サーバOS対応版

ACMS Lite Neo同梱版AnyTranにおける閏年の取り扱いに関する重要なお知らせ

拝啓 貴社益々ご清栄のこととお慶び申し上げます。平素は格別なるご高配を賜り誠にありがとうございます。

さて、ACMS Lite Neoバージョン1.4.1以降の同梱版AnyTran(以下、AnyTran)をご利用の一部お客様より、入力の日付項目(年の指定がない月日/MMDD)の変換処理において、値が「0229」(閏年)の場合に変換エラーとなるとのご報告を受け、「原因」および「対処方法」をご案内いたします。
AnyTranの動作としては年の指定がなく月日だけの場合、閏年の判定が出来ないため変換エラーとなることは正しい動作ですが、この動作を意図していないお客様を考慮し、「原因」および「対処方法」を下記の通りご案内いたします。

この事象は、ACMS Lite Neoバージョン1.4.1以降のAnyアプリにおいて本事象が発生いたしますので、下記の「原因」および「対処方法」をご確認のうえご対応いただけますようお願いいたします。

合わせて、変換定義の修正が困難なお客様には、パッチもご提供しております。「対応パッチの提供およびリリース時期」をご確認ください。

尚、ご不明な点などございましたら、貴社担当営業または【お問い合せ先】、サポート契約を締結されているお客様はカスタマ・サポート・サービスまで、ご遠慮なくお問い合せ下さい。
今後とも弊社ならびに弊社製品をよろしくお願い申し上げます。

敬具


1.現象

以下のいずれかの現象が発生する可能性があります。

1)年を持たない日付データの変換処理でエラーが発生する

発生条件

  • 入力フォーマットに、年も持たない日付タイプの項目が存在する
     → 日付書式として「MMDD」、「MM/DD」、「DDMM」など、年部を持たない日付データが相当
  • この項目を出力側で利用している
  • 変換実行時、上記の入力項目の値として月部に「02」、日部に「29」がセットされている

この条件をすべて満たす場合には、以下の変換エラーが発生します。

エラー例

■エラーログ
Error : [No.2202] rec::item (詳細位置 0:0:1)
  項目 item の日時への変換に失敗しました。
    レコード番号:1 0x30323239
Error : [No.2221] ::
  読込み単位内での不正を検出し、停止します。(入力レコード 1 - 1)
    レコード番号:1

2)ConvDate関数を使った日付データへの変換処理でエラーが発生する

発生条件

  • 出力側の任意の位置で、ConvDate関数を利用して文字列データを日付データに変換している
  • 変換対象の文字列データは、月日相当の値(日付書式として「MMDD」、「MM/DD」、「DDMM」など、年部を持たない日付データ)だけを持っている
    記述例:ConvDate(:{in}.{item},"MMDD")
  • 変換実行時、:{in}.{item}の値として「0229」がセットされている

この条件をすべて満たす場合には、以下の変換エラーが発生します。

エラー例

■エラーログ
Error : [No.2215] out::item (詳細位置 0:0:1)
  日付型へ変換できない引数 0229 を ConvDate 関数で検出しました。(日付書式 MMDD)
    レコード番号:1
Error : [No.2221] ::
  読込み単位内での不正を検出し、停止します。(入力レコード 1 - 1)
    レコード番号:1

2.原因

AnyTranでは日付の有効範囲を「西暦1年1月1日~西暦9999年12月31日」と定義しています。この範囲に収まらない日付は無効日付として扱います。
AnyTranバージョン5.11.0以前を同梱するACMS Lite Neoバージョン1.3.0以前では、日付の初期値を年「0」、月「1」、日「1」としていました。例えば「MMDD」書式の入力データを「YYYYMMDD」書式で出力する場合には、「YYYY」部に「0000」を補完して出力していましたが、「0000」では無効日付(西暦0年は存在しない)を出力していることになり、またこの動作に起因して日付演算で意図しない結果となるケースがあったため、AnyTranバージョン5.12.0で不具合として改修しました。
AnyTranバージョン5.12.0以降を同梱するACMS Lite Neoバージョン1.4.1では、日付の初期値を年「1」、月「1」、日「1」としました。

AnyTranバージョン5.12.0のリリースノートでのご案内は以下です。

入力項目が空値の場合に、出力データが作成されない問題 - Tchar関数
Tchar関数を利用した変換において、出力データが正しく作成されない、または
変換が異常終了する問題に対応しました。
[発生条件]
 ・Tchar関数の第1引数(日付)で、空値または無効日付に対する演算をしている
  [ANY:324]

バージョン1.3.0以前では年の初期値として「0」を付加していたため、「MMDD」書式(年の指定がない)の入力データが「0229」となっていた場合、「00000229」として処理を行っていました。結果として、常に閏年と判定し正しい日付と判定されていました。
バージョン1.4.1以降では年の初期値として「1」を付加しているため、「MMDD」書式(年の指定が無い)の入力データが「0229」となっていた場合、「00010229」として処理を行います。そのため不正な日付と判定されエラーが発生します。


3.対処方法

本現象が発生する場合には、以下のいずれかの方法で対処をお願いします。

1)変換定義を修正頂く方法

以下の方法で定義してください。

年を持たない日付データの変換処理でエラーが発生する場合

  1. 入力フォーマットに定義された該当の日付項目(「MMDD」書式(年の指定がない)を、「日付」タイプから「混在文字列」タイプに変更する。
  2. この項目を利用している出力側の位置で、ConvDate関数を使用して妥当な「年」を付加して日付データに変換する。

例1:

ConvDate(Dchar(SysDate(), "YYYY")+:{REC}.{ITEM},"YYYYMMDD")
=> :{REC}.{ITEM}が「0229」の場合、「20160229」となる。


Dchar(SysDate(), "YYYY")は、現在年を取得しています。(2016年)
最終的な出力値は、その項目で設定している日付書式で出力されます。

例2:

ConvDate(“2016”+:{REC}.{ITEM},"YYYYMMDD")


年に固定値を記載する方法でも構いません。

ConvDate関数を使った日付データに変換処理でエラーが発生する場合

  1. 変換対象の文字列データに妥当な「年」を付加して日付データに変換する(変換方法は、上記の例1、例2を参照してください)

2)パッチを適用頂く方法

「MMDD」書式(年の指定がない)のデータを解釈する場合に、年の初期値に変換実行時のシステム年を補完して処理を行うパッチをご提供いたします。 このパッチを適用することで、年の初期値が以下のように変わります。

  • 適用前:「0001」
  • 適用後:「システム年」(現時点であれば「2016」)

月日しか持たない日付データは、変換実行時点の年と判断してよい場合は、本パッチを適用していただくことで、変換定義を修正することなく期待する結果となります。
またプロパティファイルにて、補完する年に任意の値を指定することも可能です。

パッチのリリース日および入手方法に関しましては、後述の「対応パッチの提供およびリリース時期」をご参照ください。
尚、パッチの適用方法に関しましては、同梱されるリリースノートをご覧ください。


4.問題が発生する製品、バージョン

ACMS Lite Neo  バージョン1.4.1以降
※ ACMS Lite NeoのAnyアプリをご利用でない場合には、該当しません。


5.対応パッチの提供およびリリース時期

パッチは、弊社ダウンロードサイトよりご提供いたします。

  • ACMS Lite Neo同梱版AnyTranのバージョンとACMS Lite Neoのバージョンとの関連は、以下の通りです。ACMS Lite Neo同梱版AnyTranのパッチのリリースは「2016年02月19日(金)13:00」よりダウンロードが可能です
ACMS
Lite Neo
AnyTran
バージョン
パッチダウンロードURL
1.4.1 5.12 http://www.dal.co.jp/download/acmsliteneo/Patch_Any_Tran.zip
※インストール手順は、zipファイル内の「patch_install_AnyTran.pdf」をご覧ください。
1.5.0
1.6.0
1.7.0

6.検出ツールのご案内

お客様が作成されたAnyTran変換定義(.any)が、本お知らせの事象に該当するかを事前に検出するツールについてのご案内です。

つきましては、本ツールをご利用いただき、対応の有無をご確認ください。ツールの実行でファイル名が出力された場合は、定義内容をご確認の上、変換定義を変更いただくか、パッチの適用をお願いいたします。ツールの使用方法については、下記をご覧ください

ツールのご利用にあたって

当ツールは、簡易的に変換エラーとなる可能性のある変換定義ファイルを検出いたします。
このため、検出された変換定義ファイルの全てが変換エラーとなるわけではございません。
検出された場合には、対象の変換定義ファイルを開いて頂き、文字列検索機能にて以下の条件で検索頂き、該当箇所をご確認のうえ上述の「現象」の「発生条件」に該当しているかのご確認をお願いいたします。
 ・検索文字列:「MM」または「DD」
 ・検索属性:「すべて」
「発生条件」に該当していない場合は、対処の必要はございません。

ツールの入手方法

ツールは、以下のURLよりのダウンロードしてください。
http://www.dal.co.jp/download/anytran/AnyCheck/AnyCheck.zi_

  1. ダウンロードしたファイルをAnyCheck.zipにリネームしてください。
  2. ダウンロードしたファイルを展開するとUNIXとWindowsフォルダの2つがありますのでWindowsフォルダを使用してください。

(使用方法)

  1. WindowsフォルダにあるAnyCheck.vbsまたはAnyCheck2.vbsを適当なディレクトリに配置します。
    ■AnyCheck.vbs
     対応の必要がある変換定義ファイルのみ出力します。
    ■AnyCheck2.vbs
     対応の必要がある変換定義ファイルは「Caution」を付加して出力します。
     対応の必要が無い変換定義ファイルは「Safety」を付加して、出力します。
  2. 検索を行いたいディレクトリを指定して、VBScriptを実行します。
    ※指定されたディレクトリ配下を再帰的に検索します。
  3. 実行例
    ・AnyCheck.vbsの場合
     >Cscript AnyCheck.vbs C:¥AnyTran¥Definitions

     C:¥AnyTran¥Definitions¥AnyMap3.any
     C:¥AnyTran¥Definitions¥AnyMap8.any
     C:¥AnyTran¥Definitions¥Sub1¥AnyMap9.any
     C:¥AnyTran¥Definitions¥Sub2¥Any
      → 年の指定がない日付書式を含む定義が出力されます(該当の定義がない場合には、何も表示されません)。

    ・AnyCheck2.vbsの場合
     >Cscript AnyCheck2.vbs C:¥AnyTran¥Definitions

     Safety : C:¥AnyTran¥Definitions¥AnyMap1.any
     Safety : C:¥AnyTran¥Definitions¥AnyMap2.any
     Caution : C:¥AnyTran¥Definitions¥AnyMap3.any
     Safety : C:¥AnyTran¥Definitions¥AnyMap4.any
     Caution : C:¥AnyTran¥Definitions¥AnyMap8.any
     Caution : C:¥AnyTran¥Definitions¥Sub1¥AnyMap9.any
     Caution : C:¥AnyTran¥Definitions¥Sub2¥AnyMap7.any

以上



【お問い合せ先】
株式会社データ・アプリケーション
営業本部
TEL. 03-5640-8544 E-Mail sales@dal.co.jp

製品一覧ページはこちら