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

VIP - подсобите с сортировкой browse

Добавлено: 08 апр 2003, 13:14
GTHack
хочу сделать два окошка browse
одно - ДО, второе - накладные для выбранного ДО в первом окошке. ДО должны сортироваться по датам (а у меня по номерам) :(

Interface two_panel 'Две панели' EscClose,cyan;
show at (5,5,150,25);

create view
As select * From basedoc, stepdoc, katsopr
where
((
201/==basedoc.viddoc and
basedoc.nrec /== stepdoc.cbasedoc and
stepdoc.nrec /== katsopr.cstepdoc));

panel P1
browse BDO;
show at(,,50,);
table basedoc;
fields
basedoc.ddoc 'Дата DO':[20],protect;
basedoc.nodoc 'Номер DO':[20],protect;
end;
end;

panel P2
browse BN;
show at(101,,144,);
table katsopr;
fields
katsopr.dsopr 'Дата накл.':[20],protect;
katsopr.nsopr 'Номер накл.':[20],protect;
end;
end;

end.

Re: VIP - подсобите с сортировкой browse

Добавлено: 08 апр 2003, 13:29
GTHack
помогло
order by basedoc.ddoc;

Re: VIP - подсобите с сортировкой browse

Добавлено: 11 апр 2003, 13:39
paul
Измени шапку запроса
create view
As select * From basedoc(basedoc05) where((
...
));
Будет сортироватся по Пятому индексу.
order - работает медленно.

Re: VIP - подсобите с сортировкой browse

Добавлено: 11 апр 2003, 14:19
GTHack
спасибо за ценный совет !

Re: VIP - подсобите с сортировкой browse

Добавлено: 11 апр 2003, 22:12
ecasoft
Алекс!

Интересно, а почему используют не просто подцепку ==, а /==? И вообще тут написали и order by и в подцепке и явное задание индекса - все это может противоречить одно другому, если не понимать как это все взаимосвязано.

Я смотрю здесь /== так часто используют, хотя сами разработчики Галактики этим практически не пользуются.

Для поcтроения запроса (особенно если еще хочешь чтобы он нормльльно отражался в разных окнах интерефейса) надо начать с просмотра индексов таблицы Basedoc. Индексы и задают порядок,в котором будут выводится записи, если в панеле интерфейса задано table basedoc. В секции where при записи через == Вы неявно задаете индекс. Все поля стоящие справа от == и дают составной индекс. Индекс подбирается компилятором. Одной подцепке могут соответсвовать несколько индексов. Чтобы указать какой именно, то используется указание индекса в скобках после имени таблицы. В других случаях это используется редко.

Если написать

where ((
word(201) == Basedoc.viddoc and
tmpDateBeg <<= Basedoc.dDoc and
tmpDateEnd >>= BaseDoc.dDoc and
BaseDoc.Nrec == StepDoc.cBaseDoc and
StepDoc.Nrec == KatSopr.cStepDoc
))

где переменные задают интервал просмотра.

то для сортировки по дате никаких дополнительного указания индексов не нужно, а также порядков и т.д. Это самый быстрый способ работы. Будет нормальная визуализация в окнах.

Игорь

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 09:26
GTHack
Игорь, спасибо за разъяснение, но в данном случае запрос довольно типичный - сортировка определяется по полям одной таблички и для порядка сортировки существует индекс.
а если сортировать надо по данным из нескольких таблиц?

Select
ExClassSeg.name, KatCity.name, KatOrg.Name
From KatOrg, ExClassval, ExClassSeg, basedoc
Where ((
KatOrg.ccity == KatCity.nRec
and ExClassVal.cClassSeg == ExClassSeg.nRec
and KatOrg.nRec == ExClassVal.cRec
and word (1) == ExClassVal.ClassCode
and word (1418) == ExClassVal.wTable
and basedoc.corg == katorg.nrec
and date(1,1,2003)<<=basedoc.ddoc(noindex)
and date(1,4,2003)>>=basedoc.ddoc(noindex)
)) order by ExClassSeg.name, KatCity.name, KatOrg.Name;

сделал order by и получил в ответ предупреждение
"с ограничением Relation Порядок Standart реализуется во внешней выгрузке"
- т.е. она сначала все данные выгружает на локальный комп а потом только накладывает условия и сортирует ?? или как ?

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 09:35
GTHack
да и ещё - как видно по запросу тут строчки дублируются (из за basedoca)
distinct бы после селекта ... а его нет :(

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 09:53
Den
Если сортировать надо по индексам из нескольких таблиц то выходов несколько :

1.Подбираешь нужные тебе индексы в разных таблицах.(если ,конечно, таковые имеются).
2.Делаешь свои нужные индесы в соответсвующих таблицах.
3.Выгружаешь данные в table struct - и "извращаешься" там как угодно :)

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 11:17
ecasoft
Алекс!

Вы не понимаете, что это не SQL просто...я посмотрел Ваш запрос и вообще не понял, что Вы хотите получить...В самом начале Вы хотели совсем другое, по-моему. Теперь появилась классификация...И вы пытаетесь все делать как в настоящем SQL, а это не SQL. Поэтому дело не в сложности запроса, а в том, что просто надо начать с того, как работает ВООБЩЕ Галактический SQL. Может коненчо я ошибаюсь - тогда Вы меня простите пожалуйста. Я просто хотел Вам помочь.

Если почитать этот запрос, то в нем выведутся все ДО за период без каких-либо ограничений вообще...Если Вы думаете, что здесь задали ограничения по организации (вернее признакам, привязанным к организации), то это не так.

И не пользуйтесь Вы noindex - не пользуются этим в интерфейсах! Старайтесь пользоваться лучше конструкцией

В.pole1 == C.pole3 and
( C.pole4 = B.pole2 and
C.pole6 = P.pole6) and

W.oo == G.ppp
....

Чтобы компилятор не ругался на отсутствие индекса.

С уважением, Игорь.

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 11:41
GTHack
Игорь, изо всех сил благодарен Вам за Вашу помощь!

что получить я хотел звучит примерно так:

вывести список организаций у которых за заданный период были движения в basedoc с сортировкой
1. менеджер (внеш.классификатор к организ.)
2. город организации
3. наименование организации

ограничения я задал только на дату ddoc
остальное - подцепки (если не считать ограничений на внеш.классификатор - wtable и classcode)

по датам ограничения работают - проверял
да и вообще запрос рабочий, может и кривой в корягу, но в суппортовском sql работает

как работает ВООБЩЕ Галактический SQL я действительно не совсем понимаю (или вообще не понимаю:( ) т.к. с этим мучаюсь уже второй день - а на accesse написал его за пару минут и всё работает быстро и с сортировками и вообще как надо, мне надо то же самое токо в Галактике

пример на счёт noindex я не понял :(
можно "для тупых" по подробнее

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 12:18
Nuts
Народ
а как в новых фейсах галактики в шапке
брауза стоит серый треугольник нажимаенешь ^ меняется на V и порядок вывода меняется.
Что это за событие и как его прицепить к шапке брауза? ???

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 12:40
forummaster
<HTML>получить порядок сортировки :
function GetColumnSorting( aBrowseId : LongInt; aFieldNo : Integer ) : Integer;

установить порядок сортировки :
procedure SetColumnSorting( aBrowseId : LongInt; aFieldNo : Integer; aSortMode : Integer ) ;

aSortMode: 0 - SortNone, 1 - SortUp, -1 - SortDown

Сброс всех порядков сортировки
procedure ClearColumnsSorting( aBrowseId : LongInt )

...

browse browseW '' ;
table tableX ;
fields
tableX.fieldY '' : ... ;
tableX.fieldZ '' : ... ;
end;

....

handleEvent
...
cmColumnClicked :
{
var ltmpvalue : longint ;
ltmpvalue := targeT ;
case( ltmpvalue ) of
#tableX.fieldY :
begin
setColumnSorting( browseW, ltmpValue, -1 ) ;
setOrder( tibyYYYY ) ;
end;
#tableX.fieldZ :
begin
setColumnSorting( browseW, ltmpValue, -1 ) ;
setOrder( tibyZZZZ ) ;
end;
else setColumnSorting( browseW, ltmpValue, 0 ) ;
end;
rescanPanel( tntableX ) ;
}
....
end; // handleevent</HTML>

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 12:52
Nuts
Ухты класс! Спасибо! А то больно уж юзерам это нравится :) бум пробовать применять...

Re: VIP - подсобите с сортировкой browse

Добавлено: 18 апр 2003, 13:02
GTHack
эта фенечка начиная с какой версии работает ? :)