You can do this via a self join relationship or ExecuteSQL query.
tblSchedule-----<tblSchedule|Next (these are two occurrences of the same table
tblSchedule::cToday > tblSchedule|Next::TaskDate AND
tblSchedule::constFalse = tblSchedule|Next::FieldDone
Double click the relationship line linking these two and specify a sort order that sorts tbleSchedule|Next records by TaskDate in ascending order to make sure that the most recent incomplete task with a date on or after today is the first related record.
cToday would be an unstored calculation field set to return a Date with Get ( CurrentDate ) as its expression.
constFalse would be a calcluation that always evaluates a false with the same return data type as FieldDone's data type.
Next dumb question...
I set up the relationships as in your example
A simple layout based on table ScheduleNext still shows lots of copies of the same record. Is this right?
A more complicated layout (where I'm trying to do the button) seems to still show all the records.
Ideas on what I'm doing wrong?
Actually the relationships graphic is out of date. I tried taking out the ScheduleUID == ScheduleUID line.
What I am describing would not use a layout based on ScheduleNext. You'd use one based on either Schedule or Header ( with a portal to schedule).