Код: Выделить всё
l_Group1 GROUP,PRE(G1)
NameField1 STRING(20)
NameField2 STRING(20)
NameField3 STRING(20)
END
NameFieldNoGroup STRING(20)
Модератор: Дед Пахом
Код: Выделить всё
l_Group1 GROUP,PRE(G1)
NameField1 STRING(20)
NameField2 STRING(20)
NameField3 STRING(20)
END
NameFieldNoGroup STRING(20)
и они не подходят, так как для этих команд требуется в виде начальных значений наличие(название) самой группы, а я об этом "не знаю" изначальноShur писал(а):HOWMANY()/GETGROUP()/ISGROUP() должны помочь.
Код: Выделить всё
msxml::GetFieldNumber PROCEDURE(*GROUP pG, STRING pFieldName)
aRef ANY
cIndex LONG, AUTO
CODE
LOOP cIndex = 1 TO 2147483647
aRef &= WHAT(pG, cIndex)
IF aRef &= NULL
BREAK
END
IF UPPER(WHO(pG, cIndex)) = UPPER(pFieldName) OR UPPER(msxml::RemovePrefix(WHO(pG, cIndex), TRUE)) = UPPER(pFieldName)
RETURN cIndex
END
END
RETURN 0
Присоединяюсь, код выглядит слегка дико, но ничего лучшего я добиться не смог.
Код: Выделить всё
AllGroups QUEUE
GroupName string(20)
GroupPrefix string(5)
Ref &group
END
Код: Выделить всё
CheckingField &= ... ! неизвестно что и главное откуда
loop I# = 1 to records(AllGroups)
get(AllGroups, I#)
Where# = WHERE(AllGroups.Ref, CheckingField)
if Where# > 0 then
message('The field ' & WHO(AllGroups.Ref, Where#) & ' belongs to ' & AllGroups.GroupName & ' which has prefix ' & AllGroups.GroupPrefix)
break
end !if
end !loop
спасибо, но мне кажется механизм схож на указаный Дед-ом Пахом-омShur писал(а): Но идея может оказаться полезной.
для начала - через язык шаблонов не добраться до групп, объявленных от руки, а не в локальных/глобальных данных.
Число переборов вырастет в N раз, если Вам, как и мне, надо найти индекс поля в группе по его имени (а имена в Clarion как известно регистронечувствительные). То есть "myfield", "MyFiElD" или "GRP!:MYFIELD" означает одно и то же поле одной конкретной группы. Как без UPPER?