商いの帳場中小企業のAI導入支援|販売管理システムの独自開発から販売管理システムの独自開発 専門

コラム仕組みと技術

得意先別の単価・掛け率・特値はどう持つ?単価管理の3通りを架空の卸で作って数えた

得意先別の単価・掛け率・特値はどう持つ?(記事の表紙)

得意先別の単価管理とは、同じ商品を得意先ごとに違う値段で売るために、単価をどの表に持つかを決めることです。持ち方は、得意先×商品の単価表、掛け率×標準価格、価格ランク+特値の3通りです。商いの帳場が架空の卸(得意先300・商品2,000)で3通りを作ると、保つ行数は60,000行・5,300行・13,300行でした。標準価格を5%上げるときに直す行も、60,000行・5,000行・13,000行と大きく違います(2026年10月時点)。

全体の流れと費用は販売管理の基礎のページにまとめています。

要点

  • 得意先別の単価の持ち方は、得意先×商品の単価表、掛け率×標準価格、価格ランク+特値の3通りです。
  • 架空の卸(得意先300・商品2,000・1社200品)では、保つ行数が単価表60,000行、掛け率5,300行、ランク13,300行でした。
  • 標準価格を5%上げると、単価表は60,000行を直し、掛け率なら標準価格2,000行と特値3,000行の見直しで済みます。
  • 単価表を今の単価×1.05で一括更新すると、標準価格×掛け率で出し直した単価と57,000組中42,897組が1〜5円ずれました。
目次
  1. 得意先別の単価は、どう持つ方法がありますか?
  2. 3通りで、保つ行数はどれだけ違いますか?
  3. 標準価格を5%上げると、直す行数はどう変わりますか?
  4. 単価は、どの順番で引き当てればよいですか?
  5. 自社には、どの持ち方が合いますか?
  6. 単価表を分ける作業を、一緒に考える
  7. よくある質問

得意先別の単価は、どう持つ方法がありますか?

得意先ごとに違う単価の持ち方は、得意先×商品の単価表、掛け率×標準価格、価格ランク+特値の3通りです。特値は、特定の得意先と商品の組み合わせだけに決めた値段です。3通りの違いは、表の形と、値上げで直す場所に出ます。

持ち方 持つ表 単価の出し方 行数の式
単価表 得意先×商品の単価 表の単価をそのまま使う 得意先数×商品数×使用率
掛け率+特値 標準価格・得意先の掛け率・特値 標準価格×掛け率、例外は特値 商品数+得意先数+特値
価格ランク+特値 ランク別価格・得意先のランク・特値 得意先のランクの価格、例外は特値 ランク数×商品数+得意先数+特値

使用率は、1社の買う商品が全商品に占める割合です。架空の卸で作ると、テーブルは次の形になります。

3通りのテーブルの形。単価表は得意先・商品・単価の1表で60,000行。掛け率は標準価格2,000行・得意先300行・特値3,000行の3表。価格ランクはランク別価格10,000行・得意先300行・特値3,000行の3表単価表得意先別単価60,000行得意先・商品・単価掛け率+特値標準価格2,000行商品・標準価格得意先300行得意先・掛け率特値3,000行得意先・商品・単価・期間価格ランク+特値ランク別価格10,000行ランク・商品・単価得意先300行得意先・ランク特値3,000行得意先・商品・単価・期間商いの帳場の計算(架空データ、得意先300・商品2,000)。特値の「期間」は適用開始日と終了日
図1 得意先別単価の3通りのテーブルの形(架空の卸、計算値)。単価表は1表に60,000行、掛け率とランクは小さな表3つに分かれます。

既製のパッケージも、単価表と掛け率を併せ持つことがあります。B社のサポート情報では、得意先別の価格を持つ商品価格表が、商品台帳の単価より優先して伝票に出ます。掛率は得意先台帳に持ちますが、どちらが先に効くかはそのページに書かれていません。

3通りで、保つ行数はどれだけ違いますか?

架空の卸では、保つ行数は単価表60,000行、掛け率+特値5,300行、価格ランク+特値13,300行でした。条件は得意先300社・商品2,000品で、1社が買うのは全体の10%の200品、特値は買う組み合わせの5%です。ランクは5段階にしました。

単価表は300社×200品です。掛け率は標準価格2,000行+得意先300行+特値3,000行です。ランクは5段階×2,000品の10,000行に、得意先と特値を足します。

得意先別単価の持ち方3通りの横棒グラフ。保つ行数は単価表60,000行・掛け率+特値5,300行・価格ランク+特値13,300行、5%改定で直す行数は60,000行・5,000行・13,000行
図2 保つ行数と、標準価格を5%改定するときに直す行数(架空の卸、計算値)。掛け率+特値は、単価表の約11分の1の行で同じ単価を出せます。

テーブルは、商いの帳場のprice_master_three_ways.pyでSQLiteに作って数えました。乱数の種を20261016に固定しているので、同じ台本を動かせば同じ数字が出ます。掛け率はランクと同じ5つ(0.90〜0.70)にし、改定前の単価が3通りで60,000組すべて一致することも確かめました。

行数は得意先数と使用率に比例して増えます。得意先が3,000社なら単価表は600,000行ですが、掛け率は商品2,000行と得意先3,000行に、特値を足した数です。

標準価格を5%上げると、直す行数はどう変わりますか?

単価表は60,000行すべてを直し、掛け率は標準価格2,000行の改定と特値3,000行の見直しで済みます。ランクは、ランク別価格10,000行と特値3,000行です。特値は値上げに合わせるか据え置くかを得意先ごとに決めるので、自動では直さず「見直す行」として数えました。

単価表には、もう1つ困る点があります。手早い一括更新は、今の単価に1.05を掛けて円未満を丸める方法です。架空のデータで、この結果と「新しい標準価格×掛け率」で出し直した単価を、特値以外の57,000組で比べました。新しい標準価格は、旧価格×1.05の一の位を四捨五入しています。

比べた結果 組数
一致 14,103組
単価表のほうが高い 14,315組
単価表のほうが低い 28,582組

ずれは42,897組(75.3%)で、差は最大5円でした。1組の差は小さくても、同じ得意先の同じ商品が見積書と請求書で違えば、問い合わせになります。単価表で持つなら、改定の計算式を1つに決め、その式で全行を出し直します。改定の基準日をどう決めるかは単価改定の適用日の記事に書いています。

単価は、どの順番で引き当てればよいですか?

特値(期間内)→得意先別単価→掛け率×標準価格→標準価格の順に探し、最初に見つかった単価を使います。期間つきの特値をいちばん先に見ておけば、キャンペーンの値段が終わった日に、自動で元の単価に戻ります。

単価の引き当ての順番。特値(期間内)、得意先別単価、掛け率×標準価格、標準価格の順に探し、最初に見つかった単価を使う。架空の60,000組では特値300組、得意先別2,400組、掛け率57,300組、標準0組1番目特値(期間内)300組なければ次へ2番目得意先別単価2,400組なければ次へ3番目掛け率×標準価格57,300組なければ次へ4番目標準価格0組2026年10月16日時点で、架空の60,000組を引き当てた件数。9月30日で期間が終わった特値300組は掛け率に回る商いの帳場の計算(架空データ、乱数の種 20261016・20261017)。標準価格まで落ちるのは掛け率を決めていない得意先だけ
図3 単価の引き当ての順番と、各段に当たった組数(架空の卸、計算値)。期間が終わった特値300組は、次の段の掛け率で引き当てられました。

架空の卸の特値3,000行を、期間つきの特値600行と期間なしの得意先別単価2,400行に分けて試しました。期間つきの半分は2026年9月30日で終わる設定です。10月16日時点で60,000組を引き当てると、特値300組、得意先別2,400組、掛け率57,300組でした。期待した単価との食い違いは0件です。

引き当ての要点は、次のSQLです。

select coalesce(
  (select price from special where customer=:c and product=:p
     and kind='特値' and :d between valid_from and valid_to),
  (select price from special where customer=:c and product=:p and kind='得意先別'),
  (select round(sp.price * cu.rate) from standard_price sp, customer cu
     where sp.product=:p and cu.customer=:c and cu.rate is not null),
  (select price from standard_price where product=:p))

限界もあります。架空のデータは掛け率を5つにそろえました。実際には、0.78のような半端な掛け率や、商品分類ごとに掛け率が違う得意先もあります。そのときは掛け率の表に商品分類の列を足し、引き当ての段を1つ増やします。

自社には、どの持ち方が合いますか?

単価の大半が標準価格の何掛けかで説明できるなら、掛け率+特値が合います。得意先が数十社で、値段が交渉ごとにばらばらなら、単価表のままでも回ります。得意先を数段の等級で扱う商売なら、価格ランク+特値が向きます。

迷ったら、今の単価表を標準価格で割ってみます。得意先ごとに同じ値が多く並べば、その値が掛け率で、外れた組み合わせが特値の候補です。私は、外れが買う組み合わせの1割を超えるときは無理に掛け率へ寄せず、得意先別単価の段を厚くして併用します。

商いの帳場が販売管理を作るときは、特値→得意先別→掛け率→標準の4段を基本にします。表の形は、今の単価表から掛け率と特値を数えてから決めます。旧システムから移すときの桁数の確かめ方はデータ移行の桁数の記事にまとめました。

単価表を分ける作業を、一緒に考える

今の単価表を掛け率と特値に分けられるかは、表をお見せいただかなくても一緒に考えられます。得意先と商品のおおよその数をうかがえば十分です。何をどう頼むか決まっていなくても大丈夫です。

御社のやり方に合わせて、進め方を一緒に考えます。準備は要りません。商いの帳場の無料で相談するから、お気軽にどうぞ。

よくある質問

得意先が50社ほどでも、掛け率に変えたほうがよいですか?
急ぐ必要はありません。得意先50社が200品ずつ買う単価表は10,000行で、値上げが年1回なら一括更新で回ります。単価の大半が標準価格の何掛けかで説明できるなら、そのとき掛け率に移します。
特値に期間を持たせないと、何が困りますか?
終わったはずの特値が残り続けます。架空の60,000組では、9月30日で終わった特値300組が、期間を持たせたことで10月から掛け率の単価に戻りました。
掛け率で出した単価の円未満は、どう丸めますか?
四捨五入・切り捨てのどちらでも、決めた1つを全部の計算で使います。Pythonのround()は偶数への丸めなので、実装ではDecimalのROUND_HALF_UPを使いました。

出典

  1. B社(インストール型の販売管理)サポート情報「商品に関する台帳」(商品価格表の得意先別の価格は、伝票作成時に商品台帳の単価より優先して表示)(2026年10月16日確認)
  2. B社(インストール型の販売管理)サポート情報「見積書の作成」(掛率は得意先台帳に登録した値が表示され、変更は得意先台帳で行う)(2026年10月16日確認)
  3. 商いの帳場の計算(2026年10月16日、Windows 11・Python 3.14.2・SQLite 3.50.4、標準ライブラリだけ。架空の卸:得意先300・商品2,000・1社200品・特値5%・ランク5段階、乱数の種 20261016。台本は /sales-management-app/scripts/price_master_three_ways.py)(2026年10月16日確認)