商品売上管理表(3)

ここで、原価なり売値なりで、月の半ばで変更された時に、どこからデータを持ってきてるかで違いがでるのが、大きな問題になります。

旧システムでは、商品マスターから持ってきたので、月次の締め日現在での金額がセットされてしまいます。月半ばから、原価が変更になったとか、キャンペーンかなにかで売値が変更になった場合に、実際の数字と、締め日で集計した数字とに狂いが出ててました。

考えれば当たり前のことなのですが、新システムでは、売上テーブルにその時の原価なり売値なりがセットされていますので、売上テーブルから数字を持ってきています。確定された数字をもってきますので、これだと商品マスタの月半ばでの価格変更にも対応可能です。

新システムにならって、FileMakerで読込のためのSQLも以下のようになっています。

売上月計の集計用の場合:

SELECT
"販売テーブル"."原価区分",
"販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量",
SUM("販売テーブル"."税抜売上金額")"月計金額",
SUM("販売テーブル"."原価金額")"月計粗利"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."原価区分","販売テーブル"."商品コード"
ORDER BY "販売テーブル"."商品コード"

ちなみに、商品マスタ更新のためのファイルには、下記のSQLで原価も更新するようになっています。

SELECT
"商品マスタ"."商品コード",
"商品マスタ"."商品名1",
"商品マスタ"."商品名2",
"商品マスタ"."原価区分",
"商品マスタ"."原価単価",
"商品マスタ"."原価単価2",
"商品マスタ"."原価単価3"
FROM "商品マスタ"

現状では原価を読み込む部分は不要ですが、なんとなく別件で使うかもしれない予感がしますので、このSQLはこままにしておく予定です。

また、今回は商品の売上の数でしたが、これが営業データとなって、担当別等になってくると考え方が逆転します。詳しくは、次のテーマの営業データの時に書くと思いますが、この場合は、月半ばで担当が変更になったら、変更後の締め時点での担当もってこなくてはなりません。ということは、当然売上データではなく、マスタのデータを見ることになります。

| | コメント (0) | トラックバック (0)

商品売上管理表(2)

データを読み込むためのSQLそのももは単純なものです。
8種類のテーブルを作って、それぞれSQLでデータを読み込みます。
それをFileMakerで最終的に1つにして、集計をかけて印刷するというのが、大体の段取りです。

しかし、作ってみて気が付いたのは、毎月8種類のSQLの販売日付の数字を変更しなければならないことでした。

日にちの指定を変更するだけなので簡単かと思いきや、これが意外と根気の要る作業です。一個一個スクリプトを開いて、ODBCデータソースに接続して、狭いSQLの編集窓の中でSQLを書き換えるという、かなり手数の多い作業が続きます。絶対どっかミスしそうです。今は期の初めなので、月計も累計も同じ数字になるので間違いを見つけること出来ますが、来月以降累計のミスの発見は至難の業だと思います。それと作業として合理的じゃないというか、美しくないですよね。

参考までに、長い長いSQLを記させてもらいますが、見てるだけでもクラクラきます。

売上月計の集計用

SELECT "販売テーブル"."原価区分","販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量",
SUM("販売テーブル"."税抜売上金額")"月計金額",
SUM("販売テーブル"."原価金額")"月計粗利"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."原価区分","販売テーブル"."商品コード"
ORDER BY "販売テーブル"."商品コード"

売上累計の集計用

SELECT "販売テーブル"."原価区分","販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量",
SUM("販売テーブル"."税抜売上金額")"累計金額",
SUM("販売テーブル"."原価金額")"累計粗利"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."原価区分","販売テーブル"."商品コード"
ORDER BY "販売テーブル"."商品コード"

原価区分1の月計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量合計1",
SUM("販売テーブル"."税抜売上金額")"月計単価合計1",
SUM("販売テーブル"."原価金額")"月計原価合計1",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分2の月計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量合計2",
SUM("販売テーブル"."税抜売上金額")"月計単価合計2",
SUM("販売テーブル"."原価金額")"月計原価合計2",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='2') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分3の月計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"月計数量合計3",
SUM("販売テーブル"."税抜売上金額")"月計単価合計3",
SUM("販売テーブル"."原価金額")"月計原価合計3",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='3') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分1の累計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量合計1",
SUM("販売テーブル"."税抜売上金額")"累計単価合計1",
SUM("販売テーブル"."原価金額")"累計原価合計1",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='1') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分2の累計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量合計2",
SUM("販売テーブル"."税抜売上金額")"累計単価合計2",
SUM("販売テーブル"."原価金額")"累計原価合計2",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='2') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

原価区分3の累計集計

SELECT "販売テーブル"."商品コード",
SUM("販売テーブル"."売上数量")"累計数量合計3",
SUM("販売テーブル"."税抜売上金額")"累計単価合計3",
SUM("販売テーブル"."原価金額")"累計原価合計3",
"販売テーブル"."原価区分"
FROM "販売テーブル"
WHERE ("販売テーブル"."伝票区分"='1') AND ("販売テーブル"."原価区分"='3') AND ("販売テーブル"."販売日付">='20050916' AND "販売テーブル"."販売日付"<='20051020')
GROUP BY "販売テーブル"."商品コード","販売テーブル"."原価区分"
ORDER BY "販売テーブル"."商品コード","販売テーブル"."原価区分"

今考えてるいる方法は、中間表のようなもを作って一気に読み込んでおいて、その後必要なデータを後から加工する方法です。それだと、一つのスクリプトの日にちを変更すれば良いだけでですよね。

中間表はFileMakerで作ってしまったほうが楽に思えますが、シスアドかセキュアドでSQLをやったときに、中間表(仮想表?)を作ってどうのこうのというのがあった記憶があるので、SQLでやってみようと思ってます。もしできなければ、FileMakerで作ることにします。

| | コメント (0) | トラックバック (0)

商品売上管理表(1)

売上の上がった商品の集計を取るだけだったので、楽勝と思っていましたが、そう簡単には行かせてくれませんでした。本題に入る前に、前置きをしないとなりません。

まず、旧システムから、新システムへのデータの移行の際のこちら側のミスで、原価がわやくちゃになっていました。問屋さんへの売値や、定価などはかなりきっちりチェックしたのですが、商品原価については、部品など数が数千とありますので、チェックしきれていないままデータを移行してしまいました。その結果、部品の定価が200円ものが、2,000円の原価だったりと、とんでもないことになってました。まず、そこの数字訂正から始まったので、足掛け4ヶ月ほどかかったことになります。(今でも、若干不安な部分は残ってますが・・・)

でも、システム入れ替えの際の注意点等かなり勉強にもなりました。旧システムと新システムのデータベース構造が違いを、その辺をよく理解してから取り掛かるべきでした。

旧システムのSEの方がかなり職人肌の方で、本人は完全正規化といってましたが、おそらく第5正規化のことでしょうか?とにかく、いろんな数字が並んでるだけのようにしか見えないファイルでした。(ある意味完全に作りこんでしまったため、融通が利かなくもなっていたので、システム入れ替えの話が持ち上がったのですが)データの中身を見ても我々にはさっぱりわからない状態でした。新システムのSEの方も、かなり苦戦していたようです。

大きな違いは、商品で例えると、機種に対する色柄データの持ち方にありました。
旧システムは、機種と色柄とを別々のデータとして持っていたので、値段の設定は一機種につき一つの設定でした。
今のシステムは、機種と色柄のデータをまとめて、一つのコードで管理します。価格の設定は色柄ごと、一機種9色あれば9個の設定をしないとなりません。(ぶっちぇけ手間は増えました。でも、データ構造自体分かりやすいので、FileMakerでの加工も可能になっています。)

商品データの確認や変更をエクセルでやっていたので、データの数の違うところを行の追加や削除を行っていた際に、ズレが生じてしまったものと思われます。完全に私のミスでした。反省・・・

そんなわけで、原価データの修正をやりながら、商品売上管理表のデータを作っていくことになりました。

| | コメント (0) | トラックバック (0)