#10P0形式の伝票Noが記録されなくなった→Signed Integer の制限だった
Magic10+PervasiveSQLV10(Win2016サーバー+Win8.1(64)クライアント)環境の顧客があります。
伝票NoをYYMMDD&4桁連番の#10P0形式で運用していました。
モデルに登録して、伝票Noを使用するテーブルにはモデルNoで指定して統一しています。
21年12月分の伝票は問題なく登録できていましたが、22年1月以降の伝票が登録すると
伝票Noがゼロで登録される現象が発生しました。年月日毎の最終伝票Noを管理しているファイルの伝票Noは正常な値が登録されているにも関わらずです。
更新する際に画面伝票ファイルの伝票Noを表示させてチェックしましたが正常な値が表示されていました。
原因を探ってみると、売上伝票や仕入伝票などのファイルの伝票Noの記憶形式が「Signed Integer」になっていました。
伝票Noを管理しているファイルの伝票Noの記憶形式は「Float」でした。
Signed Integer」では最大値が 2147483647 であることが解り、このため22年分は 2201010001~ になり、
最大値をオーバーするためにテーブルに書き込まれる際にゼロになっているようです。
テーブルを辞書に作成する際は特にモデルを指定すれば記憶形式を気にすることなく行っていたのですが、今後は注意しなければいけないようです。
気になるのは、売上伝票・仕入伝票などは「Signed Integer」でしたが、入出庫明細伝票では「Float」になっていました。どちらもキー項目です。
どういう基準でMagicが記憶形式を設定しているのか知りたいものです。
ご存じの方がいらしたら教えてください。
-
文字型で登録するというのは駄目でしょうか?
ちなみに、Magicの記憶形式はゲートウェイが管理していて、ブラックボックス化されていたと思います。
-
総て新しくテーブルを作成しています。その際に同じ伝票Noのモデルを使用しています。
Key項目に使用している、いないにかかわらずSigned Integerの場合とFloatの場合に分かれています。
記憶形式は特に意識していませんでしたので見過ごしていました。
後から記憶形式を変更したことはありません。
-
12年ほど前に作成したシステムなので詳細は覚えていないのですが、テーブルの形式は
伝票ヘッダー・明細・元帳・見積ヘッダー・明細・入出庫明細・入金明細・支払明細などと
形式が異なるものが多いのでコピーして作成はしていないと思います。
取りあえず、22年の伝票は00年扱いにして記憶させてしのいでいます。
伝票NoをFloat形式に変更した新しいテーブルにコンバートするプログラムを作成して
来年1月末には変換する予定です。
-
古い環境からコンバートしてきているシステムで、古いバージョンのPervasiveのデフォルトがSigned Integerになっていたということはありませんか?
-
計算を必要としない数字データは、文字型にしたほうが軽くて安全ですよ。
-
皆さん 明けましておめでとうございます。
そうですね、伝票Noは計算に使うこともないので文字型にした方が無難な気がします。
参考になりました。
皆さんありがとうございました。
サインインしてコメントを残してください。
コメント
6件のコメント