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

Помогите сделать сортировку....

Добавлено: 12 июл 2011, 11:32
Ренат
Доброго всем времени суток!
Тема уже сто раз обсуждалась, но я так и не усвоил для себя как решается эта задача.

Есть простой интерфейс. В таблицу Custlic добавленно собственное поле BdateGLVZ. Необходимо, чтобы при выводе данных записи соритровались по этому полю.
Приведу полностью текс интерфейса.

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

Interface License_sorting 'Сортировка лицензий';
create view as
select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER BY CUSTLIC.BdateGLVZ;
Browse brs_listLicense;
table  CUSTLIC;
Fields
   CUSTLIC.SerijaGLVZ     'Серия'                          :[5] ,Protect;
   CUSTLIC.NomerGLVZ      'Номер'                          :[12],Protect;
   CUSTLIC.BDateGLVZ      'Дата начала'                    :[12],Protect;
   CUSTLIC.EDateGLVZ      'Дата окончания'                 :[12],Protect;
end;//brs_listLicense;
end. //interface
Скажите, что нужно сделать, чтобы выводились все записи? Сейчас из трех реально существующих записей выводиться только одна.....

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 16:53
KATZ
Добавьте в таблицу индекс по комбинации полей cDog+BDateGLVZ.

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 17:03
Ренат
Не разрешают добавить индекс. Хотя, раз поля добавили, можно было бы уж и индексы завести...
Вобщем нужно без индексов.

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 18:03
Masygreen
ну тогда загружайте таблицу в свою времянку, где описан нужный индекс .. и сработайте с ней в интерфейсе

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 18:06
Ренат
Это я понимаю. Можно при открытии интерфейса все грузить во временную таблицу и синхронизировать с основной, но хотелось бы все сделать без таких хитростей.
Неужели нельзя сделать сортировку без индекса?

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 18:44
galover
а что order by external не фурычит?

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 18:51
Ренат
Нет. Попробовал вот такой вариант:

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

Interface License_sorting 'Сортировка лицензий';
create view as
select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER byBdate External  BY CUSTLIC.BdateGLVZ;

Browse brs_listLicense;
table  CUSTLIC;
Fields
   CUSTLIC.SerijaGLVZ     'Серия'                          :[5] ,Protect;
   CUSTLIC.NomerGLVZ      'Номер'                          :[12],Protect;
   CUSTLIC.BDateGLVZ      'Дата начала'                    :[12],Protect;
   CUSTLIC.EDateGLVZ      'Дата окончания'                 :[12],Protect;
end;//brs_listLicense;
HandleEvent
cminit:
{
     setorder(tibyBdate);
     CallToNeighbours(cmSetPos,#CUSTLIC);
};
end;
end. //interface
Так же на экране отображается только одна запись из трех реально существующих.

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 19:22
galover
а если написать просто:

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

select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External  BY CUSTLIC.BdateGLVZ;
и убрать:

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

cminit:
{
     setorder(tibyBdate);
     CallToNeighbours(cmSetPos,#CUSTLIC);
};
?

Re: Помогите сделать сортировку....

Добавлено: 12 июл 2011, 19:27
galover
ну а вообще в support-e вот такой запрос:

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

select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External  BY CUSTLIC.BdateGLVZ;
нормально отрабатывает?

Re: Помогите сделать сортировку....

Добавлено: 13 июл 2011, 08:07
n0where
А зачем EXTERNAL в ORDER BY?

Кстате могет помочь

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

bounds onlyOrder
       ordered by CUSTLIC.BdateGLVZ

Re: Помогите сделать сортировку....

Добавлено: 13 июл 2011, 10:11
Ренат
ну а вообще в support-e вот такой запрос:
select CUSTLIC.SerijaGLVZ, CUSTLIC.NomerGLVZ, CUSTLIC.BDateGLVZ, CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External BY CUSTLIC.BdateGLVZ;

нормально отрабатывает?
Да, отрабатывает нормально. Возвращает все три лицензии.
Переделал интерфейс с исользованием этого запроса. Убрал обработчик cmInit. Так же отображает только одну лицензию.

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

Interface License_sorting 'Сортировка лицензий';
create view as
select  CUSTLIC.SerijaGLVZ,   CUSTLIC.NomerGLVZ,   CUSTLIC.BDateGLVZ,   CUSTLIC.EDateGLVZ
from custlic
where (( comp(2)==Custlic.cdog))
ORDER External  BY CUSTLIC.BdateGLVZ;

Browse brs_listLicense;
table  CUSTLIC;
Fields
   CUSTLIC.SerijaGLVZ     'Серия'                          :[5] ,Protect;
   CUSTLIC.NomerGLVZ      'Номер'                          :[12],Protect;
   CUSTLIC.BDateGLVZ      'Дата начала'                    :[12],Protect;
   CUSTLIC.EDateGLVZ      'Дата окончания'                 :[12],Protect;
end;//brs_listLicense;

end. //interface
А зачем EXTERNAL в ORDER BY?

Кстате могет помочь

bounds onlyOrder
ordered by CUSTLIC.BdateGLVZ
Не получилось, пишет ошибку: Нужен ключ для BdateGLVZ для CustLic

Re: Помогите сделать сортировку....

Добавлено: 13 июл 2011, 11:11
galover
Да уж, похоже очередной глюк Атлантиса. Нужно в ТП писать. Можно в качестве костыля написать так:

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

Browse brs_listLicense;
viewTable;
Fields
  ...