Есть СВОИ две таблицы: "заголовок документа"+"спецификация документа". По ним создан интерфейсы:
1-ый интерфейс- заголовок документов ( обычное дерево)
2-ый интерфейс - спецификация документа (две панели + browse)
В таблице спецификации множество полей, по полям для осуществления сортировки созданы соответствующие индексы ( были опробированы два типа индексов - просто по сортировочному полю , и составной индекс - "поле, по которому осуществляется сортировка"+ поле-ссылка на родительскую таблицу-заголовок).
Испробованы все методы сортировки и через механизм "order ->> SetOrder", и через механизм "Bound ordered by ->PushBounds". Но итог один - при сортировке осуществляется "каша" - в спецификации начианают отображаться строки из совсем других документов, такое ощущение, что сбрасывается связка документ-спецификация. Хотя в сортировке никаких доп.условий и тем более связей нет.
В чем может быть проблема?
Сортировка
-
- заказчик
- Сообщения: 117
- Зарегистрирован: Пт, 26/10/2007 14:16
- Имя Фамилия: Денис Кучин
- Откуда: Геомостпроект НПО
Re: Сортировка
Ну так абстрактно трудно ответить. Вроде работает это дело без особых премудростей
Нужно видеть скрипты таблиц и небольшой код на vip, в качестве примера, что там у Вас.
Нужно видеть скрипты таблиц и небольшой код на vip, в качестве примера, что там у Вас.
-
- заказчик
- Сообщения: 49
- Зарегистрирован: Пн, 22/12/2008 16:39
- Имя Фамилия: Владимир Жуков
- Откуда: Северные МН
Re: Сортировка
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 //сортировка по ПИД
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 //сортировка по ПИД
-
- заказчик
- Сообщения: 117
- Зарегистрирован: Пт, 26/10/2007 14:16
- Имя Фамилия: Денис Кучин
- Откуда: Геомостпроект НПО
Re: Сортировка
Если Вы делаете PushBounds то, ес-но. слетает условие установленное во where pnrec /== SMNMTOZAYAVKAREN.CSPISZREN (уберите жесткую подцепку)в спецификации начинают отображаться строки из совсем других документов, такое ощущение, что сбрасывается связка документ-спецификация
Правильнее, конечно :
..
order fPid by SMNMTOZAYAVKAREN.PID
order fPid2 SMNMTOZAYAVKAREN.CSPISZREN,SMNMTOZAYAVKAREN.PID
Но тут условия сортировки странные. Ибо, видимо, это таблица спецификации и сортировка должна быть пределах SMNMTOZAYAVKAREN.CSPISZREN .
Т.е. какой смысл имеет установка сортировки fPid в отличие от fPid2 непонятно.
-
- заказчик
- Сообщения: 49
- Зарегистрирован: Пн, 22/12/2008 16:39
- Имя Фамилия: Владимир Жуков
- Откуда: Северные МН
Re: Сортировка
Спасибо за ответ! на счет баундов - да , это одно и то же. Создал два аналогичных индекса - пробовал по всякому избежать сброса ограничения по cspizren. По order - еще раз попробую. Изначально по ним та же самая картина была)
ps:А Почему по PushBound должно сбрасываться условие установленное во where pnrec /== SMNMTOZAYAVKAREN.CSPISZREN ? Оно же напрямую указано в запросе, не в дополнительном bound?
ps:А Почему по PushBound должно сбрасываться условие установленное во where pnrec /== SMNMTOZAYAVKAREN.CSPISZREN ? Оно же напрямую указано в запросе, не в дополнительном bound?
-
- заказчик
- Сообщения: 117
- Зарегистрирован: Пт, 26/10/2007 14:16
- Имя Фамилия: Денис Кучин
- Откуда: Геомостпроект НПО
Re: Сортировка
А какие доводы что не должно ?beatlov писал(а):А Почему по PushBound должно сбрасываться условие установленное во where
Из документации "Процедура снимает ВСЕ ограничения и устанавливает диапазон, переданный как параметр"
-
- заказчик
- Сообщения: 49
- Зарегистрирован: Пн, 22/12/2008 16:39
- Имя Фамилия: Владимир Жуков
- Откуда: Северные МН
Re: Сортировка
Да, все верно. Только я случайно описался. Конечно, не PushBound - а AddBound использовалось
Кстати, когда убрал жесткую связку, вроде бы,сортировка стала отрабатываться корректно. Сейчас тестирую
Кстати, когда убрал жесткую связку, вроде бы,сортировка стала отрабатываться корректно. Сейчас тестирую
Последний раз редактировалось beatlov Чт, 14/05/2015 09:43, всего редактировалось 1 раз.