Опять эта сортировка

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Опять эта сортировка

Сообщение Saltava »

Люди добрые, пацкажите :)
Как мовно отсортировать таблицу TMPSaldo3 так, чтоб при Loop'е автоматом выводилось упорядочено по KatPodr.Name, и по TMPSaldo3.cParty?
Viva la resistans
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Т.е. сортировка Подразделение - Партия?
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Maverick
Доброе время суток! :)
Да, в результате таблица должна быть упорядочена во-первых по подразделениям, а внутри подразделений - по партиям. Я уже вывернул это через дополнительные цикл по подразделениям и партиям, но хотелось бы уточнить, как это можно сделать проще. С индексами никак толком разобраться не могу.
Viva la resistans
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Первоначально порядок сортировки в таблицах определяется порядком их подцепки в условии Where главной логической таблицы (интерфейса или отчета с SQL-таблицей). Если же порядок неоднозначный (т.е. подцепка осуществляется по N полям, задающих часть индекса, т.е. N сегментов из M(N<M), которые присутствуют в нескольких индексах), то таблица будет индексирована по первому индексу, описанному в словаре, и его N сегментов совпадают с порядком подцепки. Чтобы явно указать индекс в этом случае, после имени физической таблицы в секции FROM в круглых скобках задают имя индекса: MyTable (MyTable01). Аналогично поступают и в том случае, когда на таблицу не наложено никаких ограничений в WHERE.

Пример1:

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

Create View 
As Select *
From 
 KatSopr,
 SpSopr,
 KatOrg, 
 KatMC,
 KatUsl
Where
((
 Katsopr.NRec == SpSopr.cSopr And
 KatSopr.cOrg == KatOrg.NRec And
 SpSopr.cMcUsl == KatMC.NRec And
 SpSopr.cMcUsl == KatUsl.NRec 
));
В данном случае т.к. KatSopr не ограничена в логической таблице, то она будет индексирована по первому индексу словаря - т.е. по NRec (по индексу KatSopr01),по Nrec же будут индексированы таблицы KatOrg, KatMC и KatUsl. Но их индекс уже будет определяться тем, что в подцепке первым условием подцепки для них используется NRec, а это есть первые сегменты соответствующих индексов по Nrec (KatOrg01, KatMC01 и KatUsl01 соответственно).
Таблица же SpSopr будет индексирована по одному из индексов, первым сегментом которых является поле cSopr. Это индексы SpSopr03, SpSopr05, SpSopr06, SpSopr08 и т.д. По умолчанию система из этих индексов выбирает первый, который описан в словаре - это индекс SpSopr03, т.о. сортировка таблицы SpSopr будет осуществляться по полям cSopr+Npp.

Пример2:

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

Create View 
As Select *
From 
 KatSopr,
 SpSopr (SpSopr11),
 KatOrg, 
 KatMC,
 KatUsl
Where
((
 Katsopr.NRec == SpSopr.cSopr And
 KatSopr.cOrg == KatOrg.NRec And
 SpSopr.cMcUsl == KatMC.NRec And
 SpSopr.cMcUsl == KatUsl.NRec 
));
Данная логическая таблица ничем не отличается от предыдущей, за исключением того, что теперь таблица SpSpor будет отсортирована по полям cSopr+cMcUsl+Npp, т.е. по индексу SpSopr11 (vs его описали в круглых скобках после имени таблицы).

Однако необходимо помнить, что явное указание индекса для таблицы и условие ее подцепки в WHERE должны быть взаимно корректными (т.е. в вышеприаедленных примерах нельзя явно задавать индекс, первым сегментом которого является поле, отличное от cSopr). В этом случае система скомпилирует все, но при инициализации данной лог.таблицы (в интерфейсе, отчете) пользователь получит сообщение об ошибке конфликта используемого индекса и условий ограничения на таблицу.
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Индексы явно можно задавать не только непосредственно в описании логической таблицы, но и уже в самом алгоритме обхода того или иного узла - в ф-ях GetFirst - GetNext - GetPrev - GetLast и в цикле _Loop

Пример 3

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

//цикл  по таблице с типом документа tDoc и годом выписки y

Var  tdoc, y : word;
 ...

If GetFirst BaseDoc Where (( tDoc == BaseDoc.vidDoc And y == BaseDoc )) = tsOk
Do 
{
..
}
While (GetNext BaseDoc Where (( tDoc == BaseDoc.vidDoc And y == BaseDoc )) = tsOk);
Пример 4

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

//встать на последний имеющийся архив для указанного ОС
var cOs : comp;
If GetLast ArcIznos (ArcIznos04) Where ((cOs == ArcIznos.cKatos)) = tsOk then 
{
..
};
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

Предлагаю в опыт, а то использование индексов и сортировки в Галактике - это похоже главные грабли всех начинающих
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Для опыта - слишком мелко. должно быть более подробное изложение.
В моей методичке по курсу Atlantis SQL оно есть.
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Угу. Еще во время прочтения появилась мысль создать раздел FAQ и эту тему туда как пилотную :)
Maverick писал(а):Для опыта - слишком мелко. должно быть более подробное изложение.
В моей методичке по курсу Atlantis SQL оно есть.
ЗЫ вот для раздела FAQ самое оно :)
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

:mrgreen:
материал методичек преподается на курсах. Вэлкам в Тюмень )))
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Saltava
Новичок
Сообщения: 27
Зарегистрирован: 05 июл 2006, 08:44
Откуда: ООО "СИБИНТЕК" г.Ангарск

Сообщение Saltava »

Maverick, благодарен за стольразвернутый ответ :razz:
Буду продолжать безжалостные эксперименты :grin:
Viva la resistans
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

Maverick писал(а)::mrgreen:
материал методичек преподается на курсах. Вэлкам в Тюмень )))
спасибо, уж лучче вы к нам...
Ответить