<< Why wouldn’t I want to use the before generate eep to employ code and multiple-table SELECTs rather than build a long list of report expressions? >>
No reason at all. As you know, this kind of in-report code execution was only added relatively recently in the history of R:Base. Report expressions are there for backward compatibility and are still easier to use for simple lookups, but for "complex" stuff, much better to put it in code. I prefer to keep the logic out of the report entirely if I can. In the case you described (three side-by-side addresses with varying numbers of lines), I would use my FormatAddress() stored procedure (which returns a NOTE field with no blank address lines). I would either do three simple lookups in the report's expression list (or the before generate for the page header if you prefer), or else I would include the stored procedure calls in a view definition and base my report on that view. -- Larry

