A bit late with this. I did this very thing (VFP6) generically by copying and hacking the FRX at run time. I have all of the fields on the report, some with sub-totals and totals in group bands. Once the user selects a report, I copy and hack the copy of the report and get the list of avalable fields from the FRX and present a list to the user. The user selects all of the fields they want from the list. The program goes through the list matching the list to the fields in the FRX and marks all of the non-printing fields "Print When" with .F. Then the code processes the "Printed" fields (and Sub-total fields) from right to left moving them to the left so there aren't any big white spaces where non-printed columns used to be. To reference the fields (and Sub-total fields) I simply came up with a naming convention that I put into the comment field in the report. Some of these are DTL-FieldName, PGHEAD-FieldName, GRPHEAD-FieldName, GRPFOOT-FieldName, SUM-FieldName, etc. Using these I can move an entire column. In some cases I even pass the white space I want between columns. I have also used this to control the lengths of lines on the report. If the user selects all of the fields, I simply use the original FRX unchanged. I also incorporated some buttons to select/de-select all fields. When the report finishes, simlpy delete the temp FRX. Hope this helps in some way.
Auguy
Sylvania, Ohio