過去の桐井戸端BBS (桐ver.5)
8054 枝番号の振り方で悩んでます 桐野港 2000/10/13-20:32
桐V5で販売データ(伝票明細データ)の整理をしています。
テーブルの項目はたとえば

年月日  得意コード  商品コード 商品名 その他
20001010  1234     56789   色々

これを 得意先別 かつ 商品コード別 に整理をして その中で最近から5件のデータを残して
それ以前のデータを削除して累積テーブルの方へ移したいのです。

私なりに考えたのですが、得意先順 商品コード順 年月日順(降順)に並び替えて、
枝番を振り枝番号の5以上のデータを選択して、累積テーブルへ書き出したあと削除する。
ところが枝番(グループ内明細番号?)の振り方がわかりません。
その他に良い方法などありましたらアドバイスお願い致します。

8055 Re:枝番号の振り方で悩んでます 宮城 2000/10/13-20:44
記事番号8054へのコメント
桐野港さん、まず質問。

>私なりに考えたのですが、得意先順 商品コード順 年月日順(降順)に並び替え
>て、

ここで、得意先・商品コードで絞り込んで、先頭の年月日、たとえば、2000年10月13日(なぬ、今日は13日の金曜日だったのか?)の
データが6件以上あったとき、どうされますか?

8056 Re:枝番号の振り方で悩んでます 桐野港 2000/10/14-00:15
記事番号8055へのコメント
宮城様 早速の返事ありがとうございます。

>>私なりに考えたのですが、得意先順 商品コード順 年月日順(降順)に並び替え
>>て、
>
>ここで、得意先・商品コードで絞り込んで、先頭の年月日、たとえば、
>2000年10月13日(なぬ、今日は13日の金曜日だったのか?)のデータ
>が6件以上あったとき、どうされますか?

まず取引状況として、同一得意先に同一商品が同じ日に伝票に2回以上記載されることはありません。
多くても同一得意先に同一商品が毎日というのはあります。
よって上の条件で並び替えをしたら、年月日は同一のものが並ぶことはありません。

この整理の目的は同一得意先に同一商品を納品した明細データを最近日から過去5回残して、
それ以前のデータはこのテーブルから削除して、他のテーブル(たとえば累積テーブル)で保存したいことです。
したがいまして、整理をした直後のデータは極端な場合年に1度しか納品しない同一得意先の同一商品のデータは
過去5年間分残ることになり、反対に毎日取引のあるデータは過去5日分しか残らないということになります。
このテーブルは頻繁に利用しますが、累積テーブルは月数回程度参照する位です。

得意先   商品コード 年月日(降順) 枝番
123     456    20001010    1
123     456    20001005    2
123     456    19980505    3
                  から 7

123     567    20000905    1
123     567    19990210    2
                  から 6

234     456    20000710 以下同じ
234     456    20000510

上記のように並び替えたあと枝番号を振り5以上の枝番のデータを選択して書き出し後削除したらどうかなというのが
最初の質問の詳細です。
ところがどうやって枝番を振ったらいいのでしょうか?
また整理の目的が達成すれば他のどんな方法でもよろしいです。
なるべく処理時間の短い方法があればなをグッドよろしくお願い致します。

8058 Re:枝番号の振り方で悩んでます 悲しげ 2000/10/14-00:50
記事番号8056へのコメント
どもっ、桐野港さん
最も安直と思われる方法を書きます。
勘案する項目が3つもあると判断する計算式が複雑になってしまうので、
これらをひとつの増設項目[flag](仮称)にまとめてしまうことにします。
この3つの項目を数値系の型と見なして書いておきますが、もし文字列型なら
#文字列関数は不要です。

[flag]の項目計算式
#文字列([得意先],3)+#文字列([商品コード],3)+#文字列([年月日],8)

※#文字列([得意先],3)としたのは、例えば2桁の場合、頭に0を付加させるためです。

この[flag]項目で逆順の索引を付けてもいいような気がしないでもありませんが、
あるいは整列は既存のとおり
1.得意先(昇順)
2.商品コード(昇順)
3.年月日(降順)
でいいのかもしれません。
いずれにせよ、そのように整列させた状態で項目[枝番]では次の計算式で置換させます。
#条件選択([flag]<>#直前値([flag],""),1,1,#直前値([枝番],0)+1)

ps:
でも、どうして5品目までなんですか?
直近の購入履歴を見たい場合だとすれば、私なら少なくとも10〜20品目は欲しいと思ってしまうのだが。(^^;)
8059 Re:枝番号の振り方で悩んでます 悲しげ 2000/10/14-00:58
記事番号8058へのコメント
腑に落ちないのは

1.得意先(昇順)
2.商品コード(昇順)
3.年月日(降順)

ではなく

1.得意先(昇順)
2.年月日(降順)
3.商品コード(昇順)

従って連結項目も
#文字列([得意先],3)+#文字列([年月日],8)+#文字列([商品コード],3)

であるべきなのではないか、ってことです。
8060 グループ毎の連番号 佐田 守弘 2000/10/14-01:13
記事番号8054へのコメント
桐野港さん

目的の明細番号は、まず先に[得意コード][商品コード][年月日]の3つの項目について整列を行っておきます。
次いで、以下の計算式で置換を行えば求められます。
#グループ([得意コード],[商品コード],[年月日])

ただし、宮城さんも言われている通り、5番目以降に同じ日付のデータが並んだ場合、入力した順で選ばれます。
もし、金額順に選ぶ必要があるなら、金額も整列項目に入れておく必要があります。

●何のために...
余計なお世話になりますが、この目的は何のためなのでしょうか。
目的次第では別の方法で行った方が便利そうにも思えます。
特に、グループ別の番号を振った後、5までは元の表に残し、5より上は累積テーブルの方に移動する(コピーしてもとデータを消すので)のは、
なぜなのでしょうか。一般的な売上管理や、会計処理といったケースではちょっと考えられないのですが。

私が想像するケースとして、2つの場合を考えてみました。

@顧客、商品毎に、最近どの様な取り引き他あるのかを一覧で見たい。最新トップ5を画面表示あるいは印刷をするのが目的。
この目的であれば、言われているような処理は不用だと思います。画面表示だけであれば、
画面伝票を作るだけで目的のデータが見られます。印刷するなら、振った連番で5までを選んで印刷すればよいでしょう。

Aマスタファイルが大きくなり過ぎるので、マスタファイルは最小限に留め、古いデータは累積表の方に移したい。
もしそうだとしたら、何か本末転倒のような気がします。
何が問題かと言えば、一連の売上データを複数の表に分けてしまってよいかです。

「月次更新後のデータの取扱-尾形(10/8-17:09)No.8005」とそのコメントも参考にしてみて下さい。

佐田守弘(KS-00119)
8061 Re:枝番号の振り方で悩んでます 宮城 2000/10/14-02:34
記事番号8056へのコメント
桐野港さん、ふふふ・・・。本当に未来永劫に渡ってそんなケースは出ないんですか?

なら、よろしいが。情報処理に携わるものとしてはあなた、失格です。
どんなカスタマイズにも応える自信はありますが、要求仕様を特定できないお客さんのお相手はねえ。

ああ、プロではないから勝手なことが言える。

私なら、累積したかしないかのキーを作り、コントロールするところです。
要は、累積していないデータは累積しないと行けないんでしょ? 違います?

8080 Re:枝番号の振り方で悩んでます 桐野港 2000/10/14-23:31
記事番号8059へのコメント
悲しげ様 どうもありがとうございます。

さっそく試してみて、少し変更をしたらうまくいきました。

>[flag]の項目計算式
>#文字列([得意先],3)+#文字列([商品コード],3)+#文字列([年月日],8)

>項目[枝番]では次の計算式で置換させます。
>#条件選択([flag]<>#直前値([flag],""),1,1,#直前値([枝番],0)+1)

上記の式で実行すると、年月日にダブリのデータがないので#連番とおなじになってしまいました。
そこで、項目計算式の(年月日)の部分をはずして得意先と商品コードのみを連結して実行したら、ドンピシャ
目的が達成されました。感謝感謝です。

>腑に落ちないのは
>
>1.得意先(昇順)
>2.商品コード(昇順)
>3.年月日(降順)
>
>ではなく
>
>1.得意先(昇順)
>2.年月日(降順)
>3.商品コード(昇順)
>
>従って連結項目も
>#文字列([得意先],3)+#文字列([年月日],8)+#文字列([商品コード],3)
>
>であるべきなのではないか、ってことです。

下の整列では、私の意図する結果は得られないと思います。前のコメントで
ありました直近販売履歴5品目なら下でよいと思います。
しかし全品目別の得意先別直近5回分(5品目ではないです)ならやはり上になるのではと思います。

ありがとうございました。今後共よろしくお願い致します。

8081 Re:枝番号の振り方で悩んでます 桐野港 2000/10/14-23:51
記事番号8061へのコメント
宮城様 ご心配ありがとうございます。

>桐野港さん、ふふふ・・・。本当に未来永劫に渡ってそんなケースは出ないんですか?

詳しい説明ははぶきますが、まず今の取引形態が変わらない限りありません。
もし同じ日付で同一の商品が同じ得意先に複数回取引されその都度伝票発行され最悪同じ伝票に2行以上追加記載される状況に
なっても伝票番号と明細の枝番をもっていますので、商品明細の特定はできます。
かりに伝番が最大になりまた 1から始まっても年月日と組み合わせれば過去のデータとダブルことはないと思います。
1日で伝番が一周するほどの取引が発生すれば別ですが
(そこまで面倒見きれなーい ほんと)

>ああ、プロではないから勝手なことが言える。

私もプロではありません。零細商店の営業やってるオッチャンです。
特異な販売形態の業界で当社で使うピッタリの販売管理のソフトが昔は見つからず
(今もピッタリのはないみたい)趣味から出発してBASICから桐を使い現在当社にピッタリ
と思いつつ機嫌よく動いてくれてます。(ほとんど自己満足の領域)
だんだん桐から話しがそれていますのでこのへんで

>私なら、累積したかしないかのキーを作り、コントロールするところです。要は、累積
>していないデータは累積しないと行けないんでしょ? 違います?

ちょと私の意図するところと違うような気がするのですが、吾が頭脳ではいまいち意味が把握できておりません。
お暇があればもうチョットかみくだいて詳しくお願い致します。

ありがとうございました。
わからないことが良くありますのでこれを機会に今後共よろしくお願い致します。

8082 Re:グループ毎の連番号 桐野港 2000/10/15-00:20
記事番号8060へのコメント
佐田先生 ありがとうございます。

>●何のために...
>Aマスタファイルが大きくなり過ぎるので、マスタファイルは最小限に留め、古いデータ
>は累積表の方に移したい。
>もしそうだとしたら、何か本末転倒のような気がします。何が問題かと言えば、一連の売
>上データを複数の表に分けてしまってよいかです。

マスタファイルは最小限に留め...その通りです。過去の取引履歴の最低5回分位検索(年数に関係なくたとえ10年前のデータでも)
できれば、ほとんどの場合OKです。
それ以前のデータが必要な時のみ累積データを検索します。
実際は回数だけでなく、その他の条件も加味して累積データに転記されます。
またこのファイルは過去のデータ検索用に特化したもので、請求書発行等の会計データは別にあり、
月次更新後の一定期間たてば削除されます。

また商品コードの変更(追加商品の為の振りなおし)はいつでも可能で、なるべく関連ファイル数の少ない方が
処理がしやすい為もあり年度別による保存はしておりません。
頻繁に追加があるためプリントアウトした商品台帳は役にたたづありません。
また受注もはっきりした品番の受注はなく極端な話し(この前の商品)という抽象的な受注の多いのも事実です。
またこのソフトの商品マスターには、1万点以上登録され定番があってないような販売形態で順次増えつづけ
仕入単価.販売単価の項目は持っていますが一切データは入っておりません。
取引条件により単価は違っており結局マスターの単価の正確な管理は事実上出来ないとの結論の上で
発想しないと腑に落ちない点ばかり出てくると思います。

桐V8に載せかえる準備をしていますが、画面処理とイベントでV5の発想がなかなか抜けきれず困っております。
V5の性能で十分と思いますが、ただファイルロックしか出来ないのと、FAXのソフトと連動できない
この2点で載せかえざるを得ないようです。
V8はまだまだわからないことが多くまたアドバイスよろしくお願い致します。


戻る