VIP - подсобите с сортировкой browse
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
VIP - подсобите с сортировкой browse
хочу сделать два окошка 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.
одно - ДО, второе - накладные для выбранного ДО в первом окошке. ДО должны сортироваться по датам (а у меня по номерам)
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.
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
помогло
order by basedoc.ddoc;
order by basedoc.ddoc;
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Re: VIP - подсобите с сортировкой browse
Измени шапку запроса
create view
As select * From basedoc(basedoc05) where((
...
));
Будет сортироватся по Пятому индексу.
order - работает медленно.
create view
As select * From basedoc(basedoc05) where((
...
));
Будет сортироватся по Пятому индексу.
order - работает медленно.
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
спасибо за ценный совет !
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: VIP - подсобите с сортировкой browse
Алекс!
Интересно, а почему используют не просто подцепку ==, а /==? И вообще тут написали и 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
))
где переменные задают интервал просмотра.
то для сортировки по дате никаких дополнительного указания индексов не нужно, а также порядков и т.д. Это самый быстрый способ работы. Будет нормальная визуализация в окнах.
Игорь
Интересно, а почему используют не просто подцепку ==, а /==? И вообще тут написали и 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
))
где переменные задают интервал просмотра.
то для сортировки по дате никаких дополнительного указания индексов не нужно, а также порядков и т.д. Это самый быстрый способ работы. Будет нормальная визуализация в окнах.
Игорь
Некоммерческое общение в форуме
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
Игорь, спасибо за разъяснение, но в данном случае запрос довольно типичный - сортировка определяется по полям одной таблички и для порядка сортировки существует индекс.
а если сортировать надо по данным из нескольких таблиц?
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 реализуется во внешней выгрузке"
- т.е. она сначала все данные выгружает на локальный комп а потом только накладывает условия и сортирует ?? или как ?
а если сортировать надо по данным из нескольких таблиц?
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 реализуется во внешней выгрузке"
- т.е. она сначала все данные выгружает на локальный комп а потом только накладывает условия и сортирует ?? или как ?
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
да и ещё - как видно по запросу тут строчки дублируются (из за basedoca)
distinct бы после селекта ... а его нет
distinct бы после селекта ... а его нет
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
Если сортировать надо по индексам из нескольких таблиц то выходов несколько :
1.Подбираешь нужные тебе индексы в разных таблицах.(если ,конечно, таковые имеются).
2.Делаешь свои нужные индесы в соответсвующих таблицах.
3.Выгружаешь данные в table struct - и "извращаешься" там как угодно
1.Подбираешь нужные тебе индексы в разных таблицах.(если ,конечно, таковые имеются).
2.Делаешь свои нужные индесы в соответсвующих таблицах.
3.Выгружаешь данные в table struct - и "извращаешься" там как угодно
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: VIP - подсобите с сортировкой browse
Алекс!
Вы не понимаете, что это не SQL просто...я посмотрел Ваш запрос и вообще не понял, что Вы хотите получить...В самом начале Вы хотели совсем другое, по-моему. Теперь появилась классификация...И вы пытаетесь все делать как в настоящем SQL, а это не SQL. Поэтому дело не в сложности запроса, а в том, что просто надо начать с того, как работает ВООБЩЕ Галактический SQL. Может коненчо я ошибаюсь - тогда Вы меня простите пожалуйста. Я просто хотел Вам помочь.
Если почитать этот запрос, то в нем выведутся все ДО за период без каких-либо ограничений вообще...Если Вы думаете, что здесь задали ограничения по организации (вернее признакам, привязанным к организации), то это не так.
И не пользуйтесь Вы noindex - не пользуются этим в интерфейсах! Старайтесь пользоваться лучше конструкцией
В.pole1 == C.pole3 and
( C.pole4 = B.pole2 and
C.pole6 = P.pole6) and
W.oo == G.ppp
....
Чтобы компилятор не ругался на отсутствие индекса.
С уважением, Игорь.
Вы не понимаете, что это не SQL просто...я посмотрел Ваш запрос и вообще не понял, что Вы хотите получить...В самом начале Вы хотели совсем другое, по-моему. Теперь появилась классификация...И вы пытаетесь все делать как в настоящем SQL, а это не SQL. Поэтому дело не в сложности запроса, а в том, что просто надо начать с того, как работает ВООБЩЕ Галактический SQL. Может коненчо я ошибаюсь - тогда Вы меня простите пожалуйста. Я просто хотел Вам помочь.
Если почитать этот запрос, то в нем выведутся все ДО за период без каких-либо ограничений вообще...Если Вы думаете, что здесь задали ограничения по организации (вернее признакам, привязанным к организации), то это не так.
И не пользуйтесь Вы noindex - не пользуются этим в интерфейсах! Старайтесь пользоваться лучше конструкцией
В.pole1 == C.pole3 and
( C.pole4 = B.pole2 and
C.pole6 = P.pole6) and
W.oo == G.ppp
....
Чтобы компилятор не ругался на отсутствие индекса.
С уважением, Игорь.
Некоммерческое общение в форуме
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
Игорь, изо всех сил благодарен Вам за Вашу помощь!
что получить я хотел звучит примерно так:
вывести список организаций у которых за заданный период были движения в basedoc с сортировкой
1. менеджер (внеш.классификатор к организ.)
2. город организации
3. наименование организации
ограничения я задал только на дату ddoc
остальное - подцепки (если не считать ограничений на внеш.классификатор - wtable и classcode)
по датам ограничения работают - проверял
да и вообще запрос рабочий, может и кривой в корягу, но в суппортовском sql работает
как работает ВООБЩЕ Галактический SQL я действительно не совсем понимаю (или вообще не понимаю:( ) т.к. с этим мучаюсь уже второй день - а на accesse написал его за пару минут и всё работает быстро и с сортировками и вообще как надо, мне надо то же самое токо в Галактике
пример на счёт noindex я не понял
можно "для тупых" по подробнее
что получить я хотел звучит примерно так:
вывести список организаций у которых за заданный период были движения в basedoc с сортировкой
1. менеджер (внеш.классификатор к организ.)
2. город организации
3. наименование организации
ограничения я задал только на дату ddoc
остальное - подцепки (если не считать ограничений на внеш.классификатор - wtable и classcode)
по датам ограничения работают - проверял
да и вообще запрос рабочий, может и кривой в корягу, но в суппортовском sql работает
как работает ВООБЩЕ Галактический SQL я действительно не совсем понимаю (или вообще не понимаю:( ) т.к. с этим мучаюсь уже второй день - а на accesse написал его за пару минут и всё работает быстро и с сортировками и вообще как надо, мне надо то же самое токо в Галактике
пример на счёт noindex я не понял
можно "для тупых" по подробнее
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Re: VIP - подсобите с сортировкой browse
Народ
а как в новых фейсах галактики в шапке
брауза стоит серый треугольник нажимаенешь ^ меняется на V и порядок вывода меняется.
Что это за событие и как его прицепить к шапке брауза? ???
а как в новых фейсах галактики в шапке
брауза стоит серый треугольник нажимаенешь ^ меняется на V и порядок вывода меняется.
Что это за событие и как его прицепить к шапке брауза? ???
-
- Посетитель
- Сообщения: 46
- Зарегистрирован: 29 мар 2005, 17:49
Re: VIP - подсобите с сортировкой browse
<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>
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
Ухты класс! Спасибо! А то больно уж юзерам это нравится бум пробовать применять...
-
- Местный житель
- Сообщения: 517
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Новосибирск Новосибирск
- Контактная информация:
Re: VIP - подсобите с сортировкой browse
эта фенечка начиная с какой версии работает ?
[url=http://blog.gtalex.ru]Блог GTAlex[/url]