Your code looks fine (but I just gave it a quick look...). As for your question: is there a simple way of assigning all values of window1 to outrec and then adding the additional fields? sure. it's just like you did in the else statement. CCL will "coerce" the schema where it can. So just say:
outrec := window1;
outrec.volume := rec.volume;
outrec.price := rec.price;
output setOpcode(outrec, insert);