Совсем не извращение ...
В осколках исходников, завалявшихся у меня по первой версии 5.85.01, в интефейсе оборотов при наложении фильтра именно так же, как и происходит у вас - наложение фильтров/ограничений, затем GetLast'ом проверка, в случае отсутсвия наличия присутсвия - ругань и вопросы
вообще список список исключений по работе с БД :
ExDbNotFound Запись не найдена
ExDbDuplicateKey Дублированное значение уникального ключа
ExDbModifiableKeyValueError Модификация ключевого поля
ExDbTransactionError Ошибка во время транзакции
ExDbTransactionIsActive Транзакция уже открыта
ExDbInvalidRecordAddress Ошибочный адрес записи
ExDbLockError Ошибка блокировки
ExDbRecordInUse Запись используется
ExDbSurrKeyZero Обновление записи с нулевым суррогатным ключом
ExDbInvalidIndexNumber Ошибочный номер индекса
ExDbNoPosition Ошибочная позиция
ExDbInvalidRelation Ошибочная связь
ExDbAccessToFieldDenied Доступ запрещен
ExDbFileInTransaction Файл используется транзакцией
ExDbSemaphorNotExist Семафор не существует
ExDbSemaphorIsBusy Семафор занят
ExDbSemaphorModeError Ошибка задания параметра установки семафора
ExDbSemaphorError Ошибка работы с семафорами
ExDbInvalidField Передано неправильное поле в метод File.OpenMemo
Вываливаются они при позиционировании программном. Как раз ваш GetFirst/GetLast и порождать должен ExDbNotFound.
Работает это с Атлантиса 3.02.хх