工作好きな情報系の雑記

[DigiKey]複数のBOMファイルをまとめて、うまくbulk discountを活かしつつ一括で発注をかける

DigiKeyでは、BOMファイルから必要な部品をリストアップして自動的にカートに入れてくれる機能がある。
基板によっては100種類くらいの部品を使うこともあるから、この機能はマジで便利。
一つ一つ部品を検索してカートに入れていくとか正気の沙汰じゃねぇからな。

で、こいつはさらにbulk discountの提案も同時に行ってくれる。
これがまた便利で、何も考えなくても注文が安くなるように(しかももっと部品が手に入るように)仕向けてくれる。

例えば、とある集合抵抗を20個注文しようとしたとする。しかしこの部品には25個のbulk discountがあったようで、25個注文することを勧めてくる。こちらの方が安く、しかも5個多く部品が手に入る。

ただ、この機能をフルに活用するには、注文する部品が一つのBOMファイルにまとまっている必要がある。
例えば、CRCW0603100KJNEACというチップ抵抗をそれぞれ45個、30個要求するBOMファイルA,Bがあったとし、同時に発注をかけたい場合を考える。

CRCW0603100KJNEACの料金体系

二つのBOMファイルの部品を同時に注文するためには、それぞれのファイルごとにカートに入れる作業をしないといけない。
この時、まずファイルAを処理しようとすると、この抵抗を100個で注文することを勧められる(45個だと144円だが、100個だと132円に下がるため)。
ここでは、まだBで追加するからと提案を無視しておく。
次にファイルBを処理する。特に提案は表示されず、そのまま30個カートに入る。
結果、CRCW0603100KJNEACは75個の注文になっており、これは100個注文するより高くなってしまっている(カートからはbulk discountの画面を表示できない)。

じゃあAを処理するときに提案を受け入れ、抵抗100個をカートに入れたとすると、最終的にカートには130個の注文が入ってしまう。そんなにいらない。
この状態からカート内で部品数を調整するのは困難を極める作業である(必要な部品がそもそも多いのか、それとも余分に入ってしまっているのか、すべて手で計算しなおさなければならない)。

そもそも部品の種類やBOMファイルの数が多いと、「この部品はさっき提案を受けなかったから今回は受け入れて、こっちの部品はこのBOMファイルにしかないから提案を受け入れて...」とかやってられない。

BOMファイルをマージする機能が用意されていたら良かったが、そんなものはない。
ということで、うまいことBOMファイルをマージして、bulk discountを最大限活かせるような注文用BOMファイルをPythonで生成することにした。

Python3.x系で動く。

例えば、以下のようなBOMファイルがあったとする。

で、以下のコマンドを叩くと、下のようなcsvファイルが生成される。

CSVを一つにまとめたおかげで、CRCW0603100KJNEACは75個の注文になり、BOM Managerは「100個買え」という最適な提案をしてくれるはずである。

モバイルバージョンを終了