* When new row added, fill in Order ID and Line_ID in OrderItems table IF orderitems.order_id <1 && New item? lnNewRec = recno('orderitems') && keep track of where we are IF RLOCK('0','setup') lcKey=SETUP.orderitem && get orderitems key REPLACE SETUP.orderitem WITH lcKey+1 && create key for next time UNLOCK ELSE ?? CHR(7) && still under development WAIT WINDOW ' Could not lock setup record. Please try again. ' NOWAIT SELECT Orders RETURN .F. ENDIF REPLACE orderitems.KEY WITH lcKey && use orderitems key lnOrderID= orders.order_id REPLACE orderitems.order_id WITH lnOrderID && fill in order ID lnItem=1 && Find last item # LOCATE FOR orderitems.order_id=lnOrderID .AND. orderitems.line_id=lnItem DO WHILE FOUND() lnItem=lnItem+1 CONTINUE ENDDO GOTO (lnNewRec) REPLACE orderitems.line_id WITH lnItem && Insert item number in new record ENDIF THISFORM.REFRESH()I'm still working on improvements, most notably using a newid() function as used in the TasTrade sample database. That would remove the RLOCK() sequence and might avoid some multiuser problems I've run into.