Сортировка

Программирование на Atlantis: приемы и подходы, обмен опытом

Модераторы: larin, Screw

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

Сортировка

Сообщение beatlov » Чт, 07/05/2015 14:24

Есть СВОИ две таблицы: "заголовок документа"+"спецификация документа". По ним создан интерфейсы:
1-ый интерфейс- заголовок документов ( обычное дерево)
2-ый интерфейс - спецификация документа (две панели + browse)
В таблице спецификации множество полей, по полям для осуществления сортировки созданы соответствующие индексы ( были опробированы два типа индексов - просто по сортировочному полю , и составной индекс - "поле, по которому осуществляется сортировка"+ поле-ссылка на родительскую таблицу-заголовок).
Испробованы все методы сортировки и через механизм "order ->> SetOrder", и через механизм "Bound ordered by ->PushBounds". Но итог один - при сортировке осуществляется "каша" - в спецификации начианают отображаться строки из совсем других документов, такое ощущение, что сбрасывается связка документ-спецификация. Хотя в сортировке никаких доп.условий и тем более связей нет.
В чем может быть проблема?

den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

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

Сообщение den » Пт, 08/05/2015 14:48

Ну так абстрактно трудно ответить. Вроде работает это дело без особых премудростей
Нужно видеть скрипты таблиц и небольшой код на vip, в качестве примера, что там у Вас.

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

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

Сообщение beatlov » Пт, 08/05/2015 15:02

CREATE TABLE SMNMTOZayavkaREN "Годовая заявка"
WITH TABLE_CODE = 31502
(
NREC :Comp "Номер записи",
NPP :Word "Номер по порядку",
PID :String[80] "ПИД",
cspiszren :Comp "ссылка на список заявок",
.....
)
WITH INDEX
(
SMNMTOZayavkaREN01 = NREC(Unique,Surrogate,Journal),
SMNMTOZayavkaREN02 = PID ,
....
SMNMTOZAYAVKAREN28 = CSPISZREN+PID
);

Теперь главная вьюха в интерфейсе:

create view as
select
If (OinfoInfo_operstatus>=SMNMTOSTATZREN.ilevel,true,false) (fieldname = oper_flag),//определяем статус , с которым может работать пользователь
SMNMTOZAYAVKAREN.*
from
SMNMTOZAYAVKAREN ,
katpodr ,
SMNMTOSTATZREN ,
fpco ,
kated ,
SMNMTONOMEN ,
SMNMTOPrimisp ,
SMNMTOPROGRAM ,
persons ,
synonym persons otvpers ,
katstroy ,
smnmtoIspUprTorg ,
smnmtoPostavka ,
SMNMTOVIDPOSTAVKI ,
SMNMTOGroupMtr ,
spkau
where
((
pnrec /== SMNMTOZAYAVKAREN.CSPISZREN and
SMNMTOZAYAVKAREN.ckatpodr == katpodr.nrec and
SMNMTOZAYAVKAREN.CCO == fpco.nrec and
SMNMTOZAYAVKAREN.ckatotped == kated.nrec and
SMNMTOZAYAVKAREN.cmc == smnmtonomen.nrec and
SMNMTOZAYAVKAREN.cstatus == SMNMTOSTATZREN.nrec and
SMNMTOZAYAVKAREN.cprimisp == SMNMTOPrimisp.NREC and
SMNMTOZAYAVKAREN.cprogram == SMNMTOPROGRAM.NREC and
SMNMTOZAYAVKAREN.cpersons == persons.nrec and
SMNMTOZAYAVKAREN.ckatstroy == katstroy.nrec and
SMNMTOZAYAVKAREN.cispuprtorg== smnmtoIspUprTorg.nrec and
SMNMTOZAYAVKAREN.cpostavka == smnmtoPostavka.nrec and
SMNMTOZAYAVKAREN.cvpostavki == SMNMTOVIDPOSTAVKI.nrec and
SMNMTOZAYAVKAREN.cGroupMtr == SMNMTOGroupMtr.nrec and
SMNMTOZAYAVKAREN.cPersContr == otvpers.nrec and
SMNMTOZAYAVKAREN.rescomp5 == spkau.nrec
))

Вот баунды для сортировки:
BOUNDS fPid ordered by SMNMTOZAYAVKAREN.PID
BOUNDS fPid2 ordered by SMNMTOZAYAVKAREN.CSPISZREN,SMNMTOZAYAVKAREN.PID //сортировка по ПИД

den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

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

Сообщение den » Ср, 13/05/2015 00:09

в спецификации начинают отображаться строки из совсем других документов, такое ощущение, что сбрасывается связка документ-спецификация


Если Вы делаете PushBounds то, ес-но. слетает условие установленное во where pnrec /== SMNMTOZAYAVKAREN.CSPISZREN (уберите жесткую подцепку)
Правильнее, конечно :
..
order fPid by SMNMTOZAYAVKAREN.PID
order fPid2 SMNMTOZAYAVKAREN.CSPISZREN,SMNMTOZAYAVKAREN.PID

Но тут условия сортировки странные. Ибо, видимо, это таблица спецификации и сортировка должна быть пределах SMNMTOZAYAVKAREN.CSPISZREN .
Т.е. какой смысл имеет установка сортировки fPid в отличие от fPid2 непонятно.

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

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

Сообщение beatlov » Ср, 13/05/2015 13:41

Спасибо за ответ! на счет баундов - да , это одно и то же. Создал два аналогичных индекса - пробовал по всякому избежать сброса ограничения по cspizren. По order - еще раз попробую. Изначально по ним та же самая картина была)
ps:А Почему по PushBound должно сбрасываться условие установленное во where pnrec /== SMNMTOZAYAVKAREN.CSPISZREN ? Оно же напрямую указано в запросе, не в дополнительном bound?

den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

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

Сообщение den » Ср, 13/05/2015 14:15

beatlov писал(а):А Почему по PushBound должно сбрасываться условие установленное во where


А какие доводы что не должно ?
Из документации "Процедура снимает ВСЕ ограничения и устанавливает диапазон, переданный как параметр"

beatlov
заказчик
Сообщения: 49
Зарегистрирован: Пн, 22/12/2008 16:39
Имя Фамилия: Владимир Жуков
Откуда: Северные МН

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

Сообщение beatlov » Ср, 13/05/2015 14:17

Да, все верно. Только я случайно описался. Конечно, не PushBound - а AddBound использовалось

Кстати, когда убрал жесткую связку, вроде бы,сортировка стала отрабатываться корректно. Сейчас тестирую
Последний раз редактировалось beatlov Чт, 14/05/2015 09:43, всего редактировалось 1 раз.


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя