DOCUMENT #770
     ===========================================================================
     MULTIPLE REGIONS ON A FORM
     ===========================================================================
     PRODUCT:  R:BASE                           VERSION:  4.5+ or Higher
     ===========================================================================
     CATALOG:  Forms, Reports & Labels          AREA   :  Forms
     ===========================================================================
 
     It is often difficult to set up a form with multiple regions to make data
     entry easy. Generally the desired form set up to enter a row into table 1,
     enter a row into table 2, enter multiple rows into table 3, enter another
     row into table 2 and then more rows into table 3. This data entry sequence 
     was difficult in versions of R:BASE prior to 4.5 Plus!. You didn't have the
     capability to move backwards a table in a form (the new Shift-F7 or 
     Previous table). You could circle around and often lost the linking column 
     information.
 
     You can just use the Shift-F8 and Shift-F7 keys, but instead of having your
     users press keys to move between regions, the movement is transparent using
     EEPs. This article shows two different ways to enter data in this sequence.
     One technique uses a form-in-a-form to enter data into the second region 
     (table 3); the other uses the new EEP commands NEXTTAB and PREVTAB to move 
     between the regions. The regions operate more like single table forms in 
     that pressing [Enter] on the last field in a row takes you to the next 
     table. Users don't need to remember particular keystrokes. Also, these 
     techniques leave the user on the next row in region 1 (table 2) ready to 
     enter data, not on the same row as when using Shift-F7 and Shift-F8.
 
 
     Using a form-in-a-form
 
     Using a form-in-a-form to move between regions makes use of what is called 
     a "windowed" form. The second region is a second form that has no text, 
     just located fields. It is displayed on top of the other form at the same 
     location where you would normally have placed the second region. 
 
     You need to make two forms for this procedure: a two table form and a one 
     table form. The first form or calling form is the two table form. It has 
     the first table, the one that isn't a region, and the second table, the  
     first region. Design it to leave room for the display of the second form 
     and region. The second form is designed using some special techniques so
     it can be displayed on top of the other form. 
 
     The EEP is really very simple. Most of the work is done by the forms. We
     trap for the [Esc] key or the [Alt] keys; we don't want to execute the  
     second form when the user goes to the menu. The EEP is placed as a table 
     level EEP on table 2, the first region. Place it After saving a row. 
 
     *(REGION2.EEP)
     SET VAR vkey = (LASTKEY(0))
     IF vkey = '[Esc]' THEN
        RETURN
     ENDIF
 
     ENTER region2 AT 17
     SCREEN RESTORE OFF
 
     When you use the form, pressing [Enter] on the last field of a row in  
     region1 will save the row and then execute the EEP. The second form will
     be displayed, to the user it looks like a single form. Use Esc to leave the
     second form. Esc will automatically return you to the second table/region 1.
     You can add an EEP to the second form to trap for various keystrokes, but 
     it's not necessary. 
 
     Form expressions are needed to transfer the linking column data between the
     two forms. In form1 add an expression, vlink = linkcol, add the expression
 
     linkcol = .vlink to form2. 
 
     Using NEXTTAB and PREVTAB
 
     Again we need to trap in the EEPs for the keys that take a user to the 
     menu. We don't want to execute the rest of the EEP code in those situations.
     These are table level EEPs. The EEPs are placed After saving a row. Because 
     you are staying in a single form no expressions are needed to transfer 
     values between forms. The first EEP is placed on the first region After 
     saving a row.
 
     *(NEXTTAB.EEP)
     SET VAR vkey = (LASTKEY(0))
     IF vkey <> '[Esc]' THEN
       NEXTTAB
     ENDIF
 
     The second EEP is placed on the second region, After saving a row. After  
 
     each row is entered in the second region, the EEP asks if the user wants 
     to add another row. This is easier than trapping keystrokes.
 
     *(PREVTAB.EEP)
     SET V vkey = (LASTKEY(0))
     SWITCH (.vkey)
     CASE '[Esc]'
     CASE '[Alt]%'
       RETURN
       BREAK
     CASE '[enter]'
     DIALOG 'Add another row?' vresp vendkey YES
       IF vresp = 'yes' THEN
         RETURN
       ELSE
         PREVTAB
       ENDIF
       BREAK
     CASE DEFAULT
        BREAK
     ENDSW
     RETURN
 
     Using these EEPs, users move transparently between two regions on a form  
 
     making for easy data entry.