Динамическое поле со списком

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Динамическое поле со списком

Сообщение Yufil »

У меня в одном из последних проектов на форме два поля - Организации и Представители, точнее, две пары - отправители и получатели документа. У одной организации может быть куча представителей. Один представитель может представлять кучу организаций (или подразделений в одной организации). Поэтому составляется таблица перекрёстных ссылок и частот встречаемости по ранее введённым документам. Если введён представитель и он представляет ровно одну организацию, она и выбирается. Если введена организация и у неё ровно один представитель, он выбирается. В противном случае при выборе организации в дроплисте представителей список в порядке убывания частот, аналогично при выборе представителя. Там как раз по Event:Selected делается - встал на комбобокс - загрузился новый список....

Ну и кнопочка рядом на случай необходимости выбора новой организации или представителя.
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Динамическое поле со списком

Сообщение kreator »

Согласен с таким режимом работы. Единственное, как отработать Record Validation. Помнится была такая проблема, что при нажатии OK происходит выбор значения из комбобокса, а если его там нет...
We are hard at work… for you. :)
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Динамическое поле со списком

Сообщение Андрей »

Решил, переделать динамическое поле не через Filtr, а по отбору по ключу.
Итак есть 2 поля, в зависимости от того, какое заполнено Dat:IdBlg или Dat:IdDom, при переходе селектора на поле со списком вызывается роутинка,которая должна менять ключ и устанавливать новый отбор

Код: Выделить всё

Filtre              Routine
    if FormWindow{Prop:AcceptAll}=False      
         If Dat:IdBlg
           FDCB5.AddSortOrder(Spr:IdBlg_Key)
           FDCB5.AddRange(Spr:IdBlg,Dat:IdBlg) 
         ElsIf Dat:IdDom
           FDCB5.AddSortOrder(Spr:IdDom_Key)
           FDCB5.AddRange(Spr:IdDom,Dat:IdDom)
         END
         FDCB5.ApplyRange    
         FDCB5.Reset(True) 
    end 
Что-то не работает.... подскажите в чем ошибка ?
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Динамическое поле со списком

Сообщение kreator »

Надо, наверно, запускать ApplyOrder(). А в нём уже менять сам Order.
We are hard at work… for you. :)
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Динамическое поле со списком

Сообщение Андрей »

А куда его правильно ставить... ?

Код: Выделить всё

    if FormWindow{Prop:AcceptAll}=False 
         If Dat:IdBlg
            FDCB5.AddSortOrder(Spr:IdBlg_Key)
            FDCB5.ApplyOrder
            FDCB5.AddRange(Spr:IdBlg,Dat:IdBlg)
         ElsIf Dat:IdDom
            FDCB5.AddSortOrder(Spr:IdDom_Key)
            FDCB5.ApplyOrder
            FDCB5.AddRange(Spr:IdDom,Dat:IdDom)
         END
         FDCB5.ApplyRange    
         FDCB5.Reset(True)
Добавил так - не работает
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Динамическое поле со списком

Сообщение kreator »

Полностью не видно текста, к сожалению. Я бы попробовал так бы. AddSortOrder и AddRange, вообще не причём, они и так должны вызываться в методе ThisWindow.Init, причём один раз. А при изменении DAT:IdBig и DAT:IdDom я бы написал так:
FDCB5.ApplyFilter
FDCB5.ApplyOrder
FDCB5.ResetQueue(1)

В методе ApplyOrder после Parent Call поставил бы проверку:
If Dat:IdBlg
FDCB5::View:FileDropCombo{prop:Order} = 'Spr:IdBig'
ElsIf Dat:IdDom
FDCB5::View:FileDropCombo{prop:Order} = 'Spr:IdDom'
end

В методе ApplyFilter аналогичным способом наложил бы фильтр.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Динамическое поле со списком

Сообщение Yufil »

По-моему, как раз тот случай, когда проще ручками считать БД в очередь, а не трахаться с хитрыми шаблонами...
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Динамическое поле со списком

Сообщение Андрей »

Оказывается, что все работает, надо было только FDCB5.ResetQueue(True) вместо FDCB5.Reset(True) поставить
Вот работающий фрагмент:

Код: Выделить всё

Filtre              Routine
    if FormWindow{Prop:AcceptAll}=False
         If Dat:IdBlg
            FDCB5.AddSortOrder(Spr:IdBlg_Key)
            FDCB5.AddRange(Spr:IdBlg,Dat:IdBlg)
        ElsIf Dat:IdDom
            FDCB5.AddSortOrder(Spr:IdDom_Key)
            FDCB5.AddRange(Spr:IdDom,Dat:IdDom)
         END
         FDCB5.ResetQueue(True)
    end 
Ответить