Это потому, что внутренние поля групп принадлежат и внешним группам. Например, 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