I suspect this has been asked before, but I dont see a solution anywhere.
I need to generate accurate BOMs for assembly by others in another country. To do this I’ve been generating a csv from the PCB editor and and then manually adding part number and supplier data. This is tedious and error prone.
I’ve seen the BOM script plugin and while it looks great it seems to be tuned to people hand assembling their own boards.
What I need is a way to generate a BOM with manufacturer/part numbers and ideally alternates based on the parts we keep in stock. I’d need to be able to maintain a file with all of the details within that the parser would refer to when creating the BOM - a csv would work for me.
I feel like this problem will have been encountered before. What do other people do?
Ideally you would have a database, then the primary key of you part would be a foreign key in another table that contain vendor part numbers (this way you can add as many vendors as you like, and change their part numbers if they change). You would just collect that other tables items by foreign key, pretty standard database one to many organization. The same list would then also include your own internal id which would point to a stock availability table.
So at the end kicad only needs to supply the foreign key and quantity for the part, the database supplies the rest. Again, ideally you would ship this info into the database too, and then just query the BOM data from the database.
KiCad’s own libraries are quite generic and have no factory or vendor information. The simplest way is to create your own personal information and then add the ordering information to the library symbols. However this does not work very well for generic parts such as resistors and capacitors.
Another method is to use KiCad’s database driven library system. KiCad does not have a database on itself, but you can link to an external database. The KiCad manual has a chapter on setting up a database, and there are also several tutorials out there, including on youtube.
I am doing it using spreadsheet (I prepared it 10…15 years ago and I I don’t feel the need to change it).
At one tab I have a list of all elements I use. Having columns with symbol and footprint and then next column with description of part (really I have 2 columns as since RoHS was introduced I decided to have in the same output the info where I have RoHS declaration for each part). For some parts I have in one cell a list of accepted by me parts to be used (like 1G gates coming from several manufacturers).
In past (with Protel) I used assumption: one symbol = one part so I had 1k symbol for 1k 0603 and 1k_4 symbol for 1k 0402. When I moved to KiCad (2017) I changed my assumption to symbol+footprint = one part so I can have at schematic two resistors having 1k symbol and one is 0603 and the other 0402.
I load csv received from KiCad schematic (not PCB) into tab 2 of my spreadsheet and I have there equations concatenating symbol + footprint and finding at tab 1 the row having the same symbol+footprint and filling the rest fields with right data from first tab.
To tell you the truth I practically copy tab2 into next tab (name it with PCB name) and do everything
there. So now I have in this spreadsheet about 10 BOMs of last PCBs I have designed. Once per several years I’m tidying up and throwing away old tabs.
The bom (having equations in them) I copy and in another spreadsheet I paste it in only text mode to have bom being not dependent on first tab. After getting csv it takes minute to get the output BOM provided all elements are in first tab. Frequently on this stage I have to complement the first tab with new elements I have used in new PCB so it takes some more time.
Some time ago after such descrition I was asked to show my spreadsheet so I have done it:
But since V8 I have changed my work a little as from current BOM generated csv I don’t have to select a part of it but after opening it as text I can select the whole file using Ctrl+A. I have also checked that I can even not generate csv file but can copy data directly from BOM window (I left only needed by me columns and made them in order I want them.