Generically speaking: abstract as much as possible.
Think about invoices - you don't have one layout for every invoice, but a generic layout that combines different line items with the data from a Product and an Invoice table.
For ad-hoc reports, a simple yet effective way is to specify the parameters of a Find via globals, then either use them (or a $$variable if you need to process that input) as headers. If you have recurring boilerplate texts for different report types, store them in a table and flag them with the report type so the appropriate text appears automatically (provided you specified a report type).
Depending on your data structure, there are other ways to re-purpose layouts cor different scenarios.
Also, be aware that usually you have a form layout for data entry, but a list layout for reports. So you could habe your different tabs on one layout to specify the report parameters, and another layout for the report itself.
Thank you for clearing that up!