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

Обратная сортировка

Добавлено: 08 фев 2007, 08:00
GTHack
Есть своя табличка с полем дата, делаю во вьюхе прямую сортировку - работает, обратную - ругается на отсутствие индекса :(
"Нет индекса для zayavki.zdat Нет фильтров. Порядок 1.ZDAT, 68, в таблице ZAYAVKI"

Сортировку делаю так
Pushbounds(tbsort_zdat); - прямая
Pushbounds(tbsort_zdat_desc); - обратная

соответственно определив заранее
bounds sort_zdat ordered by zayavki.zdat
bounds sort_zdat_desc ordered by zayavki.zdat (desc)

по полую zdat в табличке zayavki определён индекс

need help !

Добавлено: 08 фев 2007, 08:42
Goblin
1) никак не bounds, а
order <имя сортировки> by <таблица>.<поле>
2) в обработчике событий обработать событие cmcolumnclicked, в котором функцией getcolumnsorting выяснить текущий тип сортировки и перевести его в противоположный

Пример есть только по временной табле, но и по обычой работает аналогично

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

table struct lschetlisttable
(
        nrec:comp,
        tabn:longint,
        cappoint:comp,
        cpodr:comp,
        tarif:double,
        fio:string[60]
)
with index
(
        lschetlisttable01=nrec(unique),
        lschetlisttable02=tabn,
        lschetlisttable03=fio
);

interface lschetlist 'Список сотрудников' escclose,cyan show at(1,1,100,15);

create view
as select * from lschetlisttable,
                 milranks,
                 appointments,
                 synonym catalogs catrazryad,
                 synonym catalogs catpost,
                 katpodr,
                 synonym katpodr catpodr
where
((
        lschetlisttable.nrec==milranks.cperson and 1==milranks.brankstate and
        milranks.crank==catrazryad.nrec and
        lschetlisttable.cappoint==appointments.nrec and
        appointments.post==catpost.nrec and
        lschetlisttable.cpodr==katpodr.nrec
))
order ordertabn by lschetlisttable.tabn
order orderfio by lschetlisttable.fio;

browse brlschet table lschetlisttable;
fields lschetlisttable.tabn'Таб. №':[5],protect;
       lschetlisttable.fio'ФИО сотрудника':[30],protect;
       katpodr.name'Подразделение','(по затратам)':[25],protect;
       catpost.name'Дожность по ШР':[30],protect;
       catrazryad.name'Разряд':[10],protect;
       lschetlisttable.tarif'Оклад':[8.3,'[|-]3666 666.888'],protect;
end;

procedure getdata;
{
        delete all from lschetlisttable;
        startnewvisual(vtnumericvisual,vftimer,'Выборка списка сотрудников',0);
        _loop persons where(('С'==persons.isemployee and persons.nrec==lschet.tperson and lschet.cex==catpodr.nrec))
        {
                nextvisual;
                if(persons.appointcur>0 and lschet.cex>0 and pos('онтракт',catpodr.name)=0) insert lschetlisttable set lschetlisttable.nrec=persons.nrec,
                                                                                                   lschetlisttable.tabn=lschet.tabn,
                                                                                                   lschetlisttable.fio=persons.fio,
                                                                                                   lschetlisttable.cpodr=lschet.cex,
                                                                                                   lschetlisttable.tarif=lschet.tarif,
                                                                                                   lschetlisttable.cappoint=persons.appointcur;
        }
        stopvisual('',0);
}

handleevent
cminit:
{
        getdata;
        setorder(tiorderfio);
}
cmcolumnclicked:
{
        case getcolumnsorting(brlschet,target) of
        0:
        {
                setcolumnsorting(brlschet,target,-1);
                if(target=#lschetlisttable.tabn) setorder(tiordertabn);
                else setorder(tiorderfio);
                settablebackorderin (#lschetlisttable, false);
                rescanpanel (#lschetlisttable);
        }
        -1:
        {
                setcolumnsorting(brlschet, target, 1);
                settablebackorderin (#lschetlisttable, true);
                rescanpanel (#lschetlisttable);
        }
        1:
        {
                setcolumnsorting(brlschet, target, 0);
                setorder(-1);
                settablebackorderin (#lschetlisttable, false);
                rescanpanel (#lschetlisttable);
        }
        end;
}
end;

end.

Добавлено: 08 фев 2007, 09:06
GTHack
у меня тоже самое на таблице в памяти на ура работало...

о.к. - сейчас попробую по твоему методу

Добавлено: 08 фев 2007, 09:12
GTHack
за
settablebackorderin ();
спасибо - всё заработало как полагается :)