Hallo Michael,
der Vorschlag von André ist vielleicht naheliegend, weil simpel umzusetzen, aber nur dann empfehlenswert wenn es sich um eher wenige und sich selten ändernde Daten handelt die nachzuladen sind und die Datenbanken (und Server auf denen sie liegen) sich eher langweilen.
Der Grund ist schnell erklärt: Ressourcen sind endlich, jedes erneute @DbLookup oder @GetDocField verursacht Last auf dem Server. Aus Erfahrung neigen Programmierer noch dazu gern mal ein [NoCache] als Parameter einzubauen weil es ja irgendwann (insbesondere beim Testen mit immer wieder gleichen Testdaten) den Fall gab dass das Lookup einen (alten) Wert aus dem Cache geholt hat.
Im Ergebnis funktioniert die Anwendung zwar wie sie soll aber die Bedienung und die Reaktion der Anwendungen und Masken sind zäh, bei jedem Feldwechsel kommt die Sanduhr weil auch noch in den HideWhen-Formeln weitere @DbLookup's stecken. Letztendlich leidet die Akzeptanz darunter erheblich.
Um zum Ursprung zurück zu kommen: Deine Frage war schon ganz richtig formuliert, wenn man schon mehrere Werte auf einen Schlag holen und verteilen kann ist das immer der (ressourcentechnisch) bessere Weg.
Sehr viel musst du dafür gar nicht ändern, du fragst ja schon per Dialog eine Ansicht ab. In diese Ansicht baust du dir eine zusätzliche Spalte ein, nennen wir sie mal "Returnvalues". Die Spalte macht man später unsichtbar, Nutzer sehen nach wie vor eine normale Auswahl.
Die zusätzliche Spalte bekommt als Wert die Values aller zurückzugebenden Felder als eine Zeichenkette mit einem erfundenen Trennzeichen, das in den Feldwerten selbst nicht auftauchen darf. Ich habe als Beispiel-Trennzeichen hier mal "@;" benutzt. Die Formel sieht dann in etwa so aus:
@Text(nr) + "@;" + Sortname + "@;" + @Trim( Name_1 + " " + Name_2 ) + "@;" + PLZ + "@;" + Ort + "@;" + ............
In der Maske gibst du diese Spalte als zurückzugebenden Wert an und in der Eingabeumsetzung des Feldes zerlegst du die Zeichenkette wieder, z.B. mit
retvalue := @Explode( string ; "@;")
Die Feldwerte stehen dann als Liste (Array) mit retvalue[n] zur Verfügung und können leicht in einem Rutsch auf die Felder in der Maske verteilt werden. @Command([RefreshHideFormulas]) anschließend nicht vergessen.
Ich bin mir sicher hier im Forum schlummern etliche Beispiele und Tipps die das vielleicht sogar besser erklären.
HTH
Carsten
[Edit] Einen Thread zu genau dieser Problematik (Performanceprobleme durch zu viele @Lookups) und gleicher Lösung habe ich auf die Schnelle noch gefunden:
https://atnotes.de/index.php/topic,60615.0.html