今回はファイルメーカー販売管理のID番号欠落を埋めるについてです。
ファイルメーカー販売管理の顧客IDや伝票IDは、プログラムで識別する固有数字を使用しています(テキストを使用しても問題はありません)。
<Photo data>
2018/11/08 美郷町野間より
EOS1DX EF24-105mm f4/L IS USM
1/500 f4 47mm 絞り優先AE
一般的に、ID番号はシリアル自動発番が使われますが、自動発番、つまりSerial自動とすると、伝票起票後に伝票を削除した時、ID番号が抜けてしまいます。使用していく内に次第に番号欠落が増えていくという問題があります(たいした問題ではありませんが)。
例えば、
レコード番号 伝票番号
1 1
2 2
3 4
4 5
5 8
の如く、データ5件中、伝票番号3、6、7番を削除すると、レコード番号とSerial番号が合わなくなってきます。合わなくても、捨ててしまえばそれで良いのですが、整理する方法もあります。
テストとして欠落番号を再利用してみました。
(過去に取引のあった伝票またはミス伝票を再度使用することになります。前に印刷した伝票が残っているときはおなじ番号は存在する事になりますので、この場合は事後に使用した番号との違いは日付や内容ということになります)
そうした背景は承知の上で、あえて作成すると以下の様になります。
ID欠落を探す方法は、
(1)発番済みの伝票番号の中から最大値を取得し、その値を+1とし、次のID番号にする
(2)欠落番号を順次探し穴埋めする
といったやり方でしょうか。
(1)の方法では結局埋まりません。
(2)は番号が大きくなると欠落番号を探すのに時間がかかるかもしれませんが、ここを工夫してやれば解決すると考えました。
ということで(2)のやり方で作ってみました。
最初に伝票番号をソートします。
欠落番号はレコード番号とのANDか、差分1か、またはレコード番号との不一致を探すかとなりますが、不一致を探す方法で行いました。
スクリプトサンプルは以下です。
レコード番号 伝票番号
1 1
2 2
3 4
4 5
5 8
6 3
7 6
8 7
9 9
スクリプト内の $flg はフラグです。
欠落があるとフラグを立て、最終レコードまで欠落無しで連続している時は最終レコード番号を+1としてID番号とします。
上の例では記載していませんが、以降伝票が削除された時は順次サーチ、全部補完された後は最終番号+1とすればサーチ時間は解決できると思います。
アルゴリズムの検討にしかなっていませんが、とりあえず開発Verはこのままとし、本体プログラムは元に戻しました。
以上
Kazunori Fukuma