業務システムにはいろいろなマスタがありますが、これらのマスタ管理ってキチンとできていますか?
こんにちは! 松田軽太です。
マスタというのは商品マスタとか得意先マスタとか社員マスタなどです。
業務システムにとってマスタはデータ管理する上でのルールを定めているのでとても重要なものです。
にも関わらず意外と軽視されていたりします。
ということでマスタについてTwitterで盛り上がっていました。
3桁のコードが付番されたマスタで
— 筒井.xls@Excel関数擬人化キャラを描く経理 (@Tsutsui0524) 2022年2月15日
100番代は食品の仕入れ先、200番代は医薬品の仕入れ先みたいな管理してて、他に取扱品区分みたいな項目が無くて左から1番目の数字のみで分類するようなのは何度か見ました。
それから100番代のコードが尽きて300番代を使い始めたりします。
例えば仕入先マスタのコード番号が5桁だったとします。
100番台が食品だとするとこんな感じで採番されることになります。
11001:筒井製菓
11002:松田製菓
12001:しるるんベーカリー
12002:ソリュエイ製パン
・・・とこんな感じで1桁目が食品、2桁目がお菓子やパンなどの食品の分類をグループ化しています。
この構成だと2桁目と3桁目の2つが分類を表すので、最大99なので、それ以上になると困ってしまうワケです。
コード番号にある程度のルール付けがされている方がパッと見てどんなグループの情報なのか分かりやすくはありますが想定を超えた数になると、途端にこのルールが崩れてしまい逆に混乱してしまうことになります。
あるいは数十年運用しても破綻したいようにコード番号の桁数を10桁くらいで設けておくという手もありますがあまり長すぎると作業者に嫌がられます。
それであれば、コード番号は単純に連番してしまい分類を表す項目を別に設ける方があとあと困ることがなくなります。
10001:筒井製菓 |お菓子類
10002:松田製菓 |お菓子類
10003:しるるベーカリー|パン類
10004:ソリュエイ製パン|パン類
このコードがキーなんですよね
— ソリュエイ(ソリューション営業の呟き) (@WJQnQtt3oa376i2) 2022年2月15日
キーに意味持たせるのはおススメできないです
このコードとは別に仕入先区分コードをつけるべきかと
さらに言うとその仕入先が複数の分野(食品と医薬品両方など)扱っていたら、とたんに破綻しちゃうんですよね
取引先も事業を拡大しているので、今までとは別分野の商品を取り扱う可能性もあります。
例えば富士フィルムは今では化粧品や医薬品などを取り扱っています。
このような場合、どうすればいいのでしょうか?
上記の例だと10004:ソリュエイ製パンからプリンのような生洋菓子を仕入れることになりました。しかし仕入先マスタの分類は1種類しか登録できません。
この場合は仕入先マスタの上位に支払先マスタを持たせて階層構造にするという方法があります。
たとえば
支払先マスタ 300:ソリュエイ製パン
仕入先マスタ 10004:ソリュエイ製パン|パン類 |支払先コード:300
仕入先マスタ 10009:ソリュエイ製パン|生洋菓子|支払先コード:300
といったように仕入先マスタに上位マスタのコードを持たせることで解決します。
そもそも仕入先マスタに商品分類を持たせる必要があるのか?
キーに意味は本当によくないですね
— 筒井.xls@Excel関数擬人化キャラを描く経理 (@Tsutsui0524) 2022年2月16日
データ使う時にキーに加工してっていう作業が発生します。
複数分野のことを考えると今回の例では
取引先に取扱品区分を設けるのではなく取扱品マスタの方でやるのが良さそうですね
それこそA社(食品)、A社(医薬品)みたいに仕入先を重複して登録することに…
仕入先マスタはあくまでも仕入先だけを管理して、商品の種類は商品マスタで管理する方が各マスタの役割が明確になってスッキリします。
仕入先マスタ
10001:筒井製菓
10002:松田製菓
10003:しるるベーカリー
10004:ソリュエイ製パン
商品マスタ
110:お菓子類
120:パン類
130:生洋菓子
売上分析を行うのは売上データでしょうからトランザクション側に分類を設けるのです。
売上データ
伝票番号 |仕入先CD|仕入先名 | 分類CD | 分類名
00001234|10004 |ソリュエイ製パン | 120 | パン類
00005678|10004 |ソリュエイ製パン | 130 | 生洋菓子
こうしておけばマスタの管理がスッキリしますね。
マスタの頭文字をコード番号に付与しない方が良い
また分類を先頭2文字で表現するのも避けた方が良いかと思います。
さらに商品マスタがFD~(食品)、MD~(医薬品)みたいにキーの先頭2文字で商品分類をかんr
— 筒井.xls@Excel関数擬人化キャラを描く経理 (@Tsutsui0524) 2022年2月16日
二重管理の上に取扱商品が増えて分野を2文字で区別できなくなった瞬間に破綻する運用ですねぇ
— ソリュエイ(ソリューション営業の呟き) (@WJQnQtt3oa376i2) 2022年2月16日
これらも運用した当初は良いのですが、どんどん種類が増えていって、ある時、2文字が重複した習慣に破綻します。
例えば社員マスタのコードを名字と名前の先頭一文字にしたと考えると分かりやすいでしょう。
山田 太郎と山田 太助さんは同じコードになってしまいます。
社員マスタ
山田 太郎:t-yamada
山田 太助:t-yamada
この場合、名前もローマ字にすれば回避はできます。
社員マスタ
山田 太郎:taro-yamada
山田 太助:tasuke-yamada
では山田 太郎と山田 多郎だった場合はどうでしょう?
山田 太郎:taro-yamada
山田 多助:taro-yamada
となって破綻しますよね。
では得意先先マスタのコードの先頭に頭文字使って付番するやり方はどうでしょう?
社名って変わることがありますよね。
例えばFacebookはMetaに社名が変わりました。
するとこうなります。
得意先マスタ
FB001 Facebook社
数年後…
FB001 Meta社
運用していた当時の状況でルールを作ることになるので「もし変わったら困らないか?」ということも考えてマスタを設計した方が良いのです。
マスタは業務システムでの管理の基本になる情報です。
途中で変更するとトランザクションデータとマスタデータの整合をとるのが大変なので少し先の未来までを想像してルールを考える必要があります。
しかし、先のことなど分からないというのであれば、新しいデータが発生するたびに連番で番号を割り付けてしまう方が楽ですよ。
ただしこの場合も桁数には余裕を持たせた方が良いでしょう。
この問題は皆さん悩んでらっしゃるみたいですねぇ...弊社も多聞に漏れず。過去には連番カラムかと思ったら実は文字列型で、999の続きが00Aだったってこともw
— Tanipon (@TaniponVBA) 2022年2月15日
上記のように桁が不足した段階で、今までとは全然違うコード体系になってしまいますから。
ちなみにマスタ管理の考え方をもっと知りたいのであれば、こちらの本が参考になりますよ。