I think some of you are overthinking. Most customers just do not care what you charge them for parts versus labor. They know there are a lot of silly games contractors play with that and really most focus on the total price.
I would try and move whatever overhead there is in selecting, receiving, and moving parts around into direct labor. That is where it is going to end up in reality. It seems silly to me to try and hide some direct labor in the form of a markup, especially when the only one who cares about it is the contractor.
I think you need to have some markup on material to accommodate some contingencies. You might miscount how many wire nuts or screws you need.
Beyond that, figure some percentage as a standard markup, probably on a sliding scale that goes down as the total amount of material goes up. Then add another line item to your pricing form for how much profit you want to make on a particular job. It is probably worth having a lower profit expectation on customers that give you a lot of repeat business than with those who are a one time shot.
For service work, I would just have a fixed price for common items used that covers the cost of the material and some reasonable markup. The time spent chasing parts, writing up invoices, and refilling the bins ought to be direct labor though. But to simplify things, you could just charge $10 for a receptacle replacement for parts. That would cover the receptacle, cover, and wire nuts, and whatever overhead there is to getting replacements for the parts you used.