Zum Verständnis von Relationen: Es gibt eine Tabelle mit einem Feldwert, der Index in einer anderen Tabelle ist. In Deinem Fall gibt es "BILLNO" in der Invoice-Tabelle und einen entsprechenden Index in der Positionendatei. Wenn Du jetzt die Relation so setzt, wie Du das getan hast, würde jede Navigation in der
Auftragsdatei automatisch eine Bewegung in der Positionendatei verursachen - aber nur eine, denn es gibt keinen Grund, sich in der Positionendatei zu bewegen.
Umgekehrt wird ein Schuh draus: Du suchst (oder setzt einen Scope) auf die "BILLNO" in der Positionendatei, die eine Relation auf die Auftragsdatei hat. Dadurch stehst Du mit jeder Bewegung in der Positionendatei automatisch auf dem richtigen korrespondierenden Datensatz in der Auftragsdatei, aber Du musst in der Positionendatei (!) navigieren.
Ungetestet:
Code: Alles auswählen
nBillNo := 9800504 // Beispiel
Use Invoice NEW
INDEX ON BILLNO TO BILLNO
SET INDEX TO BILLNO
Use Items NEW
INDEX ON BILLNO TO InvoiceNO
SET INDEX TO InvoiceNO
SET RELATION TO BILLNO INTO Invoice
DbSetScope(SCOPE_BOTH,nBillNo)
DO WHILE !Eof()
? Invoice->BILLNO , ;
Invoice->STREET , ;
Items ->ARTICLENO , ;
Items ->PRICEPP
DbSkip(1)
ENDDO