# Overview
Note that the following is only applicable to the Estimate module.. Filters allow you to be as simple as you like or as complex as you like with regards specifying parts and labour. For example, using filters you can cost labour for a job in exactly the same way as you do now, regardless of how rudimentary or sophisticated your current system is. Filters are created in the Part Filters window and the Labour Filters window. For a job, part filters are selected in the Components window and labour cost filters are selected in the Labour window for the job. Both types of filters operate in exactly the same way (with some minor exceptions), so we can discuss both in the same breath. In fact, you can specify parts in a Labour filter and you can specify labour in a Parts filter. The main reason why there are separate windows is:
- It may make it more simple to create and debug the separate filters,
- You may have different criteria for specifying part and specifying labour, and
- It allows you to select a filter for parts independently of the filter you select for labour (and vice versa).
# Using the Part and Labour Filters Window
The list on the left shows the Filter Categories. These categories correspond to each drop-down list in the Component window (Parts tabs) and Labour window (Filters and Rates tab). Essentially there is one for each possible component for a job. Near the top left is a list of filters you have created for the currently selected category. You can create one or more for any category, however only one filter per category can be used in any particular job (the one you select in the Components window or Labour window for the job). You can also have no filters for any particular category.
# Adding and Deleting Filters
# Add a new filter
Click this toolbar button to add a new filter to the current category. When you do so, a Filter Properties window will open, allowing you to name the new filter, and to select which Properties and Results columns you will use for this particular filter. Try and keep filter names no more than 20 characters, otherwise you may have difficulty exporting them. Property columns allow you to specify which conditions or criteria are required before specifying a certain part. As StairBiz scans through all of the components in your design, it will compare them to each row in your filter. If a component’s properties match those in your Properties columns, a hit will result, and the values you have placed in the Results columns will be specified for the job.
# Save As
Click this toolbar button to save the current filter to a different name. When you click this, a Filter Properties window will open to allow you to give the filter a new name. The other properties will be disabled, only allowing you to rename the filter. When you click Ok, a copy of the current filter will be made and saved to the new name you have specified.
# Delete a filter
Click this toolbar button to delete the current filter. On opening a job, StairBiz will check to see that all filters current at the time the job was saved are still available; see Chapter 22 : Filter check on opening job
# Show filter properties window
Click this toolbar button to modify the properties for the current filter. This will open the Filter Properties window that you used to create the filter in the first place. Use this if you wish to rename the filter or to change the columns that will be used.
# Print filter
Click this toolbar button to print the current filter. When you do, a print preview window will open. From there you can print the contents of your filter.
# Export/Import filter(s)
Allows you to import/export one or all filters to an Excel spreadsheet. This may make it easier to create/amend large filters. When you open the Excel spreadsheet, if you get a message that starts "The file you are trying to open", simply click "Yes" to continue opening it. NOTE: Do not use Export Filters as a means of backing up your defaults. Only use it to more easily add or make changes in the immediate term. StairBiz does not guarantee that an export using one version of StairBiz will be importable in a different version (although changes to the format are rare).
# Modifying Filters
# Insert a Row
Click this toolbar button to add a new row to your filter. The new row will be added to the bottom of the filter, and all Properties columns will default to {ALL}. To change the value of a Properties column, click in the cell you wish to edit, then click the button to choose a value from the pull-down list. Each list will be specific to the column you are editing, and all lists will also have the option of selecting {INSERT ALL}, {ALL} or {OTHER}. {INSERT ALL} will insert a row for each value in the list. For example, if the Properties column is Timber, and there are 6 timber types defined, selecting {INSERT ALL} and then clicking off of the cell will add 6 rows to your filter and will set each row to one of the 6 timbers. This is useful if you wish to specify a different part or criteria for each item in a list. {ALL} tells StairBiz that any value is a match or a hit for that row and column. {OTHER} tells StairBiz that this row and column can be a hit if there were no previous hits for this column in the filter (see Use of {OTHER} below).
# Duplicate currently selected rows
Click this toolbar button to make a copy of the currently selected rows. If 3 rows are selected (see Edit Mode below), 3 new rows will be added to the filter, with the same values as the rows that were selected.
# Delete a Row
Click this toolbar button to delete the current row (or rows if more than 1 are selected).
# Search Mode
Search mode allows you to place the cursor in a column and begin typing the text you are searching for in a very long filter list. For example, if you wish to search for a row containing the “Maple” timber, perform the following steps.
- Click on the Search mode button to enter Search Mode.
- Click on any cell in the Timber column.
- Begin typing the first few letters of the word “MAPLE”. This will cause the row (if any) to be located that first contains Maple.
# Fill Down
This feature only works in Edit Mode. Click this toolbar button if you wish to change the value on multiple rows in a particular column, to the same value. For example, if you have 10 contiguous rows where the Timber column is set to “Maple” and you wish to change all 10 to “Pine”, you could make 10 individual changes, or an easier way would be to change the top row to “Pine”, and then click Fill Down to copy your changes to the 9 rows below. Fill down will start in the current column and row and will copy downwards until it reaches a value that is not part of the same grouping.
# Hide Repeating Rows
This toolbar button allows you to change the display mode of the Part Filters Window. When this mode is enabled, repeating values in the same column will be hidden. Using the previous example of 10 contiguous rows where the Timber column is set to “Maple”, you would see “Maple” only once, and then 9 blanks would follow. In large complex filters, you may find this mode to be an easier way to view the window. When this mode is disabled, all repeating values are shown.
# Sort all property columns
Click this toolbar button to re-sort the current filter. All Property columns will be sorted from left to right. This will represent the same order that StairBiz uses to evaluate the filter when a job design is modified, and will also make the filter easier to read.
# Show column selector
Click this toolbar button to hide the category list and to instead show a list of available columns. These are the same columns you chose when you created the filter, using the Filter Properties window. Each item in this list has a checkbox next to it, allowing you to show or hide the column in the filter view. This is useful if you have a large complex filter, and you wish to temporarily hide all but a few columns. This setting does not affect the result of the filter calculations performed when you change the design of a job, it is only to make working in this window easier.
# Show Category List
Click this button to show or hide the category list. If the column selector is visible, then it will be hidden before the category list is shown.
# Show or hide the Search Toolbar
Click this button to display an additional toolbar that will allow you to search for a specific piece of text in all the filters across all the available categories. When this toolbar is visible, you can then type in the text you wish to search for (case insensitive) and click Find Next. Each time you click Find Next StairBiz will begin searching from the current row and column, within the current filter until it finds a match. It will then display where it finds the match. If StairBiz cannot find the text you typed in any of the available filters, StairBiz will beep once.
# Additional toolbar buttons
The following toolbar button are only sshown when you have opened the filter from within a job (by clicking the small square button adjacent to the selected filter in the Components window or Labour window..
# Show filter hits for this job
When you click this button, all rows in the filter that have a “hit” (i.e. a component from the stair has satisfied every property and has made it to the “results” side of the filter) will turn red. This is a very useful way to test filters.
# Jump to branch filter
If the selected row in the filter contains a branch filter (see below) this button opens the branch filter.
# Return to parent filter
If you have jumped to a branch filter this button closes the branch filter and returns you to the parent filter.
# Which components go to which filter:
Generally speaking, a component always goes to the filter corresponding to its category (e.g. treads go to the filter in the Treads category, etc.). The filter would first need to be selected in the Components window or Labour window for a job (and in the following discussion it is assumed that the relevant filter both exists and is selected). However, there are some special considerations:
# Newels All
Each newel goes to the filter of its own category (e.g. a top newel will go to the filter for Top Newels, etc.) However, every newel ALSO goes to the Newels All filter, and many users do all newel filtering in the Newels All category.
# All others
All other components go to their own filter, however, it is possible to redirect a component. For example, you may want landing treads to go to the treads filter, or wallrail to go to the handrail filter, etc. This can be done using branch filters – see below.
# When does a component go to a filter:
In the Filter tabs of the Components window or the Labour window of a job, if there is a filter selected for a particular category then each component (from the design) in that category will go to that filter. This is the case whether or not the style of that component is set to Blank or Part, or whatever subcategory of Blank or Part it might be. Once the component arrives at the filter, it’s up to the filter to filter out components it doesn’t want to deal with. For example, parts can be distinguished from blanks by using the IsPart property. “Part from Filter” and “Part Is” parts can be distinguished manually (for manual filters) within the filter, or automatically (for Auto Filters) by not including a filtering parameter like “Style” or “Size” in the Parts window. (If this doesn’t make sense now, sorry - come back to it after reading further.) At any rate, the important thing to remember for now is that ALL components go to the relevant filter if the filter (for that category) is selected.
# Creating and using a part filter – Balusters example:
NOTE that the following shows the long method – in many cases it may be possible to create part filters using only a single row, using a feature called Auto Filtering (see later). The following discussion assumes the following (each window can be opened from the Defaults menu) …
# The Parts window:
In the Balusters category there are eight balusters with part id’s as follows: BalColMap36, BalColMap39, BalColWO36, BalColWO39, BalHamMap36, BalHamMap39, BalHamWO36 and BalHamWO39. Whether or not you include the style or description for each part does not matter.
# Styles window:
In the Balusters category there are two balusters with Style names as follows: Colonial and Hampton. Both have the “Part From Filter” button ticked.
# Timbers window:
In the timbers list in this window there are two timbers as follows: Maple and White Oak.
# The Parts Filters window:
Let’s create the following filter to specify baluster parts. NOTE: We are not suggesting that the following filter is a template for your balusters filter – there is a far easier way, called “Auto Filters” (see below).
- Open the Parts Filters window from the Defaults menu.
- Select the Balusters category.
- Click the Add a New Filter button.
- Change the Filter Name to “My Bal Filter” (or anything you like). Try and keep filter name to no more than 20 characters, otherwise you may have difficulty exporting it.
- Select the Style, Timber and Length property items on the left, and select the Part and Alert result items on the right. (For a full discussion on properties and results, see Filters – Properties and Results.)
- Click OK.
- Click the Insert a Row button to create the first row of the filter. You will see the Property columns on the left. The Result columns are on the right (normally shaded in light orange, although below they are light blue – sorry).
- Select Colonial in the Style column, Maple in the Timber column, type “1, 36” (assuming you’re working in inches, otherwise adjust accordingly) in the Length column, and select BalColMap36 in the Part column. At this stage we only have one row in our filter, as follows: Lets’ see how this very simple filter works so far.
- Start a new job, and select this filter in the “Balustrade Filters” tab of the Components window.
- Selected Colonial balusters in the Balustrade tab of the same window and set the timber to Maple.
- Create a design which contains some balusters.
- Open the Materials window of the job, click the “Parts From Filter” option, and presto ...
In the above, Style and Description come from the corresponding fields in the Parts window for this baluster (if you didn’t include a style or description then they won’t show up here). These also show up in - Let’s finish creating the filter. Select the first (only) row (or click anywhere in this row), and click the Duplicate button. Initially there will be nothing in the first 3 columns, because StairBiz assumes that if a cell has the same content as the cell above, it’s best not to show it for the sake of clarity (you can see this content if you un-select the Hide Repeating Rows button, but why bother?). Note that only Property columns have this behaviour (not the Result columns). Type “36, 39” in the Length cell of the new row, then select BalColMap39 for the Part cell.
- Unselect the Enable Edit Mode button (to switch off the editing mode so that we can select multiple rows). Select the first two rows by holding down the Control key while you click in the rows. Then click the Duplicate button. Reselect Edit mode. Select White Oak as the timber for the third row, and select the appropriate parts in the Parts column for both new lines.
- Click the Insert button, select {Other} for timber, {All} for Length, and type the message into the Alert column.
- Unselect the Enable Edit Mode button, select all five rows by holding down the Shift key which you click in the first and last row. Then click the Duplicate button. Reselect Edit mode. Adjust these new rows as follows:
- Now finish off by adding the final two lines, as follows.
# How this part filter works
Each baluster will come to this filter (if the filter is selected in the Components window for the job). The baluster brings with it the properties (information about itself) corresponding to the Property columns you have selected for your filter (in this case Style, Timber and Length). The baluster then works its way down the rows. For example, if the baluster is a Hampton style of White Oak timber and is 38” long, it will get a “hit” on the ninth row (a hit means the baluster’s properties have matched the properties you have specified for that row and has arrived at the Result side of the list). The filter will specify the BalHamWO39 baluster (which will be added to the Bill Of Materials). If the baluster is a Colonial style of Pine timber, it will get a hit on the fifth row, where no part if specified, but an alert is specified which will show up in the Alerts window for the job (and indicate that alerts are current in the Alerts Current field of the Job Directory). If the baluster is a Victorian style of any timber, it will get a hit on the second last row, where an alert is specified. This is because an {Other} property always gets a hit for the column if something other than {All} has not been, or will not be, hit for that column. If any baluster is longer than 39” it will get a hit on the last row, regardless of whether or not it has previously had a hit on any other row – we have {All} for Style and {All} for timber so the only test is in the Length column.
# Creating and using a labour filter
The logic of labour filters is similar to the part filters, except that you don’t have to deal with the Parts window. Simply decide (in advance):
- What categories do I want to price (stair, strings, treads etc.)
- What do I need to know about the stair or components to price them the way I want (filter properties)
- What cost method will I use for each item (‘Time’ or ‘Contract’)
- What cost will I give to each activity (in minutes or dollars) Then get the filters to do that.
For example, the following is a simple Treads filter:
It uses five out of a possible 20 (+ MyData and Custom Tag fields) properties – i.e. the columns to the left of the yellow area. The first three rows price the basic tread. Only the TimberClass is relevant (so all other properties are set to {ALL}. It is assumed in this case that you have assigned each timber (in the Timbers window) with one of the three listed timber classes (this simply groups timbers, and saves you having to list every timber) The forth row prices over-length treads (anything between 1000mm and 5000mm) as an EXTRA charge (see note below) The next two rows price sawtooth ends as an extra. The next two rows price sidenoses as an extra. The last row prices irregular-shaped treads (curves and angles) as an extra.
# Permutations
The big trick in creating simple, easy to read and maintain labour filters is to avoid permutations. Permutations are required where you don’t show variations as an EXTRA. For example: The following filter is the same as above, but only filtering for TimberClass and Length. It shows over-length as an EXTRA. It has four rows.
The following filter is the same as above (i.e. the result is exactly the same), but uses permutations. It has six rows.
If the original filter (shown earlier, with five properties) were to use permutations, it would have 25 rows (5 times 5) and would be enormously more difficult to create, interpret and maintain. If you need to use permutations, and your filter has many properties, the best way to create an easy to read and maintain filter is to use Branch Filters (see elsewhere) so that you can break a single long filter down into multiple filters that would be easier to manage. But try and avoid permutations as much as possible. After you’ve created your filter, don’t forget to turn it on in the Labour window (Filters and Rates tab). Save the selection template if you want the new filter to be permanently selected.
# Filter Logic:
The following is a short course in filter logic. It is divided into a sequential series of short lessons. If you understand these you’ll be able to create filters.
# Properties and Results
A property is something about the component coming through the filter (e.g. Style, Timber etc.). The following examples use either one property column (Timber) or two property columns (Style and Timber). They are shown on the left with a white background. You can have up to 19 property columns in one filter. A result is what you want the filter to do if the component satisfies the criteria shown in all property columns for a particular row (e.g. specify a part, specify some labour, generate an alert, etc.). In the following examples we use just two result columns (Alert and Ref). They are shown on the right with a light orange background. The Alert column specifies an alert in the Alerts sheet. The Ref column is just a reference number to help you manage your filters (in this case were using it to show you row numbers, but that’s just for these examples). For a full explanation see; Filters – Properties and Results.
# Cell hits and Row hits
A cell hit means that a the contents of the cell in one of the property columns has matched with the corresponding property of the component. For example, if an Oak baluster comes through a filter, and “Oak” is written in a cell in the Timber column, this cell would get a cell hit if it were processed. A row hit means that EVERY property cell in that row has got a cell hit.
# The {ALL} property
{ALL} is used in a cell where you want a hit in that cell always. See examples below.
# The {OTHER} property
{OTHER} is used in a cell where you want a hit in that cell as a consequence of not getting a specific hit in any other cell of that column. A specific hit is a hit on something other than {ALL} or {OTHER}. See examples below.
# Logical row sequence
Rows are processed in their logical sequence. StairBiz sets this logical sequence automatically prior to the execution of a filter To see this logical order click the button – it may help you to understand the logic of your filter better.
# For a property cell to get a hit, the contents of that cell must match the corresponding property of the component.
In this filter, if timber is not Maple or Pine, there will be no row hits and no alert will be generated.
# {ALL} is always a cell hit, even if there have been other hits in that column.
In this filter, even if we get a hit on row 1 or row 2 we will also get a hit on row 3
# {OTHER} is a cell hit if there is no specific cell hit anywhere in that column .
In this filter if timber if not Maple or Pine, there will be a hit on row 3
# {ALL} is not considered a specific cell hit for the purposes of assessing {OTHER}.
In this filter we will always get a hit on row 1, If this timber is not Maple we will get a hit on row 3 even though we got a hit on row 1.
# {OTHER} is not considered a specific cell hit for the purposes of assessing another {OTHER}.
In this filter, if Timber is not Maple or Pine there will be a hit on rows 3 and 4.
# Execution of a filter doesn't stop when we get a row hit; StairBiz processes every row.
In this filter, even if we get a hit on row 1 or row 2 we will also get a hit on rows 3 and 4.
# Within each row, cells are processed in the order of the columns (from left to right). StairBiz aborts the row at the first instance of a cell non-hit (and moves to the next row).
In this filter, if the Style is not Colonial then neither cell in the Timber column is processed.
# {OTHER} can be in any column and will be a cell hit only if no other cell in that column can get a specific hit.
In this filter, if the Style is not Colonial then the Timber cells of rows 1, 2 and 3 will not get a hit because they won't be visited. Therefore {OTHER} is still available in the Timber column. If the Style is Hampton and the Timber is not Maple or Pine then row 6 will get a row hit.
# Putting it all together so far; In the following filter …
If the Style is Colonial there will always be a row hit on row 4. If Style is not Colonial or Hampton, there will be a cell hit in the Style column of rows 7, 8 and 9. If Style is not Colonial or Hampton and the Timber is not Maple or Pine there will be row hit on row 10. If Style is not Colonial or Hampton there will be a row hit on row 11. There will always be a row hit on row 12.
# Auto-Filters
Auto-filtering relates to parts only. You cannot auto-filter labour or line items (because these items do not exist in the Parts window). In most cases, the Parts window has sufficient information to determine which part is needed for any particular item in the stair. For example, you can set values for the Category, Style, Timber, Width, Depth and Length of each part in the Parts window (there may also be some other properties you can set, depending on the category). Using this information, a filter can send an item to the Parts window and tell the Parts window to do the appropriate filtering (i.e. come up with the appropriate part). In many cases, this can be achieved with a simple one-line filter. Note that if a property is able to be auto-filtered (i.e. it has a corresponding column in the Parts window) the column header label will be red (see examples below).
# Example 1:
The following is a simple Treads filter.
Each tread in the stair will come to this filter. When it sees {AUTO} as the PartId, the tread knows it is to be auto-filtered. The tread will go to the Parts window, taking with it any property cells set as {ALL AUTO}. The “ALL” part of {ALL AUTO} functions the same as {ALL} in normal filters for the purposes of assessing a hit in the cell. The “AUTO” part of {ALL AUTO} tells StairBiz that this property is to auto filtered. In the Parts window StairBiz will look for a part in the Treads category with a Timber the same as this tread’s timber, and a Length which is the longest length less than or equal to this tread’s length. If it finds such a part, that part will be added to the Bill of Materials. If it does not find one, it will create an alert (in the Alerts sheet) advising you that the tread was not found (and giving you the criteria it used to try and find that tread).
# Example 2:
Above is that same as Example 1, but here we’ve added the Width and Depth columns (so that these criteria are also used to filter the Parts window).
# Example 3:
The above shows how we can mix auto filtering with regular filtering. Here, if the tread is Pine with a length up to 42 inches either PartID “Tread3610Pin” or “Tread4310Pin” will be specified (regardless of their Width and Depth, as indicated by {ALL} in those fields). If the tread is Pine but longer that 42 inches, the alert will be generated by the third row. If the tread is not Pine (i.e. is “Other” than Pine), it will auto filter according to the fourth row. The “OTHER” part of {OTHER AUTO} functions the same as {OTHER} in normal filters for the purposes of assessing a hit in the cell. The “AUTO” part of {OTHER AUTO} tells StairBiz that this property is to auto filtered.
# Example 4:
The above shows how we can add extra items to an auto filter. In this case, the tread will auto filter according to the second row. The first row will spec the part “SideNoseOak821” if there is a single side nose (tread return) on an Oak tread.
# Creating auto-filters easily
The easiest way to create an auto filter is to click on the New Filter button in the toolbar, and when the Filter Properties window opens, simply click OK while holding down the Control key. This will create a one line filter containing all the possible auto filter properties available for the current category. Note that any column in a filter which is an auto-filter column which show the column header label in red. If you need to delete some of the property columns, click on the Filter Properties button on the toolbar, and un-tick the properties you wish to delete. You can amend/modify and auto filter any way you like. You can add more lines to this filter if need be.
# Special properties for some categories
In some categories there can be auto-filter properties that need special consideration. Remember that to see all the possible auto-filter properties for a particular category, create a new filter in that category, and in the Filter Properties window hold the Control key down and click OK (without having selected any properties) – StairBiz will add all auto-filtering property columns to your new filter. Note that the properties referred to in the following discussion are available in both the Filter window and in the Parts window (for the particular category). If this were not the case obviously StairBiz could not auto-filter based on that property.
# Handrail Fittings
The Length property in the filter maps to the Length column in the Parts window. It is relevant only where the fitting type is any type of Gooseneck. The Length refers to the length of the vertical, from the top of the horizontal section to the bottom of the vertical. To auto-filter based on vertical length, these fittings must have the Length fields set in the Parts window (to the maximum vertical length), and all other fittings in the Parts window must have their Length fields set to zero or empty. Note that in the Fittings window (under the Defaults menu), if you have nominated to disassemble goosenecks for the purposes of filtering, those fittings will come through broken down into their constituent parts (see Fittings window) and will not come through the filter as goosenecks. The TurnAngle property is relevant only to a part where the fitting type is “Turn”, “TurnCap” or any type of Gooseneck with a turn. In these cases the TurnAngle refers to the angle of the turn (e.g. “90” for a quarter turn, “135” for a 45 degree landing, and a U-Turn to deemed to be “180”),. To auto-filter based on TurnAngle, these fittings must have the Turn/Plow fields set in the Parts window, and all other fittings in the Parts window must have their Turn/Plow fields set to zero or empty.
# Newels
The Flat property maps to the Flat column in the Parts window. It applies only to post-to-post turned newels and is the length of the upper flat of the newel (otherwise is zero). The TurnLth property maps to the Turn/Plow column in the Parts window. It applies only to turned newels and is the distance from either the top of the upper flat (PTP newel) or top of the turning (OTP newel) down to the bottom of the turning. NOTE THAT YOU DIDN'T READ THAT WRONG - THE TURN LENGTH IS FROM THE TOP OF THE UPPER FLAT (not the bottom of it, which might appear more logical).
# Balusters
The Flat property maps to the Flat column in the Parts window and is the length of the baluster’s LOWER flat (zero if not turned). It is only relevant if, in the Style window for the baluster, Fixed Lower Flat is ticked (see Style window – Balusters). The TurnLth property maps to the Turn/Plow column in the Parts window and is the length of the baluster’s turning (zero if not turned). It is only relevant if, in the Style window for the baluster, Fixed Lower Flat is NOT ticked (see Style window – Balusters).
# Treads
The SideNose (tread return) property maps to the SideNose column in the Parts window. It relates to the presence or otherwise of a sidenose at either end of a tread. This allows you to auto-filter treads in a way that distinguishes tread parts purchased with a sidenose already attached.
# Handrail & Wallrail
The Radius Type property maps to the Radius Type column in the Parts window. It relates to the presence or otherwise of a 2D or 3D radius associated with the handrail or wallrail. Also see Curved in the next paragraph. The PlowWidth property maps to the Turn/Plow column in the Parts window. It applies to handrail only (not Wallrail). StairBiz determines that handrail is plowed if it has a square-top baluster associated with it AND there is a PlowDepth value in the handrail’s Style window OR there is a Plow Override value in the Setout window. If you routinely use square-top balusters without a plow then best not to auto-filter based on this property. If the baluster is set to Round Baluster, the PlowWidth and PlowDepth properties will always return zero.
# Curved
This filter property applies to Handrail, Wallrail, Balconyplate, BalconyTrim, Frets, Strings, Walltrim, Fillets, Risers, BullRisers and Skirt. It determines whether any part of the component has a radius (i.e. is curved in any way). It maps to the Curved column in the Parts window.
# How to auto-filter dimensions
With things like timber, auto-filtering is easy (for example, either the timber of the item being filtered matches the timber in the Parts window or it doesn’t). With dimensions, it’s a little more tricky (for StairBiz, not for you).
# Depth
With the exception of newels, StairBiz always looks for an exact match (i.e. the depth of the part in the Parts window must equal the depth of component being filtered). For all newel categories StairBiz looks in the Parts window for least Depth which is greater than or equal to the depth of the newel. This is useful for half newels – if an appropriate half newel does not exist in the Parts window then StairBiz would (according to the above criteria) find the full newel. For newels, to know which is the Width and which is the Depth, remember that where the width and depth are not the same the width is always the larger and the depth is always the smaller.
# Width
With the exception of treads and risers, StairBiz always looks for an exact match (i.e. the width of the part in the Parts window must equal the width of component being filtered). For treads and risers, StairBiz looks for a tread or riser in the Parts window that has the least width greater than or equal to the actual tread or riser width. This is needed because an actual tread or riser can be ripped down from the full width shown in the Parts window.
# Length
StairBiz looks for a part in the Parts window that has the least length greater than or equal to the actual component’s length. Note that it would not make sense to auto filter for length for any part in the Parts window that has a unit of measure (UOM) of “f” (feet) or “m” (metre). These parts are spec’d and costed by StairBiz according to their actual length (as per the current design), and the parts are shown in the Materials window indicating their actual length. Such parts should not have a Length value set in the Parts window, and Length should not be a criteria in the Filter. The corollary to this is that you should only auto filter for length in those categories in the Parts window that have no UOM column (in which case they are assumed to have a UOM of “e”), or where the category has a UOM column and the parts being filtered for have a UOM of “e” (each).
# Example:
So let’s imagine that you are auto-filtering treads, and the filtering includes the Timber, Width, Depth and Length properties. Let’s imagine that the tread being filtered has a timber or Oak, width of 10, a depth of 2 and a length of 36. Firstly, StairBiz will confine its search in the Parts window to Oak treads with a Depth of 2. Within those treads it will find the tread which has the least width which is greater than or equal to 10 and the least length which is greater than or equal to 36. If it cannot find a tread that matches all this criteria, it will alert you in the Alerts sheet.
# *Tag – a wild-card auto-filterable property
Up until this point the filter properties which are auto-filterable have been determined by StairBiz (based on whether the property has a corresponding column in the Parts window). There is also a property (called *Tag) available in all categories of the filters window. This property is auto-filterable (it has a corresponding column in the Parts window called Tag). The trick is that you set the value of this property, rather than StairBiz supplying the value from the design. The value can be set to any of the properties of the current category, or you can manually set a value for it based on one or more other properties. This ads a lot of flexibility to the auto-filter capacity of the filters window and is designed to eliminate manual filtering in cases where, but for the provision of one more user-determined auto-filter property, you could auto-filter. Notes: The Tag column in the Parts window holds a maximum of 9 characters. If the ResultTag is a dimension, in the Parts window be sure to enter the dimensions in the Tag column of the Parts window exactly according to your current dimension formatting (i.e. as per the Dimensions tab in the Preferences window). In other words, if you use fractions then enter the dimensions as a fraction; if decimal, then enter as decimal). The ResultTag must be set on or before any rows that use the *Tag property. When you are testing a filter by clicking the “?” toolbar button in the filter window of a job, and paste the results into Excel, the *Tag property value will probably show correctly, but may not. This is because Excel shows the properties of the component coming through the filter, and *Tag is not a property of the component – it can be reset multiple times in a single filter. The value shown in Excel is the value held at the first hit on the *Tag property.
# Example 1: Treads with Spayed Rise
Imagine that in your Parts window you have treads for use with a splayed riser, and those without. In the treads category of the Part Filters window there is a property for Splayed Rise, but it is not auto-filterable, normally leading to you have to write a manual filter for treads suitable for a splayed rise. In the Parts window you could tag the splayed riser treads in the Tag column. In this column we use the words “No” and “Yes” because these are the two possible values of the SplayedRise property of a tread.
In the Part Filters window, select the *Tag properties, and the ResultTag result in the Filter Properties window.
Here we are using all the usual auto-filter properties, plus we are using the *Tag auto-filter property. We set the ResultTag field in the same row it which it is being used. The *Tag property will contain “Yes” or “No”, depending on the value of the SplayedRise property.
# Example 2: Treads with False Nosing
Imagine that in your Parts window you have treads with a false nosing, and those without. This is a very similar example to the one above it, except that here there is no standard tread property for a false nosing, so we can create one in the Custom Tags window (Stair category) and use that (see Custom Tags window). The Parts window is the same as above, except that now the Tag represents false nosings.
In the Part Filters window, we set the ResultTag to our Custom Tag +False Nosings.
# Example 3: Handrail PartId based on length
Imagine that in your Parts window you have two PartId’s for each handrail – one for lengths under 12 feet, and one for those over 12 feet (presumably because they have a different price per foot). At the same time these rails have a UOM (unit of measure) of “f” (per foot, not per each). So we need to tag those that are over 12’, and auto-filter for this tag. It could be done as follows:
In the Part Filters window, we “hard” set the ResultTag to be either “12” (if the length is over 144 inches, or nothing if it is under. Note that in previous examples we set the ResultTag to be the same value as another property, whereas here we are manually setting it (thus we need to use the “=” sign)
Here, if the rail is over 12’, the *Tag property (used in row 2) has the value of “12”, otherwise it has no value. The # column is used to be certain that the two rows in which we set the ResultTag value (i.e. row 1 and 2) are processed before the row in which we use that value (in the *Tag property in row 3). By entering the numbers “1”, “2” and 3, we are overriding the StairBiz logical row sort.
# Note; Tags are global
NOTE: It is important to clear the tag where it’s important that the tag has no value (see row 2 in the above example). The value of a tag is global, meaning that it retains its value until reset, EVEN IF we leave the filter and come back again later, or move between filters. This can be useful where you want one filter (e.g. a branch filter) to set the value and other filters to use that value. In the above example it’s important that if the length is less than 144, the value of *Tag is nothing (and it may have been set to 12 on a previous visit to the filter).
# Auto-filters – Suggestions for each category
The following shows typical auto-filter setups for each category. These setups would probably form the basis (or the entirety) of your own situation. Note that filter property columns that are auto-filterable have a red column header label. Note that for all Property column cells shown below that contain {ALL AUTO} or {OTHER AUTO} it is assumed that you have the relevant values in the corresponding columns of the Parts window. For example, if you have {ALL AUTO} in a Style column for a filter, it is expected that you shown the styles in the Style column for that category in the Parts window (otherwise there is no way style can auto-filter correctly).
# Balconyplate
These filters assume you only have one depth for Balconyplate – if you have different depths you would need to include the Depth column in both Parts window and Filters. The following filter assumes have separate Balconyplate in your Parts window for curved and non-curved.
The following filter assumes your Parts window does not contain curved balconyplate.
# Balconytrim
Same as for Balconyplate (see above).
# Balusters
# Parts window
Here we have two Classic balusters – a pin top and a square top. For the sake of the example we’ll look at just one timber (Alder). Note that either Depth or Width is redundant if we assume that all balusters are square (which they might not be), however, including both is not a problem. LowerFlat is the length of the lower flat. TurnLth is the length of the turning. For balusters with fixed lower flats (see Style window), TurnLth is redundant. For balusters with fixed turnings, LowerFlat is redundant. However, we may want to switch between fixed flat and fixed turns, so we include both. Note that in this list (Classic P), rows 1 to 3 share a common flat (8”) and rows 3 to 6 share a common turning (28”), and row 3 belongs to both groups. This is very often the case in parts catalogues.
# Style window
Following are snippets from the Style window (balusters category).
# Classic P 1.75 baluster (pin-top)
Upper flat is disabled – there is no upper flat for a pin-top baluster. With Fixed Lower Flat ticked (for no particular reason – it has nothing to do with being pin-top), the lower flat for all balusters stay the same, and the turning changes to suit the baluster length. Because Fixed Lower Flat is ticked, Turning is redundant (however, we may tick or un-tick Fixed Lower Flat on a job-by-job basis, so we include both dimensions).
# Classic 1.75 baluster (square-top)
The upper flat is fixed under all circumstances. With Fixed Lower Flat not ticked (for no particular reason), the turning for all balusters stay the same, and the lower flat changes to suit the baluster length. Because Fixed Lower Flat is not ticked, Lower Flat is redundant (however, we may tick or un-tick Fixed Lower Flat on a job-by-job basis, so we include both dimensions). Note that in both these examples, the Lower Flat dimension is the shared flat dimension from our Parts window (rows 1 to 3) and the Turning dimension is the shared turning dimension from our Parts window (rows 3 to 6). If the reason for this has already occurred to you, you’re going great (but more about that later).
# Filters window
This is the auto filter. Note the FixedLowerFlat property. We manually filter by this property. All other properties are auto-filter properties (although TurnLth and BotFlatLth may or may not be used as such). If the baluster has a fixed lower flat (a hit on row 1 but not row 2), we filter based on BotFlatLth, and NOT by TurnLth (so TurnLth has an {ALL} setting). If the baluster has a fixed turning (a hit on row 2 but not row 1), we filter based on TurnLth, and NOT by BotFlatLth (so BotFlatLth has an {ALL} setting). NOTE: Whereas a Length property performs fuzzy logic (StairBiz will find the first baluster in the Parts window with a length equal to or greater than the length of the baluster that has come to this filter), TurnLth and BotFlatLth always search for an EXACT match in the parts window. This is not only OK, it is desirable. On the basis that we are filtering one or the other (but almost never both), there SHOULD be the appropriate TurnLth or BotFlatLth in the Parts window provided the other properties are satisfied. If there is not, fuzzy logic won’t find a part that will satisfy the situation (and we want to be notified in the Alerts window).
# Bullnose Treads
# Parts window
# Hand column:
Although not used above, the Hand column is also available and auto-filterable.
# BullName – the Tag column:
If you want to auto-filter based on the BullName property (i.e. the name or the bullnose template from which the bullnose derived, or as amended by you in the job), you can use the Tag column (see *Tag – a wild-card auto-filterable property).
# How to format bullnose names for use in the Tag column:
The tag field has a max of 9 characters. This is too short for many bullnose template names, so if the bullnose name is longer than 9 characters, go to the Design window (Bullnose pane) and suffix the template name with an abbreviation in brackets (right-click the bullnose template and select "Change Name"). For example, "Small Round (SR)". If there are brackets in the name, for the purposes of the parts and Part Filters window StairBiz ignores the name and uses what's between the brackets. In the above example, in the Parts window you would use the "SR" as if it were the bullnose name. Be sure that you do not use brackets in bullnose template names other than for these abbreviations. Being the Tags column, StairBiz doesn’t present you with a pull-down list of your bullnose names (the Tags column can be used for anything). To see the list of possibilities, create a dummy bullnose filter and include the BullName column. Create a row and click this field – a list of your bullnose names will pop. You’ll notice two things about this list: a. Where you have a bracketed abbreviation suffixed to the bullnose template name, StairBiz uses the abbreviation (not the full name), and b. Each BullName has a double (the second suffixed with “x2”). For example “SR” and “SR x2”. This is for a double-ended bullnose (where both ends have the same BullName). Although they are not included in the pull-down list, you may also manually enter names like “SR/Blunt” (where Small Round is the bullnose name on the left end of the tread and Blunt is the one on the right). Just be mindful that you have a maximum of 9 characters in total.
# What to do is you have jobs saved prior to adding abbreviations to bullnose template names:
You can create abbreviations for your bullnose templates now, and provided you don’t change the original name (i.e. provided you simply append the bracketed abbreviation) previously saved jobs will automatically update to these abbreviations when you open them. It works as follows: When you open a job with a bullnose, StairBiz checks the job’s bullnose name against your template names as shown in the Bullnose pane of the Design window (ignoring any bracketed abbreviations). If it finds a match, and that bullnose name in the template has an abbreviation, StairBiz will apply that abbreviation to the just-opened job.
# Filters window
Only include the columns you need to filter by (e.g. if Depth only comes in one size, there would be no need to include it). In this example we have used the *Tag and ResultTag columns to auto-filter based on the BullName property (i.e. the name or the bullnose template from which the bullnose derived). This is because the Parts window does not have a column for BullName. If Timber or Depth or Width or Length only come in one possibility, then there is no need to set values for that column (in the filters there is no need to filter by that column).
# Cove
Same as for Balconyplate (see above).
# Fillets
Same as for Balconyplate (see above).
# Frets
Same as for Balconyplate (see above). You may not need Width or Depth (your frets are probably one-size-fits-all).
# Handrail
In this filter the PlowWidth is the width of the baluster plow. This property of handrail coming through the filter will be zero for pin top balusters and will be zero if there are no fillets selected in the Components window or if the Plow Depth in the rail’s Style window is zero. If in your Parts window none of the rails have a plow, you can leave this column out. If in your Parts window you have different rails in a single style that have different widths and/or depths you will need to include those relevant columns in your filter. If in your Parts window you do not include bending rail then there is no need for the Curved column (unless you wish to add a row to the filter to show an Alert for such – see Balconyplate category above).
# Handrail Fittings
The FittingType column filters certain fitting types (these items do not have a corresponding part and are labour filter only, or used to spec hardware). The Length column is used to vet the length of verticals in goosenecks (from the top of the horizontal to the bottom of the vertical). If you disassemble your goosenecks you do not need this column in either the filter or the Parts window (goosenecks will never come through the filter as goosenecks). TurnAngle is the angle of a Turn or any goosenecks that have a turn (normal is 90, a 45 degree landing is a 135 turn). Note that if you only have 90 degree turns in your parts window you should still use this column to generate the automatic Alert when the 90 turn is not found. This filter assumes that Width and Depth are not relevant – if you have more than one size for a particular rail style then you will need one or both of these properties.
# Landing Treads
There are two special auto-filter properties which make landing treads easy to auto-filter. These two properties need to be set in the appropriate columns in your Parts window: Hand; This indicates the hand of the landing – “Left”, “Right”, and for a single tread landing, possibly “Both” (depending on your “Hand Property – allow ‘Both’” ~141 setting in the treads category of the Setout window). TreadType; A two digit number (usually). The first digit is the position of the tread in the unit (numbered 1, 2, 3 etc from the bottom up). The second digit is number of treads in the landing. For example, the second tread of a three tread landing would have a value of “23”. Also, the Width and Length values in the Parts window can show either: c) the width and length of the entire landing, in which case the width is in the direction of the bottom tread nosing and the length is in the direction of the riser above the landing, or d) the width and depth of each tread as shown in the Treads sheet (View menu), in which case the length is in the direction of that tread’s nosing and the width is perpendicular to the nosing up to the back-most point of the tread. Which dimensions you use depends on your “Landing tread Wth/Lth override” setting (~140) in the Treads category of the Setout window (see that window for more information). Where set to False, a typical auto-filter for landing treads would be as follows:
You would need to have the corresponding columns of the Parts window set. Note that Depth is the thickness of the landing material.
Where “Landing tread Wth/Lth override” is set to True, a typical auto-filter would be as follows (also include the Depth column if your treads are different thicknesses):
In this filter, if the Length is not relevant (row 3; tread 1/2 or 1/3), we do not auto-filter by it. If the Width is not relevant (rows 4 and 5; tread 2/2 and tread 3/3) we do not auto-filter by it. Otherwise both are relevant (tread 1/1 and 2/3) Note that TreadType is ThisTreadId and TreadCount joined together in a single number. Obviously it’s not possible to manually vet by TreadType and ALSO auto-filter by it, which is why we’ve used the ThisTreadId and TreadCount properties. (In situations where you MUST manually vet and auto-filter by the same property or properties, you would need to use a branch filter.) When auto-filtering by Width and/or Length, StairBiz will find the part from your Parts window that has the smallest Width and/or Length that at least satisfies the width and/or length properties of the tread.
# Newels All
All newels come through the Newels All filter, then each newel ALSO goes through its own category filter. The absence of a Depth column assumes that all newels in your Parts window are square. If this is not the case (e.g. half newels etc.) then include the Depth field. The FlatLength property is the length of the upper flat (in the case of pin-top newels of non-turned newels this should be zero in the Parts window). In the case of non-turned newels the TurnLth should be zero in the Parts window. The IsVoluteNwl property is used to filter out all volute newels. In this example it’s done this way because in the Parts window we have put all volute newels (and only volute newels) in the Newel Bottom category, and ALL other newels in the Newels All category. This is because some volute newels can have properties that are identical to normal newels, except that they might be round or some other minor variation that can’t be picked up by the properties we are vetting.
# Detached Base
When a newel has a detached base (set in the newel’s Style window), StairBiz generates the newel as two separate items:
- a regular newel with a FlatLength, a TurnLength, and a Length which is reduced by the amount of the base;
- a base with a Length of zero and a FlatLength equal to its actual length. Both items go into your Parts window separately, and the both items can be manually or automatically filtered in the Filters window, as follows:
# Parts window:
In the Parts window, include the upper part of the newel, but with the Length property measured only to the bottom of the turning (do not include the length of the lower pin – it is irrelevant). As separate items (Newels All category only), add the detached bases. They must have a Length = zero (this is important – it tells StairBiz that the part is a detached base) and FlatLength set to the length of the base. Style is probably irrelevant, as is TurnLength.
# Parts Filters window:
Note that the detached base part of a newel only goes through the “Newels All” filter (not through the specific newel filters). You would need two filters – a main, and a branch (named “Blocks” in the following sample). Filters can easily identify detached bases – it is any newel coming to the filter with Length = zero. We use the “#” property to override the auto-sort (so that the row where Length = {OTHER AUTO} goes after the row where Length = “0”). The first row in the following “Main” filter detects a detached base (Length = zero) and shunts it off to the “Blocks” filter. This separate filter is needed so that we don’t auto-filter based on the Style property (style would be irrelevant for detached bases, as is TurnLth). The second row in this filter only gets a hit if Length > zero (because of OTHER AUTO) and therefore only processes normal newels or the upper part of a newel with a detached base.
The “Blocks” filter would look as follows:
We use a separate branch filter for bases only because for bases we do not want to filter for Style (the Style of a base coming through the filter is the same as the style for the associated newel, just in case you have some reason to want to filter it, but in most cases bases are generic - only the timber, width and length are relevant). Note that we MUST filter for Length (even though we know StairBiz has set the length of bases to zero) because in your Parts window all detached base items have a length of zero, and StairBiz must only look in your Parts window for “newels” with a length of zero.
# Newel Bottom
Volute newels were not processed in the Newels All category, so must be processed here. See the IsVoluteNwl property in this filter, and also see the notes in Newels All (above).
# Other Categories
Coming soon
# Branch Filters
One of the “Results” of a filter is “Branch Filter”. This allows you to instruct StairBiz to branch off to an alternative filter under certain circumstances.
# Why use branch filters
There are three reasons why you might use a Branch Filter.
- Lengthy filters can become difficult to manage. Breaking a lengthy filter down into smaller sub filters helps you to manage the logic more easily. Note that the Duplicate Filter button on the tool bar is an easy way to create branch filters.
- Different situations may require different Properties. For example, let’s imagine that Birch and Mahogany only come in one thickness, whereas the others come in two different thicknesses. You could create branch filters for Birch and Mahogany that do not have a Depth column, whereas all the others do.
- You might want to send components in one category’s filter to a filter in a different category (see Cross-category branches below).
# Example of branch filters
In the above illustration (of a Treads filter, but it could be anything), if the tread is Alder, StairBiz will send the tread to the filter called “TreadsAlder”, and so on. After the TreadsAlder filter in executed, StairBiz will continue processing the above filter (in the above example we would get no further hits, but there’s nothing to say that this would always be the case). The branch filters need to be created before they can be included in the parent filter. Branch filters can be hidden from the Components window and Labour window by ticking the Hidden check-box in the Filter Properties window of the filter. Filter which are hidden show in the Branch Filter list prefixed with an underscore (for example “_TreadsAlder”). Naturally the branch filter “TreadsAlder” in the above example would not need to include a “Timber” column (because only treads of Alder would ever arrive at the TreadsAlder filter, etc.). Note that branch filters can have branch filters, and so on.
# Cross-category branches
You can send components in one category’s filter to a filter in a different category. For example, you may wish to send components coming to the BullRisers filter to the Risers filter to be processed there. To do this, enter the name of the other category, followed by a semi-colon, followed by the filter name. For example “Risers; MyRiserFilter”.
# Properties in a cross-category Branch filter
Let's say in the Strings filter you send the strings to a Treads filter. The Treads filter is then used by the string as if it were a Strings filter. In other words, if the Treads Filter checks for Timber, the Timber returned will be that of the string (not a tread). However, if this tread filter sends the string to the Parts window (i.e. Part = {Auto}), the string is sent to the Treads category of the Parts window, so need to exist there with the appropriate properties. In the Treads filter there is no point vetting for a property which does not have a exactly corresponding property in the Strings filter (the property would return nothing and the vet would fail). For example, there no point vetting for SideNoseCount in the Treads filter because a strings filter does not have that property.
# Testing branch filters
You can view the currently selected filter by clicking the square button adjacent to the selected filter in the Components window or Labour Cost window. When a filter contains a branch filter, you may wish to jump to it to see what’s happening. The following toolbar buttons (shown only when viewing the filter within a job) are useful. Jump to branch filter To jump to a branch filter, select the row that contains the branch filter you wish to view, and click this button. The current filter will close and the branch filter will open Return to parent filter This button closes the branch filter and returns you to the parent filter.
# Line items:
A line item is a non-part item you want StairBiz to specify in the Materials list. It is similar to a part but differs in that the item does not need to be listed in the Parts window. For example, you could specify a tread/rise/string combination as a line item (useful if you price stairs on a per-tread basis, which includes the tread, riser and one tread’s worth of string). Such a line item could (but doesn’t have to) include both materials and labour all represented in a single item. In the Materials list, the PartId column would contain any text you entered into a Caption field in the same row of the filter. LineItem1 would normally (but not necessarily) be the Buy price of this line item. LineItem2 would normally (but not necessarily) be the sell price. You can toggle between the two prices (i.e. tell StairBiz which one to use) in the Materials window of a job.
Don't use a LineItem row to spec anything other than a LineItem (i.e. don't also try and spec a Part on that same row).
# Result Type in Filter Properties window:
In the Filter Properties window, there is a setting for Result Type (Stair or Balustrade). When you use the Split Quote feature (split into stair and balustrade separately - see Process window), StairBiz needs to know which components are stair and which are balustrade. In many cases this is obvious (e.g. treads, strings etc.). In some cases it is not obvious. For the purposes of the Cutting List view window, such non-obvious cases are determined by the Is This Balustrade settings in the Miscellaneous Defaults window. For the purposes of the Bill of Materials and Materials Cost view windows, the Is This Balustrade settings apply only for components that are not parts from a filter. For parts from a filter, the Result Type in the Filter Properties window is used. For Job, Stair and Unit categories of the filter, Result Type still applies. In the case of a Split Quote (see Process window), if you want to generate items for either Stair or Balustrade or both, use the SplitQuote property to re-direct (using Branch Filters) to two separate filters; one with Result Type set to 'Stair' and the other set to 'Balustrade'.
# Unit of Measure:
The default UOM for line items and labour items is “each”. To force it to be per foot or metre append the cost with “ /f” or “ /m”. For example, “$3.20 /f”
# Overriding Quantity and Length:
# Quantity Override
Normally the quantity specified by a hit on a row is one for each component that hits on that row. You can override this quantity if necessary using the ResultQty result column, in two ways as follows:
# Override quantity with a number
The following is a Treads filter used to spec wedges. Here we have entered a number into the ResultQty field. For each tread that is not an open rise, 3 wedges will be spec’d. In this example the ResultQty field is set in the Row to which it applies.
# Override quantity with a filter property (integer)
You can also override the quantity based on the value of a filter property (of type = integer). The following Treads filter spec’s sidenosings for each tread based on the SideNoseCount property. In this example the ResultQty field is set in the Row to which it applies. You cannot override quantity with a length field.
# Override quantity with a filter property (dimension)
You can also override the quantity based on the value of a filter property (of type = dimension). This might be useful where the dimension you want to base the cost on is not the length (otherwise see second illustration below). The following Landing filter spec’s preparation labour based on its width. If your measurement system is metric, the ResultQty will return the quantity in decimetres (tenths of a metre) , otherwise it will return the quantity in quarters of a foot.
Note that where the cost is based on the Length property, the following would be a more simple way of doing this.
# Override quantity with a variable
You can also override the quantity based on a variable that you set earlier in the filter (or even earlier in a branch filter of the same category). The following (in the first 5 rows) uses the ThisTreadId and IsTopTread properties to determine which tread coming through the filter is the top tread of the unit, so that we know how many treads are in the unit (here we only allowed for up to five treads, but obviously there would normally be more). Based on this we set a ResultQty result with a quantity using the syntax “#=2”, #=3” etc. (in this case we are setting the variable to equal the number of risers in the unit). These five rows do nothing other than set this variable. Note that we have used the # property for the first column. This is a “row sequence” property and does nothing more than ensure that the rows that set the variable are processed prior to the rows that use it (see Overriding row sequence). After we set the variable (i.e. starting at row 6) we can use the “#” variable (which now represents a number) to set the ResultQty for any or all other rows of the filter, in this case to specify the quantity for labour contract rates for assembly. The lower part of this filter could be quite involved, vetting for all sorts of different permutations of TimberClass and SawtoothLeft (and SawtoothRight etc, which we haven’t shown in this example). The quantity variable means that within all these complex permutations we don’t need to be concerned with the quantity – it has already been established.
# Length Override;
You can override the Length of something coming through a filter using the ResultLength field. The length of the item specified by the filter (and shown in materials and labour) will be as overridden by this field. When using the Length property in {AUTO} filters, the Length searched for in the Parts window will be as set by the ResultLength field. The ResultLength field must be set in the Row to which it applies. Override length with a number; Imagine that your sidenosing came in random lengths, so in your Parts window had a UOM of “f” (feet). The following treads filter would spec 12” for each side nose.
# Override length with a filter property; landing support posts
The following shows a landing treads filter used to spec support posts. It only specs them if the tread coming through this filter is the top tread in the unit (in case the landing has more than one tread). The ResultQty uses a Custom Tag called “Support Posts” (created as a “Number” tag in Custom Tags window and set by right-clicking the landing when support posts are required). The “+” indicates that it is a Custom Tag. The length of the posts are determined by the LandingHeight property in the ResultLength column.
# Testing ResultLength
Note that when using ResultLength, when you are testing a filter by clicking the “?” toolbar button in the filter window of a job (see Testing Filters), and paste the results into Excel, the Length property value will show the original length of the component (not the overridden length). This is because Excel shows the properties of the component as it first enters the filter; ResultLength can be reset multiple times in a single filter, and may not necessarily even relate to the component coming through the filter.
# Overriding row sequence:
Rows are processed in their logical sequence. StairBiz sets this logical sequence automatically prior to the execution of a filter To see this logical sequence click the button – it may help you to understand the logic of your filter better There may be times (rarely) when you want to override the StairBiz logical row sequence. It can be done with the # property (which is not a property of a component). In the # property column you can enter numbers – StairBiz will sort the rows based on the sequence of these numbers. See the example in Overriding Quantity and Length (above).
# Overriding price:
Sometimes a user wants to spec a part from the part list (to get a PartID for accounting and a description for custom sheets), but with a price that is determined by the filter rather than by the Parts window. To do this have a Part column, and one or both LineItem columns. In the Part cell put the PartId (as per the Parts window), but prefix it with a tilde (~). So “~MKK-5015” in the Part cell would pull in the MKK-5015 part but use LineItem1 and LineItem2 for the prices.
# Revert and Auto Revert
In the Style window, you may set the type to Part From Filter. Sometimes you might like to filter for the part within certain limits, and, if those limits are exceeded, generate the item as a blank item. To do this you can use the {REVERT} and {AUTO REVERT} result. For example,
In this example, if the part “{REVERT}” gets a hit, StairBiz adds the blank item to the BOM regardless of any Part From Filter setting. Another example for auto filters:
Here the part is exactly the same as {AUTO}, except that if there is no auto hit, the effect is the same as a {REVERT}. No alert will be generated in the Alerts window if the part is not found in the Parts window. Even though a style type might be “Part From Filter”, StairBiz holds a memory of the settings for the style the last time the style type was one of the three blank settings, and applies that in the event of a revert (see Style Defaults window).
# User Notes in BOM
You can create notes to yourself in the Filters window that show up in any BOM list The trick is to enter (type) the note directly into the Part field of the Filter window, and prefix it with “##”. For example …
If you have text into the Caption field in the filter, in the BOM it will display as the Description for this “part”. For example …
This “part” should not be included in your Parts window (it is not really a part, and will not be processed as such). This “part” has no cost, but will be included in BOM lists even if you have specified that zero $ items are not to be processed.
# First item through filter
There is a property called “FirstItem” in all component categories.
For each separate category, the first time a row containing the FirstItem property gets a hit, FirstItem returns True. The property is then set to False, and will return False thereafter for all subsequent rows and for all subsequent filters within that category (including branch filters).
This property is useful for things like spec’ing a setup cost for machining etc. (e.g. you could test for the first handrail to come through the filter and spec a single general setup or tooling cost for machining all handrail in the job).
Notes:
- The property does not distinguish between a Parts filter or a Labour filter – it can get set in either, so best to not use this property in both parts and labour filters for any one category.
- The property gets set to False after the first row hit containing the property, even if that row is testing for “No”, so if there is also a row testing for “Yes” in the filter be sure that this row is above the row testing for “No” (use the # property – see Overriding row sequence).
- If you want to spec multiple items when FirstItem = “Yes”, you must use a branch filter. If you have more than one row testing for “Yes”, then only the first such row will get a hit. So only ever use one row testing for “Yes” in any particular category, and have that row trigger a branch filter that specs the multiple items.
- The Quantity for a FirstItem = “Yes” hit is always “1”, however the Quantity for a FirstItem = “No” hit will always be the original quantity (not deducting the first item). For example, if you have 5 treads, the Quantity for a FirstItem = “Yes” hit is “1”, and the Quantity for a FirstItem = “No” hit will be “5”.
# Testing Filters
StairBiz has some built-in functionality to help you test and refine your filters. If a filter doesn’t appear to be working, follow these steps:
- Check that the component you think you are filtering is shown in the Cutting List sheet (View menu). Remember that the Cutting List completely ignores filters and its items are derived directly from the stair as designed. If the component is not shown in the Cutting List, there is no way it can be going through a filter (with the exception of the Unit and Stair categories). Check that there is a valid style selected in the Components window (i.e. not “None”).
- Check that the filter is selected in the Filters tab of Components window or Labour window of the job. Just because you create a filter in the Part Filters window or Labour Filters window doesn’t mean that StairBiz knows you wish to use it for the current job. You may wish to include a particular filter in the default Selection Template so that it is automatically selected for each new job.
- Open the filter from within the job: There is a small square button adjacent to each filter selection in the Components window and Labour window (filters tabs). Click this button to open the currently selected filter.
- Use the toolbar buttons shown below to test for “hits” in the filter.
- Note that when a filter is being viewed from within a job, you can still edit that filter (just as if you had opened it from the Defaults menu). Changes you make are not confined to the current job – you are actually changing the filter held in your defaults. Remember that filters are not saved with a job – only the selected filter names are saved with the job.
# Show filter hits for this job
When you click this button, all rows in the filter that have a “hit” will turn red (i.e. the text in every cell of that row will be red). Red means that a component from the stair has satisfied every property for that row and has made it to the “results” side of the filter, and those results are being executed and should show up in the materials and labour windows and sheets, or the alerts sheet. If an Auto filter row has a hit, and StairBiz was not able to find a compatible part in the Parts window, StairBiz will automatically alert you in the Alerts sheet (View menu). If a row you think should be getting a hit is not getting a hit, one-by-one change each cell in the row to {ALL} so that you can be sure that this cell is getting a hit. By a process of elimination you can determine which cell is not getting the hit you think it should be getting. After clicking this button, if you hover your cursor over a row in the filter some text will appear under your cursor showing the number of hits that this row has received. When you click this button, StairBiz collects the values of the relevant properties (according to the property columns shown) for each component of the current design that has passed through this filter, and opens a small window which shows these. It also places these properties on the clipboard so that you can paste them into Excel (or even a word processing program like Notepad) in case you want to save it for some reason. This is a powerful way to check that the properties of a component are what you think they should be.
Note that the *Tag property value will probably show correctly in Excel, but may not. This is because Excel shows the properties of the component coming through the filter, and *Tag is not a property of the component – it can be reset multiple times in a single filter. The value shown in Excel is the value held at the first hit on the *Tag property. Note that when using ResultLength, the Length property value in Excel will show the original length of the component (not the overridden length). This is because Excel shows the properties of the component as it first enters the filter; ResultLength can be reset multiple times in a single filter, and may not necessarily even relate to the component coming through the filter.
# Jump to branch filter
If the selected row in the filter contains a branch filter (see below) this button opens the branch filter. The “Show filter hits for this job” button (described above) can then be applied to the branch filter.
# Return to parent filter
If you have jumped to a branch filter this button closes the branch filter and returns you to the parent filter.
# Filters – Properties and Results
The Filters window shows a list. This list is divided vertically – there may be one or more Property columns on the left, and one or more Result columns on the right. You choose the appropriate columns when you create a new filter, and you may change them by clicking the “Properties” button. Results are distinguished from Properties by being all grey in the list. A Property is a bit of information about the component being run through the filter. For example, if you create a Baluster filter, and select it in the Components window for the job, each baluster in the design runs through this filter and brings with it certain properties (e.g. Style, Timber, Width, Depth, Length etc.). The filter compares the properties of the baluster with the properties you specify in the filter. If there is a match of properties, you have what we call a “hit”, and any cells on the Result side of the list are executed (just for the row of the hit). Because the result is the ultimate aim of the filter, we will discuss them first, and then turn our attention to properties.
# Result Columns:
What is specified by a hit will depend on which result columns you selected for the filter, and what you have put in those columns. Following is a list of the result columns.
Result | Options | Explanation |
---|---|---|
Part | ListParts | Specifies a part id |
Alert | User text | Specifies any alert text |
Caption | User text | Specifies a caption for parts or labour |
Ref | Integer | Specifies a reference number for part or labour |
TimePrepare | Integer | Specifies the labour time to prepare this item |
TimeAssemble | Integer | Specifies the labour time to assemble this item |
TimeDeliver | Integer | Specifies the labour time to deliver this item |
TimeInstall | Integer | Specifies the labour time to install this item |
ContractPrepare | Currency | Specifies the contract rate to prepare this item |
ContractAssemble | Currency | Specifies the contract rate to assemble this item |
ContractDeliver | Currency | Specifies the contract rate to deliver this item |
ContractInstall | Currency | Specifies the contract rate to install this item |
CostMethod | ListLaborCostMethod | Can override the default cost method for this item |
LineItem1 | Currency | Specifies the contract amount for a line item (see later). It would normally represent a buy price |
LineItem2 | Currency | Specifies the contract amount for a line item (see later). It would normally represent a sell price |
BranchFilter | FilterList | Specifies a different filter to branch to. |
ResultQty | PropertyList | Allows Qty to be overridden by a number or a specified property column. See Overriding Quantity and Length (above). |
ResultLength | PropertyList | Allows Length to be overridden by a number or a specified property column. See Overriding Quantity and Length (above). |
ResultTag | Allows you to set the value of the *Tag property. See above: Auto-Filters/ *Tag – a wild-card auto-filterable property |
# Result Options:
Following is an explanation of the options (i.e. what can you enter into the cells of the above Result columns).
Options | Explanation |
---|---|
ListParts | Shows a list of parts from your Parts window, from which you can select. Only parts with the same category as the current filter will be shown, plus any parts in the General category. |
User text | Any text you type into the cell |
Integer | Any number you type into the cell (must be less than 32000). |
Currency | Any currency amount you type into the cell. It can be in full currency format (e.g. “$12.60”) or short format (e.g. “12.60” or 12.6”. |
ListLaborCostMethod | Shows a list of labour cost methods, as follows: TimeRate Only times (minutes) shown in the TimePrepare, TimeAssemble, TimeDeliver and TimeInstall columns will be used for this hit. They will be multiplied by the Rate for these categories as shown in the Rates list at the top of the Labour window for the job. Contract Only currency amounts shown in the ContractPrepare, ContractAssemble, ContractDeliver and ContractInstall columns will be used for this hit. If times (minutes) are shown in the TimePrepare, TimeAssemble, TimeDeliver and TimeInstall columns, they will not be used to cost the labour but will still be used to allocate durations for the job (used by the Schedule window). Default For this hit StairBiz will use the labour cost method indicated at the top of the Labour window for the job. If the “Contract” button is selected, then Contract will apply (see above), otherwise TimeRate will apply (see above). |
FilterList | Shows a list of previously created filters in the same category as the current filter. The current filter can branch to the selected filter if it gets a hit. |
PropertyList | Shows a list of currently included properties. |
# Results in more detail:
Following is more detail on the result columns. Note that you do not need to have text in every cell of every column. Only cells with content are processed during a hit, otherwise they are ignored.
Result | Explanation |
---|---|
Part | This result may be used to specify a part. For example, if the category is “Balusters”, and a baluster in the job has a hit on this row, then the part shown in this field will be specified for the job. Clicking in this cell will show a list of Part Ids from your Parts window. You may optionally type in a part Id (rather than select from the list). Normally the PartId’s in this list include a suffix showing the Style and Description from your Parts window. If your descriptions are long this can be unwieldy. To turn off these suffixes, open the Miscellaneous Defaults window (Filters category) and set “Suffix PartId with description” to “No”. If there is a hit on this row, the part will be specified in the Materials window of the job (see Show; Parts From Filter), the cost of the part (as shown in the Parts window) will be added to the materials cost for the job, and any labour for the part (as shown in the Parts window) will be specified in the Labour window for the job (if the Include Parts Labour button is selected in that window). |
Alert | You can type any text you like in this cell. If there is a hit for this row, this text will be shown in the Alerts sheet (under the View menu). Alerts may be used for anything, but the most likely use is to alert the user if the hit falls outside the normal scope of things. For example, if the user has specified a Colonial baluster in Ash, and Colonial balusters do not come in Ash, the filter can trap that situation and alert the user. If alerts are current for a job the Alerts Current field of the Job Directory will indicate such. |
Caption | When there is a hit, and a part and/or labour is specified as a result, that part and/or labour will show up in the Materials window and/or Labour window of the job. If there is text in a Caption cell for that hit, this text will show in the Description column for that part/labour in those windows. |
Ref | When there is a hit, and a part is specified as a result, that part will show up in the Materials window of the job (Show = Parts From Filter). If there is a number in a Ref cell for that hit, this number will show in the Ref column for that part in that window. When there is a hit, labour is specified as a result, that labour will show up in the Labour window of the job. If there is a number in a Ref cell for that hit, this number will show in the Ref column for that labour item in that window. When there is a hit, and an alert is specified as a result, that alert will show up in the Alerts sheet of the job. If there is a number in a Ref cell for that hit, this number will show in the Ref column for that alert in that window. This is useful for tracking where in your filters the part, labour or alert has been specified and may be useful for de-bugging. |
TimePrepare | If there is a hit on this cell, the number of minutes specified in this cell (multiplied by the quantity for the component) will be added to the total time for Preparation for the job. This time will be fed into the Schedule window for the job. StairBiz will also multiply this time by the Rate for Preparation as shown in the Rates list at the top of the Labour window for the job and add it to the labour cost for the job, provided that: The CostMethod column is included, and … |
TimeRate | is selected, or Default is selected and the “Contract” button at the top of the Labour window for the job is not selected , or … the CostMethod column is NOT included, and … the “Contract” button at the top of the Labour window for the job is not selected. If the time refers to per metre, type a “ /M” after the setting. For example … 5 /M If the time refers to per foot, type a “ /F” after the setting. For example … 5 /F If the time refers to per each (i.e. per baluster, per string, etc.) don’t type anything after the setting. For example … 5 |
TimeAssemble | See TimePrepare (above), but apply it to Assembly. |
TimeDeliver | See TimePrepare (above), but apply it to Delivery. |
TimeInstall | See TimePrepare (above), but apply it to Installation. |
TimeCNC | See TimePrepare (above), but apply it to CNC (time one the CNC bed). |
ContractPrepare | If there is a hit on this cell, the currency amount specified in this cell (multiplied by the quantity for the component) will be added to the Preparation labour for the job, provided that: The CostMethod column is included and … Contract is selected, or Default is selected and the “Contract” button at the top of the Labour window for the job is selected, or The CostMethod column is NOT included and … the “Contract” button at the top of the Labour window for the job is selected. If the contract amount refers to per metre, type a “ /M” after the setting. For example … $1.32 /M If the contract amount refers to per foot, type a “ /F” after the setting. For example … $1.32 /F If the time or contract amount refers to per each (i.e. per baluster, per string, etc.) don’t type anything after the setting. For example … $1.32 If you want to include a quantity, you can type “4@” before the rate (e.g. “4@$3.00”). This has the effect of multiplying the quantity calculated by StairBiz by the quantity you specify. For example, imagine you are using the labour filter to specify and cost the number of connections for each handrail fitting that passes through the filter. If a “GNeckBlock” goes through the filter and you want the filter to specify and cost 3 connections for this fitting, you could type “3@$7.00”. If StairBiz sends through two of these fittings, in your Labour window you would see a quantity of 6 (2 x 3). |
ContractAssemble | See ContractPrepare (above), but apply it to Assembly. |
ContractDeliver | See ContractPrepare (above), but apply it to Delivery. |
ContractInstall | See ContractPrepare (above), but apply it to Installation. |
CostMethod | This provides a way to override (just for this one hit) the default cost method for labour for the job (as shown by the Contract buttons at the top of the Labour Cost window for the job). For example, if this column if included, and TimeRate is selected, then even if you have all the Contract buttons selected in the Labour Cost window, this one hit will apply the minutes in the TimePrepare, TimeAssemble, TimeDeliver and TimeInstall cells to the labour costing for the job (in this case any currency amounts you might have in ContractPrepare, ContractAssemble, ContractDeliver and ContractInstall are redundant). |
LineItem1/2 | A line item is a non-part item you want StairBiz to specify in the Materials list. It is similar to a part but differs in that the item does not need to be listed in the Parts window. For example, you could specify a tread/rise/string combination as a line item (useful if you price stairs on a per-tread basis, which includes the tread, riser and one tread’s worth of string). Such a line item could (but doesn’t have to) include both materials and labour all represented in a single item. In the Materials list, the PartId column would contain any text you entered into a Caption field in the same row of the filter. LineItem1 would normally (but not necessarily) be the Buy price of this line item. LineItem2 would normally (but not necessarily) be the sell price. You can toggle between the two prices (i.e. tell StairBiz which one to use) in the Materials window of a job. |
BranchFilter | A filter can have sub-filters (called Branch Filters). StairBiz will branch to the filter shown in this cell when it gets a hit on this cell. Branch filters are useful when you want to break a long filter down into smaller filters to make them easier to work with. They can also be useful when the “logic” of an AutoFilter requires it. For more, see Branch Filters and Auto-Filters (below). |
ResultQty | See Overriding Quantity and Length (above). |
ResultLength | See Overriding Quantity and Length (above). |
ResultTag | Allows you to set the value of the *Tag property. See above: Auto-Filters/ *Tag – a wild-card auto-filterable property |
# Switching between labour cost methods
By including both a Time result and a Contract result for each labour item, you can switch between cost methods for any labour stage of an entire job just by clicking the relevant Contract button in the Labour window for the job.
For example, you have two people who build stairs. One is staff, the other is contract.
In your labour cost filter (for example, Treads category, which is for straight flights only), you might have something like …
TimeAssemble = 20
ContractAssemble = $16
If the Contract button in the Labour window is ticked, only the ContractAssemble transaction is considered. If you un-tick this button, only the TimeAssemble transaction is considered. Note that the item in the filter can override this Contract button by using the CostMethod field and selecting something other than “Default”.
Also note that even if you only use Contract, if you don’t include a Time then StairBiz can’t work out how long the job will take (for the Schedule window).
# Property Columns
The property columns are the columns on the left side of the filter. These are the criteria each component must satisfy before a hit is declared (and the results are executed).
In the following …
CATEGORY is the filter’s component category (shown in panel on left) OPTIONS are the choices you get for each property (i.e. what can go in the cell). There are four broad types:
• List… (i.e. an option that starts with the word “List…”
Means that when you place you cursor in this cell, you get a pop-up list from which you can select the required property. Note that even when you get a pop-up list, you may simply type in the text (if you a familiar with the options). Be careful if you type in a value rather than select from the list - if you type in something that is not in the pop-up list, you obviously would never get a hit on this cell.
A full explanation of all Lists are included further down in this discussion - one list may apply to many properties, so this avoids duplicate explanations.
• TrueFalse
You get a pop-up giving you the choice of True or False (or you can simply type “True” or “False”)
• Dimension
You can enter a dimension in whatever dimension system is currently selected in the Preferences window.
You can also specify a dimension range - to enter a range, type in the two dimensions separated by a comma (e.g. “800, 900”.
When you enter a range, the first dimension is assumed to be “>=” and the second is “<”. In other words “800, 900” would get a hit if the dimension property being filtered was greater than or equal to 800 and less than 900.
• Integer
You can enter a number between 0 and 32000.
You can also enter a range of numbers – see Dimension (above)
• (Auto-filter)
This indicated that the property can be used to auto-filter the Parts window. See Auto-filters.
Note that some of the properties lend themselves more to specifying labour, and some lend themselves more to specifying parts. There is a “hit” when the property option selected or entered into the cell in the filter matches the corresponding property of the component sent to the filter.
Balconyplate
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
SituationStart | ListRailEnd The situation at the start of the balconyplate |
SituationEnd | ListRailEnd The situation at the end of the balconyplate |
Curved | TrueFalse (Auto-filter) Is the section curved |
PlowWidth | Dimension The width of the plow (for the balusters). Note that for all dimension properties you can also specify a range of dimensions (see Dimension, above). If the baluster is set to Round Baluster, the PlowWidth property will always return zero. |
StyleBaluster | ListStyles The style of the baluster (from the Components window) |
StyleClassBaluster | ListStyleClass The Style Class of the baluster (from the Components window) |
Balconytrim
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Curved | TrueFalse (Auto-filter) Is the section curved |
Balusters
Also see PropertyNamesStylesAll under the Common Properties heading (below).
Each baluster, both stair and balcony, runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
IsBalcony | TrueFalse Is the baluster part of a balcony (as opposed to the stair) |
IsSawTooth | TrueFalse Is the baluster part of a sawtooth string (as opposed to a box string) |
TurnLth | Dimension The length of the turning (zero if none) |
BotFlatLth | Dimension The length of the lower flat (zero if no turning) |
FixedLowerFlat | TrueFalse Does the baluster have a fixed lower flat (i.e. variable turning). |
SawToothPosition | Integer The position of this baluster on the tread (1, 2, 3 etc). Only applies if sawtooth string. Note that for all integer properties you can also specify a range of numbers (see Integer, above). |
RadiusType | ListRadiusType1 Is the handrail straight or curved |
BalIsPinTop | TrueFalse Is this baluster a pin top |
VoluteType | ListVoluteType Is the baluster associated with a Volute, Turnout or TurnoutSmall, or none of these. |
BalBotType | ListBalBotType The situation at the bottom of the baluster. |
IsLanding | TrueFalse Is this baluster associated with a landing (as opposed to a straight flight or balcony) |
IsPlatform | TrueFalse Is this baluster associated with a platform (as opposed to a normal landing, straight flight or balcony) |
IsFullPanel | TrueFalse Is this “baluster” a full panel (e.g. a glass panel) |
StyleBalconyNwl | ListStyles The style of the currently selected balcony newel. This could be useful in, for example, spec'ing hardware for cable or panel balustrade. The balcony newel was chosen to represent all newels, whether or not it actually does. |
Bearers
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
LandingType | ListLandingType The type of landing |
TreadCount | Integer Total treads in landing |
ThisTreadId | Integer The tread id within this landing (from the bottom) |
Bullnose | Treads, Bullnose Risers Also see PropertyNamesStylesAll under the Common Properties heading (below). Each tread with a bullnose on at least one side runs through the Bullnose Treads filter. Each riser with a bullnose on at least one side runs through the Bullnose Risers filter. |
BullName | ListBullNames (Auto-filter via Tag field) The name of the bullnose template from which this bullnose came. It is possible to auto-filterable this property indirectly – see Chapter 15 : Parts and Labour Filters/ Auto-filters – Suggestions for each category/ Bullnose Treads. |
ClassBull | ListBullClasses The class of the bullnose (as shown when you right-click either the bullnose template or the bullnose on the stair) |
Hand | ListHandOrBoth Is there a bullnose on the left of the tread, the right of the tread, or both. |
BullTreadId | Integer The ID of this bullnose tread. The highest bullnose tread has a BullTreadId = 1. Any bullnose treads below this will have BullTreadId = 2, 3, 4 etc. down to the bottom bullnose tread. Therefore the maximum BullTreadId will equal BullCount (see below). |
BullCount | Integer Total number of bullnose treads (a bullnose on the left, right or both). For example if there is a single bullnose on either the left, right or both, this would be 1; if there was a double bullnose on one side and a single or no bullnose on the other, this would be 2. |
BullCountSide | Integer Total number of bullnose treads on the same side as the current bullnose. This is only useful if the bullnoses go through the filter one side at a time (i.e. if 'Labour Cost; Separate Tread Sides' is True in the Setout window, Bullnose category). If this is False, then BullCountSide will be the same as BullCount (see above). |
BullSides | Integer 1 if one side of tread is bullnose, 2 if both sides (this is similar to HandOrBoth, except that it makes no reference to the hand) |
NoseType | ListRadiusType2 Is the nosing of the bullnose tread straight, curved or angled |
IsOpenRise | TrueFalse Does the bullnose have a riser. |
TreadProtection | TrueFalse Is the Tread Protection checkbox in the Job Details window ticked (does not apply to Bullnose Risers). |
RiserTimber | ListTimbers The timber of the bullnose riser (does not apply to Bullnose treads). |
StringTimber | ListTimbers The timber of the string associated with this bullnose. |
UnitWidth | Dimension The width of the bottom of the straight flight (from outside string to outside string). |
StringStyle | ListStyles The style name of the TENON strings as shown in the Components window. |
Fillets
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
All fillets | (handrail, shoerail and balconyplate) run through this filter. Fillets come through as a total length for each section of handrail, shoerail and balconyplate (not as individual fillet pieces) and the Length property (see PropertyNamesStylesAll) will indicate this total length, however, the Quantity property (see PropertyNamesStylesAll) will indicate the number of fillet pieces in each section. |
FilletType | ListFilletType Is the fillet for handrail, shoerail or balconyplate. |
RadiusType | ListRadiusType1 Is the handrail straight or curved |
IsRaked | TrueFalse True if walltrim is raked (otherwise walltrim is level) |
IsBalcony | TrueFalse True if handrail is part of balcony (otherwise is part of stair) |
Frets
Also see PropertyNamesStylesAll under the Common Properties heading (below).
Each fret runs through this filter
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Hand | ListHand Left of stair (going up), or right |
Curved | TrueFalse (Auto-filter) Is this fret part of a curved string |
IsLanding | TrueFalse Is this fret part of a landing (otherwise is part of straight fight) |
TreadsInLanding | Integer If corner unit, how many treads in the unit |
LandingTreadId | Integer If corner unit, which tread in corner unit is this |
Fittings
A “nominal” newel refers to a position in the stair or balcony where a newel could be (regardless of whether or not a newel is actually selected at that location). Each nominal newel passes through this filter provided that there is rail on the high side, low side, or both sides of the nominal newel.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Style | ListStyles (Auto-filter) Lists all styles of handrail |
StyleClass | ListStyleClass Lists all style classes |
Timber | ListTimbers (Auto-filter) Lists all timbers (handrail) |
TimbClass | ListTimbClass Lists all timber classes (handrail) |
Width | Dimension (Auto-filter) The width of the handrail |
Depth | Dimension (Auto-filter) The depth of the handrail |
FittingType | ListFittingTypes (Auto-filter) Lists all possible fitting types as seen in the Elevations mode of the Design window |
NewelType | ListNewelTypes Whether the nominal newel is OTP, PTP or no newel |
Joins | Integer How many joins relate to this nominal newel. A join may be between a fitting and a handrail, a fitting and a newel block, a fitting and a fitting, or a handrail and a newel block. |
RailCuts | Integer How many cuts must an installer make to handrail at the location of this nominal newel. This does not include cuts to fittings (see FittingCuts). Invariably if there is handrail on the high side OR the low side, there will be one RailCut, otherwise if there is handrail on both sides, there will be two RailCuts. |
FittingCuts | Integer How many cuts must an installer make to fittings at the location of this nominal newel. This does not include cuts to handrail (see RailCuts). For example, if a straight rail terminates at a rosette, this would be no FittingCuts (although there would be one RailCut). On the other hand if a straight rail goes up to a rosette via an overease, there would be one FittingCut (i.e. at one end of the overease to create the exact angle – the other end is assumed to already be cut). In a gooseneck, the join between the vertical and the horizontal is not considered a cut (a gooseneck is assumed to already consist of a vertical mitre-joined to a horizontal), however there would always be a cut at the bottom of the vertical and one at the end of the horizontal, plus the lo-side upease would have one cut, and if there is a high-side upease this would also have a cut. |
TurnAngle | Integer (Auto-filter) Applies only to turns or fittings that include turns. It is the angle of the turn (always the acute angle, so may need to be used in conjunction with Hand). For example, “90” would be a standard quarter turn. |
Length | Dimension (Auto-filter) Applies only to verticals, and goosenecks (which contain a vertical). It is the vertical distance from the underside of the horizontal part of the gooseneck down to the top of the upease. Note that this distance may be negative (i.e. the top of the upease may be above the bottom of the horizontal part of the gooseneck). The gooseneck can be assembled or disassembled. |
UShapeGap | Dimension Applies only to a Ushape stair - the gap between the outside faces of the upper and lower tenon strings (in plan view). |
IsWallrail | TrueFalse It is rail associated with this fitting wallrail (as opposed to handrail). Note that in rare cases where there might be handrail on one side and wallrail on the other this property has a 50% of being correct. |
PlowWidth | Dimension If the rail is handrail, and the balusters are square top, this returns the depth of the balusters. Note that normally PlowWidth is auto-filterable, but in this category it is not (there is no PlowWidth column in the Parts window). If the baluster is set to Round Baluster, the PlowWidth property will always return zero. |
Handrail
Also see PropertyNamesStylesAll under the Common Properties heading (below).
Each section of handrail, both stair and balcony, runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
SituationStart | ListRailEnd The situation at the start of the handrail |
SituationEnd | ListRailEnd The situation at the end of the handrail |
RadiusType | ListRadiusType1 (Auto-filter) Is the handrail straight or curved |
IsRaked | TrueFalse True if handrail is raked (otherwise handrail is level) |
IsBalcony | TrueFalse True if handrail is part of balcony (otherwise is part of stair) |
BalIsPinTop | TrueFalse True if baluster is pin top |
PlowWidth | Dimension The width of the plow (zero if no balusters or pin-top or round balusters) |
Curved | TrueFalse Is the handrail curved (2D or 3D) |
BalWidth | Dimension The width of the baluster (zero if no balusters) |
BalDepth | Dimension The depth of the baluster (zero if no balusters) |
BalTimber | ListTimber The timber of the baluster (empty if no balusters) |
StyleBaluster | ListStyles The style of the baluster (from the Components window) |
StyleClassBaluster | ListStyleClass The Style Class of the baluster (from the Components window) |
IsWallrail | TrueFalse True if this rail is in fact wallrail (branched to the handrail filter by the wallrail filter) |
RailHeight | Dimension The height of the handrail (from the Setout window) |
CeilingRail | TrueFalse True if this rail runs horizontally under the ceiling. |
Goings | Integer How many goings (tantamount to ‘treads’ for a straight unit) in the horizontal length of this handrail. Applies to handrail on the stair only (otherwise returns zero). It takes the horizontal length of the section and divides it by the default going for the stair (rounded to the NEAREST integer). |
StyleBalconyNewel | ListStyles The style of the balcony newel (from the Components window). Shows "[None]" if a style is not selected. |
Whether or not there is any newel selected at the relevant handrail is not considered. |
Job
The job (as a whole) runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Dispatch | ListDispatchMode How the job will be dispatched - Pickup, Deliver or Install (as shown in the Details window) |
StairCount | Integer How many stairs in the job’s design |
IsBalcony | TrueFalse Is there any balcony balustrade in the job’s design |
SplitQuote | TrueFalse Is the quote split into Stair and Balustrade (according to the Process window) |
ActiveStair | TrueFalse Is the stair active as per check-box in Process window |
ActiveBalustrade | TrueFalse Is the balcony active as per check-box in Process window |
ActiveBalustrade | TrueFalse Is the balcony active as per check-box in Process window |
The following may be useful in vetting timber/style combinations
PROPERTY | OPTIONS / EXPLANATION |
---|---|
StyleBalconyNwl | ListStyles |
StyleTopNwl | ListStyles |
StyleBaluster | ListStyles |
StyleHandrail | ListStyles |
TimberBalconyNwl | ListTimbers |
TimberTopNwl | ListTimbers |
TimberBaluster | ListTimbers |
TimberHandrail | ListTimbers |
The following all come from the Job Details window and may be useful in spec’ing labour
PROPERTY | OPTIONS / EXPLANATION |
---|---|
QuoteFromPlan | TrueFalse |
JobBriefing | TrueFalse |
Remeasure | TrueFalse |
NoSitePower | TrueFalse |
TrimUpperFloor | TrueFalse |
TrimCentreWall | TrueFalse |
The following all come from the Site window
PROPERTY | OPTIONS / EXPLANATION |
---|---|
NewHome | TrueFalse |
Landing Treads
Also see PropertyNamesStylesAll under the Common Properties heading (below).
Each landing tread (i.e. treads in a corner unit) run through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Hand | ListHandOrBoth (Auto-filter) The hand of the landing - Left if the landing turns left (going up), otherwise Right. If the landing is a single tread landing, and you allow the “Both” value (see Setout window, Treads category, Hand Property – allow ‘Both’), then this value can be “Both”. |
ThisTreadId | Integer The id of this tread within the single corner unit (going up). The lowest landing tread = 1. |
ThisTreadId2 | Integer The id of this tread within a contiguous run of corner units (going up). In this case a UShape 6-tread landing (for example) is treated as a single unit and its top tread has an ID of 6 (whereas for the previous property [ThisTreadId] it is treated as two 3-tread corner units). If there is only a single corner unit this property returns the same as ThisTreadId. |
TreadCount | Integer Total treads in this corner unit |
TreadCount2 | Integer Total treads within a contiguous run of corner units. A contiguous run includes one or more landings. In this case a UShape 6-tread landing (for example) is treated as a single unit and would return "6" (whereas for the previous property [TreadCount] it is treated as two 3-tread corner units and would return "3"). This property can be used in conjunction with the UShapeLanding property if necessary. |
TreadNum | Integer The id of this tread within the entire stair (going up or going down, depending on your “Tread Numbers Top Down” setting in the Preferences window). |
TreadType | Integer (Auto-filter) A two digit number (usually). The first digit is ThisTreadId (see above). The second digit is TreadCount (see above). For example, the second tread of a three tread landing would have a value of “23”. |
RiserCount | Integer Total risers in this corner unit (always one more than the TreadCount) |
SawtoothInside | ListSawtoothType The type of sawtooth (if any) in the inside (tenonside) end. |
SawtoothOutside | ListSawtoothType The type of sawtooth (if any) in the outside (wallside) end. |
SawtoothSides | Integer No sawtooth = 0; sawtooth one side = 1; sawtooth both sides = 2. |
IsRadiusInside | TrueFalse Is the inside (tenonside) of the tread a radius |
IsRadiusOutside | TrueFalse Is the outside (wallside) of the tread a radius |
IsSliceOutside | TrueFalse Is the outside (wallside) of the tread sliced |
IsOpenRise | TrueFalse True if this tread is open rise (otherwise is closed rise) |
SideNoseCount | Integer If there is a sawtooth with side nosing on one end, this equals 1. If there is a sawtooth with side nosing on both ends, this equals 2 . |
SideNose | ListSideNose (Auto-filter) None, Left, Right, Both. |
TreadProtection | TrueFalse True if "Tread Protection" is ticked in the Details window. |
BottomTread | TrueFalse True if this tread is the bottom tread in the single corner unit. |
TopTread | TrueFalse True if this tread is the top tread in the single corner unit. |
SplayedRise | TrueFalse True if this tread has a spayed (leaning) riser below it. |
SafBarRise | TrueFalse True if this tread has a safetybar riser. |
LongestSide | Dimension The longest side (width or depth) of the single corner unit. |
HasCurve | TrueFalse Is there a curved string in contact with this tread. |
LandingHeight | Dimension Height of the top of this tread from the floor. |
MembersLth | Dimension N/A. |
SheetFraction | Dimension The approximate percentage of a 2400 x 1200 sheet needed by this tread. Use with caution. |
IsHalfLanding | TrueFalse Is this tread the single tread in a half-space (UShape) landing. |
NoseToRiser | Dimension The tread nosing overhang, as shown in the Setout window for this job. |
RiserTimber | ListTimbers The timber of the tread’s riser. |
StringTimber | ListTimbers The timber of the wall-side strings. |
StringStyle | ListStyles The style name of the TENON strings as shown in the Components window. |
UShapeLanding | TrueFalse Does the corner unit of this tread have a corner unit above or below it (e.g. a UShape landing). |
Lining
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
UnitType | ListUnitType Corner, straight or in-line landing |
TreadCount | Integer The total treads within the unit |
RiserCount | Integer Total risers in this corner unit (always one more than the TreadCount) |
IsHalfLanding | TrueFalse Is this landing part of a half-space landing |
ClassUnit | ListUnitClasses The class of this unit (as shown by right-clicking a unit template, or an actual unit in a stair, both in the Stair Design mode of the Design window). |
RadiusTypeInside | ListRadiusType2 Is any inside (tenonside) string of the unit Curved or Angled |
RadiusTypeOutside | ListRadiusType2 Is any outside (wallside) string of the unit Curved or Angled |
IsDogLegInside | TrueFalse Does the inside have a dogleg; applies only to straight |
IsDogLegOutside | TrueFalse Does the outside have a dogleg; applies only to straight |
DoglegOffset | Dimension The distance between the two main strings (i.e. the length of the dogleg). Zero if no dogleg. If dogleg both sides, returns the offset for the tenonside only. |
DoglegOffset | Dimension The distance between the two main strings (i.e. the length of the dogleg). Zero if no dogleg. If dogleg both sides, returns the offset for the tenonside only. |
UnitCurveType | ListUnitCurveType The curve type of the unit (No Curve, Circular L, Circular R etc.). |
Newel Acorn
Each newel runs through this filter, provided that an acorn is selected in the Acorns list in the Components window and an acorn is not specified in the Styles window for the newel.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Style | ListStyles (Auto-filter) The style of the acorn |
Timber | ListTimbers (Auto-filter) The timber of the acorn |
TimbClass | ListTimbClass Lists all timber classes (handrail) |
IsMDF | TrueFalse Is the timber MDF |
Width | Dimension (Auto-filter) The width of the acorn |
Depth | Dimension (Auto-filter) The depth of the acorn |
Length | Dimension (Auto-filter) The height of the acorn |
NewelStyle | ListStyles The style of the associated newel |
NewelTimber | ListTimbers The timber of the associated newel |
Newel Balcony | Also see PropertyNamesNewelAll under the Common Properties heading (below). Only balcony newels pass through this filter |
BelowFloor | TrueFalse True if this balcony newel extends below the upper floor (otherwise bottom is at or above floor level) |
HeightUpTo | ListNwlRUpTo The options for height of the top of this newel (as selected by right-clicking the newel) |
HeightDownTo | ListNwlRDownTo The options for height of the bottom of this newel (as selected by right-clicking the newel) |
Newel Bottom
Also see PropertyNamesNewelAll under the Common Properties heading (below).
Only the bottom newels of a stair pass through this filter (both corner and straight unit)
PROPERTY | OPTIONS / EXPLANATION |
---|---|
ClassBull | ListBullClasses The class of the bullnose |
BullCount | Integer How many bullnoses are there. |
IsStraightFlight | TrueFalse Is this newel part of a straight flight (not corner) |
StartType | ListNwBotStartType The handrail fitting at the bottom newel |
HeightUpTo | ListNwlSUpTo The options for height of the top of this newel (as selected by right-clicking the newel) |
HeightDownTo | ListNwlSDownTo The options for height of the bottom of this newel (as selected by right-clicking the newel) |
Floats | TrueFalse Is the newel a floating newel (as opposed to a newel integrated with the stair) |
Newel Top
Also see PropertyNamesNewelAll under the Common Properties heading (below).
Only the top newels of a stair pass through this filter (both corner and straight unit)
PROPERTY | OPTIONS / EXPLANATION |
---|---|
IsStraightFlight | TrueFalse True of at top of a straight flight (otherwise is top of corner unit) |
IsStairRail | TrueFalse True if has stair handrail attached (otherwise has only balcony rail or no rail attached) |
IsBalconyRail | TrueFalse True if has balcony rail attached (otherwise has only stair rail or no rail attached) |
HeightUpTo | ListNwlSUpTo The options for height of the top of this newel (as selected by right-clicking the newel) |
HeightDownTo | ListNwlSDownTo The options for height of the bottom of this newel (as selected by right-clicking the newel) |
Floats | TrueFalse Is the newel a floating newel |
Newel Inside Landing
Also see PropertyNamesNewelAll under the Common Properties heading (below).
Only the inside landing (i.e. tenonside) newels of a corner unit pass through this filter (provided they are not the top or bottom newel of the stair)
PROPERTY | OPTIONS / EXPLANATION |
---|---|
NewelPosition | ListNwlPosNotTopBot The position of this mid newel |
Situation | ListNwlSituationNotTopBot What the rail does at this mid newel |
TreadCount | Integer The number of treads in the corner unit |
UnitAboveIs | ListUnitTypeOrNone What type of unit is above this newel |
TreadsAbove | Integer The number of treads in the unit above this one |
IsPlatform | TrueFalse Is the landing a platform (i.e. an existing landing) |
HeightUpTo | ListNwlSUpTo The options for height of the top of this newel (as selected by right-clicking the newel) |
HeightDownTo | ListNwlSDownTo The options for height of the bottom of this newel (as selected by right-clicking the newel) |
Floats | TrueFalse Is the newel a floating newel (as opposed to a newel integrated with the stair) |
Newel Outside Landing
Also see PropertyNamesNewelAll under the Common Properties heading (below).
Only the outside landing (i.e. wallside) newels of a corner unit pass through this filter (provided they are not the top or bottom newel of the stair)
PROPERTY | OPTIONS / EXPLANATION |
---|---|
NewelPosition | ListNwlPosNotTopBot The position of this mid newel |
Situation | ListNwlSituationNotTopBot What the rail does at this mid newel |
IsPlatform | TrueFalse If the landing a platform (i.e. an existing landing) |
HeightUpTo | ListNwlSUpTo The options for height of the top of this newel (as selected by right-clicking the newel) |
HeightDownTo | ListNwlSDownTo The options for height of the bottom of this newel (as selected by right-clicking the newel) |
Floats | TrueFalse Is the newel a floating newel (as opposed to a newel integrated with the stair) |
Newels All
Also see PropertyNamesNewelAll under the Common Properties heading (below).
All newels pass through this filter
PROPERTY | OPTIONS / EXPLANATION |
---|---|
IsStairNwl | TrueFalse True if the newel is part of the stair (as opposed to the balcony) |
IsStairNwlCntr | TrueFalse True if an inside corner newel of stair |
IsVoluteNwl | TrueFalse True if the newel is part of the stair (as opposed to the balcony) |
IsMidNwl | TrueFalse True if the newel is along a string (as opposed to the ends of a string) |
IsBottomNwl | TrueFalse True if the newel is at the very bottom of the stair. |
IsTopNwl | TrueFalse True if the newel is part of the stair and at the top of the stair where it meets the balcony. |
Risers
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
SawtoothInside | ListSawtoothType The type of sawtooth (if any) in the inside (tenonside) end. |
SawtoothOutside | ListSawtoothType The type of sawtooth (if any) in the outside (wallside) end. |
NoseType | ListRadiusType2 Straight, Curved or Angled |
IsWinder | TrueFalse Is this riser part of a winder tread |
BullSides | Integer 1 if one side of riser is bullnose, 2 if both sides |
CarpetWedges | TrueFalse True if this riser has a carpet wedge |
StringStyle | ListStyles The style name of the TENON strings as shown in the Components window. |
TreadCount | Integer Total treads in the unit |
ThisTreadId | Integer The tread id within this unit (from the bottom) |
Shoerail
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
SituationStart | ListRailEnd The situation at the start of the wallrail/shoerail |
SituationEnd | ListRailEnd The situation at the end of the wallrail/shoerail |
RadiusType | ListRadiusType1 (Auto-filter) Is the wallrail/shoerail straight or curved |
IsRaked | TrueFalse True if wallrail/shoerail is raked (otherwise wallrail/shoerail is level) |
PlowWidth | Dimension The width of the plow (zero if no balusters or pin-top or round balusters). Applies only to ShoeRail. |
IsPlatform | TrueFalse True if there is shoerail sitting on a platform (without skirt). It may be useful to branch the shoerail off to a Balconyplate filter, etc. |
Goings | Integer How many goings (tantamount to ‘treads’ for a straight unit) in the horizontal length of this shoerail. See Handrail. |
StyleBaluster | ListStyles The style of the baluster (from the Components window) |
StyleClassBaluster | ListStyleClass The Style Class of the baluster (from the Components window) |
IsSawtoothShoerail | TrueFalse True if the shoerail has ‘Sawtooth’ ticked in the Style window (the shoerail mitres down each tread and riser of a sawtooth string). |
Sidenoses
Each sidenose in the job’s design runs through this filter.
Note that sidenoses do not have their own category in the Components window (except for filters). They are turned on with the “Sidenoses” checkbox next to the treads category. They take their Timber, Style and Depth from the treads selection.
Filtering for sidenoses may be done in their own filter, or may be done in the Treads and Landings filters (there is generally enough information about sidenoses to do so).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Hand | ListHand Whether the side nose is on the left or right of the stair (going up) |
RadiusType | ListRadiusType2 The type of radius on the side nose (Straight, Curved or Angled) |
NoseType | ListRadiusType2 The type of radius on the nose of the tread (Straight, Curved or Angled) |
Run | Integer Only applies to straight flight treads (winders will return zero). |
ThisTreadId | Integer The id of this tread within the unit (going up). |
TreadNum | Integer The id of this tread within the entire stair (going up or going down, depending on your “Tread Numbers Top Down” setting in the Preferences window). |
HasCurve | TrueFalse Does this sidenose have a curve. |
UnitCurveType | ListUnitCurveType The curve type of the unit (No Curve, Circular L, Circular R etc.). |
Outstep | TrueFalse Does this sidenose belong to an Outstep. |
DoglegCount | Integer If there is a dogleg in this sidenose, returns 1, otherwise returns zero. |
Irregular | TrueFalse Returns False if the sidenose is straight (no curve) and is 90 degrees to the nosing, otherwise returns True |
IsTread | TrueFalse Returns True for straight unit treads and outsteps. Returns False for a winder tread |
Stair
Each stair in the job’s design runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Dispatch | ListDispatchMode How the job will be dispatched - Pickup, Deliver or Install (as shown in the Details window) |
ClassStair | ListStairClasses The class of the stair (as shown by right-clicking a stair template in the Stair Templates mode of the Design window, or the job’s stair in the Stair Design mode of the Design window). |
UnitCount | Integer How many units in the stair |
RiserCount | Integer How many risers in the stair |
TreadCount | Integer How many treads in the stair (not including the outstep). |
StringTimberClass | ListTimbClass The string timber class (from the Timbers window) associated with the timber as shown in the Components window. Applies to the tenon string only. |
TreadTimberClass | ListTimbClass The tread timber class (from the Timbers window) associated with the timber as shown in the Components window |
SplitQuote | TrueFalse Is the quote split into Stair and Balustrade (according to the Process window) |
ActiveStair | TrueFalse Is the stair active as per check-box in Process window |
ActiveBalustrade | TrueFalse Is the balcony active as per check-box in Process window |
StringStyle | ListStyles The style name of the TENON strings as shown in the Components window. |
Strings
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
StringType | ListStringType Type of string (tenon, skirt only etc.) |
SandString | TrueFalse Is the string sanded (as selected by right-clicking the string) |
RadiusType | ListRadiusType2 Is the string Straight, Curved or Angled |
TreadCount | Integer The number of straight-flight treads on this string (landing treads are deliberately ignored and should be dealt with separately). Note that the TreadCount in a Strings filter includes partial treads (e.g. a partial tread at a dog-leg) so use with caution in this category. |
RiserCount | Integer Total risers in this string (always one more than the TreadCount). |
IsOpenRise | TrueFalse Are the treads open rise |
IsSawTooth | TrueFalse Is the string sawtooth |
HiJoinIsHockey | TrueFalse Doe the high end of this string form a hockey string join with the string above it |
SelfSupport | TrueFalse True if this string is self supporting |
Curved | TrueFalse True if any part of the string is curved |
CarriageString | TrueFalse True if the string is a Carriage string (centre supporting string) |
DoglegOffset | Dimension The distance between the two main strings (i.e. the length of the dogleg). For strings, this property is non-zero only for the string below a dogleg – all other strings will return zero for this property. |
UnitType | ListUnitType The type of unit - corner, straight or in-line landing |
IsStringNewel | TrueFalse If there is a U-Shape stair with a short landing string between the tenonside straight-flight strings, and you have selected “String Newel” for this string, this returns True, otherwise returns False. |
FirstBoard | TrueFalse If a string is made up of multiple boards (because of glue-up), each board goes through the filter. Only the first board of a string will have this property = True. This allows you to intercept just once for each string. |
Side | TenonSide/WallSide The theoretical side of the stair. |
CornToStrait | TrueFalse Is this a corner unit string (not skirting) joined to a straight unit string (above or below) but not as a hockey join. |
Treads
Also see PropertyNamesStylesAll under the Common Properties heading (below).
Each tread in a straight unit runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
SawtoothInside | ListSawtoothType The type of sawtooth (if any) on the inside (tenonside) end. |
SawtoothOutside | ListSawtoothType The type of sawtooth (if any) on the outside (wallside) end. |
SawtoothLeft | ListSawtoothType The type of sawtooth (if any) on the left end of the tread (going up). |
SawtoothRight | ListSawtoothType The type of sawtooth (if any) on the right end of the tread (going up). |
SawtoothSides | Integer No sawtooth = 0; sawtooth one side = 1; sawtooth both sides = 2. |
SawtoothSidesDesc | ListSawtoothSidesDesc None, Left, Right or Both |
RadiusTypeInside | ListRadiusType2 Is the inside (tenonside) of the string straight, curved or angled |
RadiusTypeOutside | ListRadiusType2 Is the outside (wallside) of the string straight, curved or angled |
NoseType | ListRadiusType2 Are the tread nosings in contact with the string straight, curved or angled |
IsOpenRise | TrueFalse Are the treads in contact with the string open rise (otherwise closed rise) |
SideNoseCount | Integer If there is a sawtooth with side nosing on one end, this equals 1. If there is a sawtooth with side nosing on both ends, this equals 2 . |
SideNose | ListSideNose (Auto-filter) None, Left, Right, Both. |
TreadProtection | TrueFalse Is the Tread Protection checkbox in the Job Details window ticked. |
RiserTimber | ListTimbers The timber of the riser associated with this tread. |
StringTimber | ListTimbers The timber of the string associated with this tread. |
BullSides | Integer How many ends of this tread has a bullnose (0,1 or 2). |
Run | Dimension The going of the tread at the walkline. |
TreadNum | Integer The id of this tread within the entire stair (going up or going down, depending on your “Tread Numbers Top Down” setting in the Preferences window). |
ThisTreadId | Integer The id of this tread within the straight unit (going up). |
IsBottomTread | ListTrueFalse True if the tread is the bottom tread in the unit (not necessarily the stair). |
IsTopTread | ListTrueFalse True if the tread is the top tread in the unit (not necessarily the stair). |
SplayedRise | ListTrueFalse True if the riser is splayed. |
SafeBarRiser | ListTrueFalse True if the riser is a SafetyBar in an open riser stair. |
UnitType | ListUnitType The type of unit - corner, straight or in-line landing |
CurvedString | ListTrueFalse True if the tread nose intersects a curved part of a string on either side. |
StgAngleIS | Integer The angle of the tenonside string (expressed as an integer) relative to the zero angle of the UNIT (not the stair). |
StgAngleOS | Integer The angle of the wallside string (expressed as an integer) relative to the zero angle of the UNIT (not the stair). |
UnitCurveType | ListUnitCurveType The curve type of the unit (No Curve, Circular L, Circular R etc.). |
IsTread | ListTrueFalse True if the item going through the filter is a Tread, BullTread or Outstep. Useful when you branch other items to the Treads filter. |
DoglegCount | Integer How many cranks in the ends of this tread (i.e. when the tread end is not a single straight line or arc). Notching for newels does not qualify as a crank. |
Irregular | ListTrueFalse True if this tread is anything other than a right-angled rectangle (a regular dog-leg does not qualify as irregular) |
IsOutstep | ListTrueFalse True if the item going through the filter is an Outstep. Useful when you branch Outsteps to the Treads filter. |
StringStyle | ListStyles The style name of the TENON strings as shown in the Components window. |
Unit
Each unit of each stair in the job’s design runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Dispatch | ListDispatchMode How the job will be dispatched - Pickup, Deliver or Install (as shown in the Details window) |
ClassUnit | ListUnitClasses The class of this unit (as shown by right-clicking a unit template, or an actual unit in a stair, both in the Stair Design mode of the Design window). |
UnitType | ListUnitType The type of unit - corner, straight or in-line landing |
TreadCount | Integer How many treads in this unit |
RiserCount | Integer Total risers in this corner unit (always one more than the TreadCount). |
IsMDF | TrueFalse Are the treads in this unit MDF |
SawtoothInside | ListSawtoothType The type of sawtooth (if any) in the inside (tenonside). |
SawtoothOutside | ListSawtoothType The type of sawtooth (if any) in the outside (wallside). |
IsOpenRise | TrueFalse Is the rise open (is the riser board excluded) |
RadiusTypeInside | ListRadiusType2 Is any inside (tenonside) string of the unit Curved or Angled |
RadiusTypeOutside | ListRadiusType2 Is any outside (wallside) string of the unit Curved or Angled |
NoseType | ListRadiusType2 Is any tread of the unit Curved or Angled |
IsHalfLanding | TrueFalse Is this unit part of a half landing (i.e. is there another corner unit above or below this corner unit and total treads for both units = 1) |
IsDogLegInside | TrueFalse Does the inside have a dogleg; applies only to straight |
IsDogLegOutside | TrueFalse Does the outside have a dogleg; applies only to straight |
DoglegOffset | Dimension The distance between the two main strings (i.e. the length of the dogleg). Zero if no dogleg. If dogleg both sides, returns the offset for the tenonside only. |
DoglegOffset | Dimension The distance between the two main strings (i.e. the length of the dogleg). Zero if no dogleg. If dogleg both sides, returns the offset for the tenonside only. |
SplitQuote | TrueFalse Is the quote split into Stair and Balustrade (according to the Process window) |
ActiveStair | TrueFalse Is the stair active as per check-box in Process window |
ActiveBalustrade | TrueFalse Is the balcony active as per check-box in Process window |
RiserTimber | ListTimbers The riser timber as shown in the Components window |
StringTimber | ListTimbers The string timber as shown in the Components window. Applies to the tenon string only. |
TreadTimber | ListTimbers The tread timber as shown in the Components window |
StringTimberClass | ListTimbClass The string timber class (from the Timbers window) associated with the timber as shown in the Components window. Applies to the tenon string only. |
TreadTimberClass | ListTimbClass The tread timber class (from the Timbers window) associated with the timber as shown in the Components window |
StringStyle | ListStyles The style name of the TENON strings as shown in the Components window. |
Wallbrackets
Each wallbracket runs through this filter.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Style | ListStyles (Auto-filter) The style of the wallbracket |
RailStyle | ListStyles The style of the handrail |
Wallrail
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
SituationStart | ListRailEnd The situation at the start of the wallrail/shoerail |
SituationEnd | ListRailEnd The situation at the end of the wallrail/shoerail |
RadiusType | ListRadiusType1 (Auto-filter) Is the wallrail/shoerail straight or curved |
IsRaked | TrueFalse True if wallrail/shoerail is raked (otherwise wallrail/shoerail is level) |
PlowWidth | Dimension The width of the plow (zero if no balusters or pin-top or round balusters). Applies only to ShoeRail. |
Goings | Integer How many goings (tantamount to ‘treads’ for a straight unit) in the horizontal length of this wallrail. See Handrail. |
Walltrim
Also see PropertyNamesStylesAll under the Common Properties heading (below).
PROPERTY | OPTIONS / EXPLANATION |
---|---|
RadiusType | ListRadiusType1 Is the walltrim straight or curved |
IsRaked | TrueFalse True if walltrim is raked (otherwise walltrim is level) |
Goings | Integer How many goings (tantamount to ‘treads’ for a straight unit) in the horizontal length of this walltrim. See Handrail. |
# Common Properties
All categories | |
---|---|
'#' | Integer Enter a number in each row of this column to override the StairBiz logical row sequence – StairBiz will sort the rows based on the sequence of these numbers. See Overriding Logical Row Sequence. |
FirstItem | See First item through filter. |
*Tag | Anything (max 9 chars) This property holds whatever value you set for it using the ResultTag result. See above: Auto-Filters/ *Tag – a wild-card auto-filterable property |
*SiteZip | The zip code of the site as shown in the Site window. |
*ClientIsOwner | “Yes” or “No” depending on the Client Is Owner checkbox in the Client window. |
%Anything | A property prefixed with a “%” means that it is one of the fields you have created in the MyData window. The value of the property is however you have set it. All MyData fields are available to all categories of the filters. |
+Anything | A property prefixed with a “+” means that it is one of the tags you have created in the Custom Tags window. The value of the property is however you have set it. All Custom Tags are available to all categories of the filters. |
PropertyNamesNewelAll
In addition to the properties for newel categories shown above, all newel categories share the following properties.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
Style | ListStyles (Auto-filter) The style of this newel |
StyleClass | ListStyleClass The StyleClass for this item (see Styles window) |
Timber | ListTimbers (Auto-filter) The timber of this newel |
TimbClass | ListTimbClass The class of the timber of this newel (see Timber Class in the Timbers window) |
IsMDF | TrueFalse Is the newel timber MDF |
IsOTP | TrueFalse Is the newel a pin-top (through fittings) |
Width | Dimension (Auto-filter) The width of the newel |
Depth | Dimension (Auto-filter) The depth of the newel |
Length | Dimension (Auto-filter) The length of the newel |
FlatLength | Dimension (Auto-filter) The length of the upper flat (zero if none) |
TurnLth | Dimension (Auto-filter) For an OTP newel, the length of the main turning. For a PTP newel, the distance from the TOP of the upper flat to the bottom of the main turning (zero if no turning). Note that we work from the top of the flat rather than the bottom because it aids in auto-filtering. |
BotFlatLth | Dimension The distance from the bottom of the main turning to the bottom of the newel (zero if no turning) |
TreadContacts | Integer How many treads are in contact with this newel such that the newel requires the tread to be notched (applies only if the newel does not float and is not balcony). Also see NosesAtNewel. |
NosesAtNewel | Integer How many tread nosings are in contact with this newel (applies only if the newel does not float and is not balcony). The minimum count for a stair newel is one (there are times when a tread passes straight through a newel, with no nose exactly at the newel – this will return “1” none-the-less). A top newel will generally be “1” (because there is one nosing – the landing nosing), whereas the TreadContacts property would have returned “2” here. |
AcornStyle | ListStyles The style of the acorn, provided that an acorn is selected in the Acorns list in the Components window and an acorn is not specified in the Styles window for the newel. |
RailAtNewel | Describes what the handrail is doing at each newel. Options are: RailEnd rail on one side only RailThru rail on both side RailNone no rail Also see next heading. |
RailAtNewel2 | Describes what the handrail is doing at each newel. Options are: LevelEnd level rail, one side only LevelThru level rail, both sides, in-line Level90 level rail, both sides of corner RakeEnd raked rail, one side only RakeThru raked rail, both sides, in-line Rake90 raked rail, both sides of corner RailCombo level on one side and rake on the other; angle is not considered RailNone no rail |
RailAtNewel3 | This is the same as RailAtNewel2 (above) except that LevelEnd and RakeEnd are divided up into LevelStart/LevelEnd or RakeStart/RakeEnd. This can be useful for allocating fittings which might be only on the start of a handrail, only on the end of a handrail or only on throughs (e.g. cable tensioners, end studs and grommets). |
StyleBaluster | ListStyles The style of the baluster (from the Components window). Shows "[None]" if a baluster style is not selected. |
StyleHandrail | ListStyles The style of the handrail (from the Components window). Shows "[None]" if a handrail style is not selected. Whether or not there is any handrail selected above or below the relevant newel is not considered. |
PropertyNamesStylesAll
In addition to the properties for style categories shown above, all style categories share the following properties.
PROPERTY | OPTIONS / EXPLANATION |
---|---|
IsPart | TrueFalse Is this component a Part, as indicated in the Style window. If it is not a Blank, IsPart = True. Note: for Auto filters, to distinguish between a part that is “Part from Filter” and “PartIs” (see the Style window), you can do something like not indicate the Style of that part in the Parts window. Thus if a “PartIs” component comes through the filter (which it may) and the filter sends it on to the Parts window for auto filtering, it simply won’t be found. |
Style | ListStyles (Auto-filter) The style of this component |
StyleClass | ListStyleClass The StyleClass for this item (see Styles window) |
Timber | ListTimbers (Auto-filter) The timber of this component |
TimbClass | ListTimbClass The class of the timber of this component (see Timber Class in the Timbers window) |
IsMDF | TrueFalse Is the component’s timber MDF |
Width | Dimension (Auto-filter) The width of the newel |
Depth | Dimension (Auto-filter) The depth of the newel |
Length | Dimension (Auto-filter) The length of the newel |
# Lists
The following is further explanation of the lists referred to above (i.e. options that begin with the word “List …”). ListBullClasses Lists all bullnose classes in Bullnose Templates
ListDispatchMode | |
---|---|
PickUp | The client will pick the stair up from the shop |
Deliver | We deliver the stair to the client, but do not install |
Install | We deliver and install the stair |
ListFittingTypes
See the Fitting Types heading under Handrail Fittings for a full discussion. They are the same as the fitting options selectable in the Elevations pane of the Design window of a job.
ListFilletType | |
---|---|
ForHandRail | The fillets are for handrail |
ForBalconyPlate | The fillets are for balconyplate |
ForShoeRail | The fillets are for shoerail |
ListHand | When walking up the stair |
Left | Turns left, or is on the left |
Right | Turns right, or is on the right |
ListHandOrBoth | When walking up the stair |
Left | Is on the left |
Right | Is on the right |
Both | Is on the left and right |
ListLandingType | |
---|---|
Corner | A corner unit |
MidLanding | A straight unit (used as an in-line landing) |
ListNewelTypes | |
---|---|
None | There is no selected newel at this junction |
OTPNwl | The newel is over the post |
PTPNwl | The newel is post to post |
ListNwlBotStartType |
---|
The handrail fitting at the bottom newel (See definitions in “ListFittingTypes”) |
BullTurn |
BullTurnUpEase |
NewelBlock |
OpeningCap |
ReturnEnd |
StartEase |
StartEaseCap |
Terminate |
Turnout |
UpEase |
Volute |
ListNwlPosNotTopBot
The position of the mid newel (any newel not top, bottom or balcony)
CornerLo |
CornerHi |
CornerCorner |
UserMid |
StaightJoin |
ListNwlSituationNotTopBot
What the rail does at the mid newel (any newel not top, bottom or balcony)
RailThrough | Handrail on both sides of the newel |
RailHiTerminate | Hi-side handrail terminates (there is no lo-side handrail) |
RailLoTerminate | Lo-side handrail terminates (there is no hi-side handrail) |
RailNone | No handrail either side |
ListNwlSizeType
Full | The newel is a full newel |
ThreeQuarter | The newel is a 3/4 newel |
Half | The newel is a half newel |
Special | The newel is none of the above |
ListNwlSUpTo
The options for height of the top of a stair newel (right-click the newel)
NormalHeight | The height of the newel is normal |
UpToCeiling | The newel goes up to the ceiling below the upper floor level |
UpToFloor | The newel goes up to the upper floor level |
UpToStringTop | The newel goes up to the top of the string |
UpToUnderLNose | The newel goes up to the underside of the OutStep (top newel only) |
UpToInput | The newel goes up to some user-specified dimension |
ListNwlSDownTo
The options for height of the bottom of a stair newel (right-click the newel)
DownToFloor | The newel goes down to the floor |
DownToStgBottom | The newel goes down to the bottom of the string |
DownToLandingTop | The newel goes down to the top of the landing (landing newels only) |
DownToInput | The newel goes down to some user-specified dimension below the lowest string |
ListNwlRUpTo
The options for height of the top of a balcony newel (right-click the newel)
NormalHeight | The height of the newel is normal |
UpToInput | The newel goes up to some user-specified dimension |
ListNwlRDownTo
The options for height of the bottom of a balcony newel (right-click the newel)
DefaultBottom | The newel goes down to floor, or below floor, whichever is the default |
DownToFloor | The newel goes down to floor |
DownToCeiling | The newel goes down to ceiling below the floor |
DownToPlate | The newel goes down to the top of the balcony plate |
DownToInput | The newel goes down to some user-specified dimension |
ListRailEnd
What the handrail does at this location
Fitting | The handrail runs into a fitting |
Newel | The handrail runs into a PTP newel |
Mitre | The handrail runs into an adjacent handrail using a mitre |
Nothing | The handrail simply terminates |
ListRadiusType1
Curve3D | A curve (plan view) and a rake (elevation view) |
Curve2D | A curve (plan view), but no rake (elevation view) |
Straight | No curve |
ListRadiusType2
Straight | Straight, and angled at 0, 90, 180 or 270 degrees |
Angled | Straight, and angled at other than 0, 90, 180 or 270 degrees |
Curved | Curved |
ListSawtoothType
NotSawtooth | This end of the tread/rise is not sawtooth |
SawtoothMitreFret | Sawtooth and the riser mitres a fret |
SawtoothMitreStg | Sawtooth and the riser mitres the string |
SawtoothNoMitre | Sawtooth and the riser is cut square |
ListSituationRNwl
Applies to balcony newels
RailThrough | There is balcony handrail on both sides of this newel |
TerminateStair | There is balcony handrail on one side of this newel, and the stair is on the other side. |
TerminateWall | There is balcony handrail on one side of this newel, and nothing on the other side. |
ListStairClasses
Lists all stair classes in Stair Templates
ListStringType
The side of the stair of this string
Straight | A straight flight string |
Corner | A corner unit string |
SkirtOnly | No string, but skirt in its place |
SkirtBearerOnly | No string, but skirt and bearer in its place |
ListStyles
Lists the relevant styles from the Style Defaults window
ListTimbClass
Lists all timber classes from the Timbers window
ListStyleClass
Lists all style classes from the Styles window
ListTimbers
Lists the relevant timbers from the Timbers window
ListUnitClasses
Lists all unit classes in Unit Templates
ListUnitTypeOrNone
None | The unit referred to does not exist (e.g. no unit above this unit) |
Corner | The unit referred to is a corner unit |
Straight | The unit referred to is a straight unit |
MidLanding | The unit referred to is a straight unit (used as an in-line landing) |
ListUnitType
Corner | A corner unit |
Straight | A straight unit |
MidLanding | A straight unit (used as an in-line landing) |
# Are filters saved with each job?
All defaults used to create and process a job are saved with that job, EXCEPT for the Parts and Labour filters. This is because the filters are too bulky to save with every job.
When you open a job, StairBiz checks to see if the filters used at the time the job was saved exist in the Defaults database of the computer opening the job. If not, it may cause StairBiz to calculate the parts and labour for the job being opened differently to how it was calculated at the time the job was last saved. This is one reason why locking a final Quote is critical.
On opening the job, if there are any differences, StairBiz will alert you with the following message:
The following filters were valid when the job was saved.
They no longer exist in your Defaults database
They are suffixed with an asterisk in the relevant window.
This is an alert - it is not necessarily an error.
This can happen if all computers on your StairBiz network are not using the same Defaults database.
It can also happen if you delete filters, then open a job which used those filters.
If you get this message, if the message is unexpected and if the job is active it may be prudent to investigate.
Note that StairBiz does not compare the contents of filters when determining if they are the same as when saved - it first looks for the filter's ID (a special identification number) and if no such filter is found it can then search by Filter Name (within that category).
You can turn off the alert (you always lock your quote, right!). Go to:
Defaults menu > Miscellaneous > Alerts category > When opening job check filters