ну да, вы же по уникальному индексу написали 
GetNExt KatMc where((cOldMc ==KatMc.Nrec )) 
- это даст false.
на счет GetNext. Надо понимать, что проблема СЛЕДУЮЩАЯ на самом деле неоднозначна. СЛЕДУЩАЯ есть только в выборке, причем должна быть ТЕКУЩАЯ и должен быть задан ПОРЯДОК следования записей,т.к. индекс в Галактике, по которому стоят записи. 
 Проблема у том, что есть понятие в Галактике ТЕКУЩАЯ,т.е.  та, на которой стоит курсов, а еще есть понятие ТЕКУЩАЯ ПО УСЛОВИЮ. Последнее понятие дает возможность работать оператору GetNеxt c опцией  where.
Если таблица КатМс во view в секции where(()) стоит где-то в правой части, то ситуация на самом деле непредсказуемая.  Если запись с Nrec=cOldMc удовлетворяет условию подцепки и условию подцепки во view, то видимо выведется запись, следующая за этой записью по условиям подцепки view. Если запись не попадает в условия подцепки, то не ручаюсь за результат.
 Если таблица катмц не участвует в подцепке, то выдаст, скорее всего следующую запись по индексу Nrec.
 GetFirst c опцией where ()) работает на самом деле
 На практике, используют следующие приемы:
1. Описывают во view несколько синонимов и каждый синоним таблицы цепляют во view по разным условиям. В обработчиках работают с синонимами.
2. Не описываю таблицы вообще во view, а в обработчиках работают C циклами 
      if GetFirst ...where (()) - tsOk 
        do
          ...
        while (  GetNext...where(()) = tsOk      )
3. Описывают основное использование таблицы в view (подцепку), а  использование варианта 2  обрамляют операторами отсоединения таблицы от подцепки во view и после выполнения - подсоединения к подцепки (см. документацию).
Все другие соцетация могут привести к очень предсказуемым последствиям.