Мне видится так:
в первый раз, когда отчёт оправляется на экран мы ещё можем достучаться к отчёту и вытянуть этот RecId. Далее запихиваем RecId в нашу новую переменную printedRecId, например, класса SysPrintOptions. Для этого в классе SysPrintOptions должна быть заведена эта новая переменная, быть прописана в localmacro и должен быть организован parmPrintedRecId() метод.
Это (запихивание RecId) можно сделать в init() SysPrintForm.
А когда уже печатаем отчёт, то в методе closeOk()
X++:
.........
switch (clientSysPrintOptions.parmTarget())
{
case PrintMedium::Printer::
// printedRecId = clientSysPrintOptions.parmPrintedRecId();
// if(printedRecId)
// markRecId();
break;
.........
маркируем строку.
Примерно так.