docs: public Record getNextGridRecord(boolean bFirstTime) throws DBException
      {
          Record record = this.getMainRecord();
          Record recNew = null;
          if (bFirstTime)
          {
              String mainString = this.getScreenRecord().getField(ProjectTaskScreenRecord.PROJECT_TASK_ID).toString();
              recNew = this.getCurrentLevelInfo(+0, record);
              recNew.addListener(new StringSubFileFilter(mainString, ProjectTask.PARENT_PROJECT_TASK_ID, null, null, null, null));
          }
          else
          { // See if there are any sub-records to the last valid record
              recNew = this.getCurrentLevelInfo(+1, record);
              String mainString = record.getCounterField().toString();
              if (recNew.getListener(StringSubFileFilter.class) == null)
                  recNew.addListener(new StringSubFileFilter(mainString, ProjectTask.PARENT_PROJECT_TASK_ID, null, null, null, null));
          }
          boolean bHasNext = recNew.hasNext();
          if (!bHasNext)
          {
              int dLevel = (int)this.getScreenRecord().getField(ProjectTaskScreenRecord.CURRENT_LEVEL).getValue();
              if (dLevel == 0)
                  return null;    // All done
              Record recTemp = this.getCurrentLevelInfo(+0, record);
              recTemp.removeListener(recTemp.getListener(StringSubFileFilter.class), true);
              recTemp.close();
              dLevel = dLevel - 2;    // Since it is incremented next time
              this.getScreenRecord().getField(ProjectTaskScreenRecord.CURRENT_LEVEL).setValue(dLevel);
              return this.getNextGridRecord(false);
          }
          Record recNext = (Record)recNew.next();
          record.moveFields(recNext, null, true, DBConstants.SCREEN_MOVE, false, false, false, false);
          return record;
      }