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

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

Добавлено: 19 сен 2013, 10:02
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.

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

Добавлено: 19 сен 2013, 11:42
edward_K
самое простое указать нужный индекс во from. Но даже если вы указываете order by, то нужно внимательно следить, чтобы индексные условия подошли под ваш порядок сортировки, а если не подходят, то добавить после них (noindex) - в вашем случае после даты приема. Иначе временная таблица - отобрали и отсортировали как вам нужно например в скрытом поле. Да и перерисовывать не забывайте после поднятия другой сортировки - Rescanpanel(tnТаблица).

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

Добавлено: 19 сен 2013, 12:28
s2176
вместо 'order by' делала
from persons(PERSBYTABNMB) - это индекс по isemployee, tabnmb, strtabn
Так вообще выдает ошибку: Нет индекса для Persons.dat ...

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

Добавлено: 19 сен 2013, 12:46
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.
не ругается, но и сортирует не по таб.№, а по ... дате приема!

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

Добавлено: 19 сен 2013, 13:00
edward_K
bounds конечно лишний - он вам нужен? лучше все ограничения накладывать в запросе
напишите так
bounds bpers = 'С'==persons.isemployee and date_ch>>=persons.appdate(noindex) <<< я про это говорил
ordered by persons.isemployee,persons.tabnmb
индекс во from лучше тогда убрать

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

Добавлено: 19 сен 2013, 13:24
s2176
Bounds завела от безысходности :)
Но наконец-то разобралась.
Получалось, что индекс у меня противоречил условию в двойных скобках.
Спасибо!

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

Добавлено: 20 авг 2014, 09:54
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;
}
...
Может, какие атрибуты надо указать?

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

Добавлено: 20 авг 2014, 10:18
edward_K
открываем vipprogr.chm
ищем "Метод SetColumnSorting"

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

Добавлено: 20 авг 2014, 10:27
zna
Ок, то, что надо!

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

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

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

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