Das Programm sollte schon im Batch laufen. Dazu noch folgende Info wie das ganze Thema abläuft.

1. Das Programm läuft im Batch und wartet über den QRCVDTAQ darauf einen Eintrag aus der Datenwarteschlange zu empfangen und zu verarbeiten. Solange kein Eintrag in der Datenwarteschlange steht verbraucht das Programm auf keine Prozessorzeit.
2. Eine Spoolfile wird in die entsprechende Ausgabewarteschlange gestellt. OS/400 stellt daraufhin einen Eintrag zu dieser Spoolfile in die Datenwarteschlange.
3. Nachdem ein Eintrag in der Datenwarteschlange steht, übergibt OS/400 diesen Satz dem Batchprogramm.
4. Das Batchprogramm empfängt diesen Satz und kann diesen dann verarbeiten.

Die ganze Verarbeitung läuft asynchron ab. D.h. viele Jobs können einen Eintrag in die Ausgabewarteschlange und dadurch auch in die Datenwarteschlange stellen. Nur ein Programm (Das Batchprogramm) verarbeitet die Einträge in der Datenwarteschlange.

Das zweite Programm, das ich gepostet habe sorgt dafür, dass das erste Programm im Bedarfsfall auch sauber beendet werden kann. Ansonsten könnte man es nur über einen ENDJOB OPTION(*IMMED) beenden, da der QRCVDTAQ ansonsten bis zum Sankt Nimmerlein Tag auf einen Eintrag in der Datenwarteschlange warten würde.