Pensando di farlo con Aeroo:
Io farei una funzione nel parser che chiami dal documento ODS, passandogli il product_id della riga dove ti trovi.
nel documento perciò avrai il ciclo delle linee documento:
for line in o.line_ids (o qulcosa di simile)
nella riga metti:
for component in funzione_del_parser(item.product_id.id).bom_lines
qui metti la riga con i campi del componente
component.product_id.name ecc. ecc.
La funzione non fa altro che cercare tra le BOM quella relativa a quel prodotto e ritornare il "browse" di quell'id (ovviamente potendo averne più di una ci sarà un meccanismo di scelta oppure ritorna la prima...).
Qualcosa del genere...