So I started a thread about a year ago (Fully Nested Top Assembly BoM from EPDM (For Costing) ) about extracting an EPDM BoM and then manipulating it against a database of costs to produce a rolled up "costed" BoM. I was going down the path of using the XML stream out of the SW API but, that didn't fly for various reasons. I got distracted by other contracts over the last year and now I am back at it.
I am hoping the top EPDM minds out there can shed some light on this issue.
I have a very large nested BOM in EPDM. Several thousand parts. If I select the top level assembly and set the EPDM BOM tab settings as follows: (Latest, a named configuration, not the @ configuration. I will see a very large BOM as expected; stay with me as we go into the weeds a bit. When I export this to a CSV and parse it some (either manually or through tested macros, there are a number of sub-assemblies (a good dozen or better) that report no children. An empty sub-assembly. Odd, why would anyone do that? If I go back to EPDM and search the BoM (I like that feature) for the reported empty sub-assembly it is shown in the EPDM BoM tab as exactly that, empty. No children. So I don't believe I am messing up the structure when I parse it.
Here is where it gets odd. If I now set the original top level BoM to the @ configuration and search on the same sub-assembly EPDM now shows the child part in that assembly as a child. BUT, using the @ configuration at the top level obliterates all the configured parts used elsewhere in the BoM. Meaning the line item for a part (like a configured standard bolt) no longer shows the actual configuration used in the parent assembly, it shows the @ version or parent configuration. Meaning I no longer know the actual bolt size used in assembly which is useless for an accurate BoM.
I have played with the settings in EPDM ad nauseam with no luck. Columns, settings, etc. Additionally, the sub-assemblies items are not set in SolidWorks to "Exclude from BoM" so that that's not issue. Neither are they suppressed. Not Lightweight. Not Hidden.
What I did then was take one of the odd ball subs and create a new assembly and inserted the oddball into it. Same issue in EPDM. Does not show the child part of the sub. I have tried checking out the sub, fully regenerating, saving and checking back in. Nothing. No display states are in play, only a single configuration. No matter which configuration I use it does not report the child - yet it knows it's there (Find References shows it, @ configuration shows it, Contains tab shows it, etc.) it simply will not show in the EPDM BoM. I am running this test in various versions of EPDM 2016, 2017, and 2018.
I don't believe its a bug because given the number of sub-assemblies, I would see more of these issues than I do. I am a so close to a very slick process that I hate to believe I have been stymied once again and have to return to the extraction method mentioned in the earlier thread.
As a programming aside, proof that SQL is exceptionally fast. I can iterate over an assembly with ~2000 SW parts/assemblies in it, against nearly 90,000 costed items from an SAP dump imported back to SQL Server using plain old VBA in just 22 seconds. Doing the same in pure VBA (using Loop Until) is better than 7 minutes even using dictionaries, collections or arrays. Needless to say the client is very excited by the prospect of an accurate rolled up SW costed BoM consisting of 2000+ items in under 30 seconds. Now I just need to make it happen.
Thanks all! Hope it's something simple and easy.