SpaceDesign Custom Report Rows
SpaceDesign Custom Report Rows
By adding some ruby code to your report definition, you can perform calculations based on totals and add additional rows to the report.
Contents
Calculations
See the Default Ruby Code below for examples.
Total Values
You can set a ruby variable equal to a value on the totals row, using the name of the column. (not the description). e.g.:
total_cost = total_row["extended_cost"] # replace "extended_cost" with the name of your extended_cost column
To make sure that it is treated as a floating point value, add: .to_f (this helps if you have misspelled the column name.)
total_cost = total_cost.to_f # make sure this has a value if nil
Calculated values
You can calculate new values, based on the total values:
vat = total_cost * 0.175
Formatting values
You can use the ruby command sprintf(sformat, value) to format numbers, e.g. (to display a value with 2 decimal places)
svalue = sprintf("%.2f", vat) # format to two decimal places
There is also a command to add currency symbols and international formatting for decimal points:
svalue2 = dll_call_format_currency(svalue) # add currency formatting
Adding report rows
You add a report row by giving it a description, ( passed to start_custom_row() ), and by setting values in the columns you want to set.
The basic format for this is:
custom_row = start_custom_row("Description") custom_row["extended_cost"] = svalue add_custom_row
A similar format can be used to add divider rows:
custom_row = start_custom_row("----------") # start a new custom row with dashes in the description line custom_row["extended_cost"] = "----------" # add a divider line in extended_cost column add_custom_row
More Help
if you add trace commands to the ruby code, they will display on the ruby console when the report is generated. This can be very helpful while debugging:
trace("TOTAL COST: %s", total_cost) trace("VAT: %s", svalue2) # display on ruby console
For otther help, add a discussion to our Help Forum.
Modifying the Ruby Script
The custom cuby script is saved in your SketchUp model. If you want to make changes to it, you can save a copy on disk, edit it, and reload it into the model.
- Save or edit ruby data - after clicking this button, the location of the saved ruby data (in a .txt file), will be displayed and you can edit it in a ASCII editor.
- Load edited Ruby data - after editing the ruby script, you need to reload it and save it back into the model.
- Reset to default ruby data - This resets the ruby script saved in the SketchUp model to the default Default Ruby Code.
Errors in the ruby script
Here I have made an intentional error in the ruby script.
In the line after getting the total cost, I have calculated a salesman's commission, but misspelled commission on the next line when calculating the new_total.
#get total_cost total_cost = total_row["extended_cost"] # replace "extended_cost" with the name of your extended_cost column total_cost = total_cost.to_f # make sure this has a value if nil trace("TOTAL COST: %s", total_cost) #there is an error in the second line below commission = total_cost * 0.25 new_total = total_cost + comision # misspelled
Error messages
When running the report, I get an error message like this:
Note: that the line number is displayed in the error to help you find it and fix it.
Ruby Console
Also, if you open the Ruby Console, before starting you report, the traces (e.g. :
trace("TOTAL COST: %s", total_cost)
will be displayed and the error message will be reported on the ruby console.
Here is some of the ruby console output for this script:
ADD CUSTOM ROWS TOTAL COST: 0.0 ERROR during add_custom_rows: undefined local variable or method `comision' for #<SpaceDesign:0x95a0e70> CUSTOM ROWS:36:in `add_custom_rows' AFTER ADD CUSTOM ROWS
(The phrases ADD CUSTOM ROWS and AFTER ADD CUSTOM ROWS are displayed before and after your script is called.)
Default Ruby Code
# ruby file to generate custom report data # copyright 2011 Render Plus Systems # For use with SpaceDesign # for documentation see: # replace "extended_cost" with the name of your total cost column. # calculate new values and add to new rows. def add_custom_rows trace("ADD CUSTOM ROWS") # traces are displayed on the ruby console. #get total_cost total_cost = total_row["extended_cost"] # replace "extended_cost" with the name of your extended_cost column total_cost = total_cost.to_f # make sure this has a value if nil trace("TOTAL COST: %s", total_cost) # calculate VAT from total cost vat = total_cost * 0.175 # add a divider line in extended_cost column # custom_row is a hash array. You can add values to if for any attributes included in the report # start a new custom row # ---------- will appear in the name or description column custom_row = start_custom_row("----------") # start a new custom row custom_row["extended_cost"] = "----------" # add a divider line in extended_cost column # add the custom row to report add_custom_row # display VAT calculation custom_row = start_custom_row("VAT") # start a new custom row svalue = sprintf("%.2f", vat) # format to two decimal places svalue2 = dll_call_format_currency(svalue) # add currency formatting trace("VAT: %s", svalue2) # display on ruby console custom_row["extended_cost"] = svalue2 # this adds the currency value to the extended_cost column add_custom_row # add the custom row to report # add a divider line in extended_cost column custom_row = start_custom_row("===========") # start a new custom row custom_row["extended_cost"] = "===========" # add a divider line in extended_cost column add_custom_row # add the custom row to report # display new total cost custom_row = start_custom_row("Total Cost") # start a new custom row svalue = sprintf("%.2f", vat + total_cost) # format to two decimal places svalue2 = dll_call_format_currency(svalue) # add currency formating custom_row["extended_cost"] = svalue2 add_custom_row # add the custom row to report end#def
See also
SpaceDesign: