Страница 2 из 2

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

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

Ну и кнопочка рядом на случай необходимости выбора новой организации или представителя.

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

Добавлено: 10 Сентябрь 2013, 10:35
kreator
Согласен с таким режимом работы. Единственное, как отработать Record Validation. Помнится была такая проблема, что при нажатии OK происходит выбор значения из комбобокса, а если его там нет...

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

Добавлено: 23 Февраль 2014, 23:22
Андрей
Решил, переделать динамическое поле не через 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 
Что-то не работает.... подскажите в чем ошибка ?

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

Добавлено: 24 Февраль 2014, 10:19
kreator
Надо, наверно, запускать ApplyOrder(). А в нём уже менять сам Order.

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

Добавлено: 24 Февраль 2014, 13:13
Андрей
А куда его правильно ставить... ?

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

    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)
Добавил так - не работает

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

Добавлено: 24 Февраль 2014, 15:54
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 аналогичным способом наложил бы фильтр.

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

Добавлено: 24 Февраль 2014, 17:00
Yufil
По-моему, как раз тот случай, когда проще ручками считать БД в очередь, а не трахаться с хитрыми шаблонами...

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

Добавлено: 09 Март 2014, 23:38
Андрей
Оказывается, что все работает, надо было только 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