Der CALL muss hier "By Reference" also ohne "value" aufgerufen werden.

callp srfpgm(array);

ist somit richtig.

mit
callp srfpgm(array(z));
übergibst du nur die Adresse des Elements Z des Arrays und das führt zu Pufferüberschreibungen (MCH-Fehler wäre noch die beste Variante daraus).

Besser wäre noch, die Anzahl der verfügbaren Elemente mit zu übergeben, dann wäre es etwas dynamischer.