====================================================================== COMPRESS BLANK LINES OUT OF FORM LETTER HEADERS ====================================================================== PRODUCT : R:BASE, PRB VERSION : 2.11,3.1 or Higher CATEGORY : REPORTS SUBCATEGORY : BLANK LINES ====================================================================== From Joe Howard, Microrim Technical Support Specialist R:BASE 3.x made printing labels easy with its built-in ability to compress out blank lines. Nevertheless, as a technical support veteran I am repeatedly asked how to do the exact same thing for the header information in a form letter. Past issues of the R:BASE EXCHANGE have discussed a technique for compressing out blank lines in a report that prints 4-across labels, but these articles did not mention form letters in particular. The concept is the same, but the routine has been changed to work with form letters. To begin, you must determine what data you want to display in the header. To illustrate, let's use a fictitious database with a table called client. These are the pertinent columns in client: Colname Type Size -------- ------- ---- clnumber INTEGER clname TEXT 25 company TEXT 40 address1 TEXT 35 address2 TEXT 35 city TEXT 20 state TEXT 2 zipcode TEXT 10 After you have identified the columns that will appear in the header section of the form letter, identify the length of the longest item. In this example, company is a TEXT column of length 40. We also know that the header will contain six lines. On the basis of that information, we will build a long, 240-character (6 * 40) text variable with the client's name in the first 40 characters, the company name in the second 40 characters, and so on. When we locate this variable on the report, we will wrap it at 40 characters and mark it down six lines. What causes the compression of blank lines? In the process of putting these values into the long text string we use a function called Left Justify (LJS). This function compresses out null values. That's the concept behind this process. Now let's put it to work. In designing the report that will print your form letter, you will probably want to print one client per page. To do this you will need to establish a break point on the column named clnumber (client number, a unique identification for each client). On the Reports menu under Layout, choose the Create Breakpoints option. Also add a form feed after the break. The expressions (or variables) are vital in this process. Following are the expressions used in this example: vcsz text = (city + ',' & state & zipcode) vline1 text = ((ljs(clname,40))+company) vline2 text = ((ljs(.vline1,80))+address1) vline3 text = ((ljs(.vline2,120))+address2) vline4 text = ((ljs(.vline3,160))+.vcsz) vline5 text = ((ljs(.vline4,200))+(ctxt(clnumber))) The first line in the expression list combines the city, state, and ZIP code. The following lines use the LJS function to build the long variable vline5 . The second parameter in the LJS function increases by 40 each time. This is because our largest field is 40 characters wide and as we build the long variable, the size increases by 40. The last expression uses the CTXT function to convert the integer value, clnumber, into a text value so that it can be concatenated to the variable. The variable vline5 is the variable that contains the final results and is located on the report. Because we have a breakpoint, we want the information to be printed on either break header lines (H1...H10) or break footer lines (F1...F10). To locate the variable, place the cursor on the line you want to start the header information and press F6. Then enter vline5 into the dialog box that requests the column or variable name to locate. Now press S to start the location, then move over exactly 40 characters by using the right arrow key. Press W to denote a wrapping text field, then move down six lines by using the down arrow key. Press T to stop (or truncate) the field at this point, and press Escape when prompted to press I for indentation. In effect, you are creating a box that has a width of 40 and a height of 6.