Сортировка в browse

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сортировка в browse

Сообщение s2176 »

Добрый день!
Хотелось бы отображать сотрудников в порядке возрастания табельного номера.
Если вставляю "order by isemployee,tabnmb", отображается всего 1 человек.
Убираю - отображаются все, но сортировка явно по дате приема, а я хочу по табельному номеру.

Собственно текст:

interface Pick_OnePerson 'Выберите сотрудника' doAccept, cyan;
show at(20,4,80,15);
Create view
var date_ch: date;
nrec_pers: comp;
as select *
from persons
where (('С'==persons.isemployee and date_ch>>=persons.appdate and
(persons.disdate=date(0,0,0) or persons.disdate>date_ch)
)) and tabnmb<>0 and persons.appdate<>date(0,0,0)
!order by isemployee,tabnmb
;
Parameters date_ch, nrec_pers
browse bpersons;
fields
persons.Tabnmb 'Таб.№': [6], protect;
persons.fio 'ФИО': [30], protect;
persons.appdate 'Дата приема': [10], protect;
persons.disdate 'Дата ув.': [10], protect;
end;
Handleevent
cmDefault: { nrec_pers:=persons.nrec; }
end;
end.
Кто сказал, что бесполезно биться головой об стену?!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Сортировка в browse

Сообщение edward_K »

самое простое указать нужный индекс во from. Но даже если вы указываете order by, то нужно внимательно следить, чтобы индексные условия подошли под ваш порядок сортировки, а если не подходят, то добавить после них (noindex) - в вашем случае после даты приема. Иначе временная таблица - отобрали и отсортировали как вам нужно например в скрытом поле. Да и перерисовывать не забывайте после поднятия другой сортировки - Rescanpanel(tnТаблица).
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: Сортировка в browse

Сообщение s2176 »

вместо 'order by' делала
from persons(PERSBYTABNMB) - это индекс по isemployee, tabnmb, strtabn
Так вообще выдает ошибку: Нет индекса для Persons.dat ...
Кто сказал, что бесполезно биться головой об стену?!
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: Сортировка в browse

Сообщение s2176 »

Сделала так:

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

interface Pick_OnePerson 'Выберите сотрудника' doAccept, cyan;
show at(20,4,80,15);
Create view
var date_ch: date;
    nrec_pers: comp;
as select isemployee, tabnmb, nrec, fio, appdate, disdate
from persons(PERSBYTABNMB)
where (persons.disdate=date(0,0,0) or persons.disdate>date_ch) and
      tabnmb<>0 and persons.appdate<>date(0,0,0)
bounds bpers = 'С'==persons.isemployee and date_ch>>=persons.appdate
;
Parameters date_ch, nrec_pers
browse bpersons;
 fields
   persons.Tabnmb 'Таб.№': [6], protect;
   persons.fio 'ФИО': [30], protect;
   persons.appdate 'Дата приема': [10], protect;
   persons.disdate 'Дата ув.': [10], protect;
end;
Handleevent
cmInit: pushbounds(tbbpers);
cmDefault: nrec_pers:=persons.nrec;
cmClose: popbounds(tbbpers);
end;
end.
не ругается, но и сортирует не по таб.№, а по ... дате приема!
Кто сказал, что бесполезно биться головой об стену?!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Сортировка в browse

Сообщение edward_K »

bounds конечно лишний - он вам нужен? лучше все ограничения накладывать в запросе
напишите так
bounds bpers = 'С'==persons.isemployee and date_ch>>=persons.appdate(noindex) <<< я про это говорил
ordered by persons.isemployee,persons.tabnmb
индекс во from лучше тогда убрать
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: Сортировка в browse

Сообщение s2176 »

Bounds завела от безысходности :)
Но наконец-то разобралась.
Получалось, что индекс у меня противоречил условию в двойных скобках.
Спасибо!
Кто сказал, что бесполезно биться головой об стену?!
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Сортировка в browse

Сообщение zna »

Подскажите, пож., как в browse сделать отображение стрелочки вверх или вниз при клике на наименовании колонки? Сама сортировка отрабатывает нормально, но хочется, чтобы была и визуализация- по какой колонке отсортированы записи. Код:

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

...
Panel Panel_;
  Table  t_SpMnPl;
  browse bclaim (,,sci13478esc) ;             
  show at (,2 , ,37)
  fields
              t_SpMnPl.sNameMc    'Наименование МЦ'           : [50], protect;  //<- по этой колонке сортировка
              t_SpMnPl.sBarKod    'Ном.номер'                 : [12], protect;
              t_SpMnPl.sGrMcUsl   'Группа'                    : [20], protect;
              t_SpMnPl.sCo        'Объект'                    : [10], protect;
              t_SpMnPl.sMnPlan    'Заказ-наряд'               : [35], protect;       //<-.. и по этой
...
Handleevent  // главное окно
cmColumnClicked:      // Сортировать по:
{
  case target of
    #t_SpMnPl.sMnPlan: {SetOrder(tiMnPlan); reScanPanel(#t_SpMnPl);}
    #t_SpMnPl.sNameMc: {SetOrder(tiNameMc); reScanPanel(#t_SpMnPl);}
  end;
}
...
Может, какие атрибуты надо указать?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Сортировка в browse

Сообщение edward_K »

открываем vipprogr.chm
ищем "Метод SetColumnSorting"
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Сортировка в browse

Сообщение zna »

Ок, то, что надо!
LaaLaa

Re: Сортировка в browse

Сообщение LaaLaa »

zna писал(а):сделать отображение стрелочки вверх или вниз при клике на наименовании колонки ... сортировка отрабатывает .... Может, какие атрибуты надо указать?
В 9.1 при параметре в CFG файле

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

System.UseBrowserCacheAndSort=on
System.UseTreeCacheAndSort=on
это как бы автоматически само работает.
Ответить