Da kann man mal sehen (sorry) wie weit du vom Verständnis der Variablendefinition in RPG/LE entfernt bist.
Grundsätzlich gilt hier folgendes:

Jede Variable gibt es im gesamten Programm nur ein einziges Mal.
Jede Datei (I/O/U) liefert ihre eigenen Variablendefinitionen in den automatischen I- und O-Bestimmungen.
Diese Felder sind nach ILE-Definition sog. Single-Variablen.

Nun kann man natürlich eine Datenstruktur "DS" definieren.
Ist diese DS nicht qualified, sind die enthaltenen Felder nur als Gruppe zu verstehen, die Variablen sind immer noch Single und können deshalb auch nicht in einer 2. DS definiert werden.

Mittels Qualified muss eine DS mit ihren Unterfeldern immer in der Form "XXX.YYY" angesprochen werden, was gedanklich zu einer Mehrfachdefinition führt, real aber nicht ist. XXX.YYY ist ein anderes Feld als ZZZ.YYY.

Wie funktioniert nun IO:
Jede IO-Bestimmung (Read/Write/Chain/Exfmt) ohne spezielle Angaben verwendet ausschließlich die Felder, die in den I- und O-Bestimmungen definiert sind, also i.d.R. nie die Qualified DS'n.

Verwendet man einen Lesebefehl "READ/CHAIN Datei/Format Struktur", dann muss die Struktur per Likerec(*input) definiert sein, umgekehrt bei "Write/Update Format Struktur" muss die DS mit Likerec(*output) definiert sein.

Passend dazu gibt es den "eval-Corr ZielDS = QuellDS;", der natürlich nur auf Qualified-DS funktioniert.

Nun kann man bei der Definition in den F-Bestimmungen einen Prefix "XXX." definieren, der dann auch auf die Qualified-Strukturen verweisen kann, dann kann man mit Likerec(*All) ebenso umgehen.
In neueren Versionen wird Qualified auch auf den F-Bestimmungen erlaubt.

Lehnt dein Compiler den eval-corr ab, gibt es 2 Möglichkeiten:
a) es gibt ihn noch nicht.
b) die beteiligten DS'n sind nicht qualified und/oder es wurden keine passenden Namen gefunden.

Kommen wir nun zu deinen Versuchen:
Ein "EXFMT Format" verwendet die I- und O-Felder aus der F-Bestimmung, ein "EXFMT Format Struktur" verwendet ein DS mit Likerec(*all).
Eine Subfile kann nur Read/Write/Update und kann daher nur mit *Input bzw. mit *Output-DS umgehen, der Compiler meckert das sogar an.
Gibt es keinen eval-corr, muss man die Feldinhalte manuell einzeln übertragen.

Aber um zu deinem Ursprungsproblem zurückzukommen reicht hier wirklich ein einfacher Verteiler und ein allgemeine Prompt-Funktion:

d MyPrompt PR 100 varying
d Feldname 10

select;
when CsrFeld = 'FELD1';
Feld1 = MyPrompt('KDNR'); // Auswahl Kunden-Nr (z.B. per Matchcode)
when CsrFeld = 'FELD2';
Feld2 = MyPrompt('Tab:47'); // Auswahl aus Tabelle 47
:
endsl;

Alles andere ist nur Overhead den anschließend kaum einer versteht.