Bei den foldenfen Statements
%subst(d_zbb:4:1) = '0' + %char(#_rem);
%subst(d_zbb:4:1) = '0' + %subst(d_zbb:5:1) = %char(#_rem);
füllst du ja nur die 4. Position (4:1), und das mit einem Wert, der länger als eine Position ist. Das geht so nicht. Hier wird nur die 4. Stelle gefüllt mit der ersten Stelle aus deinem Ausdruck ('0' + %char(#_rem) bzw. '0' + %subst(d_zbb:5:1) = %char(#_rem)).

welchen Wert hat denn die Variable #_rem, und welchen Wert soll d_zbb bekommen?