I use Google Sheets (spreadsheet). I've built, what I consider, a very comprehensive spreadsheet that utilizes scripting.
It considers all overhead, employee costs (wage/work-speed/efficiency), material costs (including stuff like ink usage), It uses averages I have observed of "sq ft/hour" for sign assembly/weeding/masking/etc, to calculate appropriate labor costs. In the end it calculates "cost" per sq inch/ft for every possible job type we offer. I've gone out of my way to TRY to cover EVERYTHING.
On the main page is a calculator with drop down selections to input all the details of a job that I want to price. Decal/sign/banner/etc. With each selection, the next box updates to show the remaining available options (2-sided/reflective/etc). Finally, input the dimensions of said job, and using the previous mentioned job cost, it will tell me how much it will cost to produce the item. It will give me a customers price based on the profit % I've specified for the job type on the master "cost/price" page I have.
I take this data with a grain of salt. I realize it shows me estimates. I don't use it for EVERY job. I use it as a guide. And it can be very insightful.
...My spreadsheet doesn't stop there. After you've priced something, there's an "add to invoice" button. Click it, price something else, repeat until done.
It spits all the info into a easy to read format that shows all the details/options I've selected from the drop-downs. I fill out the customer info. Click another button and it exports the data to a .CSV file directly into my Google-drive.
Having Google-Drive installed, this file goes directly to the billing computer. Using a 3rd party program, with about 4 clicks, this file imports directly into quickbooks as a new invoice. Invoice completely filled out & accurate, and the items are described in an automated way to ensure 100% uniformity across invoices - All in the name of removing human error.