======================================================================
FORMATTING IN FORMS
======================================================================
PRODUCT: R:BASE VERSION : 4.0
AREA : FORMS CATEGORY: VIEWS DOCUMENT#: 653
======================================================================
In R:BASE 4.0 you can use the new format masks, the FORMAT function,
and the FLOAT and INT functions to solve the annoying display problems
associated with entry forms.
Format Masks
============
Format masks work on text fields only. They allow you to specify
characters such as dashes that are automatically placed in position
in the field and to require entry of only specific characters such
as numbers.
To assign a format mask, choose Field settings for the field requiring
the format mask and answer YES to the question "Do you want a default
value or a format mask?" Then enter the desired format mask, which must
start and end with a square bracket as shown below:
<> [999-99-9999] automatically inserts dashes in Social Security
numbers.
<> [(999)999-9999] separates an area code from a telephone number
with parentheses.
<> [99999] specifies that only numbers can be entered. When you use
this format mask, particularly handy for ZIP code fields, you
must include the entire field length within the brackets. R:BASE
does not allow entry of anything other than numbers. No error
message is displayed if the user tries to enter other characters,
but nothing is placed in the field.
<> [________] or [%%%%%%%%] for the length of the text field ensures
that all letters in the field are uppercase.
<> [||||||||] or [????????] for the length of the text field ensures
that all letters in the field are lowercase.
<> [_|||||||] or [%???????] for the length of the text field ensures
that the first letter in the field is capitalized.
<> For long text fields you might want to define an expression using
one of the Supermath functions LUC, ULC, ICAP1, ICAP2 to do all
uppercase, all lowercase, or capitalization.
Formatting Non-text Fields
==========================
Even though you can specify a format mask only on a text field, you can
make it appear to the user as if you are formatting currency, double,
or integer data. To use with non-text data types, define expressions in
the form to convert the non-text data to text and then back to its
original data type.
Specify the Number of Decimal Places
====================================
Add these two expressions in this order to your form to convert the real
or double column to text and back:
colname = (FLOAT(.varname))
varname = (CTXT(colname))
The variable is located on the form with the desired format mask. For
example, [99999.99] or [0.990] automatically inserts leading zeroes.
The form expressions convert the number to text for use with the format
mask and back to a floating-point value for storage in the table. The
expressions must be in the order shown, with the column expression first.
The variable must be defined first as a TEXT datatype.
Right Justify Currency Values in Forms
======================================
Format masks cannot be used to justify or center fields - they are only
character modifiers. You can, however, use the FORMAT function (new in
R:BASE 3.1C) and the new R:BASE 4.0 cap-ability of the FLOAT function
to accept currency and text arguments to do this.
The FORMAT function converts the currency value to text and specifies
the display format. The variable is placed on the form. Then use the
FLOAT function to reconvert the edited text value to CURRENCY and store
the result in the column.
The field does not left justify for data entry. You'll need to move the
cursor over to the data to change it.
To modify tranform in the CONCOMP database so that the price and
extended price fields in the transdetail table are right justified,
add the following expressions to the form in the transdetail table in
the order shown below. Both the PRICE column and the EXTPRICE column
display as justified - both are actually located on the form as vari-
ables. Since the extprice column is a computed column, the variable
located on the form also does the computation. (See diagram below)
price CURRENCY = (FLOAT(.vprice)*$1)
vprice TEXT = (FORMAT(price,'[>$999,999,999.00'))
veprice CURRENCY = (FLOAT(.vprice)*units*$1)
vextprice TEXT = (FORMAT(.veprice,'[>$999,999,999.00'))
The expression PRICE =(FLOAT(.v-price)*$1) reconverts the text represen-
tation of the price to currency and loads the changed value into the
table. The vprice expression uses the FORMAT function to create a justi-
fied and formatted text variable to locate on the form. Be sure to
modify the field settings on vprice so you can edit the data.
Make sure the located fields (vprice, vextprice) are wide enough for
the entire format to display. In the above expressions, the field must
be 16 characters wide (one for each character of the format, including
commas and decimal point, and one extra character for the minus sign if
the number is negative).
Because vprice is used in a calculation, character modifiers (for
example, ( ) to enclose negative numbers) cannot be used as part of
the format. When the conversion from TEXT back to CURRENCY is done the
value becomes null if it contains other characters.
You can use the same technique to right justify integer or double values
or to specify a particular number of decimal places.