вах!
есть решение! в 5-ке работает!
в функции создается пареметр типа Variant, а передается ей не RecordRef, а Rec! правда предварительно отсекресфильтренный
вызов функции
Rec.SETRECFILTER;
PrepareReport(Rec);
PrepareReport(Rec : Variant)
...// тут зашита вся бизнес-логика, которую лень писать в каждой таблице отдельно.
PrintReport(RecordID,Rec);
PrintReport(RecordID : Integer;Rec : Variant)
REPORT.RUNMODAL(RecordID,FALSE,FALSE,Rec);
работает!

очередной раз коллективный разум победил Navision!
будет ли работать в 4-ке и 3-ке? не знаю, надо проверить...