global noAttributeChangeCallback
set noAttributeChangeCallback 0
global character_range
set character_range [GuidoMessage translate "Character atts will be defined later"]
global integer_range
set integer_range [GuidoMessage translate "Integer atts will be defined later"]
global attributeList
set attributeList [list]
set buffer [ GuidoExecServer GetAttributeValueList {} ]
if {[ GuidoGetParamBufferValue $buffer attributeNumber ] > 0} {
set attributeList [GuidoGetParamBufferValue $buffer attribute]
}
global characterAttributeList
set characterAttributeList [list]
set buffer [ GuidoExecServer GetAttributeValueList [subst {AttributeTypes(0) = "character"} ] ]
if {[ GuidoGetParamBufferValue $buffer attributeNumber ] > 0} {
set characterAttributeList [GuidoGetParamBufferValue $buffer attribute]
}
global integerAttributeList
set integerAttributeList [list]
set buffer [ GuidoExecServer GetAttributeValueList [subst {AttributeTypes(0) = "integer"} ] ]
if {[ GuidoGetParamBufferValue $buffer attributeNumber ] > 0} {
set integerAttributeList [GuidoGetParamBufferValue $buffer attribute]
}
global initialized
set initialized 0
global finished
set finished 0
global selectedRow
set selectedRow 0
global interactive
set interactive 0
global valueList
set valueList [list]
proc getValues {index} {
global valueList
return [lindex $valueList $index]
}
proc insertRow {attr_for_report} {
global valueList
set index [$attr_for_report getRowChanged]
set values [list]
for {set idx 0} {$idx < [llength [lindex $valueList 0]]} {incr idx} {
lappend values ""
}
set newValueList [list]
for {set idx 0} {$idx < [llength $valueList]} {incr idx} {
if {$idx == $index} {
lappend newValueList $values
}
lappend newValueList [lindex $valueList $idx]
}
set valueList $newValueList
}
proc addRow {} {
global valueList
set values [list]
for {set idx 0} {$idx < [llength [lindex $valueList 0]]} {incr idx} {
lappend values ""
}
lappend valueList $values
}
proc deleteRow {attr_for_report report_group_label current_category} {
global selectedRow
set index [$attr_for_report getRowChanged];
global valueList
set newValueList [list]
for {set idx 0} {$idx < [llength $valueList]} {incr idx} {
if {$idx != $index} {
lappend newValueList [lindex $valueList $idx]
}
}
set valueList $newValueList
$current_category removeAllItems
for {set i 0} {$i < [$attr_for_report getRowCount]} {incr i} {
set index [expr $i + 1]
$current_category addItem "[$report_group_label getCurrentValue $i]"
}
set idx [$attr_for_report getRowChanged];
while {$idx >= [$attr_for_report getRowCount]} {
incr idx -1
}
$attr_for_report setRowSelected $idx
set selectedRow $idx
set value [$report_group_label getCurrentValue $idx]
$current_category setCurrentValue "$value"
}
proc updateRangeField {group_attributes group_field numeric_range} {
global integer_range
global character_range
set index [$group_attributes getEditingRow]
set value [$group_field getCurrentValue $index]
if {$value != ""} {
set realAttribute 1
global characterAttributeList
for {set idx 0} {$idx < [llength $characterAttributeList]} {incr idx} {
set elem [lindex $characterAttributeList $idx]
if {$value == $elem} {
$numeric_range setCurrentValue $index $character_range
$numeric_range setInputAllowed $index false
set realAttribute 0
break
}
}
global integerAttributeList
for {set idx 0} {$idx < [llength $integerAttributeList]} {incr idx} {
set elem [lindex $integerAttributeList $idx]
if {$value == $elem} {
$numeric_range setCurrentValue $index $integer_range
$numeric_range setInputAllowed $index false
set realAttribute 0
break
}
}
if {$realAttribute == 1} {
if {[$numeric_range getCurrentValue $index] == $character_range ||
[$numeric_range getCurrentValue $index] == $integer_range} {
$numeric_range setCurrentValue $index ""
$numeric_range setInputAllowed $index true
}
}
} else {
$numeric_range setCurrentValue $index ""
}
}
proc populateGroupingComboBoxes {cols_for_category report_column group_field attr_for_report func_per_attr spec_gravity noAttributeChangeCallback form} {
if {$noAttributeChangeCallback == 1 || [$form getStatus] == "legacy preprocess apply"} {
return
}
global finished
if {$finished == 0} {
set newValues [list]
for {set i 0} {$i < [$cols_for_category getRowCount]} {incr i} {
set value [$report_column getCurrentValue $i]
lappend newValues $value
}
for {set i 0} {$i < [$group_field getItemCount]} {incr i} {
set value [$group_field getItemAt $i]
if {$value == "x" || $value == "y" || $value == "z" ||
$value == "x_model" || $value == "y_model" || $value == "z_model"} {
lappend newValues $value
}
}
global attributeList
set attributes $attributeList
set excludeList [list]
global valueList
for {set idx 0} {$idx < [llength $valueList]} {incr idx} {
set values [lindex $valueList $idx]
for {set jdx 0} {$jdx < [llength $values]} {incr jdx} {
lappend excludeList [lindex $values $jdx]
}
}
for {set idx 0} {$idx < [$attr_for_report getRowCount]} {incr idx} {
lappend excludeList [$func_per_attr getCurrentValue $idx]
}
for {set idx 0} {$idx < [$attr_for_report getRowCount]} {incr idx} {
lappend excludeList [$spec_gravity getCurrentValue $idx]
}
set combined [list]
for {set idx 0} {$idx < [llength $attributes]} {incr idx} {
set value [lindex $attributes $idx]
if {[lsearch $excludeList $value] == -1} {
lappend combined $value
}
}
for {set idx 0} {$idx < [llength $combined]} {incr idx} {
set value [lindex $combined $idx]
lappend newValues $value
}
set values [lsort $newValues]
eval [concat {$group_field} {setValues} $values]
}
}
proc arrivedAtRow {attr_for_report report_group_label current_category} {
global selectedRow
$current_category removeAllItems
for {set i 0} {$i < [$attr_for_report getRowCount]} {incr i} {
set index [expr $i + 1]
$current_category addItem "[$report_group_label getCurrentValue $i]"
}
set idx [$attr_for_report getEditingRow];
if {$idx >= 0} {
$attr_for_report setRowSelected $idx
set selectedRow $idx
set value [$report_group_label getCurrentValue $idx]
$current_category setCurrentValue "$value"
}
}
proc currentCategoryChanged {current_category Attribute attr_for_report report_group_label cols_for_category} {
global noAttributeChangeCallback
set noAttributeChangeCallback 1
global finished
if {$finished == 0} {
global selectedRow
set i 0
for {} {$i < [$attr_for_report getRowCount]} {incr i} {
if {[$report_group_label getCurrentValue $i] == [$current_category getCurrentValue]} {
$attr_for_report setRowSelected $i
set selectedRow $i
incr i
break
}
}
incr i -1
set values [getValues $i]
set idx 0
foreach value $values {
if {[$cols_for_category getRowCount] < [expr $idx + 1]} {
$cols_for_category addRows 1
}
$Attribute setCurrentValue $idx $value
incr idx
}
}
set noAttributeChangeCallback 0
}
proc addColumn {} {
global interactive
if {$interactive == 1} {
global valueList
set newValueList [list]
for {set idx 0} {$idx < [llength $valueList]} {incr idx} {
set values [lindex $valueList $idx]
lappend values ""
lappend newValueList $values
}
set valueList $newValueList
}
}
proc insertColumn {cols_for_category} {
global interactive
if {$interactive == 1} {
set index [$cols_for_category getRowChanged]
global valueList
set newValueList [list]
for {set idx 0} {$idx < [llength $valueList]} {incr idx} {
set values [lindex $valueList $idx]
set newValues [list]
for {set jdx 0} {$jdx < [llength $values]} {incr jdx} {
if {$jdx == $index} {
lappend newValues ""
}
lappend newValues [lindex $values $jdx]
}
lappend newValueList $newValues
}
set valueList $newValueList
}
}
proc deleteColumn {cols_for_category} {
global interactive
if {$interactive == 1} {
set index [$cols_for_category getRowChanged]
global valueList
set newValueList [list]
for {set idx 0} {$idx < [llength $valueList]} {incr idx} {
set values [lindex $valueList $idx]
set newValues [list]
for {set jdx 0} {$jdx < [llength $values]} {incr jdx} {
if {$jdx != $index} {
lappend newValues [lindex $values $jdx]
}
}
lappend newValueList $newValues
}
set valueList $newValueList
}
}
proc attributeChanged {attr_for_report cols_for_category Attribute noAttributeChangeCallback form} {
if {$noAttributeChangeCallback == 1 || [$form getStatus] == "legacy preprocess apply"} {
return
}
global valueList
global finished
if {$finished == 0} {
global selectedRow
set idx $selectedRow
set jdx [$cols_for_category getEditingRow]
set value [$Attribute getCurrentValue];
if {$idx >= 0 && $jdx >= 0} {
set values [lindex $valueList $idx]
set newValues [list]
for {set kdx 0} {$kdx < [llength $values]} {incr kdx} {
if {$kdx == $jdx} {
lappend newValues $value
} else {
lappend newValues [lindex $values $kdx]
}
}
set newValueList [list]
for {set kdx 0} {$kdx < [llength $valueList]} {incr kdx} {
if {$kdx == $idx} {
lappend newValueList $newValues
} else {
lappend newValueList [lindex $valueList $kdx]
}
}
set valueList $newValueList
}
}
}
proc initialize { form pivotCompatible volDecimals rpt_desc_1 categories current_category fillAllCells Format_head cullEmpty group_heading cols_for_category report_column report_by group_attributes group_field numeric_range attr_for_report func_per_attr report_group_label spec_gravity Attribute} {
global valueList
global noAttributeChangeCallback
$pivotCompatible  setCurrentValue [$form readInputField pivotCompatible]
$volDecimals      setCurrentValue [$form readInputField volDecimals]
$rpt_desc_1       setCurrentValue [$form readInputField rpt_desc_1]
$categories       setCurrentValue [$form readInputField categories]
$current_category setCurrentValue [$form readInputField current_category]
$current_category setNullAllowed false
$fillAllCells     setCurrentValue [$form readInputField fillAllCells]
$Format_head      setCurrentValue [$form readInputField Format_head]
$cullEmpty        setCurrentValue [$form readInputField cullEmpty]
$group_heading    setCurrentValue [$form readInputField group_heading]
$group_heading    setNullAllowed false
populateGroupingComboBoxes $cols_for_category $report_column $group_field $attr_for_report $func_per_attr $spec_gravity $noAttributeChangeCallback $form
set num_values "[$form numberInputFields cols_for_category]"
$cols_for_category setInitialRows $num_values 1
for {set index 0} {$index < $num_values} {incr index} {
$report_column setCurrentValue $index "[$form readInputField cols_for_category($index).report_column]"
$report_by     setCurrentValue $index "[$form readInputField cols_for_category($index).report_by]"
}
$report_column setNullAllowed false
set num_values "[$form numberInputFields group_attributes]"
$group_attributes setInitialRows $num_values 1
for {set index 0} {$index < $num_values} {incr index} {
$group_field    setCurrentValue $index "[$form readInputField group_attributes($index).group_field]"
$numeric_range  setCurrentValue $index "[$form readInputField group_attributes($index).numeric_range]"
}
set num_values "[$form numberInputFields attr_for_report]"
$attr_for_report setInitialRows $num_values 1
for {set index 0} {$index < $num_values} {incr index} {
$func_per_attr      setCurrentValue $index "[$form readInputField attr_for_report($index).func_per_attr]"
$report_group_label setCurrentValue $index "[$form readInputField attr_for_report($index).report_group_label]"
$spec_gravity       setCurrentValue $index "[$form readInputField attr_for_report($index).spec_gravity]"
}
$func_per_attr setNullAllowed false
$func_per_attr updateBrowserList
$report_group_label setNullAllowed false
$spec_gravity setNullAllowed false
set valueList [list]
for {set index 0} {$index < [$form numberInputFields attr_for_report]} {incr index} {
set newValues [list]
for {set index2 0} {$index2 < [$form numberInputFields cols_for_category]} {incr index2} {
lappend newValues [$form readInputField cols_for_category($index2).[format column_%d $index]]
}
lappend valueList $newValues
}
global interactive
set interactive 1
$attr_for_report setRowSelected 0
if {[$form numberInputFields attr_for_report] == 0} {
addRow
}
if {[$form numberInputFields cols_for_category] == 0} {
addColumn
}
$current_category removeAllItems
for {set i 0} {$i < [$attr_for_report getRowCount]} {incr i} {
set index [expr $i + 1]
$current_category addItem "[$report_group_label getCurrentValue $i]"
}
if {[$form readInputField fillAllCells] != ""} {
$current_category setCurrentValue [$form readInputField current_category]
}
currentCategoryChanged $current_category $Attribute $attr_for_report $report_group_label $cols_for_category
global initialized
set initialized 1
}
proc finish { form pivotCompatible volDecimals rpt_desc_1 categories current_category fillAllCells Format_head cullEmpty group_heading cols_for_category report_column report_by group_attributes group_field numeric_range attr_for_report func_per_attr report_group_label spec_gravity Attribute} {
global noAttributeChangeCallback
global initialized
global finished
global interactive
set interactive 0
set status [$form getStatus]
if {$initialized == 0} {
if { [string compare $status "apply"] ==  0 } {
$current_category addItem select
$current_category setCurrentValue select
initialize $form $pivotCompatible $volDecimals $rpt_desc_1 $categories $current_category $fillAllCells $Format_head $cullEmpty $group_heading $cols_for_category $report_column $report_by $group_attributes $group_field $numeric_range $attr_for_report $func_per_attr $report_group_label $spec_gravity $Attribute
set i 0
set values [getValues $i]
foreach value $values {
$Attribute setCurrentValue $i $value
incr i
}
set status "legacy preprocess apply"
}
}
set finished 1
set noAttributeChangeCallback 1
if { [string compare $status "legacy preprocess apply"] ==  0 } {
$form preprocessInit
$form writeOutputField pivotCompatible  [$pivotCompatible getCurrentValue]
$form writeOutputField volDecimals      [$volDecimals getCurrentValue]
$form writeOutputField rpt_desc_1       [$rpt_desc_1 getCurrentValue]
$form writeOutputField categories       [$categories getCurrentValue]
$form writeOutputField fillAllCells     [$fillAllCells getCurrentValue]
$form writeOutputField Format_head      [$Format_head getCurrentValue]
$form writeOutputField cullEmpty        [$cullEmpty getCurrentValue]
$form writeOutputField group_heading    [$group_heading getCurrentValue]
set count [$attr_for_report getRowCount]
for {set idx 0} {$idx < [$cols_for_category getRowCount]} {incr idx} {
$form writeOutputField cols_for_category($idx).report_column [$report_column getCurrentValue $idx]
$form writeOutputField cols_for_category($idx).report_by     [$report_by getCurrentValue $idx]
for {set jdx 0} {$jdx < $count} {incr jdx} {
set values [getValues $jdx]
$form writeOutputField "cols_for_category($idx).column_$jdx" [lindex $values $idx]
}
}
for {set idx 0} {$idx < [$group_attributes getRowCount]} {incr idx} {
if {[$group_field getCurrentValue $idx] > ""} {
$form writeOutputField group_attributes($idx).group_field       [$group_field getCurrentValue $idx]
$form writeOutputField group_attributes($idx).numeric_range     [$numeric_range getCurrentValue $idx]
}
}
for {set idx 0} {$idx < [$attr_for_report getRowCount]} {incr idx} {
$form writeOutputField attr_for_report($idx).func_per_attr      [$func_per_attr getCurrentValue $idx]
$form writeOutputField attr_for_report($idx).report_group_label [$report_group_label getCurrentValue $idx]
$form writeOutputField attr_for_report($idx).spec_gravity       [$spec_gravity getCurrentValue $idx]
}
$form finishedWritingFields
}
set interactive 1
set finished 0
set noAttributeChangeCallback 0
}
GuidoForm frm20196 {
-default_buttons
-help_id 815
-label "Block model report"
-layout BoxLayout Y_AXIS
-tip "20195_TIP_001"
GuidoScrollPane frm20196_1 {
-height 2.5
-label "Report description"
GuidoTextArea rpt_desc_1 {
-tip "20195_TIP_002"
-next_focus group_heading
}
}
GuidoFiller frm20196_2 {
-height 0.1
}
GuidoPanel v_layout {
-layout BoxLayout Y_Axis
GuidoPanel top_panel {
-layout BoxLayout X_axis
GuidoPanel top_left_panel {
-layout BoxLayout Y_axis
-label "Fraction/percent attributes for first level report group"
-border etched true
-height 13
GuidoPanel border_panel {
-layout BorderLayout
GuidoPanel left_panel {
-position East
-layout BoxLayout X_AXIS
GuidoPanel right_panel {
-layout CentreLineLayout
GuidoField group_heading {
-tip "Report heading for this level of grouping."
-display_length 15
-format none
-max_length 20
-label "First level group label"
-tip "Enter the heading to appear on the report for the first column."
}
}
}
}
GuidoScrollPane frm20196_top {
-height 10
GuidoTable attr_for_report {
-instances 1 1 50
-interactive true
GuidoBMAttributeBrowser func_per_attr {
-label "Fraction/Percentage attribute"
-attribute_types real integer calculated
-display_length 10
-max_length BM_MAX_ATT_NAME_LEN
-tip "The fraction or percentage attribute. This attribute will be the top level grouping category in this report."
}
$func_per_attr updateBrowserList
GuidoField report_group_label {
-display_length 18.2
-label "Report group label"
-tip "Label for this report group."
-translate none
}
GuidoComboBox spec_gravity {
-display_length 10
-label "Specific gravity"
-exclusive false
-tip "Specific gravity attribute, this value can also be a fixed value."
-translate none
-max_length BM_MAX_ATT_NAME_LEN
}
}
}
}
GuidoPanel col_att_panel {
-layout BoxLayout Y_AXIS
-border etched true
-label "Columns and attributes"
-height 10
GuidoPanel CadImport3 {
-layout BorderLayout
GuidoPanel CadImport3b {
-position East
-layout BoxLayout X_AXIS
GuidoPanel defaultLayerPanel {
-layout CentreLineLayout
GuidoComboBox current_category {
-tip "Select a category to define the columns and attributes for."
-display_length 10
-format none
-max_length 20
-label "Define columns and attributes for this category"
}
}
}
}
GuidoScrollPane frm20196_top {
-height 10
GuidoTable cols_for_category {
-instances 1 1 200
-interactive true
-width 50
GuidoField report_column {
-display_length 10
-format none
-label "Report column label"
-tip "Enter the heading to appear on the report for this attribute."
}
GuidoComboBox report_by {
-display_length 10
-label "Report"
-value_in "Average" "Aggregate"
-tip "20196_TIP_005"
-translate none
-exclusive true
-null false
}
GuidoBMAttributeBrowser Attribute {
-display_length 19.9
-label "Attribute"
-attribute_types real integer calculated
-tip "20190_TIP_011"
-max_length BM_MAX_ATT_NAME_LEN
-translate none
}
$Attribute updateBrowserList
}
}
}
}
GuidoFiller space {
-height 0.5
}
GuidoPanel bottom_panel {
-layout BoxLayout X_AXIS
GuidoPanel options {
-layout BoxLayout Y_AXIS
-width 50
GuidoPanel frm20196_3 {
-layout CentreLineLayout VERTICAL LEFT
GuidoCheckBox Format_head {
-default true
-selected_value Yes
-tip BM_REPORT_FORMAT_HEAD_TIP
-unselected_value No
}
GuidoLabel Format_head_label {
-label "Format headers?"
}
}
GuidoPanel frm20196_4 {
-layout CentreLineLayout VERTICAL LEFT
GuidoCheckBox cullEmpty {
-default false
-selected_value Yes
-tip BM_REPORT_FORMAT_EMPTY_TIP
-unselected_value No
}
GuidoLabel Format_head_label {
-label "Remove lines with zero volume?"
}
}
GuidoPanel reportSubTotalsP {
-layout CentreLineLayout VERTICAL LEFT
GuidoCheckBox pivotCompatible {
-default "No"
-selected_value Yes
-tip BM_REPORT_PIVOT_COMP
-unselected_value No
}
GuidoLabel frm20196_50 {
-label "Pivot compatible?"
}
}
GuidoPanel fillAllCellsP {
-layout CentreLineLayout VERTICAL LEFT
GuidoCheckBox fillAllCells {
-default "No"
-selected_value Yes
-tip BM_REPORT_FILL_ALL_CELLS_TIP
-unselected_value No
}
GuidoLabel frm20196_50 {
-label "Fill all cells for the group attribute?"
}
}
GuidoPanel frm20196_5 {
-layout BoxLayout X_AXIS
GuidoFiller frm20196_6 {
-width 0.2
}
GuidoLabel frm20196_7 {
-label "Report volume and tonnes to"
-display_length 14
}
GuidoComboBox volDecimals {
-tip BM_REPORT_FORMAT_DECIMAL_TIP
-value_in "0 decimal places" "1 decimal place" "2 decimal places" "3 decimal places"
-exclusive true
-null false
-display_length 10
-format none
-max_length 20
}
}
GuidoPanel frm20196_categories {
-layout BoxLayout X_AXIS
GuidoFiller adjust {
-width 0.2
}
GuidoButtonGroupPanel categories {
-layout BoxLayout Y_AXIS
-label "Fraction/percentage range"
GuidoRadioButton frm00252_18 {
-caption "0 to 1"
-default true
-selected_value F
}
GuidoRadioButton frm00252_19 {
-caption "0 to 100"
-selected_value P
}
-tip "20196_FRACTION_PERCENTAGE_TIP"
}
}
}
GuidoPanel  lr_panel {
-layout BoxLayout Y_AXIS
-border etched true
-label "Define 2nd and subsequent groupings for the report"
GuidoScrollPane frm20196_44 {
-height 10
GuidoTable group_attributes {
-instances 1 1 10
-interactive true
-width 50
GuidoComboBox group_field {
-display_length 22.2
-format none
-label "Grouping attributes"
-tip "20195_TIP_012"
}
GuidoField numeric_range {
-display_length 20
-format range
-label "Numeric range"
-max_length MAX_RNG_LENGTH
-tip "20195_TIP_013"
-translate none
-default ""
}
}
}
}
}
}
$frm20196 legacyProcessValues false
-action stateChanged {[finish $frm20196 $pivotCompatible $volDecimals $rpt_desc_1 $categories $current_category $fillAllCells $Format_head $cullEmpty $group_heading $cols_for_category $report_column $report_by $group_attributes $group_field $numeric_range $attr_for_report $func_per_attr $report_group_label $spec_gravity $Attribute]}
$current_category setActionCallback valueChanged {[currentCategoryChanged $current_category $Attribute $attr_for_report $report_group_label $cols_for_category]}
$report_column setActionCallback valueChanged {[populateGroupingComboBoxes $cols_for_category $report_column $group_field $attr_for_report $func_per_attr $spec_gravity $noAttributeChangeCallback $frm20196]}
$func_per_attr setActionCallback valueChanged {[populateGroupingComboBoxes $cols_for_category $report_column $group_field $attr_for_report $func_per_attr $spec_gravity $noAttributeChangeCallback $frm20196]}
$spec_gravity  setActionCallback valueChanged {[populateGroupingComboBoxes $cols_for_category $report_column $group_field $attr_for_report $func_per_attr $spec_gravity $noAttributeChangeCallback $frm20196]}
$Attribute     setActionCallback valueChanged {[populateGroupingComboBoxes $cols_for_category $report_column $group_field $attr_for_report $func_per_attr $spec_gravity $noAttributeChangeCallback $frm20196]}
$Attribute     setActionCallback valueChanged {[attributeChanged $attr_for_report $cols_for_category $Attribute $noAttributeChangeCallback $frm20196]}
$group_field   setActionCallback valueChanged {[updateRangeField $group_attributes $group_field $numeric_range]}
$func_per_attr setActionCallback focusGained {[arrivedAtRow $attr_for_report $report_group_label $current_category]}
$report_group_label setActionCallback focusGained {[arrivedAtRow $attr_for_report $report_group_label $current_category]}
$spec_gravity setActionCallback focusGained {[arrivedAtRow $attr_for_report $report_group_label $current_category]}
$attr_for_report setActionCallback rowAdded {[addRow]}
$attr_for_report setActionCallback rowInserted {[insertRow $attr_for_report]}
$attr_for_report setActionCallback rowDeleted {[deleteRow $attr_for_report $report_group_label $current_category]}
$cols_for_category setActionCallback rowAdded {[addColumn]}
$cols_for_category setActionCallback rowInserted {[insertColumn $cols_for_category]}
$cols_for_category setActionCallback rowDeleted {[deleteColumn $cols_for_category]}
-action initial {[initialize $frm20196 $pivotCompatible $volDecimals $rpt_desc_1 $categories $current_category $fillAllCells $Format_head $cullEmpty $group_heading $cols_for_category $report_column $report_by $group_attributes $group_field $numeric_range $attr_for_report $func_per_attr $report_group_label $spec_gravity $Attribute]}
}
