Страница 1 из 2
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 11:58
gopstop2007
Локальные данные
Код: Выделить всё
l_Group1 GROUP,PRE(G1)
NameField1 STRING(20)
NameField2 STRING(20)
NameField3 STRING(20)
END
NameFieldNoGroup STRING(20)
Как узнать принадлежность поля к группе и получить префикс этой группы?
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 12:32
Shur
Боюсь, я не первый, кто ещё не понял суть вопроса.
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 14:03
gopstop2007
команды с помощью которых можно узнать что поле NameField2 относится к группе под названием l_Group1 и имеет префикс G1
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 14:17
Shur
Ааа! Просто кода с ассайном (&=) не видать! А без него вопрос становится в какой-то мере бессмысленным.
Команд таких раньше было три What()/Who()/Where(). В данном случае, должно быть, Where().
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 15:09
Shur
Сорри, проверил себя -- WHERE() не отвечает на поставленный вопрос.
А вот дополнительно введенные HOWMANY()/GETGROUP()/ISGROUP() должны помочь.
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 15:47
gopstop2007
я эти команды видел-знаю

Shur писал(а):HOWMANY()/GETGROUP()/ISGROUP() должны помочь.
и они не подходят, так как для этих команд требуется в виде начальных значений наличие(название) самой группы, а я об этом "не знаю" изначально

Group - узнать принадлежность
Добавлено: 06 Январь 2016, 15:54
Дед Пахом
Вот так я вычисляю индекс поля в группе:
Код: Выделить всё
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
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 16:11
gopstop2007

Ого. Спасибо, не думал что так всё сложно

Хотя, может кто то предложит более простой вариант

Group - узнать принадлежность
Добавлено: 06 Январь 2016, 16:13
Дед Пахом
gopstop2007 писал(а): Ого. Спасибо, не думал что так всё сложно Хотя, может кто то предложит более простой вариант
Присоединяюсь, код выглядит слегка дико, но ничего лучшего я добиться не смог.
Group - узнать принадлежность
Добавлено: 06 Январь 2016, 22:26
Shur
Тут есть вот какое предложение.
Если
известен конечный список групп, то ссылки на них можно держать в очереди вроде:
Код: Выделить всё
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
За синтаксис не ручаюсь. Но идея может оказаться полезной.
Group - узнать принадлежность
Добавлено: 07 Январь 2016, 12:11
gopstop2007
Shur писал(а): Но идея может оказаться полезной.
спасибо, но мне кажется механизм схож на указаный Дед-ом Пахом-ом

Может кто укажет другой... А как через язык шаблонов решается это?
Group - узнать принадлежность
Добавлено: 07 Январь 2016, 12:23
Shur
Не, у меня оригинальный способ!
Он нигде не использует строковые сравнения (UPPER()=UPPER()). Число переборов сокращено до предела!
А как изящно он разбирается с префиксом группы!

Group - узнать принадлежность
Добавлено: 07 Январь 2016, 15:37
Дед Пахом
gopstop2007 писал(а): А как через язык шаблонов решается это?
для начала - через язык шаблонов не добраться до групп, объявленных от руки, а не в локальных/глобальных данных.
Group - узнать принадлежность
Добавлено: 07 Январь 2016, 15:40
Дед Пахом
Shur писал(а): Не, у меня оригинальный способ! Он нигде не использует строковые сравнения (UPPER()=UPPER()). Число переборов сокращено до предела! А как изящно он разбирается с префиксом группы!
Число переборов вырастет в N раз, если Вам, как и мне, надо найти индекс поля в группе по его имени (а имена в Clarion как известно регистронечувствительные). То есть "myfield", "MyFiElD" или "GRP!:MYFIELD" означает одно и то же поле одной конкретной группы. Как без UPPER?
Group - узнать принадлежность
Добавлено: 07 Январь 2016, 16:16
PavelNK
Match в помощь!