Это потому, что внутренние поля групп принадлежат и внешним группам. Например, Fi3_1 принадлежит группам Fi2_1 и Fi2_2, а также внешней группе Fi1_2, и даже самой внешней Gr1. В справке по WHAT приводится пример:
Код: Выделить всё
MyGroup  GROUP
F1        LONG(3)             !Field number 1
F2        SHORT               !Field number 2
F3        STRING(30)          !Field number 3
InGroup    GROUP              !Field number 4
F1          LONG              !Field number 5
F2          SHORT(2)          !Field number 6
F3          STRING(30),DIM(2) !Field number 7
F4          LONG,DIM(3,3)     !Field number 8
F5          ANY
          END
         END
  CODE
  CurrentField &= WHAT(MyGroup,1)   !Returns contents of MyGroup.F1 (3)
  CurrentField &= WHAT(MyGroup,6)   !Returns contents of MyGroup.Ingroup.F2 (2)
  CurrentField &= WHAT(MyGroup,7)   !Returns contents of MyGroup.Ingroup.F3[1]
Я FieldCount использую для пропуска вложенных полей:
Код: Выделить всё
    IF ISGROUP(pGrp, fldNdx)
      !- recursively add fields from nested group
      nestedGrp &= GETGROUP(pGrp, fldNdx)
      SELF.From(nestedGrp, fldPos)
      cnt = FieldCount(nestedGrp)  !- skip fields from nested groups
      fldNdx += cnt
      fldPos += cnt
    ELSE