Well, the insert statement is simple enough - but you MUST specify the columns like this:
INSERT INTO trans (tnr, amount, tdate, ttnr, pnr, ok)
VALUES( v_next, p_amount, SYSDATE, p_ttype, p_pnr, 'Y' );
... otherwise your code may fail some time in the future (e.g. if a new column is added to table TRANS).
(Note: SYSDATE includes time. If you want JUST the date use TRUNC(SYSDATE))
Now, how to get the v_next value. You should be aware that this MAX(trn)+1 solution is not a good idea at all unless your application is single user, because it locks out other users from inserting any data into TRANS until the first user commits. In a multi-user system, all your users will experience potentially long waits to get the next tnr value for their inserts. The correct solution is to use a SEQUENCE:
CREATE SEQUENCE tnr_seq;
Then in your trigger:
INSERT INTO trans (tnr, amount, tdate, ttnr, pnr, ok)
VALUES( tnr_seq.NEXTVAL, p_amount, SYSDATE, p_ttype, p_pnr, 'Y' );
You will have to accept when you use sequences that there WILL be gaps in the numbers, they CANNOT be guaranteed to be sequential. You have to accept that this doesn't matter (it really doesn't matter -an ID is just an ID - but when people are used to gap-free numbers they THINK it matters!) It is this "no gap-free guarantee" feature that makes sequences work efficiently for multi-user systems.
If after reading all the above you still want to use MAX(tnr)+1, then all you have to do is:
SELECT MAX(trn)+1
INTO v_next
FROM trans;
INSERT INTO trans( tnr,...) VALUES (v_next,...);
But don't say I didn't warn you!